Ejecuté uno de mis archivos xml a través de un generador de esquemas y todo lo que se generó fue lo que se esperaba, con la excepción de un nodo:
<xs:element name="office" type="xs:NCName"/>
¿Qué es exactamente xs:NCName
? ¿Y por qué lo usaría uno, más bien xs:string
?
xml
xsd
xml-namespaces
Jasso
fuente
fuente
xs:NCName
@skyl prácticamente me provocó a escribir esta respuesta, así que ten cuidado con la redundancia.
NCName
significa "nombre no colonizado". NCName se puede definir como una expresión regular de esquema XML[\i-[:]][\c-[:]]*
... y ¿qué significa esa expresión regular?
\i
y\c
son escapes de varios caracteres definidos en la definición del esquema XML.http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
es el escape para el conjunto de caracteres de nombre XML iniciales y\c
es el conjunto de caracteres de nombre XML.[\i-[:]]
significa un conjunto que consta del conjunto\i
excluyendo un conjunto que consta del carácter de dos puntos:
. Entonces, en inglés simple significaría "cualquier carácter inicial, pero no:
". La expresión regular completa se lee como "Un carácter de nombre XML inicial, pero no dos puntos, seguido de cero o más caracteres de nombre XML, pero no dos puntos".Restricciones prácticas de un NCName
Las restricciones prácticas de NCName son que no puede contener varios caracteres de símbolos como
:
,@
,$
,%
,&
,/
,+
,,
,;
, espacio en blanco o caracteres diferentes entre paréntesis. Además, un NCName no puede comenzar con un número, un punto o un carácter menos, aunque pueden aparecer más tarde en un NCName.¿Dónde se necesitan NCNames?
En documentos XML compatibles con el espacio de nombres, todos los nombres deben ser nombres calificados o NCNames. Los siguientes valores deben ser NCNames (no nombres calificados):
fuente
Hablando practicamente...
Los caracteres permitidos:
-
,.
,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
Además,
-
y.
no se puede utilizar como primer carácter del valor.Caracteres no permitidos:
,
!
,"
,#
,$
,%
,&
,'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
,\
,]
,^
,`
,{
,|
,}
,~
fuente
http://books.xmlschemata.org/relaxng/ch19-77215.html
Sin espacios ni dos puntos. Permite "_" y "-".
Usaría esto en lugar de una cadena para poder validar que el valor está limitado a lo permitido. Se asigna bien a ciertas convenciones para el nombre / identificador como el concepto de "slug" de django, por ejemplo.
Voto a la persona que
[\i-[:]][\c-[:]]*
traduce al inglés para nosotros.fuente
[\i-[:]][\c-[:]]*
al inglés. Continúe y vote, como prometió;)