All Downloads are FREE. Search and download functionalities are using the official Maven repository.

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