XML 命名空间

XML命名空间深度解析 —— 命名空间简介 相信很多朋友都在使用XML传输存储 阅读详情

1. 命名空间 (Namespace) 的引入

比如有两份 XML 数据

  1. <labourer>  
  2.     <name>Unmi</name>  
  3.     <address>fantasia@sina.com</address>  
  4. </labourer>  

和

  1. <labourer>  
  2.     <name>Unmi</name>  
  3.     <address>Gaoxin Nanyi Road, NanShan District, Shenzhen</address>  
  4. </labourer>  

集成在一起时就是

  1. <labourer>  
  2.     <name>Unmi</name>  
  3.     <address>fantasia@sina.com</address>  
  4.     <address>Gaoxin Nanyi Road, NanShan District, Shenzhen</address>  
  5. </labourer>  

注 意到上面,此时计算机是基本无法分辨是何种 addres (判断有无 @ 吗?不妥,再来个别的 address 怎么办)。当然,你说分别换成 <email-address> 和 <post-address> 不行了吗?但这要修改 DTD 文件,也许你没权利修改这些个 DTD 文件,即使行的话,同样再来个别的 address 是不又要修改 DTD 文件?

由此就引入了命名空间 (Namespace) 分别来区分以上那两个 address,甚至更多的 address。有了命名空间,你不必改写 DTD,命名空间一般会用一个 URI 来标定唯一性。加入命名空间后完成 XML 文件如下(未完成):

  1. <labourer>  
  2.     <name>Unmi</name>  
  3.     <net:address>fantasia@sina.com</net:address>  
  4.     <earth:address>Gaoxin Nanyi Road, NanShan District, Shenzhen</earth:address>  
  5. </labourer>  


2. 命名空间的声明与使用

前面那个 XML 可读性是增强了,可是不知你在 IE 打开试了没,会报找不到命名空间的错误:

到未声明的名称空间前缀: 'net'的引用。处理资源 'wmh:C:/Documents%20and%20Settings/Unmi/My%20Documents/XmlPad%20Projects/ns.x...

    <net:address>fantasia@sina.com</net:address>
-------------------^

所以接下来我们就要声明命名空间,有两种声明方式 (1) 显式声明,(2) 默认式声明

(1)显式声明

在用到命名空间 (缩写为 ns) 标记 (缩写为 tag) 的外层 (祖先,但通常写在根标记上) 标记中声明,语法如下:
 

  1. <ns1:tag1 xmlns:ns1="URI1"  
  2.           xmlns:ns2="URI2"  
  3.           ...................  
  4.           xmlns:nsn="URIn">  

然后为 XML 文件中每个标记都加上命名空间(也就是前缀,以下前缀与命名空间等同),修正好的 XML 内容如下

  1. <earth:labourer xmlns:earth="http://unmi.blogjava.net/earthy"  
  2.                 xmlns:net="http://unmi.blogjava.net/net">  
  3.     <net:name>Unmi</net:name>  
  4.     <net:address>fantasia@sina.com</net:address>  
  5.     <earth:address>Gaoxin Nanyi Road, NanShan District, Shenzhen</earth:address>  
  6. </earth:labourer>  

我们为 XML 文档中出现的每一个标记都使用了前缀,IE 中再次打开,不会有问题了。这里要记住命名空间的关键声明部分语法为 xmlns:ns="URI"。

(2) 默认式声明

是不是觉得上面那个写法太烦琐了,的确。所以就有了默认声明方式,让不带前缀的标签从属于默认命名空间""。声明语法如下

  1. <tag  xmlns="URI"  
  2.       xmlns:ns1="URI1"  
  3.       ...................  
  4.       xmlns:nsn="URIn">  

与显式声明的语法只第一行有差异,把两种形式的第一行拿出来就是 <tag  xmlns="URI" 和 <ns1:tag1 xmlns:ns1="URI1"。标签本身不带前缀了,并且是直接的 xmlns 等于一个 URI (默认命名空间的 URI),表明这个标签本身就在默认命名空间中,以及子孙标签若未带前缀也是在默认命名空间中的。这样改造过的 XML 文件内容就是:

  1. <labourer xmlns="http://unmi.blogjava.net/earthy"  
  2.           xmlns:net="http://unmi.blogjava.net/net">  
  3.     <net:name>Unmi</net:name>  
  4.     <net:address>fantasia@sina.com</net:address>  
  5.     <address>Gaoxin Nanyi Road, NanShan District, Shenzhen</address>  
  6. </labourer>  

是不是简洁多了,因此实际应用中凡有声明命名空间的 XML 文档中,都是以默认方式来声明的。还有,即使是用了显式声明命名空间语法,如果其中仍有未带前缀的标签存在,其实那个标签也是在一个默认的命名空间中,只是没有明确告诉你一个默认的 URI,也许这时默认的 URI 是 ""。如下:

  1. <earth:labourer xmlns:earth="http://unmi.blogjava.net/earthy"  
  2.                 xmlns:net="http://unmi.blogjava.net/net">  
  3.     <name>Unmi</name>  
  4.     <net:address>fantasia@sina.com</net:address>  
  5.     <earth:address>Gaoxin Nanyi Road, NanShan District, Shenzhen</earth:address>  
  6. </earth:labourer>  

