Ограничение пустых элементов в xsd

Есть ли способ предотвратить пустые элементы формы <myElement/> будучи используемым в Вашем xml? Другими словами, можете Вы указывать в своем xsd это <myElement/> недопустимо?

Используя nillable="false" не работает, ни делает minOccurs="1" - оба из тех позволяют <myElement/>.

6
задан Oded 8 March 2010 в 08:03
поделиться

2 ответа

Если вы пытаетесь предотвратить появление элемента вообще, вы можете пометить его maxOccurs="0". Я предполагаю, что это не то, что вам нужно, поэтому если вы пытаетесь убедиться, что к сложному элементу всегда есть атрибуты, то вам нужно указать use="required" хотя бы для одного из атрибутов или использовать группу атрибутов. Если myElement является простым типом и вы хотите убедиться, что он имеет значение, то вы всегда можете ограничить его тип. Если вам нужна ненулевая строка, то вы можете сделать:

<xsd:element name="myElement">
    <xsd:simpleType>
        <xsd:restriction base="xsd:string">
            <xsd:minLength value="1" />
        </xsd:restriction>
    </xsd:simpleType>
</xsd:element>
11
ответ дан 8 December 2019 в 16:01
поделиться

Если ваша схема-валидация не может показать ошибку, когда элемент типа данных DATE является нулевым, то вы можете использовать шаблон [если для вас не составляет труда набрать требуемый формат];

Я добавил пример, реализация подобного кода будет работать на вашем инструменте,

Это пример XML:

<root>
   <date1>12/31/1999</date1> <!-- The Date format defined here is MM/DD/YYYY, null value or Date with any other format aren't accepted-->
</root>

Это соответствующий XSD:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:include schemaLocation="Date_Def.xsd"/>
  <xs:element name="root">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="date1" type="DATE_TYPE" minOccurs="0" maxOccurs="1" />
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>

Обратите внимание, что я включаю еще один файл схемы, который включает определение типа DATE_TYPE,
Вот файл Date_Def.xsd:

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
  <xs:simpleType name="DATE_TYPE">
    <xs:restriction base="xs:string">
      <xs:pattern value="([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9]"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

Формат даты определен здесь как MM/DD/YYYY, нулевое значение или дата с любым другим форматом не принимаются, Если вы хотите принять также нулевую метку, замените шаблон на этот ...

<xs:pattern value="|(([0][1-9]|[1][0-2])/([0][1-9]|[1-2][0-9]|[3][0-1])/[1-2][0-9][0-9][0-9])"/>

Валидация которого принимает, либо нулевую метку, либо Date-значение шаблона MM/DD/YYYY.

Если вам нужна еще помощь по проектированию паттернов, то смело делайте пост в SO, надеюсь помогло :-)

[примечание :: Определение типа может также быть определено в том же файле, что требует дополнительные пространства имен, упомянутые в XML, а также XSD файлах, определение во внешний файл является безвредным и re-usable]

4
ответ дан 8 December 2019 в 16:01
поделиться
Другие вопросы по тегам:

Похожие вопросы: