我看到了各种情况,其中XML文件中的元素以x:或其他内容为前缀。
这是为了什么目的?
另外,xml的“命名空间”是什么意思? (通常是一些URL)?它是如何以任何方式使用的?
答案 0 :(得分:6)
“x:”是名为x的命名空间别名。在该元素之上的某个地方会有一个xmlns:x属性指向某个url,url通常不重要,它只是命名空间的标识符。
“x”只是文件的本地名称,它也可以是xmlns:foo,只要foo:在任何地方都使用x:被使用。
xml处理器通常使用命名空间来确保它们正在寻找正确的元素(例如,对于xlst转换),而不是用户在xml中定义的自定义元素。
您可以阅读有关xml命名空间here
的更多信息答案 1 :(得分:3)
x:
是XML中的命名空间标识符。 XML子树可以为元素和属性(由xmlns='...'
设置)具有一个»default«命名空间。如果您需要来自其他命名空间的元素或属性,则需要定义前缀,例如xmlns:x='...'
。然后,您在该命名空间中使用的元素和属性需要以x:
为前缀。我常见的是
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"
然后要求我use
元素执行以下操作:
<use xlink:href='#foo'/>
在这种情况下,use
元素来自SVG,而href
元素来自XLink。两者都不同,但在某些地方兼容规格。
这基本上就是命名空间的用途:
foo
的元素,那么您需要指定您想要的两个foo
中的 这样,名称空间与它们在许多编程语言中的工作方式没有太大区别。您可以通过名称空间查看您导入的内容,就像上面SVG案例中的库一样。编写SVG的人注意到已经有一个允许链接到任意XML元素(XLink)的规范,他们只是重复使用它。在其他情况下,例如WPF,存在名称空间以分隔表示框架的声明UI内容和与代码交互所需的粘合属性。例如。一个窗口可能看起来像这样:
<Window
x:Class="W"
Height='500'
Width='500'
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">
只有编译器知道适当的代码隐藏类才需要Class
属性,它在窗口上没有任何明显的差异。
另一个例子是XSLT,您可以在其中定义XML文档的转换。 XSLT指令和输出模板都是XML。您通常为XSLT的元素使用显式命名空间:
<xsl:stylesheet xmlns:xsl="http://www.w3.org/1999/XSL/Transform" version="1.0">
这样你就可以像这样发出生成的XML:
<xsl:if test="Content/Chapter">
<xsl:variable name="text"><xsl:value-of select="$trans//item[@name='content'][lang($lang)]" /></xsl:variable>
<h2><xsl:value-of select="$text"/></h2>
<ol>
<xsl:apply-templates select="Content" mode="TableOfContents"/>
</ol>
</xsl:if>
如果我要将xsl:
命名空间设为默认命名空间,那么XSLT处理器无法告诉我从实际指令生成HTML。如果您的代码和数据使用相同的格式并且位于同一个地方,则会出现问题。我相信Lisp通过使用单引号标记数据来解决这个问题。
对于作为URI的名称空间,这可能只是一个W3C的事情。这些URI不需要任何东西。它们只是标识符。它们并不意味着要被检索。使用带命名空间的XML的程序必须知道它可以处理的命名空间并采取适当的行动。