Freigeben über


Erstellen gültiger Attribute vom Typ ID, IDREF und IDREFS mit sql:id-Präfix (XDR-Schema)

Wichtiger HinweisWichtig

Dieses Thema ist als Referenz für ältere Anwendungen enthalten. Für dieses Feature wird künftig keine Entwicklungsarbeit mehr geleistet. Vermeiden Sie daher das Verwenden dieses Features 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).

Für ein Attribut kann der Typ ID angegeben werden. Attribute vom Typ IDREF oder IDRES können dann verwendet werden, um auf das ID-Attribut zu verweisen. Auf diese Weise werden dokumentinterne Links gebildet.

ID, IDREF und IDREFS entsprechen mit wenigen Unterschieden Primärschlüssel-Fremdschlüssel-Beziehungen in der Datenbank. Im XML-Dokument muss jedes Attribut vom Typ ID eindeutige Werte aufweisen. Wenn Sie die Attribute CustomerID und SalesOrderID in einem XML-Dokument verwenden, müssen deren Werte unterschiedlich sein. In einer Datenbank können die Spalten CustomerID und SalesOrderID jedoch denselben Wert aufweisen (z. B. sind CustomerID = 1 und OrderID = 1 in der Datenbank gültig).

Für die Gültigkeit der Attribute ID, IDREF und IDREFS gelten folgende Voraussetzungen:

  • Der Wert von ID muss innerhalb des XML-Dokuments eindeutig sein.

  • Die ID-Werte, auf die jeweils in IDREF und IDREFS verwiesen wird, müssen im XML-Dokument enthalten sein.

  • Der Wert für ID, IDREF und IDREFS muss jeweils ein benanntes Token sein. (Der Zahlenwert 101 ist z. B. kein zulässiger ID-Wert.)

  • Die Attribute vom Typ ID, IDREF und IDREFS können keinen Spalten vom Typ text, ntext, image bzw. einem anderen binären Datentyp (z. B. timestamp) zugeordnet werden.

Enthält ein XML-Dokument mehrere IDs, wird die sql:id-prefix-Anmerkung angegeben, um eindeutige Werte zu gewährleisten. Die sql:id-prefix-Anmerkung wird auch verwendet, um benannte Token aus Zahlen zu erstellen. Der für sql:id-prefix angegebene Wert muss ein gültiges Namenszeichen sein.

Das sql:id-prefix-Attribut stellt den Werten von ID, IDREF und IDREFS eine Zeichenfolge voran und macht diese damit eindeutig. Die Gültigkeit der Präfixe sowie die Eindeutigkeit der Werte von ID, IDREF oder IDREFS wird nicht überprüft.

Bei Attributen, die nicht den Typ ID, IDREF oder IDREFS aufweisen, wird das sql:id-prefix-Attribut ignoriert.

HinweisHinweis

Jeder Wert der Attribute ID, IDREF und IDREFS ist einschließlich Präfix (sofern angegeben) auf 4.000 Zeichen beschränkt.

Beispiele

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

A. Angeben des sql:id-Präfixes für ein Attribut vom Typ ID

In diesem XDR-Schema werden die Attribute SalesOrderID und CustomerID als ID-Typ deklariert. Um sicherzustellen, dass die IDs eindeutig und gültig sind, wird die sql:id-prefix-Anmerkung für diese Attribute angegeben:

<?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="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID" dt:type="id" />
    <attribute type="CustomerID" />
    <AttributeType name="OrderList" dt:type="idrefs"
                                 sql:id-prefix="Ord-" />
    <attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">
        <sql:relationship
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader"
                foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
        <sql:relationship key-relation="Sales.SalesOrderHeader"
                          key="SalesOrderID"
                          foreign-relation="Sales.Customer"
                          foreign-key="SalesOrderID" />
    </element>
  </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 sqlPrefix-Xdr.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei unter dem Dateinamen sqlPrefix-XdrT.xml im gleichen Verzeichnis wie sqlPrefix-Xdr.xml. Die XPath-Abfrage in der Vorlage gibt die Unterelemente <Customer> und <Order> zurück, wobei CustomerID gleich 1 ist.

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

    Der für das Zuordnungsschema (sqlPrefix-Xdr.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\sqlPrefix-Xdr.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 das Resultset aufgeführt:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <Customer CustomerID="1" OrderIDList="Ord-43860 Ord-44501 Ord-45283 Ord-46042">
    <Order SalesOrderID="Ord-43860" OrderDate="2001-08-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" /> 
  </Customer>
</ROOT>