考虑这个简单的KML示例,该示例通过<ExtendedData>
和<Schema>
元素合并了类型化的自定义数据:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<Document>
<name>KML does not validate when an 'unsignedInt' field is zero</name>
<ExtendedData>
<SchemaData schemaUrl="#DocumentSchemaId">
<SimpleData name="UNSIGNED_INT">0</SimpleData>
</SchemaData>
</ExtendedData>
<Schema id="DocumentSchemaId" name="doc">
<SimpleField name="UNSIGNED_INT" type="xsd:unsignedInt">
<displayName>Unsigned Int</displayName>
</SimpleField>
</Schema>
</Document>
</kml>
在这种情况下,只定义了一个kml:SimpleData
字段。其名称为UNSIGNED_INT
,其分配的类型为xsd:unsignedInt
。
问题在于,此文档未通过此信誉良好的KML validator验证 。验证器返回的错误是:
"kml:SchemaData contains a kml:SimpleData value that does not
correspond to the declared type."
验证程序指示此错误的原因是因为感兴趣的字段已分配值0
:
<SimpleData name="UNSIGNED_INT">0</SimpleData>
但是,当值更改为非零无符号整数时,文档 验证(按预期方式):
<SimpleData name="UNSIGNED_INT">42</SimpleData>
我的问题是 ,为什么此验证程序标记0
不符合xsd:unsignedInt
类型的约束?
KML验证器对0
和xsd:unsignedInt
的处理与XML schema standard对xsd:unsignedInt
的说法有冲突:
unsignedInt 具有由有限长度的十进制数字序列组成的词汇表示(#x30-#x39)。例如: 0 ,1267896754,100000。
最后,作为参考,这里列出了为kml:SimpleField
定义使用的所有数据类型:
(来自KML validator documentation和OGC KML 2.2 standard, subclause 9.9.4.2.1。)
答案 0 :(得分:1)
这似乎是kmlvalidator的一个错误,我会向他们报告。我使用Oxygen XML Editor测试了正常的模式验证并验证了它。