sttl.sensor.profile.rq Maven / Gradle / Ivy
#
# Template used to define functions for the transformation
#
prefix cdt: .
prefix sosa:
prefix aqio: .
prefix ft:
template st:profile {}
where {}
function us:sort(?p, ?v) {
if (?p = rdf:type, 0,
if (strstarts(?p, rdfs:), 1,
if (strstarts(?p, rdf:), 2,
if (isLiteral(?v), 3, 4))))
}
function us:display(?t) {
us:clean(st:turtle(?t))
}
function us:displayLiteral(?t) {
if (strstarts(datatype(?t), cdt:) , str(?t),
if (isNumeric(?t),
if (datatype(?t) = xsd:double || datatype(?t) = xsd:decimal, st:format("%.2f", ?t), ?t),
us:clean(st:turtle(?t))))
}
function us:clean(?str) {
replace(?str, "<", "<")
}
function us:url(?x) {
if (coalesce(st:getprofile(?x) = st:lod, false), ?x, st:pplink(?x))
}
function us:protect(?url) {
replace (?url, "'", "%27")
}
function us:align(?n) {
if (?n < 10, concat(00, ?n),
if (?n < 100, concat(0, ?n),
?n))
}
function us:pretty(?pname) {
strbefore(strafter(?pname, aqio:), "Property")
}
function us:show(?val) {
if (isLiteral(?val),
us:displayLiteral(?val),
st:format(, us:protect(st:url(?val)), us:display(?val)))
}
function us:value(?val) {
if (strstarts(datatype(?val), cdt:),
if (contains(str(?val), " "),
xsd:double(strbefore(str(?val), " ")),
?val),
if (datatype(?val) = xsd:string, 0, ?val))
}
function us:index(?pname, ?plist) {
let (?i = 0) {
for (?p in ?plist) {
if (?p = ?pname) {
return (?i)
} ;
set (?i = ?i + 1)
}
} ;
return (-1)
}
# compute list of relevant measure properties
function us:init() {
let (select
(aggregate(distinct ?p) as ?l)
(xt:sort(us:splitWith(?l, us:element())) as ?l1)
(xt:sort(us:splitWithout(?l, us:element())) as ?l2)
(xt:append(?l1, ?l2) as ?list)
where {
?x sosa:observedProperty ?q .
?q a ?p
}) {
xt:print("measure: ", ?list) ;
return(?list)
}
}
function us:define() {
set(?plist = us:init())
}
function us:plist() {
return (?plist)
}
function us:element() {
xt:list("Wind", "Temperature", "Humidity", "Dew", "Air", "Atmospheric")
}
function us:splitWith(?list, ?code) {
mapfindlist(
lambda(?elem, ?code)
{ mapany (lambda(?key, ?elem) { contains(?elem, ?key) }, ?code, ?elem) },
?list, xt:list(?code))
}
function us:splitWithout(?list, ?code) {
mapfindlist(
lambda(?elem, ?code)
{ mapevery (lambda(?key, ?elem) { ! contains(?elem, ?key) }, ?code, ?elem) },
?list, xt:list(?code))
}
© 2015 - 2025 Weber Informatics LLC | Privacy Policy