You are viewing a plain text version of this content. The canonical link for it is here.
Posted to j-users@xerces.apache.org by JOHN Morris <j....@ntlworld.com.INVALID> on 2020/08/18 21:04:31 UTC

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

Hi,

I am a relative newcomer to Xerces for XML Validation.

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 time, 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.TypeInfoWriter program.

Recently, I have begun to look at the XSD 1.1 assert/assertion features with a longer XML file.

I have used two sample XML files:

1) The first has more than 200 elements, one following hard on the previous one.

With this file, I find that there are particular line numbers that give trouble in the validation process, although the XML content of those lines appears to be legal and valid.

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 now another new error occurs with a new XML contruct, which now appears at the troublesome line number.

2) The same XML file as in (1) but with XML comment lines introduced at each of the troublesome line numbers so that no validation is now required at those lines. It should be noted, however, that the troublesome lines from case (1) still appear, immediately after each of the new comment lines. The validation now passes completely.

I am currently assuming that this behaviour (i.e. the errors) is unexpected.

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 attachment, but it did not post. Can someone tell me whether attachments are supported on this mailing list)?

The a ZIP file comprises a directory, testX, with following contents:

java_xercesX.bat - the batch file to run the test cases

test.xsd - the XSD 1.1 Schema file

test1.xml - the first XML file, without the extra comment lines

test2.xml - the second XML file, with the extra comment lines

xml_diffs.out - the result of a comparison (with the "fc" program) of the content of the two XML files

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 few lines of the file java_xercesX.bat to suit your system. Then, to run one test case, you would use:

java_xercesX  jaxp.TypeInfoWriter test.xsd test1.xml 

for example, to validate test1.xml. (This batch file currently uses JDK8).

Results of my validations of the two test files are provided in test1.out and test2.out, also in the testX directory.

I look forward to getting some feedback on this possible bug.

Please do not hesitate to ask questions or to point out anything foolish that I have been doing.

Regards,

John MORRIS,
Abingdon, UK.

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


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

Posted by Eduard Drenth <ed...@fryske-akademy.nl>.
Issues: https://issues.apache.org/jira/projects/XERCESJ/issues

First create an account, then create an issue

-----Original Message-----
From: JOHN Morris <j....@ntlworld.com.INVALID>
Reply-To: j-users@xerces.apache.org
To: mukulg@apache.org, j-users@xerces.apache.org
Subject: Re: Re: Possible Bug: Xerces 2.12.1 for XML Validation with
XSD 1.1 Schema under Java - Plain Text
Date: Wed, 26 Aug 2020 15:17:07 +0100

Hi Mukul,
Thanks for your reply.
As a beginner, I wonder how I would go about "creating a Xerces-J jira
issue" on my problem.
Also, I wonder whether I could get you to send me the exact outputs
from your jaxp.SourceValidator runs on the two files test1.xml (9
errors) and test2.xml (18 errors).
Is there a command-line option for jaxp.SourceValidator which would
produce additional lines in the output for the original XML from each
line in the input file, whether valid or not?
Best regards,John.
> On 26 August 2020 at 05:19 Mukul Gandhi <mu...@apache.org> wrote: 
> 
> Hi John, On Sun, Aug 23, 2020 at 7:23 PM JOHN Morris <
> j.morris13@ntlworld.com.invalid> wrote: 
> > Where can we go from here? I can only think of asking you to double
> > check that both of your test runs are not on the same XML data
> > somehow.
>  I've just double checked, and I get XSD validation errors on both of
> your XML input documents when validated by the XSD document that
> you've provided. I get the count of XSD validation errors as 9 and
> 18, respectively for the XML input documents test1.xml and test2.xml
> when both of these XML input documents are validated by the XSD
> document test.xsd. It seems strange to me that, you don't get any XSD
> validation errors with Xerces-J for the XML input document
> test2.xml. 
> > ... or do you have any other further suggested steps in order to
> > achieve consistency from our two sets of results?
>  May be if someone else, could also cross check my findings, that
> would be further helpful to this discussion. If you're still
> grappling with this issue, I could also suggest that you can create a
> Xerces-J jira issue for this and attach your XML and XSD documents to
> the jira issue. That shall help anyone else, to use your test case
> XML and XSD documents and do an analysis. 
> 
> -- 
> 
> Regards, Mukul Gandhi

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


-- 
Eduard Drenth, Software Architekt

edrenth@fryske-akademy.nl

Doelestrjitte 8
8911 DX  Ljouwert
+31 58 234 30 47
+31 62 094 34 28 (privé)

skype: eduarddrenth
https://github.com/eduarddrenth
frisian.eu
gpg: https://pgp.surfnet.nl/pks/lookup?search=eduarddrenth


Op freed bin ik thús/wurkje ik minder





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

Posted by Mukul Gandhi <mu...@apache.org>.
I just played around, with this kind of XSD validation, but using somewhat
simple XSD and XML input documents. Below are mentioned my XSD and XML
input documents,

XSD document,

<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
                    elementFormDefault="qualified">

    <xs:element name="X">
       <xs:complexType>
           <xs:sequence>
               <xs:element name="fileName" type="FileName"
maxOccurs="unbounded"/>
           </xs:sequence>
       </xs:complexType>
    </xs:element>

    <xs:complexType name="FileName">
       <xs:simpleContent>
          <xs:extension base="xs:string">
             <xs:attribute name="att1" type="xs:string"/>
             <xs:assert test="if (./text()[matches(., 'a[0-9]')]) then
@att1 else true()"/>
          </xs:extension>
       </xs:simpleContent>
    </xs:complexType>

</xs:schema>

XML input document (which is found as valid with above mentioned schema
document),

<?xml version="1.0"?>
<X>
  <fileName>a</fileName>
  <fileName>b</fileName>
  <!-- comment ... -->
  <fileName att1="az">a0</fileName>
  <!-- comment ... -->
  <fileName>c</fileName>
  <fileName att1="az">a5</fileName>
</X>

When I remove comments from above mentioned XML input document, I still see
the XML input document as valid.

The following XML input documents are found as invalid,

<?xml version="1.0"?>
<X>
  <fileName>a</fileName>
  <fileName>b</fileName>
  <!-- comment ... -->
  <fileName>a0</fileName>
  <!-- comment ... -->
  <fileName>c</fileName>
  <fileName att1="az">a5</fileName>
</X>

<?xml version="1.0"?>
<X>
  <fileName>a</fileName>
  <fileName>b</fileName>
  <!-- comment ... -->
  <fileName>a0</fileName>
  <!-- comment ... -->
  <fileName>c</fileName>
  <fileName>a5</fileName>
</X>

Therefore, fundamentally I don't see a bug with Xerces-J with the kind of
XSD and XML input documents discussed within this thread & the Jira issue
(those that are provided by John).



-- 
Regards,
Mukul Gandhi

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

Posted by Mukul Gandhi <mu...@apache.org>.
Hi John,

On Fri, Aug 28, 2020 at 1:47 PM JOHN Morris <j....@ntlworld.com> wrote:

> I'm not sure what was happening before to give us those discrepancies
> between our respective results though. Did you try comparing the files you
> were using for the validations before with the new (but, from my point of
> view, the same) files from the Jira case?
>

I've not been able to do, detailed comparison between the files posted by
you within this mail thread and those attached on the Jira issue. I'd
assume that they're same as claimed by you. But fetching your files from
the Jira issue attachment, gives me same results that you've got (and I
don't get same results by copying file contents from within the mail
thread). For the purpose of making a possible fix to implementation as per
the issue that we're discussing here, I'd suggest that we use the file
attachment that you've provided within the Jira issue.

I also suggest that, if you may reduce as much as possible the XML input
file contents and also possibly remove most of the comments from the XSD
document (and reattach the modified files on the Jira issue) that would be
still ok for validation and replicates the same bug, I guess that'd be more
easy for any Xerces-J developer to investigate the issue & possibly make a
fix.


> What can I expect to happen next? Is there some process where one of the
> Xerces-J Developers (assuming that you are not already one of those) will
> pick up this case? If so, how long does that process typically take, in
> your experience?
>

As per my knowledge, the issue would be picked up (for analysis & a
possible fix) by any Xerces-J developer depending who has available time
(the Xerces-J developers are volunteers).


> I wonder whether it would help my case, if you could add your supporting
> information, that you had succeeded in replicating the problem, to the Jira
> case itself?
>

I've made few comments on the Xerces-J Jira issue you've posted, some time
ago.



-- 
Regards,
Mukul Gandhi

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

Posted by JOHN Morris <j....@ntlworld.com.INVALID>.
Hi Mukul,

Thanks for the update.

I was relieved to get away from the previous level of uncertainty that I was doing something stupid!

I'm not sure what was happening before to give us those discrepancies between our respective results though. Did you try comparing the files you were using for the validations before with the new (but, from my point of view, the same) files from the Jira case?

> When I remove the XML comment from line 40 of the file test2.xml, I get 9 XSD validation errors
> for the file test2.xml after removal of XML comment. This looks to me strange, and may be a bug
> with Xerces-J and should be investigated I believe.

Yes, this would be because the subsequent XML comments are no longer aligned with the problematic line numbers.

What can I expect to happen next? Is there some process where one of the Xerces-J Developers (assuming that you are not already one of those) will pick up this case? If so, how long does that process typically take, in your experience?

I wonder whether it would help my case, if you could add your supporting information, that you had succeeded in replicating the problem, to the Jira case itself?

All the best,

John.

> On 28 August 2020 at 04:47 Mukul Gandhi <mu...@apache.org> wrote: 
> 
> 
> Hi John,
> 
> 
> On Wed, Aug 26, 2020 at 7:47 PM JOHN Morris < j.morris13@ntlworld.com> wrote:
>  
> > Also, I wonder whether I could get you to send me the exact outputs from your jaxp.SourceValidator runs on the two files test1.xml (9 errors) and test2.xml (18 errors).
>  
> I just saw that, you've created a Jira issue XERCESJ-1726 for this discussion. Thanks.
>  
> I'm now able to reproduce the issues described by you within this discussion.
>  
> I've now used, the XML documents (test1.xml & test2.xml) and an XSD document (test.xsd) that you've attached to the above mentioned Jira issue. With those files, the XML document test1.xml gives me 9 XSD validation errors, and the file test2.xml gives me no XSD validation errors.
>  
> When I remove the XML comment from line 40 of the file test2.xml, I get 9 XSD validation errors for the file test2.xml after removal of XML comment. This looks to me strange, and may be a bug with Xerces-J and should be investigated I believe.
>  
> > Is there a command-line option for jaxp.SourceValidator which would produce additional lines in the output for the original XML from each line in the input file, whether valid or not?
>  
> I guess that, there's no such command line option with jaxp.SourceValidator. Inherently, after validation using jaxp.SourceValidator, either we see line and column numbers with error descriptions for the instances that are involved in invalidity assessment for the XML and XSD documents, or if the XML document is valid the output displays nothing (except the time it took for the XSD validation to take place).
> 
> 
> -- 
> 
> 
> Regards, 
> Mukul Gandhi

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


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

Posted by Mukul Gandhi <mu...@apache.org>.
Hi John,

On Wed, Aug 26, 2020 at 7:47 PM JOHN Morris <j....@ntlworld.com> wrote:

Also, I wonder whether I could get you to send me the exact outputs from
> your jaxp.SourceValidator runs on the two files test1.xml (9 errors) and
> test2.xml (18 errors).


I just saw that, you've created a Jira issue XERCESJ-1726 for this
discussion. Thanks.

I'm now able to reproduce the issues described by you within this
discussion.

I've now used, the XML documents (test1.xml & test2.xml) and an XSD
document (test.xsd) that you've attached to the above mentioned Jira issue.
With those files, the XML document test1.xml gives me 9 XSD validation
errors, and the file test2.xml gives me no XSD validation errors.

When I remove the XML comment from line 40 of the file test2.xml, I get 9
XSD validation errors for the file test2.xml after removal of XML comment.
This looks to me strange, and may be a bug with Xerces-J and should be
investigated I believe.


> Is there a command-line option for jaxp.SourceValidator which would
> produce additional lines in the output for the original XML from each line
> in the input file, whether valid or not?
>

I guess that, there's no such command line option
with jaxp.SourceValidator. Inherently, after validation using
jaxp.SourceValidator, either we see line and column numbers with error
descriptions for the instances that are involved in invalidity assessment
for the XML and XSD documents, or if the XML document is valid the output
displays nothing (except the time it took for the XSD validation to take
place).



-- 
Regards,
Mukul Gandhi

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

Posted by JOHN Morris <j....@ntlworld.com.INVALID>.
Hi Mukul,

Thanks for your reply.

As a beginner, I wonder how I would go about "creating a Xerces-J jira issue" on my problem.

Also, I wonder whether I could get you to send me the exact outputs from your jaxp.SourceValidator runs on the two files test1.xml (9 errors) and test2.xml (18 errors).

Is there a command-line option for jaxp.SourceValidator which would produce additional lines in the output for the original XML from each line in the input file, whether valid or not?

Best regards,
John.

