Notepad++ validating XML against local DTD
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>
fluffywarthog
Updated on June 04, 2022Comments
-
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?