Exemple : spécification des directives ID et IDREF
Cet exemple est presque identique à l'exemple Spécification de la directive ELEMENTXSINIL. La seule différence est que la requête spécifie les directives ID et IDREF. Ces directives remplacent les types de l'attribut SalesPersonID des éléments <OrderHeader> et <OrderDetail>. Il en résulte des liens à l'intérieur du document. Vous avez besoin du schéma pour visualiser les types remplacés. Par conséquent, la requête spécifie l'option XMLDATA dans la clause FOR XML pour extraire le schéma.
USE AdventureWorks2008R2;
GO
SELECT 1 as Tag,
0 as Parent,
SalesOrderID as [OrderHeader!1!SalesOrderID!id],
OrderDate as [OrderHeader!1!OrderDate],
CustomerID as [OrderHeader!1!CustomerID],
NULL as [SalesPerson!2!SalesPersonID],
NULL as [OrderDetail!3!SalesOrderID!idref],
NULL as [OrderDetail!3!LineTotal],
NULL as [OrderDetail!3!ProductID],
NULL as [OrderDetail!3!OrderQty]
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43661
UNION ALL
SELECT 2 as Tag,
1 as Parent,
SalesOrderID,
NULL,
NULL,
SalesPersonID,
NULL,
NULL,
NULL,
NULL
FROM Sales.SalesOrderHeader
WHERE SalesOrderID=43659 or SalesOrderID=43661
UNION ALL
SELECT 3 as Tag,
1 as Parent,
SOD.SalesOrderID,
NULL,
NULL,
SalesPersonID,
SOH.SalesOrderID,
LineTotal,
ProductID,
OrderQty
FROM Sales.SalesOrderHeader SOH,Sales.SalesOrderDetail SOD
WHERE SOH.SalesOrderID = SOD.SalesOrderID
AND (SOH.SalesOrderID=43659 or SOH.SalesOrderID=43661)
ORDER BY [OrderHeader!1!SalesOrderID!id], [SalesPerson!2!SalesPersonID],
[OrderDetail!3!SalesOrderID!idref],[OrderDetail!3!LineTotal]
FOR XML EXPLICIT, XMLDATA;
Le résultat partiel est le suivant. Dans le schéma, les directives ID et IDREF ont remplacé les types de données de l'attribut SalesOrderID des éléments <OrderHeader> et <OrderDetail> Si vous supprimez ces directives, le schéma renvoie les types d'origine de ces attributs.
<Schema name="Schema1" xmlns="urn:schemas-microsoft-com:xml-data" xmlns:dt="urn:schemas-microsoft-com:datatypes">
<ElementType name="OrderHeader" content="mixed" model="open">
<AttributeType name="SalesOrderID" dt:type="id" />
<AttributeType name="OrderDate" dt:type="dateTime" />
<AttributeType name="CustomerID" dt:type="i4" />
<attribute type="SalesOrderID" />
<attribute type="OrderDate" />
<attribute type="CustomerID" />
</ElementType>
<ElementType name="SalesPerson" content="mixed" model="open">
<AttributeType name="SalesPersonID" dt:type="i4" />
<attribute type="SalesPersonID" />
</ElementType>
<ElementType name="OrderDetail" content="mixed" model="open">
<AttributeType name="SalesOrderID" dt:type="idref" />
<AttributeType name="LineTotal" dt:type="number" />
<AttributeType name="ProductID" dt:type="i4" />
<AttributeType name="OrderQty" dt:type="i2" />
<attribute type="SalesOrderID" />
<attribute type="LineTotal" />
<attribute type="ProductID" />
<attribute type="OrderQty" />
</ElementType>
</Schema>
<OrderHeader xmlns="x-schema:#Schema1" SalesOrderID="43659" OrderDate="2001-07-01T00:00:00" CustomerID="676">
<SalesPerson SalesPersonID="279" />
<OrderDetail SalesOrderID="43659" LineTotal="10.373000" ProductID="712" OrderQty="2" />
...
</OrderHeader>
...