> On 26 August 2020 at 05:19 Mukul Gandhi <mu...@apache.org> wrote: 
> 
> 
> Hi John,
>  
> On Sun, Aug 23, 2020 at 7:23 PM JOHN Morris <j....@ntlworld.com.invalid> wrote: 
> 
> > Where can we go from here? I can only think of asking you to double check that both of your test runs are not on the same XML data somehow.
>  
> I've just double checked, and I get XSD validation errors on both of your XML input documents when validated by the XSD document that you've provided.
>  
> I get the count of XSD validation errors as 9 and 18, respectively for the XML input documents test1.xml and test2.xml when both of these XML input documents are validated by the XSD document test.xsd.
>  
> It seems strange to me that, you don't get any XSD validation errors with Xerces-J for the XML input document test2.xml.
>  
> > ... or do you have any other further suggested steps in order to achieve consistency from our two sets of results?
>  
> May be if someone else, could also cross check my findings, that would be further helpful to this discussion.
>  
> If you're still grappling with this issue, I could also suggest that you can create a Xerces-J jira issue for this and attach your XML and XSD documents to the jira issue. That shall help anyone else, to use your test case XML and XSD documents and do an analysis. 
> 
> 
> -- 
> 
> 
> Regards, 
> Mukul Gandhi

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


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

Posted by Mukul Gandhi <mu...@apache.org>.
Hi John,

On Sun, Aug 23, 2020 at 7:23 PM JOHN Morris <j....@ntlworld.com.invalid>
wrote:

> Where can we go from here? I can only think of asking you to double check
> that both of your test runs are not on the same XML data somehow.
>

I've just double checked, and I get XSD validation errors on both of your
XML input documents when validated by the XSD document that you've provided.

I get the count of XSD validation errors as 9 and 18, respectively for the
XML input documents test1.xml and test2.xml when both of these XML input
documents are validated by the XSD document test.xsd.

It seems strange to me that, you don't get any XSD validation errors with
Xerces-J for the XML input document test2.xml.

... or do you have any other further suggested steps in order to achieve
> consistency from our two sets of results?
>

May be if someone else, could also cross check my findings, that would be
further helpful to this discussion.

If you're still grappling with this issue, I could also suggest that you
can create a Xerces-J jira issue for this and attach your XML and XSD
documents to the jira issue. That shall help anyone else, to use your test
case XML and XSD documents and do an analysis.



-- 
Regards,
Mukul Gandhi

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

Posted by JOHN Morris <j....@ntlworld.com.INVALID>.
Hi Mukul,
Thanks.
I have followed the steps you suggested in using jave -Djava.endorsed.dirs=... and jaxp.SourceValidator (although I am using java version "1.8.0_261") but the validation results are unaffected.
I still get 9 validation violations from test1.xml but none at all from the essentially identical test2.xml.
Where can we go from here? I can only think of asking you to double check that both of your test runs are not on the same XML data somehow. (Recall that test2.xml should have those XML comment lines at lines 40, 158 and 195, displacing the previously erroneous lines to other line numbers, where they now seem (in my validation) harmless).
... or do you have any other further suggested steps in order to achieve consistency from our two sets of results?
Thank you also for the clarification about the characters outside the UTF-8 encoding scheme. I should have thought about those accented letters.

best regards,
John.

> On 23 August 2020 at 10:43 Mukul Gandhi <mu...@apache.org> wrote: 
> 
> 
> On Sun, Aug 23, 2020 at 2:13 PM JOHN Morris <j....@ntlworld.com.invalid> wrote: 
> 
> > I think that the first steps in achieving convergence between the validation behaviour that you observe and mine is for me to try switching to jaxp.SourceValidator and to ensure that I am using the same environment as you. To that (second) end, I would ask you to provide a (Windows) batch file, embodying the environment that you use to run your tests (unless your tests were made using the environment in my batch file).
> Following are the contents of batch file that I use, to run XSD 1.1 validation using Xerces-J sample jaxp.SourceValidator,
>  
> 
> @echo off
>  
> java -Djava.endorsed.dirs=F:\xerces-2_12_1-xml-schema-1.1 jaxp.SourceValidator -i %1 -a %2 -f -fx -xsd11
> 
>  
> (please replace F:\xerces-2_12_1-xml-schema-1.1 with Xerces-J's path on your environment)
>  
> The above batch file needs to be invoked as:  xmlFile_name xsdFile_name
>  
> I'm currently using java 1.8.0_241 from Oracle.
> >  
> > 
> > 
> > I would also ask you which characters in my XML files were unable to be represented in the default UTF-8 encoding, in case they are the result typos that I haven't noticed.
> When I specify the XML prolog as <?xml version="1.0"?>, for the XML document that is validated, I get following errors,
>  
> [Fatal Error] test1.xml:10:93: Invalid byte 2 of 3-byte UTF-8 sequence. 
>  
> (that is the line Copyright (C) 2005 - 2017 [joomla.fr](http://joomla.fr) et Open Source Matters. Tous droits réservés within your XML document)
>  
> Specifying the XML prolog as <?xml version="1.0" encoding="ISO-8859-1"?>, solves this problem for me.
> 
> 
> -- 
> 
> 
> Regards, 
> Mukul Gandhi

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


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

Posted by Mukul Gandhi <mu...@apache.org>.
On Sun, Aug 23, 2020 at 2:13 PM JOHN Morris <j....@ntlworld.com.invalid>
wrote:

> I think that the first steps in achieving convergence between the
> validation behaviour that you observe and mine is for me to try switching
> to jaxp.SourceValidator and to ensure that I am using the same environment
> as you. To that (second) end, I would ask you to provide a (Windows) batch
> file, embodying the environment that you use to run your tests (unless your
> tests were made using the environment in my batch file).
>
Following are the contents of batch file that I use, to run XSD 1.1
validation using Xerces-J sample jaxp.SourceValidator,

*@echo off*

*java -Djava.endorsed.dirs=F:\xerces-2_12_1-xml-schema-1.1
jaxp.SourceValidator -i %1 -a %2 -f -fx -xsd11*

(please replace F:\xerces-2_12_1-xml-schema-1.1 with Xerces-J's path on
your environment)

The above batch file needs to be invoked as: <batch_file_name> xmlFile_name
xsdFile_name

I'm currently using java 1.8.0_241 from Oracle.

> I would also ask you which characters in my XML files were unable to be
> represented in the default UTF-8 encoding, in case they are the result
> typos that I haven't noticed.
>
When I specify the XML prolog as <?xml version="1.0"?>, for the XML
document that is validated, I get following errors,

[Fatal Error] test1.xml:10:93: Invalid byte 2 of 3-byte UTF-8 sequence.

(that is the line <copyright>Copyright (C) 2005 - 2017 joomla.fr et Open
Source Matters. Tous droits réservés</copyright> within your XML document)

Specifying the XML prolog as <?xml version="1.0" encoding="ISO-8859-1"?>,
solves this problem for me.



-- 
Regards,
Mukul Gandhi

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

Posted by JOHN Morris <j....@ntlworld.com.INVALID>.
Hi Mukul,

Thanks for your further comments.

I think that the first steps in achieving convergence between the validation behaviour that you observe and mine is for me to try switching to jaxp.SourceValidator and to ensure that I am using the same environment as you. To that (second) end, I would ask you to provide a (Windows) batch file, embodying the environment that you use to run your tests (unless your tests were made using the environment in my batch file).

I would also ask you which characters in my XML files were unable to be represented in the default UTF-8 encoding, in case they are the result typos that I haven't noticed.

Many thanks once again for your patience.

Best regards,

John.

> On 23 August 2020 at 07:46 Mukul Gandhi <mu...@apache.org> wrote:
> 
>     On Sat, Aug 22, 2020 at 10:27 PM JOHN Morris <j....@ntlworld.com.invalid> wrote:
> 
>         > > 
> >         I note your reference to using jaxp.SourceValidator/ I'm not sure whether you are claiming that, if you use that, you don't see any of the problems that I have highlighted(?)
> > 
> >     >     I didn't mean that. Its just that, my personal preference to do XSD validation with Xerces-J, for your examples, is to use Xerces-J sample jaxp.SourceValidator.
> 
>         > > 
> >         I find that seemingly good XML constructs cause validation error WHEN THOSE XML CONSTRUCTS OCCUR AT CERTAIN PROBLEMATIC LINE NUMBERS e.g. line 44, in my test1.xml file). However, those exact same constructs DO NOT trigger errors if they appear at different XML line numbers. For example, if I insert an XML comment line before one of these constructs,formerly appearing at a problematic line number, so that it now appears at the subsequent line number, it no longer triggers an error!!! That was what the second test file was supposed to illustrate.
> > 
> >     >     I don't experience these things. For me, both of your XML documents (test1.xml and test2.xml) when validated by your XSD document (test.xsd), produces same sort of errors. My validation attempts using Xerces-J, produces about 9 validation errors for both of the XML documents that are validated. I'm not sure, what is different at your side.
> 
>         > > 
> >         As for using xs:pattern, my imagination was not rich enough to know how to achieve the same effect as I was trying to get with 'matches' but now with xs:pattern. Have you been able to visualise how to do that?
> > 
> >     >     Let's say you wish to have <xs:assert test="if (./text()[matches(.,'^(install\.xml)$')]) then @file else true()"/> written using xs:pattern instead of XPath 2.0 'matches' function.
> 
>     Following should be the steps to do this,
> 
>     1) Create an XSD simple type definition
> 
>     <xs:simpleType name="StringType1">
>         <xs:restriction base="xs:string">
>              <xs:pattern value="regex_expr"/>
>         <xs:restriction>
>     </xs:simpleType>
> 
>     2) Write the xs:assert as following
> 
>     <xs:assert test="if (./text() castable as StringType1) then @file else true()"/>
> 
>     (the above suggested XSD fragments, are not tested from my side)
> 
>     Another minor point. I had to add the following XML prolog to your XML documents that are to be validated,
>     <?xml version="1.0" encoding="ISO-8859-1"?>
> 
>     (your XML documents contain few characters, that cannot be represented with the default encoding UTF-8).
> 
>      
> 
>     --
>     Regards,
>     Mukul Gandhi
> 

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

Posted by Mukul Gandhi <mu...@apache.org>.
On Sat, Aug 22, 2020 at 10:27 PM JOHN Morris
<j....@ntlworld.com.invalid> wrote:

> I note your reference to using jaxp.SourceValidator/ I'm not sure whether
> you are claiming that, if you use that, you don't see any of the problems
> that I have highlighted(?)
>
I didn't mean that. Its just that, my personal preference to do XSD
validation with Xerces-J, for your examples, is to use Xerces-J sample
jaxp.SourceValidator.

> I find that seemingly good XML constructs cause validation error WHEN
> THOSE XML CONSTRUCTS OCCUR AT CERTAIN PROBLEMATIC LINE NUMBERS e.g. line
> 44, in my test1.xml file). However, those exact same constructs DO NOT
> trigger errors if they appear at different XML line numbers. For example,
> if I insert an XML comment line before one of these constructs,formerly
> appearing at a problematic line number, so that it now appears at the
> subsequent line number, it no longer triggers an error!!! That was what the
> second test file was supposed to illustrate.
>
I don't experience these things. For me, both of your XML documents
(test1.xml and test2.xml) when validated by your XSD document (test.xsd),
produces same sort of errors. My validation attempts using Xerces-J,
produces about 9 validation errors for both of the XML documents that are
validated. I'm not sure, what is different at your side.

> As for using xs:pattern, my imagination was not rich enough to know how to
> achieve the same effect as I was trying to get with 'matches' but now with
> xs:pattern. Have you been able to visualise how to do that?
>
Let's say you wish to have <xs:assert test="if
(./text()[matches(.,'^(install\.xml)$')]) then @file else true()"/> written
using xs:pattern instead of XPath 2.0 'matches' function.

Following should be the steps to do this,

1) Create an XSD simple type definition

<xs:simpleType name="StringType1">
    <xs:restriction base="xs:string">
         <xs:pattern value="regex_expr"/>
    <xs:restriction>
</xs:simpleType>

2) Write the xs:assert as following

<xs:assert test="if (./text() castable as StringType1) then @file else
true()"/>

(the above suggested XSD fragments, are not tested from my side)

Another minor point. I had to add the following XML prolog to your XML
documents that are to be validated,
<?xml version="1.0" encoding="ISO-8859-1"?>

(your XML documents contain few characters, that cannot be represented with
the default encoding UTF-8).



-- 
Regards,
Mukul Gandhi

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

Posted by JOHN Morris <j....@ntlworld.com.INVALID>.
Dear Mukul,

Many thanks for coming back to me on this one. You must be very busy with other on-going tasks.

I note your reference to using jaxp.SourceValidator/ I'm not sure whether you are claiming that, if you use that, you don't see any of the problems that I have highlighted(?)

I would also like to understand more about the incomptabilities in 'matches' function implementation in Jave and Xpath 2.0. I am not sure that this fits the bill as an explanation of those problems. I think that I may not have explained my test cases clearly enough.

