Por que precisamos de URIs para namespaces XML?


23

Estou tentando descobrir por que precisamos de URIs para namespaces XML e não consigo encontrar um objetivo para isso. Alguém pode me alegrar um pouco mostrando seu uso em um exemplo concreto?

EDITAR:

Ok, por exemplo: eu tenho isso do w3schools

<root
xmlns:h="http://www.w3.org/TR/html4/"
 xmlns:f="http://www.w3schools.com/furniture">

 <h:table>
   <h:tr>
     <h:td>Apples</h:td>
     <h:td>Bananas</h:td>
   </h:tr>
 </h:table>

 <f:table>
   <f:name>African Coffee Table</f:name>
   <f:width>80</f:width>
   <f:length>120</f:length>
 </f:table>

 </root>

Então, o que deve acontecer http://www.w3schools.com/furniture?



7
Comentário obrigatório do w3fools .
precisa

Então, os namespaces XML precisam estar no formato URI? Ou posso apenas usar qualquer string como 'My.Namespace.Foo'?
Mas

Respostas:


20

Um espaço para nome é uma maneira de dizer "Esse tipo de Foo" é diferente de "Esse tipo de Foo", mesmo que tenham a mesma grafia. Ou, se você preferir " MY type of Foo" é diferente de " Everybody elses type of Foo".

A maneira técnica de dizer isso é "O URI do meu namespace para Foo" é diferente de todo mundo que usa o URI para seu namespace para Foo. Em outras palavras, os URIs são apenas strings que permitem que você diga.

O truque é dizer "Ei, URLs são URIs válidos" e, em seguida, use um URI correspondente a um URL sob seu controle. Se todos fizerem isso, evite colisões acidentais no espaço para nome. Você também pode ter dito o namespace "A" e o namespace "B", mas corre o risco de que outra pessoa também use o mesmo namespace, e então seu tipo de Foo não é mais diferente do Foo deles, que é exatamente o que você deseja evitar .

Você pode adicionar uma convenção adicional aos URLs usados ​​como URIs, por exemplo, que o URL deve corresponder a uma página que contém documentação ou XSDs ou similares, mas isso não é necessário. É apenas conveniente.


Ok, mas qual é a diferença entre o espaço de nome A e o espaço de nome w3.org/1999/xhtml ? os dois podem ser usados ​​pelos usuários sem que eles saibam que usaram os mesmos namespaces.
Patryk

1
@ Patryk, é por isso que você usa um URL que você tem controle. O URL do espaço para nome xhtml está sob controle do W3C, que definiu a especificação XHTML.

2
@ Patryk, observe também que são os que definem o espaço para nome que escolhe a URL. Então todo mundo pode usá- los.

1
Então, o namespace aseria totalmente válido? Estúpido, mas válido? Ou precisa ser um URI?
Rudie

5
Não teria sido incrível se as primeiras pessoas a usar essa convenção anos atrás também tivessem colocado documentação bastante concisa de seus esquemas nesses URLs, para que isso se tornasse uma coisa? Os espaços para nome OpenXML da Microsoft, schemas.openxmlformats.org/drawingml/2006/chart, não apontam para nada.
prototype

16

Em termos gerais, qualquer identificador exclusivo serviria para um espaço para nome; mas como é suposto ser globalmente único , o padrão teria que exigir alguma autoridade de arbitragem ou usar outro recurso que seja ao mesmo tempo globalmente único, mas fácil de se manter e provar que é seu.

Veja! se você tem um domínio, é obviamente apenas o seu e é fácil provar que é seu!

Por exemplo, eles queriam evitar a situação em que duas livrarias diferentes começam a usar "books" como um espaço para nome, com definições internas totalmente diferentes. Enquanto eles o usam internamente, não há problema; mas assim que um deles deseja publicar suas especificações, o inferno se abre.

Em vez disso, se você for incentivado a usar seu domínio, qualquer pessoa (bem, qualquer pessoa que possua um domínio) pode definir seu próprio espaço de nome privado com a certeza de que ninguém mais usará exatamente o mesmo identificador.

Como um bônus, você pode opcionalmente armazenar a definição do seu espaço para nome no URI, tornando-o auto-documentável.

Parece uma ótima idéia para mim.


Obrigado pela resposta, mas eu precisaria de algo mais concreto para entender isso. Adicionei um código exemplar no qual você pode basear-se, por favor, dê uma olhada.
Patryk

1
@patryk - nada, não é um endereço - é apenas um token exclusivo que você tem certeza de que mais ninguém com quem você pode misturar arquivos xml possui. Tudo o que está dizendo é que os nomes <table> etc não serão usados ​​com significados diferentes em qualquer arquivo xml que tenha o nome www.w3.org no topo
Martin Beckett

Ok, mas quando a wikipedia diz algo que os usuários podem usar, por exemplo, w3.org/1999/xhtml como um espaço para nome, muitas pessoas têm o mesmo espaço para nome. Estou certo ?
Patryk

@ Patryk, apenas se você quiser usá-lo para o mesmo uso. Se você deseja definir um novo espaço para nome, é recomendável usar seu próprio domínio
Javier

@Javier O que você quer dizer com 'uso igual'?
Patryk

1

O DOM Nível 2 foi publicado no final de 2000. Ele introduziu a função "getElementById", além de um modelo de evento e suporte para namespaces XML e CSS.

O que xmlIns especifica?
Como nós de atributo denominados "xmlns" ou "xmlns: xxx", exatamente como os espaços para nome são gravados no documento XML de origem. Este é o modelo apresentado pelo DOM.

Qual URI contém?
Um espaço para nome XML é declarado usando o pseudo-atributo XML reservado xmlns ou xmlns: prefixo, cujo valor deve ser um nome de espaço para nome válido.

Por exemplo, a seguinte declaração mapeia o prefixo "xhtml:" para o espaço de nome XHTML:

xmlns: xhtml = "http://www.w3.org/1999/xhtml"

Como eu descobri depois de ler o artigo na Wikipedia. O URI contém as especificações formatadas em XML do espaço para nome e fornece um método para evitar conflitos de nome do elemento.

Pode ser que você saiba que o documento xml usa XML Schemaa estrutura do elemento / tabela / classe dos elementos do documento XML.

o que http://www.w3schools.com/furniture deve conter?

A resposta está na sua página onde você aprendeu sobre o Namespace XML. Verifique a Namespaces in Real Useseção deste artigo do W3Schools .

Verifique o seguinte link do stackoverflow, que mostra o que esse URI carrega:

Como criar e usar o espaço para nome XML?


-1

URI = nome ou identificador globalmente exclusivo do espaço para nome

Considere construir um banco de dados ou documento sobre o gerenciamento financeiro da logística da indústria de petróleo. Isso precisaria usar vocabulários específicos (isto é, termos controlados) para cada um dos assuntos: banco de dados, documento, gerenciamento, finanças, logística, petróleo e indústria.

Se nenhum dos termos se sobrepuser nesses sete vocabulários, será necessário apenas um URI. Mas, para cada termo que se sobrepõe a outros termos nesses vocabulários, você precisa de um vocabulário específico de um assunto adicional identificado em um URI ou IRI. Uma maneira de contornar isso é criar uma taxonomia mesclada, com termos gerais mais amplos e termos específicos de assuntos mais estreitos.

Isso poderia ser expandido para um dicionário de sinônimos que também mostra os sinônimos de jargão de um termo e permite a especificação de um termo preferido entre esses sinônimos de jargão.


2
é difícil ler este post (parede de texto). Você se importaria de editá -lo em uma forma melhor?
mosquito
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.