<?xml version="1.0" encoding="UTF-8"?>
<!-- 
Ver.   Date            By                         Action
1.8     10-Feb-04   Mark McCuistion  Corrected 2 attributes in complex type "attributeType" due to non-conformance with W3C schema standard-->
<!-- 
Ver.   Date            By                         Action
1.8     1-Apr-04   Mark McCuistion  Altered occurrence constraints of specification groups for partroles and components to conform to older XML Schema standards.-->
<!-- 
Ver.   Date            By                         Action
1.8     19-Apr-04  Mark McCuistion  Added "Percent" as valid unitOfMeasure.
                                                         Removed "any" elements from schema as they violated the "Unique Particle Attribution rule"-->
<!-- 
Ver.   Date            By                         Action
1.8     20-Apr-04  Mark McCuistion  Made valueid attribute of attribute element inside test criterion optional. 
                                                         Fixed problem where parens could not be closed properly in test criteria expressions.-->
<!-- 
Ver.   Date            By                         Action
1.9     17-Aug-04  Mark McCuistion  Gave operator element inside atom element inside attributeExpressionType a default value.-->
<xsd:schema targetNamespace="FurnXMLItem_v1.9" xmlns:fnParty="http://support.furnishnet.com/xml/schemas/fnParty_v1.4" xmlns:fnBase="http://support.furnishnet.com/xml/schemas/fnBase_v1.4" xmlns:fnItem="http://support.furnishnet.com/xml/schemas/fnItem_v1.4" xmlns:xlink="xlink" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ucc_ia="UCCIA" xmlns:furn_ia="FurnXMLItem_v1.9" version="1.9">
	<xsd:annotation>
		<xsd:documentation>This schema defines the proposed industry standard for describing furniture items in a furniture catalog. Documents based on this schema can describe both casegoods and custom order upholstery.</xsd:documentation>
	</xsd:annotation>
	<xsd:import namespace="UCCIA" schemaLocation="UCCIA.xsd">
		<xsd:annotation>
			<xsd:documentation>Get access to the © Get access to ItemType element from ItemAlignment.xsd</xsd:documentation>
		</xsd:annotation>
	</xsd:import>
	<xsd:import namespace="http://support.furnishnet.com/xml/schemas/fnBase_v1.4" schemaLocation="http://support.furnishnet.com/xml/schemas/fn_base_v1.4.xsd"/>
	<xsd:import namespace="http://support.furnishnet.com/xml/schemas/fnItem_v1.4" schemaLocation="http://support.furnishnet.com/xml/schemas/fn_item_v1.4.xsd"/>
	<xsd:import namespace="http://support.furnishnet.com/xml/schemas/fnParty_v1.4" schemaLocation="http://support.furnishnet.com/xml/schemas/fn_party_v1.4.xsd"/>
	<xsd:import namespace="xlink" schemaLocation="xlink.xsd"/>
	<xsd:simpleType name="tradeInformationItemClassType">
		<xsd:annotation>
			<xsd:documentation>Enumerated type with list of item classes</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:enumeration value="terms_and_conditions"/>
			<xsd:enumeration value="warranty_information"/>
			<xsd:enumeration value="generic"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:complexType name="tradeInformationItemType">
		<xsd:annotation>
			<xsd:documentation>Item containing some details about the vendor's trade practices. Often times this information is printed in the front of the paper price book.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="title" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Title of the information item. Examples: "Terms and Conditions", "Warranty Information".</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="description" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Text description of what the information is about.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="info" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Actual text information</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="optional"/>
		<xsd:attribute name="class" type="furn_ia:tradeInformationItemClassType" default="generic"/>
	</xsd:complexType>
	<xsd:simpleType name="publishingDataItemClassType">
		<xsd:annotation>
			<xsd:documentation>Enumerated type with list of item classes</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:enumeration value="generic"/>
			<xsd:enumeration value="terms_and_conditions"/>
			<xsd:enumeration value="warranty_information"/>
			<xsd:enumeration value="logo"/>
			<xsd:enumeration value="printable_catalog_partial"/>
			<xsd:enumeration value="printable_catalog_whole"/>
			<xsd:enumeration value="printable_price_book_partial"/>
			<xsd:enumeration value="printable_price_book_whole"/>
			<xsd:enumeration value="printable_price_book_binder"/>
			<xsd:enumeration value="printable_price_book_configuration_rules"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="parenType">
		<xsd:annotation>
			<xsd:documentation>Represents open or close paren for expressions</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:enumeration value="close"/>
			<xsd:enumeration value="open"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="unitOfMeasureType">
		<xsd:restriction base="string">
			<xsd:enumeration value="Each"/>
			<xsd:enumeration value="Pieces"/>
			<xsd:enumeration value="Pair"/>
			<xsd:enumeration value="Boxes"/>
			<xsd:enumeration value="Cartons"/>
			<xsd:enumeration value="Crates"/>
			<xsd:enumeration value="Pallets"/>
			<xsd:enumeration value="Centimeters"/>
			<xsd:enumeration value="Inches"/>
			<xsd:enumeration value="Feet"/>
			<xsd:enumeration value="Yards"/>
			<xsd:enumeration value="Meters"/>
			<xsd:enumeration value="SquareInches"/>
			<xsd:enumeration value="SquareFeet"/>
			<xsd:enumeration value="SquareYards"/>
			<xsd:enumeration value="SquareMeters"/>
			<xsd:enumeration value="RunningFeet"/>
			<xsd:enumeration value="RunningYards"/>
			<xsd:enumeration value="RunningMeters"/>
			<xsd:enumeration value="CubicCentimeters"/>
			<xsd:enumeration value="CubicInches"/>
			<xsd:enumeration value="CubicFeet"/>
			<xsd:enumeration value="CubicYards"/>
			<xsd:enumeration value="CubicMeters"/>
			<xsd:enumeration value="Pounds"/>
			<xsd:enumeration value="Kilograms"/>
			<xsd:enumeration value="Tons"/>
			<xsd:enumeration value="Hours"/>
			<xsd:enumeration value="CalendarDays"/>
			<xsd:enumeration value="WorkingDays"/>
			<xsd:enumeration value="Ounces"/>
			<xsd:enumeration value="Percent"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:complexType name="quantityType">
		<xsd:attribute name="unitOfMeasure" type="furn_ia:unitOfMeasureType" use="required"/>
		<xsd:attribute name="value" type="float" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="publishingDataItemType">
		<xsd:annotation>
			<xsd:documentation>Defines a file that may be contain printable or viewable information associated with the catalog.</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="furn_ia:imageType">
				<xsd:attribute name="id" type="furn_ia:idType" use="optional"/>
				<xsd:attribute name="class" type="furn_ia:publishingDataItemClassType" use="required"/>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:simpleType name="logicalOperatorType">
		<xsd:annotation>
			<xsd:documentation>A logical operator: OR or AND</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:enumeration value="and"/>
			<xsd:enumeration value="or"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="arithmeticOperatorType">
		<xsd:annotation>
			<xsd:documentation>Arithmetic operator</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:enumeration value="add"/>
			<xsd:enumeration value="subtract"/>
			<xsd:enumeration value="multiply"/>
			<xsd:enumeration value="divide"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="comparisonOperatorType">
		<xsd:annotation>
			<xsd:documentation>An operator that compares 2 items together</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:enumeration value="less_than"/>
			<xsd:enumeration value="less_than_or_equal"/>
			<xsd:enumeration value="equal"/>
			<xsd:enumeration value="not_equal"/>
			<xsd:enumeration value="greater_than"/>
			<xsd:enumeration value="greater_than_or_equal"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:simpleType name="idType">
		<xsd:annotation>
			<xsd:documentation>Definition of an id as used to identify any item in the catalog</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:maxLength value="32"/>
			<xsd:pattern value="([A-Z]|[a-z]|[0-9]|-|_|#)+"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:complexType name="imageDimType">
		<xsd:annotation>
			<xsd:documentation>Dimensions of a graphic image</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="dimUnits" use="required">
			<xsd:annotation>
				<xsd:documentation>Specifies the units used in the dimensions: pixels or DPI.</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="PIXELS"/>
					<xsd:enumeration value="PIXELS_PER_INCH"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="dimX" type="float" use="required"/>
		<xsd:attribute name="dimY" type="float" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="imageType">
		<xsd:annotation>
			<xsd:documentation>Represents a graphic image related to any appropriate element in the product catalog</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="description" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Description of the image. This can be a description of the content of the image or any other author-defined description.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="dimensions" type="furn_ia:imageDimType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of dimension elements to describe the extents of the image. The units of each dimension element are unique.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:choice>
				<xsd:element name="link" type="furn_ia:xLinkImageType">
					<xsd:annotation>
						<xsd:documentation>XLink to the image</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="href" type="string">
					<xsd:annotation>
						<xsd:documentation>Simple URI string representing location of image</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:choice>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="xLinkImageType">
		<xsd:annotation>
			<xsd:documentation>Future XLink image link</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute ref="xlink:type" use="optional" fixed="simple"/>
		<xsd:attribute ref="xlink:href" use="required"/>
		<xsd:attribute ref="xlink:role" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="packagingMaterialCharacteristicsType">
		<xsd:sequence>
			<xsd:element name="packagingMaterial" type="furn_ia:attributeDescriptionType" maxOccurs="unbounded"/>
			<xsd:element name="packagingMaterialDescriptionLanguage" type="string" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="packagingMaterialComposition" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="32"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="packagingMaterialType" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="packagingType" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="packagingMarkingCharacteristicsType">
		<xsd:attribute name="markedWithIngredients" type="boolean" use="optional"/>
		<xsd:attribute name="packagingMarkedAsRecyclable" type="boolean" use="optional"/>
		<xsd:attribute name="packagingMarkedAsReturnable" type="boolean" use="optional"/>
		<xsd:attribute name="productMarkedAsRecyclable" type="boolean" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="hazardousInformationType">
		<xsd:sequence minOccurs="0">
			<xsd:element name="dangerousGoodsTechnicalName" type="string" minOccurs="0"/>
			<xsd:element name="dangerousGoodsSubstanceIdentificationNumber" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:maxLength value="4"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="dangerousGoodsItemNumberLetter" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:maxLength value="6"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="hazardCode" type="byte" use="optional"/>
		<xsd:attribute name="hazardousTypeClassificationSystem" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="ADR"/>
					<xsd:enumeration value="RID"/>
					<xsd:enumeration value="UN"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="flashPointTemperature" type="float" use="optional"/>
		<xsd:attribute name="flashPointTemperatureUnitOfMeasure" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="handlingInformationType">
		<xsd:sequence minOccurs="0">
			<xsd:element name="storageHandlingTemperature" type="ucc_ia:TemperatureType" minOccurs="0"/>
			<xsd:element name="stackingWeight" type="ucc_ia:StackingWeightType" minOccurs="0"/>
			<xsd:element name="handlingInstructions" type="string" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
		<xsd:attribute name="palletDataPalletTypeOrCode" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="palletDataPalletHandlingOneWayReusable" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="25"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="stackingFactor" type="integer" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="tradeItemGroupType">
		<xsd:sequence>
			<xsd:element name="tradeItemGroupDescription" type="string"/>
		</xsd:sequence>
		<xsd:attribute name="tradeItemGroupCode" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="tradeItemGroupCodeAgency" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="tradeItemGroupType" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="2"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="tradeItemQuantitiesType">
		<xsd:annotation>
			<xsd:documentation>Specifies min and max quantities sold for an item</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="orderQuantityMaximum" type="ucc_ia:MeasurementType" minOccurs="0"/>
			<xsd:element name="orderQuantityMinimum" type="ucc_ia:MeasurementType" minOccurs="0"/>
			<xsd:element name="orderQuantityMultiple" type="ucc_ia:MeasurementType" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="orderSizingFactor" type="integer" use="optional"/>
		<xsd:attribute name="minimumShip" type="integer" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="tradeItemCharacteristicsType">
		<xsd:annotation>
			<xsd:documentation>Certain trade characteristics</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="pricingOnTheProduct" type="boolean" use="optional"/>
		<xsd:attribute name="rightOfReturnForNonSoldTradeItems" type="boolean" use="optional"/>
		<xsd:attribute name="tradeItemBarCoded" type="boolean" use="optional"/>
		<xsd:attribute name="variableWeightTradeItem" type="boolean" use="optional"/>
		<xsd:attribute name="targetMarketCountryCode" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="2"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="countryOfOrigin" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="2"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="minimumProductLifeSpanFromTimeOfProduction" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="4"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="form" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="35"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="tradeItemMeasuresType">
		<xsd:annotation>
			<xsd:documentation>Specifies certain measurements for an item</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="degreeOfOriginalWort" use="optional">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="numberOfCompleteLayersPerTradeItem" type="integer" use="optional"/>
		<xsd:attribute name="numberOfLayersPerPallet" type="integer" use="optional"/>
		<xsd:attribute name="numberOfTradeItemsContainedInACompleteLayer" type="integer" use="optional"/>
		<xsd:attribute name="numberOfTradeItemsPerPallet" type="integer" use="optional"/>
		<xsd:attribute name="numberOfTradeItemsPerPalletLayer" type="integer" use="optional"/>
	</xsd:complexType>
	<xsd:simpleType name="attributeClassType">
		<xsd:annotation>
			<xsd:documentation>Predefined list of industry attribute types. Defines clear mapping of component attributes without imposing a vocabulary</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="string">
			<xsd:enumeration value="generic"/>
			<xsd:enumeration value="content"/>
			<xsd:enumeration value="collection"/>
			<xsd:enumeration value="itemType"/>
			<xsd:enumeration value="grade"/>
			<xsd:enumeration value="cleaningCode"/>
			<xsd:enumeration value="fireCode"/>
			<xsd:enumeration value="thickness"/>
			<xsd:enumeration value="color"/>
			<xsd:enumeration value="applicationArea"/>
			<xsd:enumeration value="height"/>
			<xsd:enumeration value="width"/>
			<xsd:enumeration value="depth"/>
			<xsd:enumeration value="volume"/>
			<xsd:enumeration value="area"/>
			<xsd:enumeration value="repeatHeight"/>
			<xsd:enumeration value="repeatWidth"/>
			<xsd:enumeration value="weight"/>
			<xsd:enumeration value="NHFACode"/>
			<xsd:enumeration value="dimension"/>
		</xsd:restriction>
	</xsd:simpleType>
	<xsd:complexType name="attributeDescriptionType">
		<xsd:sequence>
			<xsd:element name="description" type="string"/>
		</xsd:sequence>
		<xsd:attribute name="codeValue" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="listAgency" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:maxLength value="3"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="affixProductIDType">
		<xsd:annotation>
			<xsd:documentation>Specification of how one productID is affixed to another. INNER insertions are where the productID is inserted before some existing character in the host productID. OUTER insertions are where the productID is appended to the end of the host productID.</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="insertionLocation" use="required">
			<xsd:annotation>
				<xsd:documentation>Type of insertion to occur. INNER means the insertion will be before one of the existing characters in the original productID.</xsd:documentation>
			</xsd:annotation>
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="INNER"/>
					<xsd:enumeration value="OUTER"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="insertionIndex" type="nonNegativeInteger" default="0">
			<xsd:annotation>
				<xsd:documentation>Specifies the 0-based index within the original productID where the affixed productID will be inserted. Ignored for OUTER insertions.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="priorityIndex" type="nonNegativeInteger" default="0">
			<xsd:annotation>
				<xsd:documentation>Defines the order in which multiple productID's are inserted to the same index. Lower priority values are inserted first.</xsd:documentation>
			</xsd:annotation>
		</xsd:attribute>
		<xsd:attribute name="replaceNChars" type="nonNegativeInteger" default="0"/>
	</xsd:complexType>
	<xsd:complexType name="attributeType">
		<xsd:annotation>
			<xsd:documentation>Used as the name of a group of attributes</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="name" type="string"/>
			<xsd:element name="baseUnit" type="fnBase:unitOfMeasureType" minOccurs="0"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
		<xsd:attribute name="contentTag" type="furn_ia:attributeClassType" use="optional" default="generic"/>
		<xsd:attribute name="isMetaData" type="boolean" use="optional" default="false"/>
		<xsd:attribute name="measurementType" use="optional" default="none">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="none"/>
					<xsd:enumeration value="numeric"/>
					<xsd:enumeration value="nonNumeric"/>
					<xsd:enumeration value="assisted"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="rank" type="int" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="attributeAssignType">
		<xsd:annotation>
			<xsd:documentation>Assigns an attribute value to an item with optional expression info</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence minOccurs="0">
			<xsd:element name="measurementDisplay" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>For attribute values that involve a measurement, this is the actual value of the measurement but formatted as the catalog producer wishes to display it.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="measurementNumeric" type="furn_ia:quantityType">
				<xsd:annotation>
					<xsd:documentation>Actual floating version of the measurement.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
		<xsd:attribute name="valueid" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="attributeExpressionAtomType">
		<xsd:annotation>
			<xsd:documentation>Attribute comparison atom used to build more complex expressions</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence maxOccurs="unbounded">
			<xsd:element name="attribute">
				<xsd:annotation>
					<xsd:documentation>Attribute involved in the expression</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
					<xsd:attribute name="valueid" type="furn_ia:idType" use="optional"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="measurementNumeric" type="fnBase:quantityType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Numeric constant used when the attribute represents a numeric measurement</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="operator" type="furn_ia:comparisonOperatorType" default="equal">
				<xsd:annotation>
					<xsd:documentation>Specifies how the attribute of the target must relate to the attribute in the expression. For non-numeric attributes, only equal and not-equal are valid.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="attributeExpressionType">
		<xsd:annotation>
			<xsd:documentation>Complex logical expression involving attributes</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:sequence>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="atom" type="furn_ia:attributeExpressionAtomType"/>
			</xsd:sequence>
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="logicalOperator" type="furn_ia:logicalOperatorType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="atom" type="furn_ia:attributeExpressionAtomType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="close" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="attributeValueType">
		<xsd:annotation>
			<xsd:documentation>Value of some attribute. May be a predefined value or assigned directly to an item.