I find that seemingly good XML constructs cause validation error WHEN THOSE XML CONSTRUCTS OCCUR AT CERTAIN PROBLEMATIC LINE NUMBERS e.g. line 44, in my test1.xml file). However, those exact same constructs DO NOT trigger errors if they appear at different XML line numbers. For example, if I insert an XML comment line before one of these constructs,formerly appearing at a problematic line number, so that it now appears at the subsequent line number, it no longer triggers an error!!! That was what the second test file was supposed to illustrate.

This smacks more of some kind of buffering problem in the validation code, rather than an incompatibility between implementations of 'matches' functions (or indeed complexity of 'matches' expressions).

As for using xs:pattern, my imagination was not rich enough to know how to achieve the same effect as I was trying to get with 'matches' but now with xs:pattern. Have you been able to visualise how to do that?

I look forward to hearing your reaction to these comments.

Best regards,

John.

-------- Original Message ----------
From: Mukul Gandhi <mu...@apache.org>
To: j-users@xerces.apache.org
Date: 22 August 2020 at 10:22
Subject: Re: Possible Bug: Xerces 2.12.1 for XML Validation with XSD 1.1 Schema under Java - Plain Text

Hi John,
     With Xerces-J 2.12.1 XSD 1.1 implementation, given your test case XML and XSD documents, I see few xs:assert false results on the XPath 2.0 'matches' function. I'm using Xerces-J's jaxp.SourceValidator sample for XSD validation.

As per my knowledge, Xerces-J XPath 2.0 engine's 'matches' function implementation is based on Java's regex classes, which is not 100% compliant to XPath 2.0 'matches' regex spec (my gut feeling is that, these two regex specs [java & XPath 2.0 'matches'] have about 95% syntax and semantics in common).

Your XPath 2.0 'matches' regex expressions seem to me quite complex, and looks to me as sort of edge case requirements. My recommendation would be, to use XPath 2.0 'matches' within Xerce-J's xs:assert for simple requirements. If you're looking for XSD (1.1) regex 100% compliance, I'd suggest using xs:pattern facet with Xerces-J.

On Wed, Aug 19, 2020 at 2:40 PM JOHN Morris <j....@ntlworld.com.invalid> wrote:

Strictly speaking, I sould probably have be referring to Xerces-J 2.12.1. Sorry.

One other thing that I should add is that I have not succeeded in finding any 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=i:\jdk1.8.0_261"
set "x2path=i:\Xerces-J-bin.2.12.1-xml-schema-1.1\xerces-2_12_1-xml-schema-1.1"
set "xml_data_path=I:\Joomla_MVC_dev\validatexml\admin\testA\"

%jdkpath%\bin\java -cp .;%x2path%\xml-apis.jar;%x2path%\xercesImpl.jar;%x2path%\serializer.jar;%x2path%\resolver.jar;%x2path%\org.eclipse.wst.xml.xpath2.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="1.0"?>
<xs:schema xmlns:xs=" http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
        <!-- ********************** -->
        <!-- * Top-level elements * -->
        <!-- ********************** -->
        <xs:element name="extension">
                <xs:alternative test="@type='language'" type="extensionTypeLanguage"/>
        </xs:element>
        <!-- ******************************************************** -->
        <!-- * Structures used from more than one top-level element * -->
        <!-- ******************************************************** -->
        <xs:group name="metadata">
                <xs:all>
                        <xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="creationDate" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="authorEmail" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="authorUrl" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="copyright" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <!-- ***************************************************************************** -->
                        <!-- * Disregard the following element, not decoded by the installation software * -->
                        <!-- ***************************************************************************** -->
                        <xs:element name="license" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="version" type="extensionVersionType" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1"/>
                </xs:all>
        </xs:group>
        <xs:simpleType name="methodChoice">
                <xs:restriction base="xs:string">
                        <xs:enumeration value="install"/>
                        <xs:enumeration value="upgrade"/>
                </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="joomlaVersionChoice">
                <xs:restriction base="xs:string">
                        <xs:pattern value="[23].[0-9]"/>
                </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="extensionVersionType">
                <xs:restriction base="xs:string">
                        <xs:pattern value="[0-9]([0-9])*(.[0-9]([0-9])*)+"/>
                </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="tagChoice">
                <xs:restriction base="xs:string">
                        <xs:pattern value="[a-z]{2,3}-[A-Z]{2,3}"/>
                </xs:restriction>
        </xs:simpleType>
        <xs:simpleType name="clientChoice">
                <xs:restriction base="xs:string">
                        <xs:pattern value="administrator|site"/>
                </xs:restriction>
        </xs:simpleType>
        <xs:complexType name="typeUpdateServers">
                <xs:complexContent>
                        <xs:restriction base="xs:anyType">
                                <xs:all>
                                        <xs:element name="server" type="typeServerUpdateServers" minOccurs="0" maxOccurs="unbounded"/>
                                </xs:all>
                        </xs:restriction>
                </xs:complexContent>
        </xs:complexType>
        <xs:complexType name="typeMedia">
                <xs:all>
                        <xs:element name="filename" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                        <xs:element name="folder" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                </xs:all>
                <xs:attribute name="folder" type="xs:string" use="optional"/>
                <xs:attribute name="destination" type="xs:string" use="optional"/>
        </xs:complexType>
        <xs:simpleType name="typeParams">
                <xs:restriction base="xs:string">
                </xs:restriction>
        </xs:simpleType>
        <!-- ************************************ -->
        <!-- * attributes optional or required? * -->
        <!-- ************************************ -->
        <xs:complexType name="typeServerUpdateServers">
                <xs:simpleContent>
                        <xs:extension base="xs:string">
                                <xs:attribute name="name" type="xs:string"/>
                                <xs:attribute name="type" type="serverChoice"/>
                                <!-- **************************************************** -->
                                <!-- * Include the "priority" attribute here to prevent * -->
                                <!-- * errors although I have failed to identify        * -->
                                <!-- * code in Joomla! which processes it.              * -->
                                <!-- **************************************************** -->
                                <xs:attribute name="priority" type="xs:positiveInteger"/>
                        </xs:extension>
                </xs:simpleContent>
        </xs:complexType>
        <xs:simpleType name="serverChoice">
                <xs:restriction base="xs:string">
                        <xs:pattern value="extension|collection"/>
                </xs:restriction>
        </xs:simpleType>
        <!-- ********************************************* -->
        <!-- * Material for Language-specific extensions * -->
        <!-- ********************************************* -->
        <xs:complexType name="extensionTypeLanguage">
                <xs:all>
                        <xs:element name="tag" type="tagChoice" minOccurs="0" maxOccurs="1"/>
                        <xs:group ref="metadata"/>
                        <xs:element name="files" type="typeLanguageFiles" minOccurs="1" maxOccurs="unbounded"/>
                        <xs:element name="media" type="typeMedia" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="params" type="typeParams" minOccurs="1" maxOccurs="1"/>
                </xs:all>
                <xs:attribute name="type" type="xs:string" use="required" fixed="language"/>
                <xs:attribute name="method" type="methodChoice"/>
                <xs:attribute name="version" type="joomlaVersionChoice"/>
                <xs:attribute name="client" type="clientChoice"/>
        </xs:complexType>
        <xs:complexType name="typeLanguageFilesFilename">
                <xs:simpleContent>
                        <xs:extension base="xs:string">
                                <xs:attribute name="file" type="xs:string" use="optional"/>
                                <!-- ***************************************************************************************************************************************************************************************** -->
                                <!-- * Assuming that the current context is "/extension/files/filename"                                                                                                                      * -->
                                <!-- * check that there are ALL elements in this context whose values DO match one of:                                                                                                       * -->
                                <!-- *  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)))$ * -->
                                <!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                                                                  * -->
                                <!-- *  3) ^(install\.xml)$                                                                                                                                                                  * -->
                                <!-- ***************************************************************************************************************************************************************************************** -->
                                <xs:assert test="./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)$')]"/>
                                <!-- ******************************************************************************************************************************************* -->
                                <!-- * Of the elements whose values (./text()) match:                                                                                          * -->
                                <!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                    * -->
                                <!-- * check that ALL have the "file" attribute.                                                                                               * -->
                                <!-- ******************************************************************************************************************************************* -->
                                <!-- <xs:assert test="./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')]/../@file"/>
                                <xs:assert test="if (true()) then true() else false()"/>
                                <xs:assert test="matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')"/> -->
                                <xs:assert test="if (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file else true()"/>
                                <!-- ******************************************************************************************************************************************* -->
                                <!-- * Check that the ONE element which matches:                                                                                                 * -->
                                <!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                    * -->
                                <!-- * has an attribute "file" with value "meta".                                                                                              * -->
                                <!-- ******************************************************************************************************************************************* -->
                                <!-- <xs:assert test="./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')]/../@file[.='meta']"/> -->
                                <xs:assert test="if (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file[.='meta'] else true()"/>
                                <!-- ******************************************************************************************************************************************* -->
                                <!-- * Of the elements whose values (./text()) match:                                                                                            * -->
                                <!-- *  3) ^(install\.xml)$                                                                                                                    * -->
                                <!-- * check that ALL have the "file" attribute.                                                                                               * -->
                                <!-- ******************************************************************************************************************************************* -->
                                <xs:assert test="if (./text()[matches(.,'^(install\.xml)$')]) then @file else true()"/>
                                <!-- ******************************************************************************************************************************************* -->
                                <!-- * Check that the ONE element which matches:                                                                                                 * -->
                                <!-- *  3) ^(install\.xml)$                                                                                                                    * -->
                                <!-- * has an attribute "file" with value "meta".                                                                                              * -->
                                <!-- ******************************************************************************************************************************************* -->
                                <xs:assert test="if (./text()[matches(.,'^(install\.xml)$')]) then @file[.='meta'] else true()"/>
                        </xs:extension>
                </xs:simpleContent>
        </xs:complexType>
        <xs:complexType name="typeLanguageFiles">
                <xs:all>
                        <xs:element name="folder" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
                        <xs:element name="filename" type="typeLanguageFilesFilename" minOccurs="1" maxOccurs="unbounded"/> <!-- For the "index.<php|html>" file -->
                </xs:all>
                <xs:attribute name="folder" type="xs:string" use="optional"/>
                <!-- ***************************************************************************************************************************************************************************************** -->
                <!-- * Assuming that the current context is "/extension/files"                                                                                                                               * -->
                <!-- ***************************************************************************************************************************************************************************************** -->
                <!-- ***************************************************************************************************************************************************************************************** -->
                <!-- Of the elements whose values (./text()) match:                                                                                                                                          * -->
                <!-- *  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)))$ * -->
                <!-- * check that NONE have the "file" attribute.                                                                                                                                            * -->
                <!-- ***************************************************************************************************************************************************************************************** -->
                <xs:assert test="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)|(localise\.php)))$')]/..[@file])=0"/>
                <!-- ***************************************************************************************************************************************************************************************** -->
                <!-- * Check there is ONE and ONLY ONE element whose value (./text()) matches:                                                                                                               * -->
                <!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                                                                  * -->
                <!-- ***************************************************************************************************************************************************************************************** -->
                <xs:assert test="count(./filename/text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')])=1"/>
                <!-- ***************************************************************************************************************************************************************************************** -->
                <!-- * Check there is ONE and ONLY ONE element whose value (./text()) matches:                                                                                                               * -->
                <!-- *  3) ^(install\.xml)$                                                                                                                                                                  * -->
                <!-- ***************************************************************************************************************************************************************************************** -->
                <xs:assert test="count(./filename/text()[matches(.,'^(install\.xml)$')])=1"/>
        </xs:complexType>
</xs:schema>

test1.xml

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

test2.xml

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

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

...
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
[Error] test1.xml:40:44: cvc-assertion: Assertion evaluation ('./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)$')]') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed.
[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 element '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[.='meta'] else true()') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not match a required type.
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
...
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
[Error] test1.xml:158:58: cvc-assertion: Assertion evaluation ('./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)$')]') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed.
[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 element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 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[.='meta'] else true()') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not match a required type.
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
...
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
[Error] test1.xml:195:57: cvc-assertion: Assertion evaluation ('./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)$')]') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed.
[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 element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 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[.='meta'] else true()') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not match a required type.
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="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</filename>
                <filename>fr-FR.plg_search_categories.ini</filename>
***** TEST2.XML
                <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
                <!-- 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 < j.morris13@ntlworld.com mailto:j.morris13@ntlworld.com .INVALID>
> To: j-users@xerces.apache.org mailto:j-users@xerces.apache.org
> Date: 18 August 2020 at 22:04
> Subject: Possible Bug: Xerces 2.12.1 for XML Validation with XSD 1.1 Schema under Java - Plain Text
>
> Hi,
>
> I am a relative newcomer to Xerces for XML Validation.
>
> 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 time, 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.TypeInfoWriter program.
>
> Recently, I have begun to look at the XSD 1.1 assert/assertion features with a longer XML file.
>
> I have used two sample XML files:
>
> 1) The first has more than 200 elements, one following hard on the previous one.
>
> With this file, I find that there are particular line numbers that give trouble in the validation process, although the XML content of those lines appears to be legal and valid.
>
> 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 now another new error occurs with a new XML contruct, which now appears at the troublesome line number.
>
> 2) The same XML file as in (1) but with XML comment lines introduced at each of the troublesome line numbers so that no validation is now required at those lines. It should be noted, however, that the troublesome lines from case (1) still appear, immediately after each of the new comment lines. The validation now passes completely.
>
> I am currently assuming that this behaviour (i.e. the errors) is unexpected.
>
> 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 attachment, but it did not post. Can someone tell me whether attachments are supported on this mailing list)?
>
> The a ZIP file comprises a directory, testX, with following contents:
>
> java_xercesX.bat - the batch file to run the test cases
>
> test.xsd - the XSD 1.1 Schema file
>
> test1.xml - the first XML file, without the extra comment lines
>
> test2.xml - the second XML file, with the extra comment lines
>
> xml_diffs.out - the result of a comparison (with the "fc" program) of the content of the two XML files
>
> 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 few lines of the file java_xercesX.bat to suit your system. Then, to run one test case, you would use:
>
> java_xercesX  jaxp.TypeInfoWriter test.xsd test1.xml
>
> for example, to validate test1.xml. (This batch file currently uses JDK8).
>
> Results of my validations of the two test files are provided in test1.out and test2.out, also in the testX directory.
>
> I look forward to getting some feedback on this possible bug.
>
> Please do not hesitate to ask questions or to point out anything foolish that I have been doing.
>
> Regards,
>
> John MORRIS,
> Abingdon, UK.


 


