我正在编写程序包以编程方式创建KML文件。 我编写它的方法是通过读取xsd文件并生成包代码(这样,当架构更新时,我可以快速并希望正确地拥有一个新包。)
因此,对于正确性而言,对模式细微差别的解释对我来说很重要。为了这个,我需要一个能够很好地理解这一点的人。KML 2.2 XSD中有几个案例可以激发我的问题:DataExtension,SchemaDataExtension,SchemaExtension,SimpleFieldExtension,UpdateExtensionGroup,UpdateOpExtensionGroup
我的问题是所有这些,但使用一个具体的例子,' DataExtension'的表达是什么?在实际练习中的KML文件中?
XSD看起来像:
<element name="ExtendedData" type="kml:ExtendedDataType"/>
<complexType name="ExtendedDataType" final="#all">
<sequence>
<element ref="kml:Data" minOccurs="0" maxOccurs="unbounded"/>
<element ref="kml:SchemaData" minOccurs="0" maxOccurs="unbounded"/>
<any namespace="##other" processContents="lax" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
</complexType>
<element name="Data" type="kml:DataType" substitutionGroup="kml:AbstractObjectGroup"/>
<complexType name="DataType" final="#all">
<complexContent>
<extension base="kml:AbstractObjectType">
<sequence>
<element ref="kml:displayName" minOccurs="0"/>
<element ref="kml:value"/>
<element ref="kml:DataExtension" minOccurs="0" maxOccurs="unbounded"/>
</sequence>
<attribute name="name" type="string"/>
</extension>
</complexContent>
</complexType>
<element name="DataExtension" abstract="true"/>
Element DataExtension是抽象的,没有与之关联的类型,它不是替换组的名称,因此没有任何具体的数据位可以在任何地方找到。然而,complexType&#39; DataType&#39;允许我将零个或多个添加到包含此类型的任何元素,在本例中为名为&#39; Data&#39;。
的元素发出元素时,扩展数据&#39;其中包含一个元素&#39;数据&#39;&#39; DataExtension&#39;表达自己?
<ExtendedData>
<Data name="string">
<displayName>...</displayName> <!-- string -->
<value>...</value> <!-- string -->
<?dataExtentionTag?>...</?dataExtentionTag?> <! -- XXX -->
</Data>
... <! -- SchemaData can go here -->
</ExtendedData>
所以在上面的XXX中,标签是什么,这里可以提供什么样的数据以及如何在适当的KML文档中格式化?这个详细程度的文档在哪里? (我已经从http://www.opengeospatial.org/standards/kml/阅读了关于KML 2.2的工程报告,但没有用。
答案 0 :(得分:0)
您可以使用dataExtension的substitutionGroup作为带有自定义数据元素的KML的扩展。
这是一个简单的例子。扩展示例可能会使用complexType作为扩展元素,并根据需要使用自己的自定义属性和/或元素。
简单示例架构:ext.xsd
<?xml version="1.0" encoding="UTF-8"?>
<schema xmlns="http://www.w3.org/2001/XMLSchema"
xmlns:kml="http://www.opengis.net/kml/2.2"
targetNamespace="http://myextension"
elementFormDefault="qualified"
version="1.0">
<!-- Import the language we are extending: OGC KML 2.2 -->
<import namespace="http://www.opengis.net/kml/2.2"
schemaLocation="http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd" />
<element name="MyData" type="string"
substitutionGroup="kml:DataExtension"/>
</schema>
示例KML:
<?xml version="1.0" encoding="utf-8"?>
<kml xmlns="http://www.opengis.net/kml/2.2"
xmlns:ext="http://myextension"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://myextension ext.xsd
http://www.opengis.net/kml/2.2 http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd">
<Placemark>
<name>Club house</name>
<ExtendedData>
<Data name="holeNumber">
<value>1</value>
<ext:MyData>my data</ext:MyData>
</Data>
<Data name="holePar">
<value>4</value>
<ext:MyData>more data</ext:MyData>
</Data>
</ExtendedData>
</Placemark>
</kml>
有关更具体的示例,请参阅Google如何实施自己的扩展程序 https://developers.google.com/kml/schema/kml22gx.xsd