Ограничение длины типа списка в схеме XML - PullRequest
0 голосов
/ 06 ноября 2011

Я создал схему XML для элемента абстрактного набора:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    xmlns:tns="http://www.dummy.com/xml/sets/"
    targetNamespace="http://www.dummy.com/xml/sets/">
    <xs:group name="SetElement">
        <xs:sequence>
            <xs:element name="Label" type="xs:string"/>
        </xs:sequence>
    </xs:group>
</xs:schema>

Импортируя эту схему, я пытаюсь создать схему XML для объекта с конечным множеством, в котором есть элемент мощности, хранящий мощность множества, и список элементов listType="SetElement":

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified"
    targetNamespace="http://www.dummy.com/xml/sets/"
    xmlns="http://www.dummy.com/xml/sets/">
    <xs:import namespace="http://www.dummy.com/xml/sets/"
        schemaLocation="setelement.xsd"/>
    <xs:element name="Cardinality" type="xs:nonNegativeInteger"/>
    <xs:simpleType name="SetElements">
        <xs:list itemType="SetElement"><xs:length value=""></xs:length></xs:list>
    </xs:simpleType>    
</xs:schema>

Поскольку в наборе должно быть ровно столько элементов, сколько указано в элементе Cardinality, есть ли возможность использовать его для ограничения аспекта длины типа списка SetElements?

У кого-нибудь есть предложения по решению этой общей проблемы? Если у вас есть схема для какой-либо конечной коллекции или списка или множества объектов, которая знает свою мощность, есть ли способ использовать ее, чтобы указать список ее элементов размером точно до его мощности?

Спасибо за любые предложения. SRM.

1 Ответ

0 голосов
/ 07 ноября 2011

Вы можете сделать это в XSD 1.1 с утверждениями. Примерно так:

<xs:assert test="Cardinality = count(data(SetElements))"/>

XSD 1.1 поддерживается в последних версиях Saxon и Xerces.

Если вы не можете использовать XSD 1.1, рассмотрите возможность добавления фазы проверки Schematron.

Майкл Кей Saxonica

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...