收藏本站腾讯微博新浪微博

经典论坛

 找回密码
 注册

QQ登录

只需一步,快速开始

蓝色理想 最新研发动态 网站开通淘帖功能 - 蓝色理想插件 论坛内容导读一页看论坛 - 给官方提建议

论坛活动及任务 地图和邮件任务 请多用悬赏提问 热夏来袭,选一款蓝色理想的个性T恤吧!

手机上论坛,使用APP获得更好体验 急需前端攻城狮,获得内部推荐机会 论坛开通淘帖功能,收藏终于可以分类了!

搜索
查看: 10098|回复: 5

[讨论] html xmlns是什么意思

[复制链接]
发表于 2013-7-30 17:20:44 | 显示全部楼层 |阅读模式

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
请问下面的这句是什么意思?求高手详解
<html xmlns="http://www.w3.org/1999/xhtml">
    解释       xmlns=xml命名空间   xhtml命名空间=http://www.w3.org/1999/xhtml
不要告诉我这个是命名空间。
xmlns的加入是为了命名的冲突比如一个table 是html的table 还是xml的table所以加入了这个xmlns.

个人认为这是一个用xml写的xtml语言,我还是比较疑惑到底是什么?
发表于 2013-7-31 09:16:43 | 显示全部楼层
告诉浏览器该怎么去显示这个页面
回复 支持 反对

使用道具 举报

发表于 2013-7-31 09:22:31 | 显示全部楼层
我没去了解过这个,因为没用,而且HTML5中已经不要这个东西了,我一般看到这个就把他删掉。。
回复 支持 反对

使用道具 举报

发表于 2013-7-31 09:52:34 | 显示全部楼层
通俗来讲HTML(超文本标记语言)是XML的一个子集.

打开 "http://www.w3.org/1999/xhtml"
看最下面的连接
"For more information about XML namespaces, please refer to Namespaces in XML."
然后你就会看到下面这段:
Abstract

XML namespaces provide a simple method for qualifying element and attribute names used in Extensible Markup Language documents by associating them with namespaces identified by URI references.

它会告诉你这个  xml 的namespace是做什么用的.
回复 支持 反对

使用道具 举报

发表于 2013-7-31 17:43:35 | 显示全部楼层
本帖最后由 baihe107 于 2013-7-31 17:53 编辑

一个来自stackoverflow的提问,我简单的翻译了下其中的那个答案的扩展,才疏学浅,露珠将就着看下吧(红色部分为我自己添加的)

关于XML命名空间的解释

作者:Ian Stuart(伊恩·斯图尔特)
简介:伊恩先生现在是个40多岁的程序员,任教于爱丁堡大学埃迪纳数据中心,你可以访问其个人网站。他已浸淫于编程事业多年,自从上世纪90年代早期,他就开始涉猎Web技术。闲暇之余,他更喜欢捣鼓自己的那辆老路虎。


为什么我们需要命名空间(Namespaces)?
使用命名空间,有两个最根本的需求:
1. 为了区分两个元素会使用相同名称的情况(防止命名空间冲突)
2. 把具有共同观念的元素组合到一起

OK,这么说可能有些模糊,让我们举几个栗子吧:

需求1
试想下面这种情况:
  • 在(x)html文档中有个table元素,同时在XSL-FO(XSL Formatting Objects 的缩写,它是一种用于文档格式的 XML 置标语言)中也有个同名的table元素
  • 在(x)html文档和SVG当中都包含a,title和style元素

此时,你该如何从(x)html文档中区分出一个SVG的title元素呢?

需求2

在(x)html文档中,table,style和a元素应该包括或者不包括什么,都是受特定规则约束的。这些定义的元素通过一系列规则被放置在相同的地方。

比如,我有一段基于XML的数据,它有自己的验证规则,我想:

  • 在同一地方定义这些规则
  • 并且把这些规则同我或者其他任何人定义的规则集(rule-set,数据规则定义的集合)区分开来。



什么是命名空间?
命名空间是一个独一无二的URI(Uniform Resource Locator,统一资源定位符)。

