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