ما هو نوع XS: NCName ومتى يجب استخدامه؟
-
06-07-2019 - |
سؤال
قمت بتشغيل أحد ملفات 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-[:]]*
يترجم إلى اللغة الإنجليزية بالنسبة لنا.