Notitie
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen u aan te melden of de directory te wijzigen.
Voor toegang tot deze pagina is autorisatie vereist. U kunt proberen de mappen te wijzigen.
Van toepassing op:SQL Server
Azure SQL Database
Bij het schrijven van XSD-schema's kun je het XSD-attribuut targetNamespace gebruiken om een doelnaamruimte aan te geven. Dit artikel beschrijft hoe de XSD targetNamespace, elementFormDefault, en attributen attributeFormDefault werken, hoe ze de gegenereerde XML-instantie beïnvloeden, en hoe XPath-queries worden gespecificeerd met namespaces.
Je kunt het xsd:targetNamespace attribuut gebruiken om elementen en attributen uit de standaard naamruimte in een andere naamruimte te plaatsen. Je kunt ook aangeven of de lokaal gedeclareerde elementen en attributen van het schema als gekwalificeerd door een naamruimte moeten verschijnen, hetzij expliciet met een prefix of impliciet standaard. Je kunt de elementFormDefault en-attributen attributeFormDefault op het <xsd:schema> element gebruiken om globaal de kwalificatie van lokale elementen en attributen te specificeren, of je kunt het form attribuut gebruiken om individuele elementen en attributen afzonderlijk te specificeren.
Voorbeelden
Om werkmonsters te maken met de volgende voorbeelden, moet je aan bepaalde eisen voldoen. Voor meer informatie, zie Vereisten voor het uitvoeren van SQLXML-voorbeelden.
Eén. Specificeer een doelnaamruimte
Het volgende XSD-schema specificeert een doelnaamruimte door gebruik te maken van het xsd:targetNamespace attribuut. Het schema stelt ook de elementFormDefault en-attribuutwaarden attributeFormDefault in ( "unqualified" de standaardwaarde voor deze attributen). Dit is een globale declaratie en beïnvloedt alle lokale elementen (<Order> in het schema) en attributen (CustomerID, ContactName, en OrderID in het schema).
<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>
In het schema:
De
CustomerTypeenOrderTypetype-declaraties zijn globaal en worden daarom opgenomen in de doelnaamruimte van het schema. Als gevolg hiervan wordt bij verwijzing naar deze typen in de declaratie van<Customer>element en zijn<Order>kindelement een prefix gespecificeerd dat is gekoppeld aan de doelnaamruimte.Het
<Customer>element is ook opgenomen in de doelnaamruimte van het schema omdat het een globaal element in het schema is.
Voer de volgende XPath-query uit tegen het schema:
(/CO:Customer[@CustomerID=1)
De XPath-query genereert dit instantiedocument (slechts enkele van de orders worden getoond):
<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>
Dit instantiedocument definieert de urn:MyNamespace-naamruimte en koppelt er een prefix (y0) aan. Het voorvoegsel wordt alleen toegepast op het <Customer> globale element. (Het element is globaal omdat het in het schema als kind van <xsd:schema> element wordt gedeclareerd.)
Het voorvoegsel wordt niet toegepast op de lokale elementen en attributen omdat de waarde van elementFormDefault en attributeFormDefault attributen in het schema wordt ingesteld op "unqualified" . Het <Order> element is lokaal omdat de verklaring ervan verschijnt als een kind van het <complexType> element dat het <CustomerType> element definieert. Evenzo zijn de attributen (CustomerID, OrderID, en ContactName) lokaal, niet globaal.
Maak een werkend voorbeeld van dit schema
Kopieer de vorige schemacode en plak deze in een tekstbestand. Sla het bestand op als
targetNamespace.xml.Kopieer het volgende sjabloon en plak het in een tekstbestand. Sla het bestand op in
targetNameSpaceT.xmldezelfde map waar je hebt opgeslagentargetNamespace.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>De XPath-query in de template geeft het
<Customer>element terug voor de klant met een CustomerID van 1. De XPath-query specificeert het namespace-prefix voor het element in de query en niet voor het attribuut. (Lokale attributen zijn niet gekwalificeerd, zoals gespecificeerd in het schema.)Het directorypad dat voor het mappingschema (
targetNamespace.xml) is gespecificeerd, is relatief ten opzichte van de map waar het sjabloon wordt opgeslagen. Een absoluut pad kan ook worden gespecificeerd, bijvoorbeeld:mapping-schema="C:\MyDir\targetNamespace.xml"Maak het SQLXML 4.0 Test Script (Sqlxml4test.vbs) aan en gebruik het om het sjabloon uit te voeren.
Zie ADO gebruiken om SQLXML 4.0-query's uit te voeren voor meer informatie.
Als het schema en attributen attributeFormDefault met waarde "qualified"specificeertelementFormDefault, heeft het instantiedocument alle lokale elementen en attributen gekwalificeerd. Je kunt het vorige schema aanpassen om deze attributen in het <xsd:schema> element op te nemen en de template opnieuw uitvoeren. Omdat de attributen nu ook in de instantie zijn gekwalificeerd, verandert de XPath-query om het namespace-prefix op te nemen.
Dit is de herziene XPath-query:
/CO:Customer[@CO:CustomerID=1]
Dit is het XML-document dat wordt teruggegeven:
<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>