cpfaff / ease Goto Github PK
View Code? Open in Web Editor NEWEASE (Essential Annotation Schema for Ecology)
EASE (Essential Annotation Schema for Ecology)
This is a preparation for the user interface evaluation.
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>
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.
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
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.
As cas has parts that are close to what existing meta data schemata cover we should add
a table highlighting similarities/dissimilarities maybe to the readme.
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.
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:
As other schema do not deal with processes. We just keep what we have.
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.
Currently helper structures in the xsd schema are ranges and items. Better would be to have lists and items.
As other schema do not deal with spheres we just keep what we have.
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>
Fill out a CAS from information that is provided in ABCD
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.
Check and refine
The control factors are quire repetitive. This needs work to remove the repetition.
Fill out a CAS annotation with information that is available in EML.
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.
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">
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:
Vocabulary:
@EichenbergBEF Would be good to hear your ideas here as well.
As other schema do not deal with chemicals. We just keep what we have.
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>
There is multiple places where units are used e.g. organisms, locations. These can use the same simple type for restriction.
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
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.
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"/>
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"/>
Check the vocabulary for parts that need disentangling and work in the process of the final edit for version 1.0. Create issues for each of them so the progress can be tracked.
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"/>
@EichenbergBEF what do you think about that? Other suggestions are welcome.
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" />
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.
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>
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...
When to meet for that?
This is a preparation step for the evaluation of the user interface
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.