ฉันรันไฟล์ 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