Uruchomiłem jeden z moich plików xml przez generator schematów i wszystko, co zostało wygenerowane, było zgodne z oczekiwaniami, z wyjątkiem jednego węzła:
<xs:element name="office" type="xs:NCName"/>
Co to właściwie jest xs:NCName
? I po co by go raczej używać xs:string
?
xml
xsd
xml-namespaces
jasso
źródło
źródło
xs:NCName
@skyl praktycznie sprowokował mnie do napisania tej odpowiedzi, więc proszę pamiętać o redundancji.
NCName
oznacza „nazwę nieskolonizowaną”. NCName można zdefiniować jako wyrażenie regularne schematu XML[\i-[:]][\c-[:]]*
... i co oznacza to wyrażenie regularne?
\i
i\c
są wieloznakowymi znakami ucieczki zdefiniowanymi w definicji schematu XML.http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
jest ucieczką dla zestawu początkowych znaków nazwy XML i\c
jest zbiorem znaków nazwy XML.[\i-[:]]
oznacza zbiór składający się z zestawu z\i
wyłączeniem zestawu składającego się ze znaku dwukropka:
. Więc w prostym języku angielskim oznaczałoby to „dowolny znak początkowy, ale nie:
”. Całe wyrażenie regularne ma postać „Jeden początkowy znak nazwy XML, ale bez dwukropka, po którym następuje zero lub więcej znaków nazwy XML, ale nie dwukropek”.Praktyczne ograniczenia dotyczące NCName
Praktyczne ograniczenia NCName są takie, że nie może ona zawierać kilka znaków symboli, takich jak
:
,@
,$
,%
,&
,/
,+
,,
,;
, białych znaków lub inny nawias. Ponadto nazwa NCName nie może zaczynać się od cyfry, kropki ani znaku minus, chociaż mogą pojawić się później w NCName.Gdzie są potrzebne nazwy NCNames
W dokumentach XML zgodnych z przestrzenią nazw wszystkie nazwy muszą być nazwami kwalifikowanymi lub nazwami NCNames. Następujące wartości muszą być nazwami NCNames (nie nazwami kwalifikowanymi):
źródło
Praktycznie mówiąc ...
Dozwolone znaki:
-
,.
,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
Ponadto
-
i.
nie może być używany jako pierwszy znak wartości.Niedozwolone znaki:
,
!
,"
,#
,$
,%
,&
,'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
,\
,]
,^
,`
,{
,|
,}
,~
źródło
http://books.xmlschemata.org/relaxng/ch19-77215.html
Bez spacji i dwukropków. Zezwala na „_” i „-”.
Użyłbyś tego zamiast łańcucha, abyś mógł sprawdzić, czy wartość jest ograniczona do tego, co jest dozwolone. Dobrze odwzorowuje pewne konwencje nazwy / identyfikatora, jak na przykład koncepcja "slug" w django.
Głosuję za osobę, która
[\i-[:]][\c-[:]]*
tłumaczy dla nas na język angielski.źródło
[\i-[:]][\c-[:]]*
na angielski. Śmiało i zagłosuj, tak jak obiecałeś;)