XSD Problem

Status
Nicht offen für weitere Antworten.

CelikBlek

Bekanntes Mitglied
Hallo,

ich habe einen Problem in meiner XSD Datei. Hier erstmal Ausgangssituation.
Ich habe eine XML-Datei, die ich mit einer XSD validiere. Ich habe zur Erstellung den XML SPY benutzt und funktioniert auch so weit bis auf ein Paar Einschränkungen.
Ich parse die XML über den SAXBuilder in Java. Es meckert auch wenn was nicht passt nur bei einem Punkt nicht. Wenn es die erlaubte Länge überschreitet.
Code:
<xs: simpleType name="">
   <xs:restriction base="xs:string">
        <xs:pattern value="[0-9]{2, 10}">
   </xs:restriction>
</xssimpleType>
Was bedeuten würde min. 2 Zeichen und max. 10. Nun wenn der Eintrag unter 2 ist meckert er aber bei max. nicht. Warum? Ausserhalb von Java funzt es (XMLSpy). Woran kann es liegen?

Und ein zweiter Problem. Es funktioniert der default Konstrukt für Attribute nicht.
Code:
<xs:attribute name="partner" default="Herr Hase"/>
Was bedeutet wenn der Attribute leer ist, dann soll es mit Herr Hase gefüllt werden.

Wäre froh, wenn jemand helfen kann. Vielen Dank.
Gruss
 

byte

Top Contributor
Entferne mal das Leerzeichen, also:

Code:
<xs:pattern value="[0-9]{2,10}">

Wegen des zweiten Punkts: Was funktioniert daran denn nicht?
 

CelikBlek

Bekanntes Mitglied
byto hat gesagt.:
Entferne mal das Leerzeichen, also:

Code:
<xs:pattern value="[0-9]{2,10}">
Tut mir leid mein Fehler. In meiner XSD ist es ohne Leerzeichen. Von Syntax her funktioniert es ja auch. Selbst über XMLSpy funktioniert es. -> Wenn ich etwas eingebe der 11 Zeichen hat, dann meckert er. Nur in mein SAXBuilder in Java sag, dass die Datei valid ist. Komischerweise meckert er, wenn es weniger als 2 Zeichen hat :bahnhof:

Wegen des zweiten Punkts: Was funktioniert daran denn nicht?
Die XSD soll mir die XML, der geliefet wird mit den default Wert füllen, wenn es leer ist.
Code:
<myelement partner="">Text</myelement>
Also wenn der Attribut partner leer ist, dann soll XSD mir den default Wert füllen. Hier ein Link zu.
www.w3schools.com/schema/schema_simple_attributes.asp
 

byte

Top Contributor
Hm komisch. Hatte nie Probleme, aber hab auch Apache Xerces zum Validieren verwendet. Vielleicht solltest Du auch mal den Parser wechseln, wenns mit XMLSpy klappt und mit JAXP nicht.
 

byte

Top Contributor
Ne, aber es kommt mir auch spanisch vor, dass der Validierer da etwas am XML-Dokument ändern soll. Denn ansich prüft der ja nur die Struktur der XML-Datei und sagt dann entweder ja oder nö. Wäre mir neu, wenn der auch automatisch Attribute mit Default-Werten füllt.
 

CelikBlek

Bekanntes Mitglied
Ja den xerces habe ich mal probiert, aber hatte da irgendwelche syntax probleme. hast zufällig stück code beispiel? Also zur Zeit lese ich den Pfad für die XSD aus den Properties und das würde ich auch gerne beibehalten, wenn es denn irgendwie geht.
 

CelikBlek

Bekanntes Mitglied
byto hat gesagt.:
Ne, aber es kommt mir auch spanisch vor, dass der Validierer da etwas am XML-Dokument ändern soll. Denn ansich prüft der ja nur die Struktur der XML-Datei und sagt dann entweder ja oder nö. Wäre mir neu, wenn der auch automatisch Attribute mit Default-Werten füllt.
Ok da gebe ich dir recht. Aber schau doch mal den Link von oben bitte an. Wofür ist es denn sonst gut? Es gibt auch eine fixed Variante.
 

byte

Top Contributor
Hab das mal nachgeschlagen in der offiziellen XML-Schema Spezifikation:

http://www.w3.org/TR/xmlschema-0 hat gesagt.:
Default values of both attributes and elements are declared using the default attribute, although this attribute has a slightly different consequence in each case. When an attribute is declared with a default value, the value of the attribute is whatever value appears as the attribute's value in an instance document; if the attribute does not appear in the instance document, the schema processor provides the attribute with a value equal to that of the default attribute. Note that default values for attributes only make sense if the attributes themselves are optional, and so it is an error to specify both a default value and anything other than a value of optional for use.

