I have some XML which recursively describes Attributes for products (Colour/Size/Leg length/etc.) In reality I can impose a limit of 5 levelsI am using SQL XML Bulk Load (SQLXMLBulkLoad V3.0) to grab the XML into staging tables, but I'm rubbish at XML / Schemas, and I don't know how to define it to get the attributes.I have treated the SCS_ITEM stuff as "just being there", regardless of the recursion, and I'm using a sql:relation from the /STOCK_ITEM/SCS/STYLE/.../STYLE/SCS_ITEM/STOCK_CODE to get its associated "parent" /STOCK_ITEM/STOCK_CODEIf anyone can help with the schema I'd appreciate it.<STOCK_ITEM> <STOCK_CODE>05BER33082</STOCK_CODE> <SCS> <STYLE> <DESCRIPTION>black</DESCRIPTION> <STYLE> <DESCRIPTION>small</DESCRIPTION> <SCS_ITEM> <STOCK_CODE>SKCODE-BK-S-</STOCK_CODE> <DESCRIPTION>DESC black / small /</DESCRIPTION> </SCS_ITEM> </STYLE> <STYLE> <DESCRIPTION>med</DESCRIPTION> <SCS_ITEM> <STOCK_CODE>SKCODE-BK-M-</STOCK_CODE> <DESCRIPTION>DESC black / med /</DESCRIPTION> </SCS_ITEM> </STYLE> </STYLE> <STYLE> <DESCRIPTION>pink</DESCRIPTION> <STYLE> <DESCRIPTION>small</DESCRIPTION> <SCS_ITEM> <STOCK_CODE>SKCODE-PI-S-</STOCK_CODE> <DESCRIPTION>DESC pink / small /</DESCRIPTION> </SCS_ITEM> </STYLE> <STYLE> <DESCRIPTION>med</DESCRIPTION> <SCS_ITEM> <STOCK_CODE>SKCODE-PI-M-</STOCK_CODE> <DESCRIPTION>DESC pink / med /</DESCRIPTION> </SCS_ITEM> </STYLE> </STYLE> <HEADING LEVEL="1">Colour</HEADING> <HEADING LEVEL="2">Size</HEADING> </SCS></STOCK_ITEM><STOCK_ITEM> <STOCK_CODE>05BERCOL2</STOCK_CODE> <SCS> <STYLE> <DESCRIPTION>LeftHand</DESCRIPTION> <SCS_ITEM> <STOCK_CODE>05BERCOL2-LHZ--</STOCK_CODE> <DESCRIPTION>Col Sleeping Bag LeftHand / /</DESCRIPTION> </SCS_ITEM> </STYLE> <STYLE> <DESCRIPTION>RightHand</DESCRIPTION> <SCS_ITEM> <STOCK_CODE>05BERCOL2-RHZ--</STOCK_CODE> <DESCRIPTION>Col Sleeping Bag RightHand / /</DESCRIPTION> </SCS_ITEM> </STYLE> <HEADING LEVEL="1">Zip</HEADING> </SCS></STOCK_ITEM>
what I'm looking for is something like:STOCK_CODE Attribute1 Attribute2 Attribute3=============== ========== ========== ==========SKCODE-BK-S- black small NULLSKCODE-BK-M- black med NULLSKCODE-PI-S- pink small NULLSKCODE-PI-M- pink med NULL05BERCOL2-LHZ-- LeftHand NULL NULL05BERCOL2-RHZ-- RightHand NULL NULL
Getting the attributes into a separate table would be fine too:STOCK_CODE Attribute Value=============== ========= ==========SKCODE-BK-S- 1 black SKCODE-BK-S- 2 smallSKCODE-BK-M- 1 blackSKCODE-BK-M- 1 med...05BERCOL2-LHZ-- 1 LeftHand05BERCOL2-RHZ-- 1 RightHand
and I also need the attribute class namesMODULE_CODE Level Name=============== ========= ==========05BER33082 1 Colour05BER33082 2 Size05BERCOL2 1 Zip
and here is the Schema, so far<?xml version="1.0" encoding="utf-16"?><xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:sql="urn:schemas-microsoft-com:mapping-schema"> <xs:annotation> <xs:appinfo> <sql:relationship name="STOCK_SCS" parent="staging_STOCK_ITEM" parent-key="STOCK_CODE" child="staging_SCS_ITEM" child-key="ASSOCIATED_MODULE"/> <sql:relationship name="STOCK_HEADING" parent="staging_STOCK_ITEM" parent-key="STOCK_CODE" child="staging_STOCK_HEADING" child-key="STOCK_CODE"/> </xs:appinfo> </xs:annotation> <xs:element name="STOCK_ITEMS" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="STOCK_ITEM" sql:relation="staging_STOCK_ITEM"> <xs:complexType> <xs:sequence> <xs:element name="STOCK_CODE" type="xs:unsignedShort"/> <xs:element minOccurs="0" name="SCS" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element maxOccurs="unbounded" name="STYLE" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="DESCRIPTION" type="xs:string" sql:mapped="false"/> <xs:element minOccurs="0" name="SCS_ITEM" sql:relation="staging_SCS_ITEM" sql:relationship="STOCK_SCS"> <xs:complexType> <xs:sequence> <xs:element name="STOCK_CODE" type="xs:string"/> <xs:element name="DESCRIPTION" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> <xs:element minOccurs="0" maxOccurs="unbounded" name="STYLE" sql:is-constant="1"> <xs:complexType> <xs:sequence> <xs:element name="DESCRIPTION" type="xs:string" sql:mapped="false"/> <xs:element name="SCS_ITEM" sql:relation="staging_SCS_ITEM" sql:relationship="STOCK_SCS"> <xs:complexType> <xs:sequence> <xs:element name="STOCK_CODE" type="xs:string"/> <xs:element name="DESCRIPTION" type="xs:string"/> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> <xs:element minOccurs="0" maxOccurs="unbounded" name="HEADING" sql:relation="staging_STOCK_HEADING" sql:relationship="STOCK_HEADING"> <xs:complexType> <xs:simpleContent> <xs:extension base="xs:string"> <xs:attribute name="LEVEL" type="xs:unsignedShort" use="required"/> </xs:extension> </xs:simpleContent> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element> </xs:sequence> </xs:complexType> </xs:element></xs:schema>
Kristen