Sample queries: Difference between revisions

From Black Bibliography Project
Jump to navigation Jump to search
No edit summary
 
(35 intermediate revisions by 4 users not shown)
Line 1: Line 1:
Until we can update the Query Service to include our own sample queries, let's list those here...
= Sample queries =


== Instance count ==
== Instance count ==
To get an overview of what's in the BBP, the following query will return a count of all of the different instances, such as works, people, and places.
To get an overview of what's in the BBP, the following query will return a count of all of the different instances, such as works, people, and places.
<pre>
<pre>
SELECT ?typeLabel (count(distinct ?x) as ?count)
SELECT ?typeLabel (count(distinct ?x) as ?count)
Line 18: Line 13:
order by desc(?count)
order by desc(?count)
</pre>
</pre>
[http://tinyurl.com/vr66u8a Try it out!]
 
== First 100 Works (now more than 100) ==
Get a list of all of the works <br/>
(as of 2019-11, that's exactly 100 works!)
<pre>
SELECT ?work ?workLabel (count(distinct ?edition) as ?editions)
(min(?year) as ?earliestPublicationDate)
(GROUP_CONCAT(distinct ?authorLabel; SEPARATOR="; ") as ?authors)
(GROUP_CONCAT(distinct ?literaryFormLabel; SEPARATOR="; ") as ?format)
WHERE
{
  ?work wdt:P8 wd:Q4 .
  OPTIONAL { ?work wdt:P90 ?author . ?author rdfs:label ?authorLabel }
  OPTIONAL { ?work wdt:P11 ?literaryForm . ?literaryForm rdfs:label ?literaryFormLabel }
  OPTIONAL { ?edition wdt:P13 ?work . ?edition p:P29|p:P32 ?pubStatement }
  OPTIONAL { ?pubStatement pq:P31 ?date .
            BIND(str(YEAR(?date)) AS ?year) }
  ?work rdfs:label ?workLabel .
}
group by ?work ?workLabel
order by ?workLabel
</pre>
 
==Poems By Author in Aggregated Work==
Return a network map of all poems by Gwendolyn Brooks that are included in an aggregated work.
<pre>
#title: Gwendolyn Brooks Poems
#defaultView:Graph
SELECT ?work ?workLabel ?aggworkLabel WHERE {
  ?work wdt:P90 wd:Q1418;
    wdt:P118 ?aggwork.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}
</pre>
 
== Author Gallery ==
Return a list of everyone in the BBP listed as an author, as long as they also have a picture in Wikimedia commons, and sort the results by the total number of works listed.
<pre>
PREFIX wd_1: <http://www.wikidata.org/entity/>
PREFIX wdt_1: <http://www.wikidata.org/prop/direct/>
 
SELECT distinct ?person ?personLabel ?pic (COUNT(distinct ?work) as ?workCount)
WHERE
{
    ?person wdt:P8 wd:Q3 .
    ?person rdfs:label ?personLabel .
    ?person wdt:P107 ?wid .
    ?person ^wdt:P90 ?work .
    BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?wikidataURI )
    SERVICE <https://query.wikidata.org/sparql> {
    ?wikidataURI wdt_1:P18 ?pic .
    }
}
group by ?person ?personLabel ?pic
order by desc(?workCount)
</pre>
 
 
== Birthplaces ==
Map the birth places for everyone listed in the BBP, using coordinate data from Wikidata
<pre>
PREFIX wd_1: <http://www.wikidata.org/entity/>
PREFIX wdt_1: <http://www.wikidata.org/prop/direct/>
 
SELECT distinct ?person ?personLabel ?pob ?pobLabel ?coords
 
WITH {
  SELECT ?person WHERE {
    ?item wdt:P8 wd:Q3 .
    ?item wdt:P107 ?wid .
    BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?person )
  }
} AS %people
 
