KML:KML文件中的模式表达式

时间:2014-05-23 21:24:02

标签: xsd kml

我正在编写程序包以编程方式创建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的工程报告,但没有用。

1 个答案:

答案 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