Compartilhar via


Especificando relações usando sql:relationship (Esquema XDR)

Observação importanteImportante

Este tópico está incluso como referência para aplicativos herdados. Não será feito nenhum trabalho de desenvolvimento futuro nesse recurso. Evite usá-lo em novos trabalhos de desenvolvimento. Em vez disso, use esquemas XSD anotados para criar exibições XML. Para obter mais informações, consulte Introdução a esquemas XSD anotados (SQLXML 4.0). Você pode converter esquemas XDR anotados existentes em esquemas XSD. Para obter mais informações, consulte Convertendo esquemas XDR anotados a esquemas XSD equivalentes (SQLXML 4.0).

Os elementos em um documento XML podem ser relacionados. Eles podem ser aninhados hierarquicamente e as relações ID, IDREF ou IDREFS entre os elementos podem ser especificadas.

Por exemplo, em um esquema XDR, um elemento <Customer> contém os elementos filho <Order>. O elemento <Customer> é mapeado para uma tabela que contém os dados do cliente (como Sales.Customer no banco de dados AdventureWorks). O elemento <Order> é mapeado para uma tabela que contém dados de pedidos no mesmo banco de dados (como Sales.SalesORderHeader). Estas tabelas subjacentes, Sales.Customer e Sales.SalesOrderHeader, estão relacionadas porque os clientes fazem pedidos. O elemento CustomerID na tabela Sales.SalesOrderHeader é uma chave estrangeira que faz referência à chave primária CustomerID na tabela Sales.Customer. Você pode estabelecer estas relações entre elementos do esquema de mapeamento usando a anotação <sql:relationship>.

No esquema XSD anotado, a anotação <sql:relationship> é usada para aninhar os elementos de esquema hierarquicamente, com base nas relações de chave primária e chave estrangeira entre as tabelas subjacentes para as quais os elementos são mapeados. Na especificação da anotação <sql:relationship>, você deve identificar:

  • A tabela primária (Sales.Customer) e a tabela estrangeira (Sales.SalesOrderHeader) e

  • A condição de junção necessária (CustomerID em Sales.SalesOrderHeader é uma chave estrangeira que faz referência à chave primária de CustomerID na tabela Sales.Customer).

Estas informações são usadas para gerar a devida hierarquia (para cada elemento <customer>, os elementos relacionados <order> aparecem como elementos filhos).

Para fornecer os nomes de tabela e as informações de junção necessárias, os seguintes atributos são especificados com a anotação <sql:relationship>. Esses atributos são válidos somente com o elemento sql:relationship:

  • key-relation
    Especifica a relação primária (tabela).

  • key
    Especifica a chave primária da key-relation. Se a chave primária for composta por várias colunas, os valores serão especificados com um espaço entre eles. Há um mapeamento posicional entre os valores especificados para a chave de várias colunas e a chave estrangeira correspondente.

  • foreign-relation
    Especifica a relação estrangeira (tabela).

  • foreign-key
    Especifica a chave estrangeira na foreign-relation que faz referência a key em key-relation. Se a chave estrangeira for composta de vários atributos (colunas), os valores de chave estrangeira serão especificados com um espaço entre eles. Há um mapeamento posicional entre os valores especificados para a chave de várias colunas e a chave estrangeira correspondente.

ObservaçãoObservação

Você deve garantir que os tipos de dados do Microsoft SQL Server de key e foreign-key sejam tais que eles possam ser convertidos implicitamente se necessário.

A marca sql:relationship pode ser adicionada somente a elementos <element> ou <attribute> em um esquema anotado. Quando sql:relationship for especificado em um atributo, deve haver um sql:relation e um sql:field especificados para o atributo para garantir que um valor único é recuperado (vários atributos do mesmo nome são inválidos em XML). Quando sql:relationship é especificado em um elemento, a relação pode resultar em um único valor ou em um conjunto de valores.

