Fwd: Possible Bug: Xerces 2.12.1 for XML Validation with XSD 1.1 Schema under Java - Plain Text

JOHN Morris <[email protected]> Wed, 19 Aug 2020 10:10:08 +0100 (BST)
Newsgroups gmane.text.xml.xerces-j.user
Message-ID <[email protected]>
Strictly speaking, I sould probably have be referring to Xerces-J 2.12.1. S=
orry.

One other thing that I should add is that I have not succeeded in finding a=
ny pattern to the line numbers at which the apparently spurious errors are =
reported.

Here are the files inline, which would have been part of the ZIP file, had =
I been able to send it.

java_xercesX.bat:

set "jdkpath=3Di:\jdk1.8.0_261"
set "x2path=3Di:\Xerces-J-bin.2.12.1-xml-schema-1.1\xerces-2_12_1-xml-schem=
a-1.1"
set "xml_data_path=3DI:\Joomla_MVC_dev\validatexml\admin\testA\"

%jdkpath%\bin\java -cp .;%x2path%\xml-apis.jar;%x2path%\xercesImpl.jar;%x2p=
ath%\serializer.jar;%x2path%\resolver.jar;%x2path%\org.eclipse.wst.xml.xpat=
h2.processor_1.2.0.jar;%x2path%\xercesSamples.jar;%x2path%\cupv10k-runtime.=
jar;%x2path%\icu4j.jar; %1 -xsd11 -a %xml_data_path%%2 -i %xml_data_path%%3

test.xsd:

<?xml version=3D"1.0"?>
<xs:schema xmlns:xs=3D"http://www.w3.org/2001/XMLSchema"
           elementFormDefault=3D"qualified">
=09<!-- ********************** -->
=09<!-- * Top-level elements * -->
=09<!-- ********************** -->
=09<xs:element name=3D"extension">
=09=09<xs:alternative test=3D"@type=3D'language'" type=3D"extensionTypeLang=
uage"/>
=09</xs:element>
=09<!-- ******************************************************** -->
=09<!-- * Structures used from more than one top-level element * -->
=09<!-- ******************************************************** -->
=09<xs:group name=3D"metadata">
=09=09<xs:all>
=09=09=09<xs:element name=3D"name" type=3D"xs:string" minOccurs=3D"0" maxOc=
curs=3D"1"/>
=09=09=09<xs:element name=3D"creationDate" type=3D"xs:string" minOccurs=3D"=
0" maxOccurs=3D"1"/>
=09=09=09<xs:element name=3D"author" type=3D"xs:string" minOccurs=3D"0" max=
Occurs=3D"1"/>
=09=09=09<xs:element name=3D"authorEmail" type=3D"xs:string" minOccurs=3D"0=
" maxOccurs=3D"1"/>
=09=09=09<xs:element name=3D"authorUrl" type=3D"xs:anyURI" minOccurs=3D"0" =
maxOccurs=3D"1"/>
=09=09=09<xs:element name=3D"copyright" type=3D"xs:string" minOccurs=3D"0" =
maxOccurs=3D"1"/>
=09=09=09<!-- *************************************************************=
**************** -->
=09=09=09<!-- * Disregard the following element, not decoded by the install=
ation software * -->
=09=09=09<!-- *************************************************************=
**************** -->
=09=09=09<xs:element name=3D"license" type=3D"xs:string" minOccurs=3D"0" ma=
xOccurs=3D"1"/>
=09=09=09<xs:element name=3D"version" type=3D"extensionVersionType" minOccu=
rs=3D"0" maxOccurs=3D"1"/>
=09=09=09<xs:element name=3D"description" type=3D"xs:string" minOccurs=3D"0=
" maxOccurs=3D"1"/>
=09=09</xs:all>
=09</xs:group>
=09<xs:simpleType name=3D"methodChoice">
=09=09<xs:restriction base=3D"xs:string">
=09=09=09<xs:enumeration value=3D"install"/>
=09=09=09<xs:enumeration value=3D"upgrade"/>
=09=09</xs:restriction>
=09</xs:simpleType>
=09<xs:simpleType name=3D"joomlaVersionChoice">
=09=09<xs:restriction base=3D"xs:string">
=09=09=09<xs:pattern value=3D"[23].[0-9]"/>
=09=09</xs:restriction>
=09</xs:simpleType>
=09<xs:simpleType name=3D"extensionVersionType">
=09=09<xs:restriction base=3D"xs:string">
=09=09=09<xs:pattern value=3D"[0-9]([0-9])*(.[0-9]([0-9])*)+"/>
=09=09</xs:restriction>
=09</xs:simpleType>
=09<xs:simpleType name=3D"tagChoice">
=09=09<xs:restriction base=3D"xs:string">
=09=09=09<xs:pattern value=3D"[a-z]{2,3}-[A-Z]{2,3}"/>
=09=09</xs:restriction>
=09</xs:simpleType>
=09<xs:simpleType name=3D"clientChoice">
=09=09<xs:restriction base=3D"xs:string">
=09=09=09<xs:pattern value=3D"administrator|site"/>
=09=09</xs:restriction>
=09</xs:simpleType>
=09<xs:complexType name=3D"typeUpdateServers">
=09=09<xs:complexContent>
=09=09=09<xs:restriction base=3D"xs:anyType">
=09=09=09=09<xs:all>
=09=09=09=09=09<xs:element name=3D"server" type=3D"typeServerUpdateServers"=
 minOccurs=3D"0" maxOccurs=3D"unbounded"/>
