You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@jena.apache.org by Adam Davies <ad...@gmail.com> on 2020/03/18 21:10:07 UTC
Nested SELECT queries
Dear all,
I have been attempting to use jena fuseki to perform a query on a large dataset. However, due to the nature of this dataset, and my current inexperience with jena fuseki - being a new user for a project in education - after some research into jena fuseki I found myself coming to the conclusion that I would need to nest my select queries to order my data in a human-readable fashion that I could work through efficiently. When I came to write these nested queries though, I was immediately given an error after the first nest. Due to my lack of experience, I have struggled to find a solution to this problem, and came here for advice. Is anyone able to help me? I have attached aforementioned code below:
SELECT ?creatorName ?creatorCountry
WHERE
{#BEGINMAINSELECT
?creatorName ?predicate ?creatorCountry
{#BEGINNEST1
SELECT ?creatorCountry
WHERE
{
?locationName <http://www.w3.org/2000/01/rdf-schema#label> ?creatorCountry#Find out the human-readable name of the location the publication was presented at via it's reference
}
{#BEGINNEST2
SELECT ?locationName
WHERE
{
?locationInfo <http://purl.org/NET/c4dm/event.owl#place> ?locationName#Find out the name reference of the location the publication was presented at
}
{#BEGINNEST3
SELECT ?locationInfo
WHERE
{
?publication <http://purl.org/ontology/bibo/presentedAt> ?locationInfo#Select each publication retrieved from the below query and find out where they were presented at
}
{#BEGINNEST4
SELECT ?publication
WHERE
{
?publication <http://purl.org/ontology/bibo/presentedAt> ?place#Select all publications with predicate 'presented at'
}
}#ENDNEST4
}#ENDNEST3
}#ENDNEST2
}#ENDNEST1
}
LIMIT 500
Re: Nested SELECT queries
Posted by Andy Seaborne <an...@apache.org>.
On 19/03/2020 15:12, Adam Davies wrote:
> Thanks for the reply!
>
> In terms of what I’m trying to get back, I was hoping to list in one row a list of names, and in another a list of locations (which you’ve helped me solve).
>
> The dataset I am working with contains information about published articles and presentations. What I was hoping to do was to isolate all of the presentations, and then list where they took place and list whoever created the presentation to get a list of all of the creators and the locations they have visited. However, since the human-readable data of names is behind a reference that is unreadable, I was lead to the idea that nesting my queries would allow me to achieve this - as shown.
>
> I’m still having trouble getting jena fuseki to list the creator’s names beside their respective locations. Using the code you provided, I tried to make a separate query (which would be the second half of the first) to do the same with creator names. While this seems to run, it outputs nothing:
> PREFIX bibo: <http://purl.org/ontology/bibo/>
> PREFIX event: <http://purl.org/NET/c4dm/event.owl#>
> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> PREFIX foaf: <http://xmlns.com/foaf/0.1/>
> SELECT ?creatorName ?creatorCountry
> WHERE
> {
> ?creatorName ?predicate ?creatorCountry .
> ?creatorInfo foaf:name ?creatorName .
> ?publication <http://purl.org/dc/terms/creator> ?creatorInfo .
> ?publication bibo:presentedAt ?place . ##1
> }
> LIMIT 500
All the parts of the pattern must match.
?creatorName ?predicate ?creatorCountry .
matches anything if there are any triples.
You can remove the line marked ##1. If does nothing much for finding
?creatorName ?creatorCountry but it must match something.
?publication bibo:presentedAt ?place . ##1
then if you still have nothing, one or both of
?creatorInfo foaf:name ?creatorName .
?publication <http://purl.org/dc/terms/creator> ?creatorInfo .
does not match.
Remove one line of the query and try that. When you find the one line
that makes a difference, that may explain what's going on.
And check the URIs are right.
Andy
Re: Nested SELECT queries
Posted by Adam Davies <ad...@gmail.com>.
Thanks for the reply!
In terms of what I’m trying to get back, I was hoping to list in one row a list of names, and in another a list of locations (which you’ve helped me solve).
The dataset I am working with contains information about published articles and presentations. What I was hoping to do was to isolate all of the presentations, and then list where they took place and list whoever created the presentation to get a list of all of the creators and the locations they have visited. However, since the human-readable data of names is behind a reference that is unreadable, I was lead to the idea that nesting my queries would allow me to achieve this - as shown.
I’m still having trouble getting jena fuseki to list the creator’s names beside their respective locations. Using the code you provided, I tried to make a separate query (which would be the second half of the first) to do the same with creator names. While this seems to run, it outputs nothing:
PREFIX bibo: <http://purl.org/ontology/bibo/>
PREFIX event: <http://purl.org/NET/c4dm/event.owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX foaf: <http://xmlns.com/foaf/0.1/>
SELECT ?creatorName ?creatorCountry
WHERE
{
?creatorName ?predicate ?creatorCountry .
?creatorInfo foaf:name ?creatorName .
?publication <http://purl.org/dc/terms/creator> ?creatorInfo .
?publication bibo:presentedAt ?place . ##1
}
LIMIT 500
On 2020/03/18 22:25:57, Andy Seaborne <an...@apache.org> wrote:
> Hi Adam,
>
> PREFIX bibo: <http://purl.org/ontology/bibo/>
> PREFIX event: <http://purl.org/NET/c4dm/event.owl#>
> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
> SELECT ?creatorName ?creatorCountry
> WHERE
> {
> ?creatorName ?predicate ?creatorCountry .
> ?locationName rdfs:label ?creatorCountry .
> ?locationInfo event:place ?locationName .
> ?publication bibo:presentedAt ?locationInfo .
> ?publication bibo:presentedAt ?place . ##1
> } LIMIT 500
>
>
> and the last part (##1) does not add anything but may cause duplication
> of results.
>
> The output order of rows is not fixed.
>
> What output are trying to get back?
>
> On 18/03/2020 21:10, Adam Davies wrote:
> > Dear all,
> > I have been attempting to use jena fuseki to perform a query on a large dataset. However, due to the nature of this dataset, and my current inexperience with jena fuseki - being a new user for a project in education - after some research into jena fuseki I found myself coming to the conclusion that I would need to nest my select queries to order my data in a human-readable fashion that I could work through efficiently. When I came to write these nested queries though, I was immediately given an error after the first nest.
>
> > Due to my lack of experience, I have struggled to find a solution to this problem, and came here for advice. Is anyone able to help me? I have attached aforementioned code below:
> > SELECT ?creatorName ?creatorCountry
> > WHERE
> > {#BEGINMAINSELECT
> > ?creatorName ?predicate ?creatorCountry
> > {#BEGINNEST1
> > SELECT ?creatorCountry
> > WHERE
> > {
> > ?locationName <http://www.w3.org/2000/01/rdf-schema#label> ?creatorCountry#Find out the human-readable name of the location the publication was presented at via it's reference
> > }
> > {#BEGINNEST2
>
> There's a syntax error at line #BEGINNEST2
>
> Was this meant? It removes the "}" on the line before #BEGINNEST2
>
> SELECT ?a ?b ?c {
> ?a :p [] .
> { SELECT ?b { ?b :q ?x
> { SELECT ?d { ?d :q ?y
> { SELECT ?c { ?c :q ?z
> }}
> }}
> }}
> }
>
>
>
>
> > SELECT ?locationName
> > WHERE
> > {
> > ?locationInfo <http://purl.org/NET/c4dm/event.owl#place> ?locationName#Find out the name reference of the location the publication was presented at
> > }
> > {#BEGINNEST3
> > SELECT ?locationInfo
> > WHERE
> > {
> > ?publication <http://purl.org/ontology/bibo/presentedAt> ?locationInfo#Select each publication retrieved from the below query and find out where they were presented at
> > }
> > {#BEGINNEST4
> > SELECT ?publication
> > WHERE
> > {
> > ?publication <http://purl.org/ontology/bibo/presentedAt> ?place#Select all publications with predicate 'presented at'
> > }
> > }#ENDNEST4
> > }#ENDNEST3
> > }#ENDNEST2
> > }#ENDNEST1
> > }
> > LIMIT 500
> >
>
Re: Nested SELECT queries
Posted by Andy Seaborne <an...@apache.org>.
Hi Adam,
PREFIX bibo: <http://purl.org/ontology/bibo/>
PREFIX event: <http://purl.org/NET/c4dm/event.owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?creatorName ?creatorCountry
WHERE
{
?creatorName ?predicate ?creatorCountry .
?locationName rdfs:label ?creatorCountry .
?locationInfo event:place ?locationName .
?publication bibo:presentedAt ?locationInfo .
?publication bibo:presentedAt ?place . ##1
} LIMIT 500
and the last part (##1) does not add anything but may cause duplication
of results.
The output order of rows is not fixed.
What output are trying to get back?
On 18/03/2020 21:10, Adam Davies wrote:
> Dear all,
> I have been attempting to use jena fuseki to perform a query on a large dataset. However, due to the nature of this dataset, and my current inexperience with jena fuseki - being a new user for a project in education - after some research into jena fuseki I found myself coming to the conclusion that I would need to nest my select queries to order my data in a human-readable fashion that I could work through efficiently. When I came to write these nested queries though, I was immediately given an error after the first nest.
> Due to my lack of experience, I have struggled to find a solution to this problem, and came here for advice. Is anyone able to help me? I have attached aforementioned code below:
> SELECT ?creatorName ?creatorCountry
> WHERE
> {#BEGINMAINSELECT
> ?creatorName ?predicate ?creatorCountry
> {#BEGINNEST1
> SELECT ?creatorCountry
> WHERE
> {
> ?locationName <http://www.w3.org/2000/01/rdf-schema#label> ?creatorCountry#Find out the human-readable name of the location the publication was presented at via it's reference
> }
> {#BEGINNEST2
There's a syntax error at line #BEGINNEST2
Was this meant? It removes the "}" on the line before #BEGINNEST2
SELECT ?a ?b ?c {
?a :p [] .
{ SELECT ?b { ?b :q ?x
{ SELECT ?d { ?d :q ?y
{ SELECT ?c { ?c :q ?z
}}
}}
}}
}
> SELECT ?locationName
> WHERE
> {
> ?locationInfo <http://purl.org/NET/c4dm/event.owl#place> ?locationName#Find out the name reference of the location the publication was presented at
> }
> {#BEGINNEST3
> SELECT ?locationInfo
> WHERE
> {
> ?publication <http://purl.org/ontology/bibo/presentedAt> ?locationInfo#Select each publication retrieved from the below query and find out where they were presented at
> }
> {#BEGINNEST4
> SELECT ?publication
> WHERE
> {
> ?publication <http://purl.org/ontology/bibo/presentedAt> ?place#Select all publications with predicate 'presented at'
> }
> }#ENDNEST4
> }#ENDNEST3
> }#ENDNEST2
> }#ENDNEST1
> }
> LIMIT 500
>