Demnach stimmt es, was bei W3Schools steht. Ich nehme einfach an, dass der von Dir verwendete SAXBuilder die Spezifikation nicht 100%ig umsetzt. Du kannst mal versuchen, zusätzlich use="optional" hinzuzufügen. Ist zwar ansich unsinnig, weil Attribute ja per Default optional sind, aber vielleicht funktionierts ja dann.

Komisch kommts mir aber trotzdem noch vor, dass Validierer schreibend auf ein XML-Dokument zugreifen sollen...
 

byte

Top Contributor
Bin grad nich an meinem Rechner, aber bei Xerces dürfte entsprechender Beispielcode dabei sein.
 

CelikBlek

Bekanntes Mitglied
Also habe da nochmal eine Frage. Ich möchte gerne die XSD-Pfad aus dem Properties lesen und dem Parser mitgeben. Funktioniert das so?
Code:
                DOMParser parse = new DOMParser();
		String VAL_ID = "http://xml.org/sax/features/validation";
		String S_VAL_ID = "http://apache.org/xml/features/validation/schema";
		try {
			String xsd_pfad = ConfigLoader.getTheInstance().getProperty("xsd_pfad");
			parse.setProperty("http://apache.org/xml/properties/schema/" +
					"external-noNamespaceSchemaLocation", xsd_pfad);
			parse.setFeature(VAL_ID, true);
			parse.setFeature(S_VAL_ID, true);
		} catch (SAXException e) {
			System.err.println("could not set parser feature");
		}
 

byte

Top Contributor
Du musst dabei darauf achten, dass der Pfad zu XSD ne URI (als String) ist. Also wenn die Datei z.B. auf der eigenen Platte liegt, dann mit file:... und Sonderzeichen (z.B. Leerzeichen) müssen entsprechend ersetzt sein.
 

CelikBlek

Bekanntes Mitglied
ich verstehe das nicht. Er findet ja die richtige XSD. Sonst würde es ja nicht beim minimum Grenze reagieren. Wie gesagt bei{2,10} funktioniert es wenn es unter 2 Zeichen besitzt, aber bei max. Grenze 10 nicht.
Wie kann denn sowas sein? Ich kriege noch einen rappel...
Diese zwei Probleme habe ich immer noch. Ich gebe mal den wirklichen Code:
Code:
<xs:attribute name="ansprechpartner" type="ansprechpartner_type" default="Herr Meier"/>
...
<xs:simpleType name="ansprechpartner_type">
   <xs:restriction base="xs:string">
      <xs:maxLength value="30"/>
   </xs:restriction>
</xs:simpleType>



<xs:simpleType name="nr_type">
   <xs:restriction base="xs:string">
	<xs:pattern value="[0-9]{1,10}"/>
   </xs:restriction>
</xs:simpleType>

und das Parsing in Java (SAX Variante):
Code:
SAXBuilder m_SAXBuilder = new SAXBuilder(true);
m_SAXBuilder.setFeature("http://apache.org/xml/features/validation/schema", true);
String xsd_pfad = ConfigLoader.getTheInstance().getProperty("xsd_pfad");
m_SAXBuilder.setProperty("http://apache.org/xml/properties/schema/external-noNamespaceSchemaLocation", xsd_pfad);

Woran liegt es?
 

CelikBlek

Bekanntes Mitglied
So habe die Antwort darauf gefunden.
1. default Werte werden nur dann erzeugt, wenn das Attribut wirklich nicht existiert. Also nicht nur
Code:
<myElement attr=""/>
Da würde er keinen Wert einsetzen.

2. Ich habe die maximal Grenze durch einen anderen Element-Typ abgelöst. Also statt xs:string habe ich nun xs:integer mit minInclusive="1" und maxInclusive"1234567890" genommen. Ist zwar nicht die Lösung, aber so gehts auch.

Also vielen Dank erstmal.
 

byte

Top Contributor
Es freut mich, dass Du die Probleme für Dich lösen konntest. Immer wieder interessant zu sehen, wie wenig Leute sich doch mit XML-Schema zu beschäftigen scheinen. Es scheint echt immernoch nicht sehr weit verbreitet zu sein, in Anbetracht der Tatsache, wie wenig Leute auf Schema-Fragen antworten. Dabei gibts die Empfehlung nun schon seit ~5 Jahren und XML-Schema ist IMO wirklich so viel besser als DTD. :roll:
 

CelikBlek

