# JDOM mit XML-Schema



## java_freaker (27. Apr 2006)

Ich will so ein XML-Schema: 

<?xml version="1.0" encoding="UTF-8"?> 
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
<xsd:complexType name="PersonTyp" abstract="true"> 
<xsd:sequence> 
<xsd:element name="Vorname" type="xsd:string" maxOccurs="3"/> 
<xsd:element name="Name" type="xsd:string"/> 
<xsd:element name="Geburtsdatum" type="xsd:date"/> 
</xsd:sequence> 
</xsd:complexType> 
<xsd:complexType name="MitarbeiterTyp"> 
<xsd:complexContent> 
<xsd:extension base="PersonTyp"> 
<xsd:sequence> 
<xsd:element name="Gehalt"> 
<xsd:simpleType> 
<xsd:restriction base="xsd:float"> 
<xsd:minInclusive value="10000"/> 
</xsd:restriction> 
</xsd:simpleType> 
</xsd:element> 
</xsd:sequence> 
</xsd:extension> 
</xsd:complexContent> 
</xsd:complexType> 
<xsd:element name="Unternehmen"> 
<xsd:complexType> 
<xsd:sequence> 
<xsd:element name="Mitarbeiter" type="MitarbeiterTyp" 
maxOccurs="unbounded"/> 
</xsd:sequence> 
</xsd:complexType> 
</xsd:element> 
</xsd:schema> 

mit so ein XML-Dokument: 

<?xml version="1.0" encoding="UTF-8"?> 
<Unternehmen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:noNamespaceSchemaLocation="xml_schema.xsd"> 
<Mitarbeiter> 
<Vorname>Hagen</Vorname> 
<Vorname>Dieter</Vorname> 
<Name>Becker</Name> 
<Geburtsdatum>1967-08-13</Geburtsdatum> 
<Gehalt>39512.34</Gehalt> 
</Mitarbeiter> 
<Mitarbeiter> 
<Vorname>Jutta</Vorname> 
<Name>Stehl</Name> 
<Geburtsdatum>1976-09-11</Geburtsdatum> 
<Gehalt>42500.34</Gehalt> 
</Mitarbeiter> 
</Unternehmen> 

validieren d.h. ich will prüfen ob mein XML-Dokument alle Regeln in XML-Schema angehalten hat. GIBT ES EINE MÖGLICHKEIT MIT EINSATZ VON JDOM?


----------



## clemson (27. Apr 2006)

hast du das schon probiert??


----------



## java_freaker (27. Apr 2006)

clemson hat gesagt.:
			
		

> hast du das schon probiert??



Nein, aber ich habe so was versucht:

public class Validieren {

    public static void main(String[] args)  {

       try
       {
           SAXBuilder saxBuilder = new SAXBuilder();
           saxBuilder.setValidation(true);
           Document d= saxBuilder.build("test_xml.xml");
           System.err.println( d );


       }
       catch(Exception ex)
       {
           System.out.println(ex.getCause());
       }


    }


}

aber bekomme die Fehlermeldung: org.xml.sax.SAXParseException: Element type "Unternehmen" is not declared.

Danke


----------



## clemson (27. Apr 2006)

also folgender code funktioniert, allerdings muss der xerxes-parser im classpath sein...


```
package org.javaforum.y06.april.jdomschema;

import java.io.File;
import java.io.IOException;

import org.jdom.Document;
import org.jdom.JDOMException;
import org.jdom.input.SAXBuilder;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class JdomSchemaTest
{

	public static void main(String[] args) throws JDOMException, IOException
	{
		File xml = new File("file.xml");

		SAXBuilder builder = new SAXBuilder("org.apache.xerces.parsers.SAXParser", true);
		builder.setFeature("http://apache.org/xml/features/validation/schema", true);
		builder.setProperty("http://apache.org/xml/properties/schema/external-schemaLocation",
				"http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd" + " "
						+ "http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd");
		Document document = builder.build(xml);

		XMLOutputter output = new XMLOutputter(Format.getPrettyFormat());
		output.output(document, System.out);

	}
}
```


----------



## java_freaker (28. Apr 2006)

Aber welche von denen muss ich downloaden: http://apache.imsam.info/xml/xerces-j/


Danke


----------



## clemson (28. Apr 2006)

kommt drauf an, was für ein "zip" format du haben willst.. ? 

soweit ich das seh, sind alles die gleichen parser, nur in verschiedenen archiven verpackt (zumindest die oberen archive, die unteren beinhalten zusätzlich noch den source code bzw. beispiele)

probiers mal mit tar.gz bzw. zip

und aus diesem archiv dann die "xercesImpl.jar" in den classpath schmeissen...


----------



## java_freaker (28. Apr 2006)

Es liefer mir das:

<?xml version="1.0" encoding="UTF-8"?>
<Unternehmen xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="xml_schema.xsd">
  <Mitarbeiter>
    <Vorname>Hagen</Vorname>
    <Vorname>Dieter</Vorname>
    <Name>Becker</Name>
    <Geburtsdatum>1967-08-13</Geburtsdatum>
    <Gehalt>39512.34</Gehalt>
  </Mitarbeiter>
  <Mitarbeiter>
    <Vorname>Jutta</Vorname>
    <Name>Stehl</Name>
    <Geburtsdatum>1976-09-11</Geburtsdatum>
    <Gehalt>42500.34</Gehalt>
  </Mitarbeiter>
</Unternehmen>

d.h. es ist durchgelaufen oder nicht?

Danke


----------



## java_freaker (28. Apr 2006)

Und was heissen die ganzen URL's wie z.B: 
http://www.w3.org/2001/12/soap-envelope soap-envelope.xsd
http://kevinj.develop.com/weblog/weblog.xsd weblog.xsd

Was hat es für einen Grund?

Danke nochmals für deine Hilfe

 :applaus:  :meld:


----------



## byte (28. Apr 2006)

Das musst Du mit Deinem XML Schema austauschen.


----------

