XML约束

傷城~ 2022-07-16 06:16 304阅读 0赞

相关阅读

  1. XML约束
  2. Xml 格式数据的生成和解析
  3. XML解析器

XML约束概述

一个XML文档一旦有了约束,那么这个XML文档就只能使用约束中创建的元素及属性。如果约束没有创建< a >元素,那么XML文档就不能使用< a >元素!!!

什么是xml约束

因为xml文档是可以自定义元素的,这会让使用xml文档的应用程序无法知道xml文档的真实结构。通常应用程序都会要求xml文件的结构是固定的,以满足自己的需求,这就说明,不同的应用程序要求自己的xml文档必须符合一定的要求。

例如,当使用xml文档作为某个Java swing应用程序的配置文件时,要求xml文档结构如下:

  1. <frame title="test xml" layout="java.awt.BorderLayout">
  2. <bgcolor>
  3. <red>200</red>
  4. <green>0</green>
  5. <blue>0</blue>
  6. </bgcolor>
  7. <size>
  8. <width>300</width>
  9. <heigth>200</heigth>
  10. </size>
  11. <content>
  12. <label>
  13. <text>hello xml</text>
  14. <label>
  15. </content>
  16. </frame>

当某个学生管理系统程序需要使用xml文档作为数据库时,要求xml文档结构如下

  1. <?xml version="1.0" encoding="utf-8" standalone="no"?>
  2. <students>
  3. <student number="1001">
  4. <name>zhangSan</name>
  5. <age>23</age>
  6. <sex>male</sex>
  7. </student>
  8. <student number="1002">
  9. <name>liSi</name>
  10. <age>32</age>
  11. <sex>female</sex>
  12. </student>
  13. <student number="1003">
  14. <name>wangWu</name>
  15. <age>55</age>
  16. <sex>male</sex>
  17. </student>
  18. </students>

xml文档约束是用另一个文件来约束xml文档的结构,例如要求xml文档的根元素必须是< students >,在< students >元素下可以包含0~n个< student >元素,每个< student >元素必须有一个number属性,而且还要有三个子元素,分别为< name >、< age >、< sex >,这三个子元素的内容必须为文本内容,而不能是子元素

XML文档约束的类型

xml文档约束有两种类型:dtd和schema

  • dtd:dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束;
  • schema:schema本身也是xml文档,它比dtd要更加强大,通常扩展名为“.xsd”。它是新的xml文档约束,用来替代dtd。

DTD是老的XML约束,Schema是新的,用Schema替换掉DTD

DTD

DTD(Document Type Definition),文档类型定义,用来约束XML文档。例如要求xml文档的根元素必须是,在元素下可以包含0~n个元素,每个元素必须有一个number属性,而且还要有三个子元素,分别为、、,这三个子元素的内容必须为文本内容,而不能是子元素。