=09=09=09=09</xs:all>
=09=09=09</xs:restriction>
=09=09</xs:complexContent>
=09</xs:complexType>
=09<xs:complexType name=3D"typeMedia">
=09=09<xs:all>
=09=09=09<xs:element name=3D"filename" type=3D"xs:string" minOccurs=3D"0" m=
axOccurs=3D"unbounded"/>
=09=09=09<xs:element name=3D"folder" type=3D"xs:string" minOccurs=3D"0" max=
Occurs=3D"unbounded"/>
=09=09</xs:all>
=09=09<xs:attribute name=3D"folder" type=3D"xs:string" use=3D"optional"/>
=09=09<xs:attribute name=3D"destination" type=3D"xs:string" use=3D"optional=
"/>
=09</xs:complexType>
=09<xs:simpleType name=3D"typeParams">
=09=09<xs:restriction base=3D"xs:string">
=09=09</xs:restriction>
=09</xs:simpleType>
=09<!-- ************************************ -->
=09<!-- * attributes optional or required? * -->
=09<!-- ************************************ -->
=09<xs:complexType name=3D"typeServerUpdateServers">
=09=09<xs:simpleContent>
=09=09=09<xs:extension base=3D"xs:string">
=09=09=09=09<xs:attribute name=3D"name" type=3D"xs:string"/>
=09=09=09=09<xs:attribute name=3D"type" type=3D"serverChoice"/>
=09=09=09=09<!-- **************************************************** -->
=09=09=09=09<!-- * Include the "priority" attribute here to prevent * -->
=09=09=09=09<!-- * errors although I have failed to identify        * -->
=09=09=09=09<!-- * code in Joomla! which processes it.              * -->
=09=09=09=09<!-- **************************************************** -->
=09=09=09=09<xs:attribute name=3D"priority" type=3D"xs:positiveInteger"/>
=09=09=09</xs:extension>
=09=09</xs:simpleContent>
=09</xs:complexType>
=09<xs:simpleType name=3D"serverChoice">
=09=09<xs:restriction base=3D"xs:string">
=09=09=09<xs:pattern value=3D"extension|collection"/>
=09=09</xs:restriction>
=09</xs:simpleType>
=09<!-- ********************************************* -->
=09<!-- * Material for Language-specific extensions * -->
=09<!-- ********************************************* -->
=09<xs:complexType name=3D"extensionTypeLanguage">
=09=09<xs:all>
=09=09=09<xs:element name=3D"tag" type=3D"tagChoice" minOccurs=3D"0" maxOcc=
urs=3D"1"/>
=09=09=09<xs:group ref=3D"metadata"/>
=09=09=09<xs:element name=3D"files" type=3D"typeLanguageFiles" minOccurs=3D=
"1" maxOccurs=3D"unbounded"/>
=09=09=09<xs:element name=3D"media" type=3D"typeMedia" minOccurs=3D"0" maxO=
ccurs=3D"1"/>
=09=09=09<xs:element name=3D"params" type=3D"typeParams" minOccurs=3D"1" ma=
xOccurs=3D"1"/>
=09=09</xs:all>
=09=09<xs:attribute name=3D"type" type=3D"xs:string" use=3D"required" fixed=
=3D"language"/>
=09=09<xs:attribute name=3D"method" type=3D"methodChoice"/>
=09=09<xs:attribute name=3D"version" type=3D"joomlaVersionChoice"/>
=09=09<xs:attribute name=3D"client" type=3D"clientChoice"/>
=09</xs:complexType>
=09<xs:complexType name=3D"typeLanguageFilesFilename">
=09=09<xs:simpleContent>
=09=09=09<xs:extension base=3D"xs:string">
=09=09=09=09<xs:attribute name=3D"file" type=3D"xs:string" use=3D"optional"=
/>
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
**************************************************** -->
=09=09=09=09<!-- * Assuming that the current context is "/extension/files/f=
ilename"                                                                   =
                                                   * -->
=09=09=09=09<!-- * check that there are ALL elements in this context whose =
values DO match one of:                                                    =
                                                   * -->
=09=09=09=09<!-- *  1) ^([a-z]{2}[a-z]?-[A-Z]{2}\.((((com)|(lib)|(mod(_[a-z=
][a-z0-9]+)?)|(plg_[a-z][a-z0-9]+(\-[a-z0-9][a-z0-9]+)*)|(tpl))_[a-z][a-z0-=
9]+(\.sys)?(\.ini))|(ini)|(css)|(localise\.php)))$ * -->
=09=09=09=09<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                    =
                                                                           =
                                                   * -->
=09=09=09=09<!-- *  3) ^(install\.xml)$                                    =
                                                                           =
                                                   * -->
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
**************************************************** -->
=09=09=09=09<xs:assert test=3D"./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2=
}\.((((com)|(lib)|(mod(_[a-z][a-z0-9]+)?)|(plg_[a-z][a-z0-9]+(\-[a-z0-9][a-=
z0-9]+)*)|(tpl))_[a-z][a-z0-9]+(\.sys)?(\.ini))|(ini)|(css)|(localise\.php)=
))|([a-z]{2}[a-z]?-[A-Z]{2}\.xml)|(install\.xml)$')]"/>
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<!-- * Of the elements whose values (./text()) match:          =
                                                                           =
     * -->
=09=09=09=09<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                    =
                                                                           =
     * -->
=09=09=09=09<!-- * check that ALL have the "file" attribute.               =
                                                                           =
     * -->
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<!-- <xs:assert test=3D"./text()[matches(.,'^([a-z]{2}[a-z]?-[A=
-Z]{2}\.xml)$')]/../@file"/>
=09=09=09=09<xs:assert test=3D"if (true()) then true() else false()"/>
=09=09=09=09<xs:assert test=3D"matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.x=
ml)$')"/> -->
=09=09=09=09<xs:assert test=3D"if (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2=
}\.xml)$')) then @file else true()"/>
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<!-- * Check that the ONE element which matches:               =
                                                                           =
       * -->
=09=09=09=09<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                    =
                                                                           =
     * -->
=09=09=09=09<!-- * has an attribute "file" with value "meta".              =
                                                                           =
     * -->
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<!-- <xs:assert test=3D"./text()[matches(.,'^([a-z]{2}[a-z]?-[A=
-Z]{2}\.xml)$')]/../@file[.=3D'meta']"/> -->
=09=09=09=09<xs:assert test=3D"if (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2=
}\.xml)$')) then @file[.=3D'meta'] else true()"/>
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<!-- * Of the elements whose values (./text()) match:          =
                                                                           =
       * -->
=09=09=09=09<!-- *  3) ^(install\.xml)$                                    =
                                                                           =
     * -->
=09=09=09=09<!-- * check that ALL have the "file" attribute.               =
                                                                           =
     * -->
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<xs:assert test=3D"if (./text()[matches(.,'^(install\.xml)$')])=
 then @file else true()"/>
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<!-- * Check that the ONE element which matches:               =
                                                                           =
       * -->
=09=09=09=09<!-- *  3) ^(install\.xml)$                                    =
                                                                           =
     * -->
=09=09=09=09<!-- * has an attribute "file" with value "meta".              =
                                                                           =
     * -->
=09=09=09=09<!-- **********************************************************=
***************************************************************************=
****** -->
=09=09=09=09<xs:assert test=3D"if (./text()[matches(.,'^(install\.xml)$')])=
 then @file[.=3D'meta'] else true()"/>
=09=09=09</xs:extension>
=09=09</xs:simpleContent>
=09</xs:complexType>
=09<xs:complexType name=3D"typeLanguageFiles">
=09=09<xs:all>
=09=09=09<xs:element name=3D"folder" type=3D"xs:string" minOccurs=3D"0" max=
Occurs=3D"unbounded"/>
=09=09=09<xs:element name=3D"filename" type=3D"typeLanguageFilesFilename" m=
inOccurs=3D"1" maxOccurs=3D"unbounded"/> <!-- For the "index.<php|html>" fi=
le -->
=09=09</xs:all>
=09=09<xs:attribute name=3D"folder" type=3D"xs:string" use=3D"optional"/>
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<!-- * Assuming that the current context is "/extension/files"       =
                                                                           =
                                             * -->
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<!-- Of the elements whose values (./text()) match:                  =
                                                                           =
                                             * -->
