在GML3中已经可以表达时态信息。GML3中的时间模式对GML的核心元素进行了扩展,使其包括了可以对地理数据的时间特征进行描述的元素。其目的是描述和定义构成一门语言的结构,即提供一种用来描述一个动态的、基于要素的时间模式的历史的方法,用XML模式或一个要素集合的生命周期来表达这些结构。基本的时空模型致力与调节要素层和属性层的时间戳,并且支持对移动目标的跟踪。
时态模式由temporal.xsd,temporalComplexes.xsd两个模式文档组成,它们通过<include>元素引人了复合单位模式units.xsd中的定义和声明。
GML时态模式包括描述几何和拓扑、时态参考系统和地理数据时态特征的组件。表示的模型构成了概念模式的专用标准。基本的时空模型致力于提供要素层(feature-level)和属性层(attribute-level)的时间戳(time stamping),并且支持跟踪移动目标。
度量时间(Time)有两种类型的尺度:间隔和次序。间隔尺度为测量时间的持续性提供了基础;次序尺度提供了时间的相对位置信息(例如,一个地层次序或地质时间尺度)。
其它两个与描述时态对象有关的ISO标准是:ISO 8601,将时刻(time instants)和时段(time periods)描述成具有特殊结构和标点的文本串的编码。ISO 11404,详细描述了时距(time intervals),作为一种独立于语言的数据类型的一般讨论的一部分。
时态模式由两个相关的主题组成:三个模式文档提供了表示时刻、时段、时态拓扑和参考系统的基本元素;一个更为专门化的用于表示动态要素的模式文档组件。下图是GML中时态模式的层次结构。
<!--[if mso & !supportInlineShapes & supportFields]><span lang=EN-US><span style='mso-element:field-begin;mso-field-lock:yes'></span><span style='mso-spacerun:yes'> </span>SHAPE<span style='mso-spacerun:yes'> </span>\* MERGEFORMAT <span style='mso-element:field-separator'></span></span><![endif]--><!--[if gte vml 1]><v:group id="_x0000_s1026" editas="canvas" style='width:353.2pt;height:201.75pt;mso-position-horizontal-relative:char; mso-position-vertical-relative:line' coordorigin="1613,1211" coordsize="7200,4250"> <o:lock v:ext="edit" aspectratio="t" /> <v:shapetype id="_x0000_t75" coordsize="21600,21600" o:spt="75" o:preferrelative="t" path="m@4@5l@4@11@9@11@9@5xe" filled="f" stroked="f"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="if lineDrawn pixelLineWidth 0" /> <v:f eqn="sum @0 1 0" /> <v:f eqn="sum 0 0 @1" /> <v:f eqn="prod @2 1 2" /> <v:f eqn="prod @3 21600 pixelWidth" /> <v:f eqn="prod @3 21600 pixelHeight" /> <v:f eqn="sum @0 0 1" /> <v:f eqn="prod @6 1 2" /> <v:f eqn="prod @7 21600 pixelWidth" /> <v:f eqn="sum @8 21600 0" /> <v:f eqn="prod @7 21600 pixelHeight" /> <v:f eqn="sum @10 21600 0" /> </v:formulas> <v:path o:extrusionok="f" gradientshapeok="t" o:connecttype="rect" /> <o:lock v:ext="edit" aspectratio="t" /> </v:shapetype><v:shape id="_x0000_s1027" type="#_x0000_t75" style='position:absolute; left:1613;top:1211;width:7200;height:4250' o:preferrelative="f"> <v:fill o:detectmouseclick="t" /> <v:path o:extrusionok="t" o:connecttype="none" /> <o:lock v:ext="edit" text="t" /> </v:shape><v:rect id="_x0000_s1028" style='position:absolute;left:4748;top:1211; width:930;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1028' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><i style='mso-bidi-font-style:normal'><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size:9.0pt'>_GML<o:p></o:p></span></i></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:shapetype id="_x0000_t5" coordsize="21600,21600" o:spt="5" adj="10800" path="m@0,l,21600r21600,xe"> <v:stroke joinstyle="miter" /> <v:formulas> <v:f eqn="val #0" /> <v:f eqn="prod #0 1 2" /> <v:f eqn="sum @1 10800 0" /> </v:formulas> <v:path gradientshapeok="t" o:connecttype="custom" o:connectlocs="@0,0;@1,10800;0,21600;10800,21600;21600,21600;@2,10800" textboxrect="0,10800,10800,18000;5400,10800,16200,18000;10800,10800,21600,18000;0,7200,7200,21600;7200,7200,14400,21600;14400,7200,21600,21600" /> <v:handles> <v:h position="#0,topLeft" xrange="0,21600" /> </v:handles> </v:shapetype><v:shape id="_x0000_s1029" type="#_x0000_t5" style='position:absolute; left:5097;top:1721;width:232;height:170' /> <v:line id="_x0000_s1030" style='position:absolute' from="5213,1891" to="5213,2061" /> <v:line id="_x0000_s1031" style='position:absolute' from="2774,2061" to="7652,2062" /> <v:rect id="_x0000_s1032" style='position:absolute;left:4168;top:2231;width:1974; height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1032' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeReferenceSystem<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1033" style='position:absolute;left:2194;top:2231; width:1277;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1033' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><i style='mso-bidi-font-style:normal'><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size:9.0pt'>_TimeObject<o:p></o:p></span></i></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1034" style='position:absolute;left:6955;top:2231; width:1510;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1034' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeOrdinalEra<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:line id="_x0000_s1035" style='position:absolute' from="2774,2061" to="2774,2231" /> <v:line id="_x0000_s1036" style='position:absolute' from="5213,2061" to="5213,2231" /> <v:line id="_x0000_s1037" style='position:absolute' from="7652,2061" to="7652,2231" /> <v:shape id="_x0000_s1038" type="#_x0000_t5" style='position:absolute;left:2658; top:2741;width:232;height:170' /> <v:line id="_x0000_s1039" style='position:absolute' from="2774,2911" to="2775,3081" /> <v:shape id="_x0000_s1040" type="#_x0000_t5" style='position:absolute;left:5097; top:2741;width:232;height:170' /> <v:line id="_x0000_s1041" style='position:absolute' from="5213,2911" to="5215,3081" /> <v:line id="_x0000_s1042" style='position:absolute' from="4748,3081" to="7419,3081" /> <v:rect id="_x0000_s1043" style='position:absolute;left:4052;top:3251;width:2438; height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1043' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeOrdinalReferenceSystem<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1044" style='position:absolute;left:6723;top:3251; width:1974;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1044' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeCoordinateSystem<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:line id="_x0000_s1045" style='position:absolute' from="4748,3081" to="4748,3251" /> <v:line id="_x0000_s1046" style='position:absolute' from="7419,3081" to="7419,3251" /> <v:rect id="_x0000_s1047" style='position:absolute;left:2078;top:3081;width:1393; height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1047' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><i style='mso-bidi-font-style:normal'><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size:9.0pt'>_TimePrimitive<o:p></o:p></span></i></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:shape id="_x0000_s1048" type="#_x0000_t5" style='position:absolute; left:2658;top:3591;width:232;height:170' /> <v:line id="_x0000_s1049" style='position:absolute' from="2774,3761" to="2776,3931" /> <v:line id="_x0000_s1050" style='position:absolute' from="2310,3931" to="3587,3932" /> <v:rect id="_x0000_s1051" style='position:absolute;left:3007;top:4101;width:1161; height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1051' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeInstant<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1052" style='position:absolute;left:1729;top:4101; width:1161;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1052' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimePeriod<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:line id="_x0000_s1053" style='position:absolute' from="2310,3931" to="2310,4101" /> <v:line id="_x0000_s1054" style='position:absolute' from="3587,3931" to="3587,4101" /> <v:rect id="_x0000_s1055" style='position:absolute;left:4748;top:3931;width:1394; height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1055' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeDuration<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1056" style='position:absolute;left:6839;top:3931; width:1626;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1056' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TemporalPosition<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:shape id="_x0000_s1057" type="#_x0000_t5" style='position:absolute; left:5329;top:4441;width:232;height:170' /> <v:line id="_x0000_s1058" style='position:absolute' from="5445,4611" to="5447,4781" /> <v:shape id="_x0000_s1059" type="#_x0000_t5" style='position:absolute;left:7536; top:4441;width:232;height:170' /> <v:line id="_x0000_s1060" style='position:absolute' from="7653,4611" to="7654,4781" /> <v:rect id="_x0000_s1061" style='position:absolute;left:4632;top:4781;width:1742; height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1061' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeIntervalLength<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1062" style='position:absolute;left:7071;top:4781; width:1277;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1062' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimePosition<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><v:rect id="_x0000_s1063" style='position:absolute;left:1961;top:4781; width:2091;height:510'> <v:textbox style='mso-next-textbox:#_x0000_s1063' inset="6.84pt,3.42pt,6.84pt,3.42pt"> <![if !mso]> <table cellpadding=0 cellspacing=0 width="100%"> <tr> <td><![endif]> <div> <p class=MsoNormal><span lang=EN-US style='font-size:8.5pt;mso-bidi-font-size: 9.0pt'>TimeIndeterminateValue<o:p></o:p></span></p> </div> <![if !mso]></td> </tr> </table> <![endif]></v:textbox> </v:rect><w:wrap type="none" /> <w:anchorlock /> </v:group><![endif]--><!--[if mso & !supportInlineShapes & supportFields]><span lang=EN-US><v:shape id="_x0000_i1025" type="#_x0000_t75" style='width:353.2pt; height:201.75pt'> <v:imagedata croptop="-65520f" cropbottom="65520f" /> </v:shape><span style='mso-element:field-end'></span></span><![endif]-->
上图对 GML 中的时态模式进行了归纳。 TimeObject 是一个抽象超类,它映射到模式中的 AbstractGMLType 定义。抽象子类 TimePrimitive 用来表示时间几何和拓扑对象,但当前只定义了几何单元类型,用以提供时间位置的信息。时刻和时段时间维中的两个几何单元, TimeInstant 和 TimePeriod 是相应的子类,这些类分别被映射到 TimeInstantType 和 TimePeriodType 模式的定义。时刻是一个 0 维的表示时间位置的基本几何(对应于空间中的点)。一个时段是一个一维的表示时间范围的基本几何(它相应于空间中的曲线);它是一个起位置和终位置(即时刻)的开区间,并具有长度(即持续时间)。类 TimeReferenceSystem ,和其两个子类用来定义时间参考系。 TimeOrdinalEra 用来定义与时间参考系相对应的模式组件。 TimeDuration 类是描述时间长度的基本类型。