xmlns simple namespace ejemplo attribute xml xsd xml-namespaces

xml - simple - xsd schema



¿Qué es un tipo xs: NCName y cuándo debería usarse? (4)

Ejecuté uno de mis archivos xml a través de un generador de esquemas y todo lo que 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é uno lo usaría, en lugar de xs:string ?


@skyl prácticamente me provocó a escribir esta respuesta, por favor, tenga en cuenta 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 múltiples 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 inicial y /c es el conjunto de caracteres de nombre XML. [/i-[:]] significa un conjunto que consiste en el conjunto /i excluyendo un conjunto que consta del carácter de dos puntos : Así que en inglés simple significaría "cualquier carácter inicial, pero no : ". Toda la expresión regular 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 símbolos como : @ , $ , % , & , / , + ; , espacios en blanco o diferentes paréntesis. Además, un NCName no puede comenzar con un número, punto o carácter negativo, aunque pueden aparecer más adelante en un NCName.

Dónde se necesitan NCNames

En documentos XML conformes con el espacio de nombres, todos los nombres deben ser nombres calificados o NCNames. Los siguientes valores deben ser NCNames (nombres no calificados):

  • prefijos del espacio de nombres
  • valores que representan una identificación
  • valores que representan un IDREF
  • valores que representan una NOTACIÓN
  • objetivos de instrucción de procesamiento
  • nombres de entidades

Hablando practicamente...

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 usar como el primer caracter del valor.

Caracteres no permitidos: , ! , " , # , $ , % , & , '' , ( , ) , * , + / , : , ; , < , = , > , ? , @ , [ , / , ] , ^ , ` , { , | , } , ~


http://books.xmlschemata.org/relaxng/ch19-77215.html

Sin espacios ni dos puntos Permite "_" y "-".

Debería usar esto en lugar de cadena para que pueda validar que el valor está limitado a lo permitido. Se correlaciona bien con ciertas convenciones de nombre / identificador como el concepto de django de "slug", por ejemplo.

Renuncié a la persona que [/i-[:]][/c-[:]]* traduce al inglés para nosotros.


NCName es un nombre no colonizado, por ejemplo, "nombre". Comparado con QName, que es nombre calificado, por ejemplo, "ns: nombre". Si se supone que sus nombres no están calificados por espacios de nombres diferentes, entonces son NCNames.

xs: string no pone restricciones en absoluto a sus nombres, pero xs: NCName básicamente no permite que ":" aparezca en la cadena.