=09=09<!-- *  1) ^([a-z]{2}[a-z]?-[A-Z]{2}\.((((com)|(lib)|(mod(_[a-z][a-z0=
-9]+)?)|(plg_[a-z][a-z0-9]+(\-[a-z0-9][a-z0-9]+)*)|(tpl))_[a-z][a-z0-9]+(\.=
sys)?(\.ini))|(ini)|(css)|(localise\.php)))$ * -->
=09=09<!-- * check that NONE have the "file" attribute.                    =
                                                                           =
                                             * -->
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<xs:assert test=3D"count(./filename/text()[matches(.,'^([a-z]{2}[a-z]=
?-[A-Z]{2}\.((((com)|(lib)|(mod(_[a-z][a-z0-9]+)?)|(plg_[a-z][a-z0-9]+(\-[a=
-z0-9][a-z0-9]+)*)|(tpl))_[a-z][a-z0-9]+(\.sys)?(\.ini))|(ini)|(css)|(local=
ise\.php)))$')]/..[@file])=3D0"/>
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<!-- * Check there is ONE and ONLY ONE element whose value (./text())=
 matches:                                                                  =
                                             * -->
=09=09<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                          =
                                                                           =
                                             * -->
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<xs:assert test=3D"count(./filename/text()[matches(.,'^([a-z]{2}[a-z]=
?-[A-Z]{2}\.xml)$')])=3D1"/>
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<!-- * Check there is ONE and ONLY ONE element whose value (./text())=
 matches:                                                                  =
                                             * -->
=09=09<!-- *  3) ^(install\.xml)$                                          =
                                                                           =
                                             * -->
=09=09<!-- ****************************************************************=
***************************************************************************=
********************************************** -->
=09=09<xs:assert test=3D"count(./filename/text()[matches(.,'^(install\.xml)=
$')])=3D1"/>
=09</xs:complexType>
</xs:schema>

test1.xml

<extension version=3D"3.7" client=3D"administrator" type=3D"language" metho=
d=3D"upgrade"> <!-- change to client=3D"site" if site pack -->
=09<name>French (fr-FR)</name> <!-- New in 3.7.0: Use only latin ascii char=
acters. -->
=09<tag>fr-FR</tag>
=09<version>3.7.0.1</version>
=09<creationDate>15/02/2017</creationDate>
=09<author>French translation team : joomla.fr</author>
=09<authorEmail>[email protected]</authorEmail>
=09<authorUrl>www.joomla.fr</authorUrl>
=09<copyright>Copyright (C) 2005 - 2017 joomla.fr et Open Source Matters. T=
ous droits r=C3=A9serv=C3=A9s</copyright>
=09<license>GNU General Public License version 2 or later; see LICENSE.txt<=
/license>
=09<description>fr-FR administrator language</description>
=09<files>
=09=09<filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
=09=09<filename>fr-FR.com_admin.ini</filename>
=09=09<filename>fr-FR.com_admin.sys.ini</filename>
=09=09<filename>fr-FR.com_ajax.ini</filename>
=09=09<filename>fr-FR.com_ajax.sys.ini</filename>
=09=09<filename>fr-FR.com_associations.ini</filename>
=09=09<filename>fr-FR.com_associations.sys.ini</filename>
=09=09<filename>fr-FR.com_banners.ini</filename>
=09=09<filename>fr-FR.com_banners.sys.ini</filename>
=09=09<filename>fr-FR.com_cache.ini</filename>
=09=09<filename>fr-FR.com_cache.sys.ini</filename>
=09=09<filename>fr-FR.com_categories.ini</filename>
=09=09<filename>fr-FR.com_categories.sys.ini</filename>
=09=09<filename>fr-FR.com_checkin.ini</filename>
=09=09<filename>fr-FR.com_checkin.sys.ini</filename>
=09=09<filename>fr-FR.com_config.ini</filename>
=09=09<filename>fr-FR.com_config.sys.ini</filename>
=09=09<filename>fr-FR.com_contact.ini</filename>
=09=09<filename>fr-FR.com_contact.sys.ini</filename>
=09=09<filename>fr-FR.com_content.ini</filename>
=09=09<filename>fr-FR.com_content.sys.ini</filename>
=09=09<filename>fr-FR.com_contenthistory.ini</filename>
=09=09<filename>fr-FR.com_contenthistory.sys.ini</filename>
=09=09<filename>fr-FR.com_cpanel.ini</filename>
=09=09<filename>fr-FR.com_cpanel.sys.ini</filename>
=09=09<filename>fr-FR.com_fields.ini</filename>
=09=09<filename>fr-FR.com_fields.sys.ini</filename>
=09=09<filename>fr-FR.com_finder.ini</filename>
=09=09<filename>fr-FR.com_finder.sys.ini</filename>
=09=09<filename>fr-FR.com_installer.ini</filename>
=09=09<filename>fr-FR.com_installer.sys.ini</filename>
=09=09<filename>fr-FR.com_joomlaupdate.ini</filename>
=09=09<filename>fr-FR.com_joomlaupdate.sys.ini</filename>
=09=09<filename>fr-FR.com_languages.ini</filename>
=09=09<filename>fr-FR.com_languages.sys.ini</filename>
=09=09<filename>fr-FR.com_login.ini</filename>
=09=09<filename>fr-FR.com_login.sys.ini</filename>
=09=09<filename>fr-FR.com_mailto.sys.ini</filename>
=09=09<filename>fr-FR.com_media.ini</filename>
=09=09<filename>fr-FR.com_media.sys.ini</filename>
=09=09<filename>fr-FR.com_menus.ini</filename>
=09=09<filename>fr-FR.com_menus.sys.ini</filename>
=09=09<filename>fr-FR.com_messages.ini</filename>
=09=09<filename>fr-FR.com_messages.sys.ini</filename>
=09=09<filename>fr-FR.com_modules.ini</filename>
=09=09<filename>fr-FR.com_modules.sys.ini</filename>
=09=09<filename>fr-FR.com_newsfeeds.ini</filename>
=09=09<filename>fr-FR.com_newsfeeds.sys.ini</filename>
=09=09<filename>fr-FR.com_plugins.ini</filename>
=09=09<filename>fr-FR.com_plugins.sys.ini</filename>
=09=09<filename>fr-FR.com_postinstall.ini</filename>
=09=09<filename>fr-FR.com_postinstall.sys.ini</filename>
=09=09<filename>fr-FR.com_redirect.ini</filename>
=09=09<filename>fr-FR.com_redirect.sys.ini</filename>
=09=09<filename>fr-FR.com_search.ini</filename>
=09=09<filename>fr-FR.com_search.sys.ini</filename>
=09=09<filename>fr-FR.com_tags.ini</filename>
=09=09<filename>fr-FR.com_tags.sys.ini</filename>
=09=09<filename>fr-FR.com_templates.ini</filename>
=09=09<filename>fr-FR.com_templates.sys.ini</filename>
=09=09<filename>fr-FR.com_users.ini</filename>
=09=09<filename>fr-FR.com_users.sys.ini</filename>
=09=09<filename>fr-FR.com_weblinks.ini</filename>
=09=09<filename>fr-FR.com_weblinks.sys.ini</filename>
=09=09<filename>fr-FR.com_wrapper.ini</filename>
=09=09<filename>fr-FR.com_wrapper.sys.ini</filename>
=09=09<!-- this file can be added in the ADMINISTRATOR pack if one wants to=
 change the fonts used to display the back-end interface.-->
