从规范中解释DTD

时间:2018-06-02 01:17:40

标签: xml dtd

我有以下规格:

•有一个名为products

的根元素

•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符合规格吗?

1 个答案:

答案 0 :(得分:0)

关于您的DTD的一些评论:

  1. 在doctype声明<!DOCTYPE exercise 3 [中,名称应与根元素相同,因此exercise 3应该是products而不是name。但是,如果此DTD是外部文件,则您不应该需要doctype。如果将DTD和XML组合在一起,您可能希望使用它。有关详细信息,请参阅https://stackoverflow.com/a/5455469/317052
  2. 元素名称不必是唯一的,因此您可以拥有一个product元素,可以在store<!ELEMENT products (product*)> 中使用。
  3. 以下是我根据规范做的事情......

      

    •有一个名为products

    的根元素      

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

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

    •每个产品元素包含一个名称,一个价格和一个   description子元素,以及一系列商店子元素,一个用于   每个销售该产品的商店:

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

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

    <!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)                          >
    

    这里是完整的DTD,其中添加了空格以便于阅读......

     <select name="input_12" id="input_37_12" class="medium gfield_select" tabindex="5" aria-required="true" aria-invalid="false">
       <option value="Please Select" selected="selected">Please Select</option>
       <option value="1">1</option>
       <option value="2-5">2-5</option>
       <option value="6-15">6-15</option>
       <option value="16-30">16-30</option>
       <option value="31-100">31-100</option>
       <option value="101-250">101-250</option>
       <option value="251-1000">251-1000</option>
       <option value="1001-2500">1001-2500</option>
       <option value="2501 +">2501 +</option>
    </select>