元素类型 "firstname" 不能声明多次?

Element type "firstname" must not be declared more than once?

这是我在为此 XML 文档生成 DTD 时遇到的错误

Element type "firstname" must not be declared more than once line no. 21

问题:这是给定的XML文档

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE order SYSTEM "order.dtd">

<order number="1">

<shipto>

    <reference customer="C001"></reference>

</shipto>

<contact>Tom</contact>

<date>

    <day>14</day>

    <month>06</month>

    <year>2017</year>

</date>

<item>

    <book>

        <isbn>1547895</isbn>

        <title>Introduction to XML</title>

        <price>1490</price>

        <author>

            <firstname>Ivan</firstname>

            <lastname>charles</lastname>

        </author>

    </book>

    <quantity>4</quantity>

    <discount>5</discount>

</item>

<item>

    <book>

        <isbn>1547885</isbn>

        <title>Java Programming</title>

        <price>2000</price>

        <author>

            <firstname>James</firstname>

        </author>

    </book>

    <quantity>4</quantity>

    <discount>5</discount>

</item>

<person id="C001">

    <firstname>Tom</firstname>

    <lastname>Richard</lastname>

    <address>

        <company>ABC</company>

        <city>Bangalore</city>

        <addressline>Electronic city</addressline>

    </address>

</person>

</order>

代码: 这是我为从上面给出的 XML 文档

生成 DTD 而实现的代码
<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT order (shipto,contact,date,item+,person)>
<!ELEMENT shipto (reference)>
<!ELEMENT reference (#PCDATA)>
<!ELEMENT contact (#PCDATA)>
<!ELEMENT date (day,month,year)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT item (book+,quantity+,discount+)>
<!ELEMENT book (isbn+,title+,price+,author+)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (firstname+,lastname*)>
<!ELEMENT firstname (#PCDATA)>                       \line number 21
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT quantity (#PCDATA)>
<!ELEMENT discount (#PCDATA)>
<!ELEMENT person (firstname,lastname,address)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT address (company,city,addressline)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT addressline (#PCDATA)>
<!ATTLIST order number ID #REQUIRED>
<!ATTLIST reference customer CDATA #REQUIRED>
<!ATTLIST person id ID #REQUIRED>

如错误所说,您可以only declare an element once

在您的 DTD 中,您已声明 firstnamelastname 两次。

尽管 authorperson 在其内容模型中都允许 firstname/lastname,但您只能声明一次。如果您删除一个 firstname 声明和一个 lastname 声明,您的 DTD 将有效。

此外,在您的 XML 中,order 元素的 number 属性值为 invalid because it starts with a number.

<?xml version="1.0" encoding="UTF-8"?>
<!ELEMENT order (shipto,contact,date,item+,person)>
<!ELEMENT shipto (reference)>
<!ELEMENT reference (#PCDATA)>
<!ELEMENT contact (#PCDATA)>
<!ELEMENT date (day,month,year)>
<!ELEMENT day (#PCDATA)>
<!ELEMENT month (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT item (book+,quantity+,discount+)>
<!ELEMENT book (isbn+,title+,price+,author+)>
<!ELEMENT isbn (#PCDATA)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT price (#PCDATA)>
<!ELEMENT author (firstname+,lastname*)>
<!ELEMENT firstname (#PCDATA)>
<!ELEMENT lastname (#PCDATA)>
<!ELEMENT quantity (#PCDATA)>
<!ELEMENT discount (#PCDATA)>
<!ELEMENT person (firstname,lastname,address)>
<!ELEMENT address (company,city,addressline)>
<!ELEMENT company (#PCDATA)>
<!ELEMENT city (#PCDATA)>
<!ELEMENT addressline (#PCDATA)>
<!ATTLIST order number CDATA #REQUIRED>
<!ATTLIST reference customer CDATA #REQUIRED>
<!ATTLIST person id CDATA #REQUIRED>

这是更正后的代码。请检查