Поделиться через


Задание связей с помощью sql:relationship (схема XDR)

Важное примечаниеВажно!

Этот раздел включен в документацию в качестве справочника по приложениям прежних версий. Дальнейшая разработка этой функции проводиться не будет. Рекомендуется избегать использования данной функции в новых разработках. Вместо этого для создания XML-представлений пользуйтесь схемами XSD с заметками. Дополнительные сведения см. в разделе Введение в схемы XSD с заметками (SQLXML 4.0). Можно преобразовать существующие схемы XDR с заметками в схемы XSD. Дополнительные сведения см. в разделе Преобразование схем XDR с заметками в эквивалентные схемы XSD (SQLXML 4.0).

Элементы в XML-документе могут участвовать в связях. Элементы могут иметь иерархическую вложенность, и между ними могут быть заданы связи ID, IDREF или IDREFS.

Например, в схеме XDR элемент <Customer> содержит дочерние элементы <Order>. Элемент <Customer> сопоставляется с таблицей, которая содержит данные о заказчике (такой как Sales.Customer в базе данных База данных AdventureWorks2008R2). Элемент <Order> сопоставляется таблице, которая содержит данные о заказе в той же базе данных (такой как Sales.SalesORderHeader). Базовые таблицы Sales.Customer и Sales.SalesOrderHeader связаны, так как заказчики размещают заказы. Столбец CustomerID в таблице Sales.SalesOrderHeader представляет собой внешний ключ, ссылающийся на первичный ключ CustomerID в таблице Sales.Customer. Можно установить эти связи между сопоставляемыми элементами схемы с помощью заметки <sql:relationship>.

В схеме XDR с заметками заметка <sql:relationship> используется для иерархического вложения элементов схемы на основе связей между внешним и первичным ключами в базовых таблицах, которым сопоставляется элемент. При указании заметки <sql:relationship> необходимо указать следующее.

  • Главную таблицу (Sales.Customer) и внешнюю таблицу (Sales.SalesOrderHeader).

  • Необходимое условие соединения (столбец CustomerID в таблице Sales.SalesOrderHeader представляет собой внешний ключ, ссылающийся на первичный ключ CustomerID в таблице Sales.Customer).

Эти сведения используются при формировании правильной иерархии (для каждого элемента <customer> связанные элементы <order> отображаются как дочерние элементы).

Чтобы предоставить имена таблиц и необходимые сведения о соединении, следующие атрибуты указываются с помощью заметки <sql:relationship>. Эти атрибуты действительны только с элементом sql:relationship.

  • key-relation
    Указывает главную связь (таблицу).

  • key
    Указывает первичный ключ для key-relation. Если первичный ключ составлен из нескольких столбцов, указанные значения разделяются пробелами. Между значениями, заданными для ключа, состоящего из нескольких столбцов, и соответствующего внешнего ключа, существует позиционное сопоставление.

  • foreign-relation
    Указывает внешнюю связь (таблицу).

  • foreign-key
    Указывает внешний ключ в foreign-relation, который ссылается на key в key-relation. Если внешний ключ составлен из нескольких атрибутов (столбцов), указанные значения внешнего ключа разделяются пробелами. Между значениями, заданными для ключа, состоящего из нескольких столбцов, и соответствующего внешнего ключа, существует позиционное сопоставление.

ПримечаниеПримечание

Типы данных Microsoft SQL Server для key и foreign-key должны обеспечивать неявное преобразование в случае необходимости.

Тег sql:relationship может быть добавлен только к элементам <element> или <attribute> в схеме с заметками. Если в атрибуте указана заметка sql:relationship, для атрибута должны быть указаны sql:relation и sql:field, чтобы получить единственное значение (в XML недопустимы несколько атрибутов с одним именем). Если для элемента указана заметка sql:relationship, результатом связи может стать одно значение или набор значений.

Тег sql:relationship используется, чтобы указать единственную логическую связь между двумя сущностями. Атрибуты определяют связи и поля, используемые для определения логической связи. Несколько экземпляров заметки sql:relationship могут быть указаны в элементе или атрибуте в схеме с заметками, что указывает на сложную связь между элементом или атрибутом и содержащим его элементом. Все экземпляры заметок sql:relationship используются совместно, чтобы определить сложную связь.

