Freigeben über


Verwenden von XSD-Schemas mit Anmerkungen in Abfragen (SQLXML 4.0)

Sie können Abfragen auf ein Schema mit Anmerkungen angeben, um Daten von der Datenbank abzurufen, indem Sie Xpath-Abfragen in einer Vorlage auf ein XSD-Schema festlegen.

Mit dem <sql:xpath-query>-Element können Sie eine Xpath-Abfrage auf eine XML-Sicht angeben, die von dem Schema mit Anmerkungen definiert wird. Das Schema mit Anmerkungen, auf das die Xpath-Abfrage ausgeführt werden soll, wird mithilfe des mapping-schema-Attributs des <sql:xpath-query>-Elements identifiziert.

Vorlagen sind gültige XML-Dokumente, die eine oder mehrere Abfragen enthalten. Die FOR XML- und XPath-Abfragen geben ein Dokumentfragment zurück. Vorlagen fungieren als Container für die Dokumentfragmente und bieten so eine Möglichkeit, ein einzelnes Element der obersten Ebene anzugeben.

Im Beispiel in diesem Thema werden Vorlagen dazu verwendet, eine Xpath-Abfrage auf ein Schema mit Anmerkungen auszuführen, um Daten von der Datenbank abzurufen.

Beispiel:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
  <xsd:element name="Person.Contact" >
     <xsd:complexType>
       <xsd:attribute name="ContactID" type="xsd:string" /> 
       <xsd:attribute name="FirstName" type="xsd:string" /> 
       <xsd:attribute name="LastName"  type="xsd:string" /> 
     </xsd:complexType>
  </xsd:element>
</xsd:schema>

Zur Veranschaulichung wird dieses XSD-Schema in einer Datei mit dem Namen Schema2.xml gespeichert. Sie können dann eine Xpath-Abfrage auf das in der folgenden Vorlagendatei angegebene Schema mit Anmerkungen (Schema2.xml) ausführen:

<sql:xpath-query 
     xmlns:sql="urn:schemas-microsoft-com:xmlsql"
     >
          Person.Contact[@ContactID="1"]
</sql:xpath-query>

Sie können dann das SQLXML 4.0-Testskript (Sqlxml4test.vbs) erstellen und es dazu verwenden, die Abfrage als Teil der Vorlagedatei auszuführen. Weitere Informationen finden Sie unter Verwenden von ADO zum Ausführen von SQLXML 4.0-Abfragen.

Verwenden von Inlinezuordnungsschemas

Ein Schema mit Anmerkungen kann direkt in eine Vorlage eingefügt werden, und dann kann eine Xpath-Abfrage in der Vorlage auf das Inlineschema angegeben werden. Die Vorlage kann auch ein Updategram sein.

Eine Vorlage kann mehrere Inlineschemas einschließen. Geben Sie das id-Attribut mit einem eindeutigen Wert für das <xsd:schema>-Element an, und verweisen Sie dann mithilfe von #idvalue auf das Inlineschema, um ein in einer Vorlage eingeschlossenes Inlineschema zu verwenden. Das Verhalten des id-Attributs ist mit dem des in XDR-Schemas verwendeten sql:id-Attributs ({urn:schemas-microsoft-com:xml-sql} ID) identisch. Weitere Informationen finden Sie unter Verwenden von XDR-Schemas mit Anmerkungen in Abfragen (in SQLXML 4.0 veraltet).

Die folgende Vorlage gibt beispielsweise zwei Inlineschemas mit Anmerkungen an:

<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
        id='InLineSchema1' sql:is-mapping-schema='1'>
  <xsd:element name='Employees' ms:relation='HumanResources.Employee'>
    <xsd:complexType>
      <xsd:attribute name='LoginID' 
                     type='xsd:string'/>
      <xsd:attribute name='Title' 
                     type='xsd:string'/>
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
        xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
        id='InLineSchema2' sql:is-mapping-schema='1'>
  <xsd:element name='Contacts' ms:relation='Person.Contact'>
    <xsd:complexType>

      <xsd:attribute name='ContactID' 
                     type='xsd:string' />
      <xsd:attribute name='FirstName' 
                     type='xsd:string' />
      <xsd:attribute name='LastName' 
                     type='xsd:string' />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql' 
        mapping-schema='#InLineSchema1'>
    /Employees[@LoginID='adventure-works\guy1']
</sql:xpath-query>

<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql' 
        mapping-schema='#InLineSchema2'>
    /Contacts[@ContactID='1']
</sql:xpath-query>
</ROOT>

Die Vorlage gibt auch zwei XPath-Abfragen an. Jedes der <xpath-query>-Elemente identifiziert eindeutig das Zuordnungsschema, indem es das mapping-schema-Attribut angibt.

Wenn Sie ein Inlineschema in der Vorlage angeben, muss die sql:is-mapping-schema-Anmerkung ebenfalls für das <xsd:schema>-Element angegeben werden. Die sql:is-mapping-schema-Anmerkung akzeptiert einen booleschen Wert (0 =false, 1 = true). Ein Inlineschema mit sql:is-mapping-schema="1" wird als Inlineschema mit Anmerkungen behandelt und im XML-Dokument nicht zurückgegeben.

Die sql:is-mapping-schema-Anmerkung gehört zum Vorlagennamespace urn:schemas-microsoft-com:xml-sql.

Speichern Sie zum Testen dieses Beispiels die Vorlage (InlineSchemaTemplate.xml) in einem lokalen Verzeichnis und erstellen und verwenden Sie dann 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 4.0-Abfragen.

Zusätzlich zum Angeben des mapping-schema-Attributs für das <sql:xpath-query>-Element in einer Vorlage (wenn eine Xpath-Abfrage vorhanden ist) oder für das <updg:sync>-Element in einem Updategram, können Sie folgende Schritte durchführen:

  • Geben Sie das mapping-schema-Attribut für das <ROOT>-Element (globale Deklaration) in der Vorlage an. Dieses Zuordnungsschema wird dann zum Standardschema, das von allen Xpath- und Updategram-Knoten verwendet wird, die keine explizite mapping-schema-Anmerkung aufweisen.

  • Geben Sie das mapping schema-Attribut mithilfe des Command-Objekts in ADO an.

Das mapping-schema-Attribut, das für das <xpath-query>- oder <updg:sync>-Element angegeben wird, steht in der Rangfolge ganz oben, das Command-Objekt in ADO steht in der Rangfolge ganz unten.

Wenn Sie eine Xpath-Abfrage in einer Vorlage angeben und kein Zuordnungsschema angeben, auf das die Xpath-Abfrage ausgeführt wird, wird die Xpath-Abfrage als Abfrage vom Typ dbobject behandelt. Betrachten Sie z. B. die folgende Vorlage:

<sql:xpath-query 
     xmlns:sql="urn:schemas-microsoft-com:xmlsql">
          Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>

Die Vorlage gibt eine XPath-Abfrage, aber kein Zuordnungsschema an. Deswegen wird diese Abfrage als Anfrage vom Typ dbobject behandelt, in dem Production.ProductPhoto der Tabellenname und @ProductPhotoID='100' ein Prädikat ist, das ein Produktphoto mit dem ID-Wert "100" findet. @LargePhoto ist die Spalte, aus der der Wert abgerufen wird.