这种格式有个优点,任何人都可以向假定的域名发送XML文档。背负式(piggy-back,指的是将人扛在肩上或背上的一种姿势。尤其指的是那种坐在上面的人将脚跨座,两只脚分别垂在负重者胸前两侧的那种姿势。常常可以看到大人将小孩放在肩上,使其视野更远。)的使用其他人的域名是很不好的(特别是在人家还不知情的情况下)。

在XML文档中,URI通常与一个前缀关联。这个前缀用来标识每个元素所属的命名空间。例如:
  1. rdf:description  

  2. xsl:template  

  3. zblsa:data
复制代码
在上面的例子中,

  • 冒号之前的部分是前缀
  • 冒号之后的部分是当前的部分
  • 任何有前缀的元素都属于合法的
  • 任何无前缀的元素都属于非法的



我该如何使用命名空间呢?
使用命名空间,首先需要给它关联一个URI:
  1. <foo:tag xmlns:foo="http://me.com/namespaces/foofoo">
复制代码
上面的例子给tag元素的命名空间定义了一个叫foo的前缀。以xmlns为前缀的属性就好像是个命令“把它给我链接到这个URI去”。由于非法(不符合语法规则)的文档可以包含两个相同属性,冒号后面的部分不再出现两次同时定义的前缀。

给命名空间定义一个前缀

下面是给命名空间定义一个前缀的例子:
  1. <foo:tag xmlns:foo="http://me.com/namespaces/foofoo">



  2.   <foo:head>

  3.     <foo:title>An example document</foo:title>

  4.   </foo:head>



  5.   <foo:body>

  6.     <foo:e1>a simple document</foo:e1>

  7.     <foo:e2>

  8.       Another element

  9.     </foo:e2>

  10.   </foo:body>

  11. </foo:tag>
复制代码
可以看到,上面所有的元素都被包含在<foo:tag>里头,命名空间的前缀foo跟它的URI http://me.com/namespaces/foofoo 相关联。

给相同的命名空间定义多重前缀
也可以为相同的命名空间定义不同的前缀,如下所示:
  1. <tag>  

  2.   

  3.   <foo:head xmlns:foo="http://me.com/namespaces/foofoo">  

  4.     <foo:title>An example document</foo:title>  

  5.   </foo:head>  

  6.   

  7.   <bar:body xmlns:bar="http://me.com/namespaces/foofoo">  

  8.     <bar:e1>a simple document</bar:e1>  

  9.     <bar:e2>  

  10.       Another element  

  11.     </bar:e2>  

  12.   </bar:body>  

  13. <tag>
复制代码
给多个命名空间定义相同的前缀
也可以为不同的命名空间定义相同的前缀(尽管不推荐这么做),这取决于当时的语境(上下文):
  1. <myns:html xmlns:myns="http://www.w3c.org/1999/xhtml">  

  2.   

  3. <myns:head>  

  4. <myns:title>A really bad idea</myns:title>  

  5. </myns:head>  

  6.   

  7. <myns:body>  

  8.   <myns:h1>A really bad idea</myns:h1>  

  9.     <myns:pre>  

  10.       <myns:pre xmlns:myns="http://my.com/namespaces/test-data">  

  11.         <myns:table>  

  12.           <myns:data>  

  13.             Hello World  

  14.           </myns:data>  

  15.         </myns:table>  

  16.       </myns:pre>  

  17.    </myns:pre>  

  18. </myns:body>
复制代码
注意:这并不是个好点子!


多重命名空间
如果你正在使用命名空间,那么肯定需要立即使用多个命名空间。那么该如何同时声明多个命名空间呢?

你所要做的就是使用多个xmlns声明,像这样:
  1. <foo:tag xmlns:foo="http://me.com/namespaces/foofoo"  

  2.          xmlns:bar="http://me.com/namespaces/foobar"  

  3.          >  

  4.   

  5.   <foo:head>  

  6.     <foo:title>An example document</foo:title>  

  7.   </foo:head>  

  8.   

  9.   <bar:body>  

  10.     <bar:e1>a simple document</bar:e1>  

  11.     <bar:e2>  

  12.       Another element  

  13.     </bar:e2>  

  14.   </bar:body>  

  15. </foo:tag>
