schema也是一个用于定义,描述xml文档结构和内容的一种模式语言,其出现,为了克服DTD的局限性,它在现在也逐渐替代了DTD约束。那它与DTD的比较有什么优越之处呢?
@1,schema符合xml语法结构,DOM,SAX解析很容易读懂xml文档中schema中的内容。
@2,xml schema对名称空间支持非常好。
@3,它比DTD支持更多的数据类型,并支持用户自定义新的数据类型
@4,约束能力更强大,能够对xml文件做出更细致的语义约束。它不能像DTD一样定义实体,所以更复杂。
xml schema本身就是一个xml文件,他的扩展名xsd,schema文档一般称为模式文档,遵照这个文档写的xml文件称为实例文档
编写一个schema文档后,通常需要把这个文件声明的元素绑定到一个URI地址上,在schema技术中有一个专业的名称来描述这个过程,即把schema声明的元素绑定到一个名称空间上,以后xml文件就可以通过名称空间来告诉引擎元素来自哪里。
XML是被设计用来存储数据、携带数据和交换数据的。通过XML,可以在不兼容的系统之间交换数据,利用XML,纯文本文件可以用来存储数据。在不使用XML时,HTML用于显示数据,数据必须存储在HTML文件之内。
XML不是为了显示数据而设计的,主要是用于交换数据,可以从HTML中分离数据,也可以用于存储数据,大量的数据可以存储到XML文件中或者数据库中,应用程序可以读写和存储数据,一般的程序可以显示数据。
通过XML可以在HTML文件之外存储数据使用,也可以充分利用数据,可以用于创建新的语言XML是WAP和WML语言的母亲。如果开发者有足够的预见性,那么将来的应用程序都应该使用XML的形式来存储数据。
原文在此,写的比较通俗易懂,特转发一下,向原作者致敬~
https://blog.csdn.net/lengxiao1993/article/details/77914155
一套Xml中元素的定义规范;
指定xml文档中元素所隶属的命名空间;
一个XSD的实例,就好比new了一个object 出来;
上面这行的语法其实是, xsi:schemaLocation = "键" “值”,用来说明XSD的命名空间和定义文件;
初学者看到如上的内容应当有如下困惑点:
一个 xml 文档中如果包含如下两种定义不同, 但是名称相同的元素, xml 解析器是无法解析的, 因为它不能确定当你调用 document.getElementsByTagName("book") 时应该返回哪个元素。
显然, 如果给他们的名字添加一个前缀, 则命名冲突的问题就可以解决。
但是, 在一个拥有众多元素的文档中, 仅仅拥有前缀, 也不能完全避免命名冲突的问题。
此时, 命名空间就诞生了, 我们可以为元素定义一个命名空间, 将一个很长的, 可以保证 全局唯一性的字符串 与该元素关联起来。这样就可以避免命名冲突了。
但是如何保证那个较长的字符串全局唯一呢, 最好的方式莫过于使用 统一资源标识符(Uniform Resource Identifier,URI) 了, 而我们最常见的 URI 就是平时经常访问的网址 URL 了。
应用到我们所举的例子中就是:
回到我们的 POM 文档头中,你会发现 project xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 中的 http://www.w3.org/2001/XMLSchema-instance 可以访问到一个正常的页面, 但是如果访问 xmlns="http://maven.apache.org/POM/4.0.0" 中的 http://maven.apache.org/POM/4.0.0 就会得到一个 PAGE NOT FOUND 错误, 页面未获取到。
细心的童鞋会注意到, project 元素前面并没有前缀。 这里实际上使用的是 默认命名空间(default naming space) 。 它的语法如下:
例如我们的 project 元素定义 和下面的例子
使用默认命名空间的作用是, 该元素内部的子元素都会默认属于该命名空间下, 我们不需要为他们一一添加命名空间前缀。
现在来看文件头中剩下的, 看上去更为复杂的部分。
根据之前的知识我们可以理解, xmlns:xsi 定义了一个命名空间前缀 xsi 对应的唯一字符串 http://www.w3.org/2001/XMLSchema-instance 。 但是读者会发现, 这个 xmlns:xsi 在不同的 xml 文档中似乎都会出现。 这是因为, xsi 已经成为了一个业界默认的用于 XSD((XML Schema Definition) 文件的命名空间。 而 XSD 文件(也常常称为 Schema 文件)是用来定义 xml 文档结构的。
那么, 有了上述的理解, 再来看
上面这行的语法其实是, xsi:schemaLocation = "键" “值”
即 xsi 命名空间下 schemaLocation 元素的值为一个由空格分开的键值对。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)