Notepad++ validating XML against local DTD

11,092

I edited your XML and .dtd files. Now XML is valid. Pay attention, in files I added comments on your mistakes. XML file:

<?xml version="1.0" standalone="no"?>
    <!DOCTYPE LIST SYSTEM "PresidentsDTD.dtd">
    <LIST>
    <PRESIDENT id="ID01" gender="male" name="GeorgeWashington"> <!--id must be unique-->
        <NAME>
            <FIRST>George</FIRST>
            <MIDDLE />
            <LAST>Washington</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1789</TERMSTART>
            <TERMEND>1797</TERMEND>
            <TERMLENGTH unit="years"> 8  </TERMLENGTH> <!--You have <TERML> in XML and <TERMLENGTH> in .dtd-->
        </TERM>
        <PARTY>N/A</PARTY>
        <HOMESTATE>Virginia</HOMESTATE>
    </PRESIDENT>

    <PRESIDENT id="ID02" gender="male" name="JohnAdams">
        <NAME>
            <FIRST>John</FIRST>
            <MIDDLE />
            <LAST>Adams</LAST>
        </NAME>
        <TERM count="2">    
            <TERMSTART>1797</TERMSTART>
            <TERMEND>1801</TERMEND>
            <TERMLENGTH unit="years"> 8  </TERMLENGTH>
        </TERM>
        <PARTY>Federalist</PARTY>
        <HOMESTATE>Massachusetts</HOMESTATE>
    </PRESIDENT>

    <PRESIDENT id="ID03" gender="male" name="ThomasJefferson">
        <NAME>
            <FIRST>Thomas</FIRST>
            <MIDDLE />
            <LAST>Jefferson</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1801</TERMSTART>
            <TERMEND>1809</TERMEND>
            <TERMLENGTH unit="years"> 8  </TERMLENGTH>
        </TERM>
        <PARTY>Republican-Democrat</PARTY>
        <HOMESTATE>Virginia</HOMESTATE>
    </PRESIDENT>

    <PRESIDENT id="ID07" gender="male" name="AndrewJackson">
        <NAME>
            <FIRST>Andrew</FIRST>
            <MIDDLE />
            <LAST>Jackson</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1829</TERMSTART>
            <TERMEND>1837</TERMEND>
            <TERMLENGTH unit="years"> 8  </TERMLENGTH>
        </TERM>
        <PARTY>Democrat</PARTY>
        <HOMESTATE>Tennesee</HOMESTATE>
    </PRESIDENT>

    <PRESIDENT id="ID09" gender="male" name="WilliamHenryHarrison">
        <NAME>
            <FIRST>William</FIRST>
            <MIDDLE>Henry</MIDDLE>
            <LAST>Harrison</LAST>
        </NAME>
        <TERM count="1">
            <TERMSTART>1841</TERMSTART>
            <TERMEND>1841</TERMEND>
            <TERMLENGTH unit="months"> 1 </TERMLENGTH>
        </TERM>
        <PARTY>Whig</PARTY>
        <HOMESTATE>Ohio</HOMESTATE>
    </PRESIDENT>

    <PRESIDENT id="ID15" gender="male" name="AbrahamLincoln">
        <NAME>
            <FIRST>Abraham</FIRST>
            <MIDDLE />
            <LAST>Lincoln</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1861</TERMSTART>
            <TERMEND>1865</TERMEND>
            <TERMLENGTH unit="years"> 4  </TERMLENGTH>
        </TERM>
        <PARTY>Republican</PARTY>
        <HOMESTATE>Illinois</HOMESTATE>
    </PRESIDENT>
    </LIST>

If you create file DTD schema separately from XML, it should not contain " [ " ] ". You didn't define PARTY and HOMESTATE. You had wrong define attributes in PRESIDENT.
PresidentsDTD.dtd:

<!ELEMENT LIST (PRESIDENT+)>

<!ELEMENT PRESIDENT (NAME, TERM, PARTY, HOMESTATE)>