The "class" attribute is used to positively identify certain mappable information items.


The "isMetaData" attribute specifies if the attribute is really a physical attribute of the item to which it is assigned or is used as a means of grouping items within the document structure.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="attribute">
				<xsd:annotation>
					<xsd:documentation>Associates the attribute to a group of attributes under this name</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="value" type="string">
				<xsd:annotation>
					<xsd:documentation>Actual value for the attribute. Stored as text.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="numericMeasurement" type="float" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Some attributes may be numerically assisted. This means they have a numeric value as well as a text value. </xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="description" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Text describing what the attribute means. Typically viewed by end users.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="attributeMapType">
		<xsd:annotation>
			<xsd:documentation>Maps one or more values to another value</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="parentAttributeValue" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>If present, the source attributes are assumed to be sub-attributes of this attribute.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="attributeValue" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>1 or more source values. </xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="attributeTableType">
		<xsd:annotation>
			<xsd:documentation>Table of all item attributes and values. Attributes are properties or characteristics that are assigned to items, options or materials to better describe them or provide search criteria.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="attributes">
				<xsd:annotation>
					<xsd:documentation>Any number of attributes. Attributes are properties or characteristics that describe an item, option or material.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="attribute" type="furn_ia:attributeType" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>Any number of attribute groups</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="attributeValues">
				<xsd:annotation>
					<xsd:documentation>Any number of predefined attribute values. This table will represent predefined values for one or more of the attributes defined in the table above. Values are predefined so that they may be assigned to items simply by ID. This provides consistency and efficiency in the implemenation.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="attributeValue" type="furn_ia:attributeValueType" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>Any number of attribute values</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
				<xsd:keyref name="attRef1" refer="furn_ia:attributeKey">
					<xsd:selector xpath="attributeValue/attribute"/>
					<xsd:field xpath="@id"/>
				</xsd:keyref>
			</xsd:element>
			<xsd:element name="valueMap" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>The value map contains a list of value map entries. Each entry maps one or more source attribute values to one destination value. This is useful in combining many itemTypes into one parent itemType.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="entry" type="furn_ia:attributeMapType" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>One entry in the value map. Maps one or more source values to one destination value.</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
				<xsd:keyref name="mapRef1" refer="furn_ia:attributeValueKey">
					<xsd:selector xpath="entry/attributeValue"/>
					<xsd:field xpath="@id"/>
				</xsd:keyref>
				<xsd:keyref name="mapRef2" refer="furn_ia:attributeValueKey">
					<xsd:selector xpath="entry/parentAttributeValue"/>
					<xsd:field xpath="@id"/>
				</xsd:keyref>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="testType">
		<xsd:annotation>
			<xsd:documentation>tests are logical expressions that govern pricing and configuration.</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="testName" type="string">
				<xsd:annotation>
					<xsd:documentation>Descriptive name for the test used for administrative purposes.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="criteria" type="furn_ia:testCriteriaExpressionType">
				<xsd:annotation>
					<xsd:documentation>Criteria to be tested to determine the value of the test (true or false)</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="testAssignmentType">
		<xsd:annotation>
			<xsd:documentation>Assigns a test via its id to some sequence.

