XML可扩展标记语言

目录

 

XML相关概念

什么是XML约束?

为什么需要XML约束?

XML有什么用?

约束的分类

DTD约束

schema约束


XML相关概念

什么是XML约束?

在XML技术里,可以编写一个文档来约束一个XML文档的书写规范(与xml语法无关),这称之为XML约束。

为什么需要XML约束?

为了保证数据的规范性和安全性。

XML有什么用?

(1)可以用来保存数据

(2)可以用来做配置文件

(3)数据传输载体

约束的分类

(1)DTD约束:语法简洁,共能比较单一。

(2)Schema约束:语法复杂,功能比较强大。

DTD约束

DTD概述

DTD(Document Type Definition,文档类型定义)  

1)DTD是一套关于标记符的语法规则。它是XML1.0版规格的一部分,是XML文件的验证机制,属于XML文件组成的一部分。  

2)XML文件提供应用程序一个数据交换的格式,DTD正是让XML文件能够成为数据交换的标准,因为不同的公司只需定义好标准的DTD,    

3)各公司都能够依照DTD建立XML文件,并且进行验证,如此就可以轻易的建立标准和交换数据,这样满足了网络共享和数据交互。  

4)DTD中的所有约束都是针对 与某个标签的子标签进行约束的

DTD的目的

验证XML文档是不是一个有效的XML文档。  

有效:如果一个良构的XML文档满足了dtd的声明,就是一个有效的XML文档。有效一定良构,良构不一定有效

DTD约束原理

 

:通过DTD约束,XML就能在DTD的约束下进行自定义了,不过DTD有个缺点,那就是不能对数据进行数值约束这种范围约束

XML文档引入DTD的方式

引入内部DTD

<!DOCTYPE 根元素[
    DTD验证规则/实体定义...
]>

DTD代码与XML代码在同一个文件中 

约束元素

1. 元素类型

和java语法意义,元素也是有类型区分的,元素有以下几种类型:

1)EMPTY(空元素),元素不包含任何数据(就是空标签< img />),但是可以有属性。

2)#PCDATA(只有PCDATA的元素),PCDATA是指被解析器解析的文本(字符串内容),不能包含其他类型的元素。例如(< p>这是字符串,不包含其他标签< /p>)

3)ANY(任何内容都可以)

2. 元素出现顺序和数量

注意符号: |  +  *  ?

项目书写语法描述
顺序出现< !ELEMENT name(a,b)>子元素a,b必须同时出现,且a必须在b之前出现
选择出现< !ELEMENT name(a|b)>子元素啊,b只能有一个出现,要么是a要么是b
只能出现一次< !ELEMENT name(a)>子元素只能且必须出现一次
一次或者多次< !ELEMENT name(a)+>子元素a要么出现一次,要么出现多次
零次或者多次< !ELEMENT name(a)*>子元素a可以出现任意次(包括不出现,即出现零次)
零次或者一次< !ELEMENT name(a)?>子元素a可以出现一次或者不出现

3. 元素格式

< !ELEMENT 元素名称 元素类型>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE notes [
        <!ELEMENT notes (note)*>
        <!ELEMENT note (to,from,heading,body)>
        <!ELEMENT to (#PCDATA)>
        <!ELEMENT from (#PCDATA)>
        <!ELEMENT heading (#PCDATA)>
        <!ELEMENT body (#PCDATA)>
        ]>
<notes>
    <note>
        <to></to>
        <from></from>
        <heading></heading>
        <body></body>
    </note>
    
    <note>
        <to></to>
        <from></from>
        <heading></heading>
        <body></body>
    </note>
</notes>

约束属性

属性值类型

1)CDATA,属性值为普通文本字符串。(cdata)

2)ENUMERATED,属性值的类型是一组取值的列表,XML文件中设置的属性值只能是这个列表中的某一个值。就好比java中的枚举类型,只能是其中的某个枚举值。(enumerated)

3)ID,表示属性值必须唯一

4)IDREF:对某些具有ID属性的元素的引用,这些元素的ID属性值必须与IDREF属性的值相同。(idref)

5)IDREFS:含义:若干以空格分隔的IDREF。(idrefs)

设置说明

1)#REQUIRED,必须设置该属性。(required)

2)#IMPLIED,该属性可以设置也可以不设置。(implied)

3)#FIXED,该属性的值为固定的。(fixed)

4)使用默认值。(default) 属性格式

