سؤال

أحاول تحديد قاعدة مخطط في XSD ، حيث تتراوح طولها عن 8 أحرف:

<PostedDate>42183296</PostedDate>

ويسمح أيضا ملء الفضاء:

<PostedDate>        </PostedDate>

الذي قادني إلى XSD:

<xs:simpleType name="DateFormat">
   <xs:restriction base="xs:string">
      <xs:length value="8" />            //exactly 8 characters long
</xs:simpleType>

لكن القيمة تستطيع كن فارغًا أيضًا (أي شخصيات صفر طويلة):

<PostedDate></PostedDate>
<PostedDate />

الذي قادني إلى المحاولة بسذاجة:

<xs:simpleType name="DateFormat">
   <xs:restriction base="xs:string">
      <xs:length value="8" />            //exactly 8 characters long
      <xs:length value="0" />            //exactly 0 characters long
</xs:simpleType>

أي بالطبع غير مسموح به.

كما هو الحال في كثير من الأحيان في XSD ، لا يمكن تمثيل معظم التنسيقات بسهولة باستخدام XSD ، لذلك اخترت تجربة قاعدة تعبير منتظمة:

.{8} | ""

الذي يحاول التحويل إلى XSD اكتب:

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value=".{8}|''" />
    </xs:restriction>
</xs:simpleType>

لكنها لم تنجح:

''20101111' is not facet-valid with respect to pattern '.{8}|''' for type 'DateFormat'

لقد حاولت أيضا

  • <xs:pattern value="[0-9]{8}|''" />
  • <xs:pattern value="([0-9]{8})|('')" />
  • <xs:pattern value="(\d{8})|('')" />

هل يمكن لأي شخص آخر من النمط الذي يحل المشكلة المطابقة أيضًا - بعض النمط المحدد - فارغ

علاوة: هل يمكن لأي شخص أن يشير إلى المكان وثائق XSD هذا يقول ذلك \d يطابق الأرقام؟ أو ما هي رموز الأنماط الخاصة الأخرى؟

هل كانت مفيدة؟

المحلول

قد أظن أن patters يجب أن تبدو \d{8}| هذا يعني "ثمانية أرقام أو لا شيء" ، ولكن ليس ثمانية أرقام أو اثنين من الاقتباس. لكن هذا لا يفسر ، لماذا 20101111 لا يتطابق. هل أنت متأكد من عدم وجود مساحات بيضاء أو رموز إضافية أخرى في قيمة العنصر؟
\d يقال إنه يتطابق مع الأرقام في القسم "F.1.1 فئة الأحرف يهرب"

نصائح أخرى

أنا أيضًا في نفس الموقف مثل السلسلة الفارغة مسموح بها وإلا فإنه يجب أن 6 أرقام طول. في النهاية استخدمت مثل ما يلي. هذا يعمل بالنسبة لي

<xs:simpleType name="DateFormat">
    <xs:restriction base="xs:string">
        <xs:pattern value="|[0-9]{8}" />
    </xs:restriction>
</xs:simpleType>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top