需要XML中的命名空间

Kra*_*ken 3 xml xslt namespaces

我理解在XML中,如果我对两个不同的标签有相同的tagName,那么为了将它们中的两个分开,我们在它之前加上命名空间以使其唯一.但是当我们说时,在顶部

<rootElement xmlns:myNameSpace="http://www.myNameSpace.com">
Run Code Online (Sandbox Code Playgroud)

现在,为什么我们有这个http://www.myNameSpace.com?除了它将是独一无二的事实之外,它的用途是什么.

此外,我正在阅读有关xslt的内容,因为它也是一个XML,所以它将命名空间定义为

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
Run Code Online (Sandbox Code Playgroud)

现在,首先,这个链接究竟是什么告诉我的,它如何帮助xml渲染?那么除了独特之外,它还能提供什么吗?为什么要达到这样的程度呢?如果在XML中,我在两个标签之间存在冲突,我可以使用任意两个名称空间,比如namespace1和namespace2并使用它.

这里有什么我想念的吗?

Mat*_*ler 6

通常,除了唯一标识与其关联的元素之外,XML命名空间不起任何作用.

换句话说,字符串" http://www.myNameSpace.com "如下:

<rootElement xmlns:myNameSpace="http://www.myNameSpace.com">
Run Code Online (Sandbox Code Playgroud)

纯粹是武断的.它没有必要指向任何地方.此外,所谓的前缀(在这种情况下myNameSpace,"xmlns:"之后的部分)是任意的,只是说" http://www.myNameSpace.com " 的简写方式.

话虽如此,保留一些:

1)命名空间可以帮助在大文件中构建XML数据,例如OpenXML格式的Microsoft Word文档:

这是典型OOXML中存在的命名空间的摘录:

xmlns:aml="http://schemas.microsoft.com/aml/2001/core"
xmlns:wpc="http://schemas.microsoft.com/office/word/2010/wordprocessingCanvas"
xmlns:dt="uuid:C2F41010-65B3-11d1-A29F-00AA00C14882"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
Run Code Online (Sandbox Code Playgroud)

因此,尽管没有固有的理由可以使用单独的命名空间,但它有助于将XML词汇表划分为有意义的类别.

2)正如你所注意到的那样,对任意定义命名空间有一些限制:

xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
Run Code Online (Sandbox Code Playgroud)

这将元素标识为属于XSLT名称空间.但是,除此之外,它意味着这样标记的元素由XSLT处理器识别为不仅仅是XML代码,而是要执行的XSLT指令.

链接" http://www.w3.org/1999/XSL/Transform "指向XSLT规范,其中规定了转换XML文档的规则.现在,回答您的问题:声明命名空间无助于转换.相反,如果省略XSLT处理器,则XSLT处理器无法识别XSLT代码.

可以定义命名空间"namespaceA"和"namespaceB":

xmlns:nsA="namespaceA"
xmlns:nsB="namespaceB"
Run Code Online (Sandbox Code Playgroud)

但是你不能用它们来转换XML,除非你只是想改变前缀:

xmlns:nsA="http://www.w3.org/1999/XSL/Transform"
Run Code Online (Sandbox Code Playgroud)

这被认为是不好的做法.

  • 一点都不."http://www.w3.org/1999/XSL/Transform"带您进入网页纯属巧合.不从网上检索规则.相反,它们是在您的XSLT处理器(例如Saxon)中实现的. (2认同)