Есть ли способ предотвратить пустые элементы формы <myElement/>
будучи используемым в Вашем xml? Другими словами, можете Вы указывать в своем xsd это <myElement/>
недопустимо?
Используя nillable="false"
не работает, ни делает minOccurs="1"
- оба из тех позволяют <myElement/>
.
Если вы пытаетесь предотвратить появление элемента вообще, вы можете пометить его 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>
Если ваша схема-валидация не может показать ошибку, когда элемент типа данных 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]