< !ATTLIST 元素名 属性名 属性值类型 设置说明>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE persons[
        <!ELEMENT persons (person)*>
        <!ELEMENT person (name,age,contact,br)>
        <!ELEMENT name (#PCDATA)>
        <!ELEMENT age (#PCDATA)>
        <!ELEMENT contact (phone|email)>
        <!ELEMENT phone (#PCDATA)>
        <!ELEMENT email (#PCDATA)>
        <!ELEMENT br EMPTY>
        <!ATTLIST person
                pid ID #REQUIRED
                sex (男|女) '男'
                qq CDATA #IMPLIED
                parent IDREF #IMPLIED
                >
        ]>
<persons>
    <person pid="p1" sex="男" qq="aaa" parent="p2">
        <name>张小明</name>
        <age>10</age>
        <contact>
            <phone>1234567</phone>
        </contact>
        <br/>
    </person>
    <person pid="p2">
        <name>张大明</name>
        <age>35</age>
        <contact>
            <email>123@qq.com</email>
        </contact>
    </person>
</persons>

引入外部DTD

(1)当引用的文件在本地时:

< !DOCTYPE 根元素 SYSTEM "DTD文件路径">  

(2)当引用文件是一个公共文件(DTD文件存在于远程服务器上)时:

< !DOCTYPE 根元素 PUBLIC "DTD名称" "DTD文件的URL">

schema约束

schema概述

(1)XML schema也是一个xml文件,其扩展名通常为.xsd。(xsd文件其实也和xml文件一样,有根)

(2)XML schema文档必须有一个根节点,并且这个根节点固定为< Schema>

(3)一个XML Schema,通常称为模式文档(约束文档),遵循这个文档写的xml称之为实例文档。

(4)编写一个约束文档后,通常需要把则个文件中声明的元素绑定到一个URI地址上,即定义为一个命名空间,以后xml文件就可以通过这个URI(命名空间)来告诉解析引擎,xml文档中编写的元素来自哪里,被谁约束。

实例

XML Schema文件如下:具体语法先省略,先弄明白根元素中的属性的含义。

<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
        targetNamespace="http://www.example.org/NewXMLSchema"
        xmlns:tns="http://www.example.org/NewXMLSchema"
        elementFormDefault="qualified">
    <element name="书架"> <!--声明<书架>元素-->
        <complexType><!--声明<书架>元素为复杂类型-->
            <sequence maxOccurs="unbounded"><!--声明<书架>元素 sequence-有顺序; maxOccurs-无上限-->
                <element name="书"><!--声明<书>元素-->
                    <complexType>
                        <sequence>
                            <element name="书名" type="string"></element><!--声明<书名>等元素的类型为string-->
                            <element name="作者" type="string"></element>
                            <element name="售价" type="string"></element>
                        </sequence>
                    </complexType>
                </element>
            </sequence>
        </complexType>
    </element>
</schema>

xmlns引入命名空间(namespace):默认是W3C的。这个默认引用,只能出现一次。非默认引用需要加别名:如 xmlns:tns="http://www.example.org/NewXMLSchema" ,增加了别名 tns 。一个文档可以引入多个命名空间。

targetNamespace定义命名空间,其实Xml Schema的本质就是定义一个命名空间,供其他XML引用。这边的命名空间定义为URI为 "http://www.example.org/NewXMLSchema" ,引用的时候也必须是这个。

elementFormDefault控制元素。有两个取值:"qualified"-定义的所有元素都绑定为这个命名空间; unqualified:表示只有根元素绑定为这个命名空间。

attributeFormDefault控制属性的。用法与elementFormDefault一样。引用这个XMLSchema 的XML文件如下

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

<书架 xmlns="http://www.example.org/NewXMLSchema"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation = "http://www.example.org/NewXMLSchema/NewXMLSchema.xsd">

    <书>
        <书名>XML基础</书名>
        <作者>SAM-SHO</作者>
        <售价>28.00元</售价>
    </书>
</书架>

xmlns:引入命名空间,默认使用方法(也可以使用别名)。这个地址只是"虚"的路径,需要 schemaLocation具体指定位置

schemaLocation:辅助xmlns引入“实”的命名空间,指定具体的命名空间所指向的文件,需要具体路径。2部分组成:定义好的命名空间路径 + 具体schema文件的路径

xsi:schemaLocation的使用用到了xsi,所以使用xmlns:xsi指定为来自的命名空间为 W3C,固定用法。

把CSS引入XML文件

css文件

c1{    
    font-size:200px;    
    color:red;
}
c2{    
    font-size:150px;    
    color:green;
}
c3{    
    font-size:100px;    
    color:#ccc;
}
c4{    
        font-size:130px;    
    	color:blue;
}

XML文件

<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/css" href="css1.css"?>
<Country>
    <c1>aaa</c1>
    <c2>bbb</c2>
    <c3>ccc</c3>
</Country>

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值