Code Monkey home page Code Monkey logo

ease's People

Contributors

cpfaff avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

ease's Issues

Replace all Ranges with a more generic construct

Currently with ranges a form of list exists that is created all over the schema again and again with just changing its name to represent the current content. dateTimeRange, organismRange.....
This could be done a bit more generic which would prevent repetition of code see the example below.

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <xs:element name="item" type="xs:string"/>
  <xs:attribute name="of" type="listType"/>

  <xs:element name="list">
    <xs:complexType>
      <xs:sequence>
        <xs:element ref="item"/>
      </xs:sequence>
      <xs:attribute ref="listType"/>
    </xs:complexType>
  </xs:element>

  <xs:simpleType name="listType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="organismNames"/>
      <xs:enumeration value="locationNames"/>
    </xs:restriction>
  </xs:simpleType>
</xs:schema>

This then allows to write

<list of="locationNames">
  <item>string</item>
</list>

Link to external vocabularies

The link to external vocabularies (ontologies) is a task that that has been
started already but needs some more work. The concepts need to be linked
to concepts in e.g. CHEBI, ENVO.

Add terms from the chronostratigraphic chart to the vocabulary.

The terms will be used as vocabulary for the temporal name part of the schema.

ChronostratigraphicTerm
   EonOrEonothem
      Panerozoic
      Precambrian
   EraOrErathem
      Cenozoic
      Mesozoic
      Paleozoic
      Proterozoic
      Archean
   PeriodOrSystem
      Quaternary
      Neogene
      Paleogene
      Cretaceous
      Jurrasic
      Triassic
      Permian
      Carboniferous
      Devonian
      Silurian
      Ordovician
      Cambrian
      Neoproterozoic
      Mesoproterozoic
      Paleoproterozoic
      Neoarchean
      Mesoarchean
      Paleoarchean
      Eoarchean
   SeriesOrEpoch
      Upper
      Middle
      Lower
      Series 3
      Series 2
      Holocene
      Pleistocene
      Pilocene
      Miocene
      Oligocene
      Eocene
      Paleocene
      Lopingian
      Guadalupian
      Cisuralian
      Pennsylvanian
      Mississippian
      Pridoli
      Ludlow
      Wenlock
      Llandovery
      Furongian
      Terreneuvian
   AgeOrStage
      Upper
      Middle
      Lower
      Stage 2
      Stage 3 
      Stage 4
      Stage 5
      Stage 10
      Calabrian
      Gelasian
      Piacenzian
      Zanclean
      Messinian
      Tortonian
      Serravallian
      Langhian
      Burdigalian
      Aquitanian
      Chattian
      Rupelian
      Priabonian
      Bartonian
      Lutenian
      Ypresian
      Thanetian
      Selandian
      Danian
      Maastrichtian
      Campanian
      Santonian
      Coniacian
      Turonian
      Cenomanian
      Albian
      Barremian
      Hauterivian
      Valanginian
      Berriasian
      Tithonian
      Kimmeridgian
      Oxfordian
      Callovian
      Bathonian
      Bajocian
      Aalenian
      Toarcian
      Pliensbahian
      Sinemurian
      Hettangian
      Rhaetian
      Norian
      Carnian
      Ladinian
      Anisian
      Olenekain
      Induan
      Changhsingian
      Wuchiapingian
      Capitanian
      Wordian
      Roadian
      Kungurian
      Artinskian
      Sakmarian 
      Asselian
      Gzhelian
      Kasimovian
      Moscovian
      Bashkirian
      Serpukhovian
      Visean
      Tournaisian
      Famennian
      Frasnian
      Givetian
      Eifelian
      Emsian
      Pragian
      Lochkovian
      Ludfordian
      Gorstian
      Homerian
      Scheinwoodian
      Telychian
      Aeronian
      Rhuddanian
      Hirnantian
      Katian
      Sandbian
      Darriwilian
      Dapingian
      Floian
      Tremadocian
      Jiangshanian
      Paibian
      Guzhangian
      Drumian
      Fortunian

Add soil types from WRB

We are currently only using the general classes defined in the WRB for soil types. While this is helpful in general iit does not hurt if we also have more detail in the vocabulary. We had this in the beginning however decided to remove it as we found it to detailed. I do not thing this is a problem as we can keep the general classes as well. So these can be used for annotation or if you know better your can just select the exact soil type.

Refactor type naming

