¿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
?
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.
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
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: ,
!
, "
, #
, $
, %
, &
, '
, (
, )
, *
, +
, ,
, /
, :
, ;
, <
, =
, >
, ?
, @
, [
, \
, ]
, ^
, `
, {
, |
, }
, ~
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.
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