[jdom-interest] JDOM and XML Schema

Kenneth Ellefsen kellefsen at bergen.oilfield.slb.com
Fri Nov 29 04:47:59 PST 2002


I ended up reinventing the wheel when I needed to use my DTD file...

Maby the difference between DTD/schema isn't that big...

Anyway, if it helps....

I have now made the following piece of code that solves my problem with
retreving a DTD enumeration of valid values for a given attribute.

Posting it here in case someone else can have a use for it.

// e is an org.jdom.Element
// replace sertain static strings as you need

org.jdom.DocType dt = e.getDocument().getDocType();

// Load and parse the DTD file...

org.apache.xerces.impl.dtd.XMLDTDLoader dtdloader =
new org.apache.xerces.impl.dtd.XMLDTDLoader();
org.apache.xerces.xni.parser.XMLInputSource input =
new org.apache.xerces.xni.parser.XMLInputSource(
   //^^this is the absolute path to the dtd file^^
org.apache.xerces.impl.dtd.DTDGrammar grammar = null;
   grammar =(org.apache.xerces.impl.dtd.DTDGrammar)
catch(Exception ex){
   System.out.println("Error when reading DTD:\n\n"+ex);

// And now for the interesting part where
// we search for the element/attribute name in the DTD

org.apache.xerces.impl.dtd.XMLAttributeDecl att = 
new org.apache.xerces.impl.dtd.XMLAttributeDecl();

org.apache.xerces.impl.dtd.XMLElementDecl elm = 
new org.apache.xerces.impl.dtd.XMLElementDecl();
String[] enum = null;
String elmName = e.getName();

int i = grammar.getFirstElementDeclIndex();

while( grammar.getElementDecl(i,elm) &&
       !elm.name.localpart.equals(elmName) )
   i = grammar.getNextElementDeclIndex(i);

int j = grammar.getFirstAttributeDeclIndex(i);
while( grammar.getAttributeDecl(j, att) &&
       !att.name.localpart.equals("value") )
   j = grammar.getNextAttributeDeclIndex(j);

enum = att.simpleType.enumeration;

// enum - contains ether null, or a String[] representing
// the (value1|value2|value3) definition of attribute "value"
// for the element in question

On Fri, 2002-11-29 at 13:01, Phillip Beauvoir wrote:
> Hi there!
> Sorry if this has been asked before.
> I'm loading an XML Schema file into a JDOM document and then trying to create a hierarchical model with accessor methods to query various parts of the Schema to control an XML Editor.  Then I realise that surely somebody must have done this already?  Basically I want to:
> 1.  Read the XML Schema into a JDOM Document (easy, I can do this)
> 2.  Write an API to access the Schema Elements, Constraints, etc.
> Anybody know if this has been done already, saving me re-inventing the wheel?
> Cheers!
> Phil Beauvoir

Kenneth Ellefsen                   | Tlf: (+47) 55985829
Schlumberger Information Solutions | www.sis.slb.com

More information about the jdom-interest mailing list