--
Regards,
Mukul Gandhi



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

Posted by Mukul Gandhi <mu...@apache.org>.
Hi John,
     With Xerces-J 2.12.1 XSD 1.1 implementation, given your test case XML
and XSD documents, I see few xs:assert false results on the XPath 2.0
'matches' function. I'm using Xerces-J's jaxp.SourceValidator sample for
XSD validation.

As per my knowledge, Xerces-J XPath 2.0 engine's 'matches' function
implementation is based on Java's regex classes, which is not 100%
compliant to XPath 2.0 'matches' regex spec (my gut feeling is that, these
two regex specs [java & XPath 2.0 'matches'] have about 95% syntax and
semantics in common).

Your XPath 2.0 'matches' regex expressions seem to me quite complex, and
looks to me as sort of edge case requirements. My recommendation would be,
to use XPath 2.0 'matches' within Xerce-J's xs:assert for simple
requirements. If you're looking for XSD (1.1) regex 100% compliance, I'd
suggest using xs:pattern facet with Xerces-J.

On Wed, Aug 19, 2020 at 2:40 PM JOHN Morris <j....@ntlworld.com.invalid>
wrote:

> Strictly speaking, I sould probably have be referring to Xerces-J 2.12.1.
> Sorry.
>
> One other thing that I should add is that I have not succeeded in finding
> any 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=i:\jdk1.8.0_261"
> set
> "x2path=i:\Xerces-J-bin.2.12.1-xml-schema-1.1\xerces-2_12_1-xml-schema-1.1"
> set "xml_data_path=I:\Joomla_MVC_dev\validatexml\admin\testA\"
>
> %jdkpath%\bin\java -cp
> .;%x2path%\xml-apis.jar;%x2path%\xercesImpl.jar;%x2path%\serializer.jar;%x2path%\resolver.jar;%x2path%\org.eclipse.wst.xml.xpath2.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="1.0"?>
> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
>            elementFormDefault="qualified">
>         <!-- ********************** -->
>         <!-- * Top-level elements * -->
>         <!-- ********************** -->
>         <xs:element name="extension">
>                 <xs:alternative test="@type='language'"
> type="extensionTypeLanguage"/>
>         </xs:element>
>         <!-- ******************************************************** -->
>         <!-- * Structures used from more than one top-level element * -->
>         <!-- ******************************************************** -->
>         <xs:group name="metadata">
>                 <xs:all>
>                         <xs:element name="name" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="creationDate" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="author" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="authorEmail" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="authorUrl" type="xs:anyURI"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="copyright" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                         <!--
> *****************************************************************************
> -->
>                         <!-- * Disregard the following element, not
> decoded by the installation software * -->
>                         <!--
> *****************************************************************************
> -->
>                         <xs:element name="license" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="version"
> type="extensionVersionType" minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="description" type="xs:string"
> minOccurs="0" maxOccurs="1"/>
>                 </xs:all>
>         </xs:group>
>         <xs:simpleType name="methodChoice">
>                 <xs:restriction base="xs:string">
>                         <xs:enumeration value="install"/>
>                         <xs:enumeration value="upgrade"/>
>                 </xs:restriction>
>         </xs:simpleType>
>         <xs:simpleType name="joomlaVersionChoice">
>                 <xs:restriction base="xs:string">
>                         <xs:pattern value="[23].[0-9]"/>
>                 </xs:restriction>
>         </xs:simpleType>
>         <xs:simpleType name="extensionVersionType">
>                 <xs:restriction base="xs:string">
>                         <xs:pattern
> value="[0-9]([0-9])*(.[0-9]([0-9])*)+"/>
>                 </xs:restriction>
>         </xs:simpleType>
>         <xs:simpleType name="tagChoice">
>                 <xs:restriction base="xs:string">
>                         <xs:pattern value="[a-z]{2,3}-[A-Z]{2,3}"/>
>                 </xs:restriction>
>         </xs:simpleType>
>         <xs:simpleType name="clientChoice">
>                 <xs:restriction base="xs:string">
>                         <xs:pattern value="administrator|site"/>
>                 </xs:restriction>
>         </xs:simpleType>
>         <xs:complexType name="typeUpdateServers">
>                 <xs:complexContent>
>                         <xs:restriction base="xs:anyType">
>                                 <xs:all>
>                                         <xs:element name="server"
> type="typeServerUpdateServers" minOccurs="0" maxOccurs="unbounded"/>
>                                 </xs:all>
>                         </xs:restriction>
>                 </xs:complexContent>
>         </xs:complexType>
>         <xs:complexType name="typeMedia">
>                 <xs:all>
>                         <xs:element name="filename" type="xs:string"
> minOccurs="0" maxOccurs="unbounded"/>
>                         <xs:element name="folder" type="xs:string"
> minOccurs="0" maxOccurs="unbounded"/>
>                 </xs:all>
>                 <xs:attribute name="folder" type="xs:string"
> use="optional"/>
>                 <xs:attribute name="destination" type="xs:string"
> use="optional"/>
>         </xs:complexType>
>         <xs:simpleType name="typeParams">
>                 <xs:restriction base="xs:string">
>                 </xs:restriction>
>         </xs:simpleType>
>         <!-- ************************************ -->
>         <!-- * attributes optional or required? * -->
>         <!-- ************************************ -->
>         <xs:complexType name="typeServerUpdateServers">
>                 <xs:simpleContent>
>                         <xs:extension base="xs:string">
>                                 <xs:attribute name="name"
> type="xs:string"/>
>                                 <xs:attribute name="type"
> type="serverChoice"/>
>                                 <!--
> **************************************************** -->
>                                 <!-- * Include the "priority" attribute
> here to prevent * -->
>                                 <!-- * errors although I have failed to
> identify        * -->
>                                 <!-- * code in Joomla! which processes
> it.              * -->
>                                 <!--
> **************************************************** -->
>                                 <xs:attribute name="priority"
> type="xs:positiveInteger"/>
>                         </xs:extension>
>                 </xs:simpleContent>
>         </xs:complexType>
>         <xs:simpleType name="serverChoice">
>                 <xs:restriction base="xs:string">
>                         <xs:pattern value="extension|collection"/>
>                 </xs:restriction>
>         </xs:simpleType>
>         <!-- ********************************************* -->
>         <!-- * Material for Language-specific extensions * -->
>         <!-- ********************************************* -->
>         <xs:complexType name="extensionTypeLanguage">
>                 <xs:all>
>                         <xs:element name="tag" type="tagChoice"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:group ref="metadata"/>
>                         <xs:element name="files" type="typeLanguageFiles"
> minOccurs="1" maxOccurs="unbounded"/>
>                         <xs:element name="media" type="typeMedia"
> minOccurs="0" maxOccurs="1"/>
>                         <xs:element name="params" type="typeParams"
> minOccurs="1" maxOccurs="1"/>
>                 </xs:all>
>                 <xs:attribute name="type" type="xs:string" use="required"
> fixed="language"/>
>                 <xs:attribute name="method" type="methodChoice"/>
>                 <xs:attribute name="version" type="joomlaVersionChoice"/>
>                 <xs:attribute name="client" type="clientChoice"/>
>         </xs:complexType>
>         <xs:complexType name="typeLanguageFilesFilename">
>                 <xs:simpleContent>
>                         <xs:extension base="xs:string">
>                                 <xs:attribute name="file" type="xs:string"
> use="optional"/>
>                                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                                 <!-- * Assuming that the current context
> is "/extension/files/filename"
>                                                                         *
> -->
>                                 <!-- * check that there are ALL elements
> in this context whose values DO match one of:
>                                                                          *
> -->
>                                 <!-- *  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)))$
> * -->
>                                 <!-- *  2)
> ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$
>
>                           * -->
>                                 <!-- *  3) ^(install\.xml)$
>
>                                                                       * -->
>                                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                                 <xs:assert
> test="./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)$')]"/>
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <!-- * Of the elements whose values
> (./text()) match:
>                                 * -->
>                                 <!-- *  2)
> ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$
>                                                         * -->
>                                 <!-- * check that ALL have the "file"
> attribute.
>                              * -->
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <!-- <xs:assert
> test="./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')]/../@file"/>
>                                 <xs:assert test="if (true()) then true()
> else false()"/>
>                                 <xs:assert
> test="matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')"/> -->
>                                 <xs:assert test="if
> (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file else
> true()"/>
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <!-- * Check that the ONE element which
> matches:
>                              * -->
>                                 <!-- *  2)
> ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$
>                                                         * -->
>                                 <!-- * has an attribute "file" with value
> "meta".
>                           * -->
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <!-- <xs:assert
> test="./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')]/../@file[.='meta']"/>
> -->
>                                 <xs:assert test="if
> (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file[.='meta']
> else true()"/>
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <!-- * Of the elements whose values
> (./text()) match:
>                                   * -->
>                                 <!-- *  3) ^(install\.xml)$
>
>                         * -->
>                                 <!-- * check that ALL have the "file"
> attribute.
>                              * -->
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <xs:assert test="if
> (./text()[matches(.,'^(install\.xml)$')]) then @file else true()"/>
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <!-- * Check that the ONE element which
> matches:
>                              * -->
>                                 <!-- *  3) ^(install\.xml)$
>
>                         * -->
>                                 <!-- * has an attribute "file" with value
> "meta".
>                           * -->
>                                 <!--
> *******************************************************************************************************************************************
> -->
>                                 <xs:assert test="if
> (./text()[matches(.,'^(install\.xml)$')]) then @file[.='meta'] else
> true()"/>
>                         </xs:extension>
>                 </xs:simpleContent>
>         </xs:complexType>
>         <xs:complexType name="typeLanguageFiles">
>                 <xs:all>
>                         <xs:element name="folder" type="xs:string"
> minOccurs="0" maxOccurs="unbounded"/>
>                         <xs:element name="filename"
> type="typeLanguageFilesFilename" minOccurs="1" maxOccurs="unbounded"/> <!--
> For the "index.<php|html>" file -->
>                 </xs:all>
>                 <xs:attribute name="folder" type="xs:string"
> use="optional"/>
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <!-- * Assuming that the current context is
> "/extension/files"
>                                                                      * -->
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <!-- Of the elements whose values (./text()) match:
>
>                                                       * -->
>                 <!-- *  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)))$
> * -->
>                 <!-- * check that NONE have the "file" attribute.
>
>                                                       * -->
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <xs:assert
> test="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)|(localise\.php)))$')]/..[@file])=0"/>
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <!-- * Check there is ONE and ONLY ONE element whose value
> (./text()) matches:
>                                                        * -->
>                 <!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$
>
>                                                       * -->
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <xs:assert
> test="count(./filename/text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')])=1"/>
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <!-- * Check there is ONE and ONLY ONE element whose value
> (./text()) matches:
>                                                        * -->
>                 <!-- *  3) ^(install\.xml)$
>
>                                                       * -->
>                 <!--
> *****************************************************************************************************************************************************************************************
> -->
>                 <xs:assert
> test="count(./filename/text()[matches(.,'^(install\.xml)$')])=1"/>
>         </xs:complexType>
> </xs:schema>
>
> test1.xml
>
> <extension version="3.7" client="administrator" type="language"
> method="upgrade"> <!-- change to client="site" if site pack -->
>         <name>French (fr-FR)</name> <!-- New in 3.7.0: Use only latin
> ascii characters. -->
>         <tag>fr-FR</tag>
>         <version>3.7.0.1</version>
>         <creationDate>15/02/2017</creationDate>
>         <author>French translation team : joomla.fr</author>
>         <authorEmail>traduction@joomla.fr</authorEmail>
>         <authorUrl>www.joomla.fr</authorUrl>
>         <copyright>Copyright (C) 2005 - 2017 joomla.fr et Open Source
> Matters. Tous droits réservés</copyright>
>         <license>GNU General Public License version 2 or later; see
> LICENSE.txt</license>
>         <description>fr-FR administrator language</description>
>         <files>
>                 <filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
>                 <filename>fr-FR.com_admin.ini</filename>
>                 <filename>fr-FR.com_admin.sys.ini</filename>
>                 <filename>fr-FR.com_ajax.ini</filename>
>                 <filename>fr-FR.com_ajax.sys.ini</filename>
>                 <filename>fr-FR.com_associations.ini</filename>
>                 <filename>fr-FR.com_associations.sys.ini</filename>
>                 <filename>fr-FR.com_banners.ini</filename>
>                 <filename>fr-FR.com_banners.sys.ini</filename>
>                 <filename>fr-FR.com_cache.ini</filename>
>                 <filename>fr-FR.com_cache.sys.ini</filename>
>                 <filename>fr-FR.com_categories.ini</filename>
>                 <filename>fr-FR.com_categories.sys.ini</filename>
>                 <filename>fr-FR.com_checkin.ini</filename>
>                 <filename>fr-FR.com_checkin.sys.ini</filename>
>                 <filename>fr-FR.com_config.ini</filename>
>                 <filename>fr-FR.com_config.sys.ini</filename>
>                 <filename>fr-FR.com_contact.ini</filename>
>                 <filename>fr-FR.com_contact.sys.ini</filename>
>                 <filename>fr-FR.com_content.ini</filename>
>                 <filename>fr-FR.com_content.sys.ini</filename>
>                 <filename>fr-FR.com_contenthistory.ini</filename>
>                 <filename>fr-FR.com_contenthistory.sys.ini</filename>
>                 <filename>fr-FR.com_cpanel.ini</filename>
>                 <filename>fr-FR.com_cpanel.sys.ini</filename>
>                 <filename>fr-FR.com_fields.ini</filename>
>                 <filename>fr-FR.com_fields.sys.ini</filename>
>                 <filename>fr-FR.com_finder.ini</filename>
>                 <filename>fr-FR.com_finder.sys.ini</filename>
>                 <filename>fr-FR.com_installer.ini</filename>
>                 <filename>fr-FR.com_installer.sys.ini</filename>
>                 <filename>fr-FR.com_joomlaupdate.ini</filename>
>                 <filename>fr-FR.com_joomlaupdate.sys.ini</filename>
>                 <filename>fr-FR.com_languages.ini</filename>
>                 <filename>fr-FR.com_languages.sys.ini</filename>
>                 <filename>fr-FR.com_login.ini</filename>
>                 <filename>fr-FR.com_login.sys.ini</filename>
>                 <filename>fr-FR.com_mailto.sys.ini</filename>
>                 <filename>fr-FR.com_media.ini</filename>
>                 <filename>fr-FR.com_media.sys.ini</filename>
>                 <filename>fr-FR.com_menus.ini</filename>
>                 <filename>fr-FR.com_menus.sys.ini</filename>
>                 <filename>fr-FR.com_messages.ini</filename>
>                 <filename>fr-FR.com_messages.sys.ini</filename>
>                 <filename>fr-FR.com_modules.ini</filename>
>                 <filename>fr-FR.com_modules.sys.ini</filename>
>                 <filename>fr-FR.com_newsfeeds.ini</filename>
>                 <filename>fr-FR.com_newsfeeds.sys.ini</filename>
>                 <filename>fr-FR.com_plugins.ini</filename>
>                 <filename>fr-FR.com_plugins.sys.ini</filename>
>                 <filename>fr-FR.com_postinstall.ini</filename>
>                 <filename>fr-FR.com_postinstall.sys.ini</filename>
>                 <filename>fr-FR.com_redirect.ini</filename>
>                 <filename>fr-FR.com_redirect.sys.ini</filename>
>                 <filename>fr-FR.com_search.ini</filename>
>                 <filename>fr-FR.com_search.sys.ini</filename>
>                 <filename>fr-FR.com_tags.ini</filename>
>                 <filename>fr-FR.com_tags.sys.ini</filename>
>                 <filename>fr-FR.com_templates.ini</filename>
>                 <filename>fr-FR.com_templates.sys.ini</filename>
>                 <filename>fr-FR.com_users.ini</filename>
>                 <filename>fr-FR.com_users.sys.ini</filename>
>                 <filename>fr-FR.com_weblinks.ini</filename>
>                 <filename>fr-FR.com_weblinks.sys.ini</filename>
>                 <filename>fr-FR.com_wrapper.ini</filename>
>                 <filename>fr-FR.com_wrapper.sys.ini</filename>
>                 <!-- this file can be added in the ADMINISTRATOR pack if
> one wants to change the fonts used to display the back-end interface.-->
>                         <filename>fr-FR.css</filename>
>                 <!-- -->
>                 <filename>fr-FR.ini</filename>
>                 <filename>fr-FR.lib_joomla.ini</filename>
>                 <filename>fr-FR.localise.php</filename>
>                 <filename>fr-FR.mod_custom.ini</filename>
>                 <filename>fr-FR.mod_custom.sys.ini</filename>
>                 <filename>fr-FR.mod_feed.ini</filename>
>                 <filename>fr-FR.mod_feed.sys.ini</filename>
>                 <filename>fr-FR.mod_latest.ini</filename>
>                 <filename>fr-FR.mod_latest.sys.ini</filename>
>                 <filename>fr-FR.mod_logged.ini</filename>
>                 <filename>fr-FR.mod_logged.sys.ini</filename>
>                 <filename>fr-FR.mod_login.ini</filename>
>                 <filename>fr-FR.mod_login.sys.ini</filename>
>                 <filename>fr-FR.mod_menu.ini</filename>
>                 <filename>fr-FR.mod_menu.sys.ini</filename>
>                 <filename>fr-FR.mod_multilangstatus.ini</filename>
>                 <filename>fr-FR.mod_multilangstatus.sys.ini</filename>
>                 <filename>fr-FR.mod_popular.ini</filename>
>                 <filename>fr-FR.mod_popular.sys.ini</filename>
>                 <filename>fr-FR.mod_quickicon.ini</filename>
>                 <filename>fr-FR.mod_quickicon.sys.ini</filename>
>                 <filename>fr-FR.mod_stats_admin.ini</filename>
>                 <filename>fr-FR.mod_stats_admin.sys.ini</filename>
>                 <filename>fr-FR.mod_status.ini</filename>
>                 <filename>fr-FR.mod_status.sys.ini</filename>
>                 <filename>fr-FR.mod_submenu.ini</filename>
>                 <filename>fr-FR.mod_submenu.sys.ini</filename>
>                 <filename>fr-FR.mod_title.ini</filename>
>                 <filename>fr-FR.mod_title.sys.ini</filename>
>                 <filename>fr-FR.mod_toolbar.ini</filename>
>                 <filename>fr-FR.mod_toolbar.sys.ini</filename>
>                 <filename>fr-FR.mod_version.ini</filename>
>                 <filename>fr-FR.mod_version.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_cookie.ini</filename>
>
> <filename>fr-FR.plg_authentication_cookie.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_gmail.ini</filename>
>                 <filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_joomla.ini</filename>
>
> <filename>fr-FR.plg_authentication_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_ldap.ini</filename>
>                 <filename>fr-FR.plg_authentication_ldap.sys.ini</filename>
>                 <filename>fr-FR.plg_captcha_recaptcha.ini</filename>
>                 <filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
>                 <filename>fr-FR.plg_content_contact.ini</filename>
>                 <filename>fr-FR.plg_content_contact.sys.ini</filename>
>                 <filename>fr-FR.plg_content_emailcloak.ini</filename>
>                 <filename>fr-FR.plg_content_emailcloak.sys.ini</filename>
>                 <filename>fr-FR.plg_content_fields.ini</filename>
>                 <filename>fr-FR.plg_content_fields.sys.ini</filename>
>                 <filename>fr-FR.plg_content_finder.ini</filename>
>                 <filename>fr-FR.plg_content_finder.sys.ini</filename>
>                 <filename>fr-FR.plg_content_joomla.ini</filename>
>                 <filename>fr-FR.plg_content_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_content_loadmodule.ini</filename>
>                 <filename>fr-FR.plg_content_loadmodule.sys.ini</filename>
>                 <filename>fr-FR.plg_content_pagebreak.ini</filename>
>                 <filename>fr-FR.plg_content_pagebreak.sys.ini</filename>
>                 <filename>fr-FR.plg_content_pagenavigation.ini</filename>
>
> <filename>fr-FR.plg_content_pagenavigation.sys.ini</filename>
>                 <filename>fr-FR.plg_content_vote.ini</filename>
>                 <filename>fr-FR.plg_content_vote.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_article.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_article.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_contact.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_contact.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_fields.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_fields.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_image.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_image.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_menu.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_menu.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_module.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_module.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_pagebreak.ini</filename>
>
> <filename>fr-FR.plg_editors-xtd_pagebreak.sys.ini</filename>
>                 <!-- Spacer to get past a buggy record count! -->
>                 <filename>fr-FR.plg_editors-xtd_readmore.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_readmore.sys.ini</filename>
>                 <filename>fr-FR.plg_editors_codemirror.ini</filename>
>                 <filename>fr-FR.plg_editors_codemirror.sys.ini</filename>
>                 <filename>fr-FR.plg_editors_none.ini</filename>
>                 <filename>fr-FR.plg_editors_none.sys.ini</filename>
>                 <filename>fr-FR.plg_editors_tinymce.ini</filename>
>                 <filename>fr-FR.plg_editors_tinymce.sys.ini</filename>
>                 <filename>fr-FR.plg_extension_joomla.ini</filename>
>                 <filename>fr-FR.plg_extension_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_calendar.ini</filename>
>                 <filename>fr-FR.plg_fields_calendar.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_checkboxes.ini</filename>
>                 <filename>fr-FR.plg_fields_checkboxes.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_color.ini</filename>
>                 <filename>fr-FR.plg_fields_color.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_editor.ini</filename>
>                 <filename>fr-FR.plg_fields_editor.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_gallery.ini</filename>
>                 <filename>fr-FR.plg_fields_gallery.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_image.ini</filename>
>                 <filename>fr-FR.plg_fields_image.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_imagelist.ini</filename>
>                 <filename>fr-FR.plg_fields_imagelist.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_integer.ini</filename>
>                 <filename>fr-FR.plg_fields_integer.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_list.ini</filename>
>                 <filename>fr-FR.plg_fields_list.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_media.ini</filename>
>                 <filename>fr-FR.plg_fields_media.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_radio.ini</filename>
>                 <filename>fr-FR.plg_fields_radio.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_sql.ini</filename>
>                 <filename>fr-FR.plg_fields_sql.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_text.ini</filename>
>                 <filename>fr-FR.plg_fields_text.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_textarea.ini</filename>
>                 <filename>fr-FR.plg_fields_textarea.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_url.ini</filename>
>                 <filename>fr-FR.plg_fields_url.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_user.ini</filename>
>                 <filename>fr-FR.plg_fields_user.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_usergrouplist.ini</filename>
>                 <filename>fr-FR.plg_fields_usergrouplist.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_categories.ini</filename>
>                 <filename>fr-FR.plg_finder_categories.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_contacts.ini</filename>
>                 <filename>fr-FR.plg_finder_contacts.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_content.ini</filename>
>                 <filename>fr-FR.plg_finder_content.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_newsfeeds.ini</filename>
>                 <filename>fr-FR.plg_finder_newsfeeds.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_tags.ini</filename>
>                 <filename>fr-FR.plg_finder_tags.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_weblinks.ini</filename>
>                 <filename>fr-FR.plg_finder_weblinks.sys.ini</filename>
>
> <filename>fr-FR.plg_installer_folderinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_folderinstaller.sys.ini</filename>
>
> <filename>fr-FR.plg_installer_packageinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_packageinstaller.sys.ini</filename>
>                 <filename>fr-FR.plg_installer_urlinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_urlinstaller.sys.ini</filename>
>                 <filename>fr-FR.plg_installer_webinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_webinstaller.sys.ini</filename>
>
> <filename>fr-FR.plg_quickicon_extensionupdate.ini</filename>
>
> <filename>fr-FR.plg_quickicon_extensionupdate.sys.ini</filename>
>                 <filename>fr-FR.plg_quickicon_joomlaupdate.ini</filename>
>
> <filename>fr-FR.plg_quickicon_joomlaupdate.sys.ini</filename>
>
> <filename>fr-FR.plg_quickicon_phpversioncheck.ini</filename>
>
> <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
>                 <filename>fr-FR.plg_search_categories.ini</filename>
>                 <filename>fr-FR.plg_search_categories.sys.ini</filename>
>                 <filename>fr-FR.plg_search_contacts.ini</filename>
>                 <filename>fr-FR.plg_search_contacts.sys.ini</filename>
>                 <filename>fr-FR.plg_search_content.ini</filename>
>                 <filename>fr-FR.plg_search_content.sys.ini</filename>
>                 <filename>fr-FR.plg_search_newsfeeds.ini</filename>
>                 <filename>fr-FR.plg_search_newsfeeds.sys.ini</filename>
>                 <filename>fr-FR.plg_search_tags.ini</filename>
>                 <filename>fr-FR.plg_search_tags.sys.ini</filename>
>                 <filename>fr-FR.plg_search_weblinks.ini</filename>
>                 <filename>fr-FR.plg_search_weblinks.sys.ini</filename>
>                 <filename>fr-FR.plg_system_cache.ini</filename>
>                 <filename>fr-FR.plg_system_cache.sys.ini</filename>
>                 <filename>fr-FR.plg_system_debug.ini</filename>
>                 <filename>fr-FR.plg_system_debug.sys.ini</filename>
>                 <filename>fr-FR.plg_system_fields.ini</filename>
>                 <filename>fr-FR.plg_system_fields.sys.ini</filename>
>                 <filename>fr-FR.plg_system_highlight.ini</filename>
>                 <filename>fr-FR.plg_system_highlight.sys.ini</filename>
>                 <filename>fr-FR.plg_system_languagecode.ini</filename>
>                 <filename>fr-FR.plg_system_languagecode.sys.ini</filename>
>                 <filename>fr-FR.plg_system_languagefilter.ini</filename>
>
> <filename>fr-FR.plg_system_languagefilter.sys.ini</filename>
>                 <filename>fr-FR.plg_system_log.ini</filename>
>                 <filename>fr-FR.plg_system_log.sys.ini</filename>
>                 <filename>fr-FR.plg_system_logout.ini</filename>
>                 <filename>fr-FR.plg_system_logout.sys.ini</filename>
>                 <filename>fr-FR.plg_system_p3p.ini</filename>
>                 <filename>fr-FR.plg_system_p3p.sys.ini</filename>
>                 <filename>fr-FR.plg_system_redirect.ini</filename>
>                 <filename>fr-FR.plg_system_redirect.sys.ini</filename>
>                 <filename>fr-FR.plg_system_remember.ini</filename>
>                 <filename>fr-FR.plg_system_remember.sys.ini</filename>
>                 <filename>fr-FR.plg_system_sef.ini</filename>
>                 <filename>fr-FR.plg_system_sef.sys.ini</filename>
>                 <filename>fr-FR.plg_system_stats.ini</filename>
>                 <filename>fr-FR.plg_system_stats.sys.ini</filename>
>
> <filename>fr-FR.plg_system_updatenotification.ini</filename>
>
> <filename>fr-FR.plg_system_updatenotification.sys.ini</filename>
>                 <filename>fr-FR.plg_twofactorauth_totp.ini</filename>
>                 <filename>fr-FR.plg_twofactorauth_totp.sys.ini</filename>
>                 <filename>fr-FR.plg_twofactorauth_yubikey.ini</filename>
>
> <filename>fr-FR.plg_twofactorauth_yubikey.sys.ini</filename>
>                 <filename>fr-FR.plg_user_contactcreator.ini</filename>
>                 <filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
>                 <filename>fr-FR.plg_user_joomla.ini</filename>
>                 <filename>fr-FR.plg_user_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_user_profile.ini</filename>
>                 <filename>fr-FR.plg_user_profile.sys.ini</filename>
>                 <filename>fr-FR.tpl_hathor.ini</filename>
>                 <filename>fr-FR.tpl_hathor.sys.ini</filename>
>                 <filename>fr-FR.tpl_isis.ini</filename>
>                 <filename>fr-FR.tpl_isis.sys.ini</filename>
>                 <!-- This file is mandatory as otherwise the pack can't be
> uninstalled. -->
>                 <filename file="meta">install.xml</filename>
>                 <filename file="meta">fr-FR.xml</filename>
>         </files>
>         <media destination="fr-FR">  <!-- If one needs to add a specific
> calendar -->
>             <filename>index.html</filename>
>             <filename>js/index.html</filename>
>             <filename>js/calendar-setup.js</filename>
>             <filename>js/calendar.js</filename>
>         </media>
>         <params />
> </extension>
>
> test2.xml
>
> <extension version="3.7" client="administrator" type="language"
> method="upgrade"> <!-- change to client="site" if site pack -->
>         <name>French (fr-FR)</name> <!-- New in 3.7.0: Use only latin
> ascii characters. -->
>         <tag>fr-FR</tag>
>         <version>3.7.0.1</version>
>         <creationDate>15/02/2017</creationDate>
>         <author>French translation team : joomla.fr</author>
>         <authorEmail>traduction@joomla.fr</authorEmail>
>         <authorUrl>www.joomla.fr</authorUrl>
>         <copyright>Copyright (C) 2005 - 2017 joomla.fr et Open Source
> Matters. Tous droits réservés</copyright>
>         <license>GNU General Public License version 2 or later; see
> LICENSE.txt</license>
>         <description>fr-FR administrator language</description>
>         <files>
>                 <filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
>                 <filename>fr-FR.com_admin.ini</filename>
>                 <filename>fr-FR.com_admin.sys.ini</filename>
>                 <filename>fr-FR.com_ajax.ini</filename>
>                 <filename>fr-FR.com_ajax.sys.ini</filename>
>                 <filename>fr-FR.com_associations.ini</filename>
>                 <filename>fr-FR.com_associations.sys.ini</filename>
>                 <filename>fr-FR.com_banners.ini</filename>
>                 <filename>fr-FR.com_banners.sys.ini</filename>
>                 <filename>fr-FR.com_cache.ini</filename>
>                 <filename>fr-FR.com_cache.sys.ini</filename>
>                 <filename>fr-FR.com_categories.ini</filename>
>                 <filename>fr-FR.com_categories.sys.ini</filename>
>                 <filename>fr-FR.com_checkin.ini</filename>
>                 <filename>fr-FR.com_checkin.sys.ini</filename>
>                 <filename>fr-FR.com_config.ini</filename>
>                 <filename>fr-FR.com_config.sys.ini</filename>
>                 <filename>fr-FR.com_contact.ini</filename>
>                 <filename>fr-FR.com_contact.sys.ini</filename>
>                 <filename>fr-FR.com_content.ini</filename>
>                 <filename>fr-FR.com_content.sys.ini</filename>
>                 <filename>fr-FR.com_contenthistory.ini</filename>
>                 <filename>fr-FR.com_contenthistory.sys.ini</filename>
>                 <filename>fr-FR.com_cpanel.ini</filename>
>                 <filename>fr-FR.com_cpanel.sys.ini</filename>
>                 <filename>fr-FR.com_fields.ini</filename>
>                 <filename>fr-FR.com_fields.sys.ini</filename>
>                 <!-- Spacer to get past a buggy record count! -->
>                 <filename>fr-FR.com_finder.ini</filename>
>                 <filename>fr-FR.com_finder.sys.ini</filename>
>                 <filename>fr-FR.com_installer.ini</filename>
>                 <filename>fr-FR.com_installer.sys.ini</filename>
>                 <filename>fr-FR.com_joomlaupdate.ini</filename>
>                 <filename>fr-FR.com_joomlaupdate.sys.ini</filename>
>                 <filename>fr-FR.com_languages.ini</filename>
>                 <filename>fr-FR.com_languages.sys.ini</filename>
>                 <filename>fr-FR.com_login.ini</filename>
>                 <filename>fr-FR.com_login.sys.ini</filename>
>                 <filename>fr-FR.com_mailto.sys.ini</filename>
>                 <filename>fr-FR.com_media.ini</filename>
>                 <filename>fr-FR.com_media.sys.ini</filename>
>                 <filename>fr-FR.com_menus.ini</filename>
>                 <filename>fr-FR.com_menus.sys.ini</filename>
>                 <filename>fr-FR.com_messages.ini</filename>
>                 <filename>fr-FR.com_messages.sys.ini</filename>
>                 <filename>fr-FR.com_modules.ini</filename>
>                 <filename>fr-FR.com_modules.sys.ini</filename>
>                 <filename>fr-FR.com_newsfeeds.ini</filename>
>                 <filename>fr-FR.com_newsfeeds.sys.ini</filename>
>                 <filename>fr-FR.com_plugins.ini</filename>
>                 <filename>fr-FR.com_plugins.sys.ini</filename>
>                 <filename>fr-FR.com_postinstall.ini</filename>
>                 <filename>fr-FR.com_postinstall.sys.ini</filename>
>                 <filename>fr-FR.com_redirect.ini</filename>
>                 <filename>fr-FR.com_redirect.sys.ini</filename>
>                 <filename>fr-FR.com_search.ini</filename>
>                 <filename>fr-FR.com_search.sys.ini</filename>
>                 <filename>fr-FR.com_tags.ini</filename>
>                 <filename>fr-FR.com_tags.sys.ini</filename>
>                 <filename>fr-FR.com_templates.ini</filename>
>                 <filename>fr-FR.com_templates.sys.ini</filename>
>                 <filename>fr-FR.com_users.ini</filename>
>                 <filename>fr-FR.com_users.sys.ini</filename>
>                 <filename>fr-FR.com_weblinks.ini</filename>
>                 <filename>fr-FR.com_weblinks.sys.ini</filename>
>                 <filename>fr-FR.com_wrapper.ini</filename>
>                 <filename>fr-FR.com_wrapper.sys.ini</filename>
>                 <!-- this file can be added in the ADMINISTRATOR pack if
> one wants to change the fonts used to display the back-end interface.-->
>                         <filename>fr-FR.css</filename>
>                 <!-- -->
>                 <filename>fr-FR.ini</filename>
>                 <filename>fr-FR.lib_joomla.ini</filename>
>                 <filename>fr-FR.localise.php</filename>
>                 <filename>fr-FR.mod_custom.ini</filename>
>                 <filename>fr-FR.mod_custom.sys.ini</filename>
>                 <filename>fr-FR.mod_feed.ini</filename>
>                 <filename>fr-FR.mod_feed.sys.ini</filename>
>                 <filename>fr-FR.mod_latest.ini</filename>
>                 <filename>fr-FR.mod_latest.sys.ini</filename>
>                 <filename>fr-FR.mod_logged.ini</filename>
>                 <filename>fr-FR.mod_logged.sys.ini</filename>
>                 <filename>fr-FR.mod_login.ini</filename>
>                 <filename>fr-FR.mod_login.sys.ini</filename>
>                 <filename>fr-FR.mod_menu.ini</filename>
>                 <filename>fr-FR.mod_menu.sys.ini</filename>
>                 <filename>fr-FR.mod_multilangstatus.ini</filename>
>                 <filename>fr-FR.mod_multilangstatus.sys.ini</filename>
>                 <filename>fr-FR.mod_popular.ini</filename>
>                 <filename>fr-FR.mod_popular.sys.ini</filename>
>                 <filename>fr-FR.mod_quickicon.ini</filename>
>                 <filename>fr-FR.mod_quickicon.sys.ini</filename>
>                 <filename>fr-FR.mod_stats_admin.ini</filename>
>                 <filename>fr-FR.mod_stats_admin.sys.ini</filename>
>                 <filename>fr-FR.mod_status.ini</filename>
>                 <filename>fr-FR.mod_status.sys.ini</filename>
>                 <filename>fr-FR.mod_submenu.ini</filename>
>                 <filename>fr-FR.mod_submenu.sys.ini</filename>
>                 <filename>fr-FR.mod_title.ini</filename>
>                 <filename>fr-FR.mod_title.sys.ini</filename>
>                 <filename>fr-FR.mod_toolbar.ini</filename>
>                 <filename>fr-FR.mod_toolbar.sys.ini</filename>
>                 <filename>fr-FR.mod_version.ini</filename>
>                 <filename>fr-FR.mod_version.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_cookie.ini</filename>
>
> <filename>fr-FR.plg_authentication_cookie.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_gmail.ini</filename>
>                 <filename>fr-FR.plg_authentication_gmail.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_joomla.ini</filename>
>
> <filename>fr-FR.plg_authentication_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_authentication_ldap.ini</filename>
>                 <filename>fr-FR.plg_authentication_ldap.sys.ini</filename>
>                 <filename>fr-FR.plg_captcha_recaptcha.ini</filename>
>                 <filename>fr-FR.plg_captcha_recaptcha.sys.ini</filename>
>                 <filename>fr-FR.plg_content_contact.ini</filename>
>                 <filename>fr-FR.plg_content_contact.sys.ini</filename>
>                 <filename>fr-FR.plg_content_emailcloak.ini</filename>
>                 <filename>fr-FR.plg_content_emailcloak.sys.ini</filename>
>                 <filename>fr-FR.plg_content_fields.ini</filename>
>                 <filename>fr-FR.plg_content_fields.sys.ini</filename>
>                 <filename>fr-FR.plg_content_finder.ini</filename>
>                 <filename>fr-FR.plg_content_finder.sys.ini</filename>
>                 <filename>fr-FR.plg_content_joomla.ini</filename>
>                 <filename>fr-FR.plg_content_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_content_loadmodule.ini</filename>
>                 <filename>fr-FR.plg_content_loadmodule.sys.ini</filename>
>                 <filename>fr-FR.plg_content_pagebreak.ini</filename>
>                 <filename>fr-FR.plg_content_pagebreak.sys.ini</filename>
>                 <filename>fr-FR.plg_content_pagenavigation.ini</filename>
>
> <filename>fr-FR.plg_content_pagenavigation.sys.ini</filename>
>                 <filename>fr-FR.plg_content_vote.ini</filename>
>                 <filename>fr-FR.plg_content_vote.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_article.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_article.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_contact.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_contact.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_fields.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_fields.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_image.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_image.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_menu.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_menu.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_module.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_module.sys.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_pagebreak.ini</filename>
>
> <filename>fr-FR.plg_editors-xtd_pagebreak.sys.ini</filename>
>                 <!-- Spacer to get past a buggy record count! -->
>                 <filename>fr-FR.plg_editors-xtd_readmore.ini</filename>
>                 <filename>fr-FR.plg_editors-xtd_readmore.sys.ini</filename>
>                 <filename>fr-FR.plg_editors_codemirror.ini</filename>
>                 <filename>fr-FR.plg_editors_codemirror.sys.ini</filename>
>                 <filename>fr-FR.plg_editors_none.ini</filename>
>                 <filename>fr-FR.plg_editors_none.sys.ini</filename>
>                 <filename>fr-FR.plg_editors_tinymce.ini</filename>
>                 <filename>fr-FR.plg_editors_tinymce.sys.ini</filename>
>                 <filename>fr-FR.plg_extension_joomla.ini</filename>
>                 <filename>fr-FR.plg_extension_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_calendar.ini</filename>
>                 <filename>fr-FR.plg_fields_calendar.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_checkboxes.ini</filename>
>                 <filename>fr-FR.plg_fields_checkboxes.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_color.ini</filename>
>                 <filename>fr-FR.plg_fields_color.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_editor.ini</filename>
>                 <filename>fr-FR.plg_fields_editor.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_gallery.ini</filename>
>                 <filename>fr-FR.plg_fields_gallery.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_image.ini</filename>
>                 <filename>fr-FR.plg_fields_image.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_imagelist.ini</filename>
>                 <filename>fr-FR.plg_fields_imagelist.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_integer.ini</filename>
>                 <filename>fr-FR.plg_fields_integer.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_list.ini</filename>
>                 <filename>fr-FR.plg_fields_list.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_media.ini</filename>
>                 <filename>fr-FR.plg_fields_media.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_radio.ini</filename>
>                 <filename>fr-FR.plg_fields_radio.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_sql.ini</filename>
>                 <filename>fr-FR.plg_fields_sql.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_text.ini</filename>
>                 <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>
>                 <filename>fr-FR.plg_fields_textarea.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_url.ini</filename>
>                 <filename>fr-FR.plg_fields_url.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_user.ini</filename>
>                 <filename>fr-FR.plg_fields_user.sys.ini</filename>
>                 <filename>fr-FR.plg_fields_usergrouplist.ini</filename>
>                 <filename>fr-FR.plg_fields_usergrouplist.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_categories.ini</filename>
>                 <filename>fr-FR.plg_finder_categories.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_contacts.ini</filename>
>                 <filename>fr-FR.plg_finder_contacts.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_content.ini</filename>
>                 <filename>fr-FR.plg_finder_content.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_newsfeeds.ini</filename>
>                 <filename>fr-FR.plg_finder_newsfeeds.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_tags.ini</filename>
>                 <filename>fr-FR.plg_finder_tags.sys.ini</filename>
>                 <filename>fr-FR.plg_finder_weblinks.ini</filename>
>                 <filename>fr-FR.plg_finder_weblinks.sys.ini</filename>
>
> <filename>fr-FR.plg_installer_folderinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_folderinstaller.sys.ini</filename>
>
> <filename>fr-FR.plg_installer_packageinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_packageinstaller.sys.ini</filename>
>                 <filename>fr-FR.plg_installer_urlinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_urlinstaller.sys.ini</filename>
>                 <filename>fr-FR.plg_installer_webinstaller.ini</filename>
>
> <filename>fr-FR.plg_installer_webinstaller.sys.ini</filename>
>
> <filename>fr-FR.plg_quickicon_extensionupdate.ini</filename>
>
> <filename>fr-FR.plg_quickicon_extensionupdate.sys.ini</filename>
>                 <filename>fr-FR.plg_quickicon_joomlaupdate.ini</filename>
>
> <filename>fr-FR.plg_quickicon_joomlaupdate.sys.ini</filename>
>
> <filename>fr-FR.plg_quickicon_phpversioncheck.ini</filename>
>
> <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
>                 <!-- Spacer to get past a buggy record count! -->
>                 <filename>fr-FR.plg_search_categories.ini</filename>
>                 <filename>fr-FR.plg_search_categories.sys.ini</filename>
>                 <filename>fr-FR.plg_search_contacts.ini</filename>
>                 <filename>fr-FR.plg_search_contacts.sys.ini</filename>
>                 <filename>fr-FR.plg_search_content.ini</filename>
>                 <filename>fr-FR.plg_search_content.sys.ini</filename>
>                 <filename>fr-FR.plg_search_newsfeeds.ini</filename>
>                 <filename>fr-FR.plg_search_newsfeeds.sys.ini</filename>
>                 <filename>fr-FR.plg_search_tags.ini</filename>
>                 <filename>fr-FR.plg_search_tags.sys.ini</filename>
>                 <filename>fr-FR.plg_search_weblinks.ini</filename>
>                 <filename>fr-FR.plg_search_weblinks.sys.ini</filename>
>                 <filename>fr-FR.plg_system_cache.ini</filename>
>                 <filename>fr-FR.plg_system_cache.sys.ini</filename>
>                 <filename>fr-FR.plg_system_debug.ini</filename>
>                 <filename>fr-FR.plg_system_debug.sys.ini</filename>
>                 <filename>fr-FR.plg_system_fields.ini</filename>
>                 <filename>fr-FR.plg_system_fields.sys.ini</filename>
>                 <filename>fr-FR.plg_system_highlight.ini</filename>
>                 <filename>fr-FR.plg_system_highlight.sys.ini</filename>
>                 <filename>fr-FR.plg_system_languagecode.ini</filename>
>                 <filename>fr-FR.plg_system_languagecode.sys.ini</filename>
>                 <filename>fr-FR.plg_system_languagefilter.ini</filename>
>
> <filename>fr-FR.plg_system_languagefilter.sys.ini</filename>
>                 <filename>fr-FR.plg_system_log.ini</filename>
>                 <filename>fr-FR.plg_system_log.sys.ini</filename>
>                 <filename>fr-FR.plg_system_logout.ini</filename>
>                 <filename>fr-FR.plg_system_logout.sys.ini</filename>
>                 <filename>fr-FR.plg_system_p3p.ini</filename>
>                 <filename>fr-FR.plg_system_p3p.sys.ini</filename>
>                 <filename>fr-FR.plg_system_redirect.ini</filename>
>                 <filename>fr-FR.plg_system_redirect.sys.ini</filename>
>                 <filename>fr-FR.plg_system_remember.ini</filename>
>                 <filename>fr-FR.plg_system_remember.sys.ini</filename>
>                 <filename>fr-FR.plg_system_sef.ini</filename>
>                 <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>
>                 <filename>fr-FR.plg_system_stats.sys.ini</filename>
>
> <filename>fr-FR.plg_system_updatenotification.ini</filename>
>
> <filename>fr-FR.plg_system_updatenotification.sys.ini</filename>
>                 <filename>fr-FR.plg_twofactorauth_totp.ini</filename>
>                 <filename>fr-FR.plg_twofactorauth_totp.sys.ini</filename>
>                 <filename>fr-FR.plg_twofactorauth_yubikey.ini</filename>
>
> <filename>fr-FR.plg_twofactorauth_yubikey.sys.ini</filename>
>                 <filename>fr-FR.plg_user_contactcreator.ini</filename>
>                 <filename>fr-FR.plg_user_contactcreator.sys.ini</filename>
>                 <filename>fr-FR.plg_user_joomla.ini</filename>
>                 <filename>fr-FR.plg_user_joomla.sys.ini</filename>
>                 <filename>fr-FR.plg_user_profile.ini</filename>
>                 <filename>fr-FR.plg_user_profile.sys.ini</filename>
>                 <filename>fr-FR.tpl_hathor.ini</filename>
>                 <filename>fr-FR.tpl_hathor.sys.ini</filename>
>                 <filename>fr-FR.tpl_isis.ini</filename>
>                 <filename>fr-FR.tpl_isis.sys.ini</filename>
>                 <!-- This file is mandatory as otherwise the pack can't be
> uninstalled. -->
>                 <filename file="meta">install.xml</filename>
>                 <filename file="meta">fr-FR.xml</filename>
>         </files>
>         <media destination="fr-FR">  <!-- If one needs to add a specific
> calendar -->
>             <filename>index.html</filename>
>             <filename>js/index.html</filename>
>             <filename>js/calendar-setup.js</filename>
>             <filename>js/calendar.js</filename>
>         </media>
>         <params />
> </extension>
>
> excerpts from test1.out (showing errors reported at lines 40, 158, 195 in
> test1.xml):
>
> ...
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
>    endElement(name="filename")
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
> [Error] test1.xml:40:44: cvc-assertion: Assertion evaluation
> ('./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)$')]')
> for element 'filename' on schema type 'typeLanguageFilesFilename' did not
> succeed.
> [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 element '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[.='meta']
> else true()') for element 'filename' on schema type
> 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not
> match a required type.
>    endElement(name="filename")
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
>    endElement(name="filename")
> ...
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
>    endElement(name="filename")
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
> [Error] test1.xml:158:58: cvc-assertion: Assertion evaluation
> ('./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)$')]')
> for element 'filename' on schema type 'typeLanguageFilesFilename' did not
> succeed.
> [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 element 'filename' on schema type 'typeLanguageFilesFilename'
> did not succeed. 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[.='meta']
> else true()') for element 'filename' on schema type
> 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not
> match a required type.
>    endElement(name="filename")
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
>    endElement(name="filename")
> ...
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
>    endElement(name="filename")
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
> [Error] test1.xml:195:57: cvc-assertion: Assertion evaluation
> ('./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)$')]')
> for element 'filename' on schema type 'typeLanguageFilesFilename' did not
> succeed.
> [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 element 'filename' on schema type 'typeLanguageFilesFilename'
> did not succeed. 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[.='meta']
> else true()') for element 'filename' on schema type
> 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not
> match a required type.
>    endElement(name="filename")
>
>  startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
>    endElement(name="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</filename>
>                 <filename>fr-FR.plg_search_categories.ini</filename>
> ***** TEST2.XML
>
> <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
>                 <!-- 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 <j....@ntlworld.com.INVALID>
> > To: j-users@xerces.apache.org
> > Date: 18 August 2020 at 22:04
> > Subject: Possible Bug: Xerces 2.12.1 for XML Validation with XSD 1.1
> Schema under Java - Plain Text
> >
> > Hi,
> >
> > I am a relative newcomer to Xerces for XML Validation.
> >
> > 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
> time, 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.TypeInfoWriter program.
> >
> > Recently, I have begun to look at the XSD 1.1 assert/assertion features
> with a longer XML file.
> >
> > I have used two sample XML files:
> >
> > 1) The first has more than 200 elements, one following hard on the
> previous one.
> >
> > With this file, I find that there are particular line numbers that give
> trouble in the validation process, although the XML content of those lines
> appears to be legal and valid.
> >
> > 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 now another new error occurs with a new XML contruct, which
> now appears at the troublesome line number.
> >
> > 2) The same XML file as in (1) but with XML comment lines introduced at
> each of the troublesome line numbers so that no validation is now required
> at those lines. It should be noted, however, that the troublesome lines
> from case (1) still appear, immediately after each of the new comment
> lines. The validation now passes completely.
> >
> > I am currently assuming that this behaviour (i.e. the errors) is
> unexpected.
> >
> > 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
> attachment, but it did not post. Can someone tell me whether attachments
> are supported on this mailing list)?
> >
> > The a ZIP file comprises a directory, testX, with following contents:
> >
> > java_xercesX.bat - the batch file to run the test cases
> >
> > test.xsd - the XSD 1.1 Schema file
> >
> > test1.xml - the first XML file, without the extra comment lines
> >
> > test2.xml - the second XML file, with the extra comment lines
> >
> > xml_diffs.out - the result of a comparison (with the "fc" program) of
> the content of the two XML files
> >
> > 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
> few lines of the file java_xercesX.bat to suit your system. Then, to run
> one test case, you would use:
> >
> > java_xercesX  jaxp.TypeInfoWriter test.xsd test1.xml
> >
> > for example, to validate test1.xml. (This batch file currently uses
> JDK8).
> >
> > Results of my validations of the two test files are provided in
> test1.out and test2.out, also in the testX directory.
> >
> > I look forward to getting some feedback on this possible bug.
> >
> > Please do not hesitate to ask questions or to point out anything foolish
> that I have been doing.
> >
> > Regards,
> >
> > John MORRIS,
> > Abingdon, UK.
>




