Why am I given the error "StartTag: Invalid element name" when parsing this XML file with a DTD

Johnny picture Johnny · Feb 26, 2012 · Viewed 25.2k times · Source

The document basically has "catalog" as the root tag with child tags of "movie" followed by one or more "actor". Each of these child tags further contains more child tags. I was supposed to make a DTD for this based on some rules given, but it is just rejecting whatever I put at the beginning of the doucment. Any help?

Here is the XML code:

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

<!DOCTYPE catalog SYSTEM "catalog.dtd">

<catalog>
    <movie movieID="m0100" genre="drama">
    <title>Monster&apos;s Ball</title>
<year>2001</year> 
<length>111 minutes</length>
<topBilledActors actorIDs="a0100 a0102" />
</movie>

<actor actorID="a0100" oscarWinner="yes">
    <name>Halle Berry</name>
<date>August 14, 1966</date>
<birthplace>Cleveland, Ohio</birthplace>
<role character="Leticia Musgrove" movie="m0100" />
<role character="Storm" movie="m0101" />
</actor>

<actor actorID="a0102" oscarWinner="yes">
    <name>Billy Bob Thornton</name>
<role character="Hank Grotowski" movie="m0100" />
</actor>

<movie movieID="m0101" genre="fantasy">
    <title>X-Men</title>
<year>2000</year>
<length>104 minutes</length>
<topBilledActors actorIDs="a0100 a0103" />
</movie>

<actor actorID="a0103" oscarWinner="no">
    <name>Ian McKellen</name>
<role character="Magneto" movie="m0101" />
<role character="Gandolf" movie="m0105" />
<role character="Gandolf" movie="m0107" />
</actor>

<movie movieID="m0105" genre="action" earningsRank="17">
    <name>Lord of the Rings: The Fellowship of the Ring</name>
<date>2001</date>
<length>178 minutes</length>
<topBilledActors actorIDs="a0103" />
</movie>

<movie movieID="m0107" genre="action" earningsRank="8">
    <name>Lord of the Rings: The Return of the King</name>
<date>2003</date>
<length>201 minutes</length>
<topBilledActors actorIDs="a0103" />
</movie>

<actor actorID="a0101" oscarWinner="yes">
<name>Tom Hanks</name>
<date>July 9, 1956</date>
<birthplace>Concord, California</birthplace>
<role character="Captain John H. Miller" movie="m0102" />
<role character="Forrest Gump" movie="m0103" />
<role character="Andrew Beckett" movie="m0104" />
</actor>

<movie movieID="m0102" genre="action" earningsRank="50">
    <name>Saving Private Ryan</name>
<date>1998</date>
<length>170 minutes</length>
<topBilledActors actorIDs="a0101 a0104" />
</movie>

<actor actorID="a0104" oscarWinner="yes">
    <name>Matt Damon</name>
<date>October 8, 1970</date>
<birthplace>Cambridge, Massachusetts</birthplace>
<role character="Private James Francis Ryan" movie="m0102" />
</actor>

<movie movieID="m0103" genre="comedy" earningsRank="14">
    <name>Forrest Gump</name>
<date>1994</date>
<length>142 minutes</length>
<topBilledActors actorIDs="a0101 a0105 a0106" />
</movie>

<actor actorID="a0105" oscarWinner="yes">
    <name>Sally Field</name>
<birthplace>Pasadena, California</birthplace>
<role character="Mrs. Gump" movie="m0103" />
</actor>

<actor actorID="a0106">
    <name>Gary Sinise</name>
<role character="Lt. Dan Taylor" movie="m0103" />
<role character="Ken Mattingly" movie="m0106" />
</actor>

<movie movieID="m0104" genre="drama">
    <name>Philadelphia</name>
<date>1993</date>
<length>125 minutes</length>
<topBilledActors actorIDs="a0101 a0107" />
</movie>

<movie movieID="m0106" genre="drama">
    <name>Apollo 13</name>
<date>1995</date>
<length>140 minutes</length>
<topBilledActors actorIDs="a0101 a0106" />
</movie>

<actor actorID="a0107" oscarWinner="yes">
    <name>Denzel Washington</name>
<role character="Joe Miller" movie="m0104" />
</actor>

</catalog>

Here is the DTD file:

<!ELEMENT catalog (movie, actor+)*>

<!ELEMENT movie (title, year, length, topBilledActors)>
<!ATTLIST movie movieID ID #REQUIRED>
<!ATTLIST movie genre (fantasy |  action | drama | comedy) #REQUIRED>
<!ATTLIST movie earningsRank CDATA #IMPLIED>

<!ELEMENT title (#PCDATA)>
<!ELEMENT year (#PCDATA)>
<!ELEMENT length (#PCDATA)>
<!ELEMENT topBilledActors EMPTY>
<!ATTLIST topBilledActors ActorIDs IDREFS>

<!ELEMENT actor (name, date*, birthplace*, role+)>
<!ATTLIST actor actorID ID #REQUIRED>
<!ATTLIST actor oscarWinner (yes|no) "no">

<!ELEMENT name (#PCDATA)>
<!ELEMENT date (#PCDATA)>
<!ELEMENT birthplace (#PCDATA)>
<!ELEMENT role EMPTY>
<!ATTLIST role character CDATA>
<!ATTLIST role movie IDREF>

EDIT: I am verifying this with the XML validator at http://www.w3schools.com/xml/xml_validator.asp

My web browser (IE) does not display the file and gives the error:

Required white space was missing. Error processing resource 'file:///C:/Documents and        Settings/Administrator/Desktop/...

 <!ATTLIST topBilledActors ActorIDs IDREFS>

Answer

Aravind Yarram picture Aravind Yarram · Feb 26, 2012

I think you need to specify if the attribute is #REQUIRED or #IMPLIED or #FIXED "Default_Value" for your DTD to be valid. You should also have <!DOCTYPE.