Xerces-J 2.12.0 vs. Saxon: XSD 1.1 gYearMonth comparison is failing

Yitzhak Khabinsky <[email protected]> Wed, 8 Aug 2018 15:11:18 +0000
Newsgroups gmane.text.xml.xerces-j.user
Message-ID <AM6PR09MB2629C94155B950E1EF5C33288D260@AM6PR09MB2629.eurprd09.prod.outlook.com>
Hello,

I have a requirement to validate that:
Each gYearMonth(Date) value shall not fall outside of a particular year-month range.
The test case XML/XSD is below.

XML:
<?xml version="1.0" encoding="UTF-8"?>
<root DataFeed="2018-07" xmlns="http://www.millicom.com" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.millicom.com Test3.xsd">
    <r>
        <Date>2018-07-31</Date>
    </r>
    <r>
        <Date>2018-07-25</Date>
    </r>
</root>

XSD:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified" version="4.4" targetNamespace="http://www.millicom.com" xmlns="http://www.millicom.com" xpathDefaultNamespace="##targetNamespace" xmlns:saxon="http://saxon.sf.net/">
    <xs:element name="root">
        <xs:complexType>
            <xs:sequence>
                <xs:element minOccurs="1" maxOccurs="unbounded" ref="r"/>
            </xs:sequence>
            <xs:attribute name="DataFeed" use="required" type="xs:gYearMonth"/>

            <xs:assert test="empty(r/Date[xs:gYearMonth(xs:date(.)) ne ../../xs:gYearMonth(@DataFeed)])" saxon:message="Rule #0: Each Year-Month(Date) value shall be equal to the DataFeed attribute value" xpathDefaultNamespace="##targetNamespace">
                <xs:annotation>
                    <xs:documentation>Rule #0</xs:documentation>
                    <xs:documentation>Each Year-Month(Date) value shall be equal to the DataFeed attribute value</xs:documentation>
                </xs:annotation>
            </xs:assert>
        </xs:complexType>
    </xs:element>

    <xs:element name="r">
        <xs:complexType>
            <xs:sequence>
                <xs:element name="Date" type="xs:date"/>
            </xs:sequence>
        </xs:complexType>
    </xs:element>
</xs:schema>

Saxon correctly evaluates that the XML is valid.

XercesJ emits the following error:
[Error] Test3.xml:11:8: cvc-assertion: Assertion evaluation ('empty(r/Date[xs:gYearMonth(xs:date(.)) ne ../../xs:gYearMonth(@DataFeed)])') for element 'root' on schema type '#AnonType_root' did not succeed.


Regards,
Yitzhak Khabinsky
Technical Services Lead
Millicom International Services LLC
396 Alhambra Circle, Suite 1100
Coral Gables, FL  33134
Skype4B: +1 (305) 445-4172
Tel: (954) 684-8673
[email protected]<mailto:[email protected]>
www.millicom.com<https://na01.safelinks.protection.outlook.com/?url=http%3A%2F%2Fwww.millicom.com%2F&data=02%7C01%7CMalcolm.Stewart%40microsoft.com%7C9338023699c2494d08be08d4ad12ce55%7C72f988bf86f141af91ab2d7cd011db47%7C1%7C0%7C636323743686702678&sdata=DxQ9dfL259rpdVZ9seOAcR6bvgxRobyIerOgvTgPc90%3D&reserved=0>