Vejo que temos vários URLs como valor desse atributo, como na primavera:
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:aop="http://www.springframework.org/schema/aop"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.springframework.org/schema/aop
http://www.springframework.org/schema/aop/spring-aop-2.0.xsd">
Por que é necessário e para que é usado? O Spring vai para o URL e valida? qual é a diferença entre xmlns e xsi: schemaLocation?
An
xmlns
é um identificador exclusivo no documento - ele não precisa ser um URI para o esquema:xsi:schemaLocation
deve dar uma dica sobre a localização real do esquema:fonte
De acordo com as especificações para localizar esquemas
(obrigado por ser inequívoco, spec!)
e
Então, basicamente, ao especificar apenas um espaço para nome, seu XML "pode" tentar ser validado com relação a um xsd nesse local (mesmo que não possua um
schemaLocation
atributo), dependendo da sua "comunidade". Se você especificar um específicoschemaLocation
, basicamente significa que o documento xml "deve" estar em conformidade com o xsd, portanto, "por favor valide-o" (como eu o li). Meu palpite é que se você não fizer umschemaLocation
ounoNamespaceSchemaLocation
atribui, ele simplesmente "não é validado" na maioria das vezes (com base nas outras respostas, parece que o java faz dessa maneira).Outra desvantagem aqui é que, tipicamente, com validação xsd em bibliotecas java [ex: arquivos xml de configuração da primavera], se seus arquivos XML especificarem um
schemaLocation
URL xsd específico em um arquivo XML, comoxsi:schemaLocation="http://somewhere http://somewhere/something.xsd"
normalmente em um dos seus frascos de dependência, ele conterá uma cópia de esse arquivo xsd, em sua seção de recursos, e o spring possui um recurso de "mapeamento" para tratar esse arquivo xsd como se fosse mapeado para o URLhttp://somewhere/something.xsd
(para que você nunca vá para a Web e faça o download do arquivo, ele existe apenas localmente). Consulte também https://stackoverflow.com/a/41225329/32453 para obter informações um pouco mais.fonte
Se você for a qualquer um desses locais, encontrará o que está definido nesses esquemas. Por exemplo, ele informa qual é o tipo de dados do valor das palavras-chave ini-method.
fonte