A marca sql:relationship é usada para especificar uma única relação lógica entre duas entidades. Os atributos definem as relações e os campos usados para definir a relação lógica. Várias instâncias de sql:relationship podem ser especificadas dentro de um elemento ou atributo no esquema anotado, o que indica uma relação complexa entre o elemento ou atributo e seu elemento contido. Todas as instâncias de sql:relationship são usadas juntas para definir a relação complexa.

Quando várias instâncias da marca sql:relationship são especificadas dentro de um elemento ou atributo, a ordem na qual eles aparecerão é significativa.

A anotação sql:key-fields deve ser especificada em um elemento que contenha um elemento filho e um sql:relationship, definido entre o elemento e o filho, que não fornece a chave primária da tabela especificada no elemento pai. Para obter mais informações, consulte Identificando colunas de chave usando campos sql:key (SQLXML 4.0). Para gerar o aninhamento adequado no resultado, recomenda-se que sql:key-fields seja especificado em todos os esquemas.

ObservaçãoObservação

No esquema de mapeamento, os valores relacionais, como nome de tabela e nome de coluna, fazem diferenciação de maiúsculas e minúsculas.

Exemplos

Para criar exemplos de funcionamento usando os exemplos a seguir, é necessário atender a determinados requisitos. Para obter mais informações, consulte Requisitos para executar exemplos do SQLXML.

A. Especificar sql:relationship em um <element>

Este esquema XDR anotado inclui os elementos <Customer> e <Order>. O elemento <Order> é um elemento filho do elemento <Customer>.

No esquema, a anotação sql:relationship é especificada no elemento filho <Order>. A anotação identifica CustomerID na tabela Sales.SalesOrderHeader como uma chave estrangeira que faz referência à chave primária CustomerID na tabela Sales.Customer. Portanto, os pedidos que pertencem a um cliente aparecem como um elemento filho do elemento desse elemento <Customer>.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
    <AttributeType name="CustomerID" />
    <AttributeType name="SalesOrderID" />
    <AttributeType name="OrderDate" />

    <attribute type="CustomerID" />
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
    <AttributeType name="CustomerID" />
    <attribute type="CustomerID" />
    <element type="Order" >
             <sql:relationship 
                     key-relation="Sales.Customer"
                    key="CustomerID"
                    foreign-key="CustomerID"
                    foreign-relation="Sales.SalesOrderHeader" />
    </element>
</ElementType>
</Schema>
ObservaçãoObservação

No esquema de mapeamento, os valores relacionais, como nome de tabela e nome de coluna, fazem diferenciação de maiúsculas e minúsculas. No exemplo anterior, Customers é o valor do atributo sql:relation. O valor do atributo key-relation correspondente também deve ser Customers.

Para testar uma consulta XPath de exemplo com relação ao esquema

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como sql-relationship-xdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sql-relationship-xdrT.xml no mesmo diretório em que você salvou sql-relationship-xdr.xml. A consulta no modelo seleciona um cliente com o CustomerID 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sql-relationship-xdr.xml">
        Customer[@CustomerID="1"]
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (sql-relationship-xdr.xml) é relativo ao diretório onde o modelo é salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\SqlXmlTest\sql-relationship-xdr.xml"
    
  3. Crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.

Este é o conjunto parcial dos resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1">
    <Order CustomerID="1" SalesOrderID="43860" OrderDate="2001-08-01T00:00:00" /> 
    <Order CustomerID="1" SalesOrderID="44501" OrderDate="2001-11-01T00:00:00" /> 
    <Order CustomerID="1" SalesOrderID="45283" OrderDate="2002-02-01T00:00:00" /> 
    <Order CustomerID="1" SalesOrderID="46042" OrderDate="2002-05-01T00:00:00" /> 
  </Customer>
</ROOT>

B. Especificar sql:relationship em um <attribute> e criar referências de documento usando ID e IDREFS.

Neste exemplo, são especificadas referências de documento locais usando ID e IDREFS. O esquema XDR de exemplo consiste em um elemento <Customer> que é mapeado para a tabela Sales.Customer. Esse elemento consiste em um elemento filho <Order> que é mapeado para a tabela Sales.SalesOrderHeader.