id - Identifier of the assigned test in the test table.

positive - If "true", the test is checked for positive result, otherwise the negative is tested.</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
		<xsd:attribute name="positive" type="boolean" use="optional" default="true"/>
	</xsd:complexType>
	<xsd:complexType name="testCriterionType">
		<xsd:annotation>
			<xsd:documentation>A test criterion is test or check for some existing condition in the configuration of a component.

The condition tested for may be based on one of the following methods specified in the "qualifier" attribute:

1) exists - checks for the existence of a part or parts being filled by a componentwith some set of characteristics.

2) countComponents - counts the number of unique components filling a part or parts.

3) compareComponents - compares the components filling 2 different part roles

4) compareAttributes - compares an attribute of 2 components filling 2 different part roles

5) isSubItem - checks to see if a component is filling a part role of another component.

</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="left">
				<xsd:annotation>
					<xsd:documentation>Left operand of the criterion expression. May or may be not be accompanied by a right operand.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:group ref="furn_ia:componentPartSpecificationGroup"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="right" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>If the criterion qualifier is "compareComponents" or "compareAttributes" this second operand will be present</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:group ref="furn_ia:componentPartSpecificationGroup"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:choice minOccurs="0">
				<xsd:element name="attribute">
					<xsd:annotation>
						<xsd:documentation>If criterion qualifier is "compareAttributes" this element will specify what attribute will be compared</xsd:documentation>
					</xsd:annotation>
					<xsd:complexType>
						<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
						<xsd:attribute name="valueid" type="furn_ia:idType" use="optional"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="contentTag" type="furn_ia:attributeClassType">
					<xsd:annotation>
						<xsd:documentation>Alternatively the attribute can specifed as a tag instead of a specific attribute id</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:choice>
			<xsd:element name="operator" type="furn_ia:comparisonOperatorType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>When a comparison is made between 2 operands this is the operator used.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="qualifier" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="exists"/>
					<xsd:enumeration value="countComponents"/>
					<xsd:enumeration value="compareComponents"/>
					<xsd:enumeration value="compareAttributes"/>
					<xsd:enumeration value="isSubItem"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
		<xsd:attribute name="min" type="integer" use="optional" default="1"/>
		<xsd:attribute name="max" type="integer" use="optional" default="1"/>
	</xsd:complexType>
	<xsd:complexType name="testCriteriaExpressionType">
		<xsd:annotation>
			<xsd:documentation>A logical expression involving one or more test criteria</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:sequence>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="criterion" type="furn_ia:testCriterionType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="close" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="logicalOperator" type="furn_ia:logicalOperatorType">
					<xsd:annotation>
						<xsd:documentation>Logical operator combines criteria to create more complex and/or nested expressions</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="criterion" type="furn_ia:testCriterionType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="close" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="testTableType">
		<xsd:annotation>
			<xsd:documentation>Table of all tests used throughout the catalog</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="test" maxOccurs="unbounded">
				<xsd:complexType>
					<xsd:complexContent>
						<xsd:extension base="furn_ia:testType"/>
					</xsd:complexContent>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:group name="partRoleSpecificationGroup">
		<xsd:annotation>
			<xsd:documentation>Method for specifiying part roles</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:annotation>
				<xsd:documentation>We can have any number of specific part role ids followed by an optional part role attribute expression</xsd:documentation>
			</xsd:annotation>
			<xsd:element name="partRole" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>A specific part role</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="partRoleExpression" type="furn_ia:attributeExpressionType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>An attribute expression representing one or more part roles</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="partRoleGroup" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Part role group(s)</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="componentSpecificationGroup">
		<xsd:annotation>
			<xsd:documentation>Specifies components that may fill part roles. All components meeting the specification are logically OR'd together.</xsd:documentation>
		</xsd:annotation>
		<xsd:choice>
			<xsd:element name="component" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Specific component id</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="componentExpression" type="furn_ia:attributeExpressionType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Component attribute expression</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="componentGroup" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Component group(s)</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:choice>
	</xsd:group>
	<xsd:group name="componentPartSpecificationGroup">
		<xsd:annotation>
			<xsd:documentation>Specifies part roles and/or components that have filled those part roles</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:group ref="furn_ia:partRoleSpecificationGroup" minOccurs="0"/>
			<xsd:group ref="furn_ia:componentSpecificationGroup" minOccurs="0"/>
		</xsd:sequence>
	</xsd:group>
	<xsd:complexType name="itemDescriptionType">
		<xsd:annotation>
			<xsd:documentation>Describes items in a uniform way.</xsd:documentation>
		</xsd:annotation>
		<xsd:attribute name="descriptionValue" type="string" use="required"/>
		<xsd:attribute name="itemDescriptionQualifier" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="BuyerAssigned"/>
					<xsd:enumeration value="SellerAssigned"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="itemIdentifierType">
		<xsd:annotation>
			<xsd:documentation>All fields to properly identify a component item</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="itemIdentifier" type="fnItem:itemNumberType" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Allows the use of multiple identifiers by which a single item may be known: seller assigned, buyer assigned, UPC, and Global Trade Identification Number (GTIN), and EAN.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="itemClassification">
				<xsd:annotation>
					<xsd:documentation>Furniture specific classification</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:enumeration value="cover"/>
						<xsd:enumeration value="item"/>
						<xsd:enumeration value="finish"/>
						<xsd:enumeration value="trim"/>
						<xsd:enumeration value="color"/>
						<xsd:enumeration value="option"/>
						<xsd:enumeration value="other"/>
						<xsd:enumeration value="warranty"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="itemDescription" type="furn_ia:itemDescriptionType" minOccurs="0" maxOccurs="2">
				<xsd:annotation>
					<xsd:documentation>Allows the use of up to two descriptions by which a single item may be known: seller assigned and buyer assigned.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="additionalAttributeDescription" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of attribute descriptions. Each of these can describe any aspect of the item</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="attributeName" type="string">
							<xsd:annotation>
								<xsd:documentation>Name of some attribute of the item</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
						<xsd:element name="description" type="string">
							<xsd:annotation>
								<xsd:documentation>Description of that attribute</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="tradeItemBrandName" type="string" minOccurs="0"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="baseItemType">
		<xsd:annotation>
			<xsd:documentation>Defines a catalog item</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="identification" type="furn_ia:itemIdentifierType"/>
			<xsd:element name="startAvailability" type="ucc_ia:DateChoiceType" minOccurs="0"/>
			<xsd:element name="releaseDateAndTimeForViewing" type="ucc_ia:DateChoiceType" minOccurs="0"/>
			<xsd:element name="effectiveChange" type="ucc_ia:DateChoiceType" minOccurs="0"/>
			<xsd:element name="lastChange" type="ucc_ia:DateChoiceType" minOccurs="0"/>
			<xsd:element name="endAvailability" type="ucc_ia:DateChoiceType" minOccurs="0"/>
			<xsd:element name="firstSale" type="ucc_ia:DateChoiceType" minOccurs="0"/>
			<xsd:element name="partiesReceivingNonPublicData" type="fnParty:partyIdentificationType" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="manufacturer" type="fnParty:partyIdentificationType" minOccurs="0"/>
			<xsd:element name="informationProvider" type="fnParty:partyIdentificationType" minOccurs="0"/>
			<xsd:element name="nonPublicIndicator" type="boolean" minOccurs="0"/>
			<xsd:element name="tradeItemGroup" type="furn_ia:tradeItemGroupType" minOccurs="0" maxOccurs="unbounded"/>
			<xsd:element name="tradeItemMeasures" type="furn_ia:tradeItemMeasuresType" minOccurs="0"/>
			<xsd:element name="handlingInformation" type="furn_ia:handlingInformationType" minOccurs="0"/>
			<xsd:element name="hazardousInformation" type="furn_ia:hazardousInformationType" minOccurs="0"/>
			<xsd:element name="materialSafetyDataSheet" type="boolean" minOccurs="0"/>
			<xsd:element name="tradeItemCharacteristics" type="furn_ia:tradeItemCharacteristicsType" minOccurs="0"/>
			<xsd:element name="packagingMaterialCharacteristics" type="furn_ia:packagingMaterialCharacteristicsType" minOccurs="0"/>
			<xsd:element name="packagingMarkingCharacteristics" type="furn_ia:packagingMarkingCharacteristicsType" minOccurs="0"/>
			<xsd:element name="unitIndicator" type="ucc_ia:UnitIndicatorType" minOccurs="0"/>
			<xsd:element name="tradeItemQuantities" type="furn_ia:tradeItemQuantitiesType" minOccurs="0"/>
			<xsd:element name="attribute" type="furn_ia:attributeAssignType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of attribute values associated with the item. These are references to predefined attribute values in the attribute table.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="partRoleType">
		<xsd:annotation>
			<xsd:documentation>Defines a part role possible for any component</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="partRoleName" type="string">
				<xsd:annotation>
					<xsd:documentation>Idenitifies the role of the part in the component's configuration.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="identification" type="furn_ia:itemIdentifierType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any custom code associated with the part.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="attribute" type="furn_ia:attributeAssignType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Attributes assigned to the part role definition</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="group" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of groups that the part role belongs to</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
		<xsd:attribute name="partRoleType" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="subItem"/>
					<xsd:enumeration value="cover"/>
					<xsd:enumeration value="trim"/>
					<xsd:enumeration value="finish"/>
					<xsd:enumeration value="color"/>
					<xsd:enumeration value="generic"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="partRoleGroupType">
		<xsd:annotation>
			<xsd:documentation>Represents group of part roles</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="groupName" type="string"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="partRoleTableType">
		<xsd:annotation>
			<xsd:documentation>Table of all part role definitions used in the catalog</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="groups" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>List of part role groups. Part roles are assigned to groups inside of the individual part role elements</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="group" type="furn_ia:partRoleGroupType" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="partRoles">
				<xsd:annotation>
					<xsd:documentation>List of part roles</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="partRole" type="furn_ia:partRoleType" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
				<xsd:keyref name="partRoleRef1" refer="furn_ia:attributeKey">
					<xsd:selector xpath="partRole/attribute"/>
					<xsd:field xpath="@id"/>
				</xsd:keyref>
				<xsd:keyref name="partRoleRef2" refer="furn_ia:partRoleGroupKey">
					<xsd:selector xpath="partRole/group"/>
					<xsd:field xpath="@id"/>
				</xsd:keyref>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="componentPartType">
		<xsd:annotation>
			<xsd:documentation>Assigns a part role to a component</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="test" type="furn_ia:testAssignmentType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Test governing the applicability of this part</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="partRole">
				<xsd:annotation>
					<xsd:documentation>Part role in the component configuration defining what is actually being done to the base component when the part is filled by a component.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="minChoices" type="unsignedInt">
				<xsd:annotation>
					<xsd:documentation>The minimum number of components that may fill the role defined by the part. If 0, the role is optional. If 1 or greater, the role is mandatory.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="maxChoices" type="unsignedInt" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>The maximum number of components that may fill the role defined by the part. If NULL, there is no limit.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="constraint" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Specify components that are valid for filling a given component's part role</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:complexContent>
						<xsd:extension base="furn_ia:partConstraintType">
							<xsd:attribute name="mode" use="required">
								<xsd:simpleType>
									<xsd:restriction base="xsd:string">
										<xsd:enumeration value="default"/>
										<xsd:enumeration value="override"/>
									</xsd:restriction>
								</xsd:simpleType>
							</xsd:attribute>
						</xsd:extension>
					</xsd:complexContent>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="sequenceNumber" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Number assigned to the component/part to allow processing applications to recognize the part without understanding the part role name</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="resource" type="furn_ia:resourceAssignmentType" minOccurs="0"/>
			<xsd:element name="partPricingRule" type="furn_ia:componentPartPricingRuleType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Price for a component part.

