Aracılığıyla paylaş


sql:relationship (SQLXML 4.0) kullanılarak İlişkileri Belirtmek

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

Bir XML belgesindeki öğeler ilişkili olabilir. Öğeler hiyerarşik olarak iç içe geçirilebilir ve öğeler arasında ID, IDREF veya IDREFS ilişkileri belirlenebilir.

Örneğin, bir XSD şemasında, bir< Müşteri> öğesi Order> alt elemanları içerir<. Şema AdventureWorks veritabanına eşlendiğinde, <Müşteri> öğesi Sales.Customer tablosuna, <Sipariş> öğesi ise Sales.SalesOrderHeader tablosuna eşlenir. Bu temel tablolar, Sales.Customer ve Sales.SalesOrderHeader, müşterilerin sipariş vermesi nedeniyle ilişkilidir. Sales.SalesOrderHeader tablosundaki CustomerID, Sales.Customer tablosunda CustomerID birincil anahtarına atıfta bulunan yabancı bir anahtardır. Bu ilişkileri, sql:ilişki açıklamasını kullanarak eşleme şema öğeleri arasında kurabilirsiniz.

Annotasyonlu XSD şemasında, sql:ilişki açıklaması, şema öğelerini hiyerarşik olarak yuvalamak için kullanılır; bu, öğelerin eşlendiği temel anahtar ve yabancı anahtar ilişkileri temelinde. sql:ilişki açıklamasını belirtirken, aşağıdakileri belirtmelisiniz:

  • Ana tablo (Sales.Customer) ve alt tablo (Sales.SalesOrderHeader).

  • Ebeveyn ve alt tablolar arasındaki ilişkiyi oluşturan sütun veya sütunlar. Örneğin, hem ebeveyn hem de alt tablolarda görünen CustomerID sütunu.

Bu bilgiler, doğru hiyerarşinin oluşturulmasında kullanılır.

Tablo adlarını ve gerekli birleştirme bilgilerini sağlamak için, sql:relationship açıklamasında aşağıdaki öznitelikler belirtilmiştir. Bu nitelikler yalnızca <sql:ilişki> öğesi ile geçerlidir:

İsim
İlişkinin benzersiz adını belirtir.

Ebeveyn
Ebeveyn ilişkisini (tablo) belirtir. Bu isteğe bağlı bir özelliktir; Öznitelik belirtilmemişse, ana tablo adı belgedeki çocuk hiyerarşideki bilgilerden elde edilir. Şema aynı sql:ilişki> ama farklı ebeveyn öğeleri kullanan iki ebeveyn-çocuk hiyerarşisi< belirtiyorsa, sql:relationship'te> ana özniteliği< belirtilmez. Bu bilgiler şemadaki hiyerarşiden elde edilir.

ebeveyn-anahtar
Ebeveynin ana anahtarını belirtir. Eğer ana anahtar birden fazla sütundan oluşuyorsa, değerler aralarında bir boşluk ile belirtilir. Çok sütunlu anahtar ile ilgili çocuk anahtar için belirlenen değerler arasında konumsal bir eşleme vardır.

alt
Çocuk ilişkiyi (tablo) belirtir.

çocuk anahtarı
Parent-anahtarına referans veren child anahtarını belirtir. Eğer çocuk anahtar birden fazla öznitelikten (sütundan) oluşuyorsa, çocuklar anahtar değerleri aralarında boşluk bırakılır. Çok sütunlu anahtar ile ilgili ana anahtar için belirlenen değerler arasında konumsal bir eşleme vardır.

Ters
sql:relationship'te<> belirtilen bu öznitelik, updategrams tarafından kullanılır. Daha fazla bilgi için, sql:ilişki üzerinde sql:inverse Özniteliğinin Belirtilmesi bölümüne bakınız.

sql:key-fields açıklaması, bir alt öğe içeren, eleman ile çocuk arasında tanımlanmış< sql:ilişkisi> olan ve ana elemanda belirtilen tablonun birincil anahtarını sağlamayan bir elemanda belirtilmelidir. Şema sql:ilişki> belirtmese< bile, doğru hiyerarşiyi oluşturmak için sql:key-fields belirtmeniz gerekir. Daha fazla bilgi için bkz. Anahtar Sütunlarını sql:key-fields kullanarak tanımlamak.

Sonuçta doğru iç içe geçirme sağlamak için, tüm şemalarda sql:key-alanlarının belirtilmesi önerilir.

Örnekler

Aşağıdaki örneklerle çalışma örnekleri oluşturmak için belirli gereksinimleri karşılamanız gerekir. Daha fazla bilgi için Gereksinimler için SQLXML Örnekleri Çalışması için Gereksinimlere bakınız.

A. Bir eleman üzerinde sql:ilişki açıklamasının belirtilmesi

Aşağıdaki açıklamalı XSD şeması Müşteri> ve Sipariş öğelerini içerir<.>< Sipariş> öğesi,<Müşteri<> öğesinin bir alt öğesidir.

Şemada, sql:ilişki açıklaması Order> child öğesinde belirtilir<. İlişki, xsd:appinfo> öğesinde tanımlanır<.

İlişki> öğesi,< Sales.SalesOrderHeader tablosunda CustomerID'yi Sales.Customer tablosunda CustomerID birincil anahtarına atıfta bulunan yabancı bir anahtar olarak tanımlar. Bu nedenle, müşteriye ait olan siparişler, o <Müşteri> unsurunun bir çocuk unsuru olarak görünür.

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

Önceki şema isimlendirilmiş bir ilişki kullanır. Ayrıca isimsiz bir ilişki de belirtebilirsiniz. Sonuçlar aynı.

Bu, isimsiz bir ilişkinin belirtildiği revize edilmiş şemadır:

