使用 sql:relation (XDR 結構描述)
重要事項 |
---|
這個主題是舊版應用程式的參考。未來將不會繼續開發這項功能,請避免在新的開發工作中使用此功能,而是改用註解式 XSD 結構描述建立 XML 檢視。如需詳細資訊,請參閱<註解式 XSD 結構描述簡介 (SQLXML 4.0)>。您可以將現有註解式 XDR 結構描述轉換為 XSD 結構描述。如需詳細資訊,請參閱<將註解式 XDR 結構描述轉換為等效 XSD 結構描述 (SQLXML 4.0)>。 |
加入 sql:relation 註解,將 XDR 結構描述中的 XML 節點對應至資料庫資料表。資料表/檢視表名稱會指定為 sql:relation 註解的值。
sql:relation 註解可以加入到 XDR 結構描述中的 <ElementType>、<element> 或 <attribute> 節點。sql:relation 會指定此結構描述中 <ElementType>、<element> 或 <attribute> 與資料庫內資料表/檢視表之間的對應。
在 <ElementType> 上指定 sql:relation 時,這個註解的範圍會套用到該 <ElementType> 中的所有屬性和子元素規格。因此,它提供了寫入註解的捷徑。在 <element> 上直接指定 sql:relation 時,也會有範圍設定導入 <ElementType> 內指定的屬性。<AttributeType> 上會忽略 sql:relation 註解。
當 Microsoft SQL Server 中有效的識別碼卻在 XML 中無效時,sql:relation 註解就很有用處。例如,"Order Details" 在 SQL Server 中是有效的資料表名稱,但是在 XML 中是無效的。在這種情況下,可以使用 sql:relation 註解來指定對應,例如:
<ElementType name="OD" sql:relation="[Order Details]">
範例
若要使用下列範例建立工作範例,您必須符合某些需求。如需詳細資訊,請參閱<執行 SQLXML 範例的需求>。
A. 在包含屬性的 <ElementType> 上指定 sql:relation
在此範例中,XDR 結構描述是由 <Contacts> 元素所組成 (其中包含 ContactID、FirstName 和 LastName 屬性)。sql:relation 註解是指定於 <ElementType> 上,將 <Contacts> 元素對應至 Person.Contact 資料表。此對應的範圍適用於 <ElementType> 中的所有屬性。因此,所有屬性都會對應至 Person.Contact 資料表內的資料行。
預設對應會發生於屬性,例如,屬性對應至 Person.Contact 資料表中同名的資料行。
<?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="Contacts" sql:relation="Person.Contact" >
<AttributeType name="ContactID" />
<AttributeType name="FirstName" />
<AttributeType name="LastName" />
<attribute type="ContactID" />
<attribute type="FirstName" />
<attribute type="LastName" />
</ElementType>
</Schema>
針對結構描述測試範例 XPath 查詢
複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 sqlRelationXdr.xml。
複製下列範本,並將其貼到文字檔中。將檔案儲存為 sqlRelationXdrT.xml 並放在與 sqlRelationXdr.xml 相同的目錄中。範本中的查詢會選取 ContactID 為 1 的連絡人。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="sqlRelationXdr.xml"> /Contacts[@ContactID="1"] </sql:xpath-query> </ROOT>
指定給對應結構描述的目錄路徑相對於儲存範本的相關目錄。也可以指定絕對路徑,例如:
mapping-schema="C:\MyDir\sqlRelationXdr.xml"
建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。
如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。
部分結果集如下:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contacts ContactID="1" FirstName="Gustavo"
LastName="Achong" />
</ROOT>
B. 在包含子元素和屬性的 <ElementType> 上指定 sql:relation
在此範例中,XDR 結構描述是由 <Contacts> 元素所組成,其中包含 ContactID 屬性及 <FirstName> 和 <LastName> 子元素。sql:relation 註解是指定於 <ElementType> 上,將 <Contacts> 元素對應至 Person.Contact 資料表。此對應的範圍適用於 <ElementType> 中的所有屬性。因此,所有屬性都會對應至 Person.Contact 資料表內的資料行。
預設的對應發生於屬性。屬性會對應至 Person.Contact 資料表內同名的資料行。
在此範例中,content 屬性是在 <FirstName> 和 <LastName> 子元素上指定。如果沒有 content=textOnly 屬性,子元素將不會分別對應到 Person.Contact 資料表中的 FirstName 和 LastName 資料行,因為元素預設會對應到資料表,而不是欄位。
<?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="FirstName" content="textOnly"/>
<ElementType name="LastName" content="textOnly"/>
<ElementType name="Contacts" sql:relation="Person.Contact" >
<AttributeType name="ContactID" />
<attribute type="ContactID" />
<element type="FirstName" />
<element type="LastName" />
</ElementType>
</Schema>
有另外一個方法可取代 content=textOnly 屬性的指定,您可以在 element 定義中指定 sql:field 註解,以便將子元素 (FirstName、LastName) 對應到對應的資料行名稱,如下列替代範例所示:
<element type="FirstName" sql:field="FirstName" />
<element type="LastName" sql:field="LastName" />
針對結構描述測試範例 XPath 查詢
複製上述的結構描述程式碼,並將其貼到文字檔中。將檔案儲存為 UsingSqlRelationXdr.xml。
複製下列範本,並將其貼到文字檔中。將檔案儲存為 UsingSqlRelationXdrT.xml 並放在與 UsingSqlRelationXdr.xml 相同的目錄中。範本中的查詢會選取 ContactID 為 1 的連絡人。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="UsingSqlRelationXdr.xml"> /Contacts[@ContactID="1"] </sql:xpath-query> </ROOT>
指定給對應結構描述 (UsingSqlRelationXdr.xml) 的目錄路徑相對於儲存範本的目錄。也可以指定絕對路徑,例如:
mapping-schema="C:\MyDir\UsingSqlRelationXdr.xml"
建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。
如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。
部分結果集如下:
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<Contacts ContactID="1">
<FirstName>Gustavo</FirstName>
<LastName>Achong</LastName>
</Contacts>
</ROOT>