2

スキーマには <xsd:any/> 要素が含まれています。

コードは、何らかの外部情報によって、特定の XML 構造 (例: foo) が any の代わりにあることを認識しています。

XQuery は /Root/Child/AnotherChild/book/title のようになります。

しかし、XQuery は book 要素が不明であると不平を言い、XQuery は有効ではありません。

XQuery が実行時に <any/> の場所にあるものを動的に照合できるように、クエリを作成するにはどうすればよいですか?

環境が重要である場合、それは Java、Oracle BPEL、SOA サーバー 1.1.5 です。

4

2 に答える 2

1

これは私のために働いた://本/タイトル。

もちろん、これは十分に正確ではなく、スキーマに複数の <xsd:any> がある場合は使用できません。私のスキーマでは十分ですが。

Right Way (tm) とは何なのか、今でも疑問に思っています。

于 2011-10-06T19:10:14.760 に答える
1
<xsd:any/>

「任意の」要素と実際には一致しません。むしろ、スコープ内のスキーマのどこかで宣言された任意の要素と一致します。

たとえば、次のスキーマは、xsd:any を含む要素を定義します。

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.example.com/">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:any/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

ただし、次のクエリは失敗します。

import schema namespace my = "http://www.example.com/";
validate { <my:root><my:Child/></my:root> }

my:Child はどこにも宣言されていないためです。

スキーマが次のように変更された場合:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://www.example.com/">
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:any/>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
  <xs:element name="Child" type="xs:anyType"/>
</xs:schema>

その後、クエリは成功するはずです。もちろん、 xsd:any に一致する要素は別の名前空間にある可能性があります。

于 2011-10-06T21:51:31.010 に答える