=09=09=09<filename>fr-FR.css</filename>
=09=09<!-- -->
=09=09<filename>fr-FR.ini</filename>
=09=09<filename>fr-FR.lib_joomla.ini</filename>
=09=09<filename>fr-FR.localise.php</filename>
=09=09<filename>fr-FR.mod_custom.ini</filename>
=09=09<filename>fr-FR.mod_custom.sys.ini</filename>
=09=09<filename>fr-FR.mod_feed.ini</filename>
=09=09<filename>fr-FR.mod_feed.sys.ini</filename>
=09=09<filename>fr-FR.mod_latest.ini</filename>
=09=09<filename>fr-FR.mod_latest.sys.ini</filename>
=09=09<filename>fr-FR.mod_logged.ini</filename>
=09=09<filename>fr-FR.mod_logged.sys.ini</filename>
=09=09<filename>fr-FR.mod_login.ini</filename>
=09=09<filename>fr-FR.mod_login.sys.ini</filename>
=09=09<filename>fr-FR.mod_menu.ini</filename>
=09=09<filename>fr-FR.mod_menu.sys.ini</filename>
=09=09<filename>fr-FR.mod_multilangstatus.ini</filename>
=09=09<filename>fr-FR.mod_multilangstatus.sys.ini</filename>
=09=09<filename>fr-FR.mod_popular.ini</filename>
=09=09<filename>fr-FR.mod_popular.sys.ini</filename>
=09=09<filename>fr-FR.mod_quickicon.ini</filename>
=09=09<filename>fr-FR.mod_quickicon.sys.ini</filename>
=09=09<filename>fr-FR.mod_stats_admin.ini</filename>
=09=09<filename>fr-FR.mod_stats_admin.sys.ini</filename>
=09=09<filename>fr-FR.mod_status.ini</filename>
=09=09<filename>fr-FR.mod_status.sys.ini</filename>
=09=09<filename>fr-FR.mod_submenu.ini</filename>
=09=09<filename>fr-FR.mod_submenu.sys.ini</filename>
=09=09<filename>fr-FR.mod_title.ini</filename>
=09=09<filename>fr-FR.mod_title.sys.ini</filename>
=09=09<filename>fr-FR.mod_toolbar.ini</filename>
=09=09<filename>fr-FR.mod_toolbar.sys.ini</filename>
=09=09<filename>fr-FR.mod_version.ini</filename>
=09=09<filename>fr-FR.mod_version.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_cookie.ini</filename>
=09=09<filename>fr-FR.plg_authentication_cookie.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_gmail.ini</filename>
=09=09<filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_joomla.ini</filename>
=09=09<filename>fr-FR.plg_authentication_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_ldap.ini</filename>
=09=09<filename>fr-FR.plg_authentication_ldap.sys.ini</filename>
=09=09<filename>fr-FR.plg_captcha_recaptcha.ini</filename>
=09=09<filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_contact.ini</filename>
=09=09<filename>fr-FR.plg_content_contact.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_emailcloak.ini</filename>
=09=09<filename>fr-FR.plg_content_emailcloak.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_fields.ini</filename>
=09=09<filename>fr-FR.plg_content_fields.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_finder.ini</filename>
=09=09<filename>fr-FR.plg_content_finder.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_joomla.ini</filename>
=09=09<filename>fr-FR.plg_content_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_loadmodule.ini</filename>
=09=09<filename>fr-FR.plg_content_loadmodule.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_pagebreak.ini</filename>
=09=09<filename>fr-FR.plg_content_pagebreak.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_pagenavigation.ini</filename>
=09=09<filename>fr-FR.plg_content_pagenavigation.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_vote.ini</filename>
=09=09<filename>fr-FR.plg_content_vote.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_article.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_article.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_contact.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_contact.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_fields.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_fields.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_image.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_image.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_menu.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_menu.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_module.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_module.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_pagebreak.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_pagebreak.sys.ini</filename>
=09=09<!-- Spacer to get past a buggy record count! -->
=09=09<filename>fr-FR.plg_editors-xtd_readmore.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_readmore.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors_codemirror.ini</filename>
=09=09<filename>fr-FR.plg_editors_codemirror.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors_none.ini</filename>
=09=09<filename>fr-FR.plg_editors_none.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors_tinymce.ini</filename>
=09=09<filename>fr-FR.plg_editors_tinymce.sys.ini</filename>
=09=09<filename>fr-FR.plg_extension_joomla.ini</filename>
=09=09<filename>fr-FR.plg_extension_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_calendar.ini</filename>
=09=09<filename>fr-FR.plg_fields_calendar.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_checkboxes.ini</filename>
=09=09<filename>fr-FR.plg_fields_checkboxes.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_color.ini</filename>
=09=09<filename>fr-FR.plg_fields_color.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_editor.ini</filename>
=09=09<filename>fr-FR.plg_fields_editor.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_gallery.ini</filename>
=09=09<filename>fr-FR.plg_fields_gallery.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_image.ini</filename>
=09=09<filename>fr-FR.plg_fields_image.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_imagelist.ini</filename>
=09=09<filename>fr-FR.plg_fields_imagelist.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_integer.ini</filename>
=09=09<filename>fr-FR.plg_fields_integer.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_list.ini</filename>
=09=09<filename>fr-FR.plg_fields_list.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_media.ini</filename>
=09=09<filename>fr-FR.plg_fields_media.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_radio.ini</filename>
=09=09<filename>fr-FR.plg_fields_radio.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_sql.ini</filename>
=09=09<filename>fr-FR.plg_fields_sql.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_text.ini</filename>
=09=09<filename>fr-FR.plg_fields_text.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_textarea.ini</filename>
=09=09<filename>fr-FR.plg_fields_textarea.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_url.ini</filename>
=09=09<filename>fr-FR.plg_fields_url.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_user.ini</filename>
=09=09<filename>fr-FR.plg_fields_user.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_usergrouplist.ini</filename>
=09=09<filename>fr-FR.plg_fields_usergrouplist.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_categories.ini</filename>
=09=09<filename>fr-FR.plg_finder_categories.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_contacts.ini</filename>
=09=09<filename>fr-FR.plg_finder_contacts.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_content.ini</filename>
=09=09<filename>fr-FR.plg_finder_content.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_newsfeeds.ini</filename>
=09=09<filename>fr-FR.plg_finder_newsfeeds.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_tags.ini</filename>
=09=09<filename>fr-FR.plg_finder_tags.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_weblinks.ini</filename>
=09=09<filename>fr-FR.plg_finder_weblinks.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_folderinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_folderinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_packageinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_packageinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_urlinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_urlinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_webinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_webinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_extensionupdate.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_extensionupdate.sys.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_joomlaupdate.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_joomlaupdate.sys.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_phpversioncheck.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_categories.ini</filename>
=09=09<filename>fr-FR.plg_search_categories.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_contacts.ini</filename>
=09=09<filename>fr-FR.plg_search_contacts.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_content.ini</filename>
=09=09<filename>fr-FR.plg_search_content.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_newsfeeds.ini</filename>
=09=09<filename>fr-FR.plg_search_newsfeeds.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_tags.ini</filename>
=09=09<filename>fr-FR.plg_search_tags.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_weblinks.ini</filename>
=09=09<filename>fr-FR.plg_search_weblinks.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_cache.ini</filename>
=09=09<filename>fr-FR.plg_system_cache.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_debug.ini</filename>
=09=09<filename>fr-FR.plg_system_debug.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_fields.ini</filename>
=09=09<filename>fr-FR.plg_system_fields.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_highlight.ini</filename>
=09=09<filename>fr-FR.plg_system_highlight.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_languagecode.ini</filename>
=09=09<filename>fr-FR.plg_system_languagecode.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_languagefilter.ini</filename>
=09=09<filename>fr-FR.plg_system_languagefilter.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_log.ini</filename>
=09=09<filename>fr-FR.plg_system_log.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_logout.ini</filename>
=09=09<filename>fr-FR.plg_system_logout.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_p3p.ini</filename>
=09=09<filename>fr-FR.plg_system_p3p.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_redirect.ini</filename>
=09=09<filename>fr-FR.plg_system_redirect.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_remember.ini</filename>
=09=09<filename>fr-FR.plg_system_remember.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_sef.ini</filename>
=09=09<filename>fr-FR.plg_system_sef.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_stats.ini</filename>
=09=09<filename>fr-FR.plg_system_stats.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_updatenotification.ini</filename>
=09=09<filename>fr-FR.plg_system_updatenotification.sys.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_totp.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_totp.sys.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_yubikey.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_yubikey.sys.ini</filename>
=09=09<filename>fr-FR.plg_user_contactcreator.ini</filename>
=09=09<filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
=09=09<filename>fr-FR.plg_user_joomla.ini</filename>
=09=09<filename>fr-FR.plg_user_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_user_profile.ini</filename>
=09=09<filename>fr-FR.plg_user_profile.sys.ini</filename>
=09=09<filename>fr-FR.tpl_hathor.ini</filename>
=09=09<filename>fr-FR.tpl_hathor.sys.ini</filename>
=09=09<filename>fr-FR.tpl_isis.ini</filename>
=09=09<filename>fr-FR.tpl_isis.sys.ini</filename>
=09=09<!-- This file is mandatory as otherwise the pack can't be uninstalle=
d. -->
=09=09<filename file=3D"meta">install.xml</filename>
=09=09<filename file=3D"meta">fr-FR.xml</filename>
=09</files>
=09<media destination=3D"fr-FR">  <!-- If one needs to add a specific calen=
dar -->
=09    <filename>index.html</filename>
=09    <filename>js/index.html</filename>
=09    <filename>js/calendar-setup.js</filename>
=09    <filename>js/calendar.js</filename>
=09</media>
=09<params />
</extension>

