使用 sql:id-prefix (XDR 結構描述),建立有效的識別碼、IDREF 和 IDREFS 類型屬性

重要注意事項重要事項

這個主題包含在舊版應用程式的參考之中。這項功能未來將不會繼續開發。請避免在新的開發工作中使用此功能,而改用註解式 XSD 結構描述建立 XML 檢視。如需詳細資訊,請參閱<註解式 XSD 結構描述簡介 (SQLXML 4.0)>。您可以將現有註解式 XDR 結構描述轉換為 XSD 結構描述。如需詳細資訊,請參閱<將註解式 XDR 結構描述轉換為等效 XSD 結構描述 (SQLXML 4.0)>。

屬性可以指定為識別碼類型屬性。指定為 IDREF 或 IDREFS 的屬性可以用來參考識別碼類型屬性,因此可以啟用內部文件連結。

識別碼、IDREF 和 IDREFS 在資料庫中都對應到主索引鍵/外部索引鍵 (PK/FK) 的關聯性,但是各有一些不同處。在 XML 文件中,識別碼類型屬性的值必須是相異的。如果在 XML 文件中有 CustomerID 和 SalesOrderID 屬性,則這些值必須是相異的。然而,在資料庫中,CustomerID 和 SalesOrderID 資料行可以具有相同的值 (例如,在資料庫中 CustomerID = 1 和 OrderID = 1 都是有效的)。

若要讓識別碼、IDREF 和 IDREFS 屬性是有效的:

  • 識別碼的值在 XML 文件中必須是唯一的。

  • 對於每一個 IDREF 和 IDREFS,參考的識別碼值都必須是在 XML 文件中。

  • 識別碼、IDREF 和 IDREFS 的值必須是具名 Token (例如,整數值 101 不能是識別碼值)。

  • 識別碼、IDREF 和 IDREFS 類型屬性不能對應到 text、ntext、image 類型或任何其他二位元資料類型 (例如 timestamp) 的資料行。

如果 XML 文件含有多個識別碼,則會指定 sql:id-prefix 註解,以確定值是唯一的。. The sql:id-prefix 註解也會用於從號碼建立具名 Token。指定給 sql:id-prefix 的值必須是有效的名稱字元。

sql:id-prefix 屬性將識別碼、IDREF 和 IDREFS 的值加上字串,讓這些值變成唯一。但是不會檢查前置詞的有效性和識別碼、IDREF 或 IDREFS 值的唯一性。

對於不是識別碼、IDREF 或 IDREFS 類型的屬性,則會忽略 sql:id-prefix 屬性。

[!附註]

每一個識別碼、IDREF 和 IDREFS 屬性值限制為 4,000 字元,其中也包括前置詞 (如果有指定的話)。

範例

若要使用下列範例建立工作範例,您必須符合特定需求。如需詳細資訊,請參閱<執行 SQLXML 範例的需求>。

A. 指定識別碼類型屬性的 sql:id-prefix

在這個 XDR 結構描述中,SalesOrderID 和 CustomerID 屬性都是宣告為識別碼類型。若要確定識別碼是唯一且有效的,則 sql:id-prefix 註解會指定給這些屬性:

<?xml version="1.0" ?>
<Schema xmlns="urn:schemas-microsoft-com:xml-data"
        xmlns:dt="urn:schemas-microsoft-com:datatypes"
        xmlns:sql="urn:schemas-microsoft-com:xml-sql">
  <ElementType name="Order" sql:relation="Sales.SalesOrderHeader" sql:key-fields="SalesOrderID">
    <AttributeType name="SalesOrderID" dt:type="id" sql:id-prefix="Ord-" />
    <AttributeType name="OrderDate" />
 
    <attribute type="SalesOrderID" />
    <attribute type="OrderDate" />
  </ElementType>

  <ElementType name="Customer" sql:relation="Sales.Customer">
    <AttributeType name="CustomerID" dt:type="id" />
    <attribute type="CustomerID" />
    <AttributeType name="OrderList" dt:type="idrefs"
                                 sql:id-prefix="Ord-" />
    <attribute type="OrderList" sql:relation="Sales.SalesOrderHeader" sql:field="SalesOrderID">
        <sql:relationship
                key-relation="Sales.Customer"
                key="CustomerID"
                foreign-relation="Sales.SalesOrderHeader"
                foreign-key="CustomerID" />
    </attribute>
    <element type="Order">
        <sql:relationship key-relation="Sales.SalesOrderHeader"
                          key="SalesOrderID"
                          foreign-relation="Sales.Customer"
                          foreign-key="SalesOrderID" />
    </element>
  </ElementType>
</Schema>

對結構描述測試範例 XPath 查詢

  1. 複製上述的結構描述程式碼,並將其貼到文字檔中。並將檔案儲存為 sqlPrefix-Xdr.xml。

  2. 複製下列範本,並將其貼到文字檔中。然後將檔案儲存為 sqlPrefix-XdrT.xml,並放在與 sqlPrefix-Xdr.xml 一樣的目錄中。在範本中的 XPath 查詢會傳回 CustomerID 為 1 的 <Customer> 和 <Order> 子元素。

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

    為對應結構描述 (sqlPrefix-Xdr.xml) 指定的目錄路徑,是儲存範本之目錄的相對路徑。您也可以指定絕對路徑,例如:

    mapping-schema="C:\MyDir\sqlPrefix-Xdr.xml"
    
  3. 建立和使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 以執行範本。

    如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。

以下為結果集:

<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-01T00:00:00" /> 
    <Order SalesOrderID="Ord-44501" OrderDate="2001-11-01T00:00:00" /> 
    <Order SalesOrderID="Ord-45283" OrderDate="2002-02-01T00:00:00" /> 
    <Order SalesOrderID="Ord-46042" OrderDate="2002-05-01T00:00:00" /> 
  </Customer>
</ROOT>