xml约束的概述和DTD的引入

--------------------------------------------xml约束的概述和DTD的引入-----------------------------------------

XML约束

1. XML约束概述

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

1 什么是xml约束

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

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

<frame title="test xml" layout="java.awt.BorderLayout">

  <bgcolor>

    <red>200</red>

    <green>0</green>

    <blue>0</blue>

  </bgcolor>

  <size>

    <width>300</width>

    <heigth>200</heigth>

  </size>

  <content>

    <label>

      <text>hello xml</text>

    <label>

  </content>

</frame>

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

<?xml version="1.0" encoding="utf-8" standalone="no"?>

<students>

       <student number="1001">

              <name>zhangSan</name>

              <age>23</age>

              <sex>male</sex>

       </student>

       <student number="1002">

              <name>liSi</name>

              <age>32</age>

              <sex>female</sex>

       </student>

       <student number="1003">

              <name>wangWu</name>

              <age>55</age>

              <sex>male</sex>

       </student>

</students>

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

2 XML文档约束的类型

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

l  dtd:dtd是平面式文档,dtd文件不是xml文档,通常扩展名为“.dtd”。它是最早的xml约束;

l  schema:schema本身也是xml文档,它比dtd要更加强大,通常扩展名为“.xsd”。它是新的xml文档约束,用来替代dtd。

DTD是老的XML约束

Schema是新的,用Schema替换掉DTD

会读即可!

2. DTD

1 什么是DTD

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

2 DTD展示

<!ELEMENT students (student+)>

<!ELEMENT student (name,age,sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

解读上面DTD:

l  students元素中可以包含1~n个student元素;

l  student元素中必须包含name、age、sex元素,而且顺序也是固定的;

l  name元素内容为文本,即字符串;

l  age元素内容为文本;

l  sex元素内容为文本。

代码示例

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

<!DOCTYPE students [

    <!ELEMENT students (student+)>

    <!ELEMENT student (name, age, gender)>

    <!ELEMENT name (#PCDATA)>

    <!ELEMENT age (#PCDATA)>

    <!ELEMENT gender (#PCDATA)>

]>

<students>

    <student>

        <name>张三</name>

        <age>20</age>

        <gender></gender>

    </student>

    <student>

        <name>李四</name>

        <age>21</age>

        <gender></gender>

    </student>

</students>

3 在XML文档中指定本地DTD

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<!DOCTYPE students SYSTEM "students.dtd">

<students>

       <student>

              <name>zhangSan</name>

              <age>23</age>

              <sex>male</sex>

       </student>

</students>

<!ELEMENT students (student+)>

<!ELEMENT student (name, age, sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

其中<!DOCTYPEstudents SYSTEM "students.dtd">,表示指定dtd文件。

指定DTD的语法:<!DOCTYPE 根元素 SYSTEM "DTD文件路径">

l  指定DTD的语法,以“<!DOCTYPE”开头,以“>”结束;

l  students表示根元素;

l  SYSTEM表示dtd文件在本地;

l  "students.dtd"表示DTD文件路径。

DTD中的顺序是不能颠倒使用的

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

<!DOCTYPE students SYSTEM "demo1.dtd">

<students>

    <student>

        <name/>

        <age/>

        <gender/>

    </student>

</students>

 

 

4 在XML文档中指定内部DTD

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<!DOCTYPE students [

<!ELEMENT students (student+)>

<!ELEMENT student (name, age, sex)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT age (#PCDATA)>

<!ELEMENT sex (#PCDATA)>

]>

<students>

       <student>

              <name>zhangSan</name>

              <age>23</age>

              <sex>male</sex>

       </student>

</students>

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

<?xml version="1.0" encoding="utf-8" standalone="no" ?>

<!DOCTYPE students PUBLIC "-//rlteach//DTD ST 1.0//ZH" "http://www.rlteach.com/xml/dtds/st.dtd">

<students>

       <student>

              <name>zhangSan</name>

              <age>23</age>

              <sex>male</sex>

       </student>

</students>

代码示例:

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

<!DOCTYPE configuration

PUBLIC "-//mybatis.org//DTD Config 3.0//EN"

"http://mybatis.org/dtd/mybatis-3-config.dtd">

<configuration>

<environments default="">

    <environment id="">

        <transactionManager type=""></transactionManager>

        <dataSource type=""></dataSource>

    </environment>

</environments>

</configuration>

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

<!DOCTYPE 根元素 PUBLIC "DTD名称" "DTD网址">

当然你需要知道要使用的DTD的名称和网址。如果某个机构公布了DTD,那么一定也会公布DTD的名称和网址。

上面例子中的公共DTD是不存在的。

在eclipse中的配置


重新开启配置文件即可。

猜你喜欢

转载自blog.csdn.net/weixin_41547486/article/details/80881507