架构包含< xsd:any />元件。
通过一些外部信息,代码知道代替任何特定的XML结构(例如foo)。
XQuery看起来像/ Root / Child / AnotherChild / book / title。
但XQuery抱怨book元素未知,因此XQuery无效。
如何编写查询以便XQuery接受< any />中的任何内容地方可以在运行时动态匹配吗?
如果环境至关重要,那就是Java,Oracle BPEL,SOA服务器1.1.5。
答案 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匹配的元素可能位于另一个名称空间中。