欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

Android学习笔记整理(2)--XML篇之XML约束技术

程序员文章站 2022-03-30 13:06:49
...

1.什么是XML约束?

    在XML技术里,可以编写一个文档来约束一个XML文档的写法,这称之为XML约束。

2.XML约束的作用

    约束XML文档的写法,对XML进行校验

3.常用的XML约束技术

    DTD约束:

    3.1在XML中引入dtd的两种引用

    1)外部引入
      可以将dtd的约束内容写在外置的dtd文件中,这个文件后缀必须为.dtd而文件保存时必须用utf-8编码保存.
      再在xml文件中使用
        <!DOCTYPE 根元素名称  SYSTEM 文件的位置>
        如果写的是SYSTEM表明当前引入的dtd在当前文件系统中,后面制定的文件位置是当前硬盘中的位置
        <!DOCTYPE 文档根结点 PUBLIC "DTD名称" "DTD文件的URL">
        如果写的是PUBLIC表明当前引入的dtd在网络公共位置中,后面要指明dtd的名字和dtd所在网络位置URL地     址
    (2)内部引入
      直接在xml中书写dtd
      <!DOCTYPE 根元素名称[
        dtd约束....

      ]>

    举个约束的例子吧

    book.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE 书架 SYSTEM "book.dtd">
<书架> 
  <书> 
    <书名>Android</书名>  
    <作者>张三</作者>  
    <售价>39.00元</售价> 
  </书>  
  <书> 
    <书名>JavaScript</书名>;
    <作者>李四</作者>  
    <售价>28.00元</售价> 
  </书>
</书架>

 book.dtd

<!ELEMENT 书架(书+)>
<!ELEMENT 书(书名,作者,售价)>
<!ELEMENT 书名(#PCDATA)>
<!ELEMENT 作者(#PCDATA)>
<!ELEMENT 售价(#PCDATA)>

    3.2dtd校验

    我们写好了约束,自然会有校验,在一些工具中eclipse就会有自动校验功能,但是在浏览器中默认是没有校       验的,那么在浏览器中我们就会解析器校验。

    默认情况下IE浏览器内置的XML解析器的约束校验器是被关闭的,所以我们需要使用JavaScriot手动解析器对     象,打开约束校验功能,对XML进行约束校验

<script>
  var xmldoc=new  ActiveXObject("Microsoft.XMLDOM");//利用javascript创建一个浏览器内置的xml解析器
  xmldoc.validataOnParse=true;//将xml解析器的dtd校验打开
  valdoc.load("book.xml");//装载xml文档
  var reason=xmldoc.parseError.reason;//获取错误信息
  var ling=xmldoc.parseError.line;//获取错误信息
</script>

    3.3dtd语法

    (1)元素

        <!ELEMENT 元素名称 元素约束>

                元素约束:

                          存放类型:ANY/EMPTY

        元素约束:子元素的列表,将可以包含的子元素用小括号括起来

                        子元素之间可以使用逗号进行分隔,表名子元素必须按照顺序出现

                        子元素之间可以使用竖线进行分隔,表面子元素出现其中之一

                        #PCDATA表明包含标签体

                        + 表示一次或多次
* 0次或多次
? 0次或一次

                        多个条件可使用小括号进行组的操作

                   例如:<!ELEMENT MYFILE ((TITLE*,AUTHOR?,EMAIL)*|COMMENT)>

                    MYFILE元素中可以出现(TITLE*,AUTHOR?,EMAIL)出现0次或多次或者COMMENT一次,   

                    在(TITLE*,AUTHOR?,EMAIL)中按顺序TITLE出现0次或多次,AUTHOR出现0次或一次,EMAIL出现

                    一次

    (2)属性

       <!ATTLIST 元素名 
属性名 属性类型 属性约束
属性名2 属性类型  属性约束
......
>

    属性类型:
CDATA:表示属性的值是一个普通字符串
ENUMERATED : 属性的值是一个枚举列表中的值

ID: 表明属性的值必须在整个文档中都是唯一的,如果有重复的id则校验不通过,ID 属性的值只能由字

                母,下划线开始,不能使用数字,不能出现空白字符

    属性约束:
#REQUIRED  --- 表明当前属性是一个必须存在的属性,如果这样的属性不存在则在校验时会报错
#IMPLIED --- 表明当前属性是一个可选的属性,可以有也可以没有

#FIXED '固定值' --- 表明当前属性具有一个固定值,这样的属性不需要进行赋值,自动就会取这个固定

                                        值为值.如果这样的属性指定了一个不是固定值的值则校验报错

'默认值'  ---  表明当前属性具有一个默认值,如果给了其他的值就用其他值,如果没有给值则取这个默

                                    认值

    3)ENTITY(实体)
<!ENTITY >,就是对一大段内容的引用,可以简化代码的复用
引用实体:在xml中引用的实体叫做引用实体
<!ENTITY 实体名称 “实体内容” >
&实体名称;
参数实体:在dtd中引用的实体叫做参数实体
<!ENTITY % 实体名称 "实体内容">

%实体名称;

    Schema约束技术

    (1)用来克服DTD的局限性

    (2)与DTD中的区别

            对名称空间有非常好的支持

            支持更多的数据类型,并且支持用户自定义数据类型

            可以进行语义级别的限定,限定能力大大强于dtd

            相对于dtd不支持实体

            相对于dtd复杂的多,学习成本比较的高

    (3)如何在xml中引入Schema 

        名称空间的概念:全世界独一无二的名字,用来唯一的标识某个资源,通常是公司的域名,只是名字而已并不真 

        的表示资源的位置.

<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
		       targetNamespace="http://www. itcast.cn"
		       elementFormDefault="qualified">
<xs:schema>

    案例:

<?xml version="1.0" encoding="UTF-8"?>

<itcast:书架 xmlns:itcast=“www.itcast.cn”
				xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
				xsi:schemaLocation=“www.itcast.cn  book.xsd">

	<itcast:书>
		<itcast:书名>JavaScript</itcast:书名>
		<itcast:作者>张三</itcast:作者>
		<itcast:售价>28.00元</itcast:售价>
	</itcast:书>
</itcast:书架>

    (4)Schema语法

        基本需要我们弄清楚名称空间,语法就好了解,语法知识可以参考W3C文档。