De acordo com as especificações para localizar esquemas
pode ou não haver um esquema recuperável por meio do nome do espaço para nome ... A comunidade de usuários e / ou os contratos de consumidor / provedor podem estabelecer circunstâncias nas quais [tentar recuperar um xsd do URL do espaço para nome] é uma estratégia padrão sensata
(obrigado por ser inequívoco, spec!)
e
caso um autor do documento (humano ou não) tenha criado um documento com um esquema específico em vista e garanta que parte ou todo o documento esteja em conformidade com esse esquema, são fornecidos os atributos schemaLocation e noNamespaceSchemaLocation [attribute].
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ífico schemaLocation
, 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 um schemaLocation
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, como xsi: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 URL http://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.