Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Beim Schreiben von XSD-Schemas können Sie das XSD targetNamespace-Attribut verwenden, um einen Zielnamespace anzugeben. In diesem Thema wird beschrieben, wie die Attribute XSD targetNamespace, elementFormDefault und attributeFormDefault 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 angeben, ob die lokal deklarierten Elemente und Attribute des Schemas durch einen Namespace qualifiziert werden sollen, entweder explizit mithilfe eines Präfixes oder implizit standardmäßig. Sie können die Attribute "elementFormDefault " und " attributeFormDefault " für das <xsd:schema-Element> verwenden, um die Qualifikation lokaler Elemente und Attribute global anzugeben, oder Sie können das Formularattribute 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.
Ein. Angeben eines Zielnamespaces
Das folgende XSD-Schema gibt einen Zielnamespace mithilfe des xsd:targetNamespace-Attributs an. Das Schema legt außerdem die Attributwerte "elementFormDefault" und "attributeFormDefault" auf "unqualifiziert" fest (der Standardwert für diese Attribute). Dies ist eine globale Deklaration und wirkt sich auf alle lokalen Elemente (<Order> im Schema) und Attribute (CustomerID, ContactName und 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 Typdeklarationen "CustomerType " und " OrderType " 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 <globale Element "Customer> " angewendet. (Das Element ist global, da es als untergeordnetes Element von <"xsd:schema"> im Schema deklariert wird.)
Das Präfix wird nicht auf die lokalen Elemente und Attribute angewendet, da der Wert der Attribute "elementFormDefault " und "attributeFormDefault " im Schema auf "unqualifiziert" festgelegt ist. Beachten Sie, dass das <Order-Element> lokal ist, da seine Deklaration als untergeordnetes Element des <complexType-Elements> angezeigt wird, das das <CustomerType-Element> definiert. Ebenso sind die Attribute (CustomerID, OrderID und ContactName) lokal, nicht global.
So erstellen Sie ein funktionierendes Beispiel für dieses Schema
Kopieren Sie den oben stehenden Schemacode, und fügen Sie ihn in eine Textdatei ein. Speichern Sie die Datei als targetNameSpace.xml.
Kopieren Sie die folgende Vorlage, und fügen Sie sie in eine Textdatei ein. Speichern Sie die Datei als targetNameSpaceT.xml im selben Verzeichnis, in dem Sie targetNamespace.xmlgespeichert haben.
<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. Beachten Sie, dass die XPath-Abfrage das Namespacepräfix für das Element in der Abfrage und nicht für das Attribut angibt. (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"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-Abfragen.
Wenn das Schema "elementFormDefault " und "attributeFormDefault "-Attribute mit dem Wert "qualified" angibt, 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 so, dass es das Namespacepräfix enthält.
Dies ist die überarbeitete XPath-Abfrage:
/CO:Customer[@CO:CustomerID=1]
Dies ist das XML-Dokument, das zurückgegeben wird:
<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>