Если в элементе или атрибуте указаны несколько экземпляров тега sql:relationship, важен порядок их следования.

Заметка sql:key-fields должна быть указана в элементе, содержащем дочерний элемент и заметку sql:relationship, определенную между элементом и потомком, который не предоставляет первичный ключ таблицы, указанной в родительском элементе. Дополнительные сведения см. в разделе Идентификация ключевых столбцов с использованием sql:key-fields (SQLXML 4.0). Чтобы правильно организовать вложенность в результатах, рекомендуется во всех схемах задавать заметку sql:key-fields.

ПримечаниеПримечание

В схеме сопоставления реляционные значения, такие как имя таблицы и имя столбца, учитывают регистр.

Примеры

Чтобы создать рабочие образцы на основе следующих примеров, необходимо выполнить определенные требования. Дополнительные сведения см. в разделе Требования к запуску примеров SQLXML.

А. Указание заметки sql:relationship для <element>

Эта схема XDR с заметками включает элементы <Customer> и <Order>. Элемент <Order> является дочерним для элемента <Customer>.

В схеме задана заметка sql:relationship для дочернего элемента <Order>. Заметка определяет CustomerID в таблице Sales.SalesOrderHeader как внешний ключ, ссылающийся на первичный ключ CustomerID в таблице Sales.Customer. Поэтому заказы, принадлежащие заказчику, отображаются как дочерний элемент этого элемента <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>
ПримечаниеПримечание

В схеме сопоставления реляционные значения, такие как имя таблицы и имя столбца, учитывают регистр. Как и в предыдущем примере, Customers является значением атрибута sql:relation. Соответствующий атрибут key-relation также должен иметь значение Customers.

