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

У меня есть несколько документов XML, которые я не могу контролировать.Их структура четко определена, но она описана в нескольких PDF-файлах, которые, несмотря на то, что они очень точные, не делают автоматизированную проверку очень удобной.Я пытаюсь написать XML-схему, чтобы сделать (большинство) правил в этих PDF-файлах исполняемыми.

Все элементы являются обязательными.Но около половины из них могут быть либо пустыми, либо иметь типизированное содержимое.

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

<xs:simpleType name="empty">
  <xs:restriction base="xs:string">
    <xs:length value="0"/>
  </xs:restriction>
</xs:simpleType>

<xs:simpleType name="codPostal">
  <xs:restriction base="xs:string">
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/>
  </xs:restriction>
</xs:simpleType>
<xs:simpleType name="opt_codPostal">
  <xs:union memberTypes="empty codPostal"/>
</xs:simpleType>

Есть ли менее повторяющийся способ сделать это?

1 Ответ

6 голосов
/ 28 апреля 2011

Вы можете использовать xs: nillable.

В XSD

<xs:simpleType name="codPostal">
  <xs:restriction base="xs:string">
    <xs:pattern value="^[0-9]{4}-[0-9]{3}$"/>
  </xs:restriction>
</xs:simpleType>

<xs:element name="OptionalString" type="codPostal" nillable="true" />

В документе

<OptionalString xsi:nil="true" 
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" />

Это наиболее полезно для нестроковых типов (например, datetime и т. Д.), Поскольку для строк вы можете просто использовать нулевую длину.

<OptionalString /> 

К сожалению, вам нужно указать атрибут "nil" в документе. Насколько я знаю, единственный ненавязчивый способ сделать то, что вы хотите, это подход объединенного типа, который вы уже выбрали.

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