Как настроить XQuery с поддержкой схемы - PullRequest
1 голос
/ 01 июня 2009

Я пытаюсь использовать типы для выбора элементов, которые являются подтипами, поэтому у меня есть тестовый документ с подтипами 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 Ответ

1 голос
/ 28 июля 2009

Вам необходимо импортировать схему в ваш 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>
...