test2.xml

<extension version=3D"3.7" client=3D"administrator" type=3D"language" metho=
d=3D"upgrade"> <!-- change to client=3D"site" if site pack -->
=09<name>French (fr-FR)</name> <!-- New in 3.7.0: Use only latin ascii char=
acters. -->
=09<tag>fr-FR</tag>
=09<version>3.7.0.1</version>
=09<creationDate>15/02/2017</creationDate>
=09<author>French translation team : joomla.fr</author>
=09<authorEmail>[email protected]</authorEmail>
=09<authorUrl>www.joomla.fr</authorUrl>
=09<copyright>Copyright (C) 2005 - 2017 joomla.fr et Open Source Matters. T=
ous droits r=C3=A9serv=C3=A9s</copyright>
=09<license>GNU General Public License version 2 or later; see LICENSE.txt<=
/license>
=09<description>fr-FR administrator language</description>
=09<files>
=09=09<filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
=09=09<filename>fr-FR.com_admin.ini</filename>
=09=09<filename>fr-FR.com_admin.sys.ini</filename>
=09=09<filename>fr-FR.com_ajax.ini</filename>
=09=09<filename>fr-FR.com_ajax.sys.ini</filename>
=09=09<filename>fr-FR.com_associations.ini</filename>
=09=09<filename>fr-FR.com_associations.sys.ini</filename>
=09=09<filename>fr-FR.com_banners.ini</filename>
=09=09<filename>fr-FR.com_banners.sys.ini</filename>
=09=09<filename>fr-FR.com_cache.ini</filename>
=09=09<filename>fr-FR.com_cache.sys.ini</filename>
=09=09<filename>fr-FR.com_categories.ini</filename>
=09=09<filename>fr-FR.com_categories.sys.ini</filename>
=09=09<filename>fr-FR.com_checkin.ini</filename>
=09=09<filename>fr-FR.com_checkin.sys.ini</filename>
=09=09<filename>fr-FR.com_config.ini</filename>
=09=09<filename>fr-FR.com_config.sys.ini</filename>
=09=09<filename>fr-FR.com_contact.ini</filename>
=09=09<filename>fr-FR.com_contact.sys.ini</filename>
=09=09<filename>fr-FR.com_content.ini</filename>
=09=09<filename>fr-FR.com_content.sys.ini</filename>
=09=09<filename>fr-FR.com_contenthistory.ini</filename>
=09=09<filename>fr-FR.com_contenthistory.sys.ini</filename>
=09=09<filename>fr-FR.com_cpanel.ini</filename>
=09=09<filename>fr-FR.com_cpanel.sys.ini</filename>
=09=09<filename>fr-FR.com_fields.ini</filename>
=09=09<filename>fr-FR.com_fields.sys.ini</filename>
=09=09<!-- Spacer to get past a buggy record count! -->
=09=09<filename>fr-FR.com_finder.ini</filename>
=09=09<filename>fr-FR.com_finder.sys.ini</filename>
=09=09<filename>fr-FR.com_installer.ini</filename>
=09=09<filename>fr-FR.com_installer.sys.ini</filename>
=09=09<filename>fr-FR.com_joomlaupdate.ini</filename>
=09=09<filename>fr-FR.com_joomlaupdate.sys.ini</filename>
=09=09<filename>fr-FR.com_languages.ini</filename>
=09=09<filename>fr-FR.com_languages.sys.ini</filename>
=09=09<filename>fr-FR.com_login.ini</filename>
=09=09<filename>fr-FR.com_login.sys.ini</filename>
=09=09<filename>fr-FR.com_mailto.sys.ini</filename>
=09=09<filename>fr-FR.com_media.ini</filename>
=09=09<filename>fr-FR.com_media.sys.ini</filename>
=09=09<filename>fr-FR.com_menus.ini</filename>
=09=09<filename>fr-FR.com_menus.sys.ini</filename>
=09=09<filename>fr-FR.com_messages.ini</filename>
=09=09<filename>fr-FR.com_messages.sys.ini</filename>
=09=09<filename>fr-FR.com_modules.ini</filename>
=09=09<filename>fr-FR.com_modules.sys.ini</filename>
=09=09<filename>fr-FR.com_newsfeeds.ini</filename>
=09=09<filename>fr-FR.com_newsfeeds.sys.ini</filename>
=09=09<filename>fr-FR.com_plugins.ini</filename>
=09=09<filename>fr-FR.com_plugins.sys.ini</filename>
=09=09<filename>fr-FR.com_postinstall.ini</filename>
=09=09<filename>fr-FR.com_postinstall.sys.ini</filename>
=09=09<filename>fr-FR.com_redirect.ini</filename>
=09=09<filename>fr-FR.com_redirect.sys.ini</filename>
=09=09<filename>fr-FR.com_search.ini</filename>
=09=09<filename>fr-FR.com_search.sys.ini</filename>
=09=09<filename>fr-FR.com_tags.ini</filename>
=09=09<filename>fr-FR.com_tags.sys.ini</filename>
=09=09<filename>fr-FR.com_templates.ini</filename>
=09=09<filename>fr-FR.com_templates.sys.ini</filename>
=09=09<filename>fr-FR.com_users.ini</filename>
=09=09<filename>fr-FR.com_users.sys.ini</filename>
=09=09<filename>fr-FR.com_weblinks.ini</filename>
=09=09<filename>fr-FR.com_weblinks.sys.ini</filename>
=09=09<filename>fr-FR.com_wrapper.ini</filename>
=09=09<filename>fr-FR.com_wrapper.sys.ini</filename>
=09=09<!-- this file can be added in the ADMINISTRATOR pack if one wants to=
 change the fonts used to display the back-end interface.-->