WHERE {
  include %people
  SERVICE <https://query.wikidata.org/sparql> {
    ?person wdt_1:P19 ?pob .
    ?pob wdt_1:P625 ?coords .
    ?person rdfs:label ?personLabel .
      FILTER((LANG(?personLabel)) = "en")
    ?pob rdfs:label ?pobLabel .
      FILTER((LANG(?pobLabel)) = "en")
    }
}
</pre>
 
 
== Authors with works in a Serial ==
<pre>
#Authors with works that appeared in the Journal of Black Poetry
SELECT ?author ?authorLabel ?issue ?issueLabel
WHERE {
  ?work wdt:P90 ?author ; #work has author
          wdt:P118 ?issue . #work appears in issue
  ?issue wdt:P111 wd:Q2261 . #issue is issue of JBP
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
</pre>
 
 
== Narrative Publication Overview ==
<pre>
prefix wd_1: <http://www.wikidata.org/entity/>
prefix wdt_1: <http://www.wikidata.org/prop/direct/>
 
select ?work ?edition ?publisher (year(?date) as ?publicationYear) (count(*) as ?editionsPublishedAtThisLocation) ?coords {
?work wdt:P11 wd:Q28 .
?edition wdt:P13 ?work ; wdt:P29 ?publisher .
?edition ?has ?pubStmt .
?pubStmt ps:P29 ?publisher ; pq:P30 ?place ; pq:P31 ?date .
?place wdt:P107 ?wid .
?publisher rdfs:label ?pubLabel .
?place rdfs:label ?placeLabel .
 
  BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?placeMatch )
 
  SERVICE <https://query.wikidata.org/sparql> {
      ?placeMatch wdt_1:P625 ?coords .
    }
}
group by ?work ?edition ?publisher ?date ?coords ?pubLabel ?placeLabel
</pre>
 
 
== Edition count by year and genre ==
<pre>
SELECT ?year (COUNT(?_genreLabel) AS ?count ) (SAMPLE(?_genreLabel) AS ?genreLabel )  WHERE {
  ?edition wdt:P8 wd:Q7 .
  ?edition p:P29 ?pubStatement .
  ?pubStatement pq:P31 ?date .           
  BIND(str(YEAR(?date)) AS ?year)
  ?edition wdt:P13 ?work .
  ?work wdt:P11 ?literaryForm .
  ?literaryForm rdfs:label ?_genreLabel
}
GROUP BY ?_genreLabel ?year
ORDER BY ?year
</pre>
 
 
== Page counts, down the line ==
<pre>
# List of stuff numbered by pages, in order
# look at Table view…. and at Line view.  What’s different?  Why?
#defaultView:LineChart
SELECT ?item ?itemLabel ?pages
WHERE
{
    ?item ?b ?statement.
    ?statement pq:P34 ?pages.
    SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY desc(?pages)
</pre>
 
 
 
== Illustration Overview ==
<pre>
# How many and which titles are illustrated?
# Works that have editions that are marked as illustrated.
 
SELECT ?workLabel (GROUP_CONCAT(distinct ?illLabel; SEPARATOR="; ") as ?illustrationLabel)
(GROUP_CONCAT(distinct ?x; SEPARATOR="; ") as ?illustrationOverview)
(GROUP_CONCAT(distinct ?illustratorLabel; SEPARATOR="; ") as ?illustrator)
(count(distinct ?edition) as ?editionCount)
(GROUP_CONCAT(distinct ?editionLabel; SEPARATOR="; ") as ?editions)
(GROUP_CONCAT(distinct ?authorLabel; SEPARATOR="; ") as ?authors)
(min(?year) as ?earliestPublicationDate)
 
WHERE {
  ?edition wdt:P35 ?illustration ; wdt:P13 ?work ; rdfs:label ?editionLabel .
  ?illustration rdfs:label ?illLabel .
  ?work rdfs:label ?workLabel .
  OPTIONAL { ?edition p:P35 ?statement . ?statement pq:P64|pq:P28 ?x .}
  OPTIONAL { ?edition wdt:P79 ?illustrator . ?illustrator rdfs:label ?illustratorLabel }
  OPTIONAL { ?edition p:P29|p:P32 ?pubStatement . ?pubStatement pq:P31 ?date . BIND(str(YEAR(?date)) AS ?year)  }
  OPTIONAL { ?work wdt:P90 ?author . ?author rdfs:label ?authorLabel }
}
group by ?workLabel
order by ?workLabel
</pre>
 
 
== Just the Frontispieces ==
<pre>
#  Just the Frontispieces
# How many titles have frontispieces?
 
 
SELECT ?workLabel ?frontispieceLabel
(GROUP_CONCAT(distinct ?note; SEPARATOR="; ") as ?frontispieceNote)
(count(distinct ?edition) as ?editionCount)
(GROUP_CONCAT(distinct ?editionLabel; SEPARATOR="; ") as ?editions)
(GROUP_CONCAT(distinct ?authorLabel; SEPARATOR="; ") as ?authors)
(min(?year) as ?earliestPublicationDate)
 
WHERE {
  ?edition wdt:P35 wd:Q35 ; wdt:P13 ?work ; rdfs:label ?editionLabel .
  wd:Q35 rdfs:label ?frontispieceLabel .
  ?work rdfs:label ?workLabel .
  OPTIONAL { ?edition p:P35 ?statement . ?statement pq:P64 ?note .}
  OPTIONAL { ?edition p:P29|p:P32 ?pubStatement . ?pubStatement pq:P31 ?date . BIND(str(YEAR(?date)) AS ?year)  }
  OPTIONAL { ?work wdt:P90 ?author . ?author rdfs:label ?authorLabel }
}
group by ?workLabel ?frontispieceLabel
order by ?workLabel
</pre>
 
 
== Andrews List, mapped out ==
<pre>
PREFIX wd_1: <http://www.wikidata.org/entity/>
PREFIX wdt_1: <http://www.wikidata.org/prop/direct/>
 
SELECT * WHERE {
?edition wdt:P13 ?work ;
    wdt:P121 wd:Q1176 ;
    wdt:P29 ?publisher ;
    ?has ?pubStmt .
?pubStmt ps:P29 ?publisher ; pq:P30 ?place .
?place wdt:P107 ?wid .
?publisher rdfs:label ?pubLabel .
?place rdfs:label ?placeLabel .
  BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?placeMatch )
 
  SERVICE <https://query.wikidata.org/sparql> {
      ?placeMatch wdt_1:P625 ?coords .
    }
}
</pre>
[http://172.17.10.220:8834/#%23defaultView%3AMap%0APREFIX%20wd_1%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fentity%2F%3E%0APREFIX%20wdt_1%3A%20%3Chttp%3A%2F%2Fwww.wikidata.org%2Fprop%2Fdirect%2F%3E%0A%0ASELECT%20%2a%20WHERE%20%7B%0A%20%3Fedition%20wdt%3AP13%20%3Fwork%20%3B%0A%20%20%20%20wdt%3AP121%20wd%3AQ1176%20%3B%0A%20%20%20%20wdt%3AP29%20%3Fpublisher%20%3B%0A%20%20%20%20%3Fhas%20%3FpubStmt%20.%0A%20%3FpubStmt%20ps%3AP29%20%3Fpublisher%20%3B%20pq%3AP30%20%3Fplace%20.%0A%20%3Fplace%20wdt%3AP107%20%3Fwid%20.%0A%20%3Fpublisher%20rdfs%3Alabel%20%3FpubLabel%20.%0A%20%3Fplace%20rdfs%3Alabel%20%3FplaceLabel%20.%0A%20%20BIND%28IRI%28CONCAT%28%27http%3A%2F%2Fwww.wikidata.org%2Fentity%2F%27%2C%20%3Fwid%29%29%20AS%20%3FplaceMatch%20%29%0A%20%20%0A%20%20SERVICE%20%3Chttps%3A%2F%2Fquery.wikidata.org%2Fsparql%3E%20%7B%0A%20%20%20%20%20%20%3FplaceMatch%20wdt_1%3AP625%20%3Fcoords%20.%0A%20%20%20%20%7D%0A%7D Try it out!]
 
== Copyright Data ==
<pre>
# How many editions have copyright statements?
# How many of those statements are qualified by rights holder?
# How many of those rights holders were also the author of the work?
 
SELECT
?editionCount
?copyrightedEditionCount
?rightsHolderCount
(xsd:float(?copyrightedEditionCount)/xsd:float(?editionCount) AS ?percentCopyrighted)
(xsd:float(?rightsHolderCount)/xsd:float(?copyrightedEditionCount) AS ?percentWithRightsHolder)
(xsd:float(?authorAsRightsHolderCount)/xsd:float(?rightsHolderCount) AS ?percentWithRightsHolderCopyrightedByAuthor)
WHERE {
 
  {
    SELECT (COUNT(?editionType) AS ?editionCount) WHERE {
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work .
      BIND(bbpq:Q7 AS ?editionType)
    } GROUP BY ?editionType
  }
  {
    SELECT ?editionType (COUNT(?editionType) AS ?copyrightedEditionCount) WHERE {
      ?work bbppd:P8 bbpq:Q4 ; bbppd:P90 ?author .
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work ; bbpp:P19 ?copyRightStmt .
      BIND(bbpq:Q7 AS ?editionType)
    } GROUP BY ?editionType
  }
  {
    SELECT ?editionType (COUNT(?editionType) AS ?rightsHolderCount) WHERE {
      ?work bbppd:P8 bbpq:Q4 ; bbppd:P90 ?author .
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work ; bbpp:P19 ?copyRightStmt .
      ?copyRightStmt bbppq:P20 ?rightsHolder .
      BIND(bbpq:Q7 AS ?editionType)
      #FILTER(?author = ?rightsHolder)
    } GROUP BY ?editionType
  }
  {
    SELECT ?editionType (COUNT(?editionType) AS ?authorAsRightsHolderCount) WHERE {
      ?work bbppd:P8 bbpq:Q4 ; bbppd:P90 ?author .
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work ; bbpp:P19 ?copyRightStmt .
      ?copyRightStmt bbppq:P20 ?rightsHolder .
      BIND(bbpq:Q7 AS ?editionType)
      FILTER(?author = ?rightsHolder)
    } GROUP BY ?editionType
  }
 
}
</pre>

Latest revision as of 18:52, 28 May 2024

Instance count

To get an overview of what's in the BBP, the following query will return a count of all of the different instances, such as works, people, and places.

SELECT ?typeLabel (count(distinct ?x) as ?count)
WHERE
{
  ?x wdt:P8 ?type .
  ?type rdfs:label ?typeLabel.
  FILTER((LANG(?typeLabel)) = "en")
}
group by ?type ?typeLabel
order by desc(?count)

First 100 Works (now more than 100)

Get a list of all of the works
(as of 2019-11, that's exactly 100 works!)

SELECT ?work ?workLabel (count(distinct ?edition) as ?editions) 
(min(?year) as ?earliestPublicationDate)
(GROUP_CONCAT(distinct ?authorLabel; SEPARATOR="; ") as ?authors)
(GROUP_CONCAT(distinct ?literaryFormLabel; SEPARATOR="; ") as ?format)
WHERE
{
  ?work wdt:P8 wd:Q4 .
  OPTIONAL { ?work wdt:P90 ?author . ?author rdfs:label ?authorLabel }
  OPTIONAL { ?work wdt:P11 ?literaryForm . ?literaryForm rdfs:label ?literaryFormLabel }
  OPTIONAL { ?edition wdt:P13 ?work . ?edition p:P29|p:P32 ?pubStatement } 
  OPTIONAL { ?pubStatement pq:P31 ?date . 
            BIND(str(YEAR(?date)) AS ?year) }
  ?work rdfs:label ?workLabel .
}
group by ?work ?workLabel
order by ?workLabel

Poems By Author in Aggregated Work

Return a network map of all poems by Gwendolyn Brooks that are included in an aggregated work.

#title: Gwendolyn Brooks Poems
#defaultView:Graph
SELECT ?work ?workLabel ?aggworkLabel WHERE {
  ?work wdt:P90 wd:Q1418;
    wdt:P118 ?aggwork.
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en". }
}

Author Gallery

Return a list of everyone in the BBP listed as an author, as long as they also have a picture in Wikimedia commons, and sort the results by the total number of works listed.

PREFIX wd_1: <http://www.wikidata.org/entity/>
PREFIX wdt_1: <http://www.wikidata.org/prop/direct/>

SELECT distinct ?person ?personLabel ?pic (COUNT(distinct ?work) as ?workCount)
WHERE
{
    ?person wdt:P8 wd:Q3 .
    ?person rdfs:label ?personLabel .
    ?person wdt:P107 ?wid .
    ?person ^wdt:P90 ?work .
    BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?wikidataURI )
    SERVICE <https://query.wikidata.org/sparql> {
    ?wikidataURI wdt_1:P18 ?pic .
    }
}
group by ?person ?personLabel ?pic
order by desc(?workCount)


