sql:target-namespace を使用した、対象名前空間の指定 (XDR スキーマ)
重要 : |
---|
このトピックは、レガシ アプリケーションの参照用として用意されています。この機能は今後更新されません。新しい開発作業では、この機能の使用を避け、注釈付き XSD スキーマを使用して XML ビューを作成してください。詳細については、「注釈付き XSD スキーマの概要 (SQLXML 4.0)」を参照してください。既存の注釈付き XDR スキーマは、XSD スキーマに変換できます。詳細については、「注釈付き XDR スキーマから同等の XSD スキーマへの変換 (SQLXML 4.0)」を参照してください。 |
sql:target-namespace 注釈を使用すると、要素や属性を、既定の名前空間から別の名前空間に置くことができます。sql:target-namespace 属性は、XDR スキーマの <Schema> タグにのみ追加できます。
sql:target-namespace の値は名前空間 URI (Uniform Resource Identifier) で、マッピング スキーマに指定された要素や属性を生成するために使用されます。この URI は、既定の名前空間のすべての要素と属性に適用されます。このスキーマに対するクエリで返される XML ドキュメントには、xmlns:prefix="uri" 宣言が含まれ、これに従って要素や属性の名前にプレフィックスが付けられます。使用される URI は、sql:target-namespace 注釈の値が基になります。ただし、プレフィックスは任意に生成されます。このプレフィックスは、スキーマ内で使用されている場合でも、スキーマのどの値にも対応しません。
例
次の例を使用した実際のサンプルを作成するには、特定の条件を満たす必要があります。詳細については、「SQLXML のサンプル実行のための必要条件」を参照してください。
A. 対象名前空間を指定する
この例では、sql:target-namespace 注釈を使用して、対象名前空間が指定されています。この結果、既定の名前空間に対応していたすべての要素と属性は、対象名前空間 (MyNamespace) にリダイレクトされます。
<?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"
sql:target-namespace="urn:MyNamespace">
<ElementType name="Sales.SalesOrderHeader" >
<AttributeType name="SalesOrderID" />
<attribute type="SalesOrderID"/>
</ElementType>
<ElementType name="Sales.Customer" >
<AttributeType name="CustomerID" />
<attribute type="CustomerID" />
<element type="Sales.SalesOrderHeader" >
<sql:relationship
key="CustomerID"
foreign-key="CustomerID"
key-relation="Sales.Customer"
foreign-relation="Sales.SalesOrderHeader" />
</element>
</ElementType>
</Schema>
スキーマに対してサンプル XPath クエリをテストするには
上のスキーマのコードをコピーして、テキスト ファイルに貼り付け、TargetNS-Xdr.xml として保存します。
次のテンプレートをコピーして、テキスト ファイルに貼り付け、TargetNS-Xdr.xml を保存したディレクトリに TargetNS-XdrT.xml として保存します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"> <sql:xpath-query mapping-schema="TargetNS-Xdr.xml" xmlns:x="urn:MyNamespace" > x:Sales.Customer[@CustomerID=1] </sql:xpath-query> </ROOT>
このテンプレートの XPath クエリでは、名前空間 "MyNamespace" に定義されているすべての <Customer> 要素が要求されます。テンプレートでは、この名前空間にプレフィックス x がバインドされています。
マッピング スキーマ (TargetNS-Xdr.xml) に指定するディレクトリ パスは、テンプレートを保存するディレクトリに対する相対パスです。次のように、絶対パスを指定することもできます。
mapping-schema="C:\MyDir\TargetNS-Xdr.xml"
SQLXML 4.0 テスト スクリプト (sqlxml4test.vbs) を作成し、それを使用してテンプレートを実行します。
詳細については、「ADO を使用した、SQLXML 4.0 クエリの実行」を参照してください。
次に結果セットを示します。
<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">
<y0:Sales.Customer xmlns:y0="urn:MyNamespace" CustomerID="1">
<y0:Sales.SalesOrderHeader SalesOrderID="43860" />
<y0:Sales.SalesOrderHeader SalesOrderID="44501" />
<y0:Sales.SalesOrderHeader SalesOrderID="45283" />
<y0:Sales.SalesOrderHeader SalesOrderID="46042" />
</y0:Sales.Customer>
</ROOT>
生成されるプレフィックスは不定ですが、同一の名前空間にマップされることに注意してください。