Ik ben nu al een tijdje aan het proberen om een stukje XML te valideren in Java met behulp van een Xerces SAX parser. Overal op internet kwam ik voorbeelden tegen die allemaal neerkwamen op de java code zoals hieronder.
Om te testen heb ik een klein XML bericht met een simpel xml-schema gebruikt.
In de java code ga ik er vanuit dat wanneer er geen exceptions optreden de xml gevalideerd is. Alle fouten zouden namelijk aan de errorHandler gegeven moeten worden en deze gooit bij mij de exception gewoon door.
In de huidige situatie wordt de xml gevalideerd, ongeacht het datatype van de velden to,from,heading en body (dat String zou moeten zijn). Het is zelfs erger, er wordt niet eens gekeken naar die elementen. Het maakt nu namelijk niet uit hoe de elementen in de XML heten. Die 4 elementen to,from,heading en body mogen zelfs helemaal weg gelaten worden en nog krijg ik geen foutmelding.
Ik zou dus zeggen dat de de XML helemaal niet tegen het goede schema gevalideerd wordt. Echter, wanneer ik de naam van het rootelement('note') in de xml aanpas dan krijg ik wel een foutmelding.
De verwachting is dus dat of de xml-schema niet strict genoeg is, of er mist nog iets essentieels in de java code. Wie helpt mij op weg?
Om te testen heb ik een klein XML bericht met een simpel xml-schema gebruikt.
In de java code ga ik er vanuit dat wanneer er geen exceptions optreden de xml gevalideerd is. Alle fouten zouden namelijk aan de errorHandler gegeven moeten worden en deze gooit bij mij de exception gewoon door.
In de huidige situatie wordt de xml gevalideerd, ongeacht het datatype van de velden to,from,heading en body (dat String zou moeten zijn). Het is zelfs erger, er wordt niet eens gekeken naar die elementen. Het maakt nu namelijk niet uit hoe de elementen in de XML heten. Die 4 elementen to,from,heading en body mogen zelfs helemaal weg gelaten worden en nog krijg ik geen foutmelding.
Ik zou dus zeggen dat de de XML helemaal niet tegen het goede schema gevalideerd wordt. Echter, wanneer ik de naam van het rootelement('note') in de xml aanpas dan krijg ik wel een foutmelding.
De verwachting is dus dat of de xml-schema niet strict genoeg is, of er mist nog iets essentieels in de java code. Wie helpt mij op weg?
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
| import org.apache.xerces.parsers.SAXParser; public class SchemaTest { public static void main (String args[]) { try { SAXParser parser = new SAXParser(); parser.setFeature("http://apache.org/xml/features/validation/schema", true); parser.setErrorHandler(new ErrorChecker()); parser.parse("note.xml"); System.out.println("Valid"); } catch (Exception e) { System.out.print("\nProblem parsing the file. \n"); System.err.print(e); } } } |
code:
1
2
3
4
5
6
7
| <?xml version="1.0" encoding="UTF-8"?> <note xmlns="http://www.w3schools.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.w3schools.com note.xsd"> <to>Tove</to> <from>Jani</from> <heading>Reminder</heading> <body>Don't forget me this weekend!</body> </note> |
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| <?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.w3schools.com" xmlns="http://www.w3schools.com" elementFormDefault="qualified">
<xs:element name="note">
<xs:complexType>
<xs:sequence>
<xs:element name="to" type="xs:string"/>
<xs:element name="from" type="xs:string"/>
<xs:element name="heading" type="xs:string"/>
<xs:element name="body" type="xs:string"/>
</xs:sequence>
</xs:complexType>
</xs:element>
</xs:schema> |
Strix (Skullflame)