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 "Hiranya Jayathilaka (JIRA)" <xe...@xml.apache.org> on 2009/01/26 07:22:59 UTC

[jira] Updated: (XERCESJ-1351) Type alternatives implementation seems to be broken

     [ https://issues.apache.org/jira/browse/XERCESJ-1351?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Hiranya Jayathilaka updated XERCESJ-1351:
-----------------------------------------

    Attachment: type-alternatives.patch

I have been working on improving the type alternatives implementation of Xerces during the last couple of weeks. I generated an XPath parser using  JavaCC. The resulting type alternatives implementation can handle all the production rules in the grammar stated in the spec. Also it does not use any data in the PSVI during XPath evaluation. Value comparisons are carried out according to the XPath 2.0 spec. The new implementation is almost complete and it can deal with all forms of test expressions except for some casts.

I have attached a patch herewith for some early feedback. Please have a look and let me know what you think. This implementation uses the validate method in XSSimpleType API to perform castings. Hence it cannot handle certain castings. We need to find a better way of performing the castings.

> Type alternatives implementation seems to be broken
> ---------------------------------------------------
>
>                 Key: XERCESJ-1351
>                 URL: https://issues.apache.org/jira/browse/XERCESJ-1351
>             Project: Xerces2-J
>          Issue Type: Bug
>          Components: XML Schema 1.1 Structures
>    Affects Versions: 2.9.1
>         Environment: Windows XP, JRE 1.5.0_15
>            Reporter: Mukul Gandhi
>            Assignee: Khaled Noaman
>         Attachments: type-alternatives.patch
>
>
> I am running the latest Xerces-J development code from SVN repository. I tried the following sample XML document, and the XML Schema document.
> XML document:
> <PERSON xsi:noNamespaceSchemaLocation="person.xsd" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
>   <FNAME>Mukul</FNAME>
>   <LNAME>Gandhi</LNAME>
>   <DOB>1999-06-02</DOB>
>   <ADDRESS type="short">my address</ADDRESS>
> </PERSON>
> Schema:
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
>    
>    <xs:element name="PERSON" type="PersonType" />
>    <xs:complexType name="PersonType">
>       <xs:sequence>
>         <xs:element name="FNAME" type="xs:string" />
>         <xs:element name="LNAME" type="xs:string" />
> 	<xs:element name="DOB" type="xs:date" />
> 	<xs:element name="ADDRESS" type="LongAddress">
>           <xs:alternative test="@type='short'" type="ShortAddress"/>
> 	  <xs:alternative test="@type='long'" type="LongAddress"/>
> 	</xs:element>
>       </xs:sequence>
>    </xs:complexType>
>    <xs:complexType name="ShortAddress"> 
>      <xs:simpleContent> 
>        <xs:extension base="shortString"> 
>          <xs:attribute name="type" type="xs:string"/> 
>        </xs:extension> 
>      </xs:simpleContent> 
>    </xs:complexType> 
>    <xs:simpleType name="shortString"> 
>      <xs:restriction base="xs:string"> 
>        <xs:minLength value="1" /> 
>        <xs:maxLength value="50" /> 
>      </xs:restriction> 
>    </xs:simpleType>
>    <xs:complexType name="LongAddress">
>      <xs:sequence>
>        <xs:element name="street1" type="xs:string" />
>        <xs:element name="street2" type="xs:string" minOccurs="0" />
>        <xs:element name="city" type="xs:string" />
>        <xs:element name="state" type="xs:string" />
>        <xs:element name="pin" type="xs:string" />
>        <xs:element name="country" type="xs:string" />
>      </xs:sequence>
>      <xs:attribute name="type" type="xs:string"/>
>    </xs:complexType>
> </xs:schema>
> When I apply validation using the above examples, with Xerces, I get following errors:
> [Error] person.xsd:11:69: s4s-elt-must-match.1: The content of 'ADDRESS' must match (annotation?, (simpleType
> | complexType)?, alternative*, (unique | key | keyref)*)). A problem was found starting at: alternative.
> [Error] person.xml:5:45: cvc-complex-type.2.3: Element 'ADDRESS' cannot have character [children], because the
>  type's content type is element-only.
> [Error] person.xml:5:45: cvc-complex-type.2.4.b: The content of element 'ADDRESS' is not complete. One of '{st
> reet1}' is expected.
> It seems to me, that type alternative support in Xerces is not working as expected.
> Some comments about the Java class, org.apache.xerces.impl.xpath.XPath20 (which I think is used by type alternatives)
> The method, 
> public boolean  evaluateNodeTest(QName element, XMLAttributes attributes) 
> doesn't use the parameter, "element" anywhere in the method body.
> Please correct me, on any of the points I have mentioned.

-- 
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: j-dev-unsubscribe@xerces.apache.org
For additional commands, e-mail: j-dev-help@xerces.apache.org