Kann sich mal bitte kurz jemand meine XSD anschauen? :-)

Happyman0815

Mitglied
Hallo Leute!

Ich musste das erste mal jetzt eine xsd schreiben um ein XML Dokument zu validieren. Scheinbar klappt es noch nicht ganz, daher wäre es nett, wenn mal kurz jemand einen Blick drauf werfen kann.


Hier ist meine XSD:

[XML]
<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
elementFormDefault="qualified"
xmlns="urn:nonstandard:test"
targetNamespace="urn:nonstandard:test">


<xsd:element name="ERP" type="erp" />
<xsd:complexType name="erp">
<xsd:all>
<xsd:element name="ordertype" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="weightCost" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="weightDelivery" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="high_priority" type="xsd:string" minOccurs="1" maxOccurs="1" />
<xsd:element name="ldr_blueprint" type="xsd:string" minOccurs="1" maxOccurs="1" />
</xsd:all>
</xsd:complexType>
</xsd:schema>
[/XML]


und hier ist meine XML File zu dieser XSD:

[XML]
<?xml version="1.0" encoding="UTF-8"?>
<ERP>
<ordertype>requestOffer</ordertype>
<weightCost>50</weightCost>
<weightDelivery>50</weightDelivery>
<high_priority>false</high_priority>
<ldr_blueprint>0 Untitled
0 Name: o </ldr_blueprint>
</ERP>
[/XML]


Die XML File ist laut folgender Testfunktion:

Java:
	boolean validateXML(String xmlString, String schemaFilePath)
	 {
		 try {
		      String schemaLang = "http://www.w3.org/2001/XMLSchema";
		      SchemaFactory factory = SchemaFactory.newInstance(schemaLang);
		      Schema schema = factory.newSchema(new StreamSource(schemaFilePath));
		      Validator validator = schema.newValidator();
		      validator.validate(new StreamSource(new StringReader(xmlString)));
		    }catch (SAXException ex) {
		    	return false; // document is not valid:
		    } catch (Exception ex) {
		      ex.printStackTrace();
		      return false;
		    }
		    return true;
	 }

nicht valide. Kann es sein das die XSD einen Fehler hat?


Gruß
Happy
 
Zuletzt bearbeitet:

Happyman0815

Mitglied
Java:
org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document './requestOffer.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaErr(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.reportSchemaError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.getSchemaDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.traversers.XSDHandler.parseSchema(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadSchema(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaLoader.loadGrammar(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.validation.XMLSchemaFactory.newSchema(Unknown Source)
	at javax.xml.validation.SchemaFactory.newSchema(Unknown Source)
	at 
ClientRequestProcessor.validateXML(ClientRequestProcessor.java:532)


hmm.. könnte es sein, dass ich die XSD-File falsch übergebe? Ich mache heute aber erstmal Feierabend!

Gruß
Happy
 

Happyman0815

Mitglied
Hallo!

So nun habe ich mal den Pfad angepasst und siehe da: Nächster Fehler ;(

Java:
org.xml.sax.SAXParseException: cvc-elt.1: Cannot find the declaration of element 'ERP'.
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.createSAXParseException(Unknown Source)
	at com.sun.org.apache.xerces.internal.util.ErrorHandlerWrapper.error(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLErrorReporter.reportError(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.handleStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.xs.XMLSchemaValidator.startElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(Unknown Source)
	at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.validation.StreamValidatorHelper.validate(Unknown Source)
	at com.sun.org.apache.xerces.internal.jaxp.validation.ValidatorImpl.validate(Unknown Source)
	at javax.xml.validation.Validator.validate(Unknown Source)
	at 
ClientRequestProcessor.validateXML(ClientRequestProcessor.java:534)

Das Element ERP ist doch vorhanden...
 

Happyman0815

Mitglied
Wenn ich den XSD Header wie folgt ändere:

Java:
<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">


    <xsd:element name="ERP" type="erp" />
    ...
</xsd:schema>

funktioniert es... Ist die XSD nun falsch oder macht es Sinn? :oops:
 
Zuletzt bearbeitet:
H

heinzHerbert

Gast
In deiner XSD gibst du mit targetNamespace an aus welchem Namespace die Elemente in deinem XML-Dokument kommen müssen. Je nachdem, wie du es haben möchtest musst du das korrigieren:

  • Möglichkeit 1 hast du schon selbst gefunden: entfernen von
    Code:
    targetNamespace="..."
    und
    Code:
    xmlns="..."
    aus deiner XSD.
  • Möglichkeit 2: Du gibst im XML-Dokument den Namespace mit an:

    [xml]
    <?xml version="1.0" encoding="UTF-8"?>
    <ERP xmlns="urn:nonstandard:test">
    <ordertype>requestOffer</ordertype>
    <weightCost>50</weightCost>
    <weightDelivery>50</weightDelivery>
    <high_priority>false</high_priority>
    <ldr_blueprint>0 Untitled
    0 Name: o </ldr_blueprint>
    </ERP>
    [/xml]
 

Ähnliche Java Themen

Neue Themen


Oben