编写XML文件的dtd约束

一、了解dtd中的语法规则

1、元素声明:

<!ELEMENT 元素名称 类别> <!ELEMENT 元素名称 (元素内容)>

如:

<!ELEMENT factory EMPTY> ,表示空元素
<!ELEMENT id (#PCDATA)>,元素内容为普通的文本,也就是被解析的字符数据

<!ELEMENT 元素名称 (子元素名称1 | 子元素名称2)>,带有子元素的写法
<!ELEMENT 元素名称 (子元素名称1,子元素名称 2)>,带有子元素的写法

<!ELEMENT books (book+)>,相同的元素至少出现一次

<!ELEMENT books  (book*)>,同元素不出现或者多次出现

<!ELEMENT books (book?)>,同元素不出现或者出现一次

2、属性

<!ATTLIST 元素名称 属性名称 属性类型 默认值>

属性的默认值
#REQUIRED 属性值是必需的
#IMPLIED 属性不是必需的
#FIXED value 属性值是固定的
如:

<!ATTLIST book
alias CDATA #REQUIRED>

二、写出想要的xml文件内容

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

<books>
    <factory name="北京出版社" />

    <book alias="java">
        <id>111111</id>
        <name>java核心思想</name>
        <author>张圣诞</author>
    </book>

    <book alias="linux">
        <id>2222</id>
        <name>linux私房菜</name>
        <author>李四</author>
    </book>
</books>

三、根据xml文件格式推导出dtd的编写

1、声明所有元素

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

<!ELEMENT books ()>

<!ELEMENT factory EMPTY>

<!ELEMENT book ()>

<!ELEMENT id (#PCDATA)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT author (#PCDATA)>

2、区分复杂元素和简单元素
复杂元素:有子元素
简单元素:没有子元素

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

<!ELEMENT books (book+,factory?)+>

<!ELEMENT factory EMPTY>

<!ELEMENT book (id,name,author)>

<!ELEMENT id (#PCDATA)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT author (#PCDATA)>

3、给元素增加属性

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

<!-- book出现一次或者多次 -->
<!ELEMENT books (book+ | factory?)+ >

<!ELEMENT factory EMPTY>
<!-- name属性不是必须的 -->
<!ATTLIST factory
name CDATA #IMPLIED>

<!-- id、name、author必须出现一次 -->
<!ELEMENT book (id,name,author)>
<!-- alias属性是必须的 -->
<!ATTLIST book
alias CDATA #REQUIRED>

<!-- 元素内容是被解析的字符数据 -->
<!ELEMENT id (#PCDATA)>

<!ELEMENT name (#PCDATA)>

<!ELEMENT author (#PCDATA)>

四、在xml文件中引用dtd

(xml文件是跟dtd文件放在一个目录下)
1、dtd分为两种方式:
<1>内部dtd
将dtd内容写入到xml文件内部,只能当前文件使用;
<2>外部dtd
dtd作为单独文件存在,引入方式又分为两钟,
第一种:
SYSTEM表示DTD文件是私有的;
第二种:
PUBLIC表示DTD文件是公共的,注意在PUBLIC之后,还多了一个DTD的名称。
3、以taglib的dtd为例:

<1>关键字:DOCTYPE、PUBLIC;
<2>根元素名:taglib。每一个标签库定义文件都是以taglib为根元素的,否则就不会验证通过。
<3>"-//Sun Microsystems, Inc.//DTD JSP Tag Library 1.2//EN":
这是公共DTD的名称。这个东西命名是有些讲究的。
首先它是以"-"开头的,表示这个DTD不是一个标准组织制定的。(如果是ISO标准化组织批准的,以“ISO”开头,如果不是ISO的标准化组织批准的,以“+”开头。)。
接着就是双斜杠“//”,跟着的是DTD所有者的名字,很明显这个DTD是sun公司定的。
接着又是双斜杠“//”,然后跟着的是DTD描述的文档类型,可以看出这份DTD描述的是jsp 标签库1.2版本的格式。
再跟着的就是“//”和ISO 639语言标识符。
<4>“http://java.sun.com/dtd/web-jsptaglibrary_1_2.dtd”:表示这个DTD的位置。

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE books SYSTEM "mydtd.dtd">

<books>
    <factory name="北京出版社" />

    <book alias="java">
        <id>111111</id>
        <name>java核心思想</name>
        <author>张圣诞</author>
    </book>

    <book alias="linux">
        <id>2222</id>
        <name>linux私房菜</name>
        <author>李四</author>
    </book>
</books>

参考资料:https://blog.csdn.net/zark721/article/details/78692844

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值