Freigeben über


Angeben von Beziehungen mithilfe von sql:relationship (SQLXML 4.0)

Die Elemente in einem XML-Dokument können verknüpft sein. Die Elemente können hierarchisch geschachtelt werden, und ID,IDREF- oder IDREFS-Beziehungen können zwischen den Elementen angegeben werden.

Beispielsweise enthält <ein Customer-Element in einem XSD-Schema untergeordnete Elemente "Order>".>< Wenn das Schema der AdventureWorks-Datenbank zugeordnet ist, ordnet das <Element "Customer> " der Tabelle "Sales.Customer" und dem <"Order> "-Element der Tabelle "Sales.SalesOrderHeader" zu. Diese zugrunde liegenden Tabellen, Sales.Customer und Sales.SalesOrderHeader, sind verknüpft, da Kunden Bestellungen aufgeben. Die CustomerID in der Tabelle "Sales.SalesOrderHeader" ist ein Fremdschlüssel, der auf den Primärschlüssel "CustomerID" in der Tabelle "Sales.Customer" verweist. Sie können diese Beziehungen zwischen Zuordnungsschemaelementen mithilfe der sql:relationship Anmerkung einrichten.

Im kommentierten XSD-Schema wird die sql:relationship Anmerkung verwendet, um die Schemaelemente hierarchisch zu verschachteln, basierend auf Primärschlüssel- und Fremdschlüsselbeziehungen zwischen den zugrunde liegenden Tabellen, denen die Elemente zugeordnet sind. Wenn Sie die sql:relationship Anmerkung angeben, müssen Sie Folgendes identifizieren:

  • Die übergeordnete Tabelle (Sales.Customer) und die untergeordnete Tabelle (Sales.SalesOrderHeader).

  • Die Spalte oder Spalten, die die Beziehung zwischen den übergeordneten und untergeordneten Tabellen verfassen. Beispielsweise die Spalte "CustomerID", die sowohl in den übergeordneten als auch in untergeordneten Tabellen angezeigt wird.

Diese Informationen werden verwendet, um die richtige Hierarchie zu generieren.

Um die Tabellennamen und die erforderlichen Verknüpfungsinformationen bereitzustellen, werden die folgenden Attribute für die sql:relationship Anmerkung angegeben. Diese Attribute sind nur mit dem <sql:relationship-Element> gültig:

Name
Gibt den eindeutigen Namen der Beziehung an.

Eltern
Gibt die übergeordnete Beziehung (Tabelle) an. Dies ist ein optionales Attribut; wenn das Attribut nicht angegeben ist, wird der übergeordnete Tabellenname aus Informationen in der untergeordneten Hierarchie im Dokument abgerufen. Wenn das Schema zwei übergeordnete hierarchien angibt, die dieselbe <sql:relationship> , aber unterschiedliche übergeordnete Elemente verwenden, geben Sie das übergeordnete Attribut in <sql:relationship> nicht an. Diese Informationen werden aus der Hierarchie im Schema abgerufen.

parent-key
Gibt den übergeordneten Schlüssel des übergeordneten Elements an. Wenn der übergeordnete Schlüssel aus mehreren Spalten besteht, werden Werte mit einem Leerzeichen dazwischen angegeben. Es gibt eine Positionszuordnung zwischen den Werten, die für den mehrspaltigen Schlüssel und für den entsprechenden untergeordneten Schlüssel angegeben sind.

untergeordneten
Gibt die untergeordnete Beziehung (Tabelle) an.

untergeordneter Schlüssel
Gibt den untergeordneten Schlüssel im untergeordneten Element an, der auf den übergeordneten Schlüssel im übergeordneten Element verweist. Wenn der untergeordnete Schlüssel aus mehreren Attributen (Spalten) besteht, werden die untergeordneten Schlüsselwerte mit einem Leerzeichen dazwischen angegeben. Es gibt eine Positionszuordnung zwischen den Werten, die für den mehrspaltigen Schlüssel und für den entsprechenden übergeordneten Schlüssel angegeben sind.

Revers
Dieses attribut, das für <sql:relationship> angegeben ist, wird von Updategrammen verwendet. Weitere Informationen finden Sie unter Angeben des sql:inverse-Attributs für sql:relationship.

Die sql:key-fields Anmerkung muss in einem Element angegeben werden, das ein untergeordnetes Element enthält, das eine <sql:relationship> zwischen dem Element und dem untergeordneten Element definiert hat und nicht den Primärschlüssel der Tabelle bereitstellt, die im übergeordneten Element angegeben ist. Auch wenn das Schema nicht sql:relationship> angibt<, müssen Sie angebensql:key-fields, dass die richtige Hierarchie erzeugt wird. Weitere Informationen finden Sie unter Identifizieren von Schlüsselspalten mithilfe von sql:key-fields.

Um eine ordnungsgemäße Schachtelung im Ergebnis zu erzielen, wird empfohlen, dass sie sql:key-fields in allen Schemas angegeben werden.

Beispiele

Es müssen bestimmte Anforderungen erfüllt sein, damit aus den folgenden Beispielen funktionierende Beispiele erstellt werden können. Weitere Informationen finden Sie unter Anforderungen für das Ausführen von SQLXML-Beispielen.

Ein. Angeben der sql:relationship-Anmerkung für ein Element

Das folgende kommentierte XSD-Schema enthält <Customer> - und <Order-Elemente> . Das Order-Element<> ist ein untergeordnetes Element des <Customer-Elements>.

Im Schema wird die sql:relationship Anmerkung für das <untergeordnete Element Order> angegeben. Die Beziehung selbst wird im <xsd:appinfo-Element> definiert.

Das <Beziehungselement> identifiziert CustomerID in der Tabelle "Sales.SalesOrderHeader" als Fremdschlüssel, der auf den Primärschlüssel "CustomerID" in der Tabelle "Sales.Customer" verweist. Daher werden Bestellungen, die zu einem Kunden gehören, als untergeordnetes Element dieses <Customer-Elements> angezeigt.

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

Das vorherige Schema verwendet eine benannte Beziehung. Sie können auch eine unbenannte Beziehung angeben. Die Ergebnisse sind identisch.

Dies ist das überarbeitete Schema, in dem eine unbenannte Beziehung angegeben wird:

<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>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als sql-relationship.xml.

  2. Kopieren Sie die folgende Vorlage unten, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als sql-relationshipT.xml im selben Verzeichnis, in dem Sie sql-relationship.xmlgespeichert haben.

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

    Der für das Zuordnungsschema (sql-relationship.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\sql-relationship.xml"  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.

Im Folgenden wird das Resultset aufgeführt:

<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. Angeben einer Beziehungskette

Gehen Sie in diesem Beispiel davon aus, dass Sie das folgende XML-Dokument mit Daten aus der AdventureWorks-Datenbank verwenden möchten:

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

Für jede Bestellung in der Tabelle "Sales.SalesOrderHeader" weist das XML-Dokument ein <Order-Element> auf. Und jedes <Order-Element> verfügt über eine Liste untergeordneter Elemente des <Produkts> , eines für jedes Produkt, das in der Bestellung angefordert wird.

Um ein XSD-Schema anzugeben, das diese Hierarchie erzeugt, müssen Sie zwei Beziehungen angeben: OrderOD und ODProduct. Die OrderOD-Beziehung gibt die Beziehung zwischen den Tabellen "Sales.SalesOrderHeader" und "Sales.SalesOrderDetail" an. Die ODProduct-Beziehung gibt die Beziehung zwischen den Tabellen "Sales.SalesOrderDetail" und "Production.Product" an.

Im folgenden Schema gibt die msdata:relationship Anmerkung für das <Product-Element> zwei Werte an: OrderOD und ODProduct. Die Reihenfolge, in der diese Werte angegeben werden, ist wichtig.

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

Statt eine benannte Beziehung anzugeben, können Sie eine anonyme Beziehung angeben. In diesem Fall wird der gesamte Inhalt der <Anmerkung>... </annotation>, die die beiden Beziehungen beschreibt, werden als untergeordnetes Element von <Product> angezeigt.

<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>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als relationshipChain.xml.

  2. Kopieren Sie die folgende Vorlage unten, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als relationshipChainT.xml im selben Verzeichnis, in dem Sie relationshipChain.xmlgespeichert haben.

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

    Der für das Zuordnungsschema (relationshipChain.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\relationshipChain.xml"  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.

Im Folgenden wird das Resultset aufgeführt:

<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. Angeben der Beziehungsanmerkung für ein Attribut

Das Schema in diesem Beispiel enthält ein <Customer-Element> mit einem <untergeordneten CustomerID-Element> und ein OrderIDList-Attribut des IDREFS-Typs. Das Customer-Element <> ist der Tabelle "Sales.Customer" in der AdventureWorks-Datenbank zugeordnet. Standardmäßig gilt der Bereich dieser Zuordnung für alle untergeordneten Elemente oder Attribute, es sei denn sql:relation , sie wird für das untergeordnete Element oder Attribut angegeben, in diesem Fall muss die entsprechende Primärschlüssel-/Fremdschlüsselbeziehung mithilfe des <Beziehungselements> definiert werden. Und das untergeordnete Element oder Attribut, das die andere Tabelle mit der relation Anmerkung angibt, muss auch die relationship Anmerkung angeben.

<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>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als relationship-on-attribute.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Datei ein. Speichern Sie die Datei als relationship-on-attributeT.xml im selben Verzeichnis, in dem Sie relationship-on-attribute.xmlgespeichert haben. Die Abfrage in der Vorlage wählt einen Kunden mit der Kunden-ID von 1 aus.

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

    Der für das Zuordnungsschema (relationship-on-attribute.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\relationship-on-attribute.xml"  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.

Im Folgenden wird das Resultset aufgeführt:

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

D. Angeben von sql:relationship für mehrere Elemente

In diesem Beispiel enthält das kommentierte XSD-Schema die <Elemente "Customer>", <"Order>" und <"OrderDetail> ".

Das Order-Element<> ist ein untergeordnetes Element des <Customer-Elements>. <sql:relationship> wird für das <untergeordnete Element "Order> " angegeben. Daher werden Bestellungen, die zu einem Kunden gehören, als untergeordnete Elemente des <Kunden> angezeigt.

Das <Order-Element> enthält das <untergeordnete Element "OrderDetail> ". <sql:relationship> wird für <das untergeordnete Element "OrderDetail> " angegeben, sodass die Bestelldetails, die zu einer Reihenfolge gehören, als untergeordnete Elemente dieses <Order-Elements> angezeigt werden.

<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>  
So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als relationship-multiple-elements.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als relationship-multiple-elementsT.xml im selben Verzeichnis, in dem Sie relationship-multiple-elements.xmlgespeichert haben. Die Abfrage in der Vorlage gibt Bestellinformationen für einen Kunden mit der CustomerID von 1 und SalesOrderID von 43860 zurück.

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

    Der für das Zuordnungsschema (relationship-multiple-elements.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\relationship-multiple-elements.xml"  
    
  3. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.

Im Folgenden wird das Resultset aufgeführt:

<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. Angeben der <sql:relationship> ohne das übergeordnete Attribut

In diesem Beispiel wird die Angabe der <sql:relationship> ohne das übergeordnete Attribut veranschaulicht. Angenommen, Sie haben die folgenden Mitarbeitertabellen:

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

Die folgende XML-Ansicht enthält die <Elemente Emp1> und <Emp2> , die den Tabellen "Sales.Emp1" und "Sales.Emp2" zugeordnet sind:

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

Im Schema sind sowohl das Emp1-Element> als auch das<Emp2-Element> vom Typ .<EmpType Der Typ EmpType beschreibt ein untergeordnetes Order-Element<> und die entsprechende <sql:relationship>. In diesem Fall gibt es kein einzelnes übergeordnetes Element, das mithilfe des übergeordneten Attributs in <sql:relationship> identifiziert werden kann. In diesem Fall geben Sie das übergeordnete Attribut in <"sql:relationship>" nicht an. Die Informationen zum übergeordneten Attribut werden aus der Hierarchie im Schema abgerufen.

So testen Sie eine XPath-Beispielabfrage für das Schema
  1. Erstellen Sie diese Tabellen in der AdventureWorks-Datenbank:

    USE AdventureWorks  
    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. Fügen Sie diese Beispieldaten in den Tabellen hinzu:

    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. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als relationship-noparent.xml.

  4. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als relationship-noparentT.xml im selben Verzeichnis, in dem Sie relationship-noparent.xmlgespeichert haben. Die Abfrage in der Vorlage wählt alle <Emp1-Elemente> aus (daher ist das übergeordnete Element Emp1).

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

    Der für das Zuordnungsschema (relationship-noparent.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\relationship-noparent.xml"  
    
  5. Erstellen und verwenden Sie das SQLXML 4.0-Testskript (Sqlxml4test.vbs), um die Vorlage auszuführen.

    Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML-Abfragen.

Hier ist ein partielles Resultset:

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