According to the schema standard xs:language type is defined as follows
(see http://www.w3.org/TR/xmlschema11-2/#language):

<xs:simpleType id="language" name="language
<http://www.filigris.com/products/docflex_xml/xsddoc/examples/html/xslt20/schemas/XMLSchema_xsd/simpleTypes/language.html>">

<xs:restriction base="xs:token
<http://www.filigris.com/products/docflex_xml/xsddoc/examples/html/xslt20/schemas/XMLSchema_xsd/simpleTypes/token.html>">
<xs:pattern id="language.pattern"
value="[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*"/>
</xs:restriction>
</xs:simpleType>

According to that definition if we put 'aa-bb-cc' as a value of xml:lang
or any custom attribute of type xs:language it should be accepted as
valid one.

However when using libxslt that is not the case. Definition of language
type in libxslt permits only one section with - (like aa-bb, dd-cc,
en-US etc.). It is as if it uses this regex for validation:

[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})

Here are the sample files that demonstrate the issue:

--- test.xml ---
<?xml version="1.0" encoding="UTF-8" ?>
 - <rootelxmlns="*http://dummy.libxml2.validator*";
xmlns:xsi="*http://www.w3.org/2001/XMLSchema-instance*";
xsi:schemaLocation="*http://dummy.libxml2.validator test.xsd*">
       <samplelanguage="*aa-bb-cc*">custom language</sample>
  <samplelanguage="*en-US*"xml:lang="*aa-bb-cc*">English US</sample>
</rootel>

--- test.xsd --
<?xml version="1.0"?>
<xs:schema id="rootel"
           targetNamespace="http://dummy.libxml2.validator";
           xmlns="http://dummy.libxml2.validator";
           xmlns:xs="http://www.w3.org/2001/XMLSchema";
           attributeFormDefault="qualified"
           elementFormDefault="qualified">
  <xs:import namespace="http://www.w3.org/XML/1998/namespace";
schemaLocation="http://www.w3.org/2001/xml.xsd"; />          
  <xs:element name="rootel">
    <xs:complexType>
      <xs:choice minOccurs="0" maxOccurs="unbounded">
        <xs:element name="sample" nillable="true">
          <xs:complexType>
            <xs:simpleContent>
              <xs:extension base="xs:string">
                <xs:attribute name="language" form="unqualified"
type="xs:language" />
                <xs:attribute ref="xml:lang" use="optional"/>
              </xs:extension>
            </xs:simpleContent>
          </xs:complexType>
        </xs:element>
      </xs:choice>
    </xs:complexType>
  </xs:element>
</xs:schema>

Save these files in the same directory and execute following command to
demonstrate the issue:

xmllint --noout --schema test.xsd test.xml

Any thoughts? This looks like a bug to me.

-- 
Darko Miletic

_______________________________________________
xslt mailing list, project page http://xmlsoft.org/XSLT/
xslt@gnome.org
http://mail.gnome.org/mailman/listinfo/xslt

Reply via email to