Partager via


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>

...

Voir aussi

Référence