dotnetrdf - Retrieving Specific RDF Graph Triples Based on Predicate Nodes -


i using dotnetrdf send sparql construct query , evaluate resulting igraph.

for start, trying find uri nodes represent individuals of given type, say,

http://www.example.com/interestingthing 

so, use gettripleswithpredicateobject method, passing http://www.w3.org/1999/02/22-rdf-syntax-ns#type predicate , http://www.example.com/interestingthing object. method expects 2 objects implementing inode interface, trying find respective nodes graph's geturinode method.

problem: predicate not found.

when looking @ igraph object in debugger, seems geturinode can find contained in nodes enumeration of graph - , contains uri nodes have been used subjects or objects, none used predicates.

now, predicate uri nodes evidently there - can see them when exploring triples object of graph. appear in triple instances can retrieved directly object, , can found in predicatenodes property of same object.

interestingly, querying methods of igraph such gettripleswithobject or gettripleswithpredicate have overloads accept mere uri instead of inode - gettripleswithpredicateobject not.

now, various possible workarounds obvious:

  • use overload of gettripleswithpredicate takes uri instance, filter resulting triples manually.
  • manually search through triples desired triples.
  • manually search through list of predicatenodes , find ones searched uris.

all of these seem unnecessarily cumbersome, though - existing methods suggest @ first glance 1 should able use geturinode retrieve 2 nodes , pass 1 of ready-made querying methods such gettripleswithobjectpredicate.

therefore, question is:

am missing anything, either in dotnetrdf library or conceptually, in rdf, or behavior obstacles poses developers design?

here c# test case reproduce problem (querying dbpedia):

