Teilen über


Angeben eines Zielnamespaces mithilfe des TargetNamespace-Attributs (SQLXML 4.0)

Gilt für: SQL Server Azure SQL-Datenbank

Beim Schreiben von XSD-Schemas können Sie das XSD-Attribut targetNamespace verwenden, um einen Zielnamespace anzugeben. In diesem Artikel wird beschrieben, wie die XSDtargetNamespaceelementFormDefault- und attributeFormDefault Attribute funktionieren, wie sie sich auf die generierte XML-Instanz auswirken und wie XPath-Abfragen mit Namespaces angegeben werden.

Sie können das xsd:targetNamespace Attribut verwenden, um Elemente und Attribute aus dem Standardnamespace in einen anderen Namespace zu platzieren. Sie können auch festlegen, ob lokal deklarierte Elemente und Attribute des Schemas durch einen Namespace qualifiziert werden sollen, sei es explizit durch ein Präfix oder standardmäßig implizit. Sie können die elementFormDefault Attribute und attributeFormDefault Attribute des <xsd:schema> Elements verwenden, um die Qualifikation lokaler Elemente und Attribute global anzugeben, oder Sie können das form Attribut verwenden, um einzelne Elemente und Attribute separat anzugeben.

Beispiele

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

A. Angeben eines Zielnamespaces

Das folgende XSD-Schema gibt einen Zielnamespace mithilfe des xsd:targetNamespace Attributs an. Das Schema legt außerdem die elementFormDefault Werte und attributeFormDefault Attributwerte fest ( "unqualified" der Standardwert für diese Attribute). Dies ist eine globale Deklaration und wirkt sich auf alle lokalen Elemente (<Order> im Schema) und Attribute (CustomerID, ContactNameund OrderID im Schema) aus.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    xmlns:sql="urn:schemas-microsoft-com:mapping-schema"
    xmlns:CO="urn:MyNamespace"
    targetNamespace="urn:MyNamespace">
    <xsd:annotation>
        <xsd:appinfo>
            <sql:relationship name="CustOrders"
                parent="Sales.Customer"
                parent-key="CustomerID"
                child="Sales.SalesOrderHeader"
                child-key="CustomerID" />
        </xsd:appinfo>
    </xsd:annotation>

    <xsd:element name="Customer"
        sql:relation="Sales.Customer"
        type="CO:CustomerType" />

    <xsd:complexType name="CustomerType">
        <xsd:sequence>
            <xsd:element name="Order"
                sql:relation="Sales.SalesOrderHeader"
                sql:relationship="CustOrders"
                type="CO:OrderType" />
        </xsd:sequence>
        <xsd:attribute name="CustomerID" type="xsd:string" />
        <xsd:attribute name="SalesPersonID" type="xsd:string" />
    </xsd:complexType>
    <xsd:complexType name="OrderType">
        <xsd:attribute name="SalesOrderID" type="xsd:integer" />
        <xsd:attribute name="CustomerID" type="xsd:string" />
    </xsd:complexType>
</xsd:schema>

Im Schema:

  • Die CustomerType Deklarationen und OrderType Typdeklarationen sind global und sind daher im Zielnamespace des Schemas enthalten. Wenn auf diese Typen in der Deklaration des <Customer> Elements und des untergeordneten <Order> Elements verwiesen wird, wird ein Präfix angegeben, das dem Zielnamespace zugeordnet ist.

  • Das <Customer> Element ist auch im Zielnamespace des Schemas enthalten, da es sich um ein globales Element im Schema handelt.

Führen Sie die folgende XPath-Abfrage für das Schema aus:

(/CO:Customer[@CustomerID=1)

Die XPath-Abfrage generiert dieses Instanzdokument (nur einige der Bestellungen werden angezeigt):

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <y0:Customer xmlns:y0="urn:MyNamespace"
      CustomerID="ALFKI" ContactName="Maria Anders">
        <Order CustomerID="ALFKI" OrderID="10643" />
        <Order CustomerID="ALFKI" OrderID="10692" />
        ...
  </y0:Customer>
  </ROOT>

Dieses Instanzdokument definiert den urn:MyNamespace-Namespace und ordnet ihr ein Präfix (y0) zu. Das Präfix wird nur auf das <Customer> globale Element angewendet. (Das Element ist global, da es als untergeordnetes Element des <xsd:schema> Elements im Schema deklariert wird.)

Das Präfix wird nicht auf die lokalen Elemente und Attribute angewendet, da der Wert und elementFormDefault attributeFormDefault die Attribute im Schema festgelegt "unqualified" sind. Das <Order> Element ist lokal, da seine Deklaration als untergeordnetes Element des <complexType> Elements angezeigt wird, das das <CustomerType> Element definiert. Ebenso sind die Attribute (CustomerID, OrderIDund ContactName) lokal, nicht global.

Erstellen eines funktionierenden Beispiels für dieses Schema

  1. Kopieren Sie den vorherigen Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei unter dem Namen targetNamespace.xml.

  2. Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei wie targetNameSpaceT.xml im selben Verzeichnis, in dem Sie gespeichert haben targetNamespace.xml.

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

    Die XPath-Abfrage in der Vorlage gibt das <Customer> Element für den Kunden mit einer CustomerID von 1 zurück. Die XPath-Abfrage gibt das Namespacepräfix für das Element in der Abfrage und nicht für das Attribut an. (Lokale Attribute sind nicht qualifiziert, wie im Schema angegeben.)

    Der für das Zuordnungsschema (targetNamespace.xml) angegebene Verzeichnispfad ist relativ zum Verzeichnis, in dem die Vorlage gespeichert wird. Es kann auch ein absoluter Pfad angegeben werden. Beispiel:

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

Wenn das Schema wertet "qualified"und Attribute angibtelementFormDefault, attributeFormDefault verfügt das Instanzdokument über alle lokalen Elemente und Attribute, die qualifiziert sind. Sie können das vorherige Schema ändern, um diese Attribute in das <xsd:schema> Element einzuschließen und die Vorlage erneut auszuführen. Da die Attribute jetzt auch in der Instanz qualifiziert sind, ändert sich die XPath-Abfrage, um das Namespacepräfix einzuschließen.

Dies ist die geänderte XPath-Abfrage:

/CO:Customer[@CO:CustomerID=1]

Dies ist das zurückgegebene XML-Dokument:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
   <y0:Customer xmlns:y0="urn:MyNamespace" CustomerID="1" SalesPersonID="280">
      <Order SalesOrderID="43860" CustomerID="1" />
      <Order SalesOrderID="44501" CustomerID="1" />
      <Order SalesOrderID="45283" CustomerID="1" />
      <Order SalesOrderID="46042" CustomerID="1" />
   </y0:Customer>
</ROOT>