不断收到 "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>