Skip to content

sparql query for flip, TE, TR values #5

Description

@wdduncan

@addiehl @mtsmith6 @adbartni Below is the query (with results) you requested. There are a lot of things going on this query that are difficult to explain in a post. You need to know how to query equivalent classes and traverse lists in RDF. Figuring out how the min/max values worked was a bit of a pain. I only figured it by looking the Turtle version of the ontology and adjusting accordingly (with much trial and error).
In the query, you see many lines where I used (xsd:minInclusive|xsd:minExclusive)/(xsd:maxInclusive|xsd:maxExclusive). This is b/c I noticed that sometimes the ranges were exclusive (e.g. >) and sometimes they were inclusive (e.g., >=). The query could be simplified a little if you can standardize on just using an inclusive or exclusive operator.

Hopefully, this query will give you enough of what you need :)

PREFIX owl: <http://www.w3.org/2002/07/owl#>
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 root: <http://purl.obolibrary.org/obo/mrio.owl/MRIO_0000623>
PREFIX TR: <http://purl.obolibrary.org/obo/MRIO_0000376>
PREFIX TE: <http://purl.obolibrary.org/obo/MRIO_0000377>
PREFIX flip: <http://purl.obolibrary.org/obo/MRIO_0000384>
SELECT DISTINCT 
?subject ?subject_label ?flip ?flip_min ?flip_max ?te_min ?te_max ?tr_min ?tr_max 
WHERE {
    ?subject rdfs:subClassOf* root: .
    ?subject rdfs:label ?subject_label .
    # find equiv class with flip angle value
    optional {
        ?subject owl:equivalentClass 
                [ a owl:Class;
                  owl:intersectionOf/rdf:rest*/rdf:first 
                [ a owl:Restriction;
                  owl:onProperty flip:;
                  owl:hasValue ?flip]].
    }
    # find eqiv class with flip min/max value
    optional {
        ?subject owl:equivalentClass 
                [ a owl:Class;
                  owl:intersectionOf/rdf:rest*/rdf:first 
                [ a owl:Restriction;
                  owl:onProperty flip:;
                  owl:someValuesFrom* 
                [ a rdfs:Datatype ;
                  owl:withRestrictions ?flip_range ]]] .
        optional {
            ?flip_range 
                rdf:rest*/rdf:first/(xsd:minInclusive|xsd:minExclusive) ?flip_min 
        }
        optional {
            ?flip_range 
                rdf:rest*/rdf:first/(xsd:maxInclusive|xsd:maxExclusive) ?flip_max 
        }
    }
    # find eqiv class with TE min/max values
    optional {
        ?subject owl:equivalentClass 
                [ a owl:Class;
                  owl:intersectionOf/rdf:rest*/rdf:first 
                [ a owl:Restriction;
                  owl:onProperty TE:;
                  owl:someValuesFrom*
                [ a rdfs:Datatype ;
                  owl:withRestrictions ?te_range ]]] .
        optional {
            ?te_range 
                rdf:rest*/rdf:first/(xsd:minInclusive|xsd:minExclusive) ?te_min .
        }
        optional {
            ?te_range 
                rdf:rest*/rdf:first/(xsd:maxInclusive|xsd:maxExclusive) ?te_max .
        }
    }
    # find eqiv class with TR min/max value
    optional {
        ?subject owl:equivalentClass 
                [ a owl:Class;
                  owl:intersectionOf/rdf:rest*/rdf:first 
                [ a owl:Restriction;
                  owl:onProperty TR:;
                  owl:someValuesFrom*
                [ a rdfs:Datatype ;
                  owl:withRestrictions ?tr_range ]]] .
        optional {
            ?tr_range 
                rdf:rest*/rdf:first/(xsd:minInclusive|xsd:minExclusive) ?tr_min .
        }
        optional {
            ?tr_range 
                rdf:rest*/rdf:first/(xsd:maxInclusive|xsd:maxExclusive) ?tr_max .
        }
    }
}

Results

subject subject_label flip flip_min flip_max te_min te_max tr_min tr_max
obo:mrio.owl/MRIO_0000623 MRI acquisition sequence
obo:MRIO_0000385 T1 weighted MRI acquisition sequence 90 0.0 30.0 0.0 800.0
obo:MRIO_0000386 T2 weighted MRI acquisition sequence 90 30.0 2000.0
obo:MRIO_0000387 Proton density sequence 90 30.0 1000.0
obo:MRIO_0000388 T2 FSE sequence 90 60.0 2000.0
obo:MRIO_0000389 T1 GRE sequence 70.0 110.0 30.0 0.0
obo:MRIO_0000390 T2* GRE sequence 5.0 20.0 30.0 0.0
obo:MRIO_0000391 STIR sequence 180 60.0 2000.0
obo:MRIO_0000392 T2 FLAIR sequence 70.0 110.0 80.0

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions