如何声明 DTD 元素?



我正在做一个作业并得到了我的结果,但是我似乎忘记在我的 DTD 文件中声明元素。我是声明所有元素还是仅声明包含额外信息的元素?如果我不清楚,以下是我作业的摘录:

<entry id= 'c01'>
<MetaTags>Business</MetaTags>   
<title><brand>HP Pavilion</brand><name>550-112NA</name></title>
<Desciption>While other towers have been standing still, HP has revolutionized the category. From magnified performance and reliability, to its stylish redesign, this HP Pavilion is the best thing to happen to towers in over 20 years.</Desciption>
<Price>€579</Price>
<Image src ="Image1.jpg"/>
<Specs>
<CPU>A10-8750 APU</CPU>
<GPU>Radeon R7</GPU>
<RAM>8 GB DDR3</RAM>
<Storage><HDD> 2TB </HDD><SSD></SSD></Storage>
<OS>Windows 10</OS>
<optional>
<Monitor>LG 22" Full HD TV</Monitor>
<Keyboard>Microsoft Wired Keyboard 600</Keyboard>
<Mouse>Logitech M705 Mouse</Mouse>              
</optional>
</Specs>
</entry>

是否必须声明标记条目,但是没有其他元素会声明,因为它们没有其他变量?

如果这是正确的,声明是否如下所示:

<!ATTLIST entry id CDATA #REQUIRED> 

我希望我能把我的问题说清楚,因为我是 XML 的新手。如果您需要查看,以及我是否做错了任何其他事情,这是我的 DTD。谢谢!

<!ELEMENT ComputerShop (entry+)>
<!ELEMENT entry (MetaTags, title, Description, Price, Image, Specs)>
<!ELEMENT MetaTags (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Image (#PCDATA)>
<!ELEMENT title (brand, name)>
<!ELEMENT brand (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT Specs (CPU, GPU, RAM, Storage, OS, optional)>
<!ELEMENT CPU (#PCDATA)>
<!ELEMENT GPU (#PCDATA)>
<!ELEMENT RAM (#PCDATA)>
<!ELEMENT Storage (HDD | SSD)>
<!ELEMENT OS (#PCDATA)>
<!ELEMENT optional (Monitor | Keyboard | Mouse>
<!ELEMENT Monitor (#PCDATA)>
<!ELEMENT Keyboard (#PCDATA)>
<!ELEMENT Mouse (#PCDATA)>

谢谢!

...我忘了在 DTD 文件中声明元素

我想你的意思是"我忘了在我的 DTD 文件中声明属性"。

必须声明任何属性(元素上的"额外信息")。

因此,您需要在entry元素上声明id属性,在Image元素上声明src属性。

以下是您需要进行的其他更改...

DTD 更改

  • 缺少<!ELEMENT Specs (CPU, GPU, RAM, Storage, OS, optional)>中的结束参数

  • 声明 HDD 和 SSD 元素:<!ELEMENT HDD (#PCDATA)><!ELEMENT SDD (#PCDATA)>

  • optional宣言需要改变。也许是<!ELEMENT optional (Monitor | Keyboard | Mouse)*>(零次或多次出现显示器、键盘或鼠标(按任何顺序))或<!ELEMENT optional (Monitor?, Keyboard?, Mouse?)>(零个或一个显示器后跟零个或一个键盘,后跟零个或一个鼠标)。

XML 更改

  • Description拼错为Desciption.

  • Storage的内容是一个HDD或一个SSD,而不是两者兼而有之。删除空<SSD></SSD>

以下是更正的文件...

.DTD

<!ELEMENT ComputerShop (entry+)>
<!ELEMENT entry (MetaTags, title, Description, Price, Image, Specs)>
<!ATTLIST entry id CDATA #REQUIRED> 
<!ELEMENT MetaTags (#PCDATA)>
<!ELEMENT Description (#PCDATA)>
<!ELEMENT Price (#PCDATA)>
<!ELEMENT Image (#PCDATA)>
<!ATTLIST Image src CDATA #REQUIRED>
<!ELEMENT title (brand, name)>
<!ELEMENT brand (#PCDATA)>
<!ELEMENT name (#PCDATA)>
<!ELEMENT Specs (CPU, GPU, RAM, Storage, OS, optional)>
<!ELEMENT CPU (#PCDATA)>
<!ELEMENT GPU (#PCDATA)>
<!ELEMENT RAM (#PCDATA)>
<!ELEMENT Storage (HDD | SSD)>
<!ELEMENT HDD (#PCDATA)>
<!ELEMENT SDD (#PCDATA)>
<!ELEMENT OS (#PCDATA)>
<!ELEMENT optional (Monitor | Keyboard | Mouse)*>
<!ELEMENT Monitor (#PCDATA)>
<!ELEMENT Keyboard (#PCDATA)>
<!ELEMENT Mouse (#PCDATA)>

.XML

<entry id='c01'>
<MetaTags>Business</MetaTags>   
<title><brand>HP Pavilion</brand><name>550-112NA</name></title>
<Description>While other towers have been standing still, HP has revolutionized the category. From magnified performance and reliability, to its stylish redesign, this HP Pavilion is the best thing to happen to towers in over 20 years.</Description>
<Price>€579</Price>
<Image src="Image1.jpg"/>
<Specs>
<CPU>A10-8750 APU</CPU>
<GPU>Radeon R7</GPU>
<RAM>8 GB DDR3</RAM>
<Storage><HDD> 2TB </HDD></Storage>
<OS>Windows 10</OS>
<optional>
<Monitor>LG 22" Full HD TV</Monitor>
<Keyboard>Microsoft Wired Keyboard 600</Keyboard>
<Mouse>Logitech M705 Mouse</Mouse>              
</optional>
</Specs>
</entry>

最新更新