00 01Java Web开发之DTD(文档定义类型)

1 DTD快速入门

(1)创建一个文件,后缀名为.dtd。
(2)dtd文件应该使用utf-8或unicode编码。
(3)步骤:
|——(a)看xml中有多少个元素,有几个元素,在dtd文件中写几个<!ELEMENT>
|——(b)判断元素是简单元素还是复杂元素。
|————简单元素:没有子元素;
|——————<!ELEMENT 元素名称 (子元素)>
|————复杂元素:有子元素。
|——————<!ELEMENT 元素名称 (#PCDATA)>
|——(c)需要在xml文件中引入dtd文件
|————<!DOCTYPE 根元素名称 SYSTEM "dtd稳健的路径">
(4)打开xml文件使用的是浏览器,浏览器只负责校验xml语法,不校验约束。如果想要校验xml的约束,需要使用工具。

2 DTD的引入方式

(1)引入外部的dtd文件:<!DOCTYPE 根元素名称 SYSTEM "dtd文件路径">
(2)使用内部的dtd文件:

<!DOCTYPE 根元素名称[
       dtd文件内容
]>

(2)使用外部的dtd文件(网络上的dtd文件):<DOCTYPE 根元素名称 PUBLIC "DTD名称" "DTD文档的URL">,在框架struts2使用配置文件会使用外部dtd文件。

3 使用DTD定义元素

(1)语法格式:<!ELEMENT 元素名 约束>
(2)简单元素:没有子元素的元素。语法:<!ELEMENT 元素名称 (#PCDATA)>
|——(#PCDATA):约束元素为字符串类型。
|——EMPTY:元素为空(没有内容)
|——ANY:任意内容
(3)复杂元素:有子元素的元素。语法:<!ELEMENT 元素名称 (子元素)>.
|——子元素只能出现一次。
|——表示子元素出现的次数
|————+:表示一次或多次。
|————?:表示一次或零次。
|————*:零次或多次。
(4)子元素直接使用逗号“,”进行隔开
|——表示元素出现顺序。
(5)子元素直接使用竖线“|”隔开
|——表示元素只能出现其中的任意一个

4 使用DTD定义属性

(1)语法格式:

<!ATTLIST 元素名称
    属性名称 属性类型 属性的约束
>

(2)属性类型:
|——CDATA:字符串。
|——枚举:表示只能在一定的范围内出现值,但是只能每次出现其中的一个。如(aa | bb | cc)。
|——ID:值只能是字母或下划线开头。
(3)属性的约束:
|——#REQUIRED:属性必须存在。
|——#IMPLIED:属性可有可无。
|——#DIXED:表示一个固定值。
|——直接值:不写属性就是这个直接值。

<!ATTLIST school
        ID1 CDATA #REQUIRED  →表示定义一个属性ID1,属性类型为字符串,属性值必须提供
        ID2 ID #IMPLIED  →表示定义一个属性ID2,属性类型为ID,属性值可提供可不提供
        ID3 (a | b | c) #FIXED "a"  →表示定义一个属性ID3,属性类型为枚举类型,属性值为固定值“a“
        ID4 CDATA "hello"  →表示定义一个属性ID4,属性类型为字符串,属性直接值为”hello“
    >
<?xml version="1.0" encoding="UTF-8"?>
<!-- <!DOCTYPE person SYSTEM "one.dtd"> -->
<!DOCTYPE person[
    <!ELEMENT person (name, age, sex, school)>
    <!ELEMENT name (#PCDATA)>
    <!ELEMENT age (#PCDATA)>
    <!ELEMENT sex EMPTY>
    <!ELEMENT school ANY>
    <!ATTLIST school
        ID1 CDATA #REQUIRED  
        ID2 ID #IMPLIED  
        ID3 (a | b | c) #FIXED "a"  
        ID4 CDATA "hello"  
    >
]>
<person>
   <name>lks</name>
   <age>15</age>
   <sex></sex>
   <school ID1="HHY" ID2="_hello" ID3="a"></school>
</person>

5 定义实体

(1)语法:<!ENTITY 实体名称 "实体的值">
(2)使用实体:&实体名称;
(3)注意:
|——定义的实体需要写在内部dtd里面,如果写在外部的dtd里面,在某些浏览器下,内容可能会获取失败。

6 W3C的案例

练习如下:根据dtd文件写出一种xml文件。

<!ELEMENT TVSCHEDULE (CHANNEL+)>
<!ELEMENT CHANNEL (BANNER,DAY+)>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE,(HOLIDAY|PROGRAMSLOT+)+)>
<!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME,TITLE,DESCRIPTION?)>
<!ELEMENT TIME (#PCDATA)>
<!ELEMENT TITLE (#PCDATA)> 
<!ELEMENT DESCRIPTION (#PCDATA)>

<!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ATTLIST TITLE RATING CDATA #IMPLIED>
<!ATTLIST TITLE LANGUAGE CDATA #IMPLIED>

实现如下:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE TVSCHEDULE SYSTEM "TV.dtd">
<TVSCHEDULE NAME="lks">
    <CHANNEL CHAN="love">
        <BANNER>hhy, i love you!</BANNER>
        <DAY>
            <DATE>2020-03-03</DATE>
            <HOLIDAY>2020-03-05</HOLIDAY>
        </DAY>
        <DAY>
            <DATE>2020-01-02</DATE>
            <PROGRAMSLOT VTR="hello">
                <TIME>2020</TIME>
                <TITLE RATING="forever" LANGUAGE="Chinese">I love you</TITLE>
                <DESCRIPTION>hhy</DESCRIPTION>
            </PROGRAMSLOT>
        </DAY>
    </CHANNEL>
</TVSCHEDULE>
发布了77 篇原创文章 · 获赞 11 · 访问量 2645

猜你喜欢

转载自blog.csdn.net/weixin_43762330/article/details/104532502