如何设置Schema-aware XQuery

时间:2009-06-01 19:21:50

标签: xml xquery

我正在尝试使用类型来选择子类型的元素,所以我有一个测试文档,其子类型为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>

1 个答案:

答案 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>