=09=09=09<filename>fr-FR.css</filename>
=09=09<!-- -->
=09=09<filename>fr-FR.ini</filename>
=09=09<filename>fr-FR.lib_joomla.ini</filename>
=09=09<filename>fr-FR.localise.php</filename>
=09=09<filename>fr-FR.mod_custom.ini</filename>
=09=09<filename>fr-FR.mod_custom.sys.ini</filename>
=09=09<filename>fr-FR.mod_feed.ini</filename>
=09=09<filename>fr-FR.mod_feed.sys.ini</filename>
=09=09<filename>fr-FR.mod_latest.ini</filename>
=09=09<filename>fr-FR.mod_latest.sys.ini</filename>
=09=09<filename>fr-FR.mod_logged.ini</filename>
=09=09<filename>fr-FR.mod_logged.sys.ini</filename>
=09=09<filename>fr-FR.mod_login.ini</filename>
=09=09<filename>fr-FR.mod_login.sys.ini</filename>
=09=09<filename>fr-FR.mod_menu.ini</filename>
=09=09<filename>fr-FR.mod_menu.sys.ini</filename>
=09=09<filename>fr-FR.mod_multilangstatus.ini</filename>
=09=09<filename>fr-FR.mod_multilangstatus.sys.ini</filename>
=09=09<filename>fr-FR.mod_popular.ini</filename>
=09=09<filename>fr-FR.mod_popular.sys.ini</filename>
=09=09<filename>fr-FR.mod_quickicon.ini</filename>
=09=09<filename>fr-FR.mod_quickicon.sys.ini</filename>
=09=09<filename>fr-FR.mod_stats_admin.ini</filename>
=09=09<filename>fr-FR.mod_stats_admin.sys.ini</filename>
=09=09<filename>fr-FR.mod_status.ini</filename>
=09=09<filename>fr-FR.mod_status.sys.ini</filename>
=09=09<filename>fr-FR.mod_submenu.ini</filename>
=09=09<filename>fr-FR.mod_submenu.sys.ini</filename>
=09=09<filename>fr-FR.mod_title.ini</filename>
=09=09<filename>fr-FR.mod_title.sys.ini</filename>
=09=09<filename>fr-FR.mod_toolbar.ini</filename>
=09=09<filename>fr-FR.mod_toolbar.sys.ini</filename>
=09=09<filename>fr-FR.mod_version.ini</filename>
=09=09<filename>fr-FR.mod_version.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_cookie.ini</filename>
=09=09<filename>fr-FR.plg_authentication_cookie.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_gmail.ini</filename>
=09=09<filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_joomla.ini</filename>
=09=09<filename>fr-FR.plg_authentication_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_authentication_ldap.ini</filename>
=09=09<filename>fr-FR.plg_authentication_ldap.sys.ini</filename>
=09=09<filename>fr-FR.plg_captcha_recaptcha.ini</filename>
=09=09<filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_contact.ini</filename>
=09=09<filename>fr-FR.plg_content_contact.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_emailcloak.ini</filename>
=09=09<filename>fr-FR.plg_content_emailcloak.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_fields.ini</filename>
=09=09<filename>fr-FR.plg_content_fields.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_finder.ini</filename>
=09=09<filename>fr-FR.plg_content_finder.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_joomla.ini</filename>
=09=09<filename>fr-FR.plg_content_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_loadmodule.ini</filename>
=09=09<filename>fr-FR.plg_content_loadmodule.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_pagebreak.ini</filename>
=09=09<filename>fr-FR.plg_content_pagebreak.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_pagenavigation.ini</filename>
=09=09<filename>fr-FR.plg_content_pagenavigation.sys.ini</filename>
=09=09<filename>fr-FR.plg_content_vote.ini</filename>
=09=09<filename>fr-FR.plg_content_vote.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_article.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_article.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_contact.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_contact.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_fields.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_fields.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_image.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_image.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_menu.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_menu.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_module.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_module.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_pagebreak.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_pagebreak.sys.ini</filename>
=09=09<!-- Spacer to get past a buggy record count! -->
=09=09<filename>fr-FR.plg_editors-xtd_readmore.ini</filename>
=09=09<filename>fr-FR.plg_editors-xtd_readmore.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors_codemirror.ini</filename>
=09=09<filename>fr-FR.plg_editors_codemirror.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors_none.ini</filename>
=09=09<filename>fr-FR.plg_editors_none.sys.ini</filename>
=09=09<filename>fr-FR.plg_editors_tinymce.ini</filename>
=09=09<filename>fr-FR.plg_editors_tinymce.sys.ini</filename>
=09=09<filename>fr-FR.plg_extension_joomla.ini</filename>
=09=09<filename>fr-FR.plg_extension_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_calendar.ini</filename>
=09=09<filename>fr-FR.plg_fields_calendar.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_checkboxes.ini</filename>
=09=09<filename>fr-FR.plg_fields_checkboxes.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_color.ini</filename>
=09=09<filename>fr-FR.plg_fields_color.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_editor.ini</filename>
=09=09<filename>fr-FR.plg_fields_editor.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_gallery.ini</filename>
=09=09<filename>fr-FR.plg_fields_gallery.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_image.ini</filename>
=09=09<filename>fr-FR.plg_fields_image.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_imagelist.ini</filename>
=09=09<filename>fr-FR.plg_fields_imagelist.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_integer.ini</filename>
=09=09<filename>fr-FR.plg_fields_integer.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_list.ini</filename>
=09=09<filename>fr-FR.plg_fields_list.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_media.ini</filename>
=09=09<filename>fr-FR.plg_fields_media.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_radio.ini</filename>
=09=09<filename>fr-FR.plg_fields_radio.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_sql.ini</filename>
=09=09<filename>fr-FR.plg_fields_sql.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_text.ini</filename>
=09=09<filename>fr-FR.plg_fields_text.sys.ini</filename>
=09=09<!-- Spacer to get past a buggy record count! -->
=09=09<filename>fr-FR.plg_fields_textarea.ini</filename>
=09=09<filename>fr-FR.plg_fields_textarea.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_url.ini</filename>
=09=09<filename>fr-FR.plg_fields_url.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_user.ini</filename>
=09=09<filename>fr-FR.plg_fields_user.sys.ini</filename>
=09=09<filename>fr-FR.plg_fields_usergrouplist.ini</filename>
=09=09<filename>fr-FR.plg_fields_usergrouplist.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_categories.ini</filename>
=09=09<filename>fr-FR.plg_finder_categories.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_contacts.ini</filename>
=09=09<filename>fr-FR.plg_finder_contacts.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_content.ini</filename>
=09=09<filename>fr-FR.plg_finder_content.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_newsfeeds.ini</filename>
=09=09<filename>fr-FR.plg_finder_newsfeeds.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_tags.ini</filename>
=09=09<filename>fr-FR.plg_finder_tags.sys.ini</filename>
=09=09<filename>fr-FR.plg_finder_weblinks.ini</filename>
=09=09<filename>fr-FR.plg_finder_weblinks.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_folderinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_folderinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_packageinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_packageinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_urlinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_urlinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_installer_webinstaller.ini</filename>
=09=09<filename>fr-FR.plg_installer_webinstaller.sys.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_extensionupdate.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_extensionupdate.sys.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_joomlaupdate.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_joomlaupdate.sys.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_phpversioncheck.ini</filename>
=09=09<filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
=09=09<!-- Spacer to get past a buggy record count! -->
=09=09<filename>fr-FR.plg_search_categories.ini</filename>
=09=09<filename>fr-FR.plg_search_categories.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_contacts.ini</filename>
=09=09<filename>fr-FR.plg_search_contacts.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_content.ini</filename>
=09=09<filename>fr-FR.plg_search_content.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_newsfeeds.ini</filename>
=09=09<filename>fr-FR.plg_search_newsfeeds.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_tags.ini</filename>
=09=09<filename>fr-FR.plg_search_tags.sys.ini</filename>
=09=09<filename>fr-FR.plg_search_weblinks.ini</filename>
=09=09<filename>fr-FR.plg_search_weblinks.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_cache.ini</filename>
=09=09<filename>fr-FR.plg_system_cache.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_debug.ini</filename>
=09=09<filename>fr-FR.plg_system_debug.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_fields.ini</filename>
=09=09<filename>fr-FR.plg_system_fields.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_highlight.ini</filename>
=09=09<filename>fr-FR.plg_system_highlight.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_languagecode.ini</filename>
=09=09<filename>fr-FR.plg_system_languagecode.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_languagefilter.ini</filename>
=09=09<filename>fr-FR.plg_system_languagefilter.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_log.ini</filename>
=09=09<filename>fr-FR.plg_system_log.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_logout.ini</filename>
=09=09<filename>fr-FR.plg_system_logout.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_p3p.ini</filename>
=09=09<filename>fr-FR.plg_system_p3p.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_redirect.ini</filename>
=09=09<filename>fr-FR.plg_system_redirect.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_remember.ini</filename>
=09=09<filename>fr-FR.plg_system_remember.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_sef.ini</filename>
=09=09<filename>fr-FR.plg_system_sef.sys.ini</filename>
=09=09<!-- Spacer to get past a buggy record count! -->
=09=09<filename>fr-FR.plg_system_stats.ini</filename>
=09=09<filename>fr-FR.plg_system_stats.sys.ini</filename>
=09=09<filename>fr-FR.plg_system_updatenotification.ini</filename>
=09=09<filename>fr-FR.plg_system_updatenotification.sys.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_totp.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_totp.sys.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_yubikey.ini</filename>
=09=09<filename>fr-FR.plg_twofactorauth_yubikey.sys.ini</filename>
=09=09<filename>fr-FR.plg_user_contactcreator.ini</filename>
=09=09<filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
=09=09<filename>fr-FR.plg_user_joomla.ini</filename>
=09=09<filename>fr-FR.plg_user_joomla.sys.ini</filename>
=09=09<filename>fr-FR.plg_user_profile.ini</filename>
=09=09<filename>fr-FR.plg_user_profile.sys.ini</filename>
=09=09<filename>fr-FR.tpl_hathor.ini</filename>
=09=09<filename>fr-FR.tpl_hathor.sys.ini</filename>
=09=09<filename>fr-FR.tpl_isis.ini</filename>
=09=09<filename>fr-FR.tpl_isis.sys.ini</filename>
=09=09<!-- This file is mandatory as otherwise the pack can't be uninstalle=
d. -->
=09=09<filename file=3D"meta">install.xml</filename>
=09=09<filename file=3D"meta">fr-FR.xml</filename>
=09</files>
=09<media destination=3D"fr-FR">  <!-- If one needs to add a specific calen=
dar -->
=09    <filename>index.html</filename>
=09    <filename>js/index.html</filename>
=09    <filename>js/calendar-setup.js</filename>
=09    <filename>js/calendar.js</filename>
=09</media>
=09<params />
</extension>

