Megjegyzés
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhat bejelentkezni vagy módosítani a címtárat.
Az oldalhoz való hozzáféréshez engedély szükséges. Megpróbálhatja módosítani a címtárat.
A következőkre vonatkozik:SQL Server
Azure SQL Database
XSD sémák írásakor az XSD targetNamespace attribútumot használhatod egy célnévtér megadásához. Ez a cikk bemutatja, hogyan működnek az XSD targetNamespace, elementFormDefault, és attributeFormDefault attribútumok, hogyan befolyásolják a generált XML példányt, valamint hogyan vannak megadva az XPath lekérdezések névterekkel.
xsd:targetNamespace Az attribútumot használhatod arra, hogy elemeket és attribútumokat helyezz el az alapértelmezett névtérből egy másik névtérbe. Azt is meghatározhatod, hogy a séma helyi bevallásos elemei és attribútumjai névtér által minősítettek legyenek-e, akár előtag használatával, akár alapértelmezettségben. Az elementFormDefaultattributeFormDefault és attribútumokat <xsd:schema> használhatod az elem és attribútumok form globális meghatározására, vagy az attribútumot külön-külön meghatározhatod az egyes elemek és attribútumok meghatározására.
Példák
A következő példák alapján működő minták létrehozásához bizonyos követelményeknek kell megfelelned. További információért lásd: Az SQLXML futtatási követelmények példái.
A. Célnévtér megadása
A következő XSD séma a célnévteret az attribútummal xsd:targetNamespace határozza meg. A séma a és attributeFormDefault attribútumértékeket is beállítja elementFormDefault ("unqualified"ezek az attribútumok alapértelmezett értéke). Ez egy globális kijelentés, amely az összes helyi elemet (<Order> a sémában) és attribútumot (CustomerID, ContactName, és OrderID a sémában) érinti.
<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>
A sémában:
Az
CustomerTypeésOrderTypetípus deklarációk globálisak, ezért a séma célnévterébe tartoznak. Ennek eredményeként, amikor ezekre a típusokra hivatkoznak az elem és annak<Order>gyermek elemének deklarációjában<Customer>, egy előtag kerül megadásra, amely a célnévtérhez kapcsolódik.Az
<Customer>elem a séma célnévterében is szerepel, mert globális elem a sémában.
Hajtsd végre a következő XPath lekérdezést a séma ellen:
(/CO:Customer[@CustomerID=1)
Az XPath lekérdezés generálja ezt a példánydokumentumot (csak néhány rendelés látható):
<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>
Ez az instance dokumentum definiálja az urn:MyNamespace névteret, és egy (y0) előtagot társít hozzá. Az előtag csak a <Customer> globális elemre vonatkozik. (Az elem gálális, mert a sémában elem gyermekeként <xsd:schema> van kihirdetve.)
Az előtag nem vonatkozik a helyi elemekre és attribútumokra, mert a és attributeFormDefault attribútumok értéke elementFormDefault a sémában beállítva."unqualified" Az <Order> elem lokális, mert a deklarációja az elemet definiáló <CustomerType> elem gyermekeként <complexType> jelenik meg. Hasonlóképpen, az attribútumok (CustomerID, OrderID, és ContactName) lokálisak, nem globálisak.
Készíts egy működő mintát ebből a sémából
Másold le a korábbi séma kódot, és beilleszted szövegfájlba. Mentse a fájlt
targetNamespace.xmlnéven.Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd el a fájlt ugyanabban
targetNameSpaceT.xmla könyvtárban, ahol elmentettedtargetNamespace.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>Az XPath lekérdezés a sablonban az ügyfél számára 1 CustomerID-vel adja vissza az
<Customer>elemet. Az XPath lekérdezés megadja a névtér előtagját a lekérdezésben szereplő elemhez, nem az attribútumhoz. (A helyi attribútumok nem minősítettek, ahogy a séma előírja.)A leképezési séma (
targetNamespace.xml) számára megadott könyvtárútvonal a sablon mentőhelyéhez képest viszonyítható. Abszolút út is meghatározható, például:mapping-schema="C:\MyDir\targetNamespace.xml"Hozd létre és használd az SQLXML 4.0 Test Scriptet (Sqlxml4test.vbs) a sablon végrehajtásához.
További információ: SqlXML 4.0-lekérdezések végrehajtása az ADO használatával.
Ha a séma megadja elementFormDefault és attributeFormDefault értékű "qualified"attribútumokat , az instance dokumentum minden helyi elemet és attribútumot minősít. Megváltoztathatod a korábbi sémát úgy, hogy ezek az attribútumok az <xsd:schema> elemben legyenek, és újra végrehajthatod a sablont. Mivel az attribútumok most már az instance-ban is minősítettek, az XPath lekérdezés megváltozik, hogy tartalmazza a névtér előtagot is.
Ez a módosított XPath lekérdezés:
/CO:Customer[@CO:CustomerID=1]
Ez az XML dokumentum, amely visszaküldött:
<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>