cpfaff / ease

EASE (Essential Annotation Schema for Ecology)
0 stars 2 forks source link

Time (Make decision about reuse or argue) #11

Closed cpfaff closed 8 years ago

cpfaff commented 8 years ago

We use:

<xs:element name="temporalCoverage" minOccurs="1" maxOccurs="1">
    <xs:complexType>
        <xs:choice>
            <xs:sequence>
                <xs:element name="dateTimePoint" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:choice>
                            <xs:sequence>
                                <xs:element name="datePoint" type="xs:date" minOccurs="1" maxOccurs="1">
                                </xs:element>
                                <xs:element name="timePoint" type="xs:time" minOccurs="1" maxOccurs="1">
                                </xs:element>
                            </xs:sequence>
                            <xs:sequence>
                                <xs:element name="dateTimePoint" type="xs:dateTime" minOccurs="1" maxOccurs="1">
                                </xs:element>
                            </xs:sequence>
                        </xs:choice>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
            <xs:sequence>
                <xs:element name="dateTimeRange" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                            <xs:element name="dateTimeItem" minOccurs="1" maxOccurs="unbounded">
                                <xs:complexType>
                                    <xs:choice>
                                        <xs:sequence>
                                            <xs:element name="dateStart" type="xs:date" minOccurs="1" maxOccurs="1">
                                            </xs:element>
                                            <xs:element name="timeStart" type="xs:time" minOccurs="1" maxOccurs="1">
                                            </xs:element>
                                            <xs:element name="dateEnd" type="xs:date" minOccurs="1" maxOccurs="1">
                                            </xs:element>
                                            <xs:element name="timeEnd" type="xs:time" minOccurs="1" maxOccurs="1">
                                            </xs:element>
                                        </xs:sequence>
                                        <xs:sequence>
                                            <xs:element name="dateTimeStart" type="xs:dateTime" minOccurs="1" maxOccurs="1">
                                            </xs:element>
                                            <xs:element name="dateTimeEnd" type="xs:dateTime" minOccurs="1" maxOccurs="1">
                                            </xs:element>
                                        </xs:sequence>
                                    </xs:choice>
                                </xs:complexType>
                            </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                </xs:element>
            </xs:sequence>
        </xs:choice>
    </xs:complexType>
</xs:element>

EML uses:

<xs:complexType name="TemporalCoverage">
  <xs:choice>
    <xs:choice>
      <xs:element name="singleDateTime" type="SingleDateTimeType" maxOccurs="unbounded">
      </xs:element>
      <xs:element name="rangeOfDates">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="beginDate" type="SingleDateTimeType">
            </xs:element>
            <xs:element name="endDate" type="SingleDateTimeType">
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:choice>
  </xs:choice>
</xs:complexType>

and that for singleDateTime

<xs:complexType name="SingleDateTimeType">
  <xs:choice>
    <xs:sequence>
      <xs:element name="calendarDate" type="res:yearDate">
      </xs:element>
      <xs:element name="time" type="xs:time" minOccurs="0">
      </xs:element>
    </xs:sequence>
    <xs:element name="alternativeTimeScale">
      <xs:complexType>
        <xs:sequence>
          <xs:element name="timeScaleName" type="res:NonEmptyStringType">
          </xs:element>
          <xs:element name="timeScaleAgeEstimate" type="res:NonEmptyStringType">
          </xs:element>
          <xs:element name="timeScaleAgeUncertainty" type="res:NonEmptyStringType" minOccurs="0">
          </xs:element>
          <xs:element name="timeScaleAgeExplanation" type="res:NonEmptyStringType" minOccurs="0">
          </xs:element>
          <xs:element name="timeScaleCitation" type="cit:CitationType" minOccurs="0" maxOccurs="unbounded">
          </xs:element>
        </xs:sequence>
      </xs:complexType>
    </xs:element>
  </xs:choice>
</xs:complexType>

ABCD uses for gathering events:

<xs:element name="DateTime" type="DateTime" minOccurs="0">
  <xs:annotation>
    <xs:documentation>Date(s) and time(s) of the collecting or observation event</xs:documentation>
  </xs:annotation>
</xs:element>

DwC uses:

<xs:element ref="dwc:eventDate" minOccurs="0"/>
<xs:element ref="dwc:eventTime" minOccurs="0"/>
<xs:element ref="dwc:startDayOfYear" minOccurs="0"/>
<xs:element ref="dwc:endDayOfYear" minOccurs="0"/>
<xselement ref="dwc:year" minOccurs="0"/>
<xselement ref="dwc:month" minOccurs="0"/>
<xselement ref="dwc:day" minOccurs="0"/>
<xselement ref="dwc:verbatimEventDate" minOccurs="0"/>
cpfaff commented 8 years ago