Проверка образца запроса XPath к схеме

  1. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как sql-relationship-xdr.xml.

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как sql-relationship-xdrT.xml в том же каталоге, в котором был сохранен файл sql-relationship-xdr.xml. Запрос в шаблоне выберет клиента со значением идентификатора 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>
    

    Путь к каталогу схемы сопоставления (файл sql-relationship-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\sql-relationship-xdr.xml"
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.

Частичный результирующий набор:

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

Б. Указание заметки sql:relationship для элемента <attribute> и создание ссылки на документ с помощью ID и IDREFS

В этом примере локальные ссылки на документ указываются с помощью ID и IDREFS. Образец схемы XDR состоит из элемента <Customer>, который сопоставляется таблице Sales.Customer. Этот элемент состоит из дочернего элемента <Order>, который сопоставляется таблице Sales.SalesOrderHeader.

В данном примере заметка sql:relationship указывается дважды.

  • sql:relationship указывается для дочернего элемента <Order>. Поэтому заказы, принадлежащие заказчику, будут отображаться как дочерний элемент этого элемента <Customer>.

  • sql:relationship также указывается для атрибута OrderIDList элемента <Customer>. Этот атрибут определяется как тип IDREFS, ссылающийся на атрибут SalesOrderID (атрибут типа ID) элемента <Order>. Поэтому заметка sql:relationship является обязательной. В этом случае заметка sql:relationship позволяет отобразить список заказов, принадлежащих заказчику, с этим элементом <Customer>.

    Атрибуты, указанные как IDREFS, можно использовать для ссылок на атрибуты типа ID, таким образом разрешая ссылки внутри документов.

Поскольку числа не являются допустимыми значениями ID (должны быть токенами имени), используется заметка sql:id-prefix, чтобы сделать Order ID строковым значением. Дополнительные сведения см. в разделе Создание допустимых атрибутов типа ID, IDREF и IDREFS с помощью sql:id-prefix (схема 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>

Проверка образца запроса XPath к схеме

  1. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как idIdref-xdr.xml.

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как idIdref-xdrT.xml в том же каталоге, в котором был сохранен файл idIdref-xdr.xml. Запрос в шаблоне выберет клиента со значением идентификатора 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>
    

    Путь к каталогу для схемы сопоставления (idIdref-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\idIdref-xdr.xml"
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.

Полученный результирующий набор показан ниже.

<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="2005-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2005-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2006-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2006-05-01T00:00:00" /> 
  </Customer>
</ROOT>

В. Указание заметки sql:relationship для нескольких элементов

В этом примере схема XDR с заметками состоит из элементов <Customer>, <Order> и <OD>.

Элемент <Order> является дочерним элементом элемента <Customer>. Заметка sql:relationship указывается для дочернего элемента <Order>, поэтому заказы, принадлежащие заказчику, отображаются как дочерние элементы <Customer>.

Элемент <Order> содержит дочерний элемент <OD>. Заметка sql:relationship указывается для дочернего элемента <OD> , поэтому подробности заказа отображаются как дочерние элементы этого элемента <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>

Проверка образца запроса XPath к схеме

  1. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как sql-relationship-multi-xdr.xml.

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как sql-relationship-multi-xdrT.xml в том же каталоге, в котором был сохранен файл sql-relationship-multi-xdr.xml. Запрос в шаблоне возвращает сведения о заказчике со значением CustomerID, равным 1, и значением 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>
    

    Путь к каталогу схемы сопоставления (файл sql-relationship-multi-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\sql-relationship-multi-xdr.xml"
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.

Полученный результирующий набор показан ниже.

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Order CustomerID="1" SalesOrderID="43860" OrderDate="2005-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>

Г. Указание косвенных связей

В этом примере схема XDR с заметками состоит из элементов <Customer> и <OD>. Связь между этими элементами косвенная (таблица Sales.Customer table связана с таблицей Sales.SalesOrderDetail через таблицу Sales.SalesOrderHeader). Чтобы сопоставить заказчика со сведениями о заказах, сначала необходимо указать связь между таблицей Sales.Customer и Sales.SalesOrderHeader. Затем указывается связь между таблицами Sales.SalesOrderHeader и Sales.SalesOrderDetail.

Схема:

<?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>

Проверка образца запроса XPath к схеме

  1. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как indirect-relationship-xdr.xml.

  2. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как indirect-relationship-xdrT.xml в том же каталоге, в котором был сохранен файл indirect-relationship-xdr.xml. Запрос в шаблоне возвращает сведения о заказах со значением 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>
    

    Путь к каталогу схемы сопоставления (файл indirect-relationship-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\indirect-relationship-xdr.xml"
    
  3. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.

Частичный результат:

<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>

Д. Указание многоключевых связей объединения

Указывая соединение с помощью заметки sql:relationship, можно указать соединение, включающее два и более столбца. В этом случае имена столбцов для key и foreign-key перечислены с помощью пробела.

В этом примере предполагается, что эти две таблицы существуют во временной базе данных (такой как tempdb):

  • dbo.Cust (fname, lname);

  • dbo.Ord (OrderID, fname, lname).

Столбцы fname и lname — из первичного ключа таблицы Cust. OrderID — первичный ключ таблицы Ord. fname и lname в таблице Ord — внешние ключи, которые ссылаются на первичный ключ lname в таблице Cust.

Эта схема состоит из элементов <Cust> и <Ord>. Заметка sql:relationship используется для их соединения.

<?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>

Проверка образца запроса XPath к схеме

  1. Создайте две таблицы: Cust и 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. Добавьте следующий образец данных:

    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. Скопируйте приведенный выше код схемы и вставьте его в текстовый файл. Сохраните файл как imultikey-join-xdr.xml.

  4. Скопируйте следующий шаблон и вставьте его в текстовый файл. Сохраните файл как multikey-join-xdrT.xml в том же каталоге, в котором был сохранен файл multikey-join-xdr.xml. Запрос в шаблоне сведения о заказчике.

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

    Путь к каталогу схемы сопоставления (файл multikey-join-xdr.xml) задается относительно каталога, в котором сохранен шаблон. Можно также задать абсолютный путь, например:

    mapping-schema="C:\SqlXmlTest\multikey-join-xdr.xml"
    
  5. Создайте и запустите тестовый скрипт SQLXML 4.0 (Sqlxml4test.vbs), чтобы выполнить шаблон.

    Дополнительные сведения см. в разделе Использование ADO для выполнения запросов SQLXML 4.0.

Частичный результат:

<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>