Megosztás a következőn keresztül:


Határozz meg egy célnévteret a targetNamespace attribútummal (SQLXML 4.0)

A következőkre vonatkozik:SQL ServerAzure 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 és OrderType tí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

  1. Másold le a korábbi séma kódot, és beilleszted szövegfájlba. Mentse a fájlt targetNamespace.xml néven.

  2. Másold le a következő sablont, és illesztsd be egy szövegfájlba. Mentsd el a fájlt ugyanabban targetNameSpaceT.xml a könyvtárban, ahol elmentetted 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>
    

    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"
    
  3. 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>