We are very close with our temporal part to what EML does in the temporal coverage. However we are a bit more flexible in terms of how we allow to store the date and the time. We provide a choice if the date and time is given in a single or separate fields for a single date and time as well as for the range in time. We are also a bit more flexible in defining ranges in time. EML allows one continuous range while we allow multiple ranges that can also be disconnected from each other.

cpfaff commented 8 years ago

SingleDateTime as well as RangeOfDates in EML are both of the type SingleDateTimeType which defines a choice between two options: a calendar date with a time, or a geologic age while the calendar date and time are separate fields and both require to be formatted according to ISO 8601. The geological age is a separate part in our schema and not included in the single or range of dates.

cpfaff commented 8 years ago

Decision and Todo:

Remove redundant time parts from cas and only allow to write one type of date and time format. Keep date and time information in separate fields that have to adhere to ISO 8601 standard. This brings us closer to EML. However we do not allow geological times in that fields as EML does and keep them separately for more clarity.

cpfaff commented 8 years ago

There is another aspect of time as well (Time Scales)

We do:

<xs:element name="temporalNameRange" minOccurs="1" maxOccurs="1">
    <xs:complexType>
    <xs:sequence>
        <xs:element name="temporalNameItem" minOccurs="1" maxOccurs="unbounded">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="temporalName" type="temporalNameType" minOccurs="1" maxOccurs="1">
            </xs:element>   
            <xs:element name="temporalStandard" type="temporalStandardType" minOccurs="1" maxOccurs="1">
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
    </xs:sequence>
    </xs:complexType>
</xs:element>

EML does:

Well they allow their single time and range of times to be either a time or an alternative time scale. This is the place where for example geologic times can be given.

ABCD does:

<xs:complexType name="Stratigraphy">
    <xs:annotation>
    <xs:documentation>Elements expressing stratigraphy at the gathering site.</xs:documentation>
    </xs:annotation>
    <xs:sequence>
    <xs:element name="ChronostratigraphicTerms" minOccurs="0">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="ChronostratigraphicTerm" type="LookupL" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
                <xs:documentation>Chronostratigraphic dating term e.g. Jurassic Period</xs:documentation>
            </xs:annotation>
            </xs:element>
        </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="BiostratigraphicTerms" minOccurs="0">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="BiostratigraphicTerm" type="LookupL" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
                <xs:documentation>biostratigraphic zonation term e.g. Psiloceras planorbis zone</xs:documentation>
            </xs:annotation>
            </xs:element>
        </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="LithostratigraphicTerms" minOccurs="0">
        <xs:complexType>
        <xs:sequence>
            <xs:element name="LithostratigraphicTerm" type="LookupL" minOccurs="0" maxOccurs="unbounded">
            <xs:annotation>
                <xs:documentation>lithostratigraphic term describing geology e.g. Mercia Mudstone Group</xs:documentation>
            </xs:annotation>
            </xs:element>
        </xs:sequence>
        </xs:complexType>
    </xs:element>
    <xs:element name="StratigraphyText" type="StringL" minOccurs="0">
        <xs:annotation>
        <xs:documentation>Free text field for informal recording of field contents</xs:documentation>
        </xs:annotation>
    </xs:element>
    </xs:sequence>
</xs:complexType>

DwC does:

<xs:element ref="dwc:earliestEonOrLowestEonothem" minOccurs="0"/>
<xs:element ref="dwc:latestEonOrHighestEonothem" minOccurs="0"/>
<xs:element ref="dwc:earliestEraOrLowestErathem" minOccurs="0"/>
<xs:element ref="dwc:latestEraOrHighestErathem" minOccurs="0"/>
<xs:element ref="dwc:earliestPeriodOrLowestSystem" minOccurs="0"/>
<xs:element ref="dwc:latestPeriodOrHighestSystem" minOccurs="0"/>
<xs:element ref="dwc:earliestEpochOrLowestSeries" minOccurs="0"/>
<xs:element ref="dwc:latestEpochOrHighestSeries" minOccurs="0"/>
<xs:element ref="dwc:earliestAgeOrLowestStage" minOccurs="0"/>
<xs:element ref="dwc:latestAgeOrHighestStage" minOccurs="0"/>
<xs:element ref="dwc:lowestBiostratigraphicZone" minOccurs="0"/>
<xs:element ref="dwc:highestBiostratigraphicZone" minOccurs="0"/>
<xs:element ref="dwc:lithostratigraphicTerms" minOccurs="0"/>
<xs:element ref="dwc:group" minOccurs="0"/>
<xs:element ref="dwc:formation" minOccurs="0"/>
<xs:element ref="dwc:member" minOccurs="0"/>
<xs:element ref="dwc:bed" minOccurs="0"/>
cpfaff commented 8 years ago

I think we could go with a combination of all we learn from the other schema. There there is basically two groups of time scales. Method based determination of ages e.g. radioactive determinations. And then there is the geological times scales. However there is two nuances in there where stratigraphy tries to define global units like systems, series, and stages of the International Chronostratigraphic Chart which in turn is the basis for the units like periods, epochs an ages of the International Geological Time Scale (see: http://www.stratigraphy.org/)

cpfaff commented 8 years ago

The recommendation of DCMI for time scales is (start, end, schema, name) where start and end can be whatever you want like for example a date time or any other named time e.g. project specifically specified. The schema fields represents the name of the schema that has been used and the name the name of the time. For example:

start=Cambrian period; scheme=Geological timescale; name=Phanerozoic Eon;

The recommendation is that if in a range one limit is missing then it is assumed to be an open time frame.

cpfaff commented 8 years ago

The link here provides information about the relation between chronostratigraphy and geochronology. This is where the naming of the fields in DwC comes from. It combines related names from both naming schemes in one field plus adding an upper and lower limit in the name . http://www.stratigraphy.org/upload/bak/chron.htm

cpfaff commented 8 years ago

Decisions and todo:

Create a combined solution that uses a generic frame (as recommended by DCMI) that contains a start and an end boundary. We already have the name and the standard.

EichenbergBEF commented 8 years ago

I am strongly in favor of keeping separate entry values for Date/Time. Moreover, I think it would be better to keep the geological timescales in separate categories rather than allwoing to specify both in one single category (e.g. EML). I moreover think that the solutions/connections bprovided by DwC in terms of geological times are very helpful and we should really consider to incorporate these concepts.

cpfaff commented 8 years ago

@EichenbergBEF Right these fields of DwC are helpful but are not as generic as I wish they could be in terms of structure. But maybe this sometimes is just not possible to do this easily as I am currently also trying hard to figure it out myself how to solve it best.

cpfaff commented 8 years ago

First draft:

Times coming from dating methods which result in a statement like 60.000 years ago or something

<datingMethod>
  <datingMethodName>Radiocarbon</datingMethodName>
  <datingMethodNumber>60000</datingMethodNumber>
  <datingMethodUnit>years</datingMethodUnit>
  <datingMethodAccuracy>100 years</datingMethodAccuracy>
</datingMethod>

However this does not involve an upper or lower boundary

cpfaff commented 8 years ago
<temporalNameRange>
   <temporalNameItem>
      <lowerBoundary>
         <temporalName>...</temporalName>
         <temporalType>...</temporalType>
      </lowerBoundary>
      <upperBoundary>
         <temporalName>...</temporalName>
         <temporalType>...</temporalType>
      </upperBoundary>
        ...  
      <temporalName>...</temporalName>
      <temporalType>...</temporalType>
   </temporalNameItem>
</temporalNameRange>
cpfaff commented 8 years ago

A new attempt.

<temporalNameRange>
   <temporalNameLowerBoundary>
      <temporalNameItem>
         <temporalName>...</temporalName> # linked to ChronostratigraphicTerm
      </temporalNameItem>
   </temporalNameLowerBoundary>
   <temporalNameUpperBoundary>
      <temporalNameItem>
      <temporalName>...</temporalName> # linked to ChronostratigraphicTerm
      </temporalNameItem>
   </temporalNameUpperBoundary>
   or
   <temporalNameItem>
      <temporalName>...</temporalName> # linked to ChronostratigraphicTerm
   </temporalNameItem>
</temporalNameRange>
cpfaff commented 8 years ago

Todo: I think we just keep what we have. With our implementation plans we can argue and select two different ways to provide time information. One is as a calender date which either is given as a point and or a range. This has been discussed further above. The other way is to use the international chronostratigraphic chart as a kind of temporal name space for the dataset /see #21). Altough EML and ABCD do it would not specify upper and lower boundaries for the chronostratigraphy terms as they are defined in the standard already to represent ranges in time. However there might be a need to specify* things like for example a dataset covers in terms of time something in between the Eocene and Oligocene which is not yet possible to specify with our schema.