The "id" attribute specifies the part role being priced.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="partConstraintSetType">
		<xsd:annotation>
			<xsd:documentation>Defines set of constraints for components that may fill a part role</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="test" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>If the not NULL, the test must be TRUE for the constraint to be valid.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="constraint" type="furn_ia:partConstraintType" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of constraints in the set</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="partConstraintType">
		<xsd:annotation>
			<xsd:documentation>Defines allowable components to fill a part role</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation>Can be one component designated default, optional or mandatory.

Note that "default" is only valid when there is one component specified.

Abstract components are not allowed.</xsd:documentation>
			</xsd:annotation>
			<xsd:element name="test" type="furn_ia:testAssignmentType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Test governing the applicability of this pricing rule</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="qualifier">
					<xsd:annotation>
						<xsd:documentation>Constrains how the component is available to fill the role. 

optional - means the component is available but not default.

mandatory - means the component must fill the role. Useful in building assemblies

exclude - the components specified are not available</xsd:documentation>
					</xsd:annotation>
					<xsd:simpleType>
						<xsd:restriction base="string">
							<xsd:enumeration value="default"/>
							<xsd:enumeration value="optional"/>
							<xsd:enumeration value="mandatory"/>
							<xsd:enumeration value="exclude"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:element>
				<xsd:element name="allowable" maxOccurs="unbounded">
					<xsd:annotation>
						<xsd:documentation>Defines component(s) allowed to fill a part role.