-- 
Regards,
Mukul Gandhi

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

Posted by JOHN Morris <j....@ntlworld.com.INVALID>.
Strictly speaking, I sould probably have be referring to Xerces-J 2.12.1. Sorry.

One other thing that I should add is that I have not succeeded in finding any 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=i:\jdk1.8.0_261"
set "x2path=i:\Xerces-J-bin.2.12.1-xml-schema-1.1\xerces-2_12_1-xml-schema-1.1"
set "xml_data_path=I:\Joomla_MVC_dev\validatexml\admin\testA\"

%jdkpath%\bin\java -cp .;%x2path%\xml-apis.jar;%x2path%\xercesImpl.jar;%x2path%\serializer.jar;%x2path%\resolver.jar;%x2path%\org.eclipse.wst.xml.xpath2.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="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           elementFormDefault="qualified">
	<!-- ********************** -->
	<!-- * Top-level elements * -->
	<!-- ********************** -->
	<xs:element name="extension">
		<xs:alternative test="@type='language'" type="extensionTypeLanguage"/>
	</xs:element>
	<!-- ******************************************************** -->
	<!-- * Structures used from more than one top-level element * -->
	<!-- ******************************************************** -->
	<xs:group name="metadata">
		<xs:all>
			<xs:element name="name" type="xs:string" minOccurs="0" maxOccurs="1"/>
			<xs:element name="creationDate" type="xs:string" minOccurs="0" maxOccurs="1"/>
			<xs:element name="author" type="xs:string" minOccurs="0" maxOccurs="1"/>
			<xs:element name="authorEmail" type="xs:string" minOccurs="0" maxOccurs="1"/>
			<xs:element name="authorUrl" type="xs:anyURI" minOccurs="0" maxOccurs="1"/>
			<xs:element name="copyright" type="xs:string" minOccurs="0" maxOccurs="1"/>
			<!-- ***************************************************************************** -->
			<!-- * Disregard the following element, not decoded by the installation software * -->
			<!-- ***************************************************************************** -->
			<xs:element name="license" type="xs:string" minOccurs="0" maxOccurs="1"/>
			<xs:element name="version" type="extensionVersionType" minOccurs="0" maxOccurs="1"/>
			<xs:element name="description" type="xs:string" minOccurs="0" maxOccurs="1"/>
		</xs:all>
	</xs:group>
	<xs:simpleType name="methodChoice">
		<xs:restriction base="xs:string">
			<xs:enumeration value="install"/>
			<xs:enumeration value="upgrade"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="joomlaVersionChoice">
		<xs:restriction base="xs:string">
			<xs:pattern value="[23].[0-9]"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="extensionVersionType">
		<xs:restriction base="xs:string">
			<xs:pattern value="[0-9]([0-9])*(.[0-9]([0-9])*)+"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="tagChoice">
		<xs:restriction base="xs:string">
			<xs:pattern value="[a-z]{2,3}-[A-Z]{2,3}"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="clientChoice">
		<xs:restriction base="xs:string">
			<xs:pattern value="administrator|site"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:complexType name="typeUpdateServers">
		<xs:complexContent>
			<xs:restriction base="xs:anyType">
				<xs:all>
					<xs:element name="server" type="typeServerUpdateServers" minOccurs="0" maxOccurs="unbounded"/>
				</xs:all>
			</xs:restriction>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="typeMedia">
		<xs:all>
			<xs:element name="filename" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="folder" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
		</xs:all>
		<xs:attribute name="folder" type="xs:string" use="optional"/>
		<xs:attribute name="destination" type="xs:string" use="optional"/>
	</xs:complexType>
	<xs:simpleType name="typeParams">
		<xs:restriction base="xs:string">
		</xs:restriction>
	</xs:simpleType>
	<!-- ************************************ -->
	<!-- * attributes optional or required? * -->
	<!-- ************************************ -->
	<xs:complexType name="typeServerUpdateServers">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="name" type="xs:string"/>
				<xs:attribute name="type" type="serverChoice"/>
				<!-- **************************************************** -->
				<!-- * Include the "priority" attribute here to prevent * -->
				<!-- * errors although I have failed to identify        * -->
				<!-- * code in Joomla! which processes it.              * -->
				<!-- **************************************************** -->
				<xs:attribute name="priority" type="xs:positiveInteger"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:simpleType name="serverChoice">
		<xs:restriction base="xs:string">
			<xs:pattern value="extension|collection"/>
		</xs:restriction>
	</xs:simpleType>
	<!-- ********************************************* -->
	<!-- * Material for Language-specific extensions * -->
	<!-- ********************************************* -->
	<xs:complexType name="extensionTypeLanguage">
		<xs:all>
			<xs:element name="tag" type="tagChoice" minOccurs="0" maxOccurs="1"/>
			<xs:group ref="metadata"/>
			<xs:element name="files" type="typeLanguageFiles" minOccurs="1" maxOccurs="unbounded"/>
			<xs:element name="media" type="typeMedia" minOccurs="0" maxOccurs="1"/>
			<xs:element name="params" type="typeParams" minOccurs="1" maxOccurs="1"/>
		</xs:all>
		<xs:attribute name="type" type="xs:string" use="required" fixed="language"/>
		<xs:attribute name="method" type="methodChoice"/>
		<xs:attribute name="version" type="joomlaVersionChoice"/>
		<xs:attribute name="client" type="clientChoice"/>
	</xs:complexType>
	<xs:complexType name="typeLanguageFilesFilename">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="file" type="xs:string" use="optional"/>
				<!-- ***************************************************************************************************************************************************************************************** -->
				<!-- * Assuming that the current context is "/extension/files/filename"                                                                                                                      * -->
				<!-- * check that there are ALL elements in this context whose values DO match one of:                                                                                                       * -->
				<!-- *  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)))$ * -->
				<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                                                                  * -->
				<!-- *  3) ^(install\.xml)$                                                                                                                                                                  * -->
				<!-- ***************************************************************************************************************************************************************************************** -->
				<xs:assert test="./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)$')]"/>
				<!-- ******************************************************************************************************************************************* -->
				<!-- * Of the elements whose values (./text()) match:                                                                                          * -->
				<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                    * -->
				<!-- * check that ALL have the "file" attribute.                                                                                               * -->
				<!-- ******************************************************************************************************************************************* -->
				<!-- <xs:assert test="./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')]/../@file"/>
				<xs:assert test="if (true()) then true() else false()"/>
				<xs:assert test="matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')"/> -->
				<xs:assert test="if (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file else true()"/>
				<!-- ******************************************************************************************************************************************* -->
				<!-- * Check that the ONE element which matches:                                                                                                 * -->
				<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                    * -->
				<!-- * has an attribute "file" with value "meta".                                                                                              * -->
				<!-- ******************************************************************************************************************************************* -->
				<!-- <xs:assert test="./text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')]/../@file[.='meta']"/> -->
				<xs:assert test="if (matches(text(),'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')) then @file[.='meta'] else true()"/>
				<!-- ******************************************************************************************************************************************* -->
				<!-- * Of the elements whose values (./text()) match:                                                                                            * -->
				<!-- *  3) ^(install\.xml)$                                                                                                                    * -->
				<!-- * check that ALL have the "file" attribute.                                                                                               * -->
				<!-- ******************************************************************************************************************************************* -->
				<xs:assert test="if (./text()[matches(.,'^(install\.xml)$')]) then @file else true()"/>
				<!-- ******************************************************************************************************************************************* -->
				<!-- * Check that the ONE element which matches:                                                                                                 * -->
				<!-- *  3) ^(install\.xml)$                                                                                                                    * -->
				<!-- * has an attribute "file" with value "meta".                                                                                              * -->
				<!-- ******************************************************************************************************************************************* -->
				<xs:assert test="if (./text()[matches(.,'^(install\.xml)$')]) then @file[.='meta'] else true()"/>
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	<xs:complexType name="typeLanguageFiles">
		<xs:all>
			<xs:element name="folder" type="xs:string" minOccurs="0" maxOccurs="unbounded"/>
			<xs:element name="filename" type="typeLanguageFilesFilename" minOccurs="1" maxOccurs="unbounded"/> <!-- For the "index.<php|html>" file -->
		</xs:all>
		<xs:attribute name="folder" type="xs:string" use="optional"/>
		<!-- ***************************************************************************************************************************************************************************************** -->
		<!-- * Assuming that the current context is "/extension/files"                                                                                                                               * -->
		<!-- ***************************************************************************************************************************************************************************************** -->
		<!-- ***************************************************************************************************************************************************************************************** -->
		<!-- Of the elements whose values (./text()) match:                                                                                                                                          * -->
		<!-- *  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)))$ * -->
		<!-- * check that NONE have the "file" attribute.                                                                                                                                            * -->
		<!-- ***************************************************************************************************************************************************************************************** -->
		<xs:assert test="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)|(localise\.php)))$')]/..[@file])=0"/>
		<!-- ***************************************************************************************************************************************************************************************** -->
		<!-- * Check there is ONE and ONLY ONE element whose value (./text()) matches:                                                                                                               * -->
		<!-- *  2) ^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$                                                                                                                                                  * -->
		<!-- ***************************************************************************************************************************************************************************************** -->
		<xs:assert test="count(./filename/text()[matches(.,'^([a-z]{2}[a-z]?-[A-Z]{2}\.xml)$')])=1"/>
		<!-- ***************************************************************************************************************************************************************************************** -->
		<!-- * Check there is ONE and ONLY ONE element whose value (./text()) matches:                                                                                                               * -->
		<!-- *  3) ^(install\.xml)$                                                                                                                                                                  * -->
		<!-- ***************************************************************************************************************************************************************************************** -->
		<xs:assert test="count(./filename/text()[matches(.,'^(install\.xml)$')])=1"/>
	</xs:complexType>
