Sdílet prostřednictvím


Vytváření atributů platných ID, IDREF a IDREFS pomocí sql:prefix (SQLXML 4.0)

platí pro:SQL Serverazure SQL Database

Atribut může být specifikován jako typ ID. Atributy určené jako IDREF nebo IDREFS pak mohou být použity k odkazování na atributy typu ID, což umožňuje propojení mezi dokumenty.

ID, IDREF a IDREFS odpovídají vztahům PK/FK (primární klíč/cizí klíč) v databázi, s několika málo rozdíly. V XML dokumentu musí být hodnoty atributů typu ID odlišné. Pokud jsou atributy CustomerID a OrderID v XML dokumentu specifikovány jako typ ID, musí být tyto hodnoty odlišné. V databázi však mohou mít sloupce CustomerID a OrderID stejné hodnoty. (Například CustomerID = 1 a OrderID = 1 jsou platné v databázi).

Aby byly atributy ID, IDREF a IDREFS platné:

  • Hodnota ID musí být v XML dokumentu jedinečná.

  • Pro každý IDREF a IDREF musí být referenční hodnoty ID v XML dokumentu.

  • Hodnota ID, IDREF a IDREFS musí být pojmenovaný token. (Například celočíselná hodnota 101 nemůže být ID hodnotou.)

  • Atributy ID, IDREF a typ IDREFS nelze namapovat na sloupce typu text, ntext, image ani na žádný jiný binární datový typ (například časové razítko).

Pokud XML dokument obsahuje více ID, použijte anotaci sql:prefix , abyste zajistili jedinečnost hodnot.

Upozorňujeme, že anotace sql:prefix nelze použít s pevně daným atributem XSD.

Examples

Pro vytvoření pracovních vzorků podle následujících příkladů musíte splnit určité požadavky. Pro více informací viz Požadavky na spouštění SQLXML Examples.

A. Specifikace typů ID a IDREFS

V následujícím schématu <se člen Zákazník> skládá z podprvku <Objednávky> . Prvek <Order> má také podprvek, prvek <OrderDetail> .

Atribut OrderIDList u <zákazníka> je typ IDREFS, který odkazuje na atribut OrderID prvku <Order> .

<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>  
Pro testování vzorku dotazu XPath proti schématu
  1. Zkopírujte výše uvedený kód schématu a vložte ho do textového souboru. Uložte soubor jako sqlPrefix.xml.

  2. Zkopírujte následující šablonu a vložte ji do textového souboru. Ulož soubor jako sqlPrefixT.xml do stejného adresáře, kde jsi uložil 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>  
    

    Adresářová cesta určená pro mapovací schéma (sqlPrefix.xml) je relativní k adresáři, ve kterém je šablona uložena. Absolutní cestu lze také specifikovat, například:

    mapping-schema="C:\SqlXmlTest\sqlPrefix.xml"  
    
  3. Vytvořte a použijte testovací skript SQLXML 4.0 (Sqlxml4test.vbs) k provedení šablony.

    Pro více informací viz Použití ADO pro provádění dotazů SQLXML.

Toto je částečný výsledek:

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