No exemplo, sql:relationship é especificado duas vezes:

  • sql:relationship é especificado no elemento filho <Order>. Portanto, os pedidos que pertencem a um cliente aparecerão como um elemento filho do elemento desse elemento <Customer>.

  • sql:relationship também é especificado no atributo OrderIDList do elemento <Customer>. Esse atributo é definido como um tipo IDREFS que faz referência ao atributo SalesOrderID (um atributo do tipo ID) do elemento <Order>. Portanto, é necessário sql:relationship. Nesse caso, a anotação sql:relationship permite que uma lista de pedidos pertencentes a um cliente seja exibida com esse elemento <Customer>.

    Atributos especificados como IDREFS podem ser usados para fazer referência a atributos do tipo ID, permitindo assim vínculos entre documentos.

Como os números não são valores de ID válidos (devem ser tokens de nome), sql:id-prefix foi usado para tornar Order ID um valor de cadeia de caracteres. Para obter mais informações, consulte Criando atributos do tipo Valid ID, IDREF e IDREFS usando sql:id-prefix (Esquema XDR).

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID"  />

    <attribute type="CustomerID" />
    <AttributeType name="OrderIDList" dt:type="idrefs" 
                                      sql:id-prefix="Ord-"/>
    <attribute type="OrderIDList" sql:relation="Sales.SalesOrderHeader" 
                                  sql:field="SalesOrderID">
                 <sql:relationship
                      key-relation="Sales.Customer"
                      key="CustomerID"
                      foreign-relation="Sales.SalesOrderHeader"
                      foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
                 <sql:relationship key-relation="Sales.Customer"
                      key="CustomerID"
                      foreign-relation="Sales.SalesOrderHeader"
                      foreign-key="CustomerID" />
    </element>
  </ElementType>
</Schema>

Para testar uma consulta XPath de exemplo com relação ao esquema

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como idIdref-xdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como idIdref-xdrT.xml no mesmo diretório onde você salvou idIdref-xdr.xml. A consulta no modelo seleciona um cliente com o CustomerID 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="idIdref-xdr.xml">
        Customer[@CustomerID="1"]
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (idIdref-xdr.xml) é relativo ao diretório onde o modelo está salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\SqlXmlTest\idIdref-xdr.xml"
    
  3. Crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.

A seguir está o conjunto de resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1" 
            OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
    <Order SalesOrderID="Ord-43860" OrderDate="2001-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" /> 
  </Customer>
</ROOT>

C. Especificar sql:relationship em vários elementos

Neste exemplo, o esquema XDR anotado consiste nos elementos <Customer>, <Order> e <OD>.

O elemento <Order> é um elemento filho do elemento <Customer>. sql:relationship é especificada no elemento filho <Order>; portanto, os pedidos pertencentes a um cliente são exibidos como elementos filho de <Customer>.

O elemento <Order> inclui o elemento filho <OD>. sql:relationship é especificada no elemento filho <OD>, de forma que os detalhes do pedido pertencente a um pedido apareçam como elementos filho desse elemento <Order>.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

<ElementType name="OD" sql:relation="Sales.SalesOrderDetail" >
    <AttributeType name="SalesOrderID" />
    <AttributeType name="ProductID" />

    <attribute type="SalesOrderID" />
    <attribute type="ProductID" />
</ElementType>

<ElementType name="Order" sql:relation="Sales.SalesOrderHeader" >
    <AttributeType name="CustomerID" />
    <AttributeType name="SalesOrderID" />
    <AttributeType name="OrderDate" />

    <attribute type="CustomerID" />
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
    <element type="OD" >
             <sql:relationship 
                   key-relation="Sales.SalesOrderHeader"
                   key="SalesOrderID"
                   foreign-key="SalesOrderID"
                   foreign-relation="Sales.SalesOrderDetail" />
    </element>
</ElementType>

<ElementType name="Customer" sql:relation="Sales.Customer" >
    <AttributeType name="CustomerID" />

    <attribute type="CustomerID" />
    <element type="Order" >
      <sql:relationship 
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader" />
    </element>
