Bagikan melalui


Tentukan namespace target menggunakan atribut targetNamespace (SQLXML 4.0)

Berlaku untuk: SQL ServerAzure SQL Database

Dalam menulis skema XSD, Anda dapat menggunakan atribut XSD targetNamespace untuk menentukan namespace layanan target. Artikel ini menjelaskan cara kerja atribut XSD targetNamespace, elementFormDefault, dan attributeFormDefault , bagaimana atribut tersebut memengaruhi instans XML yang dihasilkan, dan bagaimana kueri XPath ditentukan dengan namespace.

Anda dapat menggunakan xsd:targetNamespace atribut untuk menempatkan elemen dan atribut dari namespace default ke dalam namespace layanan yang berbeda. Anda juga dapat menentukan apakah elemen dan atribut skema yang dideklarasikan secara lokal akan tampak memenuhi syarat oleh namespace, baik secara eksplisit dengan menggunakan awalan atau secara implisit secara default. Anda dapat menggunakan elementFormDefault atribut dan attributeFormDefault pada <xsd:schema> elemen untuk menentukan kualifikasi elemen dan atribut lokal secara global, atau Anda dapat menggunakan form atribut untuk menentukan elemen dan atribut individual secara terpisah.

Contoh

Untuk membuat sampel kerja menggunakan contoh berikut, Anda harus memenuhi persyaratan tertentu. Untuk informasi selengkapnya, lihat Persyaratan untuk Menjalankan Contoh SQLXML.

J. Tentukan namespace target

Skema XSD berikut menentukan namespace layanan target dengan menggunakan xsd:targetNamespace atribut . Skema juga mengatur elementFormDefault nilai atribut dan attributeFormDefault ke "unqualified" (nilai default untuk atribut ini). Ini adalah deklarasi global dan memengaruhi semua elemen lokal (<Order> dalam skema) dan atribut (CustomerID, ContactName, dan OrderID dalam skema).

<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>

Dalam skema:

  • CustomerType Deklarasi jenis dan OrderType bersifat global dan, oleh karena itu, termasuk dalam namespace target skema. Akibatnya, ketika jenis ini direferensikan dalam deklarasi elemen dan elemen turunannya <Customer><Order> , awalan ditentukan yang terkait dengan namespace target.

  • Elemen <Customer> ini juga disertakan dalam namespace layanan target skema karena merupakan elemen global dalam skema.

Jalankan kueri XPath berikut terhadap skema:

(/CO:Customer[@CustomerID=1)

Kueri XPath menghasilkan dokumen instans ini (hanya beberapa pesanan yang ditampilkan):

<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>

Dokumen instans ini mendefinisikan namespace urn:MyNamespace dan mengaitkan awalan (y0) ke dalamnya. Awalan hanya diterapkan ke <Customer> elemen global. (Elemen ini bersifat global karena dinyatakan sebagai turunan <xsd:schema> dari elemen dalam skema.)

Awalan tidak diterapkan ke elemen dan atribut lokal karena nilai elementFormDefault dan attributeFormDefault atribut diatur ke "unqualified" dalam skema. Elemen <Order> ini bersifat lokal karena deklarasinya muncul sebagai turunan dari <complexType> elemen yang mendefinisikan <CustomerType> elemen . Demikian pula, atribut (CustomerID, OrderID, dan ContactName) bersifat lokal, bukan global.

Membuat sampel kerja skema ini

  1. Salin kode skema sebelumnya dan tempelkan ke dalam file teks. Simpan file sebagai targetNamespace.xml.

  2. Salin templat berikut dan tempelkan ke dalam file teks. Simpan file seperti targetNameSpaceT.xml di direktori yang sama tempat Anda menyimpan 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>
    

    Kueri XPath dalam templat mengembalikan <Customer> elemen untuk pelanggan dengan CustomerID 1. Kueri XPath menentukan awalan namespace untuk elemen dalam kueri dan bukan untuk atribut . (Atribut lokal tidak memenuhi syarat, seperti yang ditentukan dalam skema.)

    Jalur direktori yang ditentukan untuk skema pemetaan (targetNamespace.xml) relatif terhadap direktori tempat templat disimpan. Jalur absolut juga dapat ditentukan, misalnya:

    mapping-schema="C:\MyDir\targetNamespace.xml"
    
  3. Buat dan gunakan Skrip Pengujian SQLXML 4.0 (Sqlxml4test.vbs) untuk menjalankan templat.

    Untuk informasi selengkapnya, lihat Menggunakan ADO untuk Menjalankan Kueri SQLXML 4.0.

Jika skema menentukan elementFormDefault dan attributeFormDefault atribut dengan nilai "qualified", dokumen instans memiliki semua elemen dan atribut lokal yang memenuhi syarat. Anda dapat mengubah skema sebelumnya untuk menyertakan atribut ini dalam <xsd:schema> elemen dan menjalankan templat lagi. Karena atribut sekarang juga memenuhi syarat dalam instans, kueri XPath berubah untuk menyertakan awalan namespace.

Ini adalah kueri XPath yang direvisi:

/CO:Customer[@CO:CustomerID=1]

Ini adalah dokumen XML yang dikembalikan:

<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>