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

Gilt für:SQL ServerAzure SQL-Datenbank

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 für die XML-Sicht angeben, die durch das mit Anmerkungen versehene Schema definiert ist. Das mit Anmerkungen versehene Schema, für das die XPath-Abfrage ausgeführt werden soll, wird mithilfe des attributs mapping-schema 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.

In den Beispielen in diesem Thema werden Vorlagen dazu verwendet, eine XPath-Abfrage für ein Schema mit Anmerkungen auszuführen, um Daten von der Datenbank abzurufen.

Betrachten Sie beispielsweise dieses mit Anmerkungen versehene Schema:

<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 Annotierte XDR-Schemas (in SQLXML 4.0 veraltet).

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. Um ein Inlineschema zu verwenden, das in einer Vorlage enthalten ist, geben Sie das id-Attribut mit einem eindeutigen Wert für das <xsd:schema-Element> an, und verwenden Sie dann #idvalue , um auf das Inlineschema zu verweisen. Das id-Attribut ist identisch mit dem in XDR-Schemas verwendeten sql:id ({urn:schemas-microsoft-com:xml-sql}id).

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 xpath-query-Element<> identifiziert das Zuordnungsschema eindeutig, indem das Attribut mapping-schema angegeben wird.

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

Die anmerkung sql:is-mapping-schema 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 folgendes tun:

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

  • Geben Sie das Zuordnungsschema-Attribut mithilfe des ADO Command-Objekts an.

Das Zuordnungsschema-Attribut, das <im xpath-query>- oder <updg:sync-Element> angegeben wird, hat die höchste Priorität; das ADO Command-Objekt hat die niedrigste Rangfolge.

Beachten Sie, dass die XPath-Abfrage als dbobject-Typabfrage behandelt wird, wenn Sie eine XPath-Abfrage in einer Vorlage angeben und kein Zuordnungsschema angeben, für das die XPath-Abfrage ausgeführt wird. 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. Daher wird diese Abfrage als dbobject-Typabfrage behandelt, in der Production.ProductPhoto der Tabellenname und @ProductPhotoID="100" ein Prädikat ist, das ein Produktfoto mit dem ID-Wert 100 findet. @LargePhoto ist die Spalte, aus der der Wert abgerufen werden soll.