This can be specified as component, component expression, component group or part role. When part role is specified it is stating the any component that fills the specified part role is also allowed to fill this part role.</xsd:documentation>
					</xsd:annotation>
					<xsd:complexType>
						<xsd:choice>
							<xsd:group ref="furn_ia:componentSpecificationGroup"/>
							<xsd:group ref="furn_ia:partRoleSpecificationGroup"/>
						</xsd:choice>
					</xsd:complexType>
				</xsd:element>
			</xsd:sequence>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="componentPartPricingRuleType">
		<xsd:annotation>
			<xsd:documentation>Pricing rule governing how a component part is priced</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="test" type="furn_ia:testAssignmentType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Test governing the applicability of this pricing rule</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="group">
				<xsd:annotation>
					<xsd:documentation>Specifies group number for the rule. Rules of differing group numbers do not affect each other.

Rules with same group number can be overriden by a rule with an "override" qualifier even if they apply to different parts for the same base component.

Only one rule per group number is applied for one part of a base component.
</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="qualifier">
				<xsd:annotation>
					<xsd:documentation>Specifies how the rule is applied.

add - Can only override rules of with the same group number and the same part.

override - Overrides all rules for any part with the same group number.</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:enumeration value="add"/>
						<xsd:enumeration value="override"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:group ref="furn_ia:componentSpecificationGroup" minOccurs="0"/>
			<xsd:element name="priceFormula" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>If present specifies a formula used to compute the price of the part.

