我正在编写一些代码来输出KML文件,其中某些特定于应用程序的信息存储在ExtendedData节点中。作为调试KML有效性的一种简单方法,我使用Google地球时显示了所有错误的提示"选项已启用(http://screencast.com/t/UDkJc6Nv5G4)。
我尝试将ExtendedData编写为无类型的任意标记,如 namespace_prefix:其他下的KML参考中所述(请参阅:https://developers.google.com/kml/documentation/kmlreference?csw=1#extendeddata)问题是,即使我复制了他们的示例代码正好,Google地球抱怨一个未知元素:http://screencast.com/t/bCMgaDiDYdWt。
这是完整的KML:
<?xml version="1.0" encoding="UTF-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2">
<Document>
<name>Sample KML.kml</name>
<Placemark>
<name>Test KML</name>
<Point>
<coordinates>-118.405022621,33.943893977,0</coordinates>
</Point>
<ExtendedData xmlns:prefix="camp">
<camp:number>14</camp:number>
<camp:parkingSpaces>2</camp:parkingSpaces>
<camp:tentSites>4</camp:tentSites>
</ExtendedData>
</Placemark>
</Document>
</kml>
我知道有其他方法可以包含特定于应用程序的数据(例如&lt; Data&gt;,&lt; SchemaData&gt;等) - 但对于这个问题,我有兴趣找出原因谷歌自己的软件报告这是无效的,直接来自他们自己的例子。我是否从KML中遗漏了其他内容,或者我是否误解了文档?
答案 0 :(得分:4)
这个例子是正确的。但是,如果在Google地球中启用了“显示所有错误提示”选项,则扩展数据的任意命名空间始终显示为错误。
这在2009年被报道为一个问题,但尚未修复。 https://code.google.com/p/earth-issues/issues/detail?id=438
对扩展数据使用任意名称空间是KML 2.2规范定义的KML的有效用法,因此它实际上不是错误。谷歌地球只是报告它不知道如何处理该元素是正确的,因为adding arbitrary XML data to a Feature谷歌地球保留此数据但不处理它。 不应报告为错误。
以下是在KML中使用真实命名空间扩展数据的示例。此示例使用Dublin Core名称空间将元数据用于KML: https://productforums.google.com/d/msg/maps/8pbTmPIbj18/J_w2mjRWyQoJ
如果要在KML中验证任意名称空间,则无法使用Google地球的验证。您需要一个支持XML Schema的验证器,例如独立的注释行工具XmlValidate。有关Google地球验证的进一步讨论,请参见here。
答案 1 :(得分:1)
我也对此感到满意 - 对问答的支持。但我确实想补充一点,你复制的XML在技术上并不正确。你来自:
https://developers.google.com/kml/documentation/kmlreference#extendeddata
而更好的解释和正确的xml位于:
https://developers.google.com/kml/documentation/extendeddata
如上所述 - 它对这些错误没有帮助。如果您的版本完全正常,那是因为您直接使用命名空间,而不是前缀。
以下是第二个网站的示例:
<ExtendedData xmlns:camp="http://campsites.com">
<camp:number>14</camp:number>
<camp:parkingSpaces>2</camp:parkingSpaces>
<camp:tentSites>4</camp:tentSites>
</ExtendedData>
请注意,“prefix”替换为实际前缀(“camp”),命名空间用于定义前缀,但不使用。
只是2c。