Verwenden von XSD-Schemas mit Anmerkungen in Abfragen (SQLXML 4.0)
Gilt für: SQL Server Azure 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-Ansicht angeben, die durch das kommentierte Schema definiert wird. Das kommentierte Schema, mit dem die XPath-Abfrage ausgeführt werden soll, wird mithilfe des Zuordnungsschema-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.
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 z. B. dieses kommentierte 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 "XDR-Schemas mit Anmerkungen" (veraltet in SQLXML 4.0).For more information, see Annotated XDR Schemas (Veraltet in SQLXML 4.0).
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. Wenn Sie ein Inlineschema verwenden möchten, 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 im Verhalten mit der sql:id ({urn:schemas-microsoft-com:xml-sql}id) identisch, die in XDR-Schemas verwendet wird.
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-Abfrageelemente> identifiziert das Zuordnungsschema eindeutig, indem das Zuordnungsschema-Attribut angegeben wird.
Wenn Sie ein Inlineschema in der Vorlage angeben, muss auch die sql:is-mapping-schema-Anmerkung im <xsd:schema-Element> angegeben werden. Das 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 wird nicht im XML-Dokument zurückgegeben.
Die sql:is-mapping-schemaanmerkung 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 Zuordnungsschema-Attributs für das< sql:xpath-query-Element> in einer Vorlage (wenn eine XPath-Abfrage vorhanden ist) oder für <updg:sync-Element> in einem Updategram können Sie die folgenden Aktionen ausführen:
Geben Sie das Zuordnungsschema-Attribut 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 für die <xpath-Abfrage> oder <updg:sync-Element> angegeben wird, hat die höchste Priorität; das ADO Command-Objekt hat die niedrigste Rangfolge.
Wenn Sie eine XPath-Abfrage in einer Vorlage angeben und kein Zuordnungsschema angeben, für das die XPath-Abfrage ausgeführt wird, wird die XPath-Abfrage als dbobject-Typabfrage 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. Daher wird diese Abfrage als dbobject-Typabfrage behandelt, bei der Production.ProductPhoto der Tabellenname ist 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.