模式包含一个
根据一些外部信息,代码知道在 any 的位置有一个特定的 XML 结构(例如 foo)。
XQuery 将看起来像/Root/Child/AnotherChild/book/title。
但是 XQuery 提示 book 元素未知,因此 XQuery 无效。
我怎样才能编写一个查询,以便 XQuery 可以接受
如果环境很重要,那就是 Java、Oracle BPEL、SOA 服务器 1.1.5。
最佳答案
<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 没有声明。
如果schema修改如下:
<?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 匹配的元素可能在另一个命名空间中。
关于java - 如何编写跨越 xsd :any element? 的 XQuery,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7679020/