在查詢中使用註解式 XSD 結構描述 (SQLXML 4.0)
您可以針對 XSD 結構描述指定範本中的 XPath 查詢,藉以針對註解式結構描述指定查詢來擷取資料庫中的資料。
<sql:xpath-query> 元素可讓您針對註解式結構描述所定義的 XML 檢視,指定 XPath 查詢。藉以執行 XPath 查詢的註解式結構描述會使用 <sql:xpath-query> 元素的 mapping-schema 屬性識別。
範本是包含一或多個查詢的有效 XML 文件。FOR XML 和 XPath 查詢會傳回文件片段。範本對於文件片段就像是容器一樣;因此,範本會提供一種方式來指定單一的上層元素。
本主題中的範例會使用範本,針對註解式結構描述指定 XPath 查詢來擷取資料庫中的資料。
例如,請考慮下列註解式結構描述:
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
xmlns:sql="urn:schemas-microsoft-com:mapping-schema">
<xsd:element name="Person.Person" >
<xsd:complexType>
<xsd:attribute name="BusinessEntityID" type="xsd:string" />
<xsd:attribute name="FirstName" type="xsd:string" />
<xsd:attribute name="LastName" type="xsd:string" />
</xsd:complexType>
</xsd:element>
</xsd:schema>
基於圖解用途,此 XSD 結構描述會以檔案名稱 Schema2.xml 儲存。接著,您可以針對註解式結構描述,在下列範本檔 (Schema2T.xml) 中指定 XPath 查詢:
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Person[@BusinessEntityID="1"]
</sql:xpath-query>
然後,您可以建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs),將查詢當做範本檔的一部分執行。如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。
使用內嵌的對應結構描述
註解式結構描述可以直接包含在範本中,接著就可以針對內嵌的結構描述指定範本中的 XPath 查詢。範本也可以是一個 Updategram。
一個範本可以包含多個內嵌結構描述。若要使用包含在範本中的內嵌結構描述,利用 <xsd:schema> 元素的唯一值來指定 id 屬性,然後使用 #idvalue 來參考內嵌結構描述。id 屬性在行為上與 XDR 結構描述中使用的 sql:id ({urn:schemas-microsoft-com:xml-sql}id) 相同。如需詳細資訊,請參閱<在查詢中使用註解式 XDR 結構描述 (在 SQLXML 4.0 中已被取代)>。
例如,下列範本指定兩個內嵌的註解式結構描述:
<ROOT xmlns:sql='urn:schemas-microsoft-com:xml-sql'>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
id='InLineSchema1' sql:is-mapping-schema='1'>
<xsd:element name='Employees' ms:relation='HumanResources.Employee'>
<xsd:complexType>
<xsd:attribute name='LoginID'
type='xsd:string'/>
<xsd:attribute name='JobTitle'
type='xsd:string'/>
</xsd:complexType>
</xsd:element>
</xsd:schema>
<xsd:schema xmlns:xsd='http://www.w3.org/2001/XMLSchema'
xmlns:ms='urn:schemas-microsoft-com:mapping-schema'
id='InLineSchema2' sql:is-mapping-schema='1'>
<xsd:element name='Persons' ms:relation='Person.Person'>
<xsd:complexType>
<xsd:attribute name='BusinessEntityID'
type='xsd:string' />
<xsd:attribute name='FirstName'
type='xsd:string' />
<xsd:attribute name='LastName'
type='xsd:string' />
</xsd:complexType>
</xsd:element>
</xsd:schema>
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'
mapping-schema='#InLineSchema1'>
/Employees[@LoginID='adventure-works\guy1']
</sql:xpath-query>
<sql:xpath-query xmlns:sql='urn:schemas-microsoft-com:xml-sql'
mapping-schema='#InLineSchema2'>
/Persons[@BusinessEntityID='1']
</sql:xpath-query>
</ROOT>
範本也會指定兩個 XPath 查詢。每個 <xpath-query> 元素都會藉由指定 mapping-schema 屬性,唯一地識別對應結構描述。
當您在範本中指定內嵌的結構描述時,也必須在 <xsd:schema> 元素上指定 sql:is-mapping-schema 註解。sql:is-mapping-schema 會接受布林值 (0 = false,1 = true)。包含 sql:is-mapping-schema="1" 的內嵌結構描述會視為內嵌的註解式結構描述,而且不會在 XML 文件中傳回。
sql:is-mapping-schema 註解屬於範本命名空間 urn:schemas-microsoft-com:xml-sql。
若要測試此範例,將範本 (InlineSchemaTemplate.xml) 儲存在本機目錄中,然後建立及使用 SQLXML 4.0 測試指令碼 (Sqlxml4test.vbs) 來執行範本。如需詳細資訊,請參閱<使用 ADO 執行 SQLXML 4.0 查詢>。
除了在範本 (其中包含 XPath 查詢) 的 <sql:xpath-query> 元素上,或在 Updategram 的 <updg:sync> 元素上指定 mapping-schema 屬性之外,您還可以執行下列操作:
在範本的 <ROOT> 元素 (全域宣告) 上指定 mapping-schema 屬性。接著,這個對應結構描述會變成沒有明確 mapping-schema 註解之所有 XPath 和 Updategram 節點使用的預設結構描述。
使用 ADO Command 物件指定 mapping schema 屬性。
在 <xpath-query> 或 <updg:sync> 元素上指定的 mapping-schema 屬性優先順序最高;ADO Command 物件的優先順序則最低。
請注意,如果您在範本中指定 XPath 查詢,而且沒有指定藉以執行 XPath 查詢的對應結構描述,則會將 XPath 查詢視為 dbobject 類型查詢。例如,假設有以下的範本:
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql">
Production.ProductPhoto[@ProductPhotoID='100']/@LargePhoto
</sql:xpath-query>
此範本會指定一個 XPath 查詢,但不會指定對應結構描述。因此,此查詢會視為 dbobject 類型查詢,其中 Production.ProductPhoto是資料表名稱,而 @ProductPhotoID='100' 是尋找 ID 值為 100 之產品相片的述詞。@LargePhoto 是從中擷取值的資料行。