您可以針對批注架構指定查詢,以針對 XSD 架構在範本中指定 XPath 查詢,以從資料庫擷取數據。
<sql:xpath-query> 元素可讓您針對批注架構所定義的 XML 檢視指定 XPath 查詢。 要執行 XPath 查詢的批注架構,是使用 mapping-schemasql:xpath-query> 元素的< 屬性來識別。
範本是包含一或多個查詢的有效 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.Contact" >
<xsd:complexType>
<xsd:attribute name="ContactID" 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的檔案中。 然後,您可以針對下列範本檔案中指定的批注架構使用 XPath 查詢(Schema2T.xml):
<sql:xpath-query
xmlns:sql="urn:schemas-microsoft-com:xmlsql"
>
Person.Contact[@ContactID="1"]
</sql:xpath-query>
然後,您可以建立並使用 SQLXML 4.0 測試腳本 (Sqlxml4test.vbs) 來執行查詢作為範本檔案的一部分。 如需詳細資訊,請參閱批注式 XDR 架構(在 SQLXML 4.0 中已被取代)。
使用內嵌對應架構
批注架構可以直接包含在範本中,然後針對內嵌架構在範本中指定 XPath 查詢。 範本也可以是 Updategram。
範本可以包含多個內嵌架構。 若要使用範本中包含的內嵌架構,請在 xsd:schema> 元素上<指定具有唯一值的 id 屬性,然後使用 #idvalue 來參考內嵌架構。 id 屬性的行為與 XDR 架構中使用的 sql:id ({urn:schemas-microsoft-com:xml-sql}id) 行為相同。
例如,下列範本會指定兩個內嵌批注架構:
<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='Title'
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='Contacts' ms:relation='Person.Contact'>
<xsd:complexType>
<xsd:attribute name='ContactID'
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'>
/Contacts[@ContactID='1']
</sql:xpath-query>
</ROOT>
此範本也會指定兩個 XPath 查詢。
<每個 xpath-query> 元素都會藉由指定 mapping-schema 屬性來唯一識別對應架構。
當您在範本中指定內嵌架構時, sql:is-mapping-schema 也必須在 <xsd: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 查詢。
除了在範本的 <sql:xpath-query> 元素上指定 mapping-schema 屬性(如果有 XPath 查詢時),或在 updategram 中的 updg:sync> 元素上<,您可以執行下列動作:
在範本中<指定 ROOT> 元素 (全域宣告)
mapping-schema上的屬性。 接著,此對應架構會成為所有沒有明確mapping-schema註釋的 XPath 和 Updategram 節點將使用的預設架構。mapping schema使用 ADOCommand物件指定 屬性。
mapping-schema
在 xpath-query> 或 updg:sync 元素上<指定的屬性具有最高的優先順序;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' 是尋找標識符值為 100 的產品相片的述詞。 @LargePhoto 是要從中擷取值的數據行。