J'ai exécuté l'un de mes fichiers xml via un générateur de schéma et tout ce qui était généré était ce qui était attendu, à l'exception d'un nœud:
<xs:element name="office" type="xs:NCName"/>
Qu'est-ce que c'est exactement xs:NCName
? Et pourquoi l'utiliserait-il plutôt xs:string
?
xml
xsd
xml-namespaces
Jasso
la source
la source
xs:NCName
@skyl m'a pratiquement incité à écrire cette réponse, alors faites attention à la redondance.
NCName
signifie "nom non colonisé". NCName peut être défini comme une expression régulière de schéma XML[\i-[:]][\c-[:]]*
... et que signifie cette expression régulière?
\i
et\c
sont des échappements multi-caractères définis dans la définition de schéma XML.http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
est l'échappement de l'ensemble des caractères du nom XML initial et\c
est l'ensemble des caractères du nom XML.[\i-[:]]
désigne un ensemble composé de l'ensemble à l'\i
exclusion d'un ensemble composé du caractère deux-points:
. Donc, en anglais simple, cela signifierait "n'importe quel caractère initial, mais pas:
". L'expression régulière entière se lit comme suit: «Un caractère de nom XML initial, mais pas de deux-points, suivi de zéro ou plusieurs caractères de nom XML, mais pas de deux-points».Restrictions pratiques d'un NCName
Les restrictions pratiques de NCName sont qu'il ne peut pas contenir plusieurs caractères de symboles tels que
:
,@
,$
,%
,&
,/
,+
,,
,;
, les espaces ou caractères différents entre parenthèses. De plus, un NCName ne peut pas commencer par un nombre, un point ou un signe moins bien qu'ils puissent apparaître plus tard dans un NCName.Où sont nécessaires NCNames
Dans les documents XML conformes aux espaces de noms, tous les noms doivent être des noms qualifiés ou des NCNames. Les valeurs suivantes doivent être NCNames (noms non qualifiés):
la source
Pratiquement parlant...
Caractères autorisés:
-
,.
,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
En outre,
-
et.
ne peut pas être utilisé comme premier caractère de la valeur.Les caractères non admis:
,
!
,"
,#
,$
,%
,&
,'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
,\
,]
,^
,`
,{
,|
,}
,~
la source
http://books.xmlschemata.org/relaxng/ch19-77215.html
Pas d'espaces ni de deux-points. Autorise "_" et "-".
Vous utiliseriez ceci au lieu de string afin de pouvoir valider que la valeur est limitée à ce qui est autorisé. Il correspond bien à certaines conventions pour le nom / identifiant comme le concept de django de "slug", par exemple.
J'apprécie la personne qui
[\i-[:]][\c-[:]]*
traduit en anglais pour nous.la source
[\i-[:]][\c-[:]]*
en anglais. Allez-y et votez, comme vous l'avez promis;)