Executei um dos meus arquivos xml por meio de um gerador de esquema e tudo o que foi gerado foi o esperado, com exceção de um nó:
<xs:element name="office" type="xs:NCName"/>
O que exatamente é xs:NCName
? E por que alguém iria usá-lo xs:string
?
xml
xsd
xml-namespaces
jasso
fonte
fonte
xs:NCName
@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-[:]]*
... e o que essa regex significa?
\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."Restrições práticas de um NCName
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.Onde são necessários NCNames
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):
fonte
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:
,
!
,"
,#
,$
,%
,&
,'
,(
,)
,*
,+
,,
,/
,:
,;
,<
,=
,>
,?
,@
,[
,\
,]
,^
,`
,{
,|
,}
,~
fonte
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.fonte
[\i-[:]][\c-[:]]*
em inglês. Vá em frente e