¿Qué es un tipo xs: NCName y cuándo debe usarse?


Corrí uno de mis archivos xml a través de un generador de esquemas y todo lo generado 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é se usaría, más bien xs:string?

Author: jasso, 2009-10-27

4 answers

NCName es un nombre no colonizado, por ejemplo, "nombre". En comparación con QName, que es un nombre calificado, por ejemplo, "ns: name". Si se supone que sus nombres no deben estar calificados por diferentes espacios de nombres, entonces son NCNames.

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

 78
Author: Andrey Adamovich,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-27 15:11:16

@skyl prácticamente me provocó a escribir esta respuesta, así que 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 varios caracteres definidos en la definición de 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 consiste en el conjunto \i excluyendo un conjunto que consiste en el carácter de dos puntos :. Así que en inglés sencillo 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 personajes como :, @, $, %, &, /, +, ,, ;, caracteres de espacios en blanco o diferentes entre paréntesis. Además, un NCName no puede comenzar con un número, punto o menos, aunque pueden aparecer más tarde en un NCName.

Dónde se necesitan NCNames

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

  • espacio de nombres prefijos
  • valores que representan un ID
  • valores que representan un IDREF
  • valores que representan una NOTACIÓN
  • objetivos de instrucción de procesamiento
  • nombres de entidades
 99
Author: jasso,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-28 01:00:05

Prácticamente hablando...

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 pueden usar como primer carácter del valor.

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

 23
Author: izilotti,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-06-05 20:17:12

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

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

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

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

 4
Author: Skylar Saveland,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-05-26 16:54:56