كيفية استبعاد قيمة التعداد في ملف XML باستخدام XSD؟

StackOverflow https://stackoverflow.com/questions/2507806

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

استخدم تعبيرات منتظمة لتحديد نمط أو كما في حالتك ما لا ينبغي أن يحتويه النمط.

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

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top