If not presetnt, the price is taken from the component part price table.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="price" type="furn_ia:quantityPriceType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of prices for the rule</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="componentPriceType">
		<xsd:annotation>
			<xsd:documentation>All prices associated with a component</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="pricingModel" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of pricing models used by the component</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="basePrice" type="furn_ia:quantityPriceType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Base prices applied before configuration or dependent on parameters</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="priceFormulaElementType">
		<xsd:annotation>
			<xsd:documentation>Element used in building price formulas</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="function">
				<xsd:annotation>
					<xsd:documentation>Specifies function that will be performed on the operand data</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:enumeration value="none"/>
						<xsd:enumeration value="average"/>
						<xsd:enumeration value="sum"/>
						<xsd:enumeration value="min"/>
						<xsd:enumeration value="max"/>
						<xsd:enumeration value="averageUnique"/>
						<xsd:enumeration value="averageNPredom"/>
						<xsd:enumeration value="addNAttributes"/>
						<xsd:enumeration value="averageAttribute"/>
						<xsd:enumeration value="maxAttribute"/>
						<xsd:enumeration value="priceWithAttribute"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="constant" type="float" minOccurs="0"/>
			<xsd:element name="constantQualifier" minOccurs="0">
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:enumeration value="flat"/>
						<xsd:enumeration value="percentage"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:choice minOccurs="0">
				<xsd:element name="attribute">
					<xsd:complexType>
						<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
						<xsd:attribute name="valueid" type="furn_ia:idType" use="optional"/>
					</xsd:complexType>
				</xsd:element>
				<xsd:element name="contentTag" type="furn_ia:attributeClassType">
					<xsd:annotation>
						<xsd:documentation>Alternatively the attribute can specifed as a tag instead of a specific attribute id</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:choice>
			<xsd:element name="operand" type="furn_ia:priceFormulaOperandType" minOccurs="0" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="priceFormulaOperandType">
		<xsd:annotation>
			<xsd:documentation>Operand used in price formula elements</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:group ref="furn_ia:componentPartSpecificationGroup"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="priceFormulaType">
		<xsd:annotation>
			<xsd:documentation>Pricing formula used in variable pricing.

The "id" attribute allows it to be referenced from various pricing rules</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:annotation>
				<xsd:documentation>Formula may be simple or complex which means it may have nested arithmetic expressions.</xsd:documentation>
			</xsd:annotation>
			<xsd:sequence>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="element" type="furn_ia:priceFormulaElementType">
					<xsd:annotation>
						<xsd:documentation>Formula operand</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
			</xsd:sequence>
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="operator" type="furn_ia:arithmeticOperatorType">
					<xsd:annotation>
						<xsd:documentation>Operator combines values from different formulas and/or operands</xsd:documentation>
					</xsd:annotation>
				</xsd:element>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="element" type="furn_ia:priceFormulaElementType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="close" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
		<xsd:attribute name="name" type="xsd:string" use="optional"/>
	</xsd:complexType>
	<xsd:complexType name="quantityPriceType">
		<xsd:annotation>
			<xsd:documentation>Structure for specifying a quantity bound price</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="startDate" type="ucc_ia:DateChoiceType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Date this price becomes effective</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="endDate" type="ucc_ia:DateChoiceType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Date this price becomes ineffective</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="quantity" type="fnBase:quantityType">
				<xsd:annotation>
					<xsd:documentation>Quantity to which the price applies</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="qualifier">
				<xsd:annotation>
					<xsd:documentation>Specifies the type of price</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:enumeration value="cost"/>
						<xsd:enumeration value="retail"/>
						<xsd:enumeration value="msrp"/>
						<xsd:enumeration value="minimum"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
			<xsd:element name="unitPrice" type="fnBase:monetaryAmountType">
				<xsd:annotation>
					<xsd:documentation>Price per unit</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="priceFormulaTableType">
		<xsd:annotation>
			<xsd:documentation>Pricing information for all components and parts</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="formula" type="furn_ia:priceFormulaType" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="resourceDefinitionType">
		<xsd:annotation>
			<xsd:documentation>Defines a possible resource for any component</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="resourceName" type="string">
				<xsd:annotation>
					<xsd:documentation>Text name of the resource for user identification purposes.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="resourceDescription" type="string" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Long description of the resource.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="factor" type="furn_ia:resourceFactorType" minOccurs="0" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Any number of factors that may govern how the resource amounts are calculated</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="formula" type="furn_ia:resourceFormulaType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Optional formula used to calculate the resource amount available</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="resourceFactorType">
		<xsd:annotation>
			<xsd:documentation>Factor used in determining the amount of a resource available</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="factorName" type="string">
				<xsd:annotation>
					<xsd:documentation>Name of the factor.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="value" type="furn_ia:resourceFactorValueType" maxOccurs="unbounded">
				<xsd:annotation>
					<xsd:documentation>Value for the factor. The value tell us how the resource amount changes based on the factor.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="resourceFactorValueType">
		<xsd:annotation>
			<xsd:documentation>Expression representing possible value for a resource factor</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="expression" type="furn_ia:attributeExpressionType">
				<xsd:annotation>
					<xsd:documentation>Expression governing whether the value is applicable</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="resultValue" type="fnBase:quantityType">
				<xsd:annotation>
					<xsd:documentation>Resulting value when applied</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="qualifier" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="add"/>
					<xsd:enumeration value="percentInc"/>
					<xsd:enumeration value="percentDec"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="resourceFormulaOperandType">
		<xsd:annotation>
			<xsd:documentation>Operand definition used to build resource formulas.

