使用 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 查詢
複製上述的結構描述程式碼,並將其貼到文字檔中。並將檔案儲存為 sqlPrefix-Xdr.xml。
複製下列範本,並將其貼到文字檔中。然後將檔案儲存為 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"
建立和使用 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>