commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Adrian Herscu <bmf1...@axentra.net>
Subject [jelly] Schema validation problems
Date Wed, 06 Jul 2005 16:41:25 GMT
Hi all,

I am trying to build a Maven plugin for validating XML. Currently I have 
this code:

<!-- assume ${schema.type.uri} is http://www.w3.org/2001/XMLSchema -->
<core:set
   var="verifierFactory"
   value=
"${org.iso_relax.verifier.VerifierFactory.newInstance(schema.type.uri)}" />

<!-- assume everything in ${file.set} is an XML file -->
<ant:fileScanner var="fileSet">
   <ant:fileset dir="${file.set}" />
</ant:fileScanner>

<validate:verifier
   var="verifier"
   factory="${verifierFactory}"
   uri="schema.uri" />

<!-- THIS DOES NOT WORK -- RETURNS AN EMPTY STRING -->
<echo>Validating using ${verifierFactory.getClass().toString()}</echo>

<core:forEach items="${fileSet.iterator()}" var="file">
   <echo>Validating ${file}</echo>

   <validate:validate var="validationResult" verifier="${verifier}">
     <core:include uri="file:///${file}" />
   </validate:validate>

   <echo>Validation result: ${validationResult}</echo>
</core:forEach>

There are several problems with this code:

1. If the schema file pointed by ${schema.uri} references other schema 
file by using a relative URL, then that URL is resolved relatively to 
the location from where the validation process was started (the path 
from where Maven was launched), instead of being resolved relatively to 
the first schema file location (this is what XML schema validators do -- 
checked with MSXML3.0 and with Xerces).

2. If the schema instance (i.e. the validated file) contains an 
"xsi:schemaLocation" attribute in its root element then this error is 
thrown:
<error column="-1" line="-1">unexpected attribute 
"xsi:schemaLocation"</error>
and the ${validationResult} is set to 'false'.

3. If the validation failed once (like in #3), then errors are not 
thrown anymore, only the ${validationResult} is set to 'false'.

4. If <core:include uri="..." /> references a local file path then that 
file path must be prepended with "file:///", otherwise it is prepended 
at run-time with the process launch path. For example:
- local file path: E:\myxmldir\foo.xml
- process launch path: E:\myworkdir
then Jelly will seek for something impossible: 
E:\myworkdir\E:\myxmldir\foo.xml

Thanks a lot for your time,
Adrian.


---------------------------------------------------------------------
To unsubscribe, e-mail: commons-user-unsubscribe@jakarta.apache.org
For additional commands, e-mail: commons-user-help@jakarta.apache.org


Mime
View raw message