This page is intended as suplemental material for the JBI submission "vSPARQL: A View Definition Language for the Semantic Web". Included are the URL of a vSPARQL demo interface, for query testing, a brief descriptions of each use case in the paper, and a runable query demonstrating each case. You may cut and paste queries found here into the vSPARQL interface below.
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX reactome:<http://purl.org/science/ontology/reactome/>
CONSTRUCT
{
	?a ?b ?c.
	?a rdfs:label ?a_label.
	?c rdfs:label ?c_label.
}
FROM <http://purl.org/science/ontology/reactome>
FROM NAMED <mitotic_cell_cycle>
[
	CONSTRUCT {?b reactome:componentOf ?a}
	FROM <http://purl.org/science/ontology/reactome>
	WHERE
	{
		?a rdfs:label "mitotic cell cycle".
		?b reactome:componentOf ?a .
	}
	UNION
	CONSTRUCT {?c reactome:componentOf ?b}
	FROM <http://purl.org/science/ontology/reactome>
	FROM NAMED <mitotic_cell_cycle>
	WHERE
	{
		GRAPH <mitotic_cell_cycle> {?b reactome:componentOf ?a}.
		?c reactome:componentOf ?b .
	}
	
]
WHERE
{
	GRAPH <mitotic_cell_cycle> {?a ?b ?c}.
	?a rdfs:label ?a_label.
	?c rdfs:label ?c_label.
}
    # Get all of the spatial relationships associated with the organs in
# the gastrointestinal tract.
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX temp:<http://sig.biostr.washington.edu/temp#>
PREFIX fma:<http://sig.biostr.washington.edu/fma3.0#>
CONSTRUCT 
{ 
    ?organ_part ?spatial_rel ?spatial_value .
    ?fmlive ?fmlive_p ?fmlive_o .
    ?fmlive2 ?fmlive_p2 ?fmlive_o2
}
FROM NAMED <gi_parts> [
    CONSTRUCT { temp:set temp:member ?parts }
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { 
      ?parts gleen:OnPath ("([fma:regional_part_of]|[fma:constitutional_part_of]|[fma:systemic_part_of])*" fma:Gastrointestinal_tract) .
    }
]
FROM NAMED <organ_parts> [
    CONSTRUCT { temp:set temp:member ?gi_part }
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { 
          ?gi_part gleen:OnPath ("([rdfs:subClassOf])*" fma:Organ) .
    }
]
FROM <http://sig.biostr.washington.edu/fma3.0>
WHERE {
    GRAPH <gi_parts> { ?a ?b ?organ_part } .
    GRAPH <organ_parts> { ?c ?d ?organ_part } .
    ?organ_part ?spatial_rel ?spatial_value .
    FILTER ( (?spatial_rel = fma:orientation) ||
    	     (?spatial_rel = fma:continuous_with) ||
	     (?spatial_rel = fma:continuous_with_distally) ||
	     (?spatial_rel = fma:continuous_with_proximally) ||
	     (?spatial_rel = fma:attributed_continuous_with) ||
	     (?spatial_rel = fma:contained_in) ) .
    OPTIONAL { ?organ_part fma:orientation ?fmlive .
               ?fmlive ?fmlive_p ?fmlive_o . }		
    OPTIONAL { ?organ_part fma:attributed_continuous_with ?fmlive2 .
               ?fmlive2 ?fmlive_p2 ?fmlive_o2 . }	
}
    PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX temp:<http://sig.biostr.washington.edu/temp#>
