Почему проверка DTD дает мне ошибку «A»), которая требуется в объявлении типа элемента «Счет-фактура»? - PullRequest
2 голосов
/ 13 апреля 2019

Я пишу DTD в мой XML-файл. Я получаю эту же ошибку "A ')" требуется в объявлении типа элемента "Счет-фактура" на элементе "Счет-фактура". Мой DTD соответствует моему XML, имена правильные, порядок элементов правильный. Любая помощь будет оценена. Ниже приведены мои DTD и XML-файлы.

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

<!ELEMENT InvoiceList (Invoice*) >
<!ELEMENT Invoice (Client, Company, TaxNumber|USt-IdNr, ServicesList, Date, Amount, BankAccount) >
<!ATTLIST Invoice NumberOfInvoice CDATA #IMPLIED>

<!ELEMENT Client (Name, Address)>
<!ELEMENT Name (#PCDATA) >

<!ELEMENT Address (Street, ZipCode, City) >

<!ELEMENT Street (Name, Number) >
<!ELEMENT Number (#PCDATA) >
<!ELEMENT ZipCode (#PCDATA) >
<!ELEMENT City (#PCDATA) >

<!ELEMENT Company (Name, Address) >
<!ELEMENT TaxNumber (#PCDATA) >
<!ELEMENT USt-IdNr (#PCDATA) >

<!ELEMENT ServiceList (Service) >
<!ELEMENT Service (Position, Name, MwSt, Quantity, SinglePrice, TotalPrice) >
<!ATTLIST Service Date CDATA #IMPLIED>
<!ELEMENT Position (#PCDATA) >
<!ELEMENT MwSt (#PCDATA) >
<!ELEMENT Quantity (#PCDATA) >
<!ELEMENT SinglePrice (#PCDATA) >
<!ELEMENT TotalPrice (#PCDATA) >
<!ELEMENT Date (#PCDATA) >

<!ELEMENT Amount (Total|Brutto, Netto, MwSt) >
<!ELEMENT Total (#PCDATA) >
<!ELEMENT Brutto (#PCDATA) >
<!ELEMENT Netto (#PCDATA) >

<!ELEMENT BankAccount (Name, Bank, BLZ, AccountNumber) >
<!ELEMENT Bank (#PCDATA) >
<!ELEMENT BLZ (#PCDATA) >
<!ELEMENT AccountNumber (#PCDATA) >

<InvoiceList>
<Invoice NumberOfInvoice="657321">
        <Client>
            <Name>Frau Sybille Sonder-Sutterrau</Name>
            <Address>
                <Street>
                    <Name>Am Süttelbach</Name>
                    <Number>17</Number> 
                </Street>
                <ZipCode>77070</ZipCode>
                <City>Siedelsuderstadt</City>
            </Address>
        </Client>
        <Company>
            <Name>Kleintier Meier GmbH</Name>
            <Address>
                <Street>
                    <Name>Meierring</Name>
                    <Number>3</Number> 
                </Street>
                <ZipCode>81828</ZipCode>
                <City>Machthausen</City>
            </Address>
            <ContactInformation>
                <PhoneNumber>0777/987987</PhoneNumber>
                <Fax>0777/987789</Fax>
                <EMail>klein.meier@tiere.de</EMail>
            </ContactInformation>
        </Company> 
        <TaxNumber>88 123/8282 2</TaxNumber>
        <ServicesList>
            <Service Date="1.1.2017">
                <Position>1</Position>
                <Name>Antike Holzwürmer</Name>
                <MwSt>19%</MwSt>
                <Quantity>100</Quantity>
                <SinglePrice>1,50</SinglePrice>
                <TotalPrice>150,00</TotalPrice>
            </Service>
            <Service Date="12.1.2017">
                <Position>2</Position>
                <Name>Holzwurmfutter</Name>
                <MwSt>19%</MwSt>
                <Quantity>1</Quantity>
                <SinglePrice>34,45</SinglePrice>
                <TotalPrice>34,45</TotalPrice>
            </Service>
            <Service Date="12.1.2017">
                <Position>3</Position>
                <Name>Steinlaus, Petrophaga lorioti</Name>
                <MwSt>19%</MwSt>
                <Quantity>1</Quantity>
                <SinglePrice>777,77</SinglePrice>
                <TotalPrice>777,77</TotalPrice>
            </Service>
        </ServicesList>
        <Date>15.1.2017</Date>
        <Amount>
            <Brutto>962,22</Brutto>
            <Netto>808,59</Netto>
            <Mwst>153,63</Mwst> 
        </Amount>
        <BankAccount>
            <Name>Kleintier Meier</Name>
            <Bank>Sparkasse Karlsruhe</Bank>
            <BLZ>66050101</BLZ>
            <AccountNumber>987654321</AccountNumber>
        </BankAccount>
    </Invoice>

Я использую Eclipse для его проверки.

1 Ответ

1 голос
/ 14 апреля 2019

При использовании | вы должны заключить эту группу в скобки.

Вы должны обновить оба объявления Invoice и Amount ...

<!ELEMENT Invoice (Client, Company, (TaxNumber|USt-IdNr), ServicesList, Date, Amount, BankAccount) >

и

<!ELEMENT Amount ((Total|Brutto), Netto, MwSt) >

После этих изменений ваше DTD будет действительным, но, возможно, не правильным;ваш XML все еще не будет проверен, так как есть еще несколько проблем ...

  • ContactInformation не разрешено в качестве дочернего элемента CompanyContactInformation и его дочерних элементов (PhoneNumber, Fax и EMail) вообще не объявлены в DTD)
  • Элемент ServicesList не объявлен в DTD.ServiceList объявлено, хотя, возможно, вы просто пропустили s в названии объявления.
  • Вы используете Mwst в XML, но в DTD оно объявлено MwSt (обратите внимание на регистр).
...