Comment exclure une valeur d'énumération dans le fichier XML à l'aide XSD?
-
22-09-2019 - |
Question
Est-il possible de spécifier la valeur d'une variable ou un attribut ne doit pas être comme some_value ?
J'ai une exigence étrange, où le xsd ne connaît pas les valeurs étant envoyée. La valeur de cette balise particulière peut être une chaîne avec une valeur sauf une valeur (par exemple data_migration
).
L'expéditeur doit reconnaître l'erreur, si cette valeur particulière est envoyée.
Est-il possible de préciser cette restriction?
La solution
Je ne suis pas expert en regex, mais ce simpleType fait tout en commençant par data_migration
non valide.
<xs:simpleType name="notDataMigration">
<xs:restriction base="xs:string">
<xs:pattern value="^(?!data_migration).*" />
</xs:restriction>
</xs:simpleType>
Autres conseils
Je ne sais pas si vous pouvez exclure spécifiquement une valeur. Je ne sais pas si cela aide, mais vous pouvez créer deux énumérations séparés, puis créer l'union des énumérations.
<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>
Vous utilisez soit IncludedEnumType
ou CombinedEnumType
si nécessaire. Utilisation de la IncludedEnumType
serait évidemment exclue les valeurs ExcludedEnumType
.
Cette approche utilise la solution 2 de cette par IBM .
Utilisez des expressions régulières pour spécifier un motif ou comme dans votre cas quel modèle ne doit pas contenir.