DTD 示例
DTD 示例与背景
Section titled “DTD 示例与背景”文档类型定义(DTD,Document Type Definitions)是一种定义 XML 文档合法结构和元素的方式。它们为特定 XML 格式提供了基本语法。
虽然 DTD 是早期标准,但 XML Schema 定义(XSD,XML Schema Definition) 是现代、功能更强大且被广泛用于定义 XML 结构、数据类型和约束的标准。XSD 提供更丰富的功能,如数据类型(整数、字符串、日期)、命名空间支持以及更复杂的结构规则。
然而,理解 DTD 对于处理遗留系统或更简单的 XML 格式可能有所帮助。下面是一些演示 DTD 语法的示例。
电视节目表 DTD 示例
Section titled “电视节目表 DTD 示例”这个 DTD 定义了一个简单电视节目表的结构。
<!DOCTYPE TVSCHEDULE [ <!ELEMENT TVSCHEDULE (CHANNEL+)> <!ATTLIST TVSCHEDULE NAME CDATA #REQUIRED>
<!ELEMENT CHANNEL (BANNER, DAY+)> <!ATTLIST CHANNEL CHAN CDATA #REQUIRED>
<!ELEMENT BANNER (#PCDATA)>
<!ELEMENT DAY (DATE, (HOLIDAY | PROGRAMSLOT+)+)> <!ELEMENT DATE (#PCDATA)> <!ELEMENT HOLIDAY (#PCDATA)>
<!ELEMENT PROGRAMSLOT (TIME, TITLE, DESCRIPTION?)> <!ATTLIST PROGRAMSLOT VTR CDATA #IMPLIED>
<!ELEMENT TIME (#PCDATA)> <!ELEMENT TITLE (#PCDATA)> <!ATTLIST TITLE RATING CDATA #IMPLIED LANGUAGE CDATA #IMPLIED>
<!ELEMENT DESCRIPTION (#PCDATA)>]>要点:
TVSCHEDULE必须包含一个或多个 (+)CHANNEL元素。CHANNEL必须包含恰好一个BANNER和一个或多个DAY元素。DAY包含一个DATE,然后是包含一个或多个元素的序列,其中每个元素可以是HOLIDAY或一个或多个PROGRAMSLOT。PROGRAMSLOT中的DESCRIPTION是可选的 (?)。#PCDATA指的是已解析字符数据(文本)。#REQUIRED属性必须存在;#IMPLIED属性是可选的。
报纸文章 DTD 示例
Section titled “报纸文章 DTD 示例”这个 DTD 定义了报纸文章的结构,并包含了实体定义。
<!DOCTYPE NEWSPAPER [ <!ELEMENT NEWSPAPER (ARTICLE+)>
<!ELEMENT ARTICLE (HEADLINE, BYLINE, LEAD, BODY, NOTES)> <!ATTLIST ARTICLE AUTHOR CDATA #REQUIRED EDITOR CDATA #IMPLIED DATE CDATA #IMPLIED EDITION CDATA #IMPLIED>
<!ELEMENT HEADLINE (#PCDATA)> <!ELEMENT BYLINE (#PCDATA)> <!ELEMENT LEAD (#PCDATA)> <!ELEMENT BODY (#PCDATA)> <!ELEMENT NOTES (#PCDATA)>
<!ENTITY NEWSPAPER "Vervet Logic Times"> <!ENTITY PUBLISHER "Vervet Logic Press"> <!ENTITY COPYRIGHT "Copyright 2023 Vervet Logic Press">]>要点:
NEWSPAPER包含一个或多个ARTICLE元素。ARTICLE需要按顺序包含HEADLINE、BYLINE、LEAD、BODY和NOTES。ARTICLE需要一个AUTHOR属性。ENTITY定义创建快捷方式。例如,在符合此 DTD 的 XML 文档中使用的&NEWSPAPER;将被替换为 “Vervet Logic Times”。
产品目录 DTD 示例
Section titled “产品目录 DTD 示例”这个 DTD 展示了更复杂的属性定义,包括枚举类型和默认值。
<!DOCTYPE CATALOG [ <!ELEMENT CATALOG (PRODUCT+)>
<!ELEMENT PRODUCT (SPECIFICATIONS+, OPTIONS?, PRICE+, NOTES?)> <!ATTLIST PRODUCT NAME CDATA #IMPLIED CATEGORY (HandTool | Table | ShopProfessional) "HandTool" PARTNUM CDATA #IMPLIED PLANT (Pittsburgh | Milwaukee | Chicago) "Chicago" INVENTORY (InStock | Backordered | Discontinued) "InStock">
<!ELEMENT SPECIFICATIONS (#PCDATA)> <!ATTLIST SPECIFICATIONS WEIGHT CDATA #IMPLIED POWER CDATA #IMPLIED>
<!ELEMENT OPTIONS (#PCDATA)> <!ATTLIST OPTIONS FINISH (Metal | Polished | Matte) "Matte" ADAPTER (Included | Optional | NotApplicable) "Included" CASE (HardShell | Soft | NotApplicable) "HardShell">
<!ELEMENT PRICE (#PCDATA)> <!ATTLIST PRICE MSRP CDATA #IMPLIED WHOLESALE CDATA #IMPLIED STREET CDATA #IMPLIED SHIPPING CDATA #IMPLIED>
<!ELEMENT NOTES (#PCDATA)>
<!ENTITY AUTHOR "John Doe"> <!ENTITY COMPANY "JD Power Tools, Inc."> <!ENTITY EMAIL "jd@jd-tools.com">]>要点:
PRODUCT元素的属性具有枚举的可能值(例如,CATEGORY只能是列出的选项之一)。- 为某些属性提供了默认值(例如,如果省略
CATEGORY,则默认为 “HandTool”)。 SPECIFICATIONS必须出现一次或多次 (+)。OPTIONS和NOTES是可选的 (?)。