Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 12.0.1 » SQL Anywhere サーバー SQL の使用法 » データベースにおける XML の使用 » XML 文書をリレーショナルデータとしてインポートする

 

デフォルトの XML ネームスペースの定義

デフォルトのネームスペースは、xmlns="URI" の形式の属性で、XML 文書の要素に定義します。次の例では、文書には http://www.iAnywhere.com/EmployeeDemo という URI にバインドされるデフォルトのネームスペースがあります。

<x xmlns="http://www.iAnywhere.com/EmployeeDemo"/>

要素の名前にプレフィクスがない場合は、その要素およびその要素のすべての子孫要素にデフォルトのネームスペースが適用されます。コロンによって、プレフィクスと残りの要素名は区切られます。たとえば、<x/> にはプレフィクスがないが、<p:x/> にはプレフィクス p があります。xmlns:prefix="URI" の形式の属性によって、プレフィクスにバインドされるネームスペースを定義します。次の例では、文書がプレフィクス p を前述の例と同じ URI にバインドします。

<x xmlns:p="http://www.iAnywhere.com/EmployeeDemo"/>

デフォルトのネームスペースが属性に適用されることはありません。プレフィクスがある場合を除き、属性は常に NULL ネームスペース URI にバインドされます。次の例では、ルート要素と子要素には iAnywhere1 ネームスペースがあり、x 属性には NULL ネームスペース URI、y 属性には iAnywhere2 ネームスペースがあります。

<root xmlns="iAnywhere1" xmlns:p="iAnywhere2">
<child x='1' p:y='2' />
</root>

XML 文書を、openxml クエリの namespace-declaration 引数として渡すと、文書のルート要素に定義されたネームスペースはクエリに適用されます。ルート要素以降の残りの文書はすべて無視されます。次の例では、p1 は文書では iAnywhere1 にバインドされ、namespace-declaration 引数では p2 にバインドされます。クエリはプレフィクス p2 を使用できます。

SELECT * 
FROM openxml('<p1:x xmlns:p1="iAnywhere1">123</p1:x>', '/p2:x', 1, '<root xmlns:p2="iAnywhere1"/>')
WITH ( c1 int '.' );

要素を一致させる場合、プレフィクスがバインドされる URI を正確に指定する必要があります。上の例では、xpath クエリの x 名 と文書の x 要素は、どちらも iAnywhere1 ネームスペースがあるため、一致となります。

要素を一致させる場合、プレフィクスがバインドされる URI を正確に指定する必要があります。上の例では、xpath クエリの x 名 と文書の x 要素は、どちらも iAnywhere1 ネームスペースがあるため、一致となります。xpath 要素 x のプレフィクスは、xml-data 内で x 要素に対して定義されたネームスペースと一致する、namespace-declaration 内で定義されたネームスペース iAnywhere1 を参照します。

openxml システムプロシージャーの namespace-declaration では、デフォルトのネームスペースを使用しないでください。NULL ネームスペースを含む任意の URI にバインドされる x 要素と一致する、/*:x 形式のワイルドカードクエリを使用してください。または、特定のプレフィクスに必要な URI をバインドし、それをクエリで使用します。

 参照