如何编写一个跨越xsd:any元素的XQuery?

时间:2011-10-06 18:50:41

标签: java oracle xquery bpel

架构包含< xsd:any />元件。

通过一些外部信息,代码知道代替任何特定的XML结构(例如foo)。

XQuery看起来像/ Root / Child / AnotherChild / book / title。

但XQuery抱怨book元素未知,因此XQuery无效。

如何编写查询以便XQuery接受< any />中的任何内容地方可以在运行时动态匹配吗?

如果环境至关重要,那就是Java,Oracle BPEL,SOA服务器1.1.5。

2 个答案:

答案 0 :(得分:1)

这个对我有用://书/标题。

当然这不够精确,并且当有多个< xsd:any>时不能使用。在架构中。对于我的架构虽然足够了。

我仍然想知道什么是正确的方式(tm)。

答案 1 :(得分:1)

<xsd:any/>

与“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> }

因为我:孩子被宣布无处可去。

如果架构修改如下:

<?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匹配的元素可能位于另一个名称空间中。