</ElementType>
</Schema>

Para testar uma consulta XPath de exemplo com relação ao esquema

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como sql-relationship-multi-xdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como sql-relationship-multi-xdrT.xml no mesmo diretório em que você salvou sql-relationship-multi-xdr.xml. A consulta no modelo retorna informações de pedido por um cliente cujo CustomerID é 1 e SalesOrderID é 43860.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
      <sql:xpath-query mapping-schema="sql-relationship-multi-xdr.xml">
        /Customer[@CustomerID="1"]/Order[@SalesOrderID=43860]
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (sql-relationship-multi-xdr.xml) é relativo ao diretório onde o modelo é salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\SqlXmlTest\sql-relationship-multi-xdr.xml"
    
  3. Crie e use o script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.

Este é o conjunto de resultados:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order CustomerID="1" SalesOrderID="43860" OrderDate="2001-08-01T00:00:00">
    <OD SalesOrderID="43860" ProductID="761" /> 
    <OD SalesOrderID="43860" ProductID="770" /> 
    <OD SalesOrderID="43860" ProductID="758" /> 
    <OD SalesOrderID="43860" ProductID="765" /> 
    <OD SalesOrderID="43860" ProductID="732" /> 
    <OD SalesOrderID="43860" ProductID="762" /> 
    <OD SalesOrderID="43860" ProductID="738" /> 
    <OD SalesOrderID="43860" ProductID="768" /> 
    <OD SalesOrderID="43860" ProductID="753" /> 
    <OD SalesOrderID="43860" ProductID="729" /> 
    <OD SalesOrderID="43860" ProductID="763" /> 
    <OD SalesOrderID="43860" ProductID="756" /> 
  </Order>
</ROOT>

D. Especificar relações indiretas

Neste exemplo, o esquema XDR anotado consiste nos elementos <Customer> e <OD>. A relação entre esses elementos é indireta (a tabela Sales.Customer é relacionada à tabela Sales.SalesOrderDetail pela tabela Sales.SalesOrderHeader). Para relacionar um cliente aos detalhes do pedido, primeiro é especificada a relação entre as tabelas Sales.Customer e Sales.SalesOrderHeader. Então, a relação entre as tabelas Sales.SalesOrderHeader e Sales.SalesOrderDetail é especificada.

Este é o esquema:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="OD" sql:relation="Sales.SalesOrderDetail" >
    <AttributeType name="SalesOrderID" />
    <AttributeType name="ProductID" />
    <AttributeType name="UnitPrice" />

    <attribute type="SalesOrderID" />
    <attribute type="ProductID" />
    <attribute type="UnitPrice" />
</ElementType>
<ElementType name="Customer" sql:relation="Sales.Customer" >
    <AttributeType name="CustomerID" />
    <attribute type="CustomerID" />
    <element type="OD" >
             <sql:relationship 
                    key-relation="Sales.Customer"
                    key="CustomerID"
                    foreign-relation="Sales.SalesOrderHeader"
                    foreign-key="CustomerID"/>
             <sql:relationship 
                    key-relation="Sales.SalesOrderHeader"
                    key="SalesOrderID"
                    foreign-relation="Sales.SalesOrderDetail" 
                    foreign-key="SalesOrderID" />
    </element>
</ElementType>
</Schema>

Para testar uma consulta XPath de exemplo com relação ao esquema

  1. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como indirect-relationship-xdr.xml.

  2. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como indirect-relationship-xdrT.xml no mesmo diretório em que você salvou indirect-relationship-xdr.xml. A consulta no modelo retorna informações do pedido para um cliente CustomerID é 1.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
    <sql:xpath-query mapping-schema="indirect-relationship-xdr.xml" >
    /Customer[@CustomerID="1"]
    </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (indirect-relationship-xdr.xml) é relativo ao diretório onde o modelo é salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\SqlXmlTest\indirect-relationship-xdr.xml"
    
  3. Crie e use o Script de Teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.

