Not
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
gäller för:SQL Server
Azure SQL Database
När du skriver XSD-scheman kan du använda attributet XSD targetNamespace för att specificera ett målnamnrymd. Den här artikeln beskriver hur XSD targetNamespace, elementFormDefault, och attributeFormDefault attributen fungerar, hur de påverkar den XML-instans som genereras, och hur XPath-frågor specificeras med namnrymder.
Du kan använda attributet xsd:targetNamespace för att placera element och attribut från standardnamnrymden i ett annat namnrymd. Du kan också specificera om de lokalt deklarerade elementen och attributen i schemat ska framstå som kvalificerade av ett namnrymd, antingen explicit genom att använda ett prefix eller implicit som standard. Du kan använda og-attributen elementFormDefaultattributeFormDefault på elementet <xsd:schema> för att globalt specificera kvalificeringen av lokala element och attribut, eller så kan du använda attributet form för att specificera individuella element och attribut separat.
Examples
För att skapa arbetsprover med hjälp av följande exempel måste du uppfylla vissa krav. För mer information, se Krav för att köra SQLXML-exempel.
A. Ange ett målnamnrymd
Följande XSD-schema specificerar ett målnamnrymd genom att använda attributet xsd:targetNamespace . Schemat sätter elementFormDefault också och attributeFormDefault attributvärdena till "unqualified" (standardvärdet för dessa attribut). Detta är en global deklaration och påverkar alla lokala element (<Order> i schemat) och attribut (CustomerID, ContactName, och OrderID i schemat).
<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>
I schemat:
Och
CustomerTypeOrderTypetypdeklarationerna är globala och ingår därför i schemats målnamnrymd. Som ett resultat, när dessa typer refereras i deklarationen av<Customer>element och dess<Order>barnelement, specificeras ett prefix som är associerat med målnamnrymden.Elementet
<Customer>ingår också i schemats målnamnrymd eftersom det är ett globalt element i schemat.
Kör följande XPath-fråga mot schemat:
(/CO:Customer[@CustomerID=1)
XPath-frågan genererar detta instansdokument (endast några få av ordningarna visas):
<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>
Detta instansdokument definierar urn:MyNamespace-namnrymden och kopplar prefixet (y0) till det. Prefixet används endast på det <Customer> globala elementet. (Elementet är globalt eftersom det deklareras som ett barn till <xsd:schema> element i schemat.)
Prefixet appliceras inte på de lokala elementen och attributen eftersom värdet av elementFormDefault och attributeFormDefault attributen sätts till "unqualified" i schemat. Elementet <Order> är lokalt eftersom dess deklaration visas som ett barn till det <complexType> element som definierar elementet <CustomerType> . På liknande sätt är attributen (CustomerID, OrderID, och ContactName) lokala, inte globala.
Skapa ett fungerande exempel av detta schema
Kopiera den tidigare schemakoden och klistra in den i en textfil. Spara filen som
targetNamespace.xml.Kopiera följande mall och klistra in den i en textfil. Spara filen som
targetNameSpaceT.xmli samma katalog där du sparadetargetNamespace.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>XPath-frågan i mallen returnerar elementet
<Customer>för kunden med CustomerID 1. XPath-frågan specificerar namnrymdsprefixet för elementet i frågan och inte för attributet. (Lokala attribut är inte kvalificerade, som specificeras i schemat.)Katalogvägen som anges för mappningsschemat (
targetNamespace.xml) är relativ till katalogen där mallen sparas. En absolut väg kan också specificeras, till exempel:mapping-schema="C:\MyDir\targetNamespace.xml"Skapa och använd SQLXML 4.0 Test Script (Sqlxml4test.vbs) för att köra mallen.
Mer information finns i Använda ADO för att köra SQLXML 4.0-frågor.
Om schemat specificerar elementFormDefault och attributeFormDefault attribut med värde "qualified", har instansdokumentet alla lokala element och attribut kvalificerade. Du kan ändra det tidigare schemat för att inkludera dessa attribut i elementet <xsd:schema> och köra mallen igen. Eftersom attributen nu också är kvalificerade i instansen ändras XPath-frågan för att inkludera namnrymdsprefixet.
Detta är den reviderade XPath-frågan:
/CO:Customer[@CO:CustomerID=1]
Detta är XML-dokumentet som returneras:
<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>