You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-dev@xerces.apache.org by "Angelo (JIRA)" <xe...@xml.apache.org> on 2019/07/18 11:30:00 UTC

[jira] [Created] (XERCESJ-1710) XSD 1.1 all XS11AllCM#whatCanGoHere doesn't take care of maxOccurs="unbounded"

Angelo created XERCESJ-1710:
-------------------------------

             Summary: XSD 1.1 all XS11AllCM#whatCanGoHere doesn't take care of maxOccurs="unbounded"
                 Key: XERCESJ-1710
                 URL: https://issues.apache.org/jira/browse/XERCESJ-1710
             Project: Xerces2-J
          Issue Type: Bug
          Components: XML Schema 1.0 Structures
    Affects Versions: 2.12.0
            Reporter: Angelo


Hi all,

I consume XSCMValidator API to manage completion in XML editor based on XML Schema by taking care of existing XML elements and filter available elements according XML Schema constraints.

It works great except whis xs:all in XSD 1.1 and maxOccurs="unbound"

For instance if I have this xs:all:

------------------------------------------------------------

<xs:all>
 <xs:element name="testEle" minOccurs="1" maxOccurs="unbounded" type="xs:string"/>
 <xs:element name="testEleTwo" type="xs:string"/>
 </xs:all>

------------------------------------------------------------

and I have this XML file:

------------------------------------------------------------

     <t:testEle>A</t:testEle>
     <t:testEle>B</t:testEle>

|
     <t:testEleTwo>C</t:testEleTwo>

------------------------------------------------------------

If I open completion on | (after the 2 t:testEle, I would like to have 

 

 * t:testEle

 * t:testEleTwo

 

but I have only:

 * t:testEleTwo

 

After debugging Xerces, it appears that you don't take care of "unbound" in the XS11AllCM#whatCanGoHere.

 

You do this test:

------------------------------------------------------------

if (state[i] == STATE_START || state[i] < fMaxOccurs[i]) {

------------------------------------------------------------

although I think test should be:

------------------------------------------------------------

if (state[i] == STATE_START || state[i] < fMaxOccurs[i] || fMaxOccurs[i] == SchemaSymbols.OCCURRENCE_UNBOUNDED) {

------------------------------------------------------------

 

This errors occurs in the following code:

 * [https://github.com/apache/xerces2-j/blob/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java#L328]

 * [https://github.com/apache/xerces2-j/blob/xml-schema-1.1-dev/src/org/apache/xerces/impl/xs/models/XS11AllCM.java#L336]

 

It seems this bug doesn't affect validation since in this case XS11AllCM#whatCanGoHere is never called.

 

Many thank's for your help.

 

Regard's Angelo



--
This message was sent by Atlassian JIRA
(v7.6.14#76016)

---------------------------------------------------------------------
To unsubscribe, e-mail: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org