Asgeir,
The ?p is just ignored. The first query does not work because, as I said
below, in RDF a blank node is unnamed, and therefore cannot be addressed
as a name in a SPARQL query. The two articles I cited in the original
mail explain that, and also explain the technique called "skolemizing"
that Virtuoso uses.
The first query returns nothing because of the nature of bnodes. Either
statement works fine alone, but they cannot be used in combination.
kc
On 7/15/14, 12:05 AM, Asgeir Rekkavik wrote:
> In this query you ask for the value of variable ?p, but there is no ?p in your expression. If you asked "SELECT ?s ?o", or simply "SELECT *", your query would return all nodes in the dataset that are linked with the bf:providerName predicate. In this particular example, it would return the URIs for _:genid4 and _:genid5.
>
> Your first query should return the URI for _:genid4 as a value of the variable ?subject and the string "Morrow" as a value for the variable ?label. What happened when you ran it?
>
>
> Asgeir Rekkavik
> Deichmanske bibliotek
> --
>
>
> -----Opprinnelig melding-----
> Fra: Bibliographic Framework Transition Initiative Forum [mailto:[log in to unmask]] På vegne av Karen Coyle
> Sendt: 14. juli 2014 18:32
> Til: [log in to unmask]
> Emne: Re: [BIBFRAME] SPARQL question
>
> WEll, duh, just try it (why didn't I think of that sooner?):
>
> PREFIX bf: <http://bibframe.org/vocab/>
> SELECT ?s ?p ?o
> WHERE {
> ?s bf:providerName ?o .
> }
>
> They aren't bnodes.
>
> kc
>
> On 7/14/14, 8:59 AM, Karen Coyle wrote:
>> Thanks, Kevin.
>>
>> Interestingly, it works on the file (which is the one I created....
>> and you found) in RDF/XML, but after a Rapper transform to TTL or N3,
>> it gets the same results that I get in Protege (no output). So now
>> there's another factor: Rapper vs. Openlink transform to triples
>> (since SPARQL goes against triples). I can't see the OPenlink
>> documentation (I just get an error when I click on the links on that
>> page - I guess you need to be a customer). I wonder if the Openlink
>> transformation creates URIs rather than blank nodes as a way to
>> facilitate searching?
>>
>> I guess another question is whether you intend for those to be blank
>> nodes. Giving them an actual URI would avoid the blank node problems
>> (which seem less evident in the XML form).
>>
>> kc
>>
>> On 7/14/14, 8:18 AM, Ford, Kevin wrote:
>>> Dear Karen,
>>>
>>> Follow these steps:
>>>
>>>
>>> 1) Go to this website:
>>>
>>> http://demo.openlinksw.com/sparql
>>>
>>>
>>> 2) Enter this URL in the "Default Graph URI" field:
>>>
>>> http://bibframe.org/resources/Ahx1405278232/bibframe.rdf
>>>
>>>
>>> 3) Paste (your) query into the "Query Text" field:
>>>
>>> PREFIX bf: <http://bibframe.org/vocab/>
>>> SELECT ?subject ?label
>>> WHERE {
>>> ?subject bf:providerName ?bnode .
>>> ?bnode bf:label ?label .
>>> }
>>>
>>>
>>> 4) Select "Run Query"
>>>
>>>
>>> I get the expected results, so your SPARQL query seems fine (I merely
>>> added a PREFIX declaration). Is it possible this is a problem
>>> specific to Protege?
>>>
>>> Cordially,
>>> Kevin
>>>
>>>
>>> On 07/14/2014 10:52 AM, Karen Coyle wrote:
>>>> I'm hoping someone on this list has the quick answer that will end
>>>> my frustration ;-).
>>>>
>>>> I loaded some BIBFRAME records into Protege (desktop, 5.0, because
>>>> earlier versions have problems in the RDF->OWL transform). I have
>>>> this
>>>> data:
>>>>
>>>> _:genid4 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>>>> <http://bibframe.org/vocab/Provider> .
>>>> _:genid5 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
>>>> <http://bibframe.org/vocab/Organization> .
>>>> _:genid5 <http://bibframe.org/vocab/label> "Morrow" .
>>>> _:genid4 <http://bibframe.org/vocab/providerName> _:genid5 .
>>>> <http://bibframe.org/resources/Ahx1405278232/566369instance27>
>>>> <http://bibframe.org/vocab/publication> _:genid4
>>>>
>>>> [more readable version]
>>>>
>>>> :instance27 bf:publication _:genid4 .
>>>> _:genid4 bf:providerName _:genid5 .
>>>> _:genid5 bf:label "Morrow" .
>>>>
>>>> I want to create a SPARQL query that will select the labels for
>>>> bf:providerName. I thought it would be:
>>>>
>>>> SELECT ?subject ?label
>>>> WHERE { ?subject bf:providerName ?bnode .
>>>> ?bnode bf:label ?label . }
>>>>
>>>> But it turns out that this doesn't work. As I understand it, it is
>>>> because blank nodes are "unnamed" and therefore do not identify a
>>>> particular entity, and cannot be used more than once in a query. See:
>>>> [1][2]
>>>>
>>>> I've hit a dead-end, but surely there is a solution -- possibly
>>>> right in front of me but I'm not seeing it.
>>>>
>>>> Thanks,
>>>> kc
>>>>
>>>>
>>>> [1]
>>>> http://answers.semanticweb.com/questions/1673/skolem-syntax-for-blan
>>>> k-nodes-in-sparql
>>>>
>>>>
>>>> [2]
>>>> http://stackoverflow.com/questions/20629437/sparql-query-with-blank-
>>>> node-can-be-complex
>>>>
>>>>
>>>>
> --
> Karen Coyle
> [log in to unmask] http://kcoyle.net
> m: 1-510-435-8234
> skype: kcoylenet
--
Karen Coyle
[log in to unmask] http://kcoyle.net
m: 1-510-435-8234
skype: kcoylenet
|