Как исключить значение перечисления в файле XML с помощью XSD? - PullRequest
3 голосов
/ 24 марта 2010

Можно ли указать значение тега или атрибута не должно быть похоже на some_value ?

У меня странное требование, когда xsd не знает о значениях, отправляемых ему. Значением этого конкретного тега может быть строка с любым значением , за исключением одного значения (скажем, data_migration).

Отправитель должен быть подтвержден с ошибкой, если это конкретное значение отправлено.

Можно ли указать это ограничение?

Ответы [ 3 ]

2 голосов
/ 24 марта 2010

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

<xsd:simpleType name="IncludedEnumType">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="pending" />
    <xsd:enumeration value="in_process" />
    <xsd:enumeration value="failed" />
    <xsd:enumeration value="unknown" />
  </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="ExcludedEnumType">
  <xsd:restriction base="xsd:string">
    <xsd:enumeration value="data_migration" />
  </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="CombinedEnumType">
  <xsd:union memberTypes="IncludedEnumType ExcludedEnumType" />
</xsd:simpleType>

Вы должны использовать либо IncludedEnumType, либо CombinedEnumType, если необходимо. Использование IncludedEnumType, очевидно, исключило бы значения в ExcludedEnumType.

Этот подход использует Решение 2 из этой статьи от IBM .

2 голосов
/ 24 марта 2010

Я не эксперт по регулярным выражениям, но этот simpleType делает все, начиная с data_migration недействительным.

<xs:simpleType name="notDataMigration">
  <xs:restriction base="xs:string">
    <xs:pattern value="^(?!data_migration).*" />
  </xs:restriction>
</xs:simpleType>
1 голос
/ 24 марта 2010

Используйте регулярные выражения для указания шаблона или как в вашем случае, что шаблон не должен содержать.

http://www.w3schools.com/schema/schema_facets.asp

...