Newsgroup: it.comp.java
Titolo: validazione xml

ho bisogno di un aiuto urgente devo usae java per validare un file xml ma nn
so come fare. Ho provato in vari modo usando sia xerces che dom4j ma penso
di aver usato in maniera errata i metodi perchè mi viene restituito come
errore il fatto di non aver indicato la grammatica ecc..
SE qualcuno può aiutarmi ne sarei grato.. Aiuto

La validazione di File XML avviene tramite dei DTD. Devi avere il DTD
relativo al tuo XML e passarlo al parser che si occuperà di validarlo.

 wrote in
news:z3GNa.150450$
lK4.4...@twister1.libero.it
: 

Devi costruire un DTD o - vagamente piu' facile - un XSchema (cfr. 
http://www.w3.org/XML/Schema
).
Poi, nel primo elemento del tuo documento XML, devi indicare che il 
documento segue lo schema che hai creato, usando gli attributi xmlns:xsi 
(che dichiara il namespace 'xsi')  e xsi:schemaLocation (che dichiara dove 
sta il tuo schema):
xmlns:xsi="
http://www.w3.org/2001/XMLSchema-instance
" 
xsi:schemaLocation="..URL del tuo schema..."
-- 
Fighting for peace is like fucking for virginity
ObjectZone - 
http://space.tin.it/computer/csadun

...

Mi scuso innanzitutto per la lunghezza del post.
Quel file di grammatica che non hai indicato può essere o un file DTD
oppure XML schema.
ti allego un piccolo esempio:
immagina di avere il fantomatico file todolist.xml
<?xml version="1.0"?>
<!DOCTYPE todolist SYSTEM "todolist.dtd">
<todolist>
    <item>
        <number>1</number>
	<priority>6</priority>
        <description>Leggere la posta</description>
        <state>2</state>
    </item>
    <item>
        <number>2</number>
        <priority>9</priority>
        <description>Riunione</description>
        <state>2</state>
    </item>
    <item>
        <number>3</number>
        <priority>8</priority>
        <description>Andare a correre nel parco</description>
        <state>1</state>
    </item>
</todolist>
Se vuoi validare il file XML devi aggiungere il tag 
<!DOCTYPE todolist SYSTEM "todolist.dtd"> subito prima della root
della tua struttura XML (puoi anche inserirlo direttamente nel file
XML ma no è cosa buona :- ).
Il file DTD sarà così composto:
<!ELEMENT todolist (item)*>
<!ELEMENT item (number,priority,description,state)>
<!ELEMENT number (#PCDATA)>
<!ELEMENT priority (#PCDATA)>
<!ELEMENT description (#PCDATA)>
<!ELEMENT state (#PCDATA)>
Ora lato Java (con parser SAX - ma puo iusare anche il DOM) questi
sono i passi che devi compiere:
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
DefaultHandler handler = new DummyHandler();
parser.parse(new FileInputStream(docURI), handler);
Se utilizzi uno XML schema il file todolist.xml sarà uguale (ad
esclusione della dichiarazione di DOCTYPE che verrà omessa)
Il file XML schema (con estensione .xsd) sarà così formato:
<xsd:schema xmlns:xsd="
http://www.w3.org/2001/XMLSchema
">
	<xsd:element name="todolist">
		<xsd:complexType>
			<xsd:sequence>
				<xsd:element ref="item" minOccurs="0" maxOccurs="unbounded"/>
			</xsd:sequence>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="item">
		<xsd:complexType>
			<xsd:all>
				<xsd:element name="number" type="xsd:integer"/>
				<xsd:element ref="priority"/>
				<xsd:element name="description" type="xsd:string"/>
				<xsd:element name="state" type="xsd:integer"/>
			</xsd:all>
		</xsd:complexType>
	</xsd:element>
	<xsd:element name="priority">
		<xsd:simpleType>
			<xsd:restriction base="xsd:integer">
				<xsd:minExclusive value="1"/>
				<xsd:maxExclusive value="10"/>
			</xsd:restriction>
		</xsd:simpleType>
	</xsd:element>
	<xsd:element name="priority">
		<xsd:simpleType>
			<xsd:minExclusive value="0"/>
			<xsd:maxExclusive value="10"/>
		</xsd:simpleType>
	</xsd:element>
</xsd:schema>
Lato Java (sempre utilizzando SAX) dovrai fare queste cose:
final static String JAXP_SCHEMA_LANGUAGE =
"
http://java.sun.com/xml/jaxp/properties/schemaLanguage
";
final static String JAXP_SCHEMA_SOURCE =
"
http://java.sun.com/xml/jaxp/properties/schemaSource
";
final static String W3C_XML_SCHEMA =
"
http://www.w3.org/2001/XMLSchema
";
SAXParserFactory factory = SAXParserFactory.newInstance();
factory.setNamespaceAware(true);
factory.setValidating(true);
SAXParser parser = factory.newSAXParser();
parser.setProperty(JAXP_SCHEMA_LANGUAGE, W3C_XML_SCHEMA);
parser.setProperty(JAXP_SCHEMA_SOURCE, new File(schemaURI));
DefaultHandler handler = new DummyHandler();
parser.parse(new FileInputStream(docURI), handler);
Ecco fatto....Ovviamente per motivi di spazio ti rimando ad uno studio
della grammatica per definire un DTD oppure uno schema
http://www.zvon.org/xxl/DTDTutorial/General/book.html
http://www.zvon.org/xxl/xmlSchema2001Reference/Output/Schema/index.html
Spero di essere stato di aiuto.
G.M.