编写XML文件的dtd约束

xiaoxiao2025-07-10  13

一、了解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

转载请注明原文地址: https://www.6miu.com/read-5032838.html

最新回复(0)