كيفية استبعاد قيمة التعداد في ملف XML باستخدام XSD؟
-
22-09-2019 - |
سؤال
هل من الممكن تحديد قيمة العلامة أو السمة لا ينبغي أن يكون مثل some_value ?
لدي متطلبات غريب ، حيث لا يدرك XSD القيم التي يتم إرسالها إليها. يمكن أن تكون قيمة تلك العلامة بالذات سلسلة مع أي قيمة باستثناء قيمة واحدة ( قل data_migration
).
يجب الاعتراف بالمرسل بالخطأ ، إذا تم إرسال هذه القيمة المحددة.
هل من الممكن تحديد هذا التقييد؟
المحلول
أنا لست خبيرًا في regex ، لكن هذا 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
.
يستخدم هذا النهج الحل 2 من هذا مقال من قبل IBM.
استخدم تعبيرات منتظمة لتحديد نمط أو كما في حالتك ما لا ينبغي أن يحتويه النمط.