Respostas:
NCName é um nome não colonizado, por exemplo, "nome". Comparado com QName, que é um nome qualificado, por exemplo, "ns: nome". Se seus nomes não devem ser qualificados por namespaces diferentes, eles são NCNames.
xs: string não impõe nenhuma restrição aos seus nomes, mas xs: NCName basicamente não permite que ":" apareça na string.
@skyl praticamente me provocou a escrever esta resposta, por favor, tome cuidado com a redundância.
NCName
significa "nome não colonizado". NCName pode ser definido como uma expressão regular do Esquema XML[\i-[:]][\c-[:]]*
\i
e \c
são escapes de vários caracteres definidos na definição do esquema XML.
http://www.w3.org/TR/xmlschema-2/#dt-ccesN
\i
é o escape para o conjunto de caracteres de nome XML iniciais e \c
é o conjunto de caracteres de nome XML. [\i-[:]]
significa um conjunto que consiste no conjunto, \i
excluindo um conjunto que consiste no caractere de dois pontos :
. Portanto, em inglês simples, significaria "qualquer caractere inicial, mas não :
". Toda a expressão regular é lida como "Um caractere de nome XML inicial, mas não dois pontos, seguido por zero ou mais caracteres de nome XML, mas não dois pontos."
As restrições práticas de NCName são de que ele não pode conter vários caracteres de símbolos, como :
, @
, $
, %
, &
, /
, +
, ,
, ;
, espaço em branco caracteres ou parêntese diferente. Além disso, um NCName não pode começar com um número, ponto ou caractere menos, embora possam aparecer mais tarde em um NCName.
Em documentos XML compatíveis com namespace, todos os nomes devem ser nomes qualificados ou NCNames. Os seguintes valores devem ser NCNames (nomes não qualificados):
Praticamente falando ...
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
Além disso, -
e .
não pode ser usado como o primeiro caractere do valor.
Caracteres não permitidos: ,
!
, "
, #
, $
, %
, &
, '
, (
, )
, *
, +
, ,
, /
, :
, ;
, <
, =
, >
, ?
, @
, [
, \
, ]
, ^
, `
, {
, |
, }
,~
http://books.xmlschemata.org/relaxng/ch19-77215.html
Sem espaços ou dois pontos. Permite "_" e "-".
Você deve usar isso em vez da string para que possa validar se o valor está limitado ao que é permitido. Ele mapeia bem para certas convenções de nome / identificador como o conceito de "slug" do django, por exemplo.
Eu voto a favor da pessoa que [\i-[:]][\c-[:]]*
traduz para o inglês para nós.
[\i-[:]][\c-[:]]*
em inglês. Vá em frente e
xs:NCName