<name> 既不在 earth 中,也不在 net 中,它其实也是在默认的命名空间中,是 ""? 我猜的。

关于 xmlns 那个 URI 说明一点,它只是被借用来唯一标识的名称,看似网址,你可以在那个网页里随意写些东西,或许根本不可到达。

3. XML 使用命名空间的例子

①XSL 文件

  1. <xsl:stylesheet xmlns:xsl=http://www.w3.org/TR/WD-xsl">  
  2.     <xsl:template match="/">  
  3.        ........  
  4.        <html>  
  5. ..........................................  

②XHTML 文件

  1. <html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">  
  2.     <table>  
  3.          .....................................  

③Spring 2 配置文

  1. <beans xmlns="http://www.springframework.org/schema/beans"   
  2.        xmlns:jee="http://www.springframework.org/schema/jee">  
  3.       
  4.     <bean id="propertyConfigurer" class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">  
  5.     </bean>  
  6.       
  7.     <jee:jndi-lookup id="dataSource" jndi-name="java:comp/env/jdbc/ds"/>  
  8. .............................................  


参考:书籍 《XML 与 ASP 网站实作大全》中国铁道出版社 2001年12月第1 版。章节:3-4 使用命名空间避免冲突。


海康威视摄像头网线连接笔记本电脑,客户端提示:1连接设备失败。设备不在线或网络原因引起的连接超时等。(HCNetSDK.dll[7].)解决方案 1.环境 电脑:联想笔记本电脑(win10系统) 摄像头:海康威视DS-2CD3T20D-i5,4mm 连接方式:直接用网线将摄像头和摄像头连接 2.问题: 客户端出现如下提示: 3. 解决流程: 1.确认网线是否有问题:我的网线指示灯常亮,并且设备能够被搜索到,只是一直显示离线 2.按照网上教程直接配置摄像头的ip地址与电脑同一网段:登录失败。 错误码为 HCNetSDK.dll[7].(连接设备失败。设备不在【海康威视吧】_百度贴吧 失败了,没有反应 3.查看有线网卡的地 阅读详情

相关推荐

概率论 知识图谱 + 实战案例解析

本文通过构建概率论知识图谱,系统梳理了从随机试验、概率、条件概率到随机变量与分布的核心概念及其内在联系。结合朴素贝叶斯分类器和蒙特卡洛模拟等实战案例,深入解析了条件概率、独立性及大数定律等理论如何应用于机器学习与实际问题求解,旨在帮助读者建立结构化思维,将理论有效转化为解决实际问题的能力。

weixin_29051193的博客 265

xml sax localName和qName的区别

xml sax localName和qName的区别 分类: XML2012-11-29 17:59 916人阅读 评论(3) 收藏 举报 localnameqnameSAXsaxxmlXML 目录(?)[+] 1. xml中的localName和QName [html] view plaincopy

legend_x的专栏 791

ESP32 LVGL开发板例程使用记录:自制常用汉字字库(二)

1、将下载的文件移入工程文件中 ,路径为项目文件中 ”......\lib\lvgl\src\font“文件夹下。3、修改字库配置文件,文件名为lv_conf.h中的内容,向其中加入下面内容(位置可搜索注释块来找到地方)修改完成可以编译试试,看是否成功,如字库较大时编译出错,请使能:LV_FONT_FMT_TXT_LARGE。2、打开此文件,修改包含头文件的路径,不然会报错,修改方法可对照自己库中其他字库文件中的包含路径。导入完成后在VSCode工程中可以查看到此文件。上次说完了如何制作 字库.c 文件。

qq_43279097的博客 1955

关于XML中的命名空间介绍

这里,命名空间前缀是 cont,标示符(URI)是 www.tutorialspoint.com/profile。这意味着,带有 cont 前缀元素名和属性名都(包括 contact 元素)属于 www.tutorialspoint.com/profile 这个命名空间。在XML中,名称空间的使用涉及范畴的概念,范畴即名称空间的覆盖范围,它指的是哪些元素和属性在该名称空间中,哪些不在该名称空间中。这篇文章主要介绍了XML的命名空间,包括命名空间的声明等XML入门学习中的基础知识,需要的朋友可以参考下。

xiaoweids的博客 1220

【线粒体基因组数据提交实战】从注释校验到GenBank批量入库的避坑指南

本文详细介绍了线粒体基因组数据从注释校验到GenBank批量上传的全流程避坑指南。重点解析了GB2sequin工具的正确使用方法、TBL注释文件的精修技巧,以及BankIt平台提交的隐藏要点,帮助科研人员高效完成NCBI数据提交,特别适合需要批量上传线粒体基因组数据的研究者。

weixin_28726671的博客 440

从NHANES到发表:如何用survey包完成符合CDC要求的统计分析(含完整R代码)

本文详细介绍了如何利用R语言的survey包,对美国国家健康与营养调查数据进行符合CDC要求的统计分析。文章重点解析了NHANES数据的复杂抽样设计、权重变量的正确选择与调整,并提供了从数据获取、清洗、构建调查设计对象到执行加权回归及生成发表级表格的完整R代码实战指南,帮助研究者避免常见错误,确保分析结果的准确性与可发表性。

weixin_29054245的博客 521

xml----命名空间详解

xml 命名空间xmlns详解

qq_41768644的博客 2576

SQL 通过sum() over(order by ,rownum)实现财务现金日记账实例

SELECT 类型,to_char(发生日期,'yyyy-MM-dd') 发生日期,期初余额,借方金额,贷方金额, (CASE WHEN 借方金额>0 THEN '借' WHEN 贷方金额>0 THEN '贷' ELSE '平' END) 方向, sum(收支金额) over(order by 发生日期, rownum) 余额 FROM( SELECT LX 类型,账户,账号,摘要,发生日期,单据ID, ...

qq_41451794的博客 1021

关于XML名称空间(命名空间)

名称空间的作用? 为了解决不同领域的XML词汇的同名冲突和区分识别。(参考底下的示例) 注意:名称空间只存在逻辑意义,无法真正实现对URI的引用。 名称空间的声明: 放在元素(一般是根元素)的起始标签内,以类似属性的形式声明。 名称空间的声明将名称前缀和URI关联起来。 名称空间的作用范围: 只在声明名称空间的元素以及该元素所包含的元素和属性内有效。 (注意:默认名称空间不直接作用于属性) 声明名称空间的元素,称为包容体(Container)。名称空间和前缀的关联关系在包容体的

weixin_46381351的博客 4553

基于 STM32 的手持式安检金属探测器设计与实现

【代码】基于 STM32 的手持式安检金属探测器设计与实现。

weixin_42300449的博客 899

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

基于Jeecgboot3.9.0的vue3版本前后端分离的flowable流程管理平台

宁波阿成的博客 900

XML命名空间详解

一、命名空间的意义 XML是一种非常好用的标记语言,它具有极好的可扩展性,因此当我们需要同时访问多份XML文档时,有可能会出现这样一种情况:在同一份XML文档中可能出现多个同名的标签和属性,而这些标签和属性意义又是完全不同的,这样如果我们如果不从语法上提供区别,则XML处理器将无法区分它们。 为了解决这个问题XML提供了命名空间的支持。我们想象这样一个场景,在学校的操场上你喊一句“小明”可能一下...

zisgood的博客 6916

车载ECU底软测试:方法与技术的深度解析

底软是运行在 ECU 硬件平台上的基础软件,它为上层应用程序提供了硬件驱动、操作系统服务、通信协议栈等功能。底软的主要功能包括:硬件驱动:负责与 ECU 的各种硬件外设进行通信和控制,如 GPIO、UART、SPI、CAN 等。操作系统服务:提供任务调度、内存管理、中断处理等功能,确保系统的实时性和稳定性。通信协议栈:实现 ECU 与其他 ECU 或外部设备之间的通信,如 CAN、LIN、FlexRay 等。诊断服务:负责对 ECU 的故障进行诊断和处理,并将故障信息存储在故障码存储器中。

天赐好车的博客 1422

xml命名空间

在 XML 中,元素名称是自定义的,当两个不同的文档使用相同的元素名或者同一份文档使用相同的元素名表示不同的意思时,就会发生命名冲突。 例如: 这个 XML 文档携带着某个表格中的信息: Apples Bananas 这个 XML 文档携带有关桌子的信息(一件家具): African Coffee Table 80 120

liu_shi_jun的专栏 528

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

XML命名空间NameSpase

XML系列:命名空间 一,什么是命名空间? 命名空间是唯一标识XML文档中的元素和实体的信息集合,通过特定URL关联XML,解决命名冲突。 DTD不支持命名空间的所有功能。但XML Schema支持。 二,命名空间的使用 1,声明和使用命名空间:将前缀和URL关联,使用xmls属性定义命名空间别名。  语法:  xmls:前缀名 = “命名空间的URL”

自强 1709

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

【xml】xml命名空间的作用(为何mybatis的xml没有命名空间)

xml(xmlns)命名空间的作用,为什么mybatis的xml不需要指定命名空间

大胡子老哥的博客 964

XML指南——XML 命名空间

XML 命名空间提供了一种避免元素命名冲突的方法。命名冲突 因为XML文档中使用的元素不是固定的,那么两个不同的XML文档使用同一个名字来描述不同类型的元素的情况就可能发生。而这种情况又往往会导致命名冲突。请看下面两个例子 这个 XML 文档在table元素中携带了水果的信息: <table> <tr> &lt...

weixin_30556161的博客 111
上一篇: linux gnome m4
下一篇: MID
bitscro
博客等级 码龄21年 19粉丝 41原创
评论 3
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值