Как я могу указать элемент, имеющий атрибут, который указывает, сколько дочерних элементов он содержит в схеме XML? - PullRequest
7 голосов
/ 19 июня 2011

Возможно ли это вообще?

  • Я знаю, что можно сделать ограничение на основе регулярных выражений, но это не так
  • Я знаю, что можно объявить атрибут как внешний ключ, рассчитанный XPath, но, похоже, он должен быть уникальным

Exemple:

<root children="2">
    <child />
    <child />
</root>

Ответы [ 2 ]

6 голосов
/ 20 июня 2011

XSD 1.1 позволяет вам выразить этот вид ограничения:

<xs:element name="root">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="child" maxOccurs="unbounded"/>
    </xs:sequence>
    <xs:attribute name="children" type="xs:integer"/>
  </xs:complexType>
  <xs:assert test="@children = count(child)"/>
</xs:element>

XSD 1.1 в настоящее время реализован в Saxon и Xerces.

5 голосов
/ 19 июня 2011

W3C Schema 1.0 не имеет возможности ограничивать значения атрибутов на основе экземпляра документа.

Schematron - отличный инструмент для проверки того, что документы придерживаются таких пользовательских сценариев проверки.

Например:

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://purl.oclc.org/dsdl/schematron">
    <pattern>
        <rule context="root[@children]">
            <assert 
                id="children-value" 
                test="@children=count(child)" 
                flag="error">
                The root/@children value must be equal to the number of child elements.
                </assert>
            </rule>
    </pattern>
</schema>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...