<!ELEMENT NAME (FIRST, MIDDLE?, LAST)>
<!ELEMENT FIRST (#PCDATA)>
<!ELEMENT MIDDLE (#PCDATA)>
<!ELEMENT LAST (#PCDATA)> 

<!ELEMENT TERM (TERMSTART, TERMEND, TERMLENGTH)>
<!ELEMENT TERMSTART (#PCDATA)>
<!ELEMENT TERMEND (#PCDATA)>
<!ELEMENT TERMLENGTH (#PCDATA)>

<!ELEMENT PARTY (#PCDATA)>
<!ELEMENT HOMESTATE (#PCDATA)>


<!ATTLIST PRESIDENT 
            id ID #REQUIRED 
            gender (male | female) #IMPLIED 
            name CDATA #IMPLIED>
<!ATTLIST TERM 
            count CDATA #IMPLIED>
<!ATTLIST TERMLENGTH 
            unit (months | years) #IMPLIED>
Share:
11,092
fluffywarthog
Author by

fluffywarthog

Updated on June 04, 2022

Comments

  • fluffywarthog
    fluffywarthog almost 2 years

    I have an XML file that I'm trying to validate against a DTD (in the same local folder as the XML). The XML checks out as well-formed, but every attempt to validate against the DTD in notepad++ leads to an "unable to load the DTD PresidentsDTD.dtd" error. Any idea what I need to do to get this working?

    XML file:

    <?xml version="1.0" standalone="no"?>
    <!DOCTYPE LIST SYSTEM "PresidentsDTD.dtd">
    
    <LIST>
    <PRESIDENT id="01" gender="male" name="GeorgeWashington">
        <NAME>
            <FIRST>George</FIRST>
            <MIDDLE />
            <LAST>Washington</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1789</TERMSTART>
            <TERMEND>1797</TERMEND>
            <TERML unit="years"> 8  </TERML>
        </TERM>
        <PARTY>N/A</PARTY>
        <HOMESTATE>Virginia</HOMESTATE>
    </PRESIDENT>
    
    <PRESIDENT id="02" gender="male" name="JohnAdams">
        <NAME>
            <FIRST>John</FIRST>
            <MIDDLE />
            <LAST>Adams</LAST>
        </NAME>
        <TERM count="2">    
            <TERMSTART>1797</TERMSTART>
            <TERMEND>1801</TERMEND>
            <TERML unit="years"> 8  </TERML>
        </TERM>
        <PARTY>Federalist</PARTY>
        <HOMESTATE>Massachusetts</HOMESTATE>
    </PRESIDENT>
    
    <PRESIDENT id="03" gender="male" name="ThomasJefferson">
        <NAME>
            <FIRST>Thomas</FIRST>
            <MIDDLE />
            <LAST>Jefferson</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1801</TERMSTART>
            <TERMEND>1809</TERMEND>
            <TERML unit="years"> 8  </TERML>
        </TERM>
        <PARTY>Republican-Democrat</PARTY>
        <HOMESTATE>Virginia</HOMESTATE>
    </PRESIDENT>
    
    <PRESIDENT id="07" gender="male" name="AndrewJackson">
        <NAME>
            <FIRST>Andrew</FIRST>
            <MIDDLE />
            <LAST>Jackson</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1829</TERMSTART>
            <TERMEND>1837</TERMEND>
            <TERML unit="years"> 8  </TERML>
        </TERM>
        <PARTY>Democrat</PARTY>
        <HOMESTATE>Tennesee</HOMESTATE>
    </PRESIDENT>
    
    <PRESIDENT id="09" gender="male" name="WilliamHenryHarrison">
        <NAME>
            <FIRST>William</FIRST>
            <MIDDLE>Henry</MIDDLE>
            <LAST>Harrison</LAST>
        </NAME>
        <TERM count="1">
            <TERMSTART>1841</TERMSTART>
            <TERMEND>1841</TERMEND>
            <TERML unit="months"> 1 </TERML>
        </TERM>
        <PARTY>Whig</PARTY>
        <HOMESTATE>Ohio</HOMESTATE>
    </PRESIDENT>
    
    <PRESIDENT id="15" gender="male" name="AbrahamLincoln">
        <NAME>
            <FIRST>Abraham</FIRST>
            <MIDDLE />
            <LAST>Lincoln</LAST>
        </NAME>
        <TERM count="2">
            <TERMSTART>1861</TERMSTART>
            <TERMEND>1865</TERMEND>
            <TERML unit="years"> 4  </TERML>
        </TERM>
        <PARTY>Republican</PARTY>
        <HOMESTATE>Illinois</HOMESTATE>
    </PRESIDENT>
    </LIST>
    

    My PresidentsDTD.dtd file (Still returning an error in line 2 for some reason):

    <!DOCTYPE LIST[
    <!ELEMENT LIST PRESIDENT+>
    <!ELEMENT PRESIDENT (NAME, TERM, PARTY, HOMESTATE)>
    <!ATTLIST PRESIDENT id ID #REQUIRED>
    <!ATTLIST PRESIDENT gender (male | female) #IMPLIED>
    <!ATTLIST PRESIDENT name CDATA #IMPLIED>
    <!ELEMENT NAME (FIRST, MIDDLE?, LAST)>
    <!ELEMENT TERM (TERMSTART, TERMEND, TERMLENGTH)>
    <!ATTLIST TERM count CDATA #IMPLIED>
    <!ELEMENT FIRST (#PCDATA)>
    <!ELEMENT MIDDLE (#PCDATA)>
    <!ELEMENT LAST (#PCDATA)>
    <!ELEMENT TERMSTART (#PCDATA)>
    <!ELEMENT TERMEND (#PCDATA)>
    <!ELEMENT TERMLENGTH (#PCDATA)>
    <!ATTLIST TERMLENGTH unit (months | years) #IMPLIED>
    ]>
    

    Does anyone have a solution for validating against a DTD locally?