Birthplaces

Map the birth places for everyone listed in the BBP, using coordinate data from Wikidata

PREFIX wd_1: <http://www.wikidata.org/entity/>
PREFIX wdt_1: <http://www.wikidata.org/prop/direct/>

SELECT distinct ?person ?personLabel ?pob ?pobLabel ?coords

WITH {
  SELECT ?person WHERE {
    ?item wdt:P8 wd:Q3 .
    ?item wdt:P107 ?wid .
    BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?person )
  }
} AS %people

WHERE {
  include %people
  SERVICE <https://query.wikidata.org/sparql> {
    ?person wdt_1:P19 ?pob .
    ?pob wdt_1:P625 ?coords .
    ?person rdfs:label ?personLabel .
      FILTER((LANG(?personLabel)) = "en")
    ?pob rdfs:label ?pobLabel .
      FILTER((LANG(?pobLabel)) = "en")
    }
}


Authors with works in a Serial

#Authors with works that appeared in the Journal of Black Poetry
SELECT ?author ?authorLabel ?issue ?issueLabel
WHERE {
  ?work wdt:P90 ?author ; #work has author
          wdt:P118 ?issue . #work appears in issue
  ?issue wdt:P111 wd:Q2261 . #issue is issue of JBP
  SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}


Narrative Publication Overview

