不断收到 "No declaration for element" 个错误。这个XML/DTD有什么问题?
Keep getting "No declaration for element" errors. What is wrong with this XML/DTD?
我已经创建了一个简单的 XML 和一个 DTD,但出于某种原因,我尝试的每个验证器在每一行上都给我 "No declaration for element" 错误。我不太确定我做错了什么,因为我才刚刚开始研究 XML 和 DTD,希望能提供一些见解,所以我知道我做错了什么并且可以改进。任何和所有的帮助将不胜感激,这样我就知道以后该怎么做了。
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT BILLER (RESTAURANTNAME,ADRESS,COMPANYPHONE,CVR)>
<!ELEMENT TIME (DATE,CLOCK)>
<!ELEMENT ORDER (MENUITEM+,CUSTOMER)>
<!ELEMENT RESTAURANTNAME (#PCDATA)>
<!ELEMENT ADRESS (#PCDATA)>
<!ELEMENT COMPANYPHONE (#PCDATA)>
<!ELEMENT CVR (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT CLOCK (#PCDATA)>
<!ELEMENT MENUITEM (FOOD,REQUEST,REQUESTPRICE?,QUANTITY,PRICETOTAL)>
<!ELEMENT CUSTOMER (TABLE,NAME,SPECIALTYPING,PAYMENTMETHOD)>
<!ELEMENT FOOD (#PCDATA)>
<!ELEMENT REQUEST (#PCDATA)>
<!ELEMENT REQUESTPRICE (#PCDATA)>
<!ELEMENT QUANTITY (#PCDATA)>
<!ELEMENT PRICETOTAL (#PCDATA)>
<!ELEMENT TABLE (#PCDATA)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT SPECIALTYPING (#PCDATA)>
<!ELEMENT PAYMENTMETHOD (#PCDATA)>
]>
<regning id="122">
<tidspunkt>
<dato>03</dato>
<måned>01</måned>
<år>2020</år>
<tid>13.40</tid>
</tidspunkt>
<restaurant>
<restaurantnavn>Restaurant Fixi</restaurantnavn>
<adresse>Havstreet 128, 478 Andeby</adresse>
<telefon>81 19 26 18</telefon>
<cvr>29 23 28 00</cvr>
</restaurant>
<kundeinfo>
<bord>3</bord>
<kunde-nr>122</kunde-nr>
<specielt>vegetar</specielt>
<betaling>KONTANT</betaling>
</kundeinfo>
<tjener>
<fornavn>Lotti</fornavn>
<efternavn>Andersen</efternavn>
</tjener>
<ordre>
<menugenstand>
<madtitel>Vegetar Lakseburger med fritter</madtitel>
<ekstra>x</ekstra>
<quantity>1</quantity>
<pris valuta="DKK">80</pris>
</menugenstand>
<menugenstand>
<drikketitel>Økologisk hvedeøl</drikketitel>
<ekstra>x</ekstra>
<quantity>1</quantity>
<pris valuta="DKK">45</pris>
</menugenstand>
<menugenstand>
<madtitel>Båd Banannasplit</madtitel>
<ekstra>Ekstra flødeskum</ekstra>
<requestprice>10</requestprice>
<quantity>1</quantity>
<pris valuta="DKK">55</pris>
</menugenstand>
</ordre>
</regning>
您没有定义 DOCTYPE 根元素作为开始。
我看不出您的 DOCTYPE 定义与您的 XML 有什么相似之处。解决这个问题的第一步是
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE regning [
...
其他不清楚。
一个XML文档必须格式正确(语法正确,一个根元素,所有元素关闭等),但此外它也可以针对DTD 或 XML 模式。在 DTD(文档类型定义)的情况下,DTD 管理 内容模型 ,即什么是根元素,特定元素可以包含哪些其他元素,可以有哪些属性等等等等。我会鼓励您实际阅读 XML specification。没那么难。
因此,在您的示例中,<regning>
元素未在 DTD 中定义,并且由于 XML 元素名称(标签)区分大小写 ,您的 XML 文档中没有元素与 DTD 中的任何 ELEMENT 声明相匹配。要匹配您的 XML 文档,DTD 必须以这样的开头:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE regning [
<!ELEMENT regning (tidspunkt, restaurant, kundeinfo, tjener, ordre) >
<!ATTLIST regning id ID #REQUIRED >
... rest of the content model ...
]>
<regning id="122">'
...
</regning>
我已经创建了一个简单的 XML 和一个 DTD,但出于某种原因,我尝试的每个验证器在每一行上都给我 "No declaration for element" 错误。我不太确定我做错了什么,因为我才刚刚开始研究 XML 和 DTD,希望能提供一些见解,所以我知道我做错了什么并且可以改进。任何和所有的帮助将不胜感激,这样我就知道以后该怎么做了。
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT BILLER (RESTAURANTNAME,ADRESS,COMPANYPHONE,CVR)>
<!ELEMENT TIME (DATE,CLOCK)>
<!ELEMENT ORDER (MENUITEM+,CUSTOMER)>
<!ELEMENT RESTAURANTNAME (#PCDATA)>
<!ELEMENT ADRESS (#PCDATA)>
<!ELEMENT COMPANYPHONE (#PCDATA)>
<!ELEMENT CVR (#PCDATA)>
<!ELEMENT DATE (#PCDATA)>
<!ELEMENT CLOCK (#PCDATA)>
<!ELEMENT MENUITEM (FOOD,REQUEST,REQUESTPRICE?,QUANTITY,PRICETOTAL)>
<!ELEMENT CUSTOMER (TABLE,NAME,SPECIALTYPING,PAYMENTMETHOD)>
<!ELEMENT FOOD (#PCDATA)>
<!ELEMENT REQUEST (#PCDATA)>
<!ELEMENT REQUESTPRICE (#PCDATA)>
<!ELEMENT QUANTITY (#PCDATA)>
<!ELEMENT PRICETOTAL (#PCDATA)>
<!ELEMENT TABLE (#PCDATA)>
<!ELEMENT NAME (#PCDATA)>
<!ELEMENT SPECIALTYPING (#PCDATA)>
<!ELEMENT PAYMENTMETHOD (#PCDATA)>
]>
<regning id="122">
<tidspunkt>
<dato>03</dato>
<måned>01</måned>
<år>2020</år>
<tid>13.40</tid>
</tidspunkt>
<restaurant>
<restaurantnavn>Restaurant Fixi</restaurantnavn>
<adresse>Havstreet 128, 478 Andeby</adresse>
<telefon>81 19 26 18</telefon>
<cvr>29 23 28 00</cvr>
</restaurant>
<kundeinfo>
<bord>3</bord>
<kunde-nr>122</kunde-nr>
<specielt>vegetar</specielt>
<betaling>KONTANT</betaling>
</kundeinfo>
<tjener>
<fornavn>Lotti</fornavn>
<efternavn>Andersen</efternavn>
</tjener>
<ordre>
<menugenstand>
<madtitel>Vegetar Lakseburger med fritter</madtitel>
<ekstra>x</ekstra>
<quantity>1</quantity>
<pris valuta="DKK">80</pris>
</menugenstand>
<menugenstand>
<drikketitel>Økologisk hvedeøl</drikketitel>
<ekstra>x</ekstra>
<quantity>1</quantity>
<pris valuta="DKK">45</pris>
</menugenstand>
<menugenstand>
<madtitel>Båd Banannasplit</madtitel>
<ekstra>Ekstra flødeskum</ekstra>
<requestprice>10</requestprice>
<quantity>1</quantity>
<pris valuta="DKK">55</pris>
</menugenstand>
</ordre>
</regning>
您没有定义 DOCTYPE 根元素作为开始。
我看不出您的 DOCTYPE 定义与您的 XML 有什么相似之处。解决这个问题的第一步是
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE regning [
...
其他不清楚。
一个XML文档必须格式正确(语法正确,一个根元素,所有元素关闭等),但此外它也可以针对DTD 或 XML 模式。在 DTD(文档类型定义)的情况下,DTD 管理 内容模型 ,即什么是根元素,特定元素可以包含哪些其他元素,可以有哪些属性等等等等。我会鼓励您实际阅读 XML specification。没那么难。
因此,在您的示例中,<regning>
元素未在 DTD 中定义,并且由于 XML 元素名称(标签)区分大小写 ,您的 XML 文档中没有元素与 DTD 中的任何 ELEMENT 声明相匹配。要匹配您的 XML 文档,DTD 必须以这样的开头:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE regning [
<!ELEMENT regning (tidspunkt, restaurant, kundeinfo, tjener, ordre) >
<!ATTLIST regning id ID #REQUIRED >
... rest of the content model ...
]>
<regning id="122">'
...
</regning>