Я разрабатываю схему, используя RELAX NG.Я довольно новичок в этом, поэтому вполне возможно, что я упускаю из виду что-то очевидное, но, похоже, нет удобного способа указать количество вхождений элемента, как вы можете в языке XML-схемы.
Например, предположим, что я хотел указать, что элемент A
может содержать от 2 до 5 B
элементов.Я не хочу использовать теги zeroOrMore
или oneOrMore
, потому что у меня действительно есть верхняя граница числа элементов.В XML-схеме я могу использовать свойства minOccurs
и maxOccurs
для компактного определения этого.Я прочитал официальный учебник по RELAX NG , просмотрел спецификацию и выполнил базовый поиск в Google, но мне не удалось найти какой-либо удобный способ сделать это с RELAXNG.Лучшее, что я могу понять, вам нужно сделать что-то вроде этого:
<element name="A">
<ref name="B"/>
<ref name="B"/>
<optional><ref name="B"/></optional>
<optional><ref name="B"/></optional>
<optional><ref name="B"/></optional>
</element>
<define name="B">
<element name="B">
<text/>
</element>
</define>
Это выполнимо, но начнет выглядеть уродливо, когда вам нужно большее количество вхождений.В моей реальной схеме у меня есть один тип элемента, который может встречаться до 256 раз, поэтому необязательные элементы, заданные вручную, будут неуклюжими.Я сделаю это, если понадобится, но я хотел бы знать, есть ли более элегантный способ выражения моих ограничений на вхождения.