Este é o resultado parcial:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1">
    <OD SalesOrderID="43860" ProductID="761" UnitPrice="503.3507" /> 
    <OD SalesOrderID="43860" ProductID="770" UnitPrice="503.3507" /> 
    <OD SalesOrderID="43860" ProductID="758" UnitPrice="1049.7528" /> 
    <OD SalesOrderID="43860" ProductID="765" UnitPrice="503.3507" /> 
    ...
  </Customer>
  </ROOT>

E. Especificar relacionamentos de junção com várias chaves

Ao especificar uma junção usando sql:relationship, você pode especificar uma junção que envolve duas ou mais colunas. Nesse caso, os nomes de coluna para key e foreign-key são listados usando um espaço.

Este exemplo assume que estas duas tabelas existem em um banco de dados temporário (como tempdb):

  • dbo.Cust (fname, lname)

  • dbo.Ord (OrderID, fname, lname)

As colunas fname e lname formam a chave primária da tabela Cust. OrderID é a chave primária da tabela Ord. fname e lname na tabela Ord são chaves estrangeiras que fazem referência à chave primária fname e lname da tabela Cust.

Este esquema consiste nos elementos <Cust> e <Ord>. sql:relationship é usado para fazer a junção deles.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<ElementType name="Ord" sql:relation="Ord" >
    <AttributeType name="OrderID" />

    <attribute type="OrderID" />
</ElementType>

<ElementType name="Cust" sql:relation="Cust" >
    <AttributeType name="fname" />
    <AttributeType name="lname" />
    <attribute type="fname" />
    <attribute type="lname" />
    <element type="Ord" >
             <sql:relationship 
                    key-relation="Cust"
                    key="fname lname"
                    foreign-relation="Ord"
                    foreign-key="fname lname"/>
    </element>
</ElementType>
</Schema>

Para testar uma consulta XPath de exemplo com relação ao esquema

  1. Crie as duas tabelas: Cust e Ord.

    USE tempdb
    CREATE TABLE dbo.Cust(
           fname  varchar(20), 
           lname   varchar(20)
           )
    CREATE TABLE dbo.Ord (
           OrderID int primary key, 
           fname  varchar(20), 
           lname   varchar(20)
           )
    GO
    
  2. Adicione estes dados de exemplo:

    INSERT INTO Cust values ('Nancy', 'Davolio')
    INSERT INTO Cust values('Andrew', 'Fuller')
    INSERT INTO Ord values (1,'Nancy', 'Davolio')
    INSERT INTO Ord values (2,'Nancy', 'Davolio')
    INSERT INTO Ord values (3,'Andrew', 'Fuller')
    
  3. Copie o código de esquema acima e cole-o em um arquivo de texto. Salve o arquivo como multikey-join-xdr.xml.

  4. Copie o modelo a seguir e cole-o em um arquivo de texto. Salve o arquivo como multikey-join-xdrT.xml no mesmo diretório onde você salvou multikey-join-xdr.xml. A consulta no modelo retorna as informações do cliente.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql" >
      <sql:xpath-query mapping-schema="multikey-join-xdr.xml" >
        /Cust
      </sql:xpath-query>
    </ROOT>
    

    O caminho de diretório especificado para o esquema de mapeamento (multikey-join-xdr.xml) é relativo ao diretório onde o modelo está salvo. Também é possível especificar um caminho absoluto, por exemplo:

    mapping-schema="C:\SqlXmlTest\multikey-join-xdr.xml"
    
  5. Crie e use o Script de teste SQLXML 4.0 (Sqlxml4test.vbs) para executar o modelo.

    Para obter mais informações, consulte Usando o ADO para executar consultas do SQLXML 4.0.

Este é o resultado parcial:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Cust fname="Andrew" lname="Fuller"> 
    <Ord OrderID="3" /> 
  </Cust> 
  <Cust fname="Nancy" lname="Davolio"> 
    <Ord OrderID="1" /> 
    <Ord OrderID="2" /> 
  </Cust> 
</ROOT>

Consulte também

Referência