سؤال

قمت بتشغيل أحد ملفات XML الخاصة بي من خلال مولد مخطط وكل شيء تم إنشاؤه هو ما كان متوقعًا ، باستثناء عقدة واحدة:

<xs:element name="office" type="xs:NCName"/>

ما هو بالضبط xs:NCName؟ ولماذا يستخدمه المرء ، بل xs:string?

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

المحلول

ncname هو الاسم غير المستعمر على سبيل المثال "الاسم". بالمقارنة مع QName وهو الاسم المؤهل على سبيل المثال "ns: name". إذا لم يكن من المفترض أن تكون أسماءك مؤهلة بمساحات أسماء مختلفة ، فهي أسماء ncnames.

XS: لا تضع String أي قيود على أسماءك على الإطلاق ، ولكن XS: NCName لا يسيطر بشكل أساسي ":" أن تظهر في السلسلة.

نصائح أخرى

استفزني Skyl عمليا لكتابة هذه الإجابة ، لذا يرجى مراعاة التكرار.

NCName يقف على "الاسم غير المستعمر". يمكن تعريف NCName على أنه تعبير عادي مخطط XML [\i-[:]][\c-[:]]*

... وماذا يعني هذا regex؟

\i و \c هي هروب متعددة الحواس محددة في تعريف مخطط XML.
http://www.w3.org/tr/xmlschema-2/#dt-ccesn
\i هل الهروب لمجموعة من أحرف اسم XML الأولية و \c هي مجموعة أحرف اسم XML. [\i-[:]] يعني مجموعة تتكون من المجموعة \i باستثناء مجموعة تتكون من شخصية القولون :. لذلك في اللغة الإنجليزية البسيطة ، فإن ذلك يعني "أي شخصية أولية ، ولكن ليس :". يقرأ التعبير العادي بأكمله باسم" حرف اسم XML أولي واحد ، ولكن ليس قولون ، يليه أحرف اسم XML صفر أو أكثر ، ولكن ليس كولون. "

القيود العملية من ncname

القيود العملية لـ NCName هي أنه لا يمكن أن تحتوي على عدة أحرف رمز مثل :, @, $, %, &, /, +, ,, ;, ، أحرف المسافة البيضاء أو أقواس مختلفة. علاوة على ذلك ، لا يمكن أن يبدأ NCName برقم أو نقطة أو ناقص على الرغم من أنه يمكن أن يظهر لاحقًا في NCName.

أين هناك حاجة إلى اسم ncnames

في مستندات مساحة الأسماء XML ، يجب أن تكون جميع الأسماء إما أسماء مؤهلة أو أسماء ncnames. يجب أن تكون القيم التالية ncnames (وليس الأسماء المؤهلة):

  • بادئات مساحة الاسم
  • القيم التي تمثل معرف
  • القيم التي تمثل IDREF
  • القيم التي تمثل تدوين
  • أهداف تعليمات المعالجة
  • أسماء الكيانات

من الناحية العملية ...

الشخصيات المسموح بها: -, ., 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R, S, T, U, V, W, X, Y, Z, _, a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y, z

ايضا، - و . لا يمكن استخدامها كحرف أول للقيمة.

الشخصيات غير المسموح بها: , !, ", #, $, %, &, ', (, ), *, +, ,, /, :, ;, <, =, >, ?, @, [, \, ], ^, `, {, |, }, ~

http://books.xmlschemata.org/relaxng/ch19-77215.html

لا توجد مسافات أو كولونز. يسمح "_" و "-".

يمكنك استخدام هذا بدلاً من السلسلة بحيث يمكنك التحقق من صحة أن القيمة تقتصر على ما هو مسموح به. إنه يخطط جيدًا لبعض الاتفاقيات للاسم/المعرف مثل مفهوم Django لـ "Slug" ، على سبيل المثال.

أنا أرفع الشخص الذي [\i-[:]][\c-[:]]* يترجم إلى اللغة الإنجليزية بالنسبة لنا.

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