my dog learned polymorphism
The moose likes XML and Related Technologies and the fly likes Validating XML against DTD Big Moose Saloon
  Search | Java FAQ | Recent Topics | Flagged Topics | Hot Topics | Zero Replies
Register / Login


JavaRanch » Java Forums » Engineering » XML and Related Technologies
Bookmark "Validating XML against DTD" Watch "Validating XML against DTD" New topic
Author

Validating XML against DTD

Jay Doshi
Greenhorn

Joined: Aug 28, 2001
Posts: 1
In our application we have a XML coming in. We want to validate the data coming in with respect to the DTD. (E.g maximum length for a particular tag of maximum integer value etc)
Can anyone help me with various alternatives to do so and information on performance for each approach
Thanks
Vels Manian
Greenhorn

Joined: Jun 28, 2001
Posts: 22
hi,
If u are using jaxp.jar and DocumentParserFactory. I have a method of validating the document.
Just set the setValidating(true) for the DocumentParserFactory, once u apply parse() over the Parser object the document will be validated against the DTD and if u have any error a SAXParserException will be thrown.
Hope this helps u
cheers
Vels
Rob Bass
Ranch Hand

Joined: Aug 28, 2001
Posts: 67
I am having a problemm doing what you suggested. I set validate to true and purposely fudged the xml file, and the file parsed without any problems???
Maybe I am doing something totally wrong, here is my XML:
<?xml version="1.0"?>
<!DOCTYPE book SYSTEM "bookgram.dtd">
<book>
<title>Professional Java Programming</title>
<author>Brett Spell</author>
<publisher>Wrox Press</publisher>
<tableOfContents showPageNumbers="Yes">
<tocEntry>Printing</tocEntry>
<tocEntry>Cut and Paste</tocEntry>
<tocEntry>Drag and Drop</tocEntry>
</tableOfContents>
</book>
and dtd:
<!ELEMENT book (title, author, publisher, tableOfContents)>
<!ELEMENT title (#PCDATA)>
<!ELEMENT author (#PCDATA)>
<!ELEMENT publisher (#PCDATA)>
<!ELEMENT tableOfContents (tocEntry+)>
<!ATTLIST tableOfContents
showPageNumbers CDATA "yes"
>
<!ELEMENT tocEntry (#PCDATA)>

My java code:
DocumentBuilderFactory factory =
DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
this.fileNameNPath = fileToOpen;
factory.setValidating(true);
factory.setNamespaceAware(true);
this.doc = builder.parse(fileToOpen);
return true;
I edited the XML like this:
<?xml version="1.0"?>
<!DOCTYPE book SYSTEM "bookgram.dtd">
<book>
<title>Professional Java Programming</title>
<author>Brett Spell</author>
<addsomecrap/>
<publisher>Wrox Press</publisher>
<tableOfContents showPageNumbers="Yes">
<tocEntry>Printing</tocEntry>
<tocEntry>Cut and Paste</tocEntry>
<tocEntry>Drag and Drop</tocEntry>
</tableOfContents>
</book>
I then thought when I ran my Java code it would bomb but it still works,
the XML no longer confirms to the DTD, why is it still able to parse
without error???
HELP
Rob

 
I’ve looked at a lot of different solutions, and in my humble opinion Aspose is the way to go. Here’s the link: http://aspose.com
 
subject: Validating XML against DTD
 
It's not a secret anymore!