首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >KML : KML文件中的模式表达式

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

Stack Overflow用户
提问于 2014-05-23 21:24:02
回答 1查看 1.1K关注 0票数 1

我正在编写一个包,以编程方式创建KML文件。我编写它的方式是读取xsd文件并生成包代码(这样,当模式被更新时,我可以快速地、有希望地正确地得到一个新包)。

因此,为了正确起见,对模式的细微之处的解释对我来说是很重要的,我需要一个非常了解这一点的人来帮助我。

KML2.2XSD中有几个例子激发了我的问题: DataExtension,SchemaDataExtension,SchemaExtension,SimpleFieldExtension,UpdateExtensionGroup,UpdateOpExtensionGroup

我的问题是关于所有这些,但是使用一个具体的例子,在实际的实践中,KML文件中的'DataExtension‘的表达式是什么?

XSD看起来像:

代码语言:javascript
复制
<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"/>

元素DataExtension是抽象的,没有与其相关联的类型,也不是替换组的名称,因此它在任何地方都没有给该方带来的具体数据位。然而,complexType 'DataType‘允许我向任何元素(包括这种类型)中添加零或多个元素,在这种情况下,元素名为'Data’。

当发出包含“数据”元素的元素“ExtendedData”时,“DataExtension”是如何表示自己的?

代码语言:javascript
复制
<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/关于KML2.2的工程报告,但没有结果。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-05-23 22:22:06

您可以使用substitutionGroup of DataExtension作为具有自定义数据元素的KML的扩展。

下面是一个简单的例子。扩展的示例可能会使用complexType作为扩展元素,并根据需要使用它自己的自定义属性和/或元素。

简单示例模式: ext.xsd

代码语言:javascript
复制
<?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:

代码语言:javascript
复制
<?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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/23838517

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档