当'unsignedInt'字段为零时,KML不会验证

时间:2012-08-30 13:23:59

标签: validation schema kml zero

考虑这个简单的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验证器对0xsd:unsignedInt的处理与XML schema standardxsd:unsignedInt的说法有冲突:

unsignedInt 具有由有限长度的十进制数字序列组成的词汇表示(#x30-#x39)。例如: 0 ,1267896754,100000。

最后,作为参考,这里列出了为kml:SimpleField定义使用的所有数据类型:

  • 的xsd:字符串
  • 的xsd:INT
  • 的xsd:unsignedInt的
  • 的xsd:短
  • 的xsd:unsignedShort的
  • 的xsd:浮
  • 的xsd:双
  • 的xsd:布尔

(来自KML validator documentationOGC KML 2.2 standard, subclause 9.9.4.2.1。)

1 个答案:

答案 0 :(得分:1)

这似乎是kmlvalidator的一个错误,我会向他们报告。我使用Oxygen XML Editor测试了正常的模式验证并验证了它。