TimeML / ISO-TimeML
Overview
TimeML is the ISO standard markup language for temporal and event expressions in natural language text. It provides four main tag types (TIMEX3, EVENT, SIGNAL, LINK) for annotating temporal expressions, events with temporal attributes, temporal signals/connectives, and temporal/aspectual/subordination relations. TimeBank is the primary annotated corpus.
Layers fully subsumes TimeML through three mechanisms:
- Structured temporal annotations —
temporalExpression,temporalEntity, andtemporalModifierinpub.layers.defscapture all TIMEX3 attributes - Annotation subkinds —
temporal-expression,temporal-signal,situation-mentiondiscriminate TimeML tag types - Graph edges — Allen's 13 interval relations plus aspectual relations as
graphEdge.edgeTypevalues capture all TLINK and ALINK relations
Type-by-Type Mapping
Temporal Expressions (TIMEX3)
| TimeML Attribute | Layers Equivalent | Notes |
|---|---|---|
TIMEX3 tag | annotation with subkind="temporal-expression" + temporal field | The temporal field holds a pub.layers.defs#temporalExpression |
tid | annotation.uuid | Unique identifier |
type (DATE, TIME, DURATION, SET) | temporalExpression.type | DATE to date, TIME to time, DURATION to duration, SET to set. Layers adds interval and relative |
value | temporalEntity fields | ISO 8601 values decomposed: dates/times to instant, intervals to intervalStart/intervalEnd, durations to duration |
mod (APPROX, START, MID, END, BEFORE, AFTER, ON_OR_BEFORE, ON_OR_AFTER, LESS_THAN, MORE_THAN) | temporalModifier.mod | Direct kebab-case mapping: APPROX to approximate, ON_OR_BEFORE to on-or-before, etc. |
anchorTimeID | temporalExpression.anchorRef | objectRef pointing to another temporal annotation's UUID |
temporalFunction | Presence of temporalExpression.anchorRef | If anchorRef is populated, the value is computed relative to the anchor |
functionInDocument (CREATION_TIME, PUBLICATION_TIME, EXPIRATION_TIME, MODIFICATION_TIME, RELEASE_TIME, RECEPTION_TIME, NONE) | temporalExpression.function | Direct kebab-case mapping |
beginPoint / endPoint | temporalEntity.intervalStart / intervalEnd | Interval bounds |
quant / freq (for SET) | temporalEntity.recurrence + temporalEntity.features | Recurrence pattern as ISO 8601 repeating interval; quantifiers in features |
Events (EVENT)
| TimeML Attribute | Layers Equivalent | Notes |
|---|---|---|
EVENT tag | annotation with subkind="situation-mention" | Events are situation mentions in Layers |
eid | annotation.uuid | Unique identifier |
class (OCCURRENCE, STATE, REPORTING, PERCEPTION, ASPECTUAL, I_ACTION, I_STATE) | annotation.label | The primary label for the situation mention |
tense | annotation.features key tense | Values: PAST, PRESENT, FUTURE, INFINITIVE, PRESPART, PASTPART, NONE |
aspect | annotation.features key aspect | Values: PROGRESSIVE, PERFECTIVE, PERFECTIVE_PROGRESSIVE, NONE |
polarity | annotation.features key polarity | Values: POS, NEG |
modality | annotation.features key modality | Free text modal expression |
pos | annotation.features key pos | Part of speech |
Signals (SIGNAL)
| TimeML Attribute | Layers Equivalent | Notes |
|---|---|---|
SIGNAL tag | annotation with subkind="temporal-signal" | Temporal connectives and prepositions ("before", "during", "since") |
sid | annotation.uuid | Unique identifier |
| Text content | annotation.text | The signal text |
Temporal Links (TLINK)
| TimeML Attribute | Layers Equivalent | Notes |
|---|---|---|
TLINK | pub.layers.graph#graphEdge | A directed temporal relation between two annotations |
lid | graphEdge record rkey | Unique identifier |
relType | graphEdge.edgeType | See relation mapping below |
timeID / eventInstanceID (source) | graphEdge.source | objectRef to source annotation |
relatedToTime / relatedToEventInstance (target) | graphEdge.target | objectRef to target annotation |
signalID | graphEdge.label or graphEdge.properties | Reference to the signal annotation |
Relation mapping:
| TimeML relType | Layers edgeType |
|---|---|
BEFORE | before |
AFTER | after |
IBEFORE (immediately before) | meets |
IAFTER (immediately after) | met-by |
INCLUDES | contains |
IS_INCLUDED | during |
BEGINS | starts |
BEGUN_BY | started-by |
ENDS | finishes |
ENDED_BY | finished-by |
SIMULTANEOUS | simultaneous |
IDENTITY | equals |
DURING | during |
DURING_INV | contains |
OVERLAP | overlaps |
OVERLAPPED_BY | overlapped-by |
Aspectual Links (ALINK)
| TimeML Attribute | Layers Equivalent | Notes |
|---|---|---|
ALINK | pub.layers.graph#graphEdge | Aspectual relation between events |
relType | graphEdge.edgeType | INITIATES to initiates, CULMINATES to culminates, TERMINATES to terminates, CONTINUES to continues, REINITIATES to reinitiates |
eventInstanceID | graphEdge.source | Source event |
relatedToEventInstance | graphEdge.target | Target event |
signalID | graphEdge.label or graphEdge.properties | Signal reference |
Subordination Links (SLINK)
| TimeML Attribute | Layers Equivalent | Notes |
|---|---|---|
SLINK | pub.layers.graph#graphEdge with edgeType="discourse" | Subordination is a discourse relation |
relType (MODAL, EVIDENTIAL, NEG_EVIDENTIAL, FACTIVE, COUNTER_FACTIVE, CONDITIONAL) | graphEdge.label | The specific subordination type as the edge label |
eventInstanceID | graphEdge.source | Subordinating event |
subordinatedEventInstance | graphEdge.target | Subordinated event |
Conversion Notes
A TimeML-annotated document can be converted to Layers records as follows:
- Create a
pub.layers.expressionrecord withkind="document"from the source text - For each
TIMEX3, create an annotation in anannotationLayerwithkind="span",subkind="temporal-expression",formalism="timeml". Populate thetemporalfield with atemporalExpressioncontaining the normalized value, modifier, anchor, and function - For each
EVENT, create an annotation in anannotationLayerwithkind="span",subkind="situation-mention",formalism="timeml". Storeclassinlabel;tense,aspect,polarity,modalityinfeatures - For each
SIGNAL, create an annotation in anannotationLayerwithkind="span",subkind="temporal-signal",formalism="timeml" - For each
TLINK, create agraphEdgewith the mapped Allen relation asedgeType - For each
ALINK, create agraphEdgewith the mapped aspectual relation asedgeType - For each
SLINK, create agraphEdgewithedgeType="discourse"and the subordination type aslabel
All TimeML IDs (tid, eid, sid, lid) map to Layers UUIDs. Cross-references use objectRef with localId (same record) or recordRef + objectId (cross-record).