Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
xmllint无法验证xs:language_Xml_Validation_Schema - Fatal编程技术网

xmllint无法验证xs:language

xmllint无法验证xs:language,xml,validation,schema,Xml,Validation,Schema,我正在尝试验证以下XML: <?xml version="1.0" encoding="UTF-8"?> <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://dublincore.org/schemas/xmls/qdc/2008/02/11/dc.xsd"> <xs:element name="feature"> <xs:simpleType>

我正在尝试验证以下XML:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:dc="http://dublincore.org/schemas/xmls/qdc/2008/02/11/dc.xsd">
  <xs:element name="feature">
    <xs:simpleType>
      <xs:restriction base="xs:string">
        <xs:annotation>
          <xs:documentation xml:lang="de-x-mt">
            <dc:title xml:lang="de-x-mt">Berg</dc:title>
            <dc:title xml:lang="en-x-mt">Mountain</dc:title>
          </xs:documentation>
        </xs:annotation>
      </xs:restriction>
    </xs:simpleType>
  </xs:element>
</xs:schema>
xmllint说:

test.xsd:7: element documentation: Schemas parser error : Element '{http://www.w3.org/2001/XMLSchema}documentation', attribute '{http://www.w3.org/XML/1998/namespace}lang': 'de-x-mt' is not a valid value of the atomic type 'xs:language'.
WXS schema test.xsd failed to compile
我无法理解为什么“de-x-mt”在xs:documentation元素中“xs:language”无效,而相同的“de-x-mt”在dc:title元素中有效。它们都来自xml名称空间,应该以相同的方式处理。它实际上是相同的属性!是吗

根据“W3C XML模式定义语言(XSD)1.1第2部分:数据类型”,xs:语言定义为:

符合模式的所有字符串的集合

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

显然,de-x-mt符合这种模式

是xmllint bug吗?如何让xmllint验证这样的xs:language标记?

深入挖掘函数xmlCheckLanguageID()的parser.c注释中的libxml2(xmllint使用的一个):

下面是一个代码:

if (nxt - cur == 4)
     goto script;
if (nxt - cur == 2)
     goto region;
if ((nxt - cur >= 5) && (nxt - cur <= 8))
     goto variant;
if (nxt - cur != 3)
     return(0);
下面是:

    /* extensions and private use subtags not checked */
extensions:
    return (1);
我已在提交错误报告

if (nxt - cur == 4)
     goto script;
if (nxt - cur == 2)
     goto region;
if ((nxt - cur >= 5) && (nxt - cur <= 8))
     goto variant;
if (nxt - cur != 3)
     return(0);
  if (nxt - cur == 1)
       goto extension;
    /* extensions and private use subtags not checked */
extensions:
    return (1);