2010-03-24 4 views
3

Можно ли указать значение тега или атрибута не должно быть some_value?Как исключить значение перечисления в файле XML с помощью XSD?

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

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

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

ответ

2

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

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

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

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

+0

Вы не можете сделать это, используя регулярное выражение. – xcut

+0

Пожалуйста, посмотрите на выбранный выше ответ Йенсом Гранлундом, напротив ... – Yaneeve

+0

Я стою исправлен, я не знал, что группы могут быть сведены на нет на диалекте схемы. – xcut

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> 

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

В этом подходе используется решение 2 из этого article by IBM.

+0

полезный, но не в этом случае;) так +1. –

Смежные вопросы