* Allen (1983)

[17] [[論文]]:

[REFS[
- [16] [CITE[Maintaining Knowledge about Temporal Intervals]],
[[James F. Alien]],
[CITE[COMMUNICATION OF ACM]], 26(11) pp.832-843, [TIME[Nov. 1983][1983-11]]
]REFS]

[18] 解説:

[REFS[
- 
[19] [CITE@en[Allen's Interval Algebra]] ([[Thomas A. Alspaugh]]著, [TIME[2019-05-06 05:45:23 +09:00]]) <https://www.ics.uci.edu/~alspaugh/cls/shr/allen.html>
- [20] [CITE@en[Allen's interval algebra - Wikipedia]] ([TIME[2019-06-06 20:17:32 +09:00]]) <https://en.wikipedia.org/wiki/Allen%27s_interval_algebra>
]REFS]

* [CODE[TM_Order]]

[1] 
[DFN[[CODE[TM_Order]]]]
は、
[CODE[TM_Primitive]] が[[利用][«use»]]する[[インターフェイス]]です。
[SRC[>>2]]

** 仕様書

[REFS[
- [2] [[JIS X 7108:2004]]
]REFS]

** 操作

[3] 
[CODE[TM_Order]] は唯一操作 [DFN[[CODE[relativePosition]]]]
を定義しています。 [SRC[>>2 5.2.3.4]]

[4] 
[CODE[relativePosition]] は、当該オブジェクト [VAR[A]] と引数で与えられたオブジェクト
[VAR[B]] の
2つの [CODE[TM_Primitive]] について、 [CODE[TM_RelativePosition]]
を返すものです。
[SRC[>>2 5.2,3,4]]

[5] 
[CODE[TM_RelativePosition]] は、 Allen (1983) [SRC[>>16]]
の13種類の時間関係の分類に基づく列挙データ型です。
[SRC[>>2 5.2.3.5]]

[6] 
返す値は次のように決定しなければなりません。

[FIG(steps)[
= [7] [VAR[A]] と [VAR[B]] が [CODE[TM_Instant]] の場合、
次の条件を満たす値を返します。
[SRC[>>2 5.2.3.5]]
,* 条件 ,* 値
, [VAR[A]] の [F[position]] [[<]] [VAR[B]] の [F[position]] , Before
, [VAR[A]] の [F[position]] [[=]] [VAR[B]] の [F[position]] , Equals
, [VAR[A]] の [F[position]] [[>]] [VAR[B]] の [F[position]] , After
= [8] [VAR[A]] が [CODE[TM_Period]] で [VAR[B]] が [CODE[TM_Instant]] の場合、
次の条件を満たす値を返します。
[SRC[>>2 5.2.3.5]]
,* 条件 ,* 値
, [VAR[A]] の [F[end]] の [F[position]] [[<]] [VAR[B]] の [F[position]] , Before
, [VAR[A]] の [F[end]] の [F[position]] [[=]] [VAR[B]] の [F[position]] , EndedBy
, [VAR[A]] の [F[begin]] の [F[position]] [[<]] [VAR[B]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[>]] [VAR[B]] の [F[position]] , Contains
, [VAR[A]] の [F[begin]] の [F[position]] [[=]] [VAR[B]] の [F[position]] , BegunBy
, [VAR[A]] の [F[begin]] の [F[position]] [[>]] [VAR[B]] の [F[position]] , After
= [9] [VAR[A]] が [CODE[TM_Instant]] で [VAR[B]] が [CODE[TM_Period]] の場合、
次の条件を満たす値を返します。
[SRC[>>2 5.2.3.5]]
,* 条件 ,* 値
, [VAR[A]] の [F[position]] [[<]] [VAR[B]] の [F[begin]] の [F[position]] , Before
, [VAR[A]] の [F[position]] [[=]] [VAR[B]] の [F[begin]] の [F[position]] , Begins
, [VAR[A]] の [F[position]] [[>]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[position]] [[<]] [VAR[B]] の [F[end]] の [F[position]] , During
, [VAR[A]] の [F[position]] [[=]] [VAR[B]] の [F[end]] の [F[position]] , BegunBy
, [VAR[A]] の [F[position]] [[>]] [VAR[B]] の [F[end]] の [F[position]] , After
= [10] [VAR[A]] と [VAR[B]] が [CODE[TM_Period]] の場合、
次の条件を満たす値を返します。
[SRC[>>2 5.2.3.5]]
,* 条件 ,* 値
, [VAR[A]] の [F[end]] の [F[position]] [[<]] [VAR[B]] の [F[begin]] の [F[position]] , Before
, [VAR[A]] の [F[end]] の [F[position]] [[=]] [VAR[B]] の [F[begin]] の [F[position]] , Meets
, [VAR[A]] の [F[begin]] の [F[position]] [[<]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[>]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[<]] [VAR[B]] の [F[end]] の [F[position]] , Overlaps
, [VAR[A]] の [VAR[begin]] の [F[position]] [[=]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[<]] [VAR[B]] の [F[end]] の [F[position]] , Begins
, [VAR[A]] の [F[begin]] の [F[position]] [[=]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[>]] [VAR[B]] の [F[end]] の [F[position]], BegunBy
, [VAR[A]] の [F[begin]] の [F[position]] [[>]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[<]] [VAR[B]] の [F[end]] の [F[position]], During
, [VAR[A]] の [F[begin]] の [F[position]] [[<]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[>]] [VAR[B]] の [F[end]] の [F[position]], Contains
, [VAR[A]] の [F[begin]] の [F[position]] [[=]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[=]] [VAR[B]] の [F[end]] の [F[position]], Equals
, [VAR[A]] の [F[begin]] の [F[position]] [[>]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[begin]] の [F[position]] [[<]] [VAR[B]] の [F[end]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[>]] [VAR[B]] の [F[end]] の [F[position]], OverlappedBy
, [VAR[A]] の [F[begin]] の [F[position]] [[>]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[=]] [VAR[B]] の [F[end]] の [F[position]], Ends
, [VAR[A]] の [F[begin]] の [F[position]] [[<]] [VAR[B]] の [F[begin]] の [F[position]] かつ [VAR[A]] の [F[end]] の [F[position]] [[=]] [VAR[B]] の [F[end]] の [F[position]], EndedBy
, [VAR[A]] の [F[begin]] の [F[position]] [[=]] [VAR[B]] の [F[end]] の [F[position]], MetBy
, [VAR[A]] の [F[begin]] の [F[position]] [[>]] [VAR[B]] の [F[end]] の [F[position]], After
= [12] [VAR[A]] と [VAR[B]] が [CODE[TM_TopologicalPrimitive]] の場合、
[SRC[>>2 5.2.4.7]]
== [13] [VAR[A]] と [VAR[B]] が同じ [CODE[TM_TopologicalComplex]] に含まれない場合、
[[例外]]を[[投げ]]てここで停止します。
== [14] それ以外の場合、
次の条件を満たす値を返します。
,* 条件 ,* 値
,[VAR[A]] は [VAR[B]] より前にあって、 Initiation も Termination もない , Before
,[VAR[A]] と [VAR[B]] はどちらも [CODE[TM_Edge]] で、 [CODE[TM_Node]] [VAR[C]] があって [VAR[C]] の [F[previousEdge]] が [VAR[A]]、 [F[nextEdge]] が [VAR[B]] , Meets
,[VAR[A]] は [CODE[TM_Node]]、[VAR[B]] は [CODE[TM_Edge]] で、 [VAR[A]] の [F[nextEdge]] が [VAR[B]] , Begins
,[VAR[A]] は [CODE[TM_Edge]]、[VAR[B]] は [CODE[TM_Node]] で、 [VAR[A]] の [F[start][TM_Edge]] が [VAR[B]] , BegunBy
,[VAR[A]] と [VAR[B]] は同一 , Equals
,[VAR[A]] は [CODE[TM_Node]]、[VAR[B]] は [CODE[TM_Edge]] で、 [VAR[A]] の [F[previousEdge]] が [VAR[B]] , Ends
,[VAR[A]] は [CODE[TM_Edge]]、[VAR[B]] は [CODE[TM_Node]] で、 [VAR[A]] の [F[end][TM_Edge]] が [VAR[B]] , EndedBy
,[VAR[A]] と [VAR[B]] はどちらも [CODE[TM_Edge]] で、 [CODE[TM_Node]] [VAR[C]] があって [VAR[C]] の [F[nextEdge]] が [VAR[A]]、 [F[previousEdge]] が [VAR[B]] , MetBy
,[VAR[A]] は [VAR[B]] より後にあって、 Initiation も Termination もない , After

]FIG]

[11] ただし、いずれかの [CODE[TM_Position]] が[[不定]]の場合、
[[例外]]を[[投げ]]なければなりません。
[SRC[>>2 5.2.3.5]]

[15] 
[CODE[TM_TopologicalComplex]]
が線形であるなど適切な順序で定められていないと適当な比較結果が得られません。

* OWL-Time

[22] [[OWL-Time]] の[[語彙]]は Allen の理論を基礎にした [SRC[>>21]] とされています。

[25] [CODE[:TemporalEntity]] の[[特性]]として
[DFN[[CODE[:before][time:before]]]],
[DFN[[CODE[:after][time:after]]]]
があります。 [SRC[>>24]]

[27] [CODE[:Interval]] の[[特性]]で値が [CODE[:Instant]]
の
[DFN[[CODE[:inside][time:inside]]]]
があります。
[SRC[>>26]]


[29] 
[CODE[:ProperInterval]]
の[[特性]]に
[DFN[[CODE[:intervalAfter]]]],
[DFN[[CODE[:intervalBefore]]]],
[DFN[[CODE[:intervalContains]]]],
[DFN[[CODE[:intervalDuring]]]],
[DFN[[CODE[:intervalEquals]]]],
[DFN[[CODE[:intervalFinishedBy]]]],
[DFN[[CODE[:intervalFinishes]]]],
[DFN[[CODE[:intervalMeets]]]],
[DFN[[CODE[:intervalMetBy]]]],
[DFN[[CODE[:intervalOverlappedBy]]]],
[DFN[[CODE[:intervalOverlaps]]]],
[DFN[[CODE[:intervalStartedBy]]]],
[DFN[[CODE[:intervalStarts]]]]
があります。
During, Starts, Finishes の[[和集合]]にあたる
[DFN[[CODE[:intervalIn]]]]、
Before, After の[[和集合]]にあたる
[DFN[[CODE[:intervalDisjoint]]]]
が追加されています。
[SRC[>>28]]



[REFS[
- [21] [CITE@en[Time Ontology in OWL]] ([TIME[2019-06-05 22:23:30 +09:00]]) <https://w3c.github.io/sdw/time/#topology>
- [23] [CITE@en[Time Ontology in OWL]] ([TIME[2019-06-05 22:23:30 +09:00]]) <https://w3c.github.io/sdw/time/#proper-interval>
- [24] [CITE@en[Time Ontology in OWL]] ([TIME[2019-06-05 22:23:30 +09:00]]) <https://w3c.github.io/sdw/time/#after>
- [26] [CITE@en[Time Ontology in OWL]] ([TIME[2019-06-05 22:23:30 +09:00]]) <https://w3c.github.io/sdw/time/#has-time-instant-inside>
- [28] [CITE@en[Time Ontology in OWL]] ([TIME[2019-06-05 22:23:30 +09:00]]) <https://w3c.github.io/sdw/time/#interval-after>
]REFS]

* メモ


[30] [CITE@en[HuTime Web API - Calendar Calculation]], [TIME[2023-02-17T15:28:27.000Z]] <http://ap.hutime.org/cal/#chapter3-5>