Or even using "optional"? Bye. sb SELECT ?personLabel ?archivesAtLabel ?describedAt WHERE { ?person wdt:P106 wd:Q49757; wdt:P135 wd:Q213457; p:P485 ?archivesStatement. OPTIONAL { ?archivesStatement ps:P485 ?archivesAt; pq:P973 ?describedAt. } SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". } } ORDER BY (?personLabel)
> On 9 Mar 2022, at 16:16, Karly Wildenhaus > <0000009c04ed8d24-dmarc-requ...@lists.clir.org> wrote: > > Hi Eric, > > This should work, although others with more SPARQL experience may have > suggestions on how to simplify it: > > SELECT ?personLabel ?archivesAtLabel ?describedAt WHERE { >> ?person wdt:P106 wd:Q49757; >> wdt:P135 wd:Q213457; >> p:P485 ?archivesStatement. >> ?archivesStatement ps:P485 ?archivesAt; >> pq:P973 ?describedAt. >> SERVICE wikibase:label { bd:serviceParam wikibase:language >> "[AUTO_LANGUAGE],en". } >> } >> ORDER BY (?personLabel) > > Try it! ↗ <https://w.wiki/4w2G> > > My understanding is that you need to retrieve the entire statement for P485 > (?archivesStatement) using p: instead of wdt:, and *then* retrieve the > value and the qualifier (using pq:). > > If you want to retrieve even those poets without a P973 qualifier for P485, > you can add an "optional" wrapper around the P973 line (link > <https://w.wiki/4w2J>). > > Hope this helps! > Karly > > On Wed, Mar 9, 2022 at 9:07 AM Eric Lease Morgan <emor...@nd.edu> wrote: > >> How can I write a WikiData SPARQL query to return the URLs of a special >> collection? >> >> I have the following query: >> >> SELECT ?personLabel ?archivesatLabel WHERE { >> ?person wdt:P106 wd:Q49757; >> wdt:P135 wd:Q213457; >> wdt:P485 ?archivesat. >> SERVICE wikibase:label { bd:serviceParam wikibase:language >> "[AUTO_LANGUAGE],en". } >> } >> ORDER BY (?person) >> >> The query finds people who are beatnik poets and have archival >> collections. The query outputs a little table such as this: >> >> personLabel archivesatLabel >> Ira Cohen Beinecke Rare >> Tuli Kupferberg Fales Library >> Michael McClure University of Victoria >> Jack Kerouac Harry Ransom Center >> Jack Kerouac University of Victoria >> Jack Kerouac Stuart A. Rose Manuscript >> John Wieners University of Delaware >> >> This is nice, but some of the artchivesat properties also point to URL's >> where the archives are described in greater detail. See, for example, the >> "record" for Ed Dorn: >> >> https://www.wikidata.org/wiki/Q5334756 >> >> I want these URL's returned in my query, and the result would look >> something like this: >> >> personLabel archivesatLabel describedat >> Ira Cohen Beinecke Rare http://foobfhdhar.edu/ >> Tuli Kupferberg Fales Library http://fafdsasdfobar.edu/ >> Michael McClure University of Victoria http://foasdfar.edu/ >> Jack Kerouac Harry Ransom Center http://fossbar.edu/ >> Jack Kerouac University of Victoria http://foobasr.edu/ >> Jack Kerouac Stuart A. Rose Manuscript http://foobar.edu/ >> John Wieners University of Delaware http://fasdoobar.edu/ >> >> But the following does NOT work: >> >> SELECT ?personLabel ?archivesatLabel ?describedat WHERE { >> ?person wdt:P106 wd:Q49757; >> wdt:P135 wd:Q213457; >> wdt:P485 ?archivesat; >> wdt:P973 ?describedat. >> SERVICE wikibase:label { bd:serviceParam wikibase:language >> "[AUTO_LANGUAGE],en". } >> } >> ORDER BY (?person) >> >> >> What am I doing wrong? Do I need an additional prefix? How can I get the >> URLs associated with describedat to be included in the output? >> >> -- >> Eric Morgan >> University of Notre Dame >> >