using system; using system.collections.generic; using system.linq;  using vds.rdf; using vds.rdf.query;  namespace test {     class program     {         public static void main(string[] args)         {             // querying             // entries analyze declared belong temporary type, ,             // 2 properties mapped temporary property identifiers.              console.writeline();              var endpoint = new sparqlremoteendpoint(new uri("http://dbpedia.org/sparql"));              string query = "prefix dbpedia-owl: <http://dbpedia.org/ontology/>\n"                 + "prefix ex: <http://www.example.com/>\n"                 + "\n"                 + "construct {\n"                 + "  ?r ex:record.\n"                 + "  ?r ex:prop1 ?v1.\n"                 + "  ?r ex:prop2 ?v2.\n"                 + "}\n"                 + "where {\n"                 + "  {\n"                 + "    select ?r\n"                 + "    {\n"                 + "      ?r dbpedia-owl:work.\n"                 + "      filter(exists { ?r dbpedia-owl:originallanguage [] } && exists { ?r dbpedia-owl:author/dbpedia-owl:birthplace [] }).\n"                 + "    } limit 5\n"                 + "  }\n"                 + "  ?r dbpedia-owl:originallanguage ?v1.\n"                 + "  ?r dbpedia-owl:author/dbpedia-owl:birthplace ?v2.\n"                 + "}";              console.writeline(query);             console.writeline();              igraph graph = endpoint.querywithresultgraph(query);              printnodes("igraph.nodes", graph.nodes);              console.writeline("all triples igraph.triples:");             foreach (var triple in graph.triples) {                 console.writeline("- s: " + nodetostring(triple.subject));                 console.writeline("  p: " + nodetostring(triple.predicate));                 console.writeline("  o: " + nodetostring(triple.object));             }             console.writeline();              printnodes("igraph.triples.subjectnodes", graph.triples.subjectnodes);             printnodes("igraph.triples.predicatenodes", graph.triples.predicatenodes);             printnodes("igraph.triples.objectnodes", graph.triples.objectnodes);              // graph analysis             // following code tries retrieve items of temporary             // type "record".              var typenode = tryfindurinode(graph, new uri(namespacemapper.rdf + "type"));             var recordnode = tryfindurinode(graph, new uri("http://www.example.com/record"));              console.writeline();             tryfindallnodes("subjects", graph, graph.triples.subjectnodes.oftype<iurinode>().select(node => node.uri));             tryfindallnodes("predicates", graph, graph.triples.predicatenodes.oftype<iurinode>().select(node => node.uri));             tryfindallnodes("objects", graph, graph.triples.objectnodes.oftype<iurinode>().select(node => node.uri));             console.writeline();              var createdtypenode = graph.createurinode(new uri(namespacemapper.rdf + "type"));             var createdrecordnode = graph.createurinode(new uri("http://www.example.com/record"));              if ((typenode != null) && (recordnode != null)) {                 console.writeline("{0} triple(s) found predicate , found object.",                                   graph.gettripleswithpredicateobject(typenode, recordnode).count());             }             if (typenode != null) {                 console.writeline("{0} triple(s) found predicate , created object.",                                   graph.gettripleswithpredicateobject(typenode, createdrecordnode).count());             }             if (recordnode != null) {                 console.writeline("{0} triple(s) created predicate , found object.",                                   graph.gettripleswithpredicateobject(createdtypenode, recordnode).count());             }             console.writeline("{0} triple(s) created predicate , created object.",                               graph.gettripleswithpredicateobject(createdtypenode, createdrecordnode).count());         }          private static string nodetostring(inode node)         {             return string.format("{0} ({1})", node, node.gettype().name);         }          private static void printnodes(string title, ienumerable<inode> nodes)         {             console.writeline(title + ":");             foreach (var node in nodes) {                 console.writeline("- " + nodetostring(node));             }             console.writeline();         }          private static inode tryfindurinode(igraph graph, uri uri)         {             var result = graph.geturinode(uri);             if (result == null) {                 console.writeline(uri.tostring() + " not found igraph.geturinode.");             } else {                 console.writeline(uri.tostring() + " found igraph.geturinode.");             }             return result;         }          private static void tryfindallnodes(string title, igraph graph, ienumerable<uri> uris)         {             console.writeline("trying find " + title + ":");             foreach (uri uri in uris) {                 tryfindurinode(graph, uri);             }         }     } } 

this output of sample program:

prefix dbpedia-owl: <http://dbpedia.org/ontology/> prefix ex: <http://www.example.com/>  construct {   ?r ex:record.   ?r ex:prop1 ?v1.   ?r ex:prop2 ?v2. } {   {     select ?r     {       ?r dbpedia-owl:work.       filter(exists { ?r dbpedia-owl:originallanguage [] } && exists { ?r dbpedia-owl:author/dbpedia-owl:birthplace [] }).     } limit 5   }   ?r dbpedia-owl:originallanguage ?v1.   ?r dbpedia-owl:author/dbpedia-owl:birthplace ?v2. }  igraph.nodes: - http://dbpedia.org/resource/electra_(sophocles) (urinode) - http://dbpedia.org/resource/peer_gynt (urinode) - http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode) - http://dbpedia.org/resource/the_field (urinode) - http://dbpedia.org/resource/the_lady_from_the_sea (urinode) - http://www.example.com/record (urinode) - http://dbpedia.org/resource/ancient_greek (urinode) - http://dbpedia.org/resource/colonus (urinode) - http://dbpedia.org/resource/norwegian_language (urinode) - http://dbpedia.org/resource/skien (urinode) - http://dbpedia.org/resource/norway (urinode) - http://dbpedia.org/resource/czech_language (urinode) - http://dbpedia.org/resource/kingdom_of_bohemia (urinode) - http://dbpedia.org/resource/bohemia (urinode) - http://dbpedia.org/resource/mal%c3%a9_svato%c5%88ovice (urinode) - http://dbpedia.org/resource/austria-hungary (urinode) - http://dbpedia.org/resource/english_language (urinode) - http://dbpedia.org/resource/irish_free_state (urinode) - http://dbpedia.org/resource/listowel (urinode) - http://dbpedia.org/resource/county_kerry (urinode)  triples igraph.triples: - s: http://dbpedia.org/resource/electra_(sophocles) (urinode)   p: http://www.w3.org/1999/02/22-rdf-syntax-ns#type (urinode)   o: http://www.example.com/record (urinode) - s: http://dbpedia.org/resource/electra_(sophocles) (urinode)   p: http://www.example.com/prop1 (urinode)   o: http://dbpedia.org/resource/ancient_greek (urinode) - s: http://dbpedia.org/resource/electra_(sophocles) (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/colonus (urinode) - s: http://dbpedia.org/resource/peer_gynt (urinode)   p: http://www.w3.org/1999/02/22-rdf-syntax-ns#type (urinode)   o: http://www.example.com/record (urinode) - s: http://dbpedia.org/resource/peer_gynt (urinode)   p: http://www.example.com/prop1 (urinode)   o: http://dbpedia.org/resource/norwegian_language (urinode) - s: http://dbpedia.org/resource/peer_gynt (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/skien (urinode) - s: http://dbpedia.org/resource/peer_gynt (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/norway (urinode) - s: http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode)   p: http://www.w3.org/1999/02/22-rdf-syntax-ns#type (urinode)   o: http://www.example.com/record (urinode) - s: http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode)   p: http://www.example.com/prop1 (urinode)   o: http://dbpedia.org/resource/czech_language (urinode) - s: http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/kingdom_of_bohemia (urinode) - s: http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/bohemia (urinode) - s: http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/mal%c3%a9_svato%c5%88ovice (urinode) - s: http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/austria-hungary (urinode) - s: http://dbpedia.org/resource/the_field (urinode)   p: http://www.w3.org/1999/02/22-rdf-syntax-ns#type (urinode)   o: http://www.example.com/record (urinode) - s: http://dbpedia.org/resource/the_field (urinode)   p: http://www.example.com/prop1 (urinode)   o: http://dbpedia.org/resource/english_language (urinode) - s: http://dbpedia.org/resource/the_field (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/irish_free_state (urinode) - s: http://dbpedia.org/resource/the_field (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/listowel (urinode) - s: http://dbpedia.org/resource/the_field (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/county_kerry (urinode) - s: http://dbpedia.org/resource/the_lady_from_the_sea (urinode)   p: http://www.w3.org/1999/02/22-rdf-syntax-ns#type (urinode)   o: http://www.example.com/record (urinode) - s: http://dbpedia.org/resource/the_lady_from_the_sea (urinode)   p: http://www.example.com/prop1 (urinode)   o: http://dbpedia.org/resource/norwegian_language (urinode) - s: http://dbpedia.org/resource/the_lady_from_the_sea (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/skien (urinode) - s: http://dbpedia.org/resource/the_lady_from_the_sea (urinode)   p: http://www.example.com/prop2 (urinode)   o: http://dbpedia.org/resource/norway (urinode)  igraph.triples.subjectnodes: - http://dbpedia.org/resource/electra_(sophocles) (urinode) - http://dbpedia.org/resource/peer_gynt (urinode) - http://dbpedia.org/resource/pictures_from_the_insects'_life (urinode) - http://dbpedia.org/resource/the_field (urinode) - http://dbpedia.org/resource/the_lady_from_the_sea (urinode)  igraph.triples.predicatenodes: - http://www.w3.org/1999/02/22-rdf-syntax-ns#type (urinode) - http://www.example.com/prop1 (urinode) - http://www.example.com/prop2 (urinode)  igraph.triples.objectnodes: - http://www.example.com/record (urinode) - http://dbpedia.org/resource/ancient_greek (urinode) - http://dbpedia.org/resource/colonus (urinode) - http://dbpedia.org/resource/norwegian_language (urinode) - http://dbpedia.org/resource/skien (urinode) - http://dbpedia.org/resource/norway (urinode) - http://dbpedia.org/resource/czech_language (urinode) - http://dbpedia.org/resource/kingdom_of_bohemia (urinode) - http://dbpedia.org/resource/bohemia (urinode) - http://dbpedia.org/resource/mal%c3%a9_svato%c5%88ovice (urinode) - http://dbpedia.org/resource/austria-hungary (urinode) - http://dbpedia.org/resource/english_language (urinode) - http://dbpedia.org/resource/irish_free_state (urinode) - http://dbpedia.org/resource/listowel (urinode) - http://dbpedia.org/resource/county_kerry (urinode)  trying find subjects: http://dbpedia.org/resource/electra_(sophocles) found igraph.geturinode. http://dbpedia.org/resource/peer_gynt found igraph.geturinode. http://dbpedia.org/resource/pictures_from_the_insects'_life found igraph.geturinode. http://dbpedia.org/resource/the_field found igraph.geturinode. http://dbpedia.org/resource/the_lady_from_the_sea found igraph.geturinode. trying find predicates: http://www.w3.org/1999/02/22-rdf-syntax-ns#type not found igraph.geturinode. http://www.example.com/prop1 not found igraph.geturinode. http://www.example.com/prop2 not found igraph.geturinode. trying find objects: http://www.example.com/record found igraph.geturinode. http://dbpedia.org/resource/ancient_greek found igraph.geturinode. http://dbpedia.org/resource/colonus found igraph.geturinode. http://dbpedia.org/resource/norwegian_language found igraph.geturinode. http://dbpedia.org/resource/skien found igraph.geturinode. http://dbpedia.org/resource/norway found igraph.geturinode. http://dbpedia.org/resource/czech_language found igraph.geturinode. http://dbpedia.org/resource/kingdom_of_bohemia found igraph.geturinode. http://dbpedia.org/resource/bohemia found igraph.geturinode. http://dbpedia.org/resource/mal‚_svatonovice found igraph.geturinode. http://dbpedia.org/resource/austria-hungary found igraph.geturinode. http://dbpedia.org/resource/english_language found igraph.geturinode. http://dbpedia.org/resource/irish_free_state found igraph.geturinode. http://dbpedia.org/resource/listowel found igraph.geturinode. http://dbpedia.org/resource/county_kerry found igraph.geturinode.  http://www.w3.org/1999/02/22-rdf-syntax-ns#type not found igraph.geturinode. http://www.example.com/record found igraph.geturinode. 5 triple(s) created predicate , found object. 5 triple(s) created predicate , created object. 

as can seen, igraph.nodes enumeration not include predicate uris such http://www.example.com/prop1 or http://www.w3.org/1999/02/22-rdf-syntax-ns#type. likewise, output shows predicates not found geturinode, while subjects , objects are.

you can use createurinode inodefactory (which igraph extends) create rdf:type node, , have like:

graph.gettripleswithpredicateobject(   graph.createurinode( urifactory.createuri( "http://www.w3.org/1999/02/22-rdf-syntax-ns#type" )), ,   graph.createurinode( urifactory.createuri( "http://www.example.com/interestingthing" )) ) 

this similar approach i'd take in jena, i'd use resourcefactory.createproperty( http://...ns#type ). (actually, jena has constant rdf.type convenience i'd use, approach i'd use 1 wasn't defined constant ahead of time.)


Comments

Popular posts from this blog

basic authentication with http post params android -

vb.net - Virtual Keyboard commands -

css - Firefox for ubuntu renders wrong colors -