Aracılığıyla paylaş


TargetNamespace özniteliği (SQLXML 4.0) kullanarak hedef isim alanı belirtin

Şunlar için geçerlidir:SQL ServerAzure SQL Veritabanı

XSD şemaları yazarken, hedef bir isim alanı belirtmek için XSD targetNamespace niteliğini kullanabilirsiniz. Bu makale, XSD targetNamespace, elementFormDefault, ve attributeFormDefault özniteliklerinin nasıl çalıştığını, üretilen XML örneğini nasıl etkilediğini ve XPath sorgularının isim alanlarıyla nasıl belirlendiğini açıklar.

Bu özniteliği varsayılan ad alanındaki öğeleri ve nitelikleri farklı bir ad alanına yerleştirmek için kullanabilirsiniz xsd:targetNamespace . Ayrıca, şemanın yerel olarak tanımlanan öğeleri ve özniteliklerinin, bir ad alanı tarafından nitelendirilmiş görünüp gösterilmemesi gerektiğini belirtebilirsiniz; bu ya açıkça bir preek kullanarak ya da varsayılan olarak örtük olarak geçerlidir. elementFormDefault Elemandaki <xsd:schema> ve attributeFormDefault niteliklerini yerel elemanların ve niteliklerin niteliklerini küresel olarak belirtmek için kullanabilir veya özniteliği bireysel elemanlar ve nitelikleri ayrı ayrı belirtmek için kullanabilirsinizform.

Örnekler

Aşağıdaki örneklerle çalışma örnekleri oluşturmak için belirli gereksinimleri karşılamanız gerekir. Daha fazla bilgi için Gereksinimler için SQLXML Örnekleri Çalışması için Gereksinimlere bakınız.

A. Hedef isim alanı belirtin

Aşağıdaki XSD şeması, bu xsd:targetNamespace özniteliği kullanarak hedef isim alanını belirtir. Şema ayrıca ve attributeFormDefault öznitelik değerlerini (bu öznitelikler için varsayılan değer) olarak "unqualified" ayarlarelementFormDefault. Bu, küresel bir bildiredir ve şemadaki tüm yerel elemanları<Order> ve öznitelikleri (CustomerID, ContactName, ve OrderID şemadaki unsurları) etkiler.

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

Şemada:

  • CustomerType ve OrderType tür bildirimleri küreseldir ve bu nedenle şemanın hedef isim alanına dahil edilir. Sonuç olarak, bu türler eleman ve onun <Order> öv elemanı beyanında <Customer> referans verildiğinde, hedef isim alanına ilişkilendirilen bir preek belirtilir.

  • Eleman <Customer> ayrıca şemanın hedef isim alanında yer alır çünkü şemada küresel bir eleman olarak yer alır.

Şemaya karşı aşağıdaki XPath sorgusunu çalıştırın:

(/CO:Customer[@CustomerID=1)

XPath sorgusu bu örnek belgesini üretir (sadece birkaç sipariş gösterilmiştir):

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

Bu örnek belge, urn:MyNamespace isim alanını tanımlar ve ona (y0) bir preek ekler ekler. Ön ek yalnızca <Customer> küresel elemana uygulanır. (Eleman küresel çünkü şemadaki elemanın <xsd:schema> çocuğu olarak ilan edilmiştir.)

Preek, şemada ve attributeFormDefault özniteliklerin "unqualified" değeri elementFormDefault olduğu için yerel elemanlar ve özniteliklere uygulanmaz. Eleman <Order> yereldir çünkü onun bildirmesi, elemanı tanımlayan <CustomerType> elemanın çocuğu <complexType> olarak görünür. Benzer şekilde, (CustomerID, OrderID, ve ContactName) öznitelikleri yereldir, küresel değildir.

Bu şemanın çalışma örneğini oluşturun

  1. Önceki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı targetNamespace.xml olarak kaydedin.

  2. Aşağıdaki şablonu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı targetNameSpaceT.xml kaydettiğiniz dizinle targetNamespace.xmlkaydedin.

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

    Şablondaki XPath sorgusu, müşterinin CustomerID değeri 1 olan öğeyi <Customer> döndürür. XPath sorgu, sorgudaki öğe için isim alanı önekini belirtir, öznitelik için değil. (Yerel nitelikler, şemada belirtildiği gibi nitelendirilmez.)

    Eşleme şeması için belirtilen dizin yolu (targetNamespace.xml) şablonun kaydedildiği dizine görecelidir. Mutlak bir yol da belirtilebilir, örneğin:

    mapping-schema="C:\MyDir\targetNamespace.xml"
    
  3. Şablonu çalıştırmak için SQLXML 4.0 Test Script'i (Sqlxml4test.vbs) oluşturun ve kullanın.

    Daha fazla bilgi için bkz. SQLXML 4.0 Sorguları Yürütmek için ADO Kullanma.

Şema değeri "qualified"olan ve attributeFormDefault öznitelikleri belirtiyorsaelementFormDefault, örnek belgesi tüm yerel öğeleri ve öznitelikleri nitelendirilmiştir. Önceki şemayı bu öznitelikleri <xsd:schema> öğeye dahil edecek şekilde değiştirebilir ve şablonu tekrar çalıştırabilirsiniz. Öznitelikler artık örnekte de nitelendirildiği için, XPath sorgusu isim alanı önekini içerecek şekilde değişir.

Bu, revize edilmiş XPath sorgusu:

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

Geri dönen XML belgesi şudur:

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