excerpts from test1.out (showing errors reported at lines 40, 158, 195 in t=
est1.xml):

...
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
   endElement(name=3D"filename")
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
[Error] test1.xml:40:44: cvc-assertion: Assertion evaluation ('./text()[mat=
ches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.((((com)|(lib)|(mod(_[a-z][a-z0-9]+)?)|(=
plg_[a-z][a-z0-9]+(\-[a-z0-9][a-z0-9]+)*)|(tpl))_[a-z][a-z0-9]+(\.sys)?(\.i=
ni))|(ini)|(css)|(localise\.php)))|([a-z]{2}[a-z]?-[A-Z]{2}\.xml)|(install\=
.xml)$')]') for element 'filename' on schema type 'typeLanguageFilesFilenam=
e' did not succeed.=20
[Error] test1.xml:40:44: cvc-assertion: Assertion evaluation ('if (matches(=
text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file else true()') for el=
ement 'filename' on schema type 'typeLanguageFilesFilename' did not succeed=
. XPTY0004 : Value does not match a required type.
[Error] test1.xml:40:44: cvc-assertion: Assertion evaluation ('if (matches(=
text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file[.=3D'meta'] else tru=
e()') for element 'filename' on schema type 'typeLanguageFilesFilename' did=
 not succeed. XPTY0004 : Value does not match a required type.
   endElement(name=3D"filename")
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
   endElement(name=3D"filename")
...
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
   endElement(name=3D"filename")
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
[Error] test1.xml:158:58: cvc-assertion: Assertion evaluation ('./text()[ma=
tches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.((((com)|(lib)|(mod(_[a-z][a-z0-9]+)?)|=
(plg_[a-z][a-z0-9]+(\-[a-z0-9][a-z0-9]+)*)|(tpl))_[a-z][a-z0-9]+(\.sys)?(\.=
ini))|(ini)|(css)|(localise\.php)))|([a-z]{2}[a-z]?-[A-Z]{2}\.xml)|(install=
\.xml)$')]') for element 'filename' on schema type 'typeLanguageFilesFilena=
me' did not succeed.=20
[Error] test1.xml:158:58: cvc-assertion: Assertion evaluation ('if (matches=
(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file else true()') for e=
lement 'filename' on schema type 'typeLanguageFilesFilename' did not succee=
d. XPTY0004 : Value does not match a required type.
[Error] test1.xml:158:58: cvc-assertion: Assertion evaluation ('if (matches=
(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file[.=3D'meta'] else tr=
ue()') for element 'filename' on schema type 'typeLanguageFilesFilename' di=
d not succeed. XPTY0004 : Value does not match a required type.
   endElement(name=3D"filename")
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
   endElement(name=3D"filename")
...
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
   endElement(name=3D"filename")
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
[Error] test1.xml:195:57: cvc-assertion: Assertion evaluation ('./text()[ma=
tches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.((((com)|(lib)|(mod(_[a-z][a-z0-9]+)?)|=
(plg_[a-z][a-z0-9]+(\-[a-z0-9][a-z0-9]+)*)|(tpl))_[a-z][a-z0-9]+(\.sys)?(\.=
ini))|(ini)|(css)|(localise\.php)))|([a-z]{2}[a-z]?-[A-Z]{2}\.xml)|(install=
\.xml)$')]') for element 'filename' on schema type 'typeLanguageFilesFilena=
me' did not succeed.=20
[Error] test1.xml:195:57: cvc-assertion: Assertion evaluation ('if (matches=
(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file else true()') for e=
lement 'filename' on schema type 'typeLanguageFilesFilename' did not succee=
d. XPTY0004 : Value does not match a required type.
[Error] test1.xml:195:57: cvc-assertion: Assertion evaluation ('if (matches=
(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file[.=3D'meta'] else tr=
ue()') for element 'filename' on schema type 'typeLanguageFilesFilename' di=
d not succeed. XPTY0004 : Value does not match a required type.
   endElement(name=3D"filename")
   startElement(name=3D"filename",type=3D"typeLanguageFilesFilename",attrib=
utes=3D{})
   endElement(name=3D"filename")
...

xml_diffs.out

Comparing files test1.xml and TEST2.XML
***** test1.xml
                <filename>fr-FR.com_fields.sys.ini</filename>
                <filename>fr-FR.com_finder.ini</filename>
***** TEST2.XML
                <filename>fr-FR.com_fields.sys.ini</filename>
                <!-- Spacer to get past a buggy record count! -->
                <filename>fr-FR.com_finder.ini</filename>
*****

***** test1.xml
                <filename>fr-FR.plg_fields_text.sys.ini</filename>
                <filename>fr-FR.plg_fields_textarea.ini</filename>
***** TEST2.XML
                <filename>fr-FR.plg_fields_text.sys.ini</filename>
                <!-- Spacer to get past a buggy record count! -->
                <filename>fr-FR.plg_fields_textarea.ini</filename>
*****

***** test1.xml
                <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</file=
name>
                <filename>fr-FR.plg_search_categories.ini</filename>
***** TEST2.XML
                <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</file=
name>
                <!-- Spacer to get past a buggy record count! -->
                <filename>fr-FR.plg_search_categories.ini</filename>
*****

***** test1.xml
                <filename>fr-FR.plg_system_sef.sys.ini</filename>
                <filename>fr-FR.plg_system_stats.ini</filename>
***** TEST2.XML
                <filename>fr-FR.plg_system_sef.sys.ini</filename>
                <!-- Spacer to get past a buggy record count! -->
                <filename>fr-FR.plg_system_stats.ini</filename>
*****


John MORRIS.


> ---------- Original Message ----------
> From: JOHN Morris <[email protected]>
> To: [email protected]
> Date: 18 August 2020 at 22:04
> Subject: Possible Bug: Xerces 2.12.1 for XML Validation with XSD 1.1 Sche=
ma under Java - Plain Text
>=20
> Hi,
>=20
> I am a relative newcomer to Xerces for XML Validation.
>=20
> I have been trying to replicate the results of a tutorial that I found on=
 the Internet. with particular reference to XSD Schema 1.1 features, Over t=
ime, I have tried using Xerces 2.12.1, along with various JDK versions (7, =
8, 13). Currently, I am using the validation capabilities of the jaxp.TypeI=
nfoWriter program.
>=20
> Recently, I have begun to look at the XSD 1.1 assert/assertion features w=
ith a longer XML file.
>=20
> I have used two sample XML files:
>=20
> 1) The first has more than 200 elements, one following hard on the previo=
us one.
>=20
> With this file, I find that there are particular line numbers that give t=
rouble in the validation process, although the XML content of those lines a=
ppears to be legal and valid.
>=20
> Moving the complete XML code from one of the troublesome lines to another=
 position, makes the same code in its new postion pass the validation but n=
ow another new error occurs with a new XML contruct, which now appears at t=
he troublesome line number.
>=20
> 2) The same XML file as in (1) but with XML comment lines introduced at e=
ach of the troublesome line numbers so that no validation is now required a=
t those lines. It should be noted, however, that the troublesome lines from=
 case (1) still appear, immediately after each of the new comment lines. Th=
e validation now passes completely.
>=20
> I am currently assuming that this behaviour (i.e. the errors) is unexpect=
ed.
>=20
> I can provide a ZIP file with these test cases. (I did try to send the e-=
mail posting this incident to the mailing list, complete with the attachmen=
t, but it did not post. Can someone tell me whether attachments are support=
ed on this mailing list)?
>=20
> The a ZIP file comprises a directory, testX, with following contents:
>=20
> java_xercesX.bat - the batch file to run the test cases
>=20
> test.xsd - the XSD 1.1 Schema file
>=20
> test1.xml - the first XML file, without the extra comment lines
>=20
> test2.xml - the second XML file, with the extra comment lines
>=20
> xml_diffs.out - the result of a comparison (with the "fc" program) of the=
 content of the two XML files
>=20
> In order to be able to run these test cases, you would have to unzip the =
attached file, go to the testX directory and update the paths in the few fe=
w lines of the file=C2=A0java_xercesX.bat to suit your system. Then, to run=
 one test case, you would use:
>=20
> java_xercesX=C2=A0=C2=A0jaxp.TypeInfoWriter test.xsd=C2=A0test1.xml=20
>=20
> for example, to validate test1.xml. (This batch file currently uses JDK8)=
.
>=20
> Results of my validations of the two test files are provided in test1.out=
 and test2.out, also in the testX directory.
>=20
> I look forward to getting some feedback on this possible bug.
>=20
> Please do not hesitate to ask questions or to point out anything foolish =
that I have been doing.
>=20
> Regards,
>=20
> John MORRIS,
> Abingdon, UK.
>=20
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>