Changes between Initial Version and Version 1 of vSPARQLCleanupQueries


Ignore:
Timestamp:
07/10/09 12:38:18 (10 years ago)
Author:
mar
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • vSPARQLCleanupQueries

    v1 v1  
     1== vSPARQL Cleanup Queries ==
     2
     3Manipulating ontologies at the RDF triple level can result in RDF graphs that may cause problems for graphs with higher-level semantics. On this page, we list several vSPARQL queries that can be used to clean up some of these problems.
     4
     5In each of these examples, the FROM <file:///Users/mar/bobo/dbg_neuroFMA/intermediate_language/current.xml>is considered the input source and needs to be replaced according to your input dataset.
     6
     7----
     8
     9'''RDF Lists with empty elements'''
     10
     11
     12{{{
     13
     14# Find all of the RDF list nodes that do not have an element;
     15# recursively follow the list until it either hits a node with
     16# an element or it hits rdf:nil. Track the node that points
     17# to this errant list and the entire set of reachable nodes
     18# before the errant list has an element.
     19FROM NAMED <identify_rdfListEmptyNodes> [
     20    CONSTRUCT {
     21          ?a rdf:rest ?b .      # to be changed
     22          ?b temp:rest ?c .     # to be deleted
     23          ?a temp:starts ?b .   # first node in rest list
     24          ?a temp:reaches ?c .  # reachability list
     25    }
     26    FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     27    WHERE {
     28          ?a rdf:first ?noop .
     29          ?a rdf:rest ?b .
     30          OPTIONAL { ?b rdf:first ?a_bogus } . FILTER(!bound(?a_bogus)) .
     31          ?b rdf:rest ?c .
     32    }
     33
     34    UNION
     35
     36    CONSTRUCT {
     37              ?a ?pred ?b .     # to be changed
     38              ?b temp:rest ?c . # to be deleted
     39              ?a temp:starts ?b . # first node in rest list
     40              ?a temp:reaches ?c . # reachability list
     41    }
     42    FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     43    WHERE {
     44          ?a ?pred ?b . FILTER(?pred != rdf:rest) .
     45          ?b rdf:rest ?c .
     46          OPTIONAL { ?b rdf:first ?b_bogus } . FILTER(!bound(?b_bogus)) .
     47    }
     48
     49    UNION
     50
     51    CONSTRUCT {
     52              ?c temp:rest ?d . # to be deleted
     53              ?a temp:reaches ?d . # reachability list
     54    }
     55    FROM NAMED <identify_rdfListEmptyNodes>
     56    FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     57    WHERE {
     58          GRAPH <identify_rdfListEmptyNodes> { ?a temp:reaches ?c . } .
     59          OPTIONAL { ?c rdf:first ?noop } . FILTER(!bound(?noop)) .
     60          ?c rdf:rest ?d .
     61    }
     62]
     63
     64# Eliminate all of the edges corresponding to RDF lists elements with no value
     65FROM NAMED <remove_rdfListEmptyNodes> [
     66     CONSTRUCT {
     67               ?x ?y ?z .
     68     }
     69     FROM NAMED <identify_rdfListEmptyNodes>
     70     FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     71     WHERE {
     72           ?x ?y ?z .
     73           OPTIONAL { GRAPH <identify_rdfListEmptyNodes> { ?x ?ynot ?z } .
     74                      FILTER(?ynot=temp:rest && ?y=rdf:rest) }
     75           FILTER(!bound(?ynot)) .
     76     }
     77]
     78
     79# Remove all of the edges to the start of RDF lists containing empty nodes;
     80# we replace these edges with new edges in <add_startEdgeRdfListEmptyNodes>
     81FROM NAMED <remove_startEdgeRdfListEmptyNodes> [
     82     CONSTRUCT {
     83               ?q ?r ?s .
     84     }
     85     FROM NAMED <identify_rdfListEmptyNodes>
     86     FROM NAMED <remove_rdfListEmptyNodes>
     87     WHERE {
     88           GRAPH <remove_rdfListEmptyNodes> { ?q ?r ?s . } .
     89           OPTIONAL { GRAPH <identify_rdfListEmptyNodes> { ?q ?r ?t } . FILTER(?s = ?t) } .
     90           FILTER(!bound(?t)) .
     91     }
     92]
     93
     94# Add in the new edges to the RDF lists containing empty nodes
     95FROM NAMED <add_startEdgeRdfListEmptyNodes> [
     96     CONSTRUCT {
     97         ?t ?u ?v .
     98         ?a2 ?pred2 ?d2 .
     99     }
     100     FROM NAMED <identify_rdfListEmptyNodes>
     101     FROM NAMED <remove_startEdgeRdfListEmptyNodes>
     102     FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     103     WHERE {
     104           {
     105             GRAPH <remove_startEdgeRdfListEmptyNodes> { ?t ?u ?v  }
     106           } UNION {
     107             GRAPH <identify_rdfListEmptyNodes> {
     108                   ?a2 temp:starts ?b2 .
     109                   ?a2 ?pred2 ?gone2 .
     110                   FILTER(!REGEX(str(?pred2),"http://sig.biostr.washington.edu/temp#") ) .
     111                   ?a2 temp:reaches ?d2 . }
     112             OPTIONAL {  ?d2 rdf:first ?nxt2 } .
     113             FILTER( (?d2 = rdf:nil) || bound(?nxt2) ) .
     114           }
     115     }
     116]
     117
     118}}}
     119
     120
     121----
     122
     123'''owl:unionOf statements with 0 or 1 elements'''
     124
     125
     126{{{
     127# Find owl:unionOf statements that have RDF lists of 0 or 1 elements.
     128# Replace the owl:unionOf statements with either the element or rdf:nil.
     129FROM NAMED <removed_shortUnionOfs> [
     130     CONSTRUCT {
     131               ?q ?r ?s .
     132               ?before1 ?pred1 ?c1 .
     133               ?before2 ?pred2 rdf:nil .
     134     }
     135     FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     136     # Find owl:unionOfs that have 0 or 1 element.
     137     FROM NAMED <identify_shortUnionOfs> [
     138          CONSTRUCT {
     139              ?before1 ?pred1 ?a1 .
     140              ?a1 owl:unionOf ?b1 .
     141              ?a1 rdf:type owl:Class .
     142              ?b1 rdf:first ?c1 .
     143              ?b1 rdf:rest rdf:nil .
     144
     145              ?before2 ?pred2 ?a2 .
     146              ?a2 owl:unionOf ?b2 .
     147              ?a2 rdf:type owl:Class .
     148              ?b2 rdf:rest rdf:nil .
     149         }
     150         FROM <file:///Users/mar/bobo/dbg_neuroFMA/culprit4.xml>
     151         WHERE {
     152                 {
     153                        ?before1 ?pred1 ?a1 .
     154                        ?a1 owl:unionOf ?b1 .
     155                        ?a1 rdf:type owl:Class .
     156                        ?b1 rdf:first ?c1 .
     157                        ?b1 rdf:rest rdf:nil .
     158                 } UNION {
     159                        ?before2 ?pred2 ?a2 .
     160                        ?a2 owl:unionOf ?b2 .
     161                        ?a2 rdf:type owl:Class .
     162                        OPTIONAL { ?b2 rdf:first ?c2 . } . FILTER(!bound(?c2)) .
     163                        ?b2 rdf:rest rdf:nil .
     164                 }
     165         }
     166     ]
     167     WHERE {
     168             {
     169                ?q ?r ?s .
     170                OPTIONAL { GRAPH <identify_shortUnionOfs> { ?q ?r ?t . FILTER(?s = ?t) } }
     171                FILTER(!bound(?t)) .
     172             } UNION {
     173                GRAPH <identify_shortUnionOfs> {
     174                   ?before1 ?pred1 ?a1 .
     175                   ?a1 owl:unionOf ?b1 .
     176                   ?b1 rdf:first ?c1 .
     177                   ?b1 rdf:rest rdf:nil .
     178                   }
     179             } UNION {
     180               GRAPH <identify_shortUnionOfs> {
     181                   ?before2 ?pred2 ?a2 .
     182                   ?a2 owl:unionOf ?b2 .
     183                   OPTIONAL { ?b2 rdf:first ?c2 . } . FILTER(!bound(?c2)) . }
     184                   ?b2 rdf:rest rdf:nil .
     185             }
     186     }
     187]
     188
     189}}}
     190
     191
     192----
     193
     194'''owl:allValuesFrom with empty owl:unionOf lists'''
     195
     196
     197{{{
     198# Remove all owl:allValuesFrom that have empty owl:unionOf lists.
     199FROM NAMED <remove_emptyAllValuesFrom> [
     200     CONSTRUCT {
     201               ?a ?b ?c .
     202     }
     203     FROM <file:///Users/mar/bobo/dbg_neuroFMA/intermediate_language/current.xml>
     204     # identify allValuesFrom with empty RDF lists
     205     FROM NAMED <identify_emptyAllValuesFrom> [
     206         CONSTRUCT {
     207                   ?x owl:allValuesFrom ?allB .
     208                   ?allB rdf:type owl:Class .
     209                   ?allB owl:unionOf rdf:nil .
     210         }
     211         FROM <file:///Users/mar/bobo/dbg_neuroFMA/intermediate_language/current.xml>
     212         WHERE {
     213               ?x owl:allValuesFrom ?allB .
     214               ?allB rdf:type owl:Class .
     215               ?allB owl:unionOf rdf:nil .
     216         }
     217     ]
     218     WHERE {
     219           ?a ?b ?c .
     220           OPTIONAL { GRAPH <identify_emptyAllValuesFrom> { ?a ?b ?cnot . FILTER(?c=?cnot) } } .
     221           FILTER(!bound(?cnot)) .
     222     }
     223]
     224
     225}}}
     226
     227----
     228
     229'''owl:Restrictions that have no values associated with owl:onProperty restrictions'''
     230
     231
     232{{{
     233# remove the set of owl:Restrictions that do not have values associated with
     234# owl:onProperty restrictions
     235FROM NAMED <remove_emptyOwlOnPropertyRestrictions> [
     236     CONSTRUCT {
     237               ?a ?b ?c .
     238     }
     239     FROM <file:///Users/mar/bobo/dbg_neuroFMA/intermediate_language/current.xml>
     240     # identify the set of owl:Restrictions that do not have values associated with
     241     # owl:onProperty restrictions
     242     FROM NAMED <identify_emptyOwlOnPropertyRestrictions> [
     243         CONSTRUCT {
     244              ?x rdfs:subClassOf ?owlrestrict .
     245              ?owlrestrict rdf:type owl:Restriction .
     246              ?owlrestrict owl:onProperty ?onprop .
     247         }
     248         FROM <file:///Users/mar/bobo/dbg_neuroFMA/intermediate_language/current.xml>
     249         WHERE {
     250                       ?x rdfs:subClassOf ?owlrestrict .
     251                       ?owlrestrict rdf:type owl:Restriction .
     252                       ?owlrestrict owl:onProperty ?onprop .
     253                       OPTIONAL { ?owlrestrict ?anyp ?anyo .
     254                                  FILTER((?anyp!=rdf:type)&&(?anyp!=owl:onProperty)) . }
     255                       FILTER(!bound(?anyp)) .
     256         }
     257      ]
     258      WHERE {
     259           ?a ?b ?c .
     260           OPTIONAL { GRAPH <identify_emptyOwlOnPropertyRestrictions> { ?a ?b ?cnot . FILTER(?c=?cno
     261t) } } .
     262           FILTER(!bound(?cnot)) .
     263     }
     264]
     265
     266}}}
     267
     268
     269