Freigeben über


Verwenden von sql:relation (XDR-Schema)

Wichtiger HinweisWichtig

Dieses Thema ist als Referenz für ältere Anwendungen enthalten. Für diese Funktion wird künftig keine Entwicklungsarbeit mehr geleistet. Vermeiden Sie daher das Verwenden dieser Funktion bei neuen Entwicklungsarbeiten. Verwenden Sie stattdessen XSD-Schemas mit Anmerkungen zum Erstellen von XML-Sichten. Weitere Informationen finden Sie unter Einführung in XSD-Schemas mit Anmerkungen (SQLXML 4.0). Sie können vorhandene XDR-Schemas mit Anmerkungen in XSD-Schemas konvertieren. Weitere Informationen finden Sie unter Konvertieren von XDR-Schemas mit Anmerkungen in gleichbedeutende XSD-Schemas (SQLXML 4.0).

Die sql:relation-Anmerkung wird hinzugefügt, um einen XML-Knoten im XDR-Schema einer Datenbanktabelle zuzuordnen. Ein Tabellen-/Sichtname wird als Wert der sql:relation-Anmerkung angegeben.

Die sql:relation-Anmerkung kann einem <ElementType>-Knoten, einem <element>-Knoten oder einem <attribute>-Knoten im XDR-Schema hinzugefügt werden. sql:relation gibt die Zuordnung zwischen dem <ElementType>-Knoten, dem <element>-Knoten oder dem <attribute>-Knoten im Schema zu einer Tabelle/Sicht in einer Datenbank an.

Wenn sql:relation auf dem <ElementType>-Knoten angegeben ist, gilt der Bereich dieser Anmerkung für alle Attribute und untergeordneten Elementspezifikationen in diesem <ElementType>-Knoten. Daher stellt er beim Schreiben von Anmerkungen eine Verknüpfung bereit. Wenn sql:relation direkt auf dem <element>-Knoten angegeben ist, wird für die innerhalb eines <ElementType>-Knotens angegebenen Attribute ebenfalls die Bereichsdefinierung eingeführt. Die sql:relation-Anmerkung wird auf <AttributeType>-Knoten ignoriert.

Die sql:relation-Anmerkung ist in Fällen nützlich, in denen in Microsoft SQL Server gültige Bezeichner in XML ungültig sind. Zum Beispiel ist "Order Details" ein gültiger Tabellenname in SQL Server, jedoch in XML ungültig. In solchen Fällen kann die sql:relation-Anmerkung verwendet werden, um die Zuordnung anzugeben. Beispiel:

<ElementType name="OD" sql:relation="[Order Details]">

Beispiele

Bestimmte Anforderungen müssen erfüllt werden, um aus den folgenden Beispielen funktionierende Codebeispiele zu erstellen. Weitere Informationen finden Sie unter Anforderungen zum Ausführen von SQLXML-Beispielen.

A. Angeben von sql:relation auf einem <ElementType>-Knoten, der Attribute enthält

In diesem Beispiel besteht das XSD-Schema aus einem <Contacts>-Element mit den Attributen BusinessEntityID, FirstName und LastName. Die sql:relation-Anmerkung wird auf dem <ElementType>-Knoten angegeben und ordnet das <Contacts>-Element der Person.Person-Tabelle zu. Diese Zuordnung gilt für alle Attribute im <ElementType>-Knoten. Daher werden alle Attribute den Spalten in der Person.Person-Tabelle zugeordnet.

Die Standardzuordnung wird für die Attribute vorgenommen. Die Attribute werden beispielsweise den gleichnamigen Spalten in der Person.Person-Tabelle zugeordnet.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />
    <AttributeType name="FirstName" />
    <AttributeType name="LastName" />

    <attribute type="BusinessEntityID" />
    <attribute type="FirstName" />
    <attribute type="LastName" />
  </ElementType>
</Schema>

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen sqlRelationXdr.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen sqlRelationXdrT.xml im selben Verzeichnis, in dem Sie sqlRelationXdr.xml gespeichert haben. Die Abfrage in der Vorlage wählt einen Kontakt mit dem BusinessEntityID-Wert 1 aus.

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

    Der für das Zuordnungsschema angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\sqlRelationXdr.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 4.0-Abfragen.

Im Folgenden wird ein Teil des Resultsets aufgeführt:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
    <Contacts BusinessEntityID="1" FirstName="Gustavo" 
              LastName="Achong" /> 
</ROOT>

B. Angeben von sql:relation auf einem <ElementType>-Knoten, der Unterelemente und Attribute enthält

In diesem Beispiel besteht das XSD-Schema aus einem <Contacts>-Element mit dem BusinessEntityID-Attribut und den untergeordneten Elementen <FirstName> und <LastName>. Die sql:relation-Anmerkung wird auf dem <ElementType>-Knoten angegeben und ordnet das <Contacts>-Element der Person.Person-Tabelle zu. Diese Zuordnung gilt für alle Attribute im <ElementType>-Knoten. Daher werden alle Attribute den Spalten in der Person.Person-Tabelle zugeordnet.

Die Standardzuordnung findet für die Attribute statt. Die Attribute werden den gleichnamigen Spalten in der Person.Person-Tabelle zugeordnet.

In diesem Beispiel wird das content-Attribut für die untergeordneten Elemente <FirstName> und <LastName> angegeben. Ohne das content=textOnly-Attribut werden die untergeordneten Elemente nicht den entsprechenden Spalten <FirstName> und <LastName> in der Person.Person-Tabelle zugeordnet, da Elemente standardmäßig einer Tabelle und nicht einem Feld zugeordnet werden.

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <ElementType name="FirstName" content="textOnly"/>
  <ElementType name="LastName" content="textOnly"/>
  <ElementType name="Contacts" sql:relation="Person.Person" >
    <AttributeType name="BusinessEntityID" />

    <attribute type="BusinessEntityID" />
    <element type="FirstName" />
    <element type="LastName"  />
  </ElementType>
</Schema>

Anstelle des content=textOnly-Attributs können Sie alternativ die sql:field-Anmerkung in der element-Definition angeben, um die untergeordneten Elemente (<FirstName>, <LastName>) den entsprechenden Spaltennamen zuzuordnen, wie in den folgenden Alternativbeispielen gezeigt:

<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />

So testen Sie eine XPath-Beispielabfrage mit dem Schema

  1. Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen UsingSqlRelationXdr.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Namen UsingSqlRelationXdrT.xml im selben Verzeichnis, in dem Sie UsingSqlRelationXdr.xml gespeichert haben. Die Abfrage in der Vorlage wählt einen Kontakt mit dem BusinessEntityID-Wert 1 aus.

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

    Der für das Zuordnungsschema (UsingSqlRelationXdr.xml) angegebene Verzeichnispfad bezieht sich auf das Verzeichnis, in dem die Vorlage gespeichert ist. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

    mapping-schema="C:\MyDir\UsingSqlRelationXdr.xml"
    
  3. Erstellen und verwenden Sie das SQLXML&nbsp;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.

Im Folgenden wird ein Teil des Resultsets aufgeführt:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> 
  <Contacts BusinessEntityID="1"> 
    <FirstName>Gustavo</FirstName>
    <LastName>Achong</LastName>
  </Contacts>
</ROOT>