首页 > 解决方案 > 从规范解释 DTD

问题描述

我得到以下规格:

• 有一个称为产品的根元素

• products 元素包含一系列产品子元素,一个对应于数据库中的每个产品

• 每个产品元素包含一个名称、一个价格和一个描述子元素,以及一系列商店子元素,每个销售该产品的商店都有一个:

• 每个商店元素包含一个名称、一个电话和一个标记。

到目前为止,我想出了这个:

<?xml version="1.0"?>
<!DOCTYPE exercise 3 [
<!ELEMENT products (pid, name, price, description, stores)>
<!ELEMENT pid (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT stores (store_name, phone, markup)>
<!ELEMENT store_name (#PCDATA)>
<!ELEMENT phone (#PCDATA)>
<!ELEMENT markup (#PCDATA)>

你认为这个 DTD 符合规范吗?

标签: xmldtd

解决方案


关于您的 DTD 的一些评论:

  1. 在 doctype 声明<!DOCTYPE exercise 3 [中,名称应该与根元素相同,exercise 3因此应该是products. 但是,如果此 DTD 是外部文件,则不需要 doctype。如果您的 DTD 和 XML 结合在一起,您会想要使用它。有关更多详细信息,请参阅https://stackoverflow.com/a/5455469/317052
  2. 元素名称不需要是唯一的,因此您可以拥有一个name可以同时用于product和的元素store

这是我根据规范要做的事情......

• 有一个称为产品的根元素

• products 元素包含一系列产品子元素,一个对应于数据库中的每个产品

<!ELEMENT products (product*)>

• 每个产品元素包含一个名称、一个价格和一个描述子元素,以及一系列商店子元素,每个销售该产品的商店都有一个:

<!ELEMENT product (name, price, description, store*)>

• 每个商店元素包含一个名称、一个电话和一个标记。

<!ELEMENT store (name, phone, markup)>

这是完整的 DTD,添加了空格以提高可读性...

<!ELEMENT products      (product*)                         >
<!ELEMENT product       (name, price, description, store*) >
<!ELEMENT store         (name, phone, markup)              >
<!ELEMENT name          (#PCDATA)                          >
<!ELEMENT price         (#PCDATA)                          >
<!ELEMENT description   (#PCDATA)                          >
<!ELEMENT phone         (#PCDATA)                          >
<!ELEMENT markup        (#PCDATA)                          >

推荐阅读