PREFIX fma:<http://sig.biostr.washington.edu/fma3.0#>
####################################################################################
# Generate the NeuroFMA
####################################################################################
CONSTRUCT {  ?x ?y ?z }
FROM <http://sig.biostr.washington.edu/fma3.0>
# all parts recursively of neuraxis
FROM NAMEDV <top_pre_neuraxis_parts> [
    CONSTRUCT {temp:set temp:member ?part}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE {fma:Neuraxis gleen:OnPath ("([fma:regional_part]|[fma:constitutional_part])*" ?part)}
]
FROM NAMEDV <pre_neuraxis_parts> [
     CONSTRUCT {temp:set temp:member ?part . temp:set temp:member ?c. }
     FROM NAMEDV <top_pre_neuraxis_parts>
     FROM <http://sig.biostr.washington.edu/fma3.0>
     WHERE { GRAPH <top_pre_neuraxis_parts> { ?a ?b ?part } . 
	     OPTIONAL { ?part rdf:type ?c } }
]
# get all inter-part attributed relationship instances (and rels)
FROM NAMEDV <neuraxis_attr_rels_in> [
   CONSTRUCT {?p ?rel ?q}
   FROM <http://sig.biostr.washington.edu/fma3.0>
   WHERE { GRAPH <pre_neuraxis_parts> {temp:set temp:member ?p.}.
           ?p ?rel ?q.
           OPTIONAL {?q rdfs:subClassOf ?super}. FILTER(!bound(?super)).
           FILTER((?rel = fma:attributed_part) || (?rel = fma:related_part)). }
]
# get all inter-part attributed relationship instances (and rels)
FROM NAMEDV <neuraxis_attr_rels_out> [
   CONSTRUCT {?q ?rel2 ?p2.}
   FROM <http://sig.biostr.washington.edu/fma3.0>
   WHERE { GRAPH <pre_neuraxis_parts> {temp:set temp:member ?p2.}.
           ?q ?rel2 ?p2.
           OPTIONAL {?q rdfs:subClassOf ?super}. FILTER(!bound(?super)).
           FILTER((?rel2 = fma:attributed_part) || (?rel2 = fma:related_part)). }
]
# get all inter-part attributed relationship instances (and rels)
FROM NAMEDV <neuraxis_attr_rels> [
   CONSTRUCT {temp:set temp:member ?q. 
	      temp:rel_set temp:member ?rel. 
	      temp:rel_set temp:member ?rel2.}
   FROM <http://sig.biostr.washington.edu/fma3.0>
   WHERE { GRAPH <neuraxis_attr_rels_in> {?p ?rel ?q.}.
           GRAPH <neuraxis_attr_rels_out> {?q ?rel2 ?p2.}. }
]
# get all inter-part attributed instances types 
FROM NAMEDV <neuraxis_parts> [
	CONSTRUCT {temp:set temp:member ?p. 
		  temp:set temp:member fma:Concept_name.
		  temp:set temp:member fma:Query_Atlas_term.
		  temp:set temp:member fma:Neurolex_term.
		  temp:set temp:member fma:AAL_term. }
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { { GRAPH <pre_neuraxis_parts> {temp:set temp:member ?p}
    	    } UNION {
	      GRAPH <neuraxis_attr_rels> {temp:set temp:member ?q.}
   	      ?q rdf:type ?p.
   	    } }
]
# build graph containing all properties of all classes identified so far
FROM NAMEDV <neuraxis_parts_graph> [
    CONSTRUCT {?p ?rel ?obj}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE {GRAPH <neuraxis_parts> {temp:set temp:member ?p}. ?p ?rel ?obj .}
]
# get all properties which either connect two of the parts above or connects a part to a literal
FROM NAMEDV <neuraxis_parts_props> [
	CONSTRUCT { temp:set temp:member ?b. 
		    temp:set temp:member ?e. 
		    temp:set temp:member ?rel.
		    temp:set temp:member fma:Preferred_name.
		    temp:set temp:member fma:Synonym.
		    temp:set temp:member fma:Non-English_equivalent.
		    temp:set temp:member fma:Query_Atlas.
		    temp:set temp:member fma:Neurolex.
		    temp:set temp:member fma:AAL. }
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { { GRAPH <neuraxis_parts_graph> {?a ?b ?c}. FILTER isLiteral(?c) 
	    } UNION {
	      GRAPH <neuraxis_parts_graph> {?d ?e ?f}.
	      GRAPH <neuraxis_parts> {temp:set temp:member ?f}.
	    } UNION {
	      GRAPH <neuraxis_attr_rels> {temp:rel_set temp:member ?rel.}
	    } }
]
# Our view only includes a small number of Non-physical_anatomical_entity_template
# (and subClass) instances. Build up a list of things to exclude.
FROM NAMEDV <stoppingPoint> [
     CONSTRUCT { temp:set temp:member ?a .}
     FROM <http://sig.biostr.washington.edu/fma3.0>     
     WHERE { ?a gleen:OnPath ("[rdfs:subClassOf]*" fma:Non-physical_anatomical_entity_template) . }
]
FROM NAMEDV <exclusionTypes> [
     CONSTRUCT { temp:set temp:member ?b }
     FROM <http://sig.biostr.washington.edu/fma3.0>     
     WHERE { GRAPH <stoppingPoint> { ?ts ?tm ?a . }
	     ?b rdf:type ?a .
	     FILTER ( ?b != fma:AAL_term && 
		    ?b != fma:Concept_name &&
		    ?b != fma:Neuro_term &&
		    ?b != fma:Neurolex_term &&
		    ?b != fma:Non-physical_anatomical_entity_template &&
		    ?b != fma:Organ_part_of_relationship_value &&
		    ?b != fma:Organ_subdivision_part_of_relationship_value &&
		    ?b != fma:Part_of_relationship_value &&
		    ?b != fma:Query_Atlas_term &&
		    ?b != fma:Structural_relationship_value ) . }
]
# determine superclasses, superproperties, and types
# add nodes connected to blank nodes and recurse on these
FROM NAMEDV <pre_neuraxis_parts_ext> [
    CONSTRUCT {temp:set temp:member ?c.}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    FROM NAMEDV <exclusionTypes>
    WHERE { { GRAPH <neuraxis_parts> {temp:set temp:member ?c}. 
	      OPTIONAL {GRAPH <exclusionTypes> {?ts temp:member ?c}.}. FILTER (!bound(?ts)) .
	    } UNION {
		GRAPH <neuraxis_parts_props> {temp:set temp:member ?c}.
		OPTIONAL {GRAPH <exclusionTypes> {?ts temp:member ?c}.}. FILTER (!bound(?ts)) .
	    } }
    UNION
    CONSTRUCT {temp:set temp:member ?v.}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    FROM NAMEDV <exclusionTypes>
    FROM NAMEDV <pre_neuraxis_parts_ext>
    WHERE { GRAPH <pre_neuraxis_parts_ext> {temp:set temp:member ?c.}
            {?c rdf:type ?v.} UNION {?c rdfs:subClassOf ?v} UNION {?c rdfs:subPropertyOf ?v} UNION
            {?c ?rel ?v. FILTER (isBlank(?c) && !isLiteral(?v)).}.
            OPTIONAL {GRAPH <exclusionTypes> {?ts temp:member ?v}.} . FILTER (!bound(?ts)) . }
]
# add in attributed instances
FROM NAMEDV <neuraxis_parts_ext> [
    CONSTRUCT {temp:set temp:member ?p. temp:set temp:member ?q. temp:set temp:member ?cn.}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { { GRAPH <pre_neuraxis_parts_ext> {temp:set temp:member ?p}. 
              OPTIONAL { {?p fma:Preferred_name ?cn.}UNION
                         {?p fma:Synonym ?cn.}UNION
                         {?p fma:Non-English_equivalent ?cn.}UNION
		         {?p fma:Query_Atlas ?cn.}UNION
		         {?p fma:Neurolex ?cn.}UNION
		         {?p fma:AAL ?cn.} }
    	    } UNION {
    	      GRAPH <neuraxis_attr_rels> {temp:set temp:member ?q}.
    	    } }
]
# build graph containing all properties of all classes identified so far
FROM NAMEDV <neuraxis_parts_ext_graph> [
    CONSTRUCT {?p ?rel ?obj}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE {GRAPH <neuraxis_parts_ext> {temp:set temp:member ?p}. ?p ?rel ?obj .}
]
# build graph containing only properties connecting two classes in ext or a class in ext to a literal
FROM NAMEDV <neuraxis_view_wo_props> [
    CONSTRUCT {?a ?b ?c. ?d ?e ?f.}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { { GRAPH <neuraxis_parts_ext_graph> {?a ?b ?c}. FILTER isLiteral(?c) 
            } UNION {
	      GRAPH <neuraxis_parts_ext_graph> {?d ?e ?f}.
	      GRAPH <neuraxis_parts_ext> {temp:set temp:member ?f}.
	    } }
]
# determine superclasses, superproperties, and types
# add nodes connected to blank nodes and recurse on these
FROM NAMEDV <pre_neuraxis_parts_props_ext> [
    CONSTRUCT {temp:set temp:member ?c.}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE  { { # we need to define all of the properties that are going to be held in the result graph
		GRAPH <neuraxis_view_wo_props> { ?uns ?c ?uno }
	     } UNION { # see if we had any restrictions on properties; if we did, we need to define those properties fully 
		GRAPH <pre_neuraxis_parts_ext> {temp:set temp:member ?c}. 
		?r rdf:type owl:Restriction . ?r owl:onProperty ?c .
	     } UNION {
		GRAPH <neuraxis_parts_props> {temp:set temp:member ?c}.
	     } }
    UNION
    CONSTRUCT {temp:set temp:member ?v.}
    FROM <http://sig.biostr.washington.edu/fma3.0>
    FROM NAMEDV <pre_neuraxis_parts_props_ext>
    WHERE { GRAPH <pre_neuraxis_parts_props_ext> {temp:set temp:member ?c.}
            {?c rdf:type ?v.} UNION {?c rdfs:subClassOf ?v} UNION {?c rdfs:subPropertyOf ?v} UNION
            {?c ?rel ?v. FILTER (isBlank(?c) && !isLiteral(?v)).}. }
]
FROM NAMEDV <rec_pre_neuraxis_parts_props_ext> [
     CONSTRUCT { ?c ?d ?e }
     FROM <http://sig.biostr.washington.edu/fma3.0>
     WHERE { GRAPH <pre_neuraxis_parts_props_ext> { temp:set temp:member ?c } .
	     ?c ?d ?e . 
	     OPTIONAL {GRAPH <neuraxis_parts_ext> { ?ts temp:member ?e } } .
	     FILTER (isBlank(?e) || isLiteral(?e) || bound(?ts) ||
		    (!bound(?ts) && !regex(str(?e),"http://sig.biostr.washington.edu/fma3.0")) ). }
     UNION
     CONSTRUCT { ?e ?f ?g }
     FROM <http://sig.biostr.washington.edu/fma3.0>
     FROM NAMEDV <rec_pre_neuraxis_parts_props_ext> 
     WHERE { GRAPH <rec_pre_neuraxis_parts_props_ext> { ?c ?d ?e } .FILTER isBlank(?e) .
	     ?e ?f ?g . 
	     OPTIONAL {GRAPH <neuraxis_parts_ext> { ?ts temp:member ?g } .} .
	     FILTER (isBlank(?g) || isLiteral(?g) || bound(?ts) ||
		    (!bound(?ts) && !regex(str(?g),"http://sig.biostr.washington.edu/fma3.0")) ). }
]
FROM NAMEDV <neuraxis_view> [
    CONSTRUCT {?a ?b ?c. ?d ?e ?f.
	?ontS ?ontP owl:Ontology . ?ontS ?anyOntP ?anyOntO .
    }
    FROM <http://sig.biostr.washington.edu/fma3.0>
    WHERE { { GRAPH <neuraxis_view_wo_props> {?a ?b ?c}.
	    } UNION {
	      GRAPH <rec_pre_neuraxis_parts_props_ext> {?d ?e ?f}.
	    } UNION {
	      ?ontS ?ontP owl:Ontology .
	      OPTIONAL { ?ontS ?anyOntP ?anyOntO . }
            } }
]
####################################################################################
# Fixup the generated NeuroFMA
####################################################################################
# Find all of the RDF list nodes that do not have an element; 
# recursively follow the list until it either hits a node with
# an element or it hits rdf:nil. Track the node that points
# to this errant list and the entire set of reachable nodes
# before the errant list has an element.
FROM NAMEDV <identify_rdfListEmptyNodes> [
    CONSTRUCT { ?a rdf:rest ?b .	# to be changed
	        ?b temp:rest ?c . 	# to be deleted
	        ?a temp:starts ?b .	# first node in rest list
	        ?a temp:reaches ?c . 	# reachability list
    }
    FROM NAMEDV <neuraxis_view>
    WHERE { GRAPH <neuraxis_view> {
                ?a rdf:first ?noop .
                ?a rdf:rest ?b .
                OPTIONAL { ?b rdf:first ?a_bogus } . FILTER(!bound(?a_bogus)) .
                ?b rdf:rest ?c . 
            } }
    UNION
    CONSTRUCT { ?a ?pred ?b .	# to be changed
	        ?b temp:rest ?c .	# to be deleted
	        ?a temp:starts ?b . # first node in rest list
	        ?a temp:reaches ?c . # reachability list
    }
    FROM NAMEDV <neuraxis_view>
    WHERE { GRAPH <neuraxis_view> {
    	        ?a ?pred ?b . FILTER(?pred != rdf:rest) .
    	        ?b rdf:rest ?c . 
	        OPTIONAL { ?b rdf:first ?b_bogus } . FILTER(!bound(?b_bogus)) .
            } }
    UNION
    CONSTRUCT { ?c temp:rest ?d .	# to be deleted
	        ?a temp:reaches ?d . # reachability list
    }
    FROM NAMEDV <identify_rdfListEmptyNodes>
    FROM NAMEDV <neuraxis_view>
    WHERE { GRAPH <identify_rdfListEmptyNodes> { ?a temp:reaches ?c . } .
            GRAPH <neuraxis_view> {
	      OPTIONAL { ?c rdf:first ?noop } . FILTER(!bound(?noop)) .
	      ?c rdf:rest ?d . 
          } }
]
# Eliminate all of the edges corresponding to RDF lists elements with no value
FROM NAMEDV <remove_rdfListEmptyNodes> [
     CONSTRUCT { ?x ?y ?z . }
     FROM NAMEDV <identify_rdfListEmptyNodes>
     FROM NAMEDV <neuraxis_view>
     WHERE { GRAPH <neuraxis_view> { ?x ?y ?z . }
	     OPTIONAL { GRAPH <identify_rdfListEmptyNodes> { ?x ?ynot ?z } . 
	   	        FILTER(?ynot=temp:rest && ?y=rdf:rest) } . 
             FILTER(!bound(?ynot)) . }
]
# Remove all of the edges to the start of RDF lists containing empty nodes; 
# we replace these edges with new edges in <add_startEdgeRdfListEmptyNodes>
FROM NAMEDV <remove_startEdgeRdfListEmptyNodes> [
     CONSTRUCT { ?q ?r ?s .}
     FROM NAMEDV <identify_rdfListEmptyNodes> 
     FROM NAMEDV <remove_rdfListEmptyNodes>
     WHERE { GRAPH <remove_rdfListEmptyNodes> { ?q ?r ?s . } .
	     OPTIONAL { GRAPH <identify_rdfListEmptyNodes> { ?q ?r ?t } . FILTER(?s = ?t) } .
	     FILTER(!bound(?t)) . }
]
# Add in the new edges to the RDF lists containing empty nodes
FROM NAMEDV <add_startEdgeRdfListEmptyNodes> [
     CONSTRUCT { ?t ?u ?v .
	         ?a2 ?pred2 ?d2 .
     }
     FROM NAMEDV <identify_rdfListEmptyNodes>
     FROM NAMEDV <remove_startEdgeRdfListEmptyNodes>
     FROM NAMEDV <neuraxis_view>
     WHERE { { GRAPH <remove_startEdgeRdfListEmptyNodes> { ?t ?u ?v  }
             } UNION {
	       GRAPH <identify_rdfListEmptyNodes> { 
	     	   ?a2 temp:starts ?b2 .
	     	   ?a2 ?pred2 ?gone2 . 
		   FILTER(!REGEX(str(?pred2),"http://sig.biostr.washington.edu/temp#") ) .
		   ?a2 temp:reaches ?d2 . }
  	       GRAPH <neuraxis_view> { OPTIONAL {  ?d2 rdf:first ?nxt2 } . }
	       FILTER( (?d2 = rdf:nil) || bound(?nxt2) ) . 
             } }
]
########################################################################################
########################################################################################
# Find owl:unionOf statements that have RDF lists of 0 or 1 elements.
# Replace the owl:unionOf statements with either the element or rdf:nil.
FROM NAMEDV <removed_shortUnionOfs> [
     CONSTRUCT { ?q ?r ?s .
	         ?before1 ?pred1 ?c1 .
	         ?before2 ?pred2 rdf:nil .
     }
     FROM NAMEDV <add_startEdgeRdfListEmptyNodes> 
     # Find owl:unionOfs that have 0 or 1 element.
     FROM NAMEDV <identify_shortUnionOfs> [
          CONSTRUCT { 
	      ?before1 ?pred1 ?a1 .
	      ?a1 owl:unionOf ?b1 .
	      ?a1 rdf:type owl:Class .
	      ?b1 rdf:first ?c1 .
	      ?b1 rdf:rest rdf:nil .
	      ?before2 ?pred2 ?a2 .
	      ?a2 owl:unionOf ?b2 .
	      ?a2 rdf:type owl:Class .
	      ?b2 rdf:rest rdf:nil .
         }
         FROM NAMEDV <add_startEdgeRdfListEmptyNodes> 
     	 WHERE { { GRAPH <add_startEdgeRdfListEmptyNodes> {
			?before1 ?pred1 ?a1 .
	        	?a1 owl:unionOf ?b1 .
	        	?a1 rdf:type owl:Class .
	        	?b1 rdf:first ?c1 .
	        	?b1 rdf:rest rdf:nil .
		   }
                 } UNION {
		   GRAPH <add_startEdgeRdfListEmptyNodes> {
 	           	?before2 ?pred2 ?a2 .
	        	?a2 owl:unionOf ?b2 .
	        	?a2 rdf:type owl:Class .
	        	OPTIONAL { ?b2 rdf:first ?c2 . } . FILTER(!bound(?c2)) .
	        	?b2 rdf:rest rdf:nil .
                   }
	         } }
     ]
     WHERE { { GRAPH <add_startEdgeRdfListEmptyNodes> { ?q ?r ?s . }
     	       OPTIONAL { GRAPH <identify_shortUnionOfs> { ?q ?r ?t . FILTER(?s = ?t) } }
	       FILTER(!bound(?t)) .
             } UNION {
	       GRAPH <identify_shortUnionOfs> {
	     	   ?before1 ?pred1 ?a1 .
		   ?a1 owl:unionOf ?b1 .
		   ?b1 rdf:first ?c1 . 
		   ?b1 rdf:rest rdf:nil .
	       }
             } UNION {
	       GRAPH <identify_shortUnionOfs> {
	     	   ?before2 ?pred2 ?a2 .
		   ?a2 owl:unionOf ?b2 .
		   OPTIONAL { ?b2 rdf:first ?c2 . } . FILTER(!bound(?c2)) . }
		   ?b2 rdf:rest rdf:nil .
	     } }
]
########################################################################################
########################################################################################
# Remove all owl:allValuesFrom that have empty owl:unionOf lists.
FROM NAMEDV <remove_emptyAllValuesFrom> [
     CONSTRUCT { ?a ?b ?c . }
     FROM NAMEDV <removed_shortUnionOfs> 
     # identify allValuesFrom with empty RDF lists
     FROM NAMEDV <identify_emptyAllValuesFrom> [
         CONSTRUCT { ?x owl:allValuesFrom ?allB .
	             ?allB rdf:type owl:Class .
	             ?allB owl:unionOf rdf:nil .
         }
         FROM NAMEDV <removed_shortUnionOfs> 
         WHERE { GRAPH <removed_shortUnionOfs> {
                     ?x owl:allValuesFrom ?allB .
                     ?allB rdf:type owl:Class .
                     ?allB owl:unionOf rdf:nil .
                 } }
     ]
     WHERE { GRAPH <removed_shortUnionOfs> { ?a ?b ?c . }
	     OPTIONAL { GRAPH <identify_emptyAllValuesFrom> { ?a ?b ?cnot . FILTER(?c=?cnot) } } .
	     FILTER(!bound(?cnot)) . }
]
########################################################################################
########################################################################################
# remove the set of owl:Restrictions that do not have values associated with
# owl:onProperty restrictions
FROM NAMEDV <remove_emptyOwlOnPropertyRestrictions> [
     CONSTRUCT { ?a ?b ?c . }
     FROM NAMEDV <remove_emptyAllValuesFrom> 
     # identify the set of owl:Restrictions that do not have values associated with
     # owl:onProperty restrictions
     FROM NAMEDV <identify_emptyOwlOnPropertyRestrictions> [
         CONSTRUCT { ?x rdfs:subClassOf ?owlrestrict .
	             ?owlrestrict rdf:type owl:Restriction .
	             ?owlrestrict owl:onProperty ?onprop .
         }
         FROM NAMEDV <remove_emptyAllValuesFrom> 
         WHERE { 
	          GRAPH <remove_emptyAllValuesFrom> {
  	       	       ?x rdfs:subClassOf ?owlrestrict .
		       ?owlrestrict rdf:type owl:Restriction .
   	     	       ?owlrestrict owl:onProperty ?onprop .
	     	       OPTIONAL { ?owlrestrict ?anyp ?anyo . 
		       		  FILTER((?anyp!=rdf:type)&&(?anyp!=owl:onProperty)) . }
	               FILTER(!bound(?anyp)) . 
                  } }
      ]
      WHERE { GRAPH <remove_emptyAllValuesFrom> { ?a ?b ?c . }
	      OPTIONAL { GRAPH <identify_emptyOwlOnPropertyRestrictions> { ?a ?b ?cnot . FILTER(?c=?cnot) } } .
	      FILTER(!bound(?cnot)) . }
]
WHERE {	GRAPH <remove_emptyOwlOnPropertyRestrictions> { ?x ?y ?z } }
    PREFIX nci: <http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl#>
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX user:<http://localhost/userFriendlyNCIT#>
CONSTRUCT 
{ 
	?selected user:simplified_relationship [[user:relationship(?sel_label,?prop_label,?val_label)]] .
	[[user:relationship(?sel_label,?prop_label,?val_label)]] user:label ?sel_label .
	[[user:relationship(?sel_label,?prop_label,?val_label)]] user:propertyLabel ?prop_label .
	[[user:relationship(?sel_label,?prop_label,?val_label)]] user:valueLabel ?val_label .
}
FROM <http://ncicb.nci.nih.gov/xml/owl/EVS/Thesaurus.owl>
WHERE
{
	?selected rdfs:label "Gastric Mucosa-Associated Lymphoid Tissue Lymphoma"  .
	?selected gleen:OnPath ( "(([rdfs:subClassOf]|[owl:equivalentClass])/([owl:intersectionOf]/[rdf:rest]*/[rdf:first])?)+" ?restriction ) .
	?restriction owl:onProperty ?prop .
	?restriction gleen:OnPath ( "([owl:someValuesFrom]|[owl:allValuesFrom])" ?val ).
	?selected rdfs:label ?sel_label.
	?prop rdfs:label ?prop_label.
	?val rdfs:label ?val_label
}
    PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX set:<http://sig.biostr.washington.edu/set#>
