Bagikan melalui


Menentukan Namespace Target Menggunakan atribut targetNamespace (SQLXML 4.0)

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

Anda dapat menggunakan atribut xsd:targetNamespace 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 atribut elementFormDefault dan attributeFormDefault pada <elemen xsd:schema> untuk menentukan kualifikasi elemen dan atribut lokal secara global, atau Anda dapat menggunakan atribut formulir 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.

Sebuah. Menentukan namespace target

Skema XSD berikut menentukan namespace layanan target dengan menggunakan atribut xsd:targetNamespace . Skema ini juga mengatur nilai atribut elementFormDefault dan attributeFormDefault ke "tidak memenuhi syarat" (nilai default untuk atribut ini). Ini adalah deklarasi global dan memengaruhi semua elemen lokal (<Urutan> 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:

  • Deklarasi jenis CustomerType dan OrderType bersifat global dan, oleh karena itu, disertakan dalam namespace target skema. Akibatnya, ketika jenis ini direferensikan dalam deklarasi <elemen Pelanggan> dan elemen turunan Pesanannya<>, awalan ditentukan yang terkait dengan namespace target.

  • Elemen <Pelanggan> 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 <elemen global Pelanggan> . (Elemen ini bersifat global karena dinyatakan sebagai anak dari <elemen xsd:schema> dalam skema.)

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

Untuk membuat sampel kerja skema ini
  1. Salin kode skema di atas dan tempelkan ke dalam file teks. Simpan file sebagai targetNameSpace.xml.

  2. Salin templat berikut dan tempelkan ke dalam file teks. Simpan file sebagai 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 <elemen Pelanggan> untuk pelanggan dengan CustomerID 1. Perhatikan bahwa 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\targetNamepsace.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.

Jika skema menentukan atribut elementFormDefault dan attributeFormDefault dengan nilai "memenuhi syarat", dokumen instans akan memiliki semua elemen dan atribut lokal yang memenuhi syarat. Anda dapat mengubah skema sebelumnya untuk menyertakan atribut ini dalam <elemen xsd:schema> dan menjalankan templat lagi. Karena atribut sekarang juga memenuhi syarat dalam instans, kueri XPath akan 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>