prefix wd_1: <http://www.wikidata.org/entity/>
prefix wdt_1: <http://www.wikidata.org/prop/direct/>

select ?work ?edition ?publisher (year(?date) as ?publicationYear) (count(*) as ?editionsPublishedAtThisLocation) ?coords {
 
 ?work wdt:P11 wd:Q28 .
 ?edition wdt:P13 ?work ; wdt:P29 ?publisher .
 ?edition ?has ?pubStmt .
 ?pubStmt ps:P29 ?publisher ; pq:P30 ?place ; pq:P31 ?date .
 ?place wdt:P107 ?wid .
 ?publisher rdfs:label ?pubLabel .
 ?place rdfs:label ?placeLabel .

  BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?placeMatch )
  
   SERVICE <https://query.wikidata.org/sparql> {
      ?placeMatch wdt_1:P625 ?coords .
    }
}
group by ?work ?edition ?publisher ?date ?coords ?pubLabel ?placeLabel


Edition count by year and genre

SELECT ?year (COUNT(?_genreLabel) AS ?count ) (SAMPLE(?_genreLabel) AS ?genreLabel )  WHERE {
  ?edition wdt:P8 wd:Q7 .
  ?edition p:P29 ?pubStatement .
  ?pubStatement pq:P31 ?date .            
  BIND(str(YEAR(?date)) AS ?year)
  ?edition wdt:P13 ?work .
  ?work wdt:P11 ?literaryForm .
  ?literaryForm rdfs:label ?_genreLabel
}
GROUP BY ?_genreLabel ?year
ORDER BY ?year