The "qualifier" attribute defines what type of operand it is.

constant - Simply a numeric constant

consumerAmount - raw numeric amount specified by the consumer

consumerAttribute - value of a consumer attribute

producerAttribute - value of a producer attribute</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="attribute" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>If operand type requires an attribute specification it is here</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="constantValue" type="float" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>Constant needed when operand type requires it</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="resourceFactor">
				<xsd:annotation>
					<xsd:documentation>IF operand type requires resource factor it is here</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="qualifier" use="required">
			<xsd:simpleType>
				<xsd:restriction base="string">
					<xsd:enumeration value="constant"/>
					<xsd:enumeration value="consumerAmount"/>
					<xsd:enumeration value="consumerAttribute"/>
					<xsd:enumeration value="factorResult"/>
					<xsd:enumeration value="producerAttribute"/>
				</xsd:restriction>
			</xsd:simpleType>
		</xsd:attribute>
	</xsd:complexType>
	<xsd:complexType name="resourceFormulaType">
		<xsd:annotation>
			<xsd:documentation>Defines a formula that is used to calculate the resource amount</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:sequence>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="operand" type="furn_ia:resourceFormulaOperandType"/>
			</xsd:sequence>
			<xsd:sequence minOccurs="0" maxOccurs="unbounded">
				<xsd:element name="operator" type="furn_ia:arithmeticOperatorType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="open" minOccurs="0" maxOccurs="unbounded"/>
				<xsd:element name="operand" type="furn_ia:resourceFormulaOperandType"/>
				<xsd:element name="paren" type="furn_ia:parenType" fixed="close" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="resourceAssignmentType">
		<xsd:annotation>
			<xsd:documentation>Assigns a resource to some component</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="resourceDefinition">
				<xsd:annotation>
					<xsd:documentation>Specifies the resource being produced or consumed.</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="amount" type="fnBase:quantityType">
				<xsd:annotation>
					<xsd:documentation>Constant amount produced or consumed. Can serve as a raw value when the consumption is variable.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="test" type="furn_ia:testAssignmentType" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>IF not NULL, the test must be TRUE for the resource situation to be valid.</xsd:documentation>
				</xsd:annotation>
			</xsd:element>
			<xsd:element name="resourceType">
				<xsd:annotation>
					<xsd:documentation>Specifies the type of production or usage of the resource for the component.

produceConstant - the component produces a prespecified amount of the resource

produceInputConstant - the component produces an amount that is specified by the end-user via input

consumeVariable - the component produces an amount that is determined by means of a lookup table, formula user-input or all 3.

