欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

编写XML文件的dtd约束

程序员文章站 2022-05-30 13:16:21
...

一、了解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文件放在一个目录下

<?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>
相关标签: dtd