ฉันรันไฟล์ xml ของฉันผ่านตัวสร้างสคีมาและทุกอย่างที่สร้างขึ้นเป็นสิ่งที่คาดหวังยกเว้นโหนดเดียว:
<xs:element name="office" type="xs:NCName"/>
คืออะไรกันแน่xs:NCName
? แล้วทำไมถึงใช้มันxs:string
ล่ะ?
ฉันรันไฟล์ xml ของฉันผ่านตัวสร้างสคีมาและทุกอย่างที่สร้างขึ้นเป็นสิ่งที่คาดหวังยกเว้นโหนดเดียว:
<xs:element name="office" type="xs:NCName"/>
คืออะไรกันแน่xs:NCName
? แล้วทำไมถึงใช้มันxs:string
ล่ะ?
คำตอบ:
NCNameไม่ใช่ชื่ออาณานิคมเช่น "ชื่อ" เมื่อเทียบกับ QName ซึ่งเป็นชื่อที่มีคุณสมบัติเช่น "ns: name" หากชื่อของคุณไม่ควรผ่านการรับรองจากเนมสเปซที่แตกต่างกันแสดงว่าชื่อนั้นเป็น NCNames
xs: string ไม่มีข้อ จำกัด ใด ๆ กับชื่อของคุณเลย แต่ xs: NCName โดยทั่วไปไม่อนุญาตให้ ":" ปรากฏในสตริง
@skyl กระตุ้นให้ฉันเขียนคำตอบนี้ดังนั้นโปรดคำนึงถึงความซ้ำซ้อน
NCName
ย่อมาจาก "non-colonized name" NCName สามารถกำหนดให้เป็นนิพจน์ทั่วไปของ XML Schema[\i-[:]][\c-[:]]*
\i
และ\c
เป็นค่า Escape แบบหลายอักขระที่กำหนดไว้ในข้อกำหนด XML Schema
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
คือ Escape สำหรับชุดของอักขระชื่อ XML เริ่มต้นและ\c
เป็นชุดของอักขระชื่อ XML [\i-[:]]
หมายถึงชุดที่ประกอบด้วยชุดที่ไม่รวมชุดที่ประกอบด้วยตัวอักษรลำไส้ใหญ่\i
:
ดังนั้นในภาษาอังกฤษธรรมดาจะหมายถึง "อักขระเริ่มต้นใด ๆ แต่ไม่ใช่:
" นิพจน์ทั่วไปทั้งหมดอ่านว่า "อักขระชื่อ XML เริ่มต้นหนึ่งตัว แต่ไม่ใช่เครื่องหมายโคลอนตามด้วยอักขระชื่อ XML ที่เป็นศูนย์หรือมากกว่า แต่ไม่ใช่เครื่องหมายโคลอน"
ข้อ จำกัด ในทางปฏิบัติของ NCName ที่ว่ามันไม่สามารถมีตัวอักษรสัญลักษณ์หลายชอบ:
, @
, $
, %
, &
, /
, +
, ,
, ;
, ช่องว่างอักขระหรือวงเล็บที่แตกต่างกัน นอกจากนี้ NCName ไม่สามารถขึ้นต้นด้วยตัวเลขจุดหรืออักขระลบแม้ว่าจะปรากฏใน NCName ในภายหลัง
ในเอกสาร XML ที่สอดคล้องกับเนมสเปซชื่อทั้งหมดต้องเป็นชื่อที่มีคุณสมบัติหรือ NCNames ค่าต่อไปนี้ต้องเป็น NCNames (ไม่ใช่ชื่อที่ผ่านการรับรอง):
จวนจะพูด ...
ตัวละครที่ได้รับอนุญาต: -
, .
, 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-[:]]*
แปลเป็นภาษาอังกฤษให้เรา
[\i-[:]][\c-[:]]*
เป็นภาษาอังกฤษ ไปข้างหน้าและโหวตเพิ่มตามที่คุณสัญญาไว้;)
xs:NCName