Page counts, down the line

# List of stuff numbered by pages, in order
# look at Table view…. and at Line view.  What’s different?  Why?
#defaultView:LineChart
SELECT ?item ?itemLabel ?pages
WHERE
{
     ?item ?b ?statement.
     ?statement pq:P34 ?pages.
     SERVICE wikibase:label { bd:serviceParam wikibase:language "en". }
}
ORDER BY desc(?pages) 


Illustration Overview

# How many and which titles are illustrated?
#	Works that have editions that are marked as illustrated.

SELECT ?workLabel (GROUP_CONCAT(distinct ?illLabel; SEPARATOR="; ") as ?illustrationLabel)
(GROUP_CONCAT(distinct ?x; SEPARATOR="; ") as ?illustrationOverview)
(GROUP_CONCAT(distinct ?illustratorLabel; SEPARATOR="; ") as ?illustrator)
(count(distinct ?edition) as ?editionCount) 
(GROUP_CONCAT(distinct ?editionLabel; SEPARATOR="; ") as ?editions)
(GROUP_CONCAT(distinct ?authorLabel; SEPARATOR="; ") as ?authors)
(min(?year) as ?earliestPublicationDate)

WHERE { 
  ?edition wdt:P35 ?illustration ; wdt:P13 ?work ; rdfs:label ?editionLabel .
  ?illustration rdfs:label ?illLabel .
  ?work rdfs:label ?workLabel .
  OPTIONAL { ?edition p:P35 ?statement . ?statement pq:P64|pq:P28 ?x .}
  OPTIONAL { ?edition wdt:P79 ?illustrator . ?illustrator rdfs:label ?illustratorLabel }
  OPTIONAL { ?edition p:P29|p:P32 ?pubStatement . ?pubStatement pq:P31 ?date . BIND(str(YEAR(?date)) AS ?year)  } 
  OPTIONAL { ?work wdt:P90 ?author . ?author rdfs:label ?authorLabel }
}
group by ?workLabel
order by ?workLabel


