The SchemaBuilder interface defines methods having a locator parameter. The
implementation from com.thaiopensource.relaxng.input.parse uses that
information but the implementation from the pattern module,
com.thaiopensource.relaxng.pattern uses the Locator only for some patterns.
This results in reporting errors without any location information.
A sample schema for which Jing does not report any location on the error is:
<grammar xmlns="http://relaxng.org/ns/structure/1.0"
datatypeLibrary="http://www.w3.org/2001/XMLSchema-datatypes">
<start>
<oneOrMore>
<element name="test">
<empty/>
</element>
</oneOrMore>
</start>
</grammar>
for which Jing gets only an error message
"found element matching the prohibited path start//oneOrMore in the simplified
XML form of the schema (see section 7.1 of the RELAX NG specification)"
A possible location associated with this error would be the location of the
oneOrMore pattern in the schema, but that cannot be set now because there is no
locator stored for the oneOrMore pattern.
So basically there will be two steps:
1. Add a Locator parameter on the make... methods from PatternBuilder and in
the derived classes (SchemaPatternBuilder and ValidatorPatternBuilder) and then
pass that along to the created patterns (the patterns that do not store a
locator need to be changed to allow setting them a locator)
2. Enhance the exceptions with location information where we do not set that,
for example the checkRestrictions methods from most of the patterns.
Original issue reported on code.google.com by georgebina76 on 10 Jun 2010 at 1:09
Original issue reported on code.google.com by
georgebina76
on 10 Jun 2010 at 1:09