Aracılığıyla paylaş


sql:prefix (SQLXML 4.0) kullanılarak geçerli ID, IDREF ve IDREFS Tip Öznitelikleri Oluşturulması

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

Bir öznitelik, kimlik tipi bir öznitelik olarak tanımlanabilir. IDREF veya IDREF olarak belirtilen nitelikler, ID tipi özniteliklerine atıfta bulunmak için kullanılabilir ve belgeler arasında bağlantılar mümkün olur.

ID, IDREF ve IDREFS, veritabanındaki PK/FK (birincil anahtar/yabancı anahtar) ilişkilerine karşılık gelir ve çok az fark içerir. Bir XML belgesinde, kimlik tipi özniteliklerinin değerleri farklı olmalıdır. CustomerID ve OrderID öznitelikleri bir XML belgesinde ID tipi olarak belirtiliyorsa, bu değerler farklı olmalıdır. Ancak bir veritabanında, CustomerID ve OrderID sütunları aynı değerlere sahip olabilir. (Örneğin, CustomerID = 1 ve OrderID = 1 veritabanında geçerlidir).

ID, IDREF ve IDREFS özniteliklerinin geçerli olması için:

  • ID değeri XML belgesi içinde benzersiz olmalıdır.

  • Her IDREF ve IDREFS için, referans verilen ID değerleri XML belgesinde olmalıdır.

  • Bir ID, IDREF ve IDREFS değeri isimli bir token olmalıdır. (Örneğin, tam sayı değeri 101 bir kimlik değeri olamaz.)

  • ID, IDREF ve IDREFS tipinin nitelikleri, metin, ntext veya görüntü tipinin sütunlarına veya başka herhangi bir ikili veri tipine (örneğin zaman damgası) eşlenemez.

Bir XML belgesi birden fazla kimlik içeriyorsa, değerlerin benzersiz olduğundan emin olmak için sql:prefix annotasyonunu kullanın.

sql:prefix annotasyonu XSD sabit öznitelikle kullanılamaz.

Ö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. ID ve IDREFS türlerinin belirtilmesi

Aşağıdaki şemada, <Müşteri> öğesi Order> child öğesinden oluşur<. <Order> öğesinin ayrıca bir alt öğesi vardır, <yani OrderDetail> öğesi.

Customer'ın<>OrderIDList özniteliği, Order> öğesinin OrderID niteliğine< atıfta bulunan IDREFS tipi bir özniteliktir.

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"  
            xmlns:sql="urn:schemas-microsoft-com:mapping-schema">  
<xsd:annotation>  
  <xsd:appinfo>  
    <sql:relationship name="CustOrders"  
                 parent="Sales.Customer"  
                 parent-key="CustomerID"  
                 child="Sales.SalesOrderHeader"  
                 child-key="CustomerID" />  
    <sql:relationship name="OrderOrderDetail"  
                 parent="Sales.SalesOrderHeader"  
                 parent-key="SalesOrderID"  
                 child="Sales.SalesOrderDetail"  
                 child-key="SalesOrderID" />  
  </xsd:appinfo>  
</xsd:annotation>  
  <xsd:element name="Customer" sql:relation="Sales.Customer" >  
   <xsd:complexType>  
     <xsd:sequence>  
        <xsd:element name="Order" sql:relation="Sales.SalesOrderHeader"    
               sql:relationship="CustOrders" maxOccurs="unbounded" >  
          <xsd:complexType>  
              <xsd:sequence>  
                <xsd:element name="OrderDetail"   
                             sql:relation="Sales.SalesOrderDetail"   
                   sql:relationship="OrderOrderDetail"   
                   maxOccurs="unbounded" >  
                  <xsd:complexType>  
                   <xsd:attribute name="SalesOrderID" type="xsd:integer" />  
                   <xsd:attribute name="ProductID" type="xsd:string" />  
                   <xsd:attribute name="OrderQty" type="xsd:integer" />  
                  </xsd:complexType>  
               </xsd:element>  
             </xsd:sequence>  
             <xsd:attribute name="SalesOrderID"   
                            type="xsd:ID" sql:prefix="ord-" />  
             <xsd:attribute name="OrderDate" type="xsd:date" />  
             <xsd:attribute name="CustomerID" type="xsd:string" />  
          </xsd:complexType>  
      </xsd:element>  
    </xsd:sequence>  
    <xsd:attribute name="CustomerID" type="xsd:string" />  
    <xsd:attribute name="OrderIDList" type="xsd:IDREFS"   
                   sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID"  
                   sql:relationship="CustOrders" sql:prefix="ord-">  
    </xsd:attribute>  
  </xsd:complexType>  
</xsd:element>  
</xsd:schema>  
Örnek XPath sorgusunu şema karşısında test etmek için
  1. Yukarıdaki şema kodunu kopyalayıp metin dosyasına yapıştırın. Dosyayı sqlPrefix.xmlolarak kaydet.

  2. Aşağıdaki şablonu kopyalayın ve bir metin dosyasına yapıştırın. Dosyayı aynı dizinde sqlPrefixT.xml olarak kaydet sqlPrefix.xml.

    <ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
      <sql:xpath-query mapping-schema="sqlPrefix.xml">  
        /Customer[@CustomerID=1]  
      </sql:xpath-query>  
    </ROOT>  
    

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

    mapping-schema="C:\SqlXmlTest\sqlPrefix.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. Using ADO to execute SQLXML Queries.

Kısmi sonuç şu şekildedir:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">  
  <Customer CustomerID="1" OrderIDList="ord-43860 ord-44501 ord-45283 ord-46042">  
    <Order SalesOrderID="ord-43860" OrderDate="2001-08-01" CustomerID="1">  
      <OrderDetail SalesOrderID="43860" ProductID="729" OrderQty="1" />   
      <OrderDetail SalesOrderID="43860" ProductID="732" OrderQty="1" />   
      <OrderDetail SalesOrderID="43860" ProductID="738" OrderQty="1" />   
      <OrderDetail SalesOrderID="43860" ProductID="753" OrderQty="2" />   
      ...  
    </Order>  
    ...  
 </Customer>  
</ROOT>