Just the Frontispieces

#  Just the Frontispieces
# How many titles have frontispieces?


SELECT ?workLabel ?frontispieceLabel
(GROUP_CONCAT(distinct ?note; SEPARATOR="; ") as ?frontispieceNote)
(count(distinct ?edition) as ?editionCount) 
(GROUP_CONCAT(distinct ?editionLabel; SEPARATOR="; ") as ?editions)
(GROUP_CONCAT(distinct ?authorLabel; SEPARATOR="; ") as ?authors)
(min(?year) as ?earliestPublicationDate)

WHERE { 
  ?edition wdt:P35 wd:Q35 ; wdt:P13 ?work ; rdfs:label ?editionLabel .
  wd:Q35 rdfs:label ?frontispieceLabel .
  ?work rdfs:label ?workLabel .
  OPTIONAL { ?edition p:P35 ?statement . ?statement pq:P64 ?note .}
  OPTIONAL { ?edition p:P29|p:P32 ?pubStatement . ?pubStatement pq:P31 ?date . BIND(str(YEAR(?date)) AS ?year)  } 
  OPTIONAL { ?work wdt:P90 ?author . ?author rdfs:label ?authorLabel }
}
group by ?workLabel ?frontispieceLabel
order by ?workLabel


Andrews List, mapped out

PREFIX wd_1: <http://www.wikidata.org/entity/>
PREFIX wdt_1: <http://www.wikidata.org/prop/direct/>

SELECT * WHERE {
 ?edition wdt:P13 ?work ;
    wdt:P121 wd:Q1176 ;
    wdt:P29 ?publisher ;
    ?has ?pubStmt .
 ?pubStmt ps:P29 ?publisher ; pq:P30 ?place .
 ?place wdt:P107 ?wid .
 ?publisher rdfs:label ?pubLabel .
 ?place rdfs:label ?placeLabel .
  BIND(IRI(CONCAT('http://www.wikidata.org/entity/', ?wid)) AS ?placeMatch )
  
  SERVICE <https://query.wikidata.org/sparql> {
      ?placeMatch wdt_1:P625 ?coords .
    }
}

Try it out!

Copyright Data

# How many editions have copyright statements?
# How many of those statements are qualified by rights holder?
# How many of those rights holders were also the author of the work?

SELECT
?editionCount
?copyrightedEditionCount
?rightsHolderCount
(xsd:float(?copyrightedEditionCount)/xsd:float(?editionCount) AS ?percentCopyrighted)
(xsd:float(?rightsHolderCount)/xsd:float(?copyrightedEditionCount) AS ?percentWithRightsHolder)
(xsd:float(?authorAsRightsHolderCount)/xsd:float(?rightsHolderCount) AS ?percentWithRightsHolderCopyrightedByAuthor)
WHERE {

  {
    SELECT (COUNT(?editionType) AS ?editionCount) WHERE {
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work .
      BIND(bbpq:Q7 AS ?editionType)
    } GROUP BY ?editionType
  }
  {
    SELECT ?editionType (COUNT(?editionType) AS ?copyrightedEditionCount) WHERE {
      ?work bbppd:P8 bbpq:Q4 ; bbppd:P90 ?author .
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work ; bbpp:P19 ?copyRightStmt .
      BIND(bbpq:Q7 AS ?editionType)
    } GROUP BY ?editionType
  }
  {
    SELECT ?editionType (COUNT(?editionType) AS ?rightsHolderCount) WHERE {
      ?work bbppd:P8 bbpq:Q4 ; bbppd:P90 ?author .
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work ; bbpp:P19 ?copyRightStmt .
      ?copyRightStmt bbppq:P20 ?rightsHolder .
      BIND(bbpq:Q7 AS ?editionType)
      #FILTER(?author = ?rightsHolder)
    } GROUP BY ?editionType
  }
  {
    SELECT ?editionType (COUNT(?editionType) AS ?authorAsRightsHolderCount) WHERE {
      ?work bbppd:P8 bbpq:Q4 ; bbppd:P90 ?author .
      ?edition bbppd:P8 bbpq:Q7 ; bbppd:P13 ?work ; bbpp:P19 ?copyRightStmt .
      ?copyRightStmt bbppq:P20 ?rightsHolder .
      BIND(bbpq:Q7 AS ?editionType)
      FILTER(?author = ?rightsHolder)
    } GROUP BY ?editionType
  }

}