<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>  
Örnek XPath sorgusunu şema karşısında test etmek için
  1. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı sql-relationship.xmlolarak kaydet.

  2. Aşağıdaki şablonu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde sql-relationshipT.xml olarak kaydet sql-relationship.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>  
    

    Eşleme şeması (sql-relationship.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\MyDir\sql-relationship.xml"  
    
  3. Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. Using ADO to execute SQLXML Queries.

Sonuç kümesi aşağıdadır:

<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. İlişki zinciri belirtmek

Bu örnek için, AdventureWorks veritabanından elde edilen verilerle aşağıdaki XML belgesini istediğinizi varsayalım:

<Order SalesOrderID="43659">  
  <Product Name="Mountain Bike Socks, M"/>   
  <Product Name="Sport-100 Helmet, Blue"/>  
  ...  
</Order>  
...  

Sales.SalesOrderHeader tablosundaki her sipariş için XML belgesinde bir <Sipariş> öğesi bulunur. Ve her <Sipariş> öğesinin, siparişte istenen her ürün için bir ürün> alt öğesi listesi vardır<.

Bu hiyerarşiyi oluşturacak bir XSD şemasını belirtmek için iki ilişki belirtmeniz gerekir: OrderOD ve ODProduct. OrderOD ilişkisi, Sales.SalesOrderHeader ve Sales.SalesOrderDetail tabloları arasındaki ebeveyn-övlak ilişkisini belirtir. ODProduct ilişkisi, Sales.SalesOrderDetail ve Production.Product tabloları arasındaki ilişkiyi belirtir.

Aşağıdaki şemada, Ürün<> öğesindeki msdata:ilişki açıklaması iki değer belirtir: OrderOD ve ODProduct. Bu değerlerin ne sırayla belirlendiği önemlidir.

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

Isimli bir ilişki belirtmek yerine, anonim bir ilişki belirtebilirsiniz. Bu durumda, annotasyonun<> tüm içeriği... </annotation>, iki ilişkiyi tanımlayan ve Ürün'ün<> bir çocuk öğesi olarak görünür.

<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>  
Örnek XPath sorgusunu şema karşısında test etmek için
  1. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı relationshipChain.xmlolarak kaydet.

  2. Aşağıdaki şablonu kopyalayıp metin dosyasına yapıştırın. Dosyayı aynı dizinde relationshipChainT.xml olarak kaydet relationshipChain.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="relationshipChain.xml">  
            /Order  
        </sql:xpath-query>  
    </ROOT>  
    

    Eşleme şeması (relationshipChain.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\MyDir\relationshipChain.xml"  
    
  3. Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. Using ADO to execute SQLXML Queries.

Sonuç kümesi aşağıdadır:

<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. Bir öznitelik üzerindeki ilişki açıklamasının belirtilmesi

Bu örnekteki şema, CustomerID> alt öğesi ve IDREFS tipinde bir OrderIDList özniteliğine sahip bir <Müşteri> öğesi <içerir. Müşteri> öğesi, <AdventureWorks veritabanındaki Sales.Customer tablosuna eşlenir. Varsayılan olarak, bu eşlemenin kapsamı, sql:relation alt öğe veya öznitelikte belirtilmedikçe tüm alt öğeler veya öznitelikler için geçerlidir; bu durumda, uygun birincil anahtar/yabancı anahtar ilişkisi ilişki> öğesi kullanılarak <tanımlanmalıdır. Ve ilişki açıklamasını kullanarak farklı tabloyu belirleyen alt öğe veya öznitelik, ilişki açıklamasını da belirtmelidir.

<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>  
Örnek XPath sorgusunu şema karşısında test etmek için
  1. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı relationship-on-attribute.xmlolarak kaydet.

  2. Aşağıdaki şablonu kopyalayıp bir dosyaya yapıştırın. Dosyayı aynı dizinde relationship-on-attributeT.xml olarak kaydet relationship-on-attribute.xml. Şablondaki sorgu, CustomerID 1 olan bir müşteriyi seçer.

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

    Eşleme şeması (relationship-on-attribute.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\MyDir\relationship-on-attribute.xml"  
    
  3. Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. Using ADO to execute SQLXML Queries.

Sonuç kümesi aşağıdadır:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">   
  <Customer OrderIDList="43860 44501 45283 46042">  
    <CustomerID>1</CustomerID>   
  </Customer>  
</ROOT>  

D. Birden fazla eleman üzerinde sql:ilişki belirtilmesi

Bu örnekte, annotasyonlu XSD şeması Customer>, Order ve OrderDetail öğelerini içerir<.<>><

Sipariş> öğesi,<Müşteri<> öğesinin bir alt öğesidir. <sql:relationship>, Sipariş> alt öğesinde< belirtilmiştir; bu nedenle, müşteriye ait olan siparişler Müşteri'nin<> alt öğeleri olarak görünür.

Order öğesi, OrderDetail> alt öğesini< içerir.<> <sql:relationship> , <OrderDetail> alt öğesinde belirtilmiştir, bu nedenle bir emre ait sıra detayları, o <Order> öğesinin alt elemanları olarak görünür.

<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>  
Örnek XPath sorgusunu şema karşısında test etmek için
  1. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı relationship-multiple-elements.xmlolarak kaydet.

  2. Aşağıdaki şablonu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı aynı dizinde relationship-multiple-elementsT.xml olarak kaydet relationship-multiple-elements.xml. Şablondaki sorgu, CustomerID 1 ve SalesOrderID 43860 olan bir müşterinin sipariş bilgilerini döndürür.

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

    Eşleme şeması (relationship-multiple-elements.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\MyDir\relationship-multiple-elements.xml"  
    
  3. Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. Using ADO to execute SQLXML Queries.

Sonuç kümesi aşağıdadır:

<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. Ebeveyn özniteliği olmadan sql:ilişki> belirtilmesi <

Bu örnek, ana öznitelik olmadan sql:ilişkisinin> belirtilmesini< gösterir. Örneğin, aşağıdaki çalışan tablolarınız olduğunu varsayalım:

Emp1(SalesPersonID, FirstName, LastName, ReportsTo)  
Emp2(SalesPersonID, FirstName, LastName, ReportsTo)  

Aşağıdaki XML görünümünde <, Emp1> ve <Emp2> elemanları Sales.Emp1 ve Sales.Emp2 tablolarına eşlenir:

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

Şemada hem <Emp1> hem <de Emp2> elemanı EmpType tipindendir. EmpType türü, bir <Order> child elemanını ve ona karşılık gelen< sql:ilişkisini> tanımlar. Bu durumda, sql:relationship'te> ebeveyn özniteliği kullanılarak tanımlanabilecek< tek bir ebeveyn yoktur. Bu durumda, sql:relationship'te> ana özniteliği< belirtmiyorsunuz; ebeveyn öznitelik bilgisi şemadaki hiyerarşiden elde edilir.

Örnek XPath sorgusunu şema karşısında test etmek için
  1. AdventureWorks veritabanında şu tabloları oluşturun:

    USE AdventureWorks2022;
    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  
    
  2. Bu örnek veriyi tablolara ekleyin:

    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)  
    
  3. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı relationship-noparent.xmlolarak kaydet.

  4. Aşağıdaki şablonu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı aynı dizinde relationship-noparentT.xml olarak kaydet relationship-noparent.xml. Şablondaki sorgu tüm <Emp1> öğelerini seçer (dolayısıyla ana eleman Emp1'dir).

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
        <sql:xpath-query mapping-schema="relationship-noparent.xml">  
            /Emp1  
        </sql:xpath-query>  
    </ROOT>  
    

    Eşleme şeması (relationship-noparent.xml) için belirtilen dizin yolu, şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\MyDir\relationship-noparent.xml"  
    
  5. Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. Using ADO to execute SQLXML Queries.

İşte kısmi bir sonuç kümesi:

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