PREFIX fma:<http://sig.biostr.washington.edu/fma3.0#>
PREFIX tst:<http://localhost/tst#>
PREFIX tmp:<http://localhost/tmp#>
PREFIX view:<http://localhost/view#>
CONSTRUCT { ?a ?b ?c }
FROM NAMED <bob> [
CONSTRUCT { ?a view:part ?c. }
FROM <http://sig.biostr.washington.edu/fma3.0>
FROM NAMED <input_list> [  
	CONSTRUCT
	{
		set:set1 set:member fma:Blood_in_left_ventricle.
		set:set1 set:member fma:Mitral_valve.
		set:set1 set:member fma:Wall_of_left_ventricle.
		set:set1 set:member fma:Aortic_valve.
		set:set1 set:member fma:Blood_in_left_atrium.
		set:set1 set:member fma:Wall_of_left_atrium.
	}
	FROM <http://sig.biostr.washington.edu/fma3.0>
	WHERE{}
]
FROM NAMED <temp_hierarchy> [
	CONSTRUCT 
	{
		?z tst:edge ?x.
	}
	FROM NAMED <input_list>
	FROM <http://sig.biostr.washington.edu/fma3.0>
	WHERE
	{
		GRAPH <input_list> {set:set1 set:member ?a.}
		(?a "(([fma:regional_part_of]|[fma:constitutional_part_of])|[fma:contained_in])+" ?b) gleen:Subgraph (?x ?y ?z).
	} 
]
FROM NAMED <restructure> [
     CONSTRUCT { fma:Human_body tmp:inter ?b1 . }
     FROM <temp_hierarchy>
     WHERE { fma:Human_body tst:edge ?b1 }
     UNION
     CONSTRUCT {
     	       ?a1 view:part ?b1 .
	       ?b1 tmp:inter ?c1 .
	       ?b1 tmp:inter ?c2 .
	       ?a1 tmp:inter ?d1 .
	       ?a1 view:part ?b3 .
     }
     FROM <temp_hierarchy>
     FROM NAMED <restructure>
     WHERE {
		{ GRAPH <restructure> { ?a1 tmp:inter ?b1 } .
	    	  ?b1 tst:edge ?c1 .
		  ?b1 tst:edge ?c2 .
		  FILTER(?c1 != ?c2) 
		} UNION {
		  GRAPH <restructure> { ?a1 tmp:inter ?b2 } .
		  ?b2 tst:edge ?d1 .
		  OPTIONAL { ?b2 tst:edge ?d2 . FILTER(?d1 != ?d2) }
		  FILTER( !bound(?d2) ) 
	        } UNION {
		  GRAPH <restructure> { ?a1 tmp:inter ?b3 } .
		  OPTIONAL { ?b3 tst:edge ?e1 } 
		  FILTER( !bound(?e1) ) .
	        }
     }
]
WHERE { GRAPH <restructure> { ?a view:part ?c } }
]
WHERE { GRAPH <bob> { ?a ?b ?c } }
PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX owl:<http://www.w3.org/2002/07/owl#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX fma:<http://sig.biostr.washington.edu/fma3.0#>
CONSTRUCT
{
   ?a ?b ?c .
}
FROM NAMED <heart_parts> [
   CONSTRUCT {fma:Heart fma:part ?object}
   FROM <http://sig.biostr.washington.edu/fma3.0>
   WHERE
   {
       {fma:Heart fma:regional_part ?object}
       UNION
       {fma:Heart fma:constitutional_part ?object}
   }
   UNION
   CONSTRUCT {?a fma:part ?object. ?b fma:part ?object}
   FROM <http://sig.biostr.washington.edu/fma3.0>
   FROM NAMED <heart_parts>
   WHERE
   {
       GRAPH <heart_parts> {?a fma:part ?b} .
       {?b fma:regional_part ?object}
       UNION
       {?b fma:constitutional_part ?object}
   }
]
FROM NAMED <heart_containments> [
   CONSTRUCT {?a fma:contains ?c . ?b fma:contains ?c}
   FROM <http://sig.biostr.washington.edu/fma3.0>
   FROM NAMED <heart_parts>
   WHERE
   {
       GRAPH <heart_parts> {?a fma:part ?b} .
       ?b fma:contains ?c .
   }
]
WHERE
{
   GRAPH <heart_containments> {?a ?b ?c}
}PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX fma:<http://sig.biostr.washington.edu/fma3.0#>
CONSTRUCT { ?d ?part_var ?f . 
            ?g rdfs:subClassOf fma:Organ .
            ?i rdfs:subClassOf ?j .
}
FROM NAMED <extracted_ontology> [
     CONSTRUCT { ?t ?u ?v . }
     FROM NAMED <liver_with_superclasses> [
          CONSTRUCT { ?m ?n ?o . }      
          FROM NAMED <liver_with_classes> [
               CONSTRUCT { ?j ?part_var ?k .
                           ?k rdfs:subClassOf ?l .
			   fma:Liver rdfs:subClassOf ?lc .
               }
               FROM NAMED <subclass> [
                    CONSTRUCT {?x rdfs:subClassOf fma:Organ .
                               fma:Organ rdfs:subClassOf ?w .
                               ?y rdfs:subClassOf fma:Cardinal_organ_part .
                               fma:Cardinal_organ_part rdfs:subClassOf ?z .
                    }    
                    FROM <http://sig.biostr.washington.edu/fma3.0>
                    WHERE { { ?x rdfs:subClassOf fma:Organ . FILTER(!isBlank(?x)) . 
                              fma:Organ rdfs:subClassOf ?w . FILTER(!isBlank(?w)) .
                            }
                            UNION
                            { ?y rdfs:subClassOf fma:Cardinal_organ_part . FILTER(!isBlank(?y)) .
                              fma:Cardinal_organ_part rdfs:subClassOf ?z . FILTER(!isBlank(?z)) .
                            }
                    }
                    UNION
                    CONSTRUCT {?sub ?b ?a .}
                    FROM NAMED <subclass>
                    FROM NAMED <http://sig.biostr.washington.edu/fma3.0>
                    WHERE { GRAPH <subclass> { ?a ?b ?c . } .
                            GRAPH <http://sig.biostr.washington.edu/fma3.0> 
                                  { ?sub ?b ?a . FILTER(!isBlank(?sub)) } .
                    }
               ]
               FROM NAMED <liver> [
                   CONSTRUCT {fma:Liver ?part_var ?obj . }
                   FROM <http://sig.biostr.washington.edu/fma3.0>
                   WHERE { fma:Liver ?part_var ?obj . 
			  FILTER((?part_var =fma:regional_part)||(?part_var=fma:constitutional_part)||(?part_var=fma:systemic_part)) .
                   }
                   UNION
                   CONSTRUCT {?c ?part_var ?d}
                   FROM NAMED <liver>
                   FROM NAMED <http://sig.biostr.washington.edu/fma3.0>
                   WHERE { GRAPH <liver> { ?a ?b ?c . } .
                           GRAPH <http://sig.biostr.washington.edu/fma3.0> { ?c ?part_var ?d . } .
			  FILTER((?part_var =fma:regional_part)||(?part_var=fma:constitutional_part)||(?part_var=fma:systemic_part)) .
                   }
               ]
               FROM <http://sig.biostr.washington.edu/fma3.0> 
               WHERE { { GRAPH <liver> { ?j ?part_var ?k . } . 
                         GRAPH <subclass> { ?k rdfs:subClassOf ?l . FILTER(!isBlank(?l)) .} .
		       } UNION {
			fma:Liver rdfs:subClassOf ?lc . FILTER(!isBlank(?lc)) .
		       }
               }
          ]
          WHERE { GRAPH <liver_with_classes> { ?m ?n ?o . } }
          UNION
          CONSTRUCT {?r rdfs:subClassOf ?s}
          FROM NAMED <liver_with_superclasses>
          FROM NAMED <http://sig.biostr.washington.edu/fma3.0>
          WHERE { GRAPH <liver_with_superclasses> { ?p rdfs:subClassOf ?r . } .
                  GRAPH <http://sig.biostr.washington.edu/fma3.0> 
                        { ?r rdfs:subClassOf ?s . FILTER(!isBlank(?s)) . } .
          }
     ]   
     WHERE { GRAPH <liver_with_superclasses> { ?t ?u ?v . } . }
]
WHERE { GRAPH <extracted_ontology> { 
              { ?d ?part_var ?f . 
	        FILTER((?part_var =fma:regional_part)||(?part_var=fma:constitutional_part)||(?part_var=fma:systemic_part)) .}
              UNION
              { ?g rdfs:subClassOf ?h .
                FILTER ((?h = fma:Cavitated_organ || ?h = fma:Solid_organ))  .
              }
              UNION
              { ?i rdfs:subClassOf ?j .
                FILTER ((?j != fma:Cavitated_organ && ?j != fma:Solid_organ) && (?i != fma:Cavitated_organ) && (?i != fma:Solid_organ)).
              }
      }
}PREFIX rdfs:<http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdf:<http://www.w3.org/1999/02/22-rdf-syntax-ns#>
PREFIX gleen:<java:edu.washington.sig.gleen.>
PREFIX fma:<http://sig.biostr.washington.edu/fma3.0#>
PREFIX opb:<http://sig.biostr.washington.edu/OPB-01.owl#>
PREFIX annot_view:<http://sig.biostr.washington.edu/annot_v1.0#>
CONSTRUCT {
	[[annot_view:annotation(?pob,?property)]] rdf:type rdf:Statement.
	[[annot_view:annotation(?pob,?property)]] rdf:subject ?pob .
	[[annot_view:annotation(?pob,?property)]] rdf:predicate opb:hasProperty.
	[[annot_view:annotation(?pob,?property)]] rdf:object ?property .
}
FROM NAMED <http://sig.biostr.washington.edu/fma3.0>
FROM NAMED <http://sig.biostr.washington.edu/~detwiler/OntViews/OPB/OPB-01.owl>
WHERE {	
	GRAPH <http://sig.biostr.washington.edu/fma3.0>
    	  { ?pob gleen:OnPath ("[rdfs:subClassOf]+" fma:Portion_of_blood). }
	GRAPH <http://sig.biostr.washington.edu/~detwiler/OntViews/OPB/OPB-01.owl>
	  { ?property gleen:OnPath ("[rdfs:subClassOf]+" opb:Kinetic_property) .    
	    ?property opb:Physical_domain_class opb:Fluid_domain .  
	  } 
}