</xs:schema>

test1.xml

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

test2.xml

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

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

...
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
[Error] test1.xml:40:44: cvc-assertion: Assertion evaluation ('./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)$')]') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 
[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 element '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[.='meta'] else true()') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not match a required type.
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
...
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
[Error] test1.xml:158:58: cvc-assertion: Assertion evaluation ('./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)$')]') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 
[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 element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 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[.='meta'] else true()') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not match a required type.
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
...
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
[Error] test1.xml:195:57: cvc-assertion: Assertion evaluation ('./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)$')]') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 
[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 element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. 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[.='meta'] else true()') for element 'filename' on schema type 'typeLanguageFilesFilename' did not succeed. XPTY0004 : Value does not match a required type.
   endElement(name="filename")
   startElement(name="filename",type="typeLanguageFilesFilename",attributes={})
   endElement(name="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</filename>
                <filename>fr-FR.plg_search_categories.ini</filename>
***** TEST2.XML
                <filename>fr-FR.plg_quickicon_phpversioncheck.sys.ini</filename>
                <!-- 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 <j....@ntlworld.com.INVALID>
> To: j-users@xerces.apache.org
> Date: 18 August 2020 at 22:04
> Subject: Possible Bug: Xerces 2.12.1 for XML Validation with XSD 1.1 Schema under Java - Plain Text
> 
> Hi,
> 
> I am a relative newcomer to Xerces for XML Validation.
> 
> 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 time, 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.TypeInfoWriter program.
> 
> Recently, I have begun to look at the XSD 1.1 assert/assertion features with a longer XML file.
> 
> I have used two sample XML files:
> 
> 1) The first has more than 200 elements, one following hard on the previous one.
> 
> With this file, I find that there are particular line numbers that give trouble in the validation process, although the XML content of those lines appears to be legal and valid.
> 
> 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 now another new error occurs with a new XML contruct, which now appears at the troublesome line number.
> 
> 2) The same XML file as in (1) but with XML comment lines introduced at each of the troublesome line numbers so that no validation is now required at those lines. It should be noted, however, that the troublesome lines from case (1) still appear, immediately after each of the new comment lines. The validation now passes completely.
> 
> I am currently assuming that this behaviour (i.e. the errors) is unexpected.
> 
> 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 attachment, but it did not post. Can someone tell me whether attachments are supported on this mailing list)?
> 
> The a ZIP file comprises a directory, testX, with following contents:
> 
> java_xercesX.bat - the batch file to run the test cases
> 
> test.xsd - the XSD 1.1 Schema file
> 
> test1.xml - the first XML file, without the extra comment lines
> 
> test2.xml - the second XML file, with the extra comment lines
> 
> xml_diffs.out - the result of a comparison (with the "fc" program) of the content of the two XML files
> 
> 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 few lines of the file java_xercesX.bat to suit your system. Then, to run one test case, you would use:
> 
> java_xercesX  jaxp.TypeInfoWriter test.xsd test1.xml 
> 
> for example, to validate test1.xml. (This batch file currently uses JDK8).
> 
> Results of my validations of the two test files are provided in test1.out and test2.out, also in the testX directory.
> 
> I look forward to getting some feedback on this possible bug.
> 
> Please do not hesitate to ask questions or to point out anything foolish that I have been doing.
> 
> Regards,
> 
> John MORRIS,
> Abingdon, UK.
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: j-users-unsubscribe@xerces.apache.org
> For additional commands, e-mail: j-users-help@xerces.apache.org
>

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