我正在尝试使用类型来选择子类型的元素,所以我有一个测试文档,其子类型为xs:integer和xs:float。
如何告诉XQuery使用我的架构中定义的类型?
(可能与我使用oXygen和Saxon-SA相关)
输入文件:
<?xml version="1.0" encoding="UTF-8"?>
<root xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:noNamespaceSchemaLocation="test-inherit.xsd">
<int>4</int>
<rest-int>5</rest-int>
<rest-float>6</rest-float>
</root>
WXS架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="root">
<xs:complexType>
<xs:sequence>
<xs:element name="int" type="xs:integer"/>
<xs:element name="rest-int" type="rest-int"/>
<xs:element name="rest-float" type="rest-float"/>
</xs:sequence>
</xs:complexType>
</xs:element>
<xs:simpleType name="rest-int">
<xs:restriction base="xs:integer">
<xs:maxInclusive value="10"></xs:maxInclusive>
<xs:minInclusive value="0"></xs:minInclusive>
</xs:restriction>
</xs:simpleType>
<xs:simpleType name="rest-float">
<xs:restriction base="xs:float">
<xs:maxInclusive value="10"></xs:maxInclusive>
<xs:minInclusive value="0"></xs:minInclusive>
</xs:restriction>
</xs:simpleType>
</xs:schema>
的XQuery:
for $integer in doc("test-inherit.xml")//element(xs:integer)
return <integer>{$integer}</integer>
答案 0 :(得分:1)
您需要在XQuery中导入架构。此外,如果您希望根据该架构验证加载的文档(以及相应地分配给文档节点的架构类型),则需要使用validate
表达式:
import schema default element namespace "" at "myschema.xsd";
for $integer in (validate { doc("test-inherit.xml") })//schema-element(int)
return <integer>{$integer}</integer>