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.
NCNamesignifica "nombre no colonizado". NCName se puede definir como una expresión regular de esquema XML[\i-[:]][\c-[:]]*... y ¿qué significa esa expresión regular?
\iy\cson escapes de varios caracteres definidos en la definición del esquema XML.http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\ies el escape para el conjunto de caracteres de nombre XML iniciales y\ces el conjunto de caracteres de nombre XML.[\i-[:]]significa un conjunto que consta del conjunto\iexcluyendo 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,zAdemá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ó;)