Saya menjalankan salah satu file xml saya melalui generator skema dan semua yang dihasilkan seperti yang diharapkan, dengan pengecualian satu node:
<xs:element name="office" type="xs:NCName"/>
Apa sebenarnya itu xs:NCName
? Dan mengapa seseorang menggunakannya xs:string
?
xml
xsd
xml-namespaces
jasso
sumber
sumber
xs:NCName
@skyl secara praktis memprovokasi saya untuk menulis jawaban ini jadi mohon perhatian redundansi.
NCName
singkatan dari "nama yang tidak dijajah". NCName dapat didefinisikan sebagai ekspresi reguler Skema XML[\i-[:]][\c-[:]]*
... dan apa artinya regex itu?
\i
dan\c
pelarian multi-karakter yang ditentukan dalam definisi Skema XML.http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
adalah pelarian untuk kumpulan karakter nama XML awal dan\c
merupakan kumpulan karakter nama XML.[\i-[:]]
Berarti himpunan yang terdiri dari himpunan\i
tidak termasuk himpunan yang terdiri dari karakter titik dua:
. Jadi dalam bahasa Inggris sederhana itu berarti "karakter awal apa pun, tetapi tidak:
". Seluruh ekspresi reguler terbaca sebagai "Satu karakter nama awal XML, tetapi bukan titik dua, diikuti oleh nol atau beberapa karakter nama XML, tetapi bukan titik dua".Pembatasan praktis dari NCName
Pembatasan praktis NCName adalah bahwa hal itu tidak dapat berisi beberapa karakter simbol seperti
:
,@
,$
,%
,&
,/
,+
,,
,;
, spasi karakter atau kurung yang berbeda. Selain itu, NCName tidak dapat dimulai dengan angka, titik, atau karakter minus meskipun bisa muncul nanti dalam NCName.Di mana NCNames dibutuhkan
Dalam dokumen XML yang sesuai dengan namespace, semua nama harus nama yang memenuhi syarat atau NCNames. Nilai berikut harus NCNames (bukan nama yang memenuhi syarat):
sumber
Secara praktis ...
Karakter yang diizinkan:
-
,.
,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
Juga,
-
dan.
tidak dapat digunakan sebagai karakter pertama dari nilai.Karakter dianulir:
,
!
,"
,#
,$
,%
,&
,'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
,\
,]
,^
,`
,{
,|
,}
,~
sumber
http://books.xmlschemata.org/relaxng/ch19-77215.html
Tidak ada spasi atau titik dua. Mengizinkan "_" dan "-".
Anda akan menggunakan ini sebagai pengganti string sehingga Anda dapat memvalidasi bahwa nilainya terbatas pada apa yang diizinkan. Ia memetakan dengan baik ke konvensi tertentu untuk nama / pengenal seperti konsep django tentang "slug", misalnya.
Saya memberi suara positif pada orang yang
[\i-[:]][\c-[:]]*
menerjemahkan ke dalam bahasa Inggris untuk kami.sumber
[\i-[:]][\c-[:]]*
ke dalam bahasa Inggris. Silakan dan upvote, seperti yang Anda janjikan;)