JyLie

vuePress-theme-reco JyLie    2017 - 2023
JyLie

Choose mode

  • dark
  • auto
  • light
主页
分类
  • API
  • HTML
  • css
  • vue
  • Linux
  • Docker
  • Webpack
  • WebGL
  • PixiJS
  • Github
  • BOM
  • XML
  • bug
  • ie
  • uniapp
  • IE
  • mysql
  • font
  • bom
  • canvas
  • video
  • html
  • JavaScript
  • js
  • 运算符
  • RegExp
  • 编码
  • MiniApp
  • nginx
  • Tool
  • node.js
  • cat
  • nodejs
  • protocol
  • URL
  • FLOW
  • DNS
  • Protocol
  • python
  • 安全
  • linux
  • shell
  • IDE
  • Packer
  • ViteJS
  • git
  • vendor
  • WebApp
  • WebView
  • Window API
  • webview
  • 规范
标签
时光轴
GitHub
author-avatar

JyLie

74

Article

79

Tag

主页
分类
  • API
  • HTML
  • css
  • vue
  • Linux
  • Docker
  • Webpack
  • WebGL
  • PixiJS
  • Github
  • BOM
  • XML
  • bug
  • ie
  • uniapp
  • IE
  • mysql
  • font
  • bom
  • canvas
  • video
  • html
  • JavaScript
  • js
  • 运算符
  • RegExp
  • 编码
  • MiniApp
  • nginx
  • Tool
  • node.js
  • cat
  • nodejs
  • protocol
  • URL
  • FLOW
  • DNS
  • Protocol
  • python
  • 安全
  • linux
  • shell
  • IDE
  • Packer
  • ViteJS
  • git
  • vendor
  • WebApp
  • WebView
  • Window API
  • webview
  • 规范
