目标名称空间和xmlns [英] targetNamespace and xmlns

查看:0
本文介绍了目标名称空间和xmlns的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

页面w3schools给出 以下是模式声明的一种形式。

<?xml version="1.0"?>

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           targetNamespace="http://www.w3schools.com"
           xmlns="http://www.w3schools.com"
           elementFormDefault="qualified">
...
...
</xs:schema>

这里

Target Namespace定义要创建的XML文档的命名空间 已定义--哪些标记(元素)和哪些属性可以在"This"XSD中定义的XML文档中使用。

xmlns=http://www.w3schools.com/schema/schema_schema.asp
另一方面,为XML文档中的名称定义默认名称空间 --那些没有被定义的名字 关于"This"XSD(?)因此,解析器首先查找Target Namesspace中声明的名称空间。如果在其中找不到该名称,请继续并尝试下一步xmlns(?)

如果我跳过上面架构声明中的Target Namesspace属性,我到底会错过什么?虽然我有xmlns,但目标名称空间对我来说是多余的,因为它们引用相同的名称空间。

什么 我错过了吗?

注意:我在其他一些讨论中看到了What does "xmlns" in XML mean?

推荐答案

若要了解targetNamespacexmlns之间的区别,只需考虑以下几点。

XSD是一种描述XML架构的语言。 任何计算机语言都必须以某种方式表达,即有一些运算符、关键字等。所有这些都被称为语法。

XSD(即W3C)的作者已决定不再发明另一种语法, 而是使用XML本身来实现这一点。因此,XSD是用XML表示的。xml载体

本质上,这是一种巧合。为了方便起见,XSD作者选择了它 (这种便利确实存在!) 但是,这并不是一个必要的要求。例如,还有另一种名为RELAX NG的XML架构语言,它不是基于XML的。

但是,一旦XML成为所有XSD文本的载体,您就必须处理特定于XML的事情,xmlns就是其中之一。基本上,它为给定的XML文件的元素分配默认名称空间。它与恰好在该文件中描述的XML模式无关。这只是XML文件约定(无论它包含什么内容)。

相反,targetNamespace是XSD语言本身的东西。 它指定架构描述的XML元素将属于哪个命名空间。

targetNamespacexmlns之间确实存在一些冗余。 但没有办法使用(利用)它,从而消除其中的一种。试想一下:

XML解析器将解析XML并将其转换为其他内容(例如XML信息集)。这样的解析器不需要了解任何关于XSD的知识,它的输出也不是XML。因此,所有特定于XML的内容都将丢失(即xmlns、名称空间前缀等)。

然后,该信息集(或其他内容)被传递给XSD处理程序,XSD处理程序从头开始,它必须手头有所有必要的信息。因此,targetNamespace将是唯一能告诉它有关该XML架构的目标命名空间的信息!

这篇关于目标名称空间和xmlns的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