diff --git a/afarcloud-aim-rml-mapping.ttl b/afarcloud-aim-rml-mapping.ttl new file mode 100644 index 0000000000000000000000000000000000000000..cbc8ba90f9e40b85e18f08f0beebd267db904506 --- /dev/null +++ b/afarcloud-aim-rml-mapping.ttl @@ -0,0 +1,201 @@ +@prefix geof: <http://www.opengis.net/def/function/geosparql/>. +@prefix map: <#>. +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . +#@prefix ogc: <http://www.opengis.net/ont/geosparql#>. +@prefix geo: <http://www.opengis.net/ont/geosparql#> . +@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>. +@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#>. +@prefix rr: <http://www.w3.org/ns/r2rml#>. +@prefix rrx: <http://www.w3.org/ns/r2rml-ext#>. +@prefix rrxf: <http://www.w3.org/ns/r2rml-ext/functions/def/>. +@prefix strdf: <http://strdf.di.uoa.gr/ontology#>. +#@prefix vocab: <ontology#>. +@prefix iso19150-2: <http://def.seegrid.csiro.au/isotc211/iso19150/-2/2012/basic#> . +@prefix foodie: <http://foodie-cloud.com/model/foodie#> . +@prefix foodie-cz: <http://foodie-cloud.com/model/foodie-cz#> . +@prefix foodie-es: <http://foodie-cloud.com/model/foodie-es#> . +@prefix xsd: <http://www.w3.org/2001/XMLSchema#>. +@prefix owl: <http://www.w3.org/2002/07/owl#> . +@prefix skos: <http://www.w3.org/2004/02/skos/core#> . +@prefix virtrdf: <http://www.openlinksw.com/schemas/virtrdf#> . +@prefix rml: <http://semweb.mmlab.be/ns/rml#> . +@prefix ql: <http://semweb.mmlab.be/ns/ql#> . +@prefix schema: <http://schema.org/>. +@prefix locn: <http://www.w3.org/ns/locn#>. +@prefix rev: <http://purl.org/stuff/rev#>. +@prefix sf: <http://www.opengis.net/ont/sf#>. +@prefix sosa: <http://www.w3.org/ns/sosa/> . +@prefix qudt: <http://qudt.org/schema/qudt/> . +@prefix dc: <http://purl.org/dc/terms/> . +@prefix afc: <http://www.w3id.org/afarcloud/>. + +<#Feature> a rr:TriplesMap; +rml:logicalSource [ + rml:source "./example-input-obs.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$"]; + +rr:subjectMap [ + rr:class geo:Feature; + rr:template "http://www.w3id.org/afarcloud/poi?lat={sensorData.latitude}&long={sensorData.longitude}"]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant geo:hasGeometry ]; + rr:objectMap [ + rr:termType rr:IRI; + rr:template "http://www.w3id.org/afarcloud/pCoord?lat={sensorData.latitude}&long={sensorData.longitude}" + ] +]; +. + +<#geometry> a rr:TriplesMap; +rml:logicalSource [ + rml:source "./example-input-obs.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$"]; + +rr:subjectMap [ + rr:class sf:Point; + rr:template "http://www.w3id.org/afarcloud/pCoord?lat={sensorData.latitude}&long={sensorData.longitude}"]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant geo:asWKT ]; + rr:objectMap [ + rr:datatype virtrdf:Geometry; + rr:template "POINT({sensorData.longitude} {sensorData.latitude})" + ] +]; +. + +<#sensor> a rr:TriplesMap; +rml:logicalSource [ + rml:source "./example-input-obs.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$"]; + +rr:subjectMap [ + rr:class afc:AfarcloudSensors , afc:SoilSensor; + rr:template "urn:afc:AS03:cropsManagement:RISE:{sensorData.resourceType}:{sensorData.resourceId}"]; + +. + +<#observations> a rr:TriplesMap; +rml:logicalSource [ + rml:source "./example-input-obs.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.multiVariableObservationData.observations[*]"]; + +rr:subjectMap [ + rr:class sosa:Observation; + rr:template "urn:afc:observation:{observedProperty}:{resultTime}"]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant sosa:observedProperty ]; + rr:objectMap [ + rr:termType rr:IRI; + rr:template "http://www.w3id.org/afarcloud/{observedProperty}" + ] +]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant sosa:resultTime ]; + rr:objectMap [ + rr:datatype xsd:dateTime; + rml:reference "resultTime"; + ] +]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant sosa:hasResult ]; + rr:objectMap [ + rr:termType rr:IRI; + rr:template "urn:afc:observation:{observedProperty}:{resultTime}:q1" + ] +]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant sosa:hasFeatureOfInterest ]; + rr:objectMap [ + + #rr:termType rr:IRI; + # rr:template "urn:{$.sensorData.latitude}" + + rr:parentTriplesMap <#Feature> ; + rr:joinCondition [ + rr:child "resultTime"; + rr:parent "sensorData.resultTime"; + ]; + ] +]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant sosa:madeBySensor ]; + rr:objectMap [ + rr:parentTriplesMap <#sensor> ; + rr:joinCondition [ + rr:child "resultTime"; + rr:parent "sensorData.resultTime"; + ]; + ] +]; +. + + +<#observations_results_units> +rml:logicalSource [ + rml:source "./example-input-obs.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.multiVariableObservationData.observations[*]"]; + +rr:subjectMap [ + rr:class qudt:QuantityValue; + rr:template "urn:afc:observation:{observedProperty}:{resultTime}:q1"]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant qudt:numericValue ]; + rr:objectMap [ + rr:datatype xsd:int; + rml:reference "result.value"; + ] +]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant dc:identifier ]; + rr:objectMap [ + rr:termType rr:Literal; + rr:template "{observedProperty}:{resultTime}:q1" + ] +]; + +rr:predicateObjectMap [ + rr:predicateMap [ rr:constant qudt:unit ]; + rr:objectMap [ + rr:parentTriplesMap <#units> ; + rr:joinCondition [ + rr:child "observedProperty"; + rr:parent "observedProperty"; + ]; + ] +]; + +. + +<#units> a rr:TriplesMap; +rml:logicalSource [ + rml:source "./example-input-obs.json"; + rml:referenceFormulation ql:JSONPath; + rml:iterator "$.sensorData.observations[*]"]; + +rr:subjectMap [ + rr:class qudt:Unit; + #rr:termType rr:BlankNode + #rr:termType rr:IRI; + #rr:termType rr:Literal; + rr:template "{uom}" + ] +.