XML ドキュメント内の要素を関連付けることができます。 要素は階層的に入れ子にすることができ、要素間で ID、IDREF、または IDREFS リレーションシップを指定できます。
たとえば、XSD スキーマでは、 <Customer> 要素に <Order> 子要素が含まれます。 スキーマが AdventureWorks データベースにマップされると、<Customer> 要素は Sales.Customer テーブルにマップされ、<Order> 要素は Sales.SalesOrderHeader テーブルにマップされます。 これらの基になるテーブル Sales.Customer と Sales.SalesOrderHeader は、顧客が注文を行うため、関連しています。 Sales.SalesOrderHeader テーブルの CustomerID は、Sales.Customer テーブルの CustomerID 主キーを参照する外部キーです。
sql:relationship
注釈を使用して、マッピング スキーマ要素間でこれらのリレーションシップを確立できます。
注釈付き XSD スキーマでは、 sql:relationship
注釈は、要素がマップされる基になるテーブル間の主キーと外部キーのリレーションシップに基づいて、スキーマ要素を階層的に入れ子にするために使用されます。
sql:relationship
注釈を指定する際には、次の項目を指定する必要があります。
親テーブル (Sales.Customer) と子テーブル (Sales.SalesOrderHeader)。
親テーブルと子テーブル間のリレーションシップを構成する列。 たとえば、親テーブルと子テーブルの両方に表示される CustomerID 列です。
この情報は、適切な階層を生成するために使用されます。
テーブル名と必要な結合情報を指定するには、 sql:relationship
注釈に次の属性を指定します。 これらの属性は、 <sql:relationship> 要素でのみ有効です。
名前
リレーションシップの一意の名前を指定します。
親
親リレーションシップ (テーブル) を指定します。 これは省略可能な属性です。属性が指定されていない場合、親テーブル名はドキュメント内の子階層の情報から取得されます。 スキーマで、同じ<sql:relationship>異なる親要素を使用する 2 つの親子階層が指定されている場合は、<sql:relationship> で親属性を指定しません。 この情報は、スキーマの階層から取得されます。
parent-key
親の親キーを指定します。 親キーが複数の列で構成されている場合、値はそれらの間にスペースで指定されます。 複数列キーと対応する子キーに対して指定された値の間には位置マッピングがあります。
子
子リレーションシップ (テーブル) を指定します。
child-key
親の親キーを参照する子の子キーを指定します。 子キーが複数の属性 (列) で構成されている場合、子キーの値はそれらの間にスペースで指定されます。 複数列キーと対応する親キーに対して指定された値の間には位置マッピングがあります。
あべこべ
<sql:relationship> で指定されたこの属性は、アップデートグラムによって使用されます。 詳細については、「 sql:relationship での sql:inverse 属性の指定」を参照してください。
sql:key-fields
注釈は、子要素を含む要素で指定する必要があります。<sql:relationship>要素と子要素の間で定義され、親要素で指定されたテーブルの主キーは提供されません。 スキーマで <sql:relationship> が指定されていない場合でも、適切な階層を生成するには sql:key-fields
を指定する必要があります。 詳細については、「 sql:key-fields を使用したキー列の識別」を参照してください。
結果に適切な入れ子を生成するには、すべてのスキーマで sql:key-fields
を指定することをお勧めします。
例示
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。
詳細については、「
A。 要素に対する sql:relationship 注釈の指定
次の注釈付き XSD スキーマには、<Customer> および <Order> 要素が含まれます。 <Order> 要素は、<Customer> 要素の子要素です。
スキーマでは、 sql:relationship
注釈は <Order> 子要素で指定されます。 リレーションシップ自体は、<xsd:appinfo> 要素で定義されます。
<relationship> 要素は、Sales.SalesOrderHeader テーブルの CustomerID を、Sales.Customer テーブルの CustomerID 主キーを参照する外部キーとして識別します。 したがって、顧客に属する注文は、その <Customer> 要素の子要素として表示されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" type="CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
前のスキーマでは、名前付きリレーションシップが使用されています。 名前のないリレーションシップを指定することもできます。 結果は同じです。
これは、名前のないリレーションシップが指定された変更されたスキーマです。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Customer" sql:relation="Sales.Customer" type="CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Sales.SalesOrderHeader">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 ファイルを sql-relationship.xmlとして保存します。
以下のテンプレートをコピーし、テキスト ファイルに貼り付けます。 sql-relationship.xmlを保存したのと同じディレクトリにファイルを sql-relationshipT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sql-relationship.xml"> /Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
マッピング スキーマ (sql-relationship.xml) に指定されたディレクトリ パスは、テンプレートが保存されているディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\sql-relationship.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を 使用した SQLXML クエリの実行」を参照してください。
結果セットは次のようになります。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer CustomerID="1">
<Order OrderID="43860" CustomerID="1" />
<Order OrderID="44501" CustomerID="1" />
<Order OrderID="45283" CustomerID="1" />
<Order OrderID="46042" CustomerID="1" />
</Customer>
</ROOT>
B. リレーションシップ チェーンの指定
この例では、AdventureWorks データベースから取得したデータを使用して、次の XML ドキュメントが必要であるとします。
<Order SalesOrderID="43659">
<Product Name="Mountain Bike Socks, M"/>
<Product Name="Sport-100 Helmet, Blue"/>
...
</Order>
...
Sales.SalesOrderHeader テーブルの注文ごとに、XML ドキュメントには 1 つの <Order> 要素があります。 また、各 <Order> 要素には、<Product>子要素の一覧が含まれます。これは、注文で要求された製品ごとに 1 つです。
この階層を生成する XSD スキーマを指定するには、OrderOD と ODProduct の 2 つのリレーションシップを指定する必要があります。 OrderOD リレーションシップは、Sales.SalesOrderHeader テーブルと Sales.SalesOrderDetail テーブルの間の親子リレーションシップを指定します。 ODProduct リレーションシップは、Sales.SalesOrderDetail テーブルと Production.Product テーブルの間のリレーションシップを指定します。
次のスキーマでは、<Product> 要素のmsdata:relationship
注釈は、OrderOD と ODProduct の 2 つの値を指定します。 これらの値を指定する順序が重要です。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<msdata:relationship name="OrderOD"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
<msdata:relationship name="ODProduct"
parent="Sales.SalesOrderDetail"
parent-key="ProductID"
child="Production.Product"
child-key="ProductID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Order" msdata:relation="Sales.SalesOrderHeader"
msdata:key-fields="SalesOrderID" type="OrderType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="Product" msdata:relation="Production.Product"
msdata:key-fields="ProductID"
msdata:relationship="OrderOD ODProduct">
<xsd:complexType>
<xsd:attribute name="Name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
</xsd:complexType>
</xsd:schema>
名前付きリレーションシップを指定する代わりに、匿名リレーションシップを指定できます。 この場合、<の内容全体>...2 つのリレーションシップを記述する</注釈>は、<Product> の子要素として表示されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:msdata="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Order" msdata:relation="Sales.SalesOrderHeader"
msdata:key-fields="SalesOrderID" type="OrderType" />
<xsd:complexType name="OrderType" >
<xsd:sequence>
<xsd:element name="Product" msdata:relation="Production.Product"
msdata:key-fields="ProductID" >
<xsd:annotation>
<xsd:appinfo>
<msdata:relationship
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
<msdata:relationship
parent="Sales.SalesOrderDetail"
parent-key="ProductID"
child="Production.Product"
child-key="ProductID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:complexType>
<xsd:attribute name="Name" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
</xsd:complexType>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 ファイルを relationshipChain.xmlとして保存します。
以下のテンプレートをコピーし、テキスト ファイルに貼り付けます。 relationshipChain.xmlを保存したのと同じディレクトリにファイルを relationshipChainT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="relationshipChain.xml"> /Order </sql:xpath-query> </ROOT>
マッピング スキーマ (relationshipChain.xml) に指定されたディレクトリ パスは、テンプレートが保存されているディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\relationshipChain.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を 使用した SQLXML クエリの実行」を参照してください。
結果セットは次のようになります。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="43659">
<Product Name="Mountain Bike Socks, M" />
<Product Name="Sport-100 Helmet, Blue" />
<Product Name="AWC Logo Cap" />
<Product Name="Long-Sleeve Logo Jersey, M" />
<Product Name="Long-Sleeve Logo Jersey, XL" />
...
</Order>
...
</ROOT>
C. 属性にリレーションシップ注釈を指定する
この例のスキーマには、<CustomerID> 子要素と IDREFS 型の OrderIDList 属性を持つ <Customer> 要素が含まれています。
<Customer> 要素は、AdventureWorks データベースの Sales.Customer テーブルにマップされます。 既定では、このマッピングのスコープは、子要素または属性に sql:relation
が指定されていない限り、すべての子要素または属性に適用されます。その場合は、 <relationship> 要素を使用して適切な主キー/外部キーリレーションシップを定義する必要があります。 また、 relation
注釈を使用して別のテーブルを指定する子要素または属性では、 relationship
注釈も指定する必要があります。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" type="CustomerType" />
<xsd:complexType name="CustomerType" >
<xsd:sequence>
<xsd:element name="CustomerID" type="xsd:string" />
</xsd:sequence>
<xsd:attribute name="OrderIDList"
type="xsd:IDREFS"
sql:relation="Sales.SalesOrderHeader"
sql:field="SalesOrderID"
sql:relationship="CustOrders" >
</xsd:attribute>
</xsd:complexType>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 ファイルを relationship-on-attribute.xmlとして保存します。
次のテンプレートをコピーし、ファイルに貼り付けます。 relationship-on-attribute.xmlを保存したのと同じディレクトリにファイルを relationship-on-attributeT.xml として保存します。 テンプレートのクエリでは、CustomerID が 1 の顧客が選択されます。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="relationship-on-attribute.xml"> /Customer[CustomerID=1] </sql:xpath-query> </ROOT>
マッピング スキーマ (relationship-on-attribute.xml) に指定されたディレクトリ パスは、テンプレートが保存されているディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\relationship-on-attribute.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を 使用した SQLXML クエリの実行」を参照してください。
結果セットは次のようになります。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Customer OrderIDList="43860 44501 45283 46042">
<CustomerID>1</CustomerID>
</Customer>
</ROOT>
D. 複数の要素に対する sql:relationship の指定
この例では、注釈付き XSD スキーマには、<Customer>、<Order>、および <OrderDetail> 要素が含まれています。
<Order> 要素は、<Customer> 要素の子要素です。 <sql:relationship> は <Order> 子要素で指定されるため、顧客に属する注文は <Customer>の子要素として表示されます。
<Order> 要素には、<OrderDetail> 子要素が含まれています。 <sql:relationship>は<OrderDetail>子要素で指定されるため、注文に関連する注文の詳細は、その<Order>要素の子要素として表示されます。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="CustOrders"
parent="Sales.Customer"
parent-key="CustomerID"
child="Sales.SalesOrderHeader"
child-key="CustomerID" />
<sql:relationship name="OrderOrderDetail"
parent="Sales.SalesOrderHeader"
parent-key="SalesOrderID"
child="Sales.SalesOrderDetail"
child-key="SalesOrderID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Customer" sql:relation="Sales.Customer" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"
sql:relationship="CustOrders" maxOccurs="unbounded" >
<xsd:complexType>
<xsd:sequence>
<xsd:element name="OrderDetail"
sql:relation="Sales.SalesOrderDetail"
sql:relationship="OrderOrderDetail"
maxOccurs="unbounded" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="ProductID" type="xsd:string" />
<xsd:attribute name="OrderQty" type="xsd:integer" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="OrderDate" type="xsd:date" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 ファイルを relationship-multiple-elements.xmlとして保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 relationship-multiple-elements.xmlを保存したのと同じディレクトリにファイルを relationship-multiple-elementsT.xml として保存します。 テンプレート内のクエリは、CustomerID が 1 で SalesOrderID が 43860 の顧客の注文情報を返します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="relationship-multiple-elements.xml"> /Customer[@CustomerID=1]/Order[@SalesOrderID=43860] </sql:xpath-query> </ROOT>
マッピング スキーマ (relationship-multiple-elements.xml) に指定されたディレクトリ パスは、テンプレートが保存されているディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\relationship-multiple-elements.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を 使用した SQLXML クエリの実行」を参照してください。
結果セットは次のようになります。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Order SalesOrderID="43860" OrderDate="2001-08-01" CustomerID="1">
<OrderDetail SalesOrderID="43860" ProductID="761" OrderQty="2" />
<OrderDetail SalesOrderID="43860" ProductID="770" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="758" OrderQty="2" />
<OrderDetail SalesOrderID="43860" ProductID="765" OrderQty="2" />
<OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="762" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="768" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" />
<OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="763" OrderQty="1" />
<OrderDetail SalesOrderID="43860" ProductID="756" OrderQty="1" />
</Order>
</ROOT>
E. 親属性を指定せずに <sql:relationship> を指定する
この例では、親属性を指定せずに <sql:relationship> を指定する方法を示します。 たとえば、次の従業員テーブルがあるとします。
Emp1(SalesPersonID, FirstName, LastName, ReportsTo)
Emp2(SalesPersonID, FirstName, LastName, ReportsTo)
次の XML ビューには、Sales.Emp1 テーブルと Sales.Emp2 テーブルにマッピングされた <Emp1> および <Emp2> 要素があります。
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:annotation>
<xsd:appinfo>
<sql:relationship name="EmpOrders"
parent-key="SalesPersonID"
child="Sales.SalesOrderHeader"
child-key="SalesPersonID" />
</xsd:appinfo>
</xsd:annotation>
<xsd:element name="Emp1" sql:relation="Sales.Emp1" type="EmpType" />
<xsd:element name="Emp2" sql:relation="Sales.Emp2" type="EmpType" />
<xsd:complexType name="EmpType" >
<xsd:sequence>
<xsd:element name="Order"
sql:relation="Sales.SalesOrderHeader"
sql:relationship="EmpOrders" >
<xsd:complexType>
<xsd:attribute name="SalesOrderID" type="xsd:integer" />
<xsd:attribute name="CustomerID" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="SalesPersonID" type="xsd:integer" />
<xsd:attribute name="LastName" type="xsd:string" />
</xsd:complexType>
</xsd:schema>
スキーマでは、 <Emp1> 要素と <Emp2> 要素の両方が EmpType
型です。
EmpType
型は、<Order>子要素と対応する<sql:relationship>を記述します。 この場合、親属性を使用して <sql:relationship> で識別できる単一 の親 はありません。 この状況では、<sql:relationship> で親属性を指定しません。親属性情報はスキーマの階層から取得されます。
スキーマに対してサンプル XPath クエリをテストするには
AdventureWorks データベースに次のテーブルを作成します。
USE AdventureWorks CREATE TABLE Sales.Emp1 ( SalesPersonID int primary key, FirstName varchar(20), LastName varchar(20), ReportsTo int) Go CREATE TABLE Sales.Emp2 ( SalesPersonID int primary key, FirstName varchar(20), LastName varchar(20), ReportsTo int) Go
次のサンプル データをテーブルに追加します。
INSERT INTO Sales.Emp1 values (279, 'Nancy', 'Devolio',NULL) INSERT INTO Sales.Emp1 values (282, 'Andrew', 'Fuller',1) INSERT INTO Sales.Emp1 values (276, 'Janet', 'Leverling',1) INSERT INTO Sales.Emp2 values (277, 'Margaret', 'Peacock',3) INSERT INTO Sales.Emp2 values (283, 'Steven', 'Devolio',4) INSERT INTO Sales.Emp2 values (275, 'Nancy', 'Buchanan',5) INSERT INTO Sales.Emp2 values (281, 'Michael', 'Suyama',6)
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、 ファイルを relationship-noparent.xmlとして保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、 relationship-noparent.xmlを保存したのと同じディレクトリにファイルを relationship-noparentT.xml として保存します。 テンプレート内のクエリは、すべての <Emp1> 要素を選択します (したがって、親は Emp1 です)。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="relationship-noparent.xml"> /Emp1 </sql:xpath-query> </ROOT>
マッピング スキーマ (relationship-noparent.xml) に指定されたディレクトリ パスは、テンプレートが保存されているディレクトリに対する相対パスです。 次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\relationship-noparent.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を 使用した SQLXML クエリの実行」を参照してください。
結果セットの一部を次に示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Emp1 SalesPersonID="276" LastName="Leverling">
<Order SalesOrderID="43663" CustomerID="510" />
<Order SalesOrderID="43666" CustomerID="511" />
<Order SalesOrderID="43859" CustomerID="259" />
...
</Emp1>