  | |  | Updated: (XERCESJ-1137) XPath correction applied only on the first Path i | Updated: (XERCESJ-1137) XPath correction applied only on the first Path i 2006-02-27 - By Michael Glavassevich (JIRA)
[ http://issues.apache.org/jira/browse/XERCESJ-1137?page=all ]
Michael Glavassevich updated XERCESJ-1137: ------------------------------------------
Component: XML Schema Structures
> XPath correction applied only on the first Path in Field.XPath class > -------------------------------------------------------------------- > > Key: XERCESJ-1137 > URL: http://issues.apache.org/jira/browse/XERCESJ-1137 > Project: Xerces2-J > Type: Bug > Components: XML Schema Structures > Versions: 2.7.1 > Reporter: George Cristian Bina > Assignee: Michael Glavassevich
> > In Field.java on the inner XPath class there is the following comment and code: > // NOTE: We have to prefix the field XPath with "./" in > // order to handle selectors such as "@(protected)" that > // select the attribute because the fields could be > // relative to the selector element. -Ac > // Unless xpath starts with a descendant node -Achille Fokoue > // ... or a / or a . - NG > super(((xpath.trim().startsWith("/") ||xpath.trim().startsWith(". "))? > xpath:"./"+xpath), > symbolTable, context); > From this it is clear that the XPath Paths should be corrected to start with ./ if they do not start with . or / but only the first one is corrected. > Thus an instance like: > <?xml version="1.0" encoding="UTF-8"?> > <test xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi :noNamespaceSchemaLocation="test.xsd"> > <a> > <id1>v1</id1> > </a> > <a> > <id1>v2</id1> > </a> > </test> > will be reported invalid against test.xsd: > <?xml version="1.0" encoding="UTF-8"?> > <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"> > <xs:element name="test"> > <xs:complexType> > <xs:sequence maxOccurs="unbounded"> > <xs:element ref="a"/> > </xs:sequence> > </xs:complexType> > <xs:key name="aID"> > <xs:selector xpath=".//a"/> > <xs:field xpath="./@(protected)|./@(protected)|id1|./id2"/> > </xs:key> > </xs:element> > <xs:element name="a"> > <xs:complexType> > <xs:choice minOccurs="0" maxOccurs="unbounded"> > <xs:element ref="a"/> > <xs:element ref="id1"/> > <xs:element ref="id2"/> > </xs:choice> > <xs:attribute name="id1" use="optional"/> > <xs:attribute name="id2" use="optional"/> > </xs:complexType> > </xs:element> > <xs:element name="id1" type="xs:string"/> > <xs:element name="id2" type="xs:string"/> > </xs:schema> > Replacing: > <xs:field xpath="./@(protected)|./@(protected)|id1|./id2"/> > with > <xs:field xpath="./@(protected)|./@(protected)|./id1|./id2"/>\ > makes Xerces report that the schema is valid. > Regards, > George
-- This message is automatically generated by JIRA. - If you think it was sent incorrectly contact one of the administrators: http://issues.apache.org/jira/secure/Administrators.jspa - For more information on JIRA, see: http://www.atlassian.com/software/jira
--------------------------------------------------------------------- To unsubscribe, e-mail: j-dev-unsubscribe@(protected) For additional commands, e-mail: j-dev-help@(protected)
|
|
 |