Bekanntes Mitglied
Ich will mich nochmal bei dir direkt bedanken :)
Leider habe ich zwar keine antwort gefunden, warum Angabe der Obergrenze nicht funktioniert, aber Problem erstmal anders gelöst. ???:L
Vielleicht taucht ja jemand auf und hat eine bessere Lösung.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
O XPATH Problem - Anfänger XML & JSON 4
so_ein_Komischer Problem mit Clean and Build XML & JSON 1
P JAXB-Problem XML & JSON 1
W Problem mit dem mit XML sortierung XML & JSON 2
S Jaxb Unmarshalling Problem XML & JSON 4
E einfaches Problem XML + XSD + jedit XML & JSON 2
S Xslt Problem XML & JSON 2
B JasperReport Problem in Runtime XML & JSON 2
S Problem with JAXB unmarshalling classes that have the same name in @XmlRootElement XML & JSON 2
R Problem bei: XML und XSL zu HTML XML & JSON 2
M Read / write Problem beim ByteStrom XML & JSON 2
M XML write Problem zweiter Ansatz XML & JSON 3
M XML read Problem XML & JSON 4
M XML write Problem XML & JSON 2
whitenexx Problem beim parsen von Facebook XML XML & JSON 3
M XML Unicode Problem XML & JSON 2
S XJC --> Java-Objects compile Problem XML & JSON 4
F XPath-Problem mit DOM4J XML & JSON 8
B JPA + JAXB Mapping Problem XML & JSON 2
T XPath Problem: finden einer Node nach Attributswert XML & JSON 2
G Problem beim schreiben von XML in eine File XML & JSON 2
S Encoding Problem XML & JSON 7
K JAXB und Maps -> Marshalling-Problem XML & JSON 6
B Problem beim löschen von ChildNodes aus einem XML-DOM XML & JSON 3
E JDOM - Problem beim Zusammenfügen zweier Dateien XML & JSON 2
M JExcelAPI (JXL) Encoding Problem XML & JSON 11
S DOM Parsen Problem mit HTML Sonderzeichen XML & JSON 4
A aus xml --> html Problem XML & JSON 3
Y stax Problem XML & JSON 3
slawaweis Problem mit XSLT (wahrscheinlich ein Bug in Java 6) XML & JSON 16
T Problem beim Parsen von Attribut xmlns="urn:com:test&qu XML & JSON 6
P XPath Problem XML & JSON 2
J Problem beim XML-Lesen XML & JSON 2
M Problem mit FOP in Java Programm XML & JSON 2
S Problem mit XPath XML & JSON 4
J Problem mit compile einer XSD XML & JSON 3
N jdom problem beim lesen von child elementen XML & JSON 5
N problem bei xml lesen mit jdom XML & JSON 2
A XPath Problem XML & JSON 2
W JDOM element ändern funzt nich :( [problem gelöst] XML & JSON 3
G Problem mit XML-Schema Validierung mit Java XML & JSON 12
B jdom: getChildren() problem XML & JSON 4
H XSL-FO Problem mit If XML & JSON 2
loadbrain XPath Problem XML & JSON 2
T addContent / Problem mit Variable XML & JSON 2
F Problem mit JAXB Unmarshaller XML & JSON 2
F JDOM und XPath - Problem mit Namespace ohne Prefix XML & JSON 5
8 SAXParser Problem, startElement wird nicht ausgeführt XML & JSON 2
M Java und XSLT: Performanz-Problem XML & JSON 5
X JDOM SAXBuilder Validationschema - Problem XML & JSON 8
G Problem mit getContent XML & JSON 4
K stax problem XML & JSON 2
S Problem mit SAX XML & JSON 6
A Problem mit JasperReport XML & JSON 6
G DOCTYPE Problem beim Transformer/TransformerFactory etc. XML & JSON 13
R Problem bei Erstellung von XML(JDOM) XML & JSON 3
R Problem mit SAX-Parser characters() XML & JSON 7
M XPath Problem im Zusammenhang mit document() XML & JSON 2
P Problem beim erstellen eines neuen Elements (JDOM) XML & JSON 5
Z Problem mit getNodeValue() und setNodeValue() in DOM XML & JSON 6
H JAXB CUSTOMIZATION PROBLEM XML & JSON 2
M XPATH und RSS (Problem namespaces) XML & JSON 7
P SAXParser problem? XML & JSON 2
S Problem beim Erstellen eines pdfs XML & JSON 3
V Problem mit xsd XML & JSON 2
P XML mit hilfe von JDOM abspeichern macht Problem XML & JSON 6
G Problem mit addContent() XML & JSON 4
B DTD Problem - Reihenfolge der Einträge XML & JSON 2
R Problem beim Auslesen von Attributen XML & JSON 4
K Problem mit ant/java web services XML & JSON 4
K xml Datei mit JDOM erzeugen, Problem Namespaces XML & JSON 1
P Problem mit XML und DOM XML & JSON 2

Ähnliche Java Themen

Neue Themen


Oben