xmllint无法验证xs:language
我正在尝试验证以下XML: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 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);