考虑这个简单的 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 验证器进行验证。验证器返回的错误是:
"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
与XML 模式标准必须说明的内容相冲突:xsd:unsignedInt
xsd:unsignedInt
unsignedInt具有由十进制数字的有限长度序列 (#x30-#x39) 组成的词法表示。例如:0、1267896754、100000。
最后,作为参考,这里列出了所有定义用于 的数据类型kml:SimpleField
:
- xsd:字符串
- xsd:int
- xsd:unsignedInt
- xsd:短
- xsd:unsignedShort
- xsd:浮动
- xsd:双
- xsd:布尔值