是否可以指定標記或屬性的值應該不是 some_value?如何使用XSD排除XML文件中的枚舉值?
我有一個奇怪的要求,其中xsd不知道發送給它的值。該特定標記的值可以是具有任何值的字符串,除了一個值(比如data_migration
)。
如果發送了該特定值,應確認發件人有錯誤。
是否可以指定此限制?
是否可以指定標記或屬性的值應該不是 some_value?如何使用XSD排除XML文件中的枚舉值?
我有一個奇怪的要求,其中xsd不知道發送給它的值。該特定標記的值可以是具有任何值的字符串,除了一個值(比如data_migration
)。
如果發送了該特定值,應確認發件人有錯誤。
是否可以指定此限制?
我不是正則表達式專家,但是這個simpleType使得所有以data_migration
開頭的東西都無效。
<xs:simpleType name="notDataMigration">
<xs:restriction base="xs:string">
<xs:pattern value="^(?!data_migration).*" />
</xs:restriction>
</xs:simpleType>
使用正則表達式來指定一個模式,或者在你的情況下,模式不應該包含。
我不知道你是否能明確排除的值。我不確定這是否有幫助,但您可以創建兩個單獨的枚舉,然後創建枚舉的聯合。
<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
中的值。
此方法使用此article by IBM中的解決方案2。
有用,但在這種情況下不;)所以+1。 – 2010-03-24 14:32:10
你不能這樣做使用正則表達式。 – xcut 2010-03-24 14:19:47
請看上面由Jens Granlund選擇的答案,相反...... – Yaneeve 2010-03-24 14:49:00
我站在更正的位置,我不知道在模式方言中團體可能被否定。 – xcut 2010-03-24 15:04:44