Продолжайте получать ошибки «Нет декларации для элемента». Что не так с этим XML / DTD? - PullRequest
0 голосов
/ 07 января 2020

Я создал простой XML и DTD, но по какой-то причине каждый отдельный валидатор старается выдавать мне ошибки «Нет объявлений для элемента» в каждой отдельной строке. Я не совсем уверен, что я сделал неправильно, потому что я только начал изучать 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>

Ответы [ 2 ]

1 голос
/ 07 января 2020

Документ XML должен быть правильно сформированным (синтаксис ok, один элемент root, все элементы закрыты и т. Д. c), но кроме того, он также может быть действительным для DTD или XML Схема. В случае DTD (определение типа документа) DTD управляет моделью содержимого , то есть что такое элемент root, какие другие элементы может содержать указанный элемент c, какие атрибуты могут там присутствовать. быть, et c, et c. Я бы посоветовал вам прочитать спецификацию XML . Это не так сложно.

Итак, в вашем примере, элемент <regning> не определен в DTD, и поскольку XML имена (теги) элементов чувствительны к регистру , нет элемент в вашем XML документе соответствует любому объявлению ELEMENT в DTD. Чтобы соответствовать вашему 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>
1 голос
/ 07 января 2020

Вы не определили элемент DOCTYPE root для начала.

Я не вижу тесного сходства между вашими определениями DOCTYPE и вашими XML. Первый шаг, чтобы исправить это, будет

<?xml version="1.0" encoding="UTF-8"?>    
<!DOCTYPE regning [
...

Остальное неясно.

...