XML命名空间如何工作

    

上面的示例显示了具有多个名称空间的XML文件的示例。 这些命名空间的目的是什么,最重要的是,即使没有Internet连接,它们也可以工作?

我认为以xsi:schemaLocation开头的第二位包含用于validationXML文档结构的XML模式文件。 如果我在不在网络上的计算机上运行使用此配置文件的应用程序,为什么这些仍然有效? URL是否以某种方式别名为JAR文件?

我们假设我们有这个XML文档。

    Your text here   182 cm 83 kg   

它包括HTML,其具有对HTML呈现器具有语义含义的body标记。 它还有另一个身体标签,其中包含有关特定人员的信息。 命名空间定义此标记的语义范围。 如果没有命名空间(如提供的示例中所示),解析器就无法区分它们,因为它们在语法上是相同的。

以下是同一文档的语义正确版本:

    Your text here   182 cm 83 kg   

因此,由于命名空间,我们不必担心具有不同含义的冲突标记。

命名空间URI本身从未实际解析,并且是任意的(因此您可以脱机使用它们)。

尽量忽略许多名称空间名称看起来像您可能在浏览器中键入的URL这一事实。 它们只是随机字符串,它们不是Web上的资源地址。 人们采用这种约定的原因是它显示了谁“拥有”这个名字 – 它更清楚http://www.w3.org/2001/XMLSchema所指的是比他们选择“xsd1.0”作为命名空间名称更清楚,并且不太可能与其他人选择的名称意外发生冲突。 有些人还喜欢将文档放在相关位置的事实,但没有XML软件会自动查找文档。

XML命名空间是元素名称的一个组件,您可以在编写xmlns:=""时绑定到前缀xmlns:="" 。 这有助于避免不同XML模式之间的命名冲突,因此您可以混合恰好具有相同名称的两个模式中的元素。 例如,您可能有两个模式都具有不同含义的link元素,名称空间前缀允许您通过写入foo:linkbar:link来区分它们。 命名空间通常采用URL的forms,但解析器只是将其视为字符串,它不会尝试从该URL获取任何内容。

你对第二部分, XSI:SchemaLocation元素是正确的。 请参阅此答案,了解为什么它仍然能够在没有网络连接的情况下validation架构。

命名空间通常是为了避免标记之间的冲突,但在场景后面它是针对某些模式的解析器的处理指令。 在浏览器中,您有不同的Document类型,严格的Xhtml等,浏览器在某处存储了这些模式,解析器引用了用于validation结构的模式。

在Spring中,一旦启用了特定模式,它就需要一个存在该模式的引用,这并不意味着URI模式没有意义。 类路径中将需要相关的.jar文件,以便解析器引用它。 org.springframework.context-4.1.jar。 如果您查看此jar文件,您将在org.springframework.context.config包中找到spring-context-2.5.xsd文件。 您定义: xmlns:context="http://www.springframework.org/schema/context"

 xsi:schemaLocation="http://www.springframework.org/schema/context/spring-context-2.5.xsd"> 

xmlns通过编辑器为您提供了使用预先配置的方法来编写来自xmlns:context ,并启用经validation的TAG,如:

   

在TURN中激活在bean类中检测的各种注释:@Required @Autowired,@ PostConstruct,@ PreDestroy和@Resource等。

因此实际上解析器在解析Bean时会找到意义。

非常需要该模式,并且必须至少下载您的IDE或应用程序将用于validation的ONCE,否则它将创建validationexception。 如果它在这些jar子中是本地可用的,那么它将不会寻找下载。