Hi Kingsley, Do you mean that if I modify the query in a following way it should work without any problem?
PREFIX: sq:<http://our_schema><http://our_schema> SELECT * FROM <http://this_is_the_graph_name > WHERE { ?customer sq:hasOrder ?order . ?order sq:hasGoods ?goods . ?goods sq:Name ?goodsName . FILTER (?goodsName in ('Name1', 'Name2')) . ?goods sq:hasSubCategory ?subCategory . #note that subcategory is IRI ?subCategory sq:hasParentCategory ?category #note that category is IRI }; Thank you. Best regards, Alexander Efimov. From: Kingsley Idehen [mailto:kide...@openlinksw.com] Sent: Monday, December 14, 2015 11:49 PM To: virtuoso-users@lists.sourceforge.net Subject: Re: [Virtuoso-users] Find out which SQL query is generated from my SPARQL On 12/14/15 11:34 AM, Efimov, Alexander wrote: Hi Kingsley, The idea is that our concept model I map to with R2RML is not the same as source tables. So just using output from Generate RDF Views would not work. I write custom R2RML code which maps from flat DB model to graph concept model For example: Let it be the following tables: 1. Goods a. ID Integer b. Name String c. Category String d. SubCategory String 2. Customer a. ID Integer b. Name String 3. Order a. ID Integer b. Goods ID Integer c. Customer ID Integer These three tables map to our Concept model which is a bit different from table structure and I'm executing SPARQL Query like this: PREFIX: sq:<http://our_schema><http://our_schema> SELECT * FROM <http://this_is_the_graph_name > WHERE { ?customer sq:hasOrder ?order . ?order sq:hasGoods ?goods . ?goods sq:Name ?goodsName . FILTER (?goodsName in ('Name1', 'Name2')) . ?goods sq:hasSubCategory ?subCategory . #note that subcategory is IRI ?subCategory a sq:SubCategory . ?subCategory sq:hasParentCategory ?category #note that category is IRI ?subCategory a sq:Category . }; In my particular case I map data from ~10 views to ~13 classes in our concept model and WHERE statement is a bit longer. You have a number of rdf:type relations in your query which pose problems unless you leverage the use of physical triples sync'd with transient triples (the product of loading your r2rml mappings). Command: RDF_VIEW_SYNC_TO_PHYSICAL ('{virtual-triples-named-graph-iri}', 1, '{physical-triples-named-graph-iri}'); Example: Given a named-graph containing virtual triples (result of loading your r2rml declarations) identified by the IRI <http://demo.openlinksw.com/SQLServer#><http://demo.openlinksw.com/SQLServer>, you could make the physical sync replica using a named-graph that holds physical triples identified by the IRI: <urn:demo.openlinksw.com:SQLServer> using the command: RDF_VIEW_SYNC_TO_PHYSICAL ('http://demo.openlinksw.com/SQLServer#<http://demo.openlinksw.com/SQLServer>', 1, 'urn:demo.openlinksw.com:SQLServer'); Virtuoso will keep <urn:demo.openlinksw.com:SQLServer> in sync with <http://demo.openlinksw.com/SQLServer#><http://demo.openlinksw.com/SQLServer> and that named graph should be the target of queries that are scoped to rdf:type relations. Links: [1] http://kidehen.blogspot.com/2015/07/conceptual-data-virtualization-across.html [2] http://docs.openlinksw.com/virtuoso/fn_rdf_view_sync_to_physical.html . -- Regards, Kingsley Idehen Founder & CEO OpenLink Software Company Web: http://www.openlinksw.com Personal Weblog 1: http://kidehen.blogspot.com Personal Weblog 2: http://www.openlinksw.com/blog/~kidehen Twitter Profile: https://twitter.com/kidehen Google+ Profile: https://plus.google.com/+KingsleyIdehen/about LinkedIn Profile: http://www.linkedin.com/in/kidehen Personal WebID: http://kingsley.idehen.net/dataspace/person/kidehen#this
------------------------------------------------------------------------------
_______________________________________________ Virtuoso-users mailing list Virtuoso-users@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/virtuoso-users