本文目录:
- 1、HTML的命名空间什么意思,就是标签内xmlns后面一个网址的那个
- 2、详解 xml 文件头部的 xmlns:xsi
- 3、w3c dom
- 4、xml中的命名空间
HTML的命名空间什么意思,就是标签内xmlns后面一个网址的那个
namespace即“命名空间”,命名空间是用来组织和重用代码的。
之所以出来这样一个东西,是因为人类可用的单词数太少,并且不同的人写的程序不可能所有的变量都没有重名现象,为了解决这个问题,引入了名字空间这个概念,这样一来就不会引起不必要的冲突了。
假如两个人在自己的html代码里都有table、tr、td,没有命名空间,程序就无法区分,这个是谁的,假如张三的命名空间是zs,李四的是ls
zs:table xmlns:zs=""
zs:tr
zs:tdApples/zs:td
zs:tdBananas/zs:td
/zs:tr
/zs:table
ls:table xmlns:ls=""
ls:tr
ls:tdApples/ls:td
ls:tdBananas/ls:td
/ls:tr
/ls:table
详解 xml 文件头部的 xmlns:xsi
原文在此,写的比较通俗易懂,特转发一下,向原作者致敬~
一套Xml中元素的定义规范;
指定xml文档中元素所隶属的命名空间;
一个XSD的实例,就好比new了一个object 出来;
上面这行的语法其实是, xsi:schemaLocation = "键" “值”,用来说明XSD的命名空间和定义文件;
初学者看到如上的内容应当有如下困惑点:
一个 xml 文档中如果包含如下两种定义不同, 但是名称相同的元素, xml 解析器是无法解析的, 因为它不能确定当你调用 document.getElementsByTagName("book") 时应该返回哪个元素。
显然, 如果给他们的名字添加一个前缀, 则命名冲突的问题就可以解决。
但是, 在一个拥有众多元素的文档中, 仅仅拥有前缀, 也不能完全避免命名冲突的问题。
此时, 命名空间就诞生了, 我们可以为元素定义一个命名空间, 将一个很长的, 可以保证 全局唯一性的字符串 与该元素关联起来。这样就可以避免命名冲突了。
但是如何保证那个较长的字符串全局唯一呢, 最好的方式莫过于使用 统一资源标识符(Uniform Resource Identifier,URI) 了, 而我们最常见的 URI 就是平时经常访问的网址 URL 了。
应用到我们所举的例子中就是:
回到我们的 POM 文档头中,你会发现 project xmlns:xsi="" 中的 可以访问到一个正常的页面, 但是如果访问 xmlns="" 中的 就会得到一个 PAGE NOT FOUND 错误, 页面未获取到。
细心的童鞋会注意到, project 元素前面并没有前缀。 这里实际上使用的是 默认命名空间(default naming space) 。 它的语法如下:
例如我们的 project 元素定义 和下面的例子
使用默认命名空间的作用是, 该元素内部的子元素都会默认属于该命名空间下, 我们不需要为他们一一添加命名空间前缀。
现在来看文件头中剩下的, 看上去更为复杂的部分。
根据之前的知识我们可以理解, xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。
那么, 有了上述的理解, 再来看
上面这行的语法其实是, xsi:schemaLocation = "键" “值”
即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。
w3c dom
DOM是Document Object Model文档对象模型的缩写。根据W3C DOM规范(),DOM是一种与浏览器,平台,语言无关的接口,使得你可以访问页面其他的标准组件。简单理解,DOM解决了Netscape的Javascript和Microsoft的Jscript之间的冲突,给予web设计师和开发者一个标准的方法,让他们来访问他们站点中的数据、脚本和表现层对像。
DOM是以层次结构组织的节点或信息片断的集合。这个层次结构允许开发人员在树中导航寻找特定信息。分析该结构通常需要加载整个文档和构造层次结构,然后才能做任何工作。由于它是基于信息层次的,因而 DOM 被认为是基于树或基于对象的。
对于特别大的文档,解析和加载整个文档可能很慢且很耗资源,因此使用其他手段来处理这样的数据会更好。这些基于事件的模型,比如 Simple API for XML(SAX),适用于处理数据流,即随着数据的流动而依次处理数据。基于事件的 API 消除了在内存中构造树的需要,但是却不允许开发人员实际更改原始文档中的数据。
SAX等模型会从头至尾的顺序解析整个XML文档,当遇到一个节点的开始或或者结束时,会产生一个时间,程序员可以注册事件处理函数以对各个节点进行处理。
另一方面,DOM 还提供了一个 API,允许开发人员添加、编辑、移动或删除树中任意位置的节点,从而创建一个引用程序。这个模型就是基于树型数据结构的,他在使用之前必须加载整个文档或者至少是结构良好的文档片段
解析器是一个软件应用程序,设计用于分析文档(这里是指 XML 文件),以及做一些特定于该信息的事情。在诸如 SAX 这样基于事件的 API 中,解析器将向某种监听器发送事件。在诸如 DOM 这样基于树的 API 中,解析器将在内存中构造一颗数据树。
作为 API 的 DOM
从 DOM Level 1 开始,DOM API 包含了一些接口,用于表示可从 XML 文档中找到的所有不同类型的信息。它还包含使用这些对象所必需的方法和属性。
Level 1 包括对 XML 1.0 和 HTML 的支持,每个 HTML 元素被表示为一个接口。它包括用于添加、编辑、移动和读取节点中包含的信息的方法,等等。然而,它没有包括对 XML 名称空间(XML Namespace)的支持,XML 名称空间提供分割文档中的信息的能力。
DOM Level 2 添加了名称空间支持。Level 2 扩展了 Level 1,允许开发人员检测和使用可能适用于某个节点的名称空间信息。Level 2 还增加了几个新的模块,以支持级联样式表、事件和增强的树操作。
当前正处于定稿阶段的 DOM Level 3 包括对创建 Document 对象(以前的版本将这个任务留给实现,使得创建通用应用程序很困难)的更好支持、增强的名称空间支持,以及用来处理文档加载和保存、验证以及 XPath 的新模块;XPath 是在 XSL 转换(XSL Transformation)以及其他 XML 技术中用来选择节点的手段。
DOM 的模块化意味着作为开发人员,您必须知道自己希望使用的特性是否受正在使用的 DOM 实现所支持。
确定特性可用性
DOM 推荐标准的模块性质允许实现者挑选将要包括到产品中的部分,因而在使用某个特定的特性之前,首先确定该特性是否可用可能是必要的。本教程仅使用 DOM Level 2 Core API,不过在着手您自己的项目时,了解如何能够检测特性是有所帮助的。
DOM 中定义的接口之一就是 DOMImplementation。通过使用 hasFeature() 方法,您可以确定某个特定的特性是否受支持。DOM Level 2 中不存在创建DOMImplementation 的标准方法,不过下面的代码将展示如何使用 hasFeature() 来确定 DOM Level 2 样式表模块在某个 Java 应用程序中是否受支持。
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.DocumentBuilder;
import org.w3c.dom.DOMImplementation;
public class ShowDomImpl {
public static void main (String args[]) {
try {
DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
DocumentBuilder docb = dbf.newDocumentBuilder();
DOMImplementation domImpl = docb.getDOMImplementation();
if (domImpl.hasFeature("StyleSheets", "2.0")) {
System.out.println("Style Sheets are supported.");
} else {
System.out.println("Style Sheets are not supported.");
}
} catch (Exception e) {}
}
}
(DOM Level 3 将包括用于创建 DOMImplementation 的标准方法。)
本教程将使用单个文档来展示 DOM Level 2 Core API 的对象和方法。
基本的 XML 文件
本教程中的所有例子都是用了一个包含如下节点的 XML 文件,它表示输入某个商业系统的订单。回顾一下,XML 文件的基本组成部分包括:
XML 声明:基本的声明 ?xml version="1.0" encoding="UTF-8"? 将这个文件定义为 XML 文档。在声明中指定一种字符编码的情况并不鲜见,如下所示。通过这种方式,不管该 XML 文件使用的语言或字符编码是什么,只要解析器理解特定的编码,它就能够正确地读取该 XML 文件。
DOCTYPE 声明:XML 是人机之间交换信息的便利手段,但是要使它能够顺利地工作,必须要有一个公共的词汇表。可选的 DOCTYPE 声明可用于指定一个应该用来与此文件做比较的文档(在本例中为 orders.dtd),以确保不会产生任何混淆或丢失信息(例如,丢失一个 userid 或错误拼写某个元素名称)。以这种方式处理过的文档称为有效的文档。成功的有效性检查并不是 XML 所必需的,后面的例子实际上从文档中省略了 DOCTYPE 声明。
数据本身:XML 文档中的数据必须包含在单个根元素内,比如下面的 orders 元素。要使 XML 文档得到处理,它必须是格式良好的(well-formed)。
?xml version="1.0" encoding="UTF-8"?
!DOCTYPE ORDERS SYSTEM "orders.dtd"
orders
order
customerid limit="1000"12341/customerid
statuspending/status
item instock="Y" itemid="SA15"
nameSilver Show Saddle, 16 inch/name
825.00/price
qty1/qty
/item
item instock="N" itemid="C49"
namePremium Cinch/name
49.00/price
qty1/qty
/item
/order
order
customerid limit="150"251222/customerid
statuspending/status
item instock="Y" itemid="WB78"
nameWinter Blanket (78 inch)/name
20/price
qty10/qty
/item
/order
/orders
在 DOM 中,使用 XML 信息意味着首先将它划分为节点。
DOM是domain object model(域对象模型)的缩写
DOM (Digital Orthophoto Map 数字正射影像图)
数字正射影像图(DOM, Digital Orthophoto Map):是对航空(或航天)像片进行数字微分纠正和镶嵌,按一定图幅范围裁剪生成的数字正射影像集。它是同时具有地图几何精度和影像特征的图像。
DOM具有精度高、信息丰富、直观逼真、获取快捷等优点,可作为地图分析背景控制信息,也可从中提取自然资源和社会经济发展的历史信息或最新信息,为防治灾害和公共设施建设规划等应用提供可靠依据;还可从中提取和派生新的信息,实现地图的修测更新。评价其它数据的精度、现实性和完整性都很优良。合肥市数字正射影像图DOM.jpg。
该图的技术特征为:数字正射影像,地图分幅、投影、精度、坐标系统、与同比例尺地形图一致,图像分辨率为输入大于400dpi;输出大于250dpi。由于DOM是数字的,在计算机上可局部开发放大,具有良好的判读性能与量测性能和管理性能等,如用农村土地发证,指认宗界地界比并数字化其点位坐标、土地利用调查等等。DOM可作为独立的背景层与地名注名,图廓线公里格、公里格网及其它要素层复合,制作各种专题图。
生产技术
制作的主要技术方法:采用航空像片或高分辨率卫星遥感图像数据等。利用:1) VintuoZo系统数字摄影测量工作站。VintuoZo系统可以利用对DEM的检测及编辑,来提高DOM的精度。还可以通过像片间、图幅间进行灰度接边,以保证影像色调的一致性。 2)采用jx-4 DPW系统。jx-4 DPW是一套基于WINDOWS NT 的数字摄影测量系统。因其对DEM的编辑采用的是单点编辑,而且该系统还具有对DOM的零立体检查的功能,故其DOM的精度较高。 基于DEM的单片数字微分纠正VintuoZo系统具有单片数字微分纠正的模块。
数字正射影像图的应用
洪水监测、河流变迁、旱情监测;
农业估产(精准农业);
土地覆盖与土地利用土地资源的动态监测;
荒漠化监测与森林监测(成林害虫);
海岸线保护;
生态变化监测。
xml中的命名空间
1.什么是defaultNamespace? 就是xmlns属性的值。defaultNamespace的作用就是它下面的没有prefix的element的Namespace就是defaultNamespace.示例如下: ?xmlversion="1.0"encoding="UTF-8"? !--defaultNamespace为 ,a的namespace为 1-- axmlns=" 1"xmlns:edi=" " !--b由于没有前缀,所以会自动采用defaultNamespace,即 1-- bedi:attr1="123"attr2="1.112"qwe/b edi:axmlns= !--d的namespace不再是 1,而是 ,因为d的父节点也定义了一个defaultNamespace: -- dfalse/d /edi:a edi:a !--注意,虽然e的父节点Namespace为 c,但是e的namespace并不是 ,而是 1-- efalse/e /edi:a /a 2.如果一个element定义了xmlns="xxx"属性,那么直接具有xxx的Namespace,除非这个element自己包含一个前缀。 ... !--a具有xxx命名空间-- !--属性d不具有xxx命名空间-- axmlns="xxx"d="ddd" !--b也具有xxx命名空间-- b ... /b !--c不具有xxx的命名空间-- edi:c ... edi:c /a ... !--a不具有xxx命名空间,因为它使用着edi的命名空间-- ... edi:axmlns="xxx" b ... /b /edi:a ... 5.3UniquenessofAttributes InXMLdocumentsconformingtothisspecification,notagmaycontaintwoattributeswhich: haveidenticalnames,or havequalifiednameswiththesamelocalpartandwithprefixeswhichhavebeenboundtonamespacenamesthatareidentical. Forexample,eachofthebadstart-tagsisillegalinthefollowing: !-- isboundton1andn2-- !--没有prefix的attribute不具有任何命名空间-- xxmlns:n1=" " xmlns:n2=" " bada="1"a="2"/ !--n1:a和n2:a的命名空间和属性名均相同,不允许出现在同一个element中-- badn1:a="1"n2:a="2"/ /x However,eachofthefollowingislegal,thesecondbecausethedefaultnamespacedoesnotapplytoattributenames: !-- isboundton1andisthedefault-- xxmlns:n1=" " xmlns=" " gooda="1"b="2"/ !--属性a的命名空间为空,而n1:a的命名空间为 -- gooda="1"n1:a="2"/ /x targetNamespace 在Schema中targetNamespace定义了Schema定义出的新元素与属性的名称空间。也就是它是对所定义的XML模型进行限制:限制定义出的元素,或者属性的名称空间。与targetNamespace相关的还有两个属性:elementFormDefault,attributeFormDefault,这两个属性的缺省值都是unqualified。如果定义为unqualified表示定义的元素的名称空间可以缺省,此时直接引用父元素的名称空间。如果是qualified则表示,必需要指明名称空间,不能直接引用其父元素的,要指明。(如果Schema限定的文档,刚好定义了”空的名称空间“并且刚好与targetNamespace一至,可以缺省)。 在WSDL中也有一个targetNamespace,但是没有Schema中的两个属性。但其它这两个属性在WSDL中其实并不需要,不管这两个属性取值,对文档其实没有什么影响,所以也就不用定义这两个属性。 不失一般性,下面我假定WSDL与SOAP绑定。WSDL是用来定义的是服务的一些属性,targetNamespace定义的服务“收到的请求”与“发出响应”的一些属性(也许有其它的,但我没发现,如果有知道的,请指教),定义了请求与响应对应的XML元素应该使用的名称空间。从SOAP协议中,我们可以看到,响应与请求元素的父元素是env:Body,它的名称空间是SOAP标准指定了的,根据不同的SOPA协议版本不同,比如Soap1.1为 s.xmlsoap.org/soap/envelope/,而Soap1.2为 /2001/06/soap-envelope。 这样导致了响应与请求元素也就无法使用其父元素的名称空间,要使响应与请求的名称空间与targetNamespace一至,元素也就不能使用缺省的父元素的名称空间,必需显示的使用完整的名称空间。这样在Schema中出现的elementFormDefault,attributeFormDefault两个属性,也就在WSDL中没有存在的必要了。 也就是WSDL与Schema中的targetNamespace基本上是一至,你完全可以相互参考起来理解。 参考文献: ;id=25672replyID=17053star=1skin=0 /TR/xmlschema-0/#UnqualLocals(Schema的官方文档) /TR/wsdl#_Toc492291093(WSDL的官方文档) schemaLocation是用来指定XMLSchema文档路径的 新的XMLSchema系统即将成为W3C推荐标准,目的是为了克服DTD的局限性(请参阅侧栏,DTD的局限性),为XML文档提供丰富的语法结构。本文展示了模式的灵活性,说明如何使用XMLSchema系统来定义最基本的XML文档构造块——元素。 XMLSchema比DTD更强大。为了说明XMLSchema机制的强大功能,下面三个程序清单简要比较了表示元素的不同方式。清单1给出了一个XML文档片段,清单2用DTD语法声明了这两个元素,清单3则是相应的XMLSchema语法形式。要注意,清单3中所用的是相同的XML语法。通过模式,验证解析器可以检查元素InvoiceNo是否是正整数,元素ProductID的首字符是否为A到Z之间的字母,后面为六个阿拉伯数字。相反,引用DTD的验证解析器只能检查这些元素是否用字符串表示。
【w3space】的内容来源于互联网,如引用不当,请联系我们修改。
网友留言: