# Editor für XML-Dialekt entwickeln



## Tobias (23. Aug 2007)

Hi,

ich möchte für einen XUL-Dialekt einen grafischen Editor entwickeln. Dafür suche ich einen Weg, aus einer DTD(!) die möglichen Kinder und Attribute eines Tags auszulesen. Ich dachte mir, wenn die XML-Parser alle gegen DTDs validieren können, muß es dafür doch eigentlich irgendwo eine API für geben ... Nur wo?

mpG
Tobias


----------



## Wildcard (23. Aug 2007)

Schreib das Ding in ein XML-Schema um. Für DTD gibt's meines Wissens keine API.


----------



## Tobias (24. Aug 2007)

Mh, blöd...

mpG
Tobias


----------



## maximAL (24. Apr 2009)

Hallo,
Ich habe ein ähnlich gelagertes Problem. Allerdings ist die Umstellung auf XSD keine Option.
Xerces bietet ja das XSModel, welches ein "Schema" darstellt. Man kann sich aussuchen, gegen welche Art von Schema man validiert - XSD oder DTD. Das Validieren klappt auch wunderbar, nur XSModel bekomm ich keins, wenn ich gegen eine DTD validiere. Ist das XSModel nun doch nur eine XSD Darstellung? 

Beispielcode:


```
Document xmlDocument = null;
XSModel schema = null;

final String JAXP_SCHEMA_LANGUAGE = "http://java.sun.com/xml/jaxp/properties/schemaLanguage";
//final String SCHEMA = "http://www.w3.org/2001/XMLSchema"; // XSD
final String SCHEMA = "http://www.w3.org/TR/REC-xml"; // DTD

DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
factory.setIgnoringElementContentWhitespace(true);
factory.setExpandEntityReferences(false);
factory.setNamespaceAware(true);
factory.setValidating(true);
factory.setAttribute(JAXP_SCHEMA_LANGUAGE, SCHEMA);
factory.setAttribute("http://apache.org/xml/properties/dom/document-class-name","org.apache.xerces.dom.PSVIDocumentImpl");
factory.setAttribute("http://apache.org/xml/features/validation/schema", Boolean.TRUE);
		
DocumentBuilder builder = factory.newDocumentBuilder();
builder.setErrorHandler(new EHandler());

xmlDocument = builder.parse(file);
xmlDocument.getDomConfig().setParameter("validate", Boolean.TRUE);
xmlDocument.getDomConfig().setParameter("error-handler", new EHandler());

Element root = xmlDocument.getDocumentElement();
ElementPSVI rootPSVI = (ElementPSVI)root; 
schema = rootPSVI.getSchemaInformation(); // NULL
```


----------

