次の方法で共有


クエリでの注釈付き XSD スキーマの使用 (SQLXML 4.0)

適用対象:SQL ServerAzure SQL Database

注釈付きスキーマに対してクエリを指定し、XSD スキーマに対してテンプレートで XPath クエリを指定して、データベースからデータを取得することができます。

<sql:xpath-query> 要素を使用すると、注釈付きスキーマで定義されている XML ビューに対して XPath クエリを指定できます。 XPath クエリを実行する注釈付きスキーマは、sql:xpath-query> 要素の mapping-schema 属性を<使用して識別されます。

テンプレートは、1 つ以上のクエリを含む有効な 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 というファイルに格納されているものとします。 ここで、次のテンプレート ファイル (Schema2T.xml) で指定されている注釈付きスキーマに対し、XPath クエリを指定できます。

<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 クエリを指定できます。 テンプレートはアップデートグラムとしても使用できます。

テンプレートには複数のインライン スキーマを含めることができます。 テンプレートに含まれるインライン スキーマを使用するには、xsd:schema> 要素に一意の値を持つ id 属性を<指定し、#idvalueを使用してインライン スキーマを参照します。 id 属性の動作は、XDR スキーマで使用される sql:id ({urn:schemas-microsoft-com:xml-sql}id) と同じです。

たとえば、次のテンプレートでは、2 つのインライン注釈付きスキーマを指定しています。

<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>  

このテンプレートでは 2 つの 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 クエリの実行」を参照してください

テンプレート内の sql:xpath-query 要素 (<XPath クエリ>がある場合) またはアップデートグラムの updg:sync> 要素に<対して mapping-schema 属性を指定するだけでなく、次の操作を行うことができます。

  • テンプレートの ROOT> 要素 (グローバル宣言) に<mapping-schema 属性を指定します。 このマッピング スキーマは、明示的なマッピング スキーマ注釈を持たないすべての XPath ノードとアップデートグラム ノードで使用される既定 のスキーマ になります。

  • ADO Command オブジェクトを使用して、マッピング スキーマ属性を指定します。

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 クエリが指定されていますが、マッピング スキーマが指定されていません。 したがって、このクエリは、Production.ProductPhoto がテーブル名であり@ProductPhotoID=、'100' が ID 値 100 の製品写真を検索する述語である dbobject 型クエリとして扱われます。 @LargePhoto は、値を取得する列です。