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

时间:2017-07-05 18:34:03

标签: xml dtd

这是我为此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>

2 个答案:

答案 0 :(得分:0)

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

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

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

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

答案 1 :(得分:-1)

<?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>

这是正确的修改后的代码。请检查

相关问题