consumeConstant - the component consumes a specified amount of the resource</xsd:documentation>
				</xsd:annotation>
				<xsd:simpleType>
					<xsd:restriction base="string">
						<xsd:enumeration value="produceConstant"/>
						<xsd:enumeration value="produceInputConstant"/>
						<xsd:enumeration value="produceVariable"/>
						<xsd:enumeration value="consumeConstant"/>
					</xsd:restriction>
				</xsd:simpleType>
			</xsd:element>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="resourceTableType">
		<xsd:annotation>
			<xsd:documentation>Contains resource lookup factors, values and results</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="resourceDefinition" type="furn_ia:resourceDefinitionType" maxOccurs="unbounded"/>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="componentGroupType">
		<xsd:annotation>
			<xsd:documentation>Represents group of components</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="groupName" type="string"/>
		</xsd:sequence>
		<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
	</xsd:complexType>
	<xsd:complexType name="componentTableType">
		<xsd:annotation>
			<xsd:documentation>Table of all components and component groups</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="groups" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>List of component groups. Components are assigned to groups inside of the individual component elements</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="group" type="furn_ia:componentGroupType" maxOccurs="unbounded"/>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
			<xsd:element name="components" minOccurs="0">
				<xsd:annotation>
					<xsd:documentation>All components in the product line</xsd:documentation>
				</xsd:annotation>
				<xsd:complexType>
					<xsd:sequence>
						<xsd:element name="component" type="furn_ia:componentType" maxOccurs="unbounded">
							<xsd:annotation>
								<xsd:documentation>One component in the product line</xsd:documentation>
							</xsd:annotation>
						</xsd:element>
					</xsd:sequence>
				</xsd:complexType>
			</xsd:element>
		</xsd:sequence>
	</xsd:complexType>
	<xsd:complexType name="componentType">
		<xsd:annotation>
			<xsd:documentation>Base item type modeled after UCC item type. Contains basic information about any type of item</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="furn_ia:baseItemType">
				<xsd:sequence>
					<xsd:element name="coordinateItem" minOccurs="0" maxOccurs="unbounded">
						<xsd:annotation>
							<xsd:documentation>ID of item that can serve as a coordinate to this item</xsd:documentation>
						</xsd:annotation>
						<xsd:complexType>
							<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
						</xsd:complexType>
					</xsd:element>
					<xsd:element name="resource" type="furn_ia:resourceAssignmentType" minOccurs="0" maxOccurs="unbounded">
						<xsd:annotation>
							<xsd:documentation>Resources are some abstract entity that is either produced or consumed by a component.</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="image" type="furn_ia:imageType" minOccurs="0" maxOccurs="unbounded">
						<xsd:annotation>
							<xsd:documentation>Any number of graphical images associated with this product.</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="price" minOccurs="0" maxOccurs="unbounded">
						<xsd:complexType>
							<xsd:complexContent>
								<xsd:extension base="furn_ia:componentPriceType">
									<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
								</xsd:extension>
							</xsd:complexContent>
						</xsd:complexType>
					</xsd:element>
					<xsd:element name="part" type="furn_ia:componentPartType" minOccurs="0" maxOccurs="unbounded">
						<xsd:annotation>
							<xsd:documentation>Parts that may configure this component</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="group" minOccurs="0" maxOccurs="unbounded">
						<xsd:annotation>
							<xsd:documentation>Any number of groups that the component belongs to</xsd:documentation>
						</xsd:annotation>
						<xsd:complexType>
							<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
						</xsd:complexType>
					</xsd:element>
				</xsd:sequence>
				<xsd:attribute name="id" type="furn_ia:idType" use="required"/>
				<xsd:attribute name="isBase" type="boolean" use="required"/>
				<xsd:attribute name="class" use="required">
					<xsd:simpleType>
						<xsd:restriction base="string">
							<xsd:enumeration value="concrete"/>
							<xsd:enumeration value="priceModel"/>
						</xsd:restriction>
					</xsd:simpleType>
				</xsd:attribute>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:complexType name="productCatalogType">
		<xsd:annotation>
			<xsd:documentation>Defines the general structure of the catalog document</xsd:documentation>
		</xsd:annotation>
		<xsd:complexContent>
			<xsd:extension base="furn_ia:baseItemType">
				<xsd:sequence>
					<xsd:element name="document" type="fnBase:documentType">
						<xsd:annotation>
							<xsd:documentation>Document header</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="tradeInformation" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>Any textual information about the vendor trade practices.</xsd:documentation>
						</xsd:annotation>
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="tradeInformationItem" type="furn_ia:tradeInformationItemType" maxOccurs="unbounded">
									<xsd:annotation>
										<xsd:documentation>Any number of trade information items</xsd:documentation>
									</xsd:annotation>
								</xsd:element>
							</xsd:sequence>
						</xsd:complexType>
						<xsd:unique name="tradeInformationItem">
							<xsd:selector xpath="tradeInformationItem"/>
							<xsd:field xpath="@id"/>
						</xsd:unique>
					</xsd:element>
					<xsd:element name="publishingData" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>Any number of associated files that may be printed or viewed. These could be an electronic form of the printed catalog or price book.</xsd:documentation>
						</xsd:annotation>
						<xsd:complexType>
							<xsd:sequence>
								<xsd:element name="publishingDataItem" type="furn_ia:publishingDataItemType" maxOccurs="unbounded">
									<xsd:annotation>
										<xsd:documentation>Any number of publishing items</xsd:documentation>
									</xsd:annotation>
								</xsd:element>
							</xsd:sequence>
						</xsd:complexType>
						<xsd:unique name="publishingDataItem">
							<xsd:selector xpath="publishingDataItem"/>
							<xsd:field xpath="@id"/>
						</xsd:unique>
					</xsd:element>
					<xsd:element name="attributeTable" type="furn_ia:attributeTableType" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>Table of all item attributes and values. Attributes are properties or characteristics that are assigned to items, options or materials to better describe them or provide search criteria.</xsd:documentation>
						</xsd:annotation>
					</xsd:element>
					<xsd:element name="partRoleTable" type="furn_ia:partRoleTableType" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>All possible part roles for components</xsd:documentation>
						</xsd:annotation>
						<xsd:keyref name="partRoleTableRef1" refer="furn_ia:attributeKey">
							<xsd:selector xpath="definition/attribute"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
					</xsd:element>
					<xsd:element name="resourceTable" type="furn_ia:resourceTableType" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>Table of resources, factors, values and results.</xsd:documentation>
						</xsd:annotation>
						<xsd:key name="factorKey">
							<xsd:selector xpath="resourceDefinition/factor"/>
							<xsd:field xpath="@id"/>
						</xsd:key>
						<xsd:keyref name="resourceRef1" refer="furn_ia:factorKey">
							<xsd:selector xpath="resourceDefintion/formula/operand/resourceFactor"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="resourceRef2" refer="furn_ia:attributeKey">
							<xsd:selector xpath="resourceDefinition/formula/operand/attribute"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
					</xsd:element>
					<xsd:element name="testTable" type="furn_ia:testTableType" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>Table of all tests</xsd:documentation>
						</xsd:annotation>
						<xsd:keyref name="testRef1" refer="furn_ia:attributeKey">
							<xsd:selector xpath="test/criteria/criterion/attribute"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
					</xsd:element>
					<xsd:element name="priceFormulaTable" type="furn_ia:priceFormulaTableType" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>Prices for all components and parts</xsd:documentation>
						</xsd:annotation>
						<xsd:keyref name="priceRef1" refer="furn_ia:componentKey">
							<xsd:selector xpath="components/component"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="priceRef2" refer="furn_ia:partRoleKey">
							<xsd:selector xpath="components/component/partPricingRule"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:key name="formulaKey">
							<xsd:selector xpath="formulas/formula"/>
							<xsd:field xpath="@id"/>
						</xsd:key>
						<xsd:keyref name="priceRef3" refer="furn_ia:componentKey">
							<xsd:selector xpath="components/component/pricingModel"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
					</xsd:element>
					<xsd:element name="componentTable" type="furn_ia:componentTableType" minOccurs="0">
						<xsd:annotation>
							<xsd:documentation>All components in the product line</xsd:documentation>
						</xsd:annotation>
						<xsd:keyref name="componentsRef1" refer="furn_ia:attributeValueKey">
							<xsd:selector xpath="components/component/attribute"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="componentsRef2" refer="furn_ia:componentKey">
							<xsd:selector xpath="components/component/coordinateItem"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="componentsRef3" refer="furn_ia:resourceKey">
							<xsd:selector xpath="components/component/resource/resourceDefinition"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="componentsRef4" refer="furn_ia:partRoleKey">
							<xsd:selector xpath="components/component/part/partRole"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="componentsRef5" refer="furn_ia:componentKey">
							<xsd:selector xpath="components/component/group"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
						<xsd:keyref name="componentsRef6" refer="furn_ia:testKey">
							<xsd:selector xpath="components/component/part/constraint/test"/>
							<xsd:field xpath="@id"/>
						</xsd:keyref>
					</xsd:element>
				</xsd:sequence>
			</xsd:extension>
		</xsd:complexContent>
	</xsd:complexType>
	<xsd:element name="catalog" type="furn_ia:productCatalogType">
		<xsd:annotation>
			<xsd:documentation>The one and only product catalog element</xsd:documentation>
		</xsd:annotation>
		<xsd:key name="attributeKey">
			<xsd:selector xpath="attributeTable/attributes/attribute"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="attributeValueKey">
			<xsd:selector xpath="attributeTable/attributeValues/attributeValue"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="partRoleGroupKey">
			<xsd:selector xpath="partRoleTable/groups/group"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="partRoleKey">
			<xsd:selector xpath="partRoleTable/partRoles/partRole"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="resourceKey">
			<xsd:selector xpath="resourceTable/resourceDefinition"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="componentGroupKey">
			<xsd:selector xpath="componentTable/groups/group"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="componentKey">
			<xsd:selector xpath="componentTable/components/component"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="testKey">
			<xsd:selector xpath="testTable/test"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
		<xsd:key name="resourceDefKey">
			<xsd:selector xpath="resourceTable/resourceDefinition"/>
			<xsd:field xpath="@id"/>
		</xsd:key>
	</xsd:element>
</xsd:schema>
