如何使用XSD排除XML文件中的枚举值?

时间:2010-03-24 13:02:50

标签: xml xsd xsd-validation

是否可以指定标签或属性的值不应该像 some_value

我有一个奇怪的要求,xsd不知道发送给它的值。该特定标记的值可以是任何值的字符串,除了一个值(比如data_migration)。

如果发送了特定值,则应通过错误确认发件人。

是否可以指定此限制?

3 个答案:

答案 0 :(得分:2)

我不知道你是否可以专门排除一个值。我不确定这是否有帮助,但您可以创建两个单独的枚举,然后创建枚举的并集。

<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>

您可以根据需要使用IncludedEnumTypeCombinedEnumType。使用IncludedEnumType显然会排除ExcludedEnumType中的值。

此方法使用此article by IBM中的解决方案2。

答案 1 :(得分:2)

我不是正则表达式专家,但是这个simpleType使得以data_migration开头的所有内容都无效。

<xs:simpleType name="notDataMigration">
  <xs:restriction base="xs:string">
    <xs:pattern value="^(?!data_migration).*" />
  </xs:restriction>
</xs:simpleType>

答案 2 :(得分:1)

使用正则表达式指定模式,或者在您的情况下指定模式不应包含的内容。

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