1、DTD展示

  1. <!ELEMENT students (student+)>
  2. <!ELEMENT student (name,age,sex)>
  3. <!ELEMENT name (#PCDATA)>
  4. <!ELEMENT age (#PCDATA)>
  5. <!ELEMENT sex (#PCDATA)>

解读上面DTD:

  • students元素中可以包含1~n个student元素;
  • student元素中必须包含name、age、sex元素,而且顺序也是固定的;
  • name元素内容为文本,即字符串;
  • age元素内容为文本;
  • sex元素内容为文本。

2、在XML文档中指定本地DTD

  1. <?xml version="1.0" encoding="utf-8" standalone="no" ?>
  2. <!DOCTYPE students SYSTEM "students.dtd">
  3. <students>
  4. <student>
  5. <name>zhangSan</name>
  6. <age>23</age>
  7. <sex>male</sex>
  8. </student>
  9. </students>
  10. <!ELEMENT students (student+)>
  11. <!ELEMENT student (name, age, sex)>
  12. <!ELEMENT name (#PCDATA)>
  13. <!ELEMENT age (#PCDATA)>
  14. <!ELEMENT sex (#PCDATA)>

其中,表示指定dtd文件。
指定DTD的语法:

  • 指定DTD的语法,以“”结束;
  • students表示根元素;
  • SYSTEM表示dtd文件在本地;
  • “students.dtd”表示DTD文件路径。

3、在XML文档中指定内部DTD

  1. <?xml version="1.0" encoding="utf-8" standalone="no" ?>
  2. <!DOCTYPE students [ <!ELEMENT students (student+)> <!ELEMENT student (name, age, sex)> <!ELEMENT name (#PCDATA)> <!ELEMENT age (#PCDATA)> <!ELEMENT sex (#PCDATA)> ]>
  3. <students>
  4. <student>
  5. <name>zhangSan</name>
  6. <age>23</age>
  7. <sex>male</sex>
  8. </student>
  9. </students>

4、在XML文档中指定外部公共DTD

  1. <?xml version="1.0" encoding="utf-8" standalone="no" ?>
  2. <!DOCTYPE students PUBLIC "-//qdmmy6//DTD ST 1.0//ZH" "http://www.qdmmy6.com/xml/dtds/st.dtd">
  3. <students>
  4. <student>
  5. <name>zhangSan</name>
  6. <age>23</age>
  7. <sex>male</sex>
  8. </student>
  9. </students>

外部公共DTD是说,DTD由某个公司或权威组织发布,例如如下:

当然你需要知道要使用的DTD的名称和网址。如果某个机构公布了DTD,那么一定也会公布DTD的名称和网址。
上面例子中的公共DTD是不存在的。

DTD定义元素

1、定义元素的语法

使用ELEMENT声明元素:<!ELEMENT 元素名 内容类型或内容>
例如:<!ELEMENT name (#PCDATA)>
表示name元素的内容为文本数据

2、元素类型

元素类型可以是ANY或EMPTY

<!ELEMENT stu ANY>:表示stu元素的内容可以是任意元素,也可以是文本数据,也可以是文本数据+子元素,反正就是任意。

<!ELEMENT stu EMPTY>:表示stu不能有任何内容,即空元素。例如:。

3、元素内容

元素内容可以是文本数据,也可以是子元素
<!ELEMENT stu (#PCDATA)>表示stu元素内容为文本,例如:hello   

4、子元素出现次数

可以使用“?”、“*”、“+”来指定子元素的出现次数
<!ELEMENT stu (name?)>表示stu元素可以有0~1个name子元素,即name子元素可有可无。
<!ELEMENT stu(name*)>表示stu元素可以有0~n个name子元素;
<!ELEMENT stu(name+)>表示stu元素可以有1~n个name子元素。

5、多个子元素

<!ELEMENT stu (name,age,sex)>表示stu必须有三个子元素,分别是name、age、sex,并且子元素出现的顺序也要与声明的顺序一致。

6、枚举子元素

<!ELEMENT stu (name | age | sex)表示stu只有一个子元素,可以是name、age、sex中的任意一个。

7、复合声明1

<!ELEMENT stu (name | age | sex)?>表示stu元素可以有0~1个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

  1. <stu></stu>
  2. <stu><name/></stu>
  3. <stu><age/></stu>
  4. <stu><sex/></stu>

8、复合声明2

<!ELEMENT stu (name | age | sex)*>表示stu元素可以有0~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

  1. <stu></stu>
  2. <stu><name/><name/></stu>
  3. <stu><name/><age/><age/></stu>
  4. <stu><name/><age/><name/><sex/><sex/></stu>

9、复合声明3

<!ELEMENT stu (name | age | sex)+>表示stu元素可以有1~n个(name | age | sex),而(name | age | sex)表示name、age、sex其中的一个。

  1. <stu><age/></stu>
  2. <stu><name/><name/></stu>
  3. <stu><name/><age/><age/></stu>
  4. <stu><name/><age/><name/><sex/><sex/></stu>

10、练习

  1. <!DOCTYPE 课件 [ <!ELEMENT 章节 (简介, (标题, (段落 | 图片 | 表格 | 说明)+)+)> <!ELEMENT 简介 (#PCDATA)> <!ELEMENT 标题 (#PCDATA)> <!ELEMENT 段落 (#PCDATA)> <!ELEMENT 图片 (#PCDATA)> <!ELEMENT 表格 (#PCDATA)> <!ELEMENT 说明 (#PCDATA)> <!ELEMENT 课件 (章节+)>]>

  根据上面DTD写xml文档!!!

DTD属性定义

1、属性定义的格式

Attribute List

<!ATTLIST 元素名
  属性名1 属性类型 设置说明
  属性名2 属性类型 设置说明
  …>
<!ATTLIST student number CDATA #REQUIRED>表示student元素的number为文本类型,这个属性是必须的。

最常见的属性类型:CDATA,表示文本类型;
最常见的设置说明1:#REQUIRED,表示属性是必须的。
最常见的设置说明2:#IMPLIED,表示属性是可选的。

2、属性类型

  • CDATA:属性值为任意文本数据;
  • Enumerated:属性值必须是枚举列表中的一个;
  • ID:属性值必须是唯一的,并且属性值不能以数字开头;

3、CDATA属性类型

CDATA,即Character Data(字符数据)。表示属性的类型为字符类型!
<!ATTLIST student number CDATA #REQUIRED>表示student元素的number属性是字符数据类型,并且是必须属性。

4、Enumerated属性类型

Enumerated不是关键字,定义枚举类型的属性需要给出枚举列表。当属性值为枚举类型时,那么这个属性的取值必须是枚举列表中的一个值。
<!ATTLIST student sex (male | female) #IMPLIED> 表示student的sex属性取值必须是male或者是female。并且这个属性是可选的。

5、ID属性类型

一个元素最多只能有一个ID 属性,ID属性用来表示元素唯一性的唯一标识。ID属性就相当与元素的身份证号,必须是唯一标识!
如果把student元素的number属性设定为ID类型,那么每个student元素的number属性值必须是唯一的,并且ID类型的属性值不能以数字开头。

  1. <student number=”czbk_1001”/>
  2. <student number=”czbk_1002”/>

注意:不能以数字开头。

如果元素有一个ID属性a
如果元素有一个ID属性b

  1. <a a=”abc”/>
  2. <b b=”abc”/>

上面也是错误的,因为ID属性的值是不可以相同的。

6、设置说明

  • #REQUIRED:表示属性是必须的;
  • #IMPLIED:表示属性是可选的,即这个属性可以不给出;

发表评论

表情:
评论列表 (有 0 条评论,304人围观)

还没有评论,来说两句吧...

相关阅读

    相关 XML 约束

    > 一个 XML 文档一旦有了约束,那么这个 XML 文档就只能使用约束中创建的元素及属性。如果约束没有创建 `<a>` 元素,那么 XML 文档就不能使用 `<a>` 元素。

    相关 XML约束

    相关阅读 1. [XML约束][XML] 2. [Xml 格式数据的生成和解析][Xml] 3. [XML解析器][XML 1] XML约束概述 一个XML

    相关 XML约束

    一、什么是xml约束 在XML技术里,可以编写一个文档约束一个XML文档的书写规范,这称之为XML约束。 常用的XML约束技术: 1. XML DTD 2. X

    相关 XML约束

    一、什么是xml约束 在XML技术里,可以编写一个文档约束一个XML文档的书写规范,这称之为XML约束。 常用的XML约束技术: 1. XML DTD 2. X

    相关 XML——Schema约束

    一、Schema约束快速入门 1、 XML Schema文件自身就是一个XML文件,但它的扩展名通常为.xsd。 2、一个XML Schema文档通常称之为模式文档(约

    相关 XML约束

    xml约束:规定在xml文件中可以写什么不可以写什么。 dtd约束 内部dtd:在xml内部定义dtd 外部dtd:在外部文件中定义dtd