[
https://issues.apache.org/jira/browse/XERCESJ-1391?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12754269#action_12754269
]
Khaled Noaman commented on XERCESJ-1391:
----------------------------------------
Hi Mukul,
I can see a problem when saving inheritable attributes.
1. The push and pop of the size of inheritable attributes should be consistent
(i.e. always push in startElement and always pop in endElement - if we are
processing an XML 1.1 schema)
2. You should be pushing the current size of inheritable attributes (and not
how many you are adding in a given startElement).
3. In endElement, it's enough to set the size of fInheritableAttrList with
value poped from fInhrAttrCountStack.
So, in startElement, I would change your code to:
// find attributes among the attributes of this element, which are
// declared inheritable. The inheritable attributes will later be used
// for processing CTA.
if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
fInhrAttrCountStack.push(fInheritableAttrList.size());
if (attributes.getLength() > 0) {
// get inheritable attributes, only if an element has a complex
type (i.e, has
// > 0 attributes.
saveInheritableAttributes(attributes);
}
}
and remove the pushing of the size from saveInheritableAttributes
And in endElement, I would change the code to:
// inheritable attribute processing
// pop the 'fInhrAttrCountStack' stack, and remove elements from the
// inheritable attribute list. This ensures, that context information
// for inheritable attributes is modified.
if (fSchemaVersion == Constants.SCHEMA_VERSION_1_1) {
fInheritableAttrList.setSize(fInhrAttrCountStack.pop());
}
Regards,
Khaled
> inheritable attributes implementation, and related CTA enhancements
> -------------------------------------------------------------------
>
> Key: XERCESJ-1391
> URL: https://issues.apache.org/jira/browse/XERCESJ-1391
> Project: Xerces2-J
> Issue Type: New Feature
> Components: XML Schema 1.1 Structures
> Affects Versions: 2.9.1
> Reporter: Mukul Gandhi
> Assignee: Khaled Noaman
> Attachments: inhr_attr_patch.txt, test.xml, test.xsd
>
>
> Hi all,
> I have written an implementation, for XML Schema 1.1 inheritable
> attributes. I am creating this JIRA issue for inheritable
> attributes, with a patch.
> I think, that a review of these changes would be good before we commit these
> changes to SVN server. This will help to ensure the correctness of
> implementation, and better quality of the code.
> I request, that this JIRA issue be assigned to the appropriate reviewer.
> Below are some implementation details, and a bit of design thinking I have in
> mind, for inherited attributes implementation.
> This patch has all the implementation for attribute traversal changes, and
> also some changes in XMLSchemaValidator.java
> (which are currently not finalized, but I plan to use these changes in CTA
> and assertions enhancements, for inheritable
> attributes).
> I am also attaching a dummy XML and XSD files, which I used to verify the
> attribute traversal changes. The attached XML is
> valid, for the given XSD, using the current XML Schema 1.1 code in SVN, plus
> this patch that I have written.
> As mentioned above, apart from attribute traversal changes (which are working
> fine, and tested at my end), the following code has been written in
> XMLSchemaValidator.java, which I plan to use to enhance CTA and assertions
> implementation, for inherited attributes:
> I have written a new method, saveInheritableAttributes(..) in
> XMLSchemaValidator.java, which I am invoking from,
> handleStartElement method.
> [1] CTA (conditional type assignment) changes
> I plan to enhance CTA implementation as following, to be able to use
> inherited attributes:
> In XMLSchemaValidator.java, I plan to modify the code fragment for CTA (the
> fragment, //process type alternatives). I'll add
> inherited attributes from the list, fInheritableAttrMap (using the element
> level information, which is the key to this map
> object) to the "attributes (of type XMLAttributes)" list.
> Rest of the code for CTA will remain same. The statement,
> if (test != null && test.evaluateTest(element, attributes)) {
> would use the new list of attributes (attributes, which are physically
> present on this element, plus the inherited attributes).
> After the CTA processing is complete (i.e after a type from CTA is assigned
> to the element), I'll remove the inherited
> attributes from the "attributes" list, so the original set of attributes is
> used by code after CTA processing.
> I think, these are all the changes that are required to enhance CTA
> implementation, to be able to use inherited attributes.
> [2] Assertion enhancements
> I plan to enhance assertions implementation as following, to be able to use
> inherited attributes:
> In the, handleStartElement method, I'll pass the inherited attributes as well
> to the assertions interface.
> To do this, I think following:
> addAssertsForEvaluation(element, attributes);
> would change to something like,
> addAssertsForEvaluation(element, attributes, inheritedattributes);
> In XMLAssertPsychopathImpl.java, I'll add the inherited attributes as well in
> the XDM tree to all descendant elements.
> I think, these changes would be sufficient, to implement inherited
> attributes, on assertions.
> I have just outlined the logic to enhance CTA and assertions, for inherited
> attributes. The final code, might look a bit
> different, than the specifics I have mentioned here.
> I would be thankful, if you could send me the feedback to this patch, and
> confirmation (and feedback) that CTA and assertions design changes, look ok.
> After I recieve the feedback to this patch, and to CTA and assertions design
> changes, I'll do the suggested modifications.
> I would appreciate, feedback from any member of the xerces-dev community, as
> well.
> Regards,
> Mukul
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]