标签
时光轴
GitHub
  • XML 命名空间 xmlns 实用指南

    • 使用前缀解决命名冲突问题
      • 使用命名空间
        • 统一资源标识符(Uniform Resource Identifier (URI))
          • 默认的命名空间(Default Namespaces)
            • 命名空间的实际应用

            XML 命名空间 xmlns 实用指南

            vuePress-theme-reco JyLie    2017 - 2023

            XML 命名空间 xmlns 实用指南


            JyLie 2017-05-27 XML

            XML 命名空间(XML Namespaces),其缩写为 "xmlns",提供避免元素命名冲突的方法。

            名字空间有什么作用呢?

            我的理解是:由于 xml 允许自定义标识,而自己自定义标识和其他人自定义标识有可能相同,但表示不同的意义。当文件交换或者共享的时候就容易产生冲突。为了避免这种冲突发生,XML 采用名字空间xmlns来声明,允许你通过一个网址指向来区分你的标识。

            比如在一个文档<table>wood table</table>中<table>表示桌子,而在另一个文档<table>namelist</table>中<table>表示表格。如果我需要同时处理这两个文档,就会发生名字冲突。为了解决这个问题,我们引进了 namespaces 这个概念。namespaces 通过给标识名称加一个网址(URL)定位的方法来区别这些名称相同的标识。

            XML 命名空间属性被放置于元素的开始标签之中,声明的语法如下:<document xmlns:namespace-prefix="namespaceURI"></document>

            • namespace-prefix 是由你定义的 namespaces 的名称
            • namespaceURI 就是名字空间的网址

            假设上面的桌子<table>文档来自http://www.w3.org/TR/html4/,

            我们就可以声明为: <document xmlns:w3c="http://www.w3.org/TR/html4/">

            然后在后面的标识中使用定义好的名字空间:<w3c:table>wood table</table>

            这样就将这两个

            区分开来。

            值得注意的是:设置 namespaceURI 并不是说这个标识真的要到那个网址去读取,仅仅作为一种区别的标志而已。

            以命名冲突请看下面两个例子:

            🌰 这个 XML 文档在 table 元素中携带了水果的信息:

            <table>
            <tr>
            <td>Apples</td>
            <td>Bananas</td>
            </tr>
            </table>
            
            1
            2
            3
            4
            5
            6

            🌰 这个 XML 文档在 table 元素中携带了桌子的信息(家具,不能吃的哦):

            <table>
            <name>African Coffee Table</name>
            <width>80</width>
            <length>120</length>
            </table>
            
            1
            2
            3
            4
            5

            如果上面两个 XML 文档片断碰巧在一起使用的话,那么将会出现命名冲突的情况。因为这两个片断都包含了<table>元素,而这两个 table 元素的定义与所包含的内容又各不相同。

            # 使用前缀解决命名冲突问题

            下面的 XML 文档在 table 元素中携带了信息:

            <h:table>
            <h:tr>
            <h:td>Apples</h:td>
            <h:td>Bananas</h:td>
            </h:tr>
            </h:table>
            
            1
            2
            3
            4
            5
            6

            下面的 XML 文档携带了家具 table 的信息:

            <f:table>
            <f:name>African Coffee Table</f:name>
            <f:width>80</f:width>
            <f:length>120</f:length>
            </f:table>
            
            1
            2
            3
            4
            5

            现在已经没有元素命名冲突的问题了,因为这两个文档对各自的 table 元素使用了不同的前缀,table 元素在两个文档中分别是(<h:table> 和<f:table>)。

            通过使用前缀,我们创建了两个不同的 table 元素。

            # 使用命名空间

            下面的 XML 文档在 table 元素中携带了信息:

            <h:table xmlns:h="http://www.w3.org/TR/html4/">
            <h:tr>
            <h:td>Apples</h:td>
            <h:td>Bananas</h:td>
            </h:tr>
            </h:table>
            
            1
            2
            3
            4
            5
            6

            下面的 XML 文档携带了家具 table 的信息:

            <f:table xmlns:f="http://www.w3schools.com/furniture">
            <f:name>African Coffee Table</f:name>
            <f:width>80</f:width>
            <f:length>120</f:length>
            </f:table>
            
            1
            2
            3
            4
            5

            在上面两个例子中除了使用前缀外,两个 table 元素都使用了 xmlns 属性,使元素和不同的命名空间关联到一起。

            W3C 命名规范声明命名空间本身就是一个统一资源标示符,Uniform Resource Identifier (URI)。

            当命名空间被定义在元素的开始标签中时,所有带有相同前缀的子元素都会与同一个命名空间相关联。

            注释:用于标示命名空间的地址不会被解析器用于查找信息。其惟一的作用是赋予命名空间一个惟一的名称。不过,很多公司常常会作为指针来使用命名空间指向实际存在的网页,这个网页包含关于命名空间的信息。

            请访问 http://www.w3.org/TR/html4/。

            # 统一资源标识符(Uniform Resource Identifier (URI))

            通用资源标识符(A Uniform Resource Identifier (URI))是一个标识网络资源的字符串。

            最常用的 URI 是用来标示因特网域名地址的统一资源定位器(URL)。另一个不那么常用的 URI 是统一资源命名(URN)。在我们的例子中,我们仅使用 URL。

            既然前面的例子使用的 URL 地址来标识命名空间,我们可以确信这个命名空间是唯一的。

            # 默认的命名空间(Default Namespaces)

            定义一个默认的 XML 命名空间使得我们在子元素的开始标记中不需要使用前缀。

            他的语法如下所示: <element xmlns="namespaceURI">

            下面的 XML 文档在 table 元素中包含了水果的信息:

            <table xmlns="http://www.w3.org/TR/html4/">
            <tr>
            <td>Apples</td>
            <td>Bananas</td>
            </tr>
            </table>
            
            1
            2
            3
            4
            5
            6

            下面的 XML 文档包含了家具 table 的信息:

            <table xmlns="http://www.w3schools.com/furniture">
            <name>African Coffee Table</name>
            <width>80</width>
            <length>120</length>
            </table>
            
            
            1
            2
            3
            4
            5
            6

            # 命名空间的实际应用

            当开始使用 XSL 时,您不久就会看到实际使用中的命名空间。XSL 样式表用于将 XML 文档转换为其他格式,比如 HTML。

            如果您仔细观察下面的这个 XSL 文档,就会看到大多数的标签是 HTML 标签。非 HTML 的标签都有前缀 xsl,并由此命名空间标示:"http://www.w3.org/1999/XSL/Transform":

            <?xml version="1.0" encoding="ISO-8859-1"?>
            
            <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform">
            
            <xsl:template match="/">
            <html>
            <body>
              <h2>My CD Collection</h2>
              <table border="1">
                <tr>
                  <th align="left">Title</th>
                  <th align="left">Artist</th>
                </tr>
                <xsl:for-each select="catalog/cd">
                <tr>
                  <td><xsl:value-of select="title"/></td>
                  <td><xsl:value-of select="artist"/></td>
                </tr>
                </xsl:for-each>
              </table>
            </body>
            </html>
            </xsl:template>
            
            </xsl:stylesheet>
            
            1
            2
            3
            4
            5
            6
            7
            8
            9
            10
            11
            12
            13
            14
            15
            16
            17
            18
            19
            20
            21
            22
            23
            24
            25