Может ли элемент в xsd иметь произвольное имя? - PullRequest
2 голосов
/ 09 марта 2012

Я новичок в проверке xsd и пытаюсь проверить, есть ли у тега выбора определенная группа элементов, но также есть и те, которые имеют произвольные имена. Примерно так:

...
<xs:choice>
  <xs:element name="test1" type="xs:string" />
  <xs:element name="test2" type="xs:string" />
  <xs:element name="-some regex or something to specify arbitrary name here" type="xs:string" />
</xs:choice>
...

Xml:

...
<test1>example text</test1>
<test2>example text again</test2>
<exampleNode>example text</exampleNode>
...

Возможно ли это в xsd? Для проверки на новые узлы с произвольным именем?

Ответы [ 3 ]

5 голосов
/ 09 марта 2012

Вы можете использовать подстановочный знак xs: any, чтобы разрешить любое имя элемента или любое имя в пределах определенного набора пространств имен.Вы не можете ограничить имя дальше (за исключением использования утверждений в XSD 1.1).

Использование имен с внутренней структурой (например, address-line-1, address-line-2, address-line-3) неизменно является плохой практикой в ​​дизайне XML.В этом случае лучший дизайн - <address-line nr="1"> и т. Д. Таким образом, идея разрешения имен, которые соответствуют некоторому регулярному выражению, предлагает плохой дизайн.В общем, XML-схема была разработана, чтобы затруднить или сделать невозможным написание схемы для плохо разработанного словаря.

2 голосов
/ 09 марта 2012

Попробуйте: minOccurs="0" делает это необязательным.

<xs:choice>
  <xs:element name="test1" type="xs:string" />
  <xs:element name="test2" type="xs:string" />
  <xs:any minOccurs="0"/>
</xs:choice>
0 голосов
/ 09 марта 2012

Следует использовать ссылки на сущности: Схема:

<xsd:schema xmlns:xsd="http://www.w3.org/1999/XMLSchema"> 
    <xsd:element name="Ferrari"/> 
    <xsd:element name="Lambo"/> 
    <xsd:element name="&supercar;"/>
</xsd:schema>

XML-документ:

<?xml version="1.0"?>
<!DOCTYPE xsd:schema PUBLIC "-//W3C//DTD XML Schema 20000406//EN" "XMLSchema.dtd" [ <!ENTITY % p 'xsd:'> <!ENTITY % s ':xsd'>
<!ENTITY supercar 'McLaren'> 
]> 

Чтобы изменить динамическое имя, при определении схемы в документе XML просто измените имя суперкара. Я не проверял это, но это должно дать вам представление о том, как добиться того, что вы пытаетесь сделать.

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