Pergunta

Eu executei um dos meus arquivos XML através de um gerador de esquema e tudo gerado era o que era esperado, com exceção de um nó:

<xs:element name="office" type="xs:NCName"/>

O que exatamente é xs:NCName? E por que alguém o usaria, mas xs:string?

Foi útil?

Solução

Ncname é nome não colonizado, por exemplo, "nome". Comparado ao QNAME, que é o nome qualificado, por exemplo, "NS: Name". Se seus nomes não devem ser qualificados por diferentes namespaces, eles são NCNames.

XS: String não coloca restrições aos seus nomes, mas XS: NCName basicamente não é necessário ":" Para aparecer na string.

Outras dicas

@skyl praticamente me provocou para escrever esta resposta, então, por favor, lembre -se da redundância.

NCName significa "nome não colonizado". NCNAME pode ser definido como uma expressão regular de esquema XML [\i-[:]][\c-[:]]*

... E o que isso significa Regex?

\i e \c são escapadas de vários caracteres definidos na definição de esquema XML.
http://www.w3.org/tr/xmlschema-2/#dt-ccesn
\i é a fuga para o conjunto de caracteres iniciais de nome XML e \c é o conjunto de caracteres de nome XML. [\i-[:]] significa um conjunto que consiste no conjunto \i excluindo um conjunto que consiste no personagem do cólon :. Então, em inglês simples, significaria "qualquer caráter inicial, mas não :". Toda a expressão regular parece" um personagem inicial do nome XML, mas não um cólon, seguido por zero ou mais caracteres de nome XML, mas não um cólon ".

Restrições práticas de um ncname

As restrições práticas do NCName são que ele não pode conter vários caracteres de símbolos como :, @, $, %, &, /, +, ,, ;, Espaço em branco ou parênteses diferentes. Além disso, um NCName não pode começar com um número, ponto ou caráter menos, embora eles possam aparecer posteriormente em um NCName.

Onde são necessários ncnames

No espaço de nome, os documentos XML conformados, todos os nomes devem ser nomes qualificados ou ncnames. Os seguintes valores devem ser NCNames (não nomes qualificados):

  • Prefixos de espaço para nome
  • valores representando um id
  • valores representando um idref
  • valores representando uma notação
  • metas de instrução de processamento
  • nomes de entidades

Praticamente falando ...

Personagens 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

Também, - e . não pode ser usado como o primeiro caractere do valor.

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

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

Sem espaços ou colonos. Permite "_" e "-".

Você usaria isso em vez de string para poder validar que o valor é limitado ao que é permitido. Ele mapeia bem para certas convenções para nome/identificador, como o conceito de "slug" de Django, por exemplo.

Eu voo a pessoa que [\i-[:]][\c-[:]]* traduz para o inglês para nós.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top