复制代码
缺省(默认)的命名空间
问:如果你使用任意的命名空间,是否所有的元素都得存在于命名空间呢?
答:YES!这并不算是个问题。

定义一个不关联前缀的命名空间也是允许的,这属于我们上面提到的非法的命名。

这一点对于xhtml语言来说是特别重要的,作为要求之一,xhtml并没有打破HTML这种语言的规则要求,HTML语言不需要前缀。

要定义一个缺省的命名空间,xmlns只要简单的不指定前缀即可:
  1. <xhtml xmlns="http://www.w3c.org/1999/xhtml">
复制代码
例如:
  1. <html xmlns="http://www.w3c.org/1999/xhtml"  

  2.       xmlns:bar="http://me.com/namespaces/foobar"  

  3.       >  

  4.   

  5.   <head>  

  6.     <title>An example document</title>  

  7.   </head>  

  8.   

  9.   <body>  

  10.     <bar:e1>a simple document</bar:e1>  

  11.     <bar:e2>  

  12.       Another element  

  13.     </bar:e2>  

  14.   </body>  

  15. </html>
复制代码
属性与命名空间
对于任何特定的元素,其属性可能只存在一次。这使得属性与元素稍有不同。

属性可以存在于一个特定的命名空间(<.... myns:myattib="foo" ...>)或者属于非法的命名空间。

属性的正常“规则”是把它们放在一个命名空间里,例外的是在定义特定的命名空间时所谈及的属性(例如xlink语言或者rdf语言中的属性)。

对于未定义的命名空间,属性没有命名空间的前缀。注意,这点跟缺省的命名空间是不用的。

如果你想要你的文档遵循DTD或者Schema定义的属性合格,那么,给命名空间的属性将会变得很重要。


在命名空间的URI之后该做什么?
啥都不用做!

Ok,这好像真的没有帮上什么忙。现在的问题是人们看到一个URL,因此想在浏览器里点击看看能得到什么。这纯粹是人类的行为,结果也决定了使URI符合命名空间的标准。

引用Claude L. Bullard的话(来自XML-Dev邮件列表):
The flaw is the conflation of name, location and identity, but that flaw is the basic feature by which the WWW runs, so we are stuck there. All the handwaving about URN/URI/URL doesn’t avoid the simple fact that if one puts http:// anywhere in browser display space, the system colors it blue and puts up a finger.

The monkey expects a resource and when it doesn’t get one, this shocks the monkey. Monkeys don’t read specs to find out why they shouldn’t be shocked. They turn red and put up a finger.

之所以很多人为了避免这种“冲击”,就是因为发布描述了命名空间的的文档给那些错误的访问者。基于这种途径,新的方法诞生了,就是现在从XML-dev新兴的RDDL(资源目录描述语言)。


延伸阅读
主要关于XML语言的传送门:
www.xml.com
www.xml.org
www.xml.net (正在建设中...)

更多关于XML语言的传送门:
www.w3c.org
www.oasis-open.org
xml.apache.org


搞移动开发的同学应该见过这种命名空间:
  1. xmlns:android="http://schemas.android.com/apk/res/android"
复制代码
  1. xmlns:ios-sc="http://oval.mitre.org/XMLSchema/oval-system-characteristics-5#ios"
复制代码
跟xhtml里面的xmlns类似,但比xhtml要严格。回到露珠的问题上,XML的范围要比xhtml广,上面提到的XSL-FO/xlink/rdf/RDDL都属于XML的范畴。
回复 支持 反对

使用道具 举报

 楼主| 发表于 2016-3-28 21:44:34 | 显示全部楼层
我的自己做的网站.IE 怎么不兼容。www。520xiangce.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|Archiver|手机版|blueidea.com ( ICP05002321 )  

GMT+8, 2019-12-8 00:50 , Processed in 0.093514 second(s), 8 queries , Gzip On, Memcache On.

Powered by Discuz! X3.2 Licensed

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表