By now most of the types are named with a name plus type in the end. This is sometimes leading to ugly repetitions in the naming (typetype). Refactor the naming to use the same name as the actual field if possible but start with an upper case.

Have a workshop on control factors

Invitation

Hello together

In the process of the final edit of our ecological vocabulary it turned out that we have problems to represent control factors. With control factors we mean all variables or parameters that have been measured or which are controlled for in an experimental setup. One of the biggest problems is that we are talking about a very heterogeneous set of things here. The control factors can comprise simple measures like the DBH or a Height up to complex things like Processes. One thing to mention in that context is that we have processes for example already present in other parts of the vocabulary and adding them in the control factors as well would mean to introduce redundancy that we do not want. Another problem with control factors is the heterogeneity in the naming of factors as there is as far as I know no standard for that. Maybe there is more out there like the collection of Essential Biodiviersity Variables (http://science.sciencemag.org/content/339/6117/277) which could help us formulate our list of factors and agree on names.

What we currently have is a list of control factors that we extracted from the meta data of the Jena Experiment, BEF-China, FUN-Div and the Biodiversity Exploratories. In the workshop we want you to discuss about the list of factors we have and to bring other typical control factors onto the table that are relevant in biodiversity related research. The outcome of the workshop (~2h) will be a structured list of terms to be included in our biodiversity vocabulary.

The doodle for a date you can find here:

Preparation

  • Create a doodle
  • Write the mail
  • Find a room
  • Search for literature (EBV...)

Biome (Make decision about reuse or argue)

Biomes are not explicitly part of any other schema. While the information about the biome might end up in EML somewhere in a coverage description ABCD and DwC both have a biotope defined. This however is not exactly the same representing more or less local representations of global existing biomes. Thus we close this for now.

Convert range to list

Currently helper structures in the xsd schema are ranges and items. Better would be to have lists and items.

Refactor interaction in schema

Currently we have

<is:element name="interactionRange" minOccurs="0" maxOccurs="1">
  <xs:complexType>
    <xs:sequence>
      <xs:element name="interactionItem" minOccurs="1" maxOccurs="unbounded">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="interactionName" type="xs:string" minOccurs="1" maxOccurs="1"/>
        <xs:element name="interactionClass" type="InteractionClass" minOccurs="1" maxOccurs="1"/>
        <xs:element name="interactionPartner" type="xs:string" minOccurs="1" maxOccurs="unbounded"/>
      </xs:sequence>
    </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType> 
</xs:element>

Denormalize the vocabulary part in the schema

As this is user provided input it should resemble the real input not a normalized version. That basically means to convert concepts in the restrictions for fields from a camel case notation to normal space separated.

Implement generic/specific elements

We have the goal to be as generic as possible to allow capturing new things like e.g. location types without being restricted to only a set of predefined types. While this is nice I think we also want some static predefined stuff that is used regularly. We can use the static stuff to base our application upon and the generic fields for learning.

Semantic Annotation of Schema

The annotation can be done using:

<xs:element name="OrderRequest"
      sawsdl:modelReference="http://www.w3.org/2002/ws/sawsdl/spec/ontology/purchaseorder#OrderRequest"
      sawsdl:loweringSchemaMapping="http://www.w3.org/2002/ws/sawsdl/spec/mapping/RDFOnt2Request.xml">

User Evaluation

Users will be invited to evaluate an animated set of mock-ups as well as the vocabulary. The following serves as a collection of questions to be answered by the participants.

Interface:

  • Is the application logically structured?
  • Do we ask for to much or to less information to classify an ecologically related search object.
  • Is there aspects missing that would be important to ask for?
  • Is the information asked for in an appropriate way (sliders, fields, maps) or is there space for improvement.
  • Are the icons meaningful
  • Does the graphical user interface facilitate to provide the meta data

Vocabulary:

  • Is there any important dimensions missing
  • Is the content within the branches of the vocabulary to much/less

@EichenbergBEF Would be good to hear your ideas here as well.

Method (Make decision about reuse or argue)

We do:

<xs:element name="method" minOccurs="1" maxOccurs="1">
    <xs:complexType>
    <xs:sequence>
        <xs:element name="methodologicalCoverage" minOccurs="1" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="methodApproach" type="methodApproachType" minOccurs="1" maxOccurs="1">
            </xs:element>
            <xs:element name="methodRange" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="methodItem" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="methodName" type="xs:string" minOccurs="0" maxOccurs="1">
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="controlFactorRange" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="controlFactorItem" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="controlFactorName" type="factorNameType" minOccurs = "1" maxOccurs = "1">
                        </xs:element>
                        <xs:element name="controlFactorModus" type="factorModus" minOccurs = "1" maxOccurs = "1">
                        </xs:element>
                        <xs:element name="controlFactorDependency" type="controlFactorDependencyType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
    </xs:sequence>
    </xs:complexType>
</xs:element>

ABCD does:

<xs:element type="StringL" name="Method" minOccurs="0">
    <xs:annotation>
        <xs:documentation>The method (including technical means) used to make the collection or observation.</xs:documentation>
    </xs:annotation>
</xs:element>

<xs:element type="String" name="CoordinateMethod" minOccurs="0">
    <xs:annotation>
        <xs:documentation>Coordinates measuring system e.g. GPS, field map reference, inferred map reference</xs:documentation>
    </xs:annotation>
</xs:element>

<xs:element type="String" name="CoordinateErrorMethod" minOccurs="0"/>

DwC does nothing:

EML does:

  <xs:complexType name="MethodsType">
    <xs:sequence maxOccurs="unbounded">
      <xs:element name="methodStep" maxOccurs="unbounded">
        <xs:complexType>
          <xs:complexContent>
            <xs:extension base="ProcedureStepType">
              <xs:sequence>
                <xs:element name="dataSource" type="ds:DatasetType" minOccurs="0" maxOccurs="unbounded">
                </xs:element>
              </xs:sequence>
            </xs:extension>
          </xs:complexContent>
        </xs:complexType>
      </xs:element>
      <xs:element name="sampling" minOccurs="0">
        <xs:complexType>
          <xs:sequence>
            <xs:element name="studyExtent">
              <xs:complexType>
                <xs:choice maxOccurs="unbounded">
                  <xs:element name="coverage" type="cov:Coverage">
                  </xs:element>
                  <xs:element name="description" type="txt:TextType">
                  </xs:element>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element name="samplingDescription" type="txt:TextType">
            </xs:element>
            <xs:element name="spatialSamplingUnits" minOccurs="0">
              <xs:complexType>
                <xs:choice maxOccurs="unbounded">
                  <xs:element name="referencedEntityId">
                  </xs:element>
                  <xs:element name="coverage" type="cov:GeographicCoverage">
                  </xs:element>
                </xs:choice>
              </xs:complexType>
            </xs:element>
            <xs:element name="citation" type="cit:CitationType" minOccurs="0" maxOccurs="unbounded">
            </xs:element>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
      <xs:element name="qualityControl" type="ProcedureStepType" minOccurs="0" maxOccurs="unbounded">
      </xs:element>
    </xs:sequence>
  </xs:complexType>

Refactor for units

There is multiple places where units are used e.g. organisms, locations. These can use the same simple type for restriction.

Move aquatic physiognomy items to zones in spheres

This is necessary as many items rather represent zones or layers. Introduce instead some elements for the aquatic physiognomy. They are coming from: Alberta conservation information management system ecological community tracking list

Add hemisphere to biome in schema

The user interface mock-ups allow to select northern and southern hemisphere latitudinal zones. This is not represented in the schema. So at the moment this is just useless repetition on the graphical side. If we add a hemisphere to the schema (norther, southern) then we can start benefit from that annotation. Based on @EichenbergBEF suggestions on Invision.

Time (Make decision about reuse or argue)

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"/>

Split schema into separate files

As the schema is already a very large file separating the dimensions into separate files and importing them in master file could improve the readability. The master file then would use for example:

<xs:include schemaLocation="biome.xsd"/>

Space (Make decision about reuse or argue)

Lets tackle the coordinate part first.

We do:

<xs:element name="space" minOccurs="1" maxOccurs="1">
    <xs:complexType>
    <xs:sequence>
        <xs:element name="spatialCoverage" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="boundingBox" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="boundingCoordinate" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <!-- it would be a good idea to include gps points or sub bounding boxes in the bounding box as sub category -->
                        <!-- this would cpature granularity and extent in a more numeric way compared to the way we do it in the raster -->
                        <xs:sequence>
                        <xs:element name="northBoundingCoordinate" type="northSouthBoundingCoordinateType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="southBoundingCoordinate" type="northSouthBoundingCoordinateType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="eastBoundingCoordinate" type="eastWestBoundingCoordinateType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="westBoundingCoordinate" type="eastWestBoundingCoordinateType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                    <xs:element name="boundingAltitude" minOccurs="1" maxOccurs="1">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="maxAltitude" type="xs:decimal" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="minAltitude" type="xs:decimal" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="spatialNamespace" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="spatialNameRange" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="spatialNameItem" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="spatialName" type="spatialNameType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="spatialCountryName" type="spatialNameType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="spatialContinentName" type="spatialNameType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="spatialType" type="xs:string" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="spatialRaster" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="spatialExtent" type="spatialExtentType" minOccurs="1" maxOccurs="1">
            </xs:element>
            <xs:element name="spatialResolution" type="spatialExtentType" minOccurs="1" maxOccurs="1">
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
    </xs:sequence>
    </xs:complexType>
</xs:element>

ABCD does:

<xs:element name="SiteCoordinateSets" minOccurs="0">
    <xs:complexType>
    <xs:sequence>
        <xs:element maxOccurs="unbounded" name="SiteCoordinates" minOccurs="0">
        <xs:complexType>
            <xs:sequence>
            <xs:element type="String" name="CoordinateMethod" minOccurs="0">
            </xs:element>
            <xs:element name="CoordinatesUTM" minOccurs="0">
                <xs:complexType>
                <xs:sequence>
                    <xs:element type="String" name="UTMZone" minOccurs="0">
                    </xs:element>
                    <xs:element name="UTMSubzone" minOccurs="0">
                    </xs:element>
                    <xs:element name="UTMNS" minOccurs="0">
                    </xs:element>
                    <xs:element name="UTMZoneFull" minOccurs="0">
                    </xs:element>
                    <xs:element type="String" name="UTMEasting" minOccurs="0">
                    </xs:element>
                    <xs:element type="String" name="UTMNorthing" minOccurs="0">
                    </xs:element>
                    <xs:element name="UTMDatum" minOccurs="0">
                    </xs:element>
                    <xs:element type="String" name="UTMText" minOccurs="0">
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="CoordinatesGrid" minOccurs="0">
                <xs:complexType>
                <xs:sequence>
                    <xs:element type="String" name="GridCellSystem">
                    </xs:element>
                    <xs:element type="String" name="GridCellCode">
                    </xs:element>
                    <xs:element type="String" name="GridQualifier" minOccurs="0">
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="CoordinatesLatLong" minOccurs="0">
                <xs:complexType>
                <xs:sequence>
                    <xs:element type="xs:decimal" name="LongitudeDecimal">
                    </xs:element>
                    <xs:element type="xs:decimal" name="LatitudeDecimal">
                    </xs:element>
                    <xs:element type="String" name="SpatialDatum" minOccurs="0">
                    </xs:element>
                    <xs:element type="String" name="AccuracyStatement" minOccurs="0">
                    </xs:element>
                    <xs:element type="xs:decimal" name="CoordinateErrorDistanceInMeters" minOccurs="0">
                    </xs:element>
                    <xs:element type="String" name="CoordinateErrorMethod" minOccurs="0"/>
                    <xs:element name="CoordinatesText" minOccurs="0"/>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
            <xs:attribute use="optional" type="xs:boolean" name="original"/>
            <xs:attribute use="optional" type="xs:boolean" name="begin"/>
            <xs:attribute use="optional" type="xs:boolean" name="end"/>
        </xs:complexType>
        </xs:element>
    </xs:sequence>
    </xs:complexType>
</xs:element>

EML does:

<xs:complexType name="GeographicCoverage">
    <xs:choice>
    <xs:sequence>
        <xs:element name="geographicDescription" type="res:NonEmptyStringType">
        </xs:element>
        <xs:element name="boundingCoordinates">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="westBoundingCoordinate">
                <xs:simpleType>
                <xs:restriction base="xs:decimal">
                    <xs:minInclusive value="-180.0"/>
                    <xs:maxInclusive value="180.0"/>
                </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="eastBoundingCoordinate">
                <xs:simpleType>
                <xs:restriction base="xs:decimal">
                    <xs:minInclusive value="-180.0"/>
                    <xs:maxInclusive value="180.0"/>
                </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="northBoundingCoordinate">
                <xs:simpleType>
                <xs:restriction base="xs:decimal">
                    <xs:minInclusive value="-90.0"/>
                    <xs:maxInclusive value="90.0"/>
                </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="southBoundingCoordinate">
                <xs:simpleType>
                <xs:restriction base="xs:decimal">
                    <xs:minInclusive value="-90.0"/>
                    <xs:maxInclusive value="90.0"/>
                </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="boundingAltitudes" minOccurs="0">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="altitudeMinimum" type="xs:decimal">
                    </xs:element>
                    <xs:element name="altitudeMaximum" type="xs:decimal">
                    </xs:element>
                    <xs:element name="altitudeUnits" type="unit:LengthUnitType">
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>

            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="datasetGPolygon" minOccurs="0" maxOccurs="unbounded">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="datasetGPolygonOuterGRing">
                <xs:complexType>
                <xs:choice>
                    <xs:sequence>
                    <xs:element name="gRingPoint" type="GRingPointType" minOccurs="3" maxOccurs="unbounded">
                    </xs:element>
                    </xs:sequence>
                    <xs:element name="gRing" type="GRingType">
                    </xs:element>
                </xs:choice>
                </xs:complexType>
            </xs:element>
            <xs:element name="datasetGPolygonExclusionGRing" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                <xs:choice>
                    <xs:element name="gRingPoint" type="GRingPointType" maxOccurs="unbounded">
                    </xs:element>
                    <xs:element name="gRing" type="GRingType">
                    </xs:element>
                </xs:choice>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
    </xs:sequence>
    <xs:group ref="res:ReferencesGroup"/>
    </xs:choice>
    <xs:attribute name="id" type="res:IDType" use="optional"/>
    <xs:attribute name="system" type="res:SystemType" use="optional"/>
    <xs:attribute name="scope" type="res:ScopeType" use="optional" default="document"/>
</xs:complexType>

DWC does:

<!-- Location terms -->
<xs:element ref="dwc:locationID" minOccurs="0"/>
<xs:element ref="dwc:higherGeographyID" minOccurs="0"/>
<xs:element ref="dwc:higherGeography" minOccurs="0"/>
<xs:element ref="dwc:continent" minOccurs="0"/>
<xs:element ref="dwc:waterbody" minOccurs="0"/>
<xs:element ref="dwc:islandGroup" minOccurs="0"/>
<xs:element ref="dwc:island" minOccurs="0"/>
<xs:element ref="dwc:country" minOccurs="0"/>
<xs:element ref="dwc:countryCode" minOccurs="0"/>
<xs:element ref="dwc:stateProvince" minOccurs="0"/>
<xs:element ref="dwc:county" minOccurs="0"/>
<xs:element ref="dwc:municipality" minOccurs="0"/>
<xs:element ref="dwc:locality" minOccurs="0"/>
<xs:element ref="dwc:verbatimLocality" minOccurs="0"/>
<xs:element ref="dwc:minimumElevationInMeters" minOccurs="0"/>
<xs:element ref="dwc:maximumElevationInMeters" minOccurs="0"/>
<xs:element ref="dwc:verbatimElevation" minOccurs="0"/>
<xs:element ref="dwc:minimumDepthInMeters" minOccurs="0"/>
<xs:element ref="dwc:maximumDepthInMeters" minOccurs="0"/>
<xs:element ref="dwc:verbatimDepth" minOccurs="0"/>
<xs:element ref="dwc:minimumDistanceAboveSurfaceInMeters" minOccurs="0"/>
<xs:element ref="dwc:maximumDistanceAboveSurfaceInMeters" minOccurs="0"/>
<xs:element ref="dwc:locationAccordingTo" minOccurs="0"/>
<xs:element ref="dwc:locationRemarks" minOccurs="0"/>
<xs:element ref="dwc:decimalLatitude" minOccurs="0"/>
<xs:element ref="dwc:decimalLongitude" minOccurs="0"/>
<xs:element ref="dwc:geodeticDatum" minOccurs="0"/>
<xs:element ref="dwc:coordinateUncertaintyInMeters" minOccurs="0"/>
<xs:element ref="dwc:coordinatePrecision" minOccurs="0"/>
<xs:element ref="dwc:pointRadiusSpatialFit" minOccurs="0"/>
<xs:element ref="dwc:verbatimCoordinates" minOccurs="0"/>
<xs:element ref="dwc:verbatimLatitude" minOccurs="0"/>
<xs:element ref="dwc:verbatimLongitude" minOccurs="0"/>
<xs:element ref="dwc:verbatimCoordinateSystem" minOccurs="0"/>
<xs:element ref="dwc:verbatimSRS" minOccurs="0"/>
<xs:element ref="dwc:footprintWKT" minOccurs="0"/>
<xs:element ref="dwc:footprintSRS" minOccurs="0"/>
<xs:element ref="dwc:footprintSpatialFit" minOccurs="0"/>
<xs:element ref="dwc:georeferencedBy" minOccurs="0"/>
<xs:element ref="dwc:georeferencedDate" minOccurs="0"/>
<xs:element ref="dwc:georeferenceProtocol" minOccurs="0"/>
<xs:element ref="dwc:georeferenceSources" minOccurs="0"/>
<xs:element ref="dwc:georeferenceVerificationStatus" minOccurs="0"/>
<xs:element ref="dwc:georeferenceRemarks" minOccurs="0"/>

Organism (Make decision about reuse or argue)

In Organisms we do:

<xs:element name="organism" minOccurs="1" maxOccurs="1">
    <xs:complexType>
    <xs:sequence>
        <xs:element name="organismicCoverage" minOccurs="1" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="organismRange" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="organismItem" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="domain" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="kingdom" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:choice>
                            <xs:element name="phylum" type="xs:string" minOccurs="0" maxOccurs="1"/>
                            <xs:element name="division" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        </xs:choice>
                        <xs:element name="class" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="order" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="family" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="genus" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        <xs:element name="species" type="xs:string" minOccurs="0" maxOccurs="1"/>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="lifeFormCoverage" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="lifeFormRange" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="lifeFormItem" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="lifeFormClass" type="lifeFormClassType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="lifeFormType" type="lifeFormTypeType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
        <xs:element name="organismSizeCoverage" minOccurs="0" maxOccurs="1">
        <xs:complexType>
            <xs:sequence>
            <xs:element name="organismSizeRange" minOccurs="1" maxOccurs="1">
                <xs:complexType>
                <xs:sequence>
                    <xs:element name="organismSizeItem" minOccurs="1" maxOccurs="unbounded">
                    <xs:complexType>
                        <xs:sequence>
                        <xs:element name="organismSizeMinimum" type="nonNegativeDecimal" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="organismSizeMinimumUnit" type="organismSizeUnitType" minOccurs="1" maxOccurs="1">
                        </xs:element>
                        <xs:element name="organismSizeMaximum" type="nonNegativeDecimal" minOccurs="1" maxOccurs="1"> 
                        </xs:element>
                        <xs:element name="organismSizeMaximumUnit" type="organismSizeUnitType" minOccurs="1" maxOccurs="1"> 
                        </xs:element>
                        <xs:element name="organismSizeClass" type="organismSizeClassType" minOccurs="0" maxOccurs="1"> 
                        </xs:element>
                        </xs:sequence>
                    </xs:complexType>
                    </xs:element>
                </xs:sequence>
                </xs:complexType>
            </xs:element>
            </xs:sequence>
        </xs:complexType>
        </xs:element>
    </xs:sequence>
    </xs:complexType>
</xs:element>

ABCD does:

<xs:element name="NameAtomised" minOccurs="0">
    <xs:complexType>
    <xs:choice>
        <xs:element type="NameBacterial" name="Bacterial" minOccurs="0">
        </xs:element>
        <xs:element type="NameBotanical" name="Botanical" minOccurs="0">
        </xs:element>
        <xs:element type="NameZoological" name="Zoological" minOccurs="0">
        </xs:element>
        <xs:element type="NameViral" name="Viral" minOccurs="0">
        </xs:element>
    </xs:choice>
    </xs:complexType>
</xs:element>

<xs:complexType name="NameBacterial">
    <xs:sequence>
    <xs:element type="Monomial" name="GenusOrMonomial" minOccurs="0">
    </xs:element>
    <xs:element type="Monomial" name="Subgenus" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="SubgenusAuthorAndYear" minOccurs="0">
    </xs:element>
    <xs:element type="Epithet" name="SpeciesEpithet" minOccurs="0">
    </xs:element>
    <xs:element type="Epithet" name="SubspeciesEpithet" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="ParentheticalAuthorTeamAndYear" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="AuthorTeamAndYear" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="NameApprobation" minOccurs="0">
    </xs:element>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="NameBotanical">
    <xs:sequence>
    <xs:element type="Monomial" name="GenusOrMonomial" minOccurs="0">
    </xs:element>
    <xs:element type="Epithet" name="FirstEpithet" minOccurs="0">
    </xs:element>
    <xs:element type="Epithet" name="InfraspecificEpithet" minOccurs="0">
    </xs:element>
    <xs:element type="RankAbbreviation" name="Rank" minOccurs="0">
    </xs:element>
    <xs:element name="HybridFlag" minOccurs="0">
        <xs:complexType>
        <xs:simpleContent>
            <xs:extension base="HybridFlag">
            <xs:attribute type="xs:int" name="insertionpoint"/>
            </xs:extension>
        </xs:simpleContent>
        </xs:complexType>
    </xs:element>
    <xs:element type="String" name="AuthorTeamParenthesis" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="AuthorTeam" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="CultivarGroupName" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="CultivarName" minOccurs="0">
    </xs:element>
    <xs:element name="TradeDesignationNames" minOccurs="0">
        <xs:complexType>
        <xs:sequence>
            <xs:element maxOccurs="unbounded" type="String" name="TradeDesignationName" minOccurs="0">
            </xs:element>
        </xs:sequence>
        </xs:complexType>
    </xs:element>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="NameViral">
    <xs:sequence>
    <xs:element type="Monomial" name="GenusOrMonomial" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="ViralSpeciesDesignation" minOccurs="0">
    </xs:element>
    <xs:element name="Acronym" minOccurs="0">
    </xs:element>
    </xs:sequence>
</xs:complexType>

<xs:complexType name="NameZoological">
    <xs:sequence>
    <xs:element type="Monomial" name="GenusOrMonomial" minOccurs="0">
    </xs:element>
    <xs:element type="Monomial" name="Subgenus" minOccurs="0">
    </xs:element>
    <xs:element type="Epithet" name="SpeciesEpithet" minOccurs="0">
    </xs:element>
    <xs:element type="Epithet" name="SubspeciesEpithet" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="AuthorTeamOriginalAndYear" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="AuthorTeamParenthesisAndYear" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="CombinationAuthorTeamAndYear" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="Breed" minOccurs="0">
    </xs:element>
    <xs:element type="String" name="NamedIndividual" minOccurs="0"/>
    </xs:sequence>
</xs:complexType>

EML does

<xs:element name="taxonomicCoverage">
    <xs:complexType>
        <xs:complexContent>
            <xs:extension base="TaxonomicCoverage">
                <xs:attribute name="system" type="res:SystemType" use="optional"/>
                <xs:attribute name="scope" type="res:ScopeType" use="optional" default="document"/>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
</xs:element>

<xs:complexType name="TaxonomicCoverage">
    <xs:choice>
        <xs:sequence>
            <xs:element name="taxonomicSystem" minOccurs="0">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="classificationSystem" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="classificationSystemCitation" type="cit:CitationType">
                                    </xs:element>
                                    <xs:element name="classificationSystemModifications" type="res:NonEmptyStringType" minOccurs="0">
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                        <xs:element name="identificationReference" type="cit:CitationType" minOccurs="0" maxOccurs="unbounded">
                        </xs:element>
                        <xs:element name="identifierName" type="rp:ResponsibleParty" maxOccurs="unbounded">
                        </xs:element>
                        <xs:element name="taxonomicProcedures" type="res:NonEmptyStringType">
                        </xs:element>
                        <xs:element name="taxonomicCompleteness" type="res:NonEmptyStringType" minOccurs="0">
                        </xs:element>
                        <xs:element name="vouchers" minOccurs="0" maxOccurs="unbounded">
                            <xs:complexType>
                                <xs:sequence>
                                    <xs:element name="specimen" type="res:NonEmptyStringType">
                                    </xs:element>
                                    <xs:element name="repository">
                                        <xs:complexType>
                                            <xs:sequence>
                                                <xs:element name="originator" type="rp:ResponsibleParty" maxOccurs="unbounded">
                                                </xs:element>
                                            </xs:sequence>
                                        </xs:complexType>
                                    </xs:element>
                                </xs:sequence>
                            </xs:complexType>
                        </xs:element>
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="generalTaxonomicCoverage" type="res:NonEmptyStringType" minOccurs="0">
            </xs:element>
            <xs:element name="taxonomicClassification" type="TaxonomicClassificationType" maxOccurs="unbounded">
            </xs:element>
        </xs:sequence>
        <xs:group ref="res:ReferencesGroup"/>
    </xs:choice>
    <xs:attribute name="id" type="res:IDType" use="optional"/>
</xs:complexType>

DwC does:

<!-- Taxon terms -->
<xs:element ref="dwc:taxonID" minOccurs="0"/>
<xs:element ref="dwc:scientificNameID" minOccurs="0"/>
<xs:element ref="dwc:acceptedNameUsageID" minOccurs="0"/>
<xs:element ref="dwc:parentNameUsageID" minOccurs="0"/>
<xs:element ref="dwc:originalNameUsageID" minOccurs="0"/>
<xs:element ref="dwc:nameAccordingToID" minOccurs="0"/>
<xs:element ref="dwc:namePublishedInID" minOccurs="0"/>
<xs:element ref="dwc:taxonConceptID" minOccurs="0"/>
<xs:element ref="dwc:scientificName" minOccurs="0"/>
<xs:element ref="dwc:acceptedNameUsage" minOccurs="0"/>
<xs:element ref="dwc:parentNameUsage" minOccurs="0"/>
<xs:element ref="dwc:originalNameUsage" minOccurs="0"/>
<xs:element ref="dwc:nameAccordingTo" minOccurs="0"/>
<xs:element ref="dwc:namePublishedIn" minOccurs="0"/>
<xs:element ref="dwc:namePublishedInYear" minOccurs="0"/>
<xs:element ref="dwc:higherClassification" minOccurs="0"/>
<xs:element ref="dwc:kingdom" minOccurs="0"/>
<xs:element ref="dwc:phylum" minOccurs="0"/>
<xs:element ref="dwc:class" minOccurs="0"/>
<xs:element ref="dwc:order" minOccurs="0"/>
<xs:element ref="dwc:family" minOccurs="0"/>
<xs:element ref="dwc:genus" minOccurs="0"/>
<xs:element ref="dwc:subgenus" minOccurs="0"/>
<xs:element ref="dwc:specificEpithet" minOccurs="0"/>
<xs:element ref="dwc:infraspecificEpithet" minOccurs="0"/>
<xs:element ref="dwc:taxonRank" minOccurs="0"/>
<xs:element ref="dwc:verbatimTaxonRank" minOccurs="0"/>
<xs:element ref="dwc:scientificNameAuthorship" minOccurs="0"/>
<xs:element ref="dwc:vernacularName" minOccurs="0"/>
<xs:element ref="dwc:nomenclaturalCode" minOccurs="0"/>
<xs:element ref="dwc:taxonomicStatus" minOccurs="0"/>
<xs:element ref="dwc:nomenclaturalStatus" minOccurs="0"/>
<xs:element ref="dwc:taxonRemarks" minOccurs="0"/>
<xs:element ref="dwr:SimpleDarwinExtensions" minOccurs="0" />

Implement Predefined vs Open Fields in the schema

This will help with restrictions to types. A fields can only have one clearly defined type. This allows to have a field that is specific e.g. country and then define the country list in a simple type based on strings to restrict the input in the field. With open fields as we promote it currently the problem is that we can provide all valid values only as a flat list whereas the thesaurus they might come from different levels of the hierarchy.

Flatten the schema

This allows for better reuse of components. The schema first defines all
elements and attributes and then uses references to build up complex type
elements. An example for a generic list:

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema">
    <xs:element name="item" type="xs:string"/>
    <xs:attribute name="of" type="listType"/>
    <xs:element name="list">
    <xs:complexType>
        <xs:sequence>
        <xs:element ref="item"/>
        </xs:sequence>
        <xs:attribute ref="listType"/>
    </xs:complexType>
    </xs:element>
    <xs:simpleType name="listType">
    <xs:restriction base="xs:string">
        <xs:enumeration value="organisms"/>
        <xs:enumeration value="locations"/>
    </xs:restriction>
    </xs:simpleType>
</xs:schema>

Disentangle Process and Interaction

There is a bit of redundancy which shows up in the user interface mock-ups.

After having clicked several times between the "Process" and "Interact" headers I understood what this means. In the "Process" you can select "Interaction" which involves all types of interactions. Here, you can specify the compartments of the datasets of which interactions are of interest, right?
This is a bit redundant and thus somewhat unintuitive. I think here we should sit together and think about how to disentangle this issue. May not be an easy task...

@EichenbergBEF

When to meet for that?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.