it-swarm.dev

xmlns, xmlns: xsi, xsi: schemaLocation e targetNamespace?

Para o seguinte fragmento XML:

_<project xmlns="http://maven.Apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.Apache.org/POM/4.0.0 
                             http://maven.Apache.org/xsd/maven-4.0.0.xsd">
_

O que os atributos xmlns, _xmlns:xsi_ e _xsi:schemaLocation_ significam exatamente? Como eles estão relacionados? Para que serve _:_?

E existem 2 URLs no _xsi:schemaLocation=_

  1. http://maven.Apache.org/POM/4.0. (acontece o mesmo que xmlns, mas gera um erro 404 ao visitá-lo.)
  2. http://maven.Apache.org/xsd/maven-4.0.0.xsd (este é um documento XSD real)

Se 1 não existe, por que ainda colocá-lo lá?

40
smwikipedia

Atributos relacionados ao espaço para nome no XML e XML Schema (XSD)

  • xmlns faz parte do Namespaces W3C na Recomendação XML :

    O prefixo xmlns é usado apenas para declarar ligações de namespace e, por definição, é associado ao nome do namespace http://www.w3.org/2000/xmlns / .

    No seu exemplo , ele declara que _http://maven.Apache.org/POM/4.0.0_ é o espaço para nome padrão dos elementos no seu projeto Maven.

  • xmlns:xsi declara um prefixo de espaço para nome padrão (xsi) para um espaço para nome principal usado no XSD: _http://www.w3.org/2001/XMLSchema-instance_

    Esquema XML: Estruturas também define vários atributos para uso direto em qualquer documento XML. Esses atributos estão em um espaço para nome diferente, que possui o nome do espaço para nome http://www.w3.org/2001/XMLSchema-instance . Por uma questão de brevidade, o texto e os exemplos nesta especificação usam o prefixo xsi: para representar este último espaço para nome; na prática, qualquer prefixo pode ser usado.

    No seu exemplo , ele declara a ligação convencional do prefixo do espaço para nome xsi como _http://www.w3.org/2001/XMLSchema-instance_, que configura corretamente o uso dos seguintes atributos:

    • xsi:type permite que uma instância XML associe informações de tipo de elemento diretamente, e não através de um XSD. Consulte Como restringir o valor de um elemento XML usando xsi: digite XSD?

      No seu exemplo , _xsi:type_ não é usado; incluído aqui para obter detalhes sobre xsi.

    • xsi:nil permite que um elemento vazio seja considerado válido quando o XSD não o permitiria.

      No seu exemplo , _xsi:nil_ não é usado; incluído aqui para obter detalhes sobre xsi.

    • xsi:schemaLocation e xsi:noNamespaceSchemaLocation fornece dicas ao processador XML sobre como associar um XSD a um documento XML. Use _xsi:schemaLocation_ quando houver um espaço para nome; use _xsi:noNamespaceSchemaLocation_ quando não houver espaço para nome.

      No seu exemplo , há um espaço para nome; portanto, você usa corretamente _xsi:schemaLocation_, cujos valores são separados por espaço pares de namespace e URI da localização XSD . Seu exemplo usa o espaço para nome, _http://maven.Apache.org/POM/4.0.0_, e os espaços para nome são construções de nomes lexicais que não precisam ser recuperáveis. Seu exemplo também usa o XSD-location-URI, _http://maven.Apache.org/xsd/maven-4.0.0.xsd_, que é recuperável como deveria ser.

      Se o seu exemplo não usasse um espaço para nome, você usaria _xsi:noNamespaceSchemaLocation_, cujo valor é único XSD-location-URI que indica a localização do XSD pretendido e que deve ser recuperável.

  • targetNamespace é um atributo no elemento raiz _xs:schema_ de um XSD que especifica o espaço para nome do elemento raiz de as instâncias de documento XML que o XSD deve governar. Ele deve corresponder ao namespace padrão ou explícito dos elementos raiz desses documentos XML.

52
kjhughes

xmlns define o namespace padrão, que afirma que todos os nós no nó do projeto e sem um alias de namespace estarão no namespace http://maven.Apache.org/POM/4.0.0 por padrão.

xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" define o espaço para nome - http://www.w3.org/2001/XMLSchema-instance e fornece um novo alias - xsi

xsi:schemaLocation é um atributo schemaLocation do "http://www.w3.org/2001/XMLSchema-instance" namespace. Ele contém pares de valores - URI do namespace e link de localização do esquema para o arquivo xsd-schema desse namespace. Ele pode conter muitos pares de valores - um arquivo xsd para cada URI de namespace definido. Isso significa que o link http://maven.Apache.org/xsd/maven-4.0.0.xsd contém o esquema xsd com a definição do espaço de nomes http://maven.Apache.org/POM/4.0.0.

7
Nodonutsforyou