Hi Radu,

I agree it would be helpful to the user if Xerces reported multiple IDREF 
errors. I'll take a look at this one. 

Thanks.

Michael Glavassevich
XML Technologies and WAS Development
IBM Toronto Lab
E-mail: [email protected]
E-mail: [email protected]

Radu Coravu <[email protected]> wrote on 28/08/2012 09:32:53 AM:

> Hi Mukul,
> 
> I work for Oxygen XML Editor and we are updating the used Xerces library 

> in order to benefit from the experimental XML Schema 1.1 validation.
> The patches we make to fix things in Xerces are different from the ones 
> you would make to the Xerces code because we try to have as little 
> modifications as possible in the patched classes.
> 
> In the case of this bug, probably the method:
> 
> org.apache.xerces.impl.validation.ValidationState.checkIDRefID()
> 
> which is overridden in:
> 
> 
org.apache.xerces.impl.validation.ConfigurableValidationState.checkIDRefID()
> 
> would be modified to be do like:
> 
> >     /**
> >      * return null if all IDREF values have a corresponding ID value;
> >      * otherwise return the first IDREF value without a matching ID 
value.
> >      */
> >     public String[] checkIDRefIDs () {
> >         List<String> brokenIDs = null;
> >         Iterator iter = fIdRefTable.keySet().iterator();
> >         String key;
> >         while (iter.hasNext()) {
> >             key = (String) iter.next();
> >             if (!containsID(key)) {
> >               if(brokenIDs == null) {
> >                 brokenIDs = new ArrayList<String>();
> >               }
> >               brokenIDs.add(key);
> >             }
> >         }
> >         return brokenIDs != null ? brokenIDs.toArray(new String[0]) : 
null;
> >     }
> 
> Then in all places where it is currently referenced, have a loop which 
> iterates all broken IDs and outputs a message.
> The problem is that the reported broken IDREFS will not be reported in 
> document order as they are stored in a hash map.
> 
> Regards,
> Radu
> 
> Radu Coravu
> <oXygen/>  XML Editor, Schema Editor and XSLT Editor/Debugger
> http://www.oxygenxml.com
> 
> On 8/28/2012 3:31 PM, Mukul Gandhi wrote:
> > Hi Radu,
> >     You seem to be reporting few issues with Xerces, recently. This is
> > very helpful for our project. If you're in a position to submit any
> > patches for the issues, it'll speed up solving the reported errors.
> >
> > On Tue, Aug 28, 2012 at 5:37 PM, Radu Coravu (JIRA)
> > <[email protected]> wrote:
> >> Radu Coravu created XERCESJ-1581:
> >> ------------------------------------
> >>
> >>               Summary: Report all id/idref problems when 
> validating XML against DTD or XML Schema
> >>                   Key: XERCESJ-1581
> >>                   URL: 
https://issues.apache.org/jira/browse/XERCESJ-1581
> >>               Project: Xerces2-J
> >>            Issue Type: Improvement
> >>              Reporter: Radu Coravu
> >>              Priority: Minor
> >>
> >>
> >> By default when the first broken IDREF is found an error is 
> reported and no other IDREF is checked.
> >> Because of this an use who has a lot of broken IDREFS would have 
> to fix the problems one at a time and to run the validation after each 
fix.
> >> Instead if would be nice if all broken IDREFS were reported as 
errors.
> >> So the method 
> "org.apache.xerces.impl.validation.ValidationState.checkIDRefID()" 
> could report all broken IDREFS and then you could build and throw a 
> message for each one.
> >>
> >> So if the following XML would be validated with the Xerces sample
> "personal.xsd" the validation should report more problems than it does 
not:
> >>
> >> <personnel xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance";
> >>   xsi:noNamespaceSchemaLocation="personal.xsd">
> >>      <person id="Big.Boss">
> >>          <name>
> >>              <family>Boss</family>
> >>              <given>Big</given>
> >>          </name>
> >>          <email>[email protected]</email>
> >>          <link subordinates="one.worker two.worker three.worker 
> four.worker five.worker"/>
> >>      </person>
> >>      <person id="one.worker">
> >>          <name>
> >>              <family>Worker</family>
> >>              <given>One</given>
> >>          </name>
> >>          <email>[email protected]</email>
> >>          <link manager="Big.Boss2"/>
> >>      </person>
> >>      <person id="two.worker">
> >>          <name>
> >>              <family>Worker</family>
> >>              <given>Two</given>
> >>          </name>
> >>          <email>[email protected]</email>
> >>          <link manager="Big.Boss3"/>
> >>      </person>
> >>      <person id="three.worker">
> >>          <name>
> >>              <family>Worker</family>
> >>              <given>Three</given>
> >>          </name>
> >>          <email>[email protected]</email>
> >>          <link manager="Big.Boss4"/>
> >>      </person>
> >>      <person id="four.worker">
> >>          <name>
> >>              <family>Worker</family>
> >>              <given>Four</given>
> >>          </name>
> >>          <email>[email protected]</email>
> >>          <link manager="Big.Boss5"/>
> >>      </person>
> >>      <person id="five.worker">
> >>          <name>
> >>              <family>Worker</family>
> >>              <given>Five</given>
> >>          </name>
> >>          <email>[email protected]</email>
> >>          <link manager="a"/>
> >>      </person>
> >> </personnel>
> >
> >
> >
> >
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]

Reply via email to