DS Catalog:SPARQL Query Service/example queries: Difference between revisions

Jump to navigation Jump to search
 
(20 intermediate revisions by the same user not shown)
Line 10: Line 10:
The decision to separate but link metadata descriptions from their manuscript objects was purposeful so as not to make any direct claims or assertions about the manuscript object other than its existence (which happens through assignment of a unique persistent identifier: the DS ID). In this way, the DS Record is conceptualized as a document which makes statements about a manuscript object which are not inherent to the manuscript object itself and can be revised at any time. Although the DS data model is designed to have only one DS Record linked to a Manuscript, this conceptualization of descriptive documents as separate from described objects potentially allows many different (and potentially competing) descriptions to be linked to the same object simultaneously.
The decision to separate but link metadata descriptions from their manuscript objects was purposeful so as not to make any direct claims or assertions about the manuscript object other than its existence (which happens through assignment of a unique persistent identifier: the DS ID). In this way, the DS Record is conceptualized as a document which makes statements about a manuscript object which are not inherent to the manuscript object itself and can be revised at any time. Although the DS data model is designed to have only one DS Record linked to a Manuscript, this conceptualization of descriptive documents as separate from described objects potentially allows many different (and potentially competing) descriptions to be linked to the same object simultaneously.


Because of this data structure, unlike traditional library catalogs or search interfaces ([https://search.digital-scriptorium.org/ like the one for the DS Catalog]), users may find that SPARQL queries seem at first circuitous in comparison to other search and retrieval systems. This is because graphs databases like the DS Wikibase are queried on the basis of pattern matching for particular entities (items) and relationships between entities. A machine rapidly traverses the graph finding patterns that match the path indicated by the query. For purposes of querying DS data, that means that seemingly disparate elements of DS Records, Manuscripts, and even [https://catalog.digital-scriptorium.org/entity/Q2 Holding Information] (i.e., information about and assigned by the institution that owns and/or contributes data about a manuscript object) may all need to be invoked as part of a constructed queried in order to get solutions to seemingly simple questions (such as which institutions own items with texts authored by Avicenna). Taking some time to understand the items, properties, and linking structures in the DS data model and its substantiation in the DS Wikibase will help to elucidate how queries of this nature can be constructed.
Because of this data structure, unlike traditional library catalogs or search interfaces ([https://search.digital-scriptorium.org/ like the one for the DS Catalog]), users may find that SPARQL queries seem at first circuitous in comparison to other search and retrieval systems. This is because graphs databases like the DS Wikibase are queried on the basis of pattern matching for particular entities (items) and relationships between entities. A machine rapidly traverses the graph finding patterns that match the path indicated by the query. For purposes of querying DS data, that means that seemingly disparate elements of DS Records, Manuscripts, and even [https://catalog.digital-scriptorium.org/entity/Q2 Holding Information] (i.e., information about and assigned by the institution that owns and/or contributes data about a manuscript object) may all need to be invoked as part of a constructed queried in order to get solutions to seemingly simple questions ([https://catalog.digital-scriptorium.org/query/#%23%20prefixes%0APREFIX%20wd%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fentity%2F%3E%0APREFIX%20wds%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fentity%2Fstatement%2F%3E%0APREFIX%20wdv%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fvalue%2F%3E%0APREFIX%20wdt%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fdirect%2F%3E%0APREFIX%20p%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2F%3E%0APREFIX%20ps%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fstatement%2F%3E%0APREFIX%20pq%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fqualifier%2F%3E%0APREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%0A%23%20find%20manuscript%20records%20with%20authors%20recorded%0ASELECT%20%3Frecord%20%3FrecordLabel%20%3FnameString%20%3FauthorLabel%20%3FinstitutionLabel%20%3Fshelfmark%0AWHERE%20%7B%0A%20%20%0A%23%20author%20is%20Avicenna%0AVALUES%20%3Fauthor%20%7B%20wd%3AQ2845%20%7D%0A%20%20%0A%23%20bind%20query%20variables%0A%20%20BIND%28p%3AP14%20AS%20%3FnameAsRecordedStatement%29.%0A%20%20BIND%28pq%3AP15%20AS%20%3FhasRole%29.%0A%20%20BIND%28ps%3AP14%20AS%20%3FnameAsRecorded%29.%0A%20%20BIND%28pq%3AP17%20AS%20%3FhasName%29.%0A%20%20BIND%28wdt%3AP3%20AS%20%3Fdescribes%29.%0A%20%20BIND%28wdt%3AP2%20AS%20%3FhasHoldingInformation%29.%0A%20%20BIND%28p%3AP5%20AS%20%3FhasInstitutionStatement%29.%0A%20%20BIND%28pq%3AP4%20AS%20%3FhasInstitution%29.%0A%20%20BIND%28wdt%3AP8%20AS%20%3FhasShelfmark%29.%0A%20%20%0A%23%20statement%3A%20manuscript%20record%20has%20statement%20for%20associated%20name%0A%20%20%3Frecord%20%3FnameAsRecordedStatement%20%3FnameStatement%20.%0A%23%20statement%3A%20name%20statement%20has%20name%20object%20recorded%20as%20string%20value%0A%20%20%3FnameStatement%20%3FnameAsRecorded%20%3FnameString%20.%0A%23%20statement%3A%20associated%20name%20has%20role%20of%20author%0A%20%20%3FnameStatement%20%3FhasRole%20wd%3AQ18%20.%0A%23%20statement%3A%20name%20statement%20has%20qualifier%20for%20structured%2Fauthority%20value%20%22Avicenna%22%0A%20%20%3FnameStatement%20%3FhasName%20%3Fauthor%20.%0A%23%20statement%3A%20manuscript%20record%20describes%20manuscript%20object%0A%20%20%3Frecord%20%3Fdescribes%20%3Fmanuscript%20.%0A%23%20statement%3A%20manuscript%20has%20holding%20information%0A%20%20%3Fmanuscript%20%3FhasHoldingInformation%20%3Fholding%20.%0A%23%20statement%3A%20holding%20has%20statement%20about%20holding%20institution%0A%20%20%3Fholding%20%3FhasInstitutionStatement%20%3FinstitutionStatement%20.%0A%23%20statement%3A%20institution%20statement%20is%20qualified%20by%20authority%20value%0A%20%20%3FinstitutionStatement%20%3FhasInstitution%20%3Finstitution%20.%0A%23%20statement%3A%20holding%20has%20statement%20about%20shelfmark%0A%20%20%3Fholding%20%3FhasShelfmark%20%3Fshelfmark%20.%0A%0A%0A%23%20return%20English%20language%20labels%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%2Cen%22.%0A%20%20%7D%0A%20%20%7D%0AORDER%20BY%20%3FrecordLabel such as which institutions own items with texts authored by Avicenna]). Taking some time to understand the items, properties, and linking structures in the DS data model and its substantiation in the DS Wikibase will help to elucidate how queries of this nature can be constructed.


To help users better understand how queries are constructed, the example queries found below provide comments (which are proceeded by # tags) to explain how clauses and asserted triple patterns function in the context of a query. We hope that working through some of these examples will allow users to construct their own more complex queries as they learn more about how the DS data model operates in concert with their research questions.
To help users better understand how queries are constructed, the example queries found below provide comments (which are proceeded by # tags) to explain how clauses and asserted triple patterns function in the context of a query. We hope that working through some of these examples will allow users to construct their own more complex queries as they learn more about how the DS data model operates in concert with their research questions.
Line 28: Line 28:
<https://catalog.digital-scriptorium.org/entity/Q88> <https://catalog.digital-scriptorium.org/prop/direct/P16> <https://catalog.digital-scriptorium.org/entity/Q13> .
<https://catalog.digital-scriptorium.org/entity/Q88> <https://catalog.digital-scriptorium.org/prop/direct/P16> <https://catalog.digital-scriptorium.org/entity/Q13> .
</syntaxhighlight>
</syntaxhighlight>
after declaring prefixes, you can type out
after declaring prefixes, you can type
<syntaxhighlight lang="SPARQL">
<syntaxhighlight lang="SPARQL">
wd:Q88 wdt:P16 wd:Q13 .
wd:Q88 wdt:P16 wd:Q13 .
Line 49: Line 49:


=Basic Example Queries=
=Basic Example Queries=
Below is a taxonomy of two types of basic queries based on whether the records in the DS Catalog are described by a particular data element in general (e.g., have any author, any assigned genre, or any place of production) or whether the records meet certain criteria (e.g., were produced by a specific author, were assigned a specific genre, or identified as produced in a particular place). The following queries were originally developed by L.P. Coladangelo (DS Catalog and Data Manager) for prototype testing, and adapted by LEADING Fellows Mace Jones and Jade Snelling as part of their fellowship research.  
Below is a taxonomy of two types of basic queries based on whether the records in the DS Catalog are described by a particular data element in general (e.g., have any author, any assigned genre, or any place of production) or whether the records meet certain criteria (e.g., were produced by a specific author, were assigned a specific genre, or identified as produced in a particular place). The following queries were originally developed by L.P. Coladangelo (DS Catalog and Data Manager) for prototype testing, and adapted by LEADING Fellows Mace Jones and Jade Snelling as part of their [https://mrc.cci.drexel.edu/leading/fellows/ 2023 LEADING Fellowship] research.  


==Manuscripts and their DS records by general data type==
==Manuscripts and their DS records by general data type==
Line 795: Line 795:


====Date of Production====
====Date of Production====
These examples identify records for manuscripts based on production date parameters.
=====Earliest date=====
=====Earliest date=====


Line 1,590: Line 1,591:


==User generated examples==
==User generated examples==
===TBD===
===Books of Hours with institutional, date, and place information===
This is a modified version of a query contributed by Dominique Stutzmann, Directeur de recherche (CNRS), Institut de Recherche et d'Histoire des Textes (IRHT); Honorar-Professor, Humboldt-Universität zu Berlin.
 
<syntaxhighlight lang="SPARQL">
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
 
PREFIX schema: <http://schema.org/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
SELECT ?record ?recordLabel (GROUP_CONCAT(DISTINCT ?titleString;separator="|") as ?titleAsRecorded) ?DSID ?institutionLabel
?shelfmark ?dateAsRecorded ?dated ?placeAsRecorded (GROUP_CONCAT(DISTINCT ?place2;separator="|") as ?place_norm) (GROUP_CONCAT(DISTINCT ?date3;separator="|") as ?earliest_date) (GROUP_CONCAT(DISTINCT ?date4;separator="|") as ?latest_date)
WHERE
{
  ?record p:P10 ?titleStatement . # DS record has a title as recorded statement
  ?titleStatement ps:P10 ?titleString . # title statement has an as recorded string value
  ?titleStatement pq:P11 wd:Q795 . # title statement has been enriched/aligned with a standard title "Book of hours (Q795)"
  ?record wdt:P3 ?ms . # DS record describes a manuscript object
  ?ms wdt:P1 ?DSID . # manuscript object has a DSID
  ?ms wdt:P2 ?holding . # manuscript object has holding information
  ?holding wdt:P5 ?institution . # holding is held by institution as recorded
  ?holding wdt:P8 ?shelfmark . # holding has assigned shelfmark
  OPTIONAL {  ?record wdt:P23 ?dateAsRecorded . }    # DS record provides "production date as recorded"
  OPTIONAL {  ?record wdt:P26 ?datedInfo . ?datedInfo rdfs:label ?dated . }  # DS record provides "dated" / "non-dated" information
  OPTIONAL {  ?record wdt:P27 ?placeAsRecorded . } # DS record provides "production place as recorded (P27)"
  OPTIONAL {  ?record p:P27 ?place . ?place pq:P28 ?placeQual . ?placeQual rdfs:label ?place2 . } # DS record provides "place in authority file (P28)"
  OPTIONAL {  ?record p:P23 ?date . ?date pq:P37 ?earliestDate . }  # DS record provides "earliest date (P37)"
  OPTIONAL {  ?record p:P23 ?date . ?date pq:P36 ?latestDate . }  # DS record provides "latest date (P36)"
 
  # render date values as years
  BIND(year(?earliestDate) AS ?date3)
  BIND(year(?latestDate) AS ?date4)
 
  # return English language labels for Wikibase items where "Label" is appended to variable name
  SERVICE wikibase:label { bd:serviceParam wikibase:language "[AUTO_LANGUAGE]". }
  }
GROUP BY ?record ?recordLabel ?msLabel ?DSID ?institutionLabel ?shelfmark ?dateAsRecorded ?dated ?placeAsRecorded ?place_norm
</syntaxhighlight>
Try it [https://catalog.digital-scriptorium.org/query/#PREFIX%20wd%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fentity%2F%3E%0APREFIX%20wds%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fentity%2Fstatement%2F%3E%0APREFIX%20wdv%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fvalue%2F%3E%0APREFIX%20wdt%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fdirect%2F%3E%0APREFIX%20p%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2F%3E%0APREFIX%20ps%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fstatement%2F%3E%0APREFIX%20pq%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fqualifier%2F%3E%0A%0APREFIX%20schema%3A%20%3Chttp%3A%2F%2Fschema.org%2F%3E%0APREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%0A%20%0ASELECT%20%3Frecord%20%3FrecordLabel%20%28GROUP_CONCAT%28DISTINCT%20%3FtitleString%3Bseparator%3D%22%7C%22%29%20as%20%3FtitleAsRecorded%29%20%3FDSID%20%3FinstitutionLabel%0A%3Fshelfmark%20%3FdateAsRecorded%20%3Fdated%20%3FplaceAsRecorded%20%28GROUP_CONCAT%28DISTINCT%20%3Fplace2%3Bseparator%3D%22%7C%22%29%20as%20%3Fplace_norm%29%20%28GROUP_CONCAT%28DISTINCT%20%3Fdate3%3Bseparator%3D%22%7C%22%29%20as%20%3Fearliest_date%29%20%28GROUP_CONCAT%28DISTINCT%20%3Fdate4%3Bseparator%3D%22%7C%22%29%20as%20%3Flatest_date%29%0AWHERE%0A%7B%0A%20%0A%20%20%3Frecord%20p%3AP10%20%3FtitleStatement%20.%20%23%20DS%20record%20has%20a%20title%20as%20recorded%20statement%0A%20%0A%20%20%3FtitleStatement%20ps%3AP10%20%3FtitleString%20.%20%23%20title%20statement%20has%20an%20as%20recorded%20string%20value%0A%20%20%3FtitleStatement%20pq%3AP11%20wd%3AQ795%20.%20%23%20title%20statement%20has%20been%20enriched%2Faligned%20with%20a%20standard%20title%20%22Book%20of%20hours%20%28Q795%29%22%0A%20%0A%20%20%3Frecord%20wdt%3AP3%20%3Fms%20.%20%23%20DS%20record%20describes%20a%20manuscript%20object%0A%20%20%3Fms%20wdt%3AP1%20%3FDSID%20.%20%23%20manuscript%20object%20has%20a%20DSID%0A%20%20%3Fms%20wdt%3AP2%20%3Fholding%20.%20%23%20manuscript%20object%20has%20holding%20information%0A%20%20%3Fholding%20wdt%3AP5%20%3Finstitution%20.%20%23%20holding%20is%20held%20by%20institution%20as%20recorded%0A%20%20%3Fholding%20wdt%3AP8%20%3Fshelfmark%20.%20%23%20holding%20has%20assigned%20shelfmark%0A%20%20OPTIONAL%20%7B%20%20%3Frecord%20wdt%3AP23%20%3FdateAsRecorded%20.%20%7D%20%20%20%20%20%23%20DS%20record%20provides%20%22production%20date%20as%20recorded%22%0A%20%20OPTIONAL%20%7B%20%20%3Frecord%20wdt%3AP26%20%3FdatedInfo%20.%20%3FdatedInfo%20rdfs%3Alabel%20%3Fdated%20.%20%7D%20%20%23%20DS%20record%20provides%20%22dated%22%20%2F%20%22non-dated%22%20information%0A%20%20OPTIONAL%20%7B%20%20%3Frecord%20wdt%3AP27%20%3FplaceAsRecorded%20.%20%7D%20%23%20DS%20record%20provides%20%22production%20place%20as%20recorded%20%28P27%29%22%0A%20%20OPTIONAL%20%7B%20%20%3Frecord%20p%3AP27%20%3Fplace%20.%20%3Fplace%20pq%3AP28%20%3FplaceQual%20.%20%3FplaceQual%20rdfs%3Alabel%20%3Fplace2%20.%20%7D%20%23%20DS%20record%20provides%20%22place%20in%20authority%20file%20%28P28%29%22%0A%20%20OPTIONAL%20%7B%20%20%3Frecord%20p%3AP23%20%3Fdate%20.%20%3Fdate%20pq%3AP37%20%3FearliestDate%20.%20%7D%20%20%23%20DS%20record%20provides%20%22earliest%20date%20%28P37%29%22%0A%20%20OPTIONAL%20%7B%20%20%3Frecord%20p%3AP23%20%3Fdate%20.%20%3Fdate%20pq%3AP36%20%3FlatestDate%20.%20%7D%20%20%23%20DS%20record%20provides%20%22latest%20date%20%28P36%29%22%0A%20%20%0A%20%20%23%20render%20date%20values%20as%20years%0A%20%20BIND%28year%28%3FearliestDate%29%20AS%20%3Fdate3%29%0A%20%20BIND%28year%28%3FlatestDate%29%20AS%20%3Fdate4%29%0A%20%20%0A%20%20%23%20return%20English%20language%20labels%20for%20Wikibase%20items%20where%20%22Label%22%20is%20appended%20to%20variable%20name%0A%20%20SERVICE%20wikibase%3Alabel%20%7B%20bd%3AserviceParam%20wikibase%3Alanguage%20%22%5BAUTO_LANGUAGE%5D%22.%20%7D%0A%20%20%7D%0AGROUP%20BY%20%3Frecord%20%3FrecordLabel%20%3FmsLabel%20%3FDSID%20%3FinstitutionLabel%20%3Fshelfmark%20%3FdateAsRecorded%20%3Fdated%20%3FplaceAsRecorded%20%3Fplace_norm here].


=Technical Queries=
=Technical Queries=
Line 1,649: Line 1,698:
WHERE {
WHERE {


# specify authority values to be generated by type by uncommenting
BIND (wd:Q17 as ?authorityType) # material authority
 
#BIND (wd:Q16 as ?authorityType) # place authority
#BIND (wd:Q17 as ?authorityType) # material authority
#BIND (wd:Q11 as ?authorityType) # term authority (genre and subject terms)


?authorityValue wdt:P16 ?authorityType .
?authorityValue wdt:P16 ?authorityType .
Line 1,706: Line 1,751:


===Places===
===Places===
===Standard Titles===
<syntaxhighlight lang="SPARQL">
<syntaxhighlight lang="SPARQL">
# prefixes
# prefixes
Line 1,720: Line 1,763:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>


SELECT ?authorityValue ?authorityValueLabel ?authorityTypeLabel ?DSID ?externalID
SELECT ?authorityValue ?authorityValueLabel ?authorityTypeLabel ?externalID


WHERE {
WHERE {


BIND (wd:Q6 as ?authorityType) # standard title authority
BIND (wd:Q16 as ?authorityType) # place authority


?authorityValue wdt:P16 ?authorityType .
?authorityValue wdt:P16 ?authorityType .
     # find authority records by authority type specified above
     # find authority records by authority type specified above
OPTIONAL { ?authorityValue wdt:P44 ?externalID . }
    # find external IDs matched to authority value
    
    
     SERVICE wikibase:label {
     SERVICE wikibase:label {
Line 1,737: Line 1,782:
</syntaxhighlight>
</syntaxhighlight>


===Terms (Genres and Subjects)===
===Standard Titles===
<syntaxhighlight lang="SPARQL">
# prefixes
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
SELECT ?authorityValue ?authorityValueLabel ?authorityTypeLabel ?DSID ?externalID
 
WHERE {
 
BIND (wd:Q6 as ?authorityType) # standard title authority


==Dated Classification Generator==
?authorityValue wdt:P16 ?authorityType .
This query generates a list of manuscript items which have and have not be classified as [https://catalog.digital-scriptorium.org/wiki/Property:P26 dated]. Classified items will either be [https://catalog.digital-scriptorium.org/wiki/Item:Q14 dated] or [https://catalog.digital-scriptorium.org/wiki/Item:Q15 non-dated]. Items without a classification are pending more information.
    # find authority records by authority type specified above
 
    SERVICE wikibase:label {
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" .
      # allows English language labels to be returned for Wikibase items
  }
}
ORDER BY ASC (?authorityValueLabel)
</syntaxhighlight>


===Terms (Genres and Subjects)===
<syntaxhighlight lang="SPARQL">
<syntaxhighlight lang="SPARQL">
# prefixes
# prefixes
Line 1,754: Line 1,825:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>


# find holding and dated information for manuscripts with DS records
SELECT ?authorityValue ?authorityValueLabel ?authorityTypeLabel ?externalID
SELECT  
?record
?holdingLabel
?link
?recordLabel
?datedStatusLabel
(GROUP_CONCAT(?dateRecorded;separator="|") as ?datesAsRecorded)


WHERE
WHERE {
{
# statement: record is an instance of a DS record
  ?record wdt:P16 wd:Q3 .
# statements: record may have a date recorded and may have a dated status
  OPTIONAL { ?record wdt:P23 ?dateRecorded }
  OPTIONAL { ?record wdt:P26 ?datedStatus }
# statement: record describes manuscript object
  ?record wdt:P3 ?ms .
# statement: manuscript object has holding information
  ?ms wdt:P2 ?holding .
# statement: holding information may have link to online institutional record
  OPTIONAL { ?holding wdt:P9 ?link }


# return English language labels
BIND (wd:Q11 as ?authorityType) # term authority (genre and subject terms)
SERVICE wikibase:label {
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" . }
  }
GROUP BY ?record ?holdingLabel ?link ?recordLabel ?datedStatusLabel
ORDER BY DESC (?datedStatusLabel)
</syntaxhighlight>


==Receipt Generator==
?authorityValue wdt:P16 ?authorityType .
This query generates a list of DS Wikibase items which shows successful ingest of DS Records, creation of Manuscript items / DS IDs, and assignment of Holding information for an institution, to serve as a receipt for data contributions made to the DS Catalog.
    # find authority records by authority type specified above
OPTIONAL { ?authorityValue wdt:P44 ?externalID . }
    # find external IDs matched to authority value
 
    SERVICE wikibase:label {
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" .
      # allows English language labels to be returned for Wikibase items
  }
}
ORDER BY ASC (?authorityValueLabel)
</syntaxhighlight>
 
==Dated Classification Generator==
This query generates a list of manuscript items which have and have not be classified as [https://catalog.digital-scriptorium.org/wiki/Property:P26 dated]. Classified items will either be [https://catalog.digital-scriptorium.org/wiki/Item:Q14 dated] or [https://catalog.digital-scriptorium.org/wiki/Item:Q15 non-dated]. Items without a classification are pending more information.


<syntaxhighlight lang="SPARQL>
<syntaxhighlight lang="SPARQL">
# prefixes
# prefixes
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
Line 1,800: Line 1,859:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>


SELECT
# find holding and dated information for manuscripts with DS records
  # Variables for holding values used in the construction of the receipt
SELECT
  (?holderName as ?holding_institution)
?record
  (?holder as ?ds_holding_inst_url)
?holdingLabel
  (?dsid as ?ds_id)
?link
  (?manuscript as ?ds_manuscript_url)
?recordLabel
  (?shelfmark as ?holding_inst_shelfmark)
?datedStatusLabel
  (?institutionalID as ?holding_inst_id)
(GROUP_CONCAT(?dateRecorded;separator="|") as ?datesAsRecorded)
  (?linkToRecord as ?holding_inst_link)
 
  (?iiifManifest as ?iiif_manifest)
WHERE
  (?holdingLabel as ?ds_holding)
  (?holding as ?ds_holding_info_url)
  (?dateAdded as ?date_added_to_ds)
  (?ds20RecordLabel as ?ds_record)
  (?ds20Record as ?ds_record_url)
  (?lastUpdated as ?ds_record_last_updated)
{
{
# statement: record is an instance of a DS record
  ?record wdt:P16 wd:Q3 .
# statements: record may have a date recorded and may have a dated status
  OPTIONAL { ?record wdt:P23 ?dateRecorded }
  OPTIONAL { ?record wdt:P26 ?datedStatus }
# statement: record describes manuscript object
  ?record wdt:P3 ?ms .
# statement: manuscript object has holding information
  ?ms wdt:P2 ?holding .
# statement: holding information may have link to online institutional record
  OPTIONAL { ?holding wdt:P9 ?link }


  # Specify a holding institution (remove comment tag)
# return English language labels
#  BIND (wd:Q28019 as ?holder) # burke - Burke Library at Union Theological Seminary
SERVICE wikibase:label {
#  BIND (wd:Q16442 as ?holder) # bpl - Boston Public Library
    bd:serviceParam wikibase:language "[AUTO_LANGUAGE],en" . }
# BIND (wd:Q27887 as ?holder) # columbia - Columbia University Rare Book and Manuscript Library
  }
#  BIND (wd:Q667 as ?holder) # conception - Conception Abbey
GROUP BY ?record ?holdingLabel ?link ?recordLabel ?datedStatusLabel
#  BIND (wd:Q825 as ?holder) # csl - State of Calfornia Library
ORDER BY DESC (?datedStatusLabel)
#  BIND (wd:Q858 as ?holder) # cuny - City College of New York
</syntaxhighlight>
#  BIND (wd:Q18629 as ?holder) # flp - Free Library of Philadelphia
 
#  BIND (wd:Q868 as ?holder) # grolier - Grolier Club
==Newly Added or Updated Records==
#  BIND (wd:Q1487 as ?holder) # gts - General Theological Seminary
This query generates a list of DS Records which have been newly added or updated, based on a date-time filter.
# BIND (wd:Q17632 as ?holder) # hrc - Harry Ransom Center
 
#  BIND (wd:Qxxxxx as ?holder) # huntington - The Huntington
<syntaxhighlight lang="SPARQL">
#  BIND (wd:Q1521 as ?holder) # indiana - Indiana University
# prefixes
#  BIND (wd:Q6060 as ?holder) # kansas - University of Kansas
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
#  BIND (wd:Q1123 as ?holder) # nelsonatkins - Nelson-Atkins Museum of Art
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
#  BIND (wd:Q1914 as ?holder) # nyu - New York University
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
#  BIND (wd:Q10856 as ?holder) # oregon - University of Oregon
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
#  BIND (wd:Q374 as ?holder) # penn - University of Pennsylvania
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
#  BIND (wd:Q12264 as ?holder) # princeton - Princeton University
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
#  BIND (wd:Q801 as ?holder) # providence - Providence Public Library
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
#  BIND (wd:Q1101 as ?holder) # rome - American Academy in Rome
PREFIX wikibase: <http://wikiba.se/ontology#>
#  BIND (wd:Q1936 as ?holder) # rutgers - Rutgers University
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
#  BIND (wd:Q27854 as ?holder) # shi - Science History Institute
 
#  BIND (wd:Q1247 as ?holder) # smith - Smith College
SELECT
#  BIND (wd:Q27869 as ?holder) # wmu - Western Michigan University
(?ds_recordLabel as ?ds_record_name)
(?ds_record as ?ds_record_url)
?ds_catalog_url
(?dsidLabel as ?ds_id)
(?holdingInstLabel as ?holding_institution)
?shelfmark
?link_to_inst_record
?date_added_to_DS
?date_updated_in_DS
 
WHERE {
  ?ds_record wdt:P16 wd:Q3 ;
            wdt:P34 ?date_added_to_DS ;
            wdt:P35 ?date_updated_in_DS ;
            wdt:P3 ?dsid ;
            rdfs:label ?ds_recordLabel .           
  ?dsid wdt:P2 ?holding ;
        rdfs:label ?dsidLabel .
  ?holding wdt:P8 ?shelfmark ;
          p:P5 ?holdingStatement .
  ?holdingStatement pq:P4 ?holdingInst .
  ?holdingInst rdfs:label ?holdingInstLabel .
    
    
   # holding and holding properties
   OPTIONAL {?holding wdt:P9 ?link_to_inst_record }
  BIND ( wd:Q2 as ?holdingType )
  BIND ( wdt:P16 as ?instanceOf )
  BIND ( wdt:P2 as ?hasHolding )
  BIND ( pq:P4 as ?qualifierHoldingInstInAuthFile )
  BIND ( p:P5 as ?holdingInstitutionAsRecStmt )
  BIND ( ps:P5 as ?holdingInstAsRecValue )
  BIND ( wdt:P7 as ?hasInstID )
  BIND ( wdt:P8 as ?hasShelfmark )
  BIND ( wdt:P9 as ?hasLinkToInstRecord )
  BIND ( wdt:P38 as ?hasHoldingAddedDate )
  BIND ( wdt:P39 as ?hasHoldingEndDate )
    
    
  # manuscript properties
   
  BIND ( wdt:P1 as ?hasDSID )
BIND(CONCAT("https://search.digital-scriptorium.org/catalog/",?dsidLabel) AS ?ds_catalog_url)
    
    
  # DS 2.0 Record properties
# filter results by a period of time when records were last added
  BIND ( wdt:P3 as ?describesManuscript )
FILTER ((?date_added_to_DS > "2024-08-15"^^xsd:dateTime) && (?date_added_to_DS < "2024-12-31"^^xsd:dateTime)).
  BIND ( wdt:P35 as ?hasDateLastUpdated )
  BIND ( wdt:P41 as ?hasIIIFManifest )


# filter results by a period of time when records were last updated
FILTER ((?date_updated_in_DS > "2024-08-15"^^xsd:dateTime) && (?date_updated_in_DS < "2024-12-31"^^xsd:dateTime)).
 
 
SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
  }


  # holding information
  ?holding ?instanceOf ?holdingType ;
          ?holdingInstitutionAsRecStmt ?holdingInstStatement ;
          ?hasHoldingAddedDate ?dateAdded .
                     
  OPTIONAL { ?holding ?hasInstID ?institutionalID }
  OPTIONAL { ?holding ?hasShelfmark ?shelfmark }
  OPTIONAL { ?holding ?hasLinkToInstRecord ?linkToRecord }
  ?holdingInstStatement ?qualifierHoldingInstInAuthFie ?holder .
  ?holder rdfs:label ?holderName .
    
    
  # finding linked manuscript objects to holding information patterns above
} ORDER BY DESC(?date_updated_in_DS)
  ?manuscript ?hasHolding ?holding ;
</syntaxhighlight>
              ?hasDSID ?dsid .
  ?holding rdfs:label ?holdingLabel .
 
  # finding linked DS records to manuscript object patterns above
  ?ds20Record ?describesManuscript ?manuscript ;
              ?hasDateLastUpdated ?lastUpdated ;
              rdfs:label ?ds20RecordLabel .


  # filter results by a period of time when records were last updated
Try it [https://catalog.digital-scriptorium.org/query/#%23%20prefixes%0APREFIX%20wd%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fentity%2F%3E%0APREFIX%20wds%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fentity%2Fstatement%2F%3E%0APREFIX%20wdv%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fvalue%2F%3E%0APREFIX%20wdt%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fdirect%2F%3E%0APREFIX%20p%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2F%3E%0APREFIX%20ps%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fstatement%2F%3E%0APREFIX%20pq%3A%20%3Chttps%3A%2F%2Fcatalog.digital-scriptorium.org%2Fprop%2Fqualifier%2F%3E%0APREFIX%20wikibase%3A%20%3Chttp%3A%2F%2Fwikiba.se%2Fontology%23%3E%0APREFIX%20rdfs%3A%20%3Chttp%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf-schema%23%3E%0A%0ASELECT%0A%28%3Fds_recordLabel%20as%20%3Fds_record_name%29%0A%28%3Fds_record%20as%20%3Fds_record_url%29%0A%3Fds_catalog_url%0A%28%3FdsidLabel%20as%20%3Fds_id%29%0A%28%3FholdingInstLabel%20as%20%3Fholding_institution%29%0A%3Fshelfmark%0A%3Flink_to_inst_record%0A%3Fdate_added_to_DS%0A%3Fdate_updated_in_DS%0A%0AWHERE%20%7B%0A%20%20%3Fds_record%20wdt%3AP16%20wd%3AQ3%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20wdt%3AP34%20%3Fdate_added_to_DS%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20wdt%3AP35%20%3Fdate_updated_in_DS%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20wdt%3AP3%20%3Fdsid%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20%20%20rdfs%3Alabel%20%3Fds_recordLabel%20.%20%20%20%20%20%20%20%20%20%20%20%20%20%0A%20%20%3Fdsid%20wdt%3AP2%20%3Fholding%20%3B%0A%20%20%20%20%20%20%20%20rdfs%3Alabel%20%3FdsidLabel%20.%0A%20%20%3Fholding%20wdt%3AP8%20%3Fshelfmark%20%3B%0A%20%20%20%20%20%20%20%20%20%20%20p%3AP5%20%3FholdingStatement%20.%0A%20%20%3FholdingStatement%20pq%3AP4%20%3FholdingInst%20.%0A%20%20%3FholdingInst%20rdfs%3Alabel%20%3FholdingInstLabel%20.%0A%20%20%0A%20%20OPTIONAL%20%7B%3Fholding%20wdt%3AP9%20%3Flink_to_inst_record%20%7D%0A%20%20%0A%20%20%20%20%0ABIND%28CONCAT%28%22https%3A%2F%2Fsearch.digital-scriptorium.org%2Fcatalog%2F%22%2C%3FdsidLabel%29%20AS%20%3Fds_catalog_url%29%0A%20%20%0A%23%20filter%20results%20by%20a%20period%20of%20time%20when%20records%20were%20last%20added%0AFILTER%20%28%28%3Fdate_added_to_DS%20%3E%20%222024-08-15%22%5E%5Exsd%3AdateTime%29%20%26%26%20%28%3Fdate_added_to_DS%20%3C%20%222024-12-31%22%5E%5Exsd%3AdateTime%29%29.%0A%0A%23%20filter%20results%20by%20a%20period%20of%20time%20when%20records%20were%20last%20updated%0AFILTER%20%28%28%3Fdate_updated_in_DS%20%3E%20%222024-08-15%22%5E%5Exsd%3AdateTime%29%20%26%26%20%28%3Fdate_updated_in_DS%20%3C%20%222024-12-31%22%5E%5Exsd%3AdateTime%29%29.%0A%20%20%0A%20%20%0ASERVICE%20wikibase%3Alabel%20%7B%0A%20%20%20%20bd%3AserviceParam%20wikibase%3Alanguage%20%22en%22%20.%0A%20%20%7D%0A%0A%20%20%0A%7D%20ORDER%20BY%20DESC%28%3Fdate_updated_in_DS%29 here].
  FILTER ((?lastUpdated > "2023-01-01"^^xsd:dateTime) && (?lastUpdated < "2024-01-01"^^xsd:dateTime)).
 
  # display IIIF manifest URLs if present
  OPTIONAL { ?ds20Record ?hasIIIFManifest ?iiifManifest }


  # get alphanumerical IDs from Wikibase URIs
==Receipt Generator==
  BIND (STRDT(REPLACE(STR(?holder), "http.+/entity/", ""), xsd:integer) as ?holderQID)
This query generates a list of DS Wikibase items which shows successful ingest of DS Records, creation of Manuscript items / DS IDs, and assignment of Holding information for an institution, to serve as a receipt for data contributions made to the DS Catalog.
  BIND (STRDT(REPLACE(STR(?holding), "http.+/entity/", ""), xsd:integer) as ?holdingQID)
  BIND (STRDT(REPLACE(STR(?manuscript), "http.+/entity/", ""), xsd:integer) as ?manuscriptQID)
 
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
      # allows English language labels to be returned for Wikibase items
  }
} ORDER BY DESC(?lastUpdated) ASC(?shelfmark)
  # sort results by date updated in Wikibase and then by shelfmark
</syntaxhighlight>
 
==Statement Count Generator==
This query generates a count of the number of statements (triples) in the DS Wikibase matching a particular pattern.


<syntaxhighlight lang="SPARQL">
<syntaxhighlight lang="SPARQL">
Line 1,922: Line 1,966:
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>


SELECT (COUNT(?string) AS ?stringCount)
SELECT
  # Variables for holding values used in the construction of the receipt
  (?holderName as ?holding_institution)
  (?holder as ?ds_holding_inst_url)
  (?dsid as ?ds_id)
  (?manuscript as ?ds_manuscript_url)
  (?shelfmark as ?holding_inst_shelfmark)
  (?institutionalID as ?holding_inst_id)
  (?linkToRecord as ?holding_inst_link)
  (?iiifManifest as ?iiif_manifest)
  (?holdingLabel as ?ds_holding)
  (?holding as ?ds_holding_info_url)
  (?dateAdded as ?date_added_to_ds)
  (?ds20RecordLabel as ?ds_record)
  (?ds20Record as ?ds_record_url)
  (?lastUpdated as ?ds_record_last_updated)
{
 
  # Specify a holding institution (remove comment tag)
#  BIND (wd:Q16442 as ?holder) # bpl - Boston Public Library
#  BIND (wd:Q28019 as ?holder) # burke - Burke Library at Union Theological Seminary
#  BIND (wd:Q27887 as ?holder) # columbia - Columbia University Rare Book and Manuscript Library
#  BIND (wd:Q667 as ?holder) # conception - Conception Abbey and Seminary
#  BIND (wd:Q825 as ?holder) # csl - California State Library
#  BIND (wd:Q858 as ?holder) # cuny - City College of New York
#  BIND (wd:Q48982 as ?holder) # cornell - Cornell University
#  BIND (wd:Q55342 as ?holder) # dayton - University of Dayton
#  BIND (wd:Q18629 as ?holder) # flp - Free Library of Philadelphia
#  BIND (wd:Q868 as ?holder) # grolier - Grolier Club
#  BIND (wd:Q1487 as ?holder) # gts - General Theological Seminary
#  BIND (wd:Q42438 as ?holder) # harvard - Harvard University
#  BIND (wd:Q17632 as ?holder) # hrc - Harry Ransom Center
#  BIND (wd:Q42439 as ?holder) # huntington - The Huntington
#  BIND (wd:Q1521 as ?holder) # indiana - Indiana University
#  BIND (wd:Q6060 as ?holder) # kansas - University of Kansas
#  BIND (wd:Q42433 as ?holder) # missouri - University of Missouri
#  BIND (wd:Q1123 as ?holder) # nelsonatkins - Nelson-Atkins Museum of Art
#  BIND (wd:Q42265 as ?holder) # nyam - New York Academy of Medicine
#  BIND (wd:Q1914 as ?holder) # nyu - New York University
#  BIND (wd:Q10856 as ?holder) # oregon - University of Oregon
#  BIND (wd:Q42431 as ?holder) # osu - Ohio State University
#  BIND (wd:Q374 as ?holder) # penn - University of Pennsylvania
#  BIND (wd:Q12264 as ?holder) # princeton - Princeton University
#  BIND (wd:Q801 as ?holder) # providence - Providence Public Library
#  BIND (wd:Q1101 as ?holder) # rome - American Academy in Rome
#  BIND (wd:Q1936 as ?holder) # rutgers - Rutgers University
#  BIND (wd:Q27854 as ?holder) # shi - Science History Institute
#  BIND (wd:Q42440 as ?holder) # slu - Saint Louis University
#  BIND (wd:Q1247 as ?holder) # smith - Smith College
#  BIND (wd:Q42437 as ?holder) # ucb - University of California, Berkeley
#  BIND (wd:Q42441 as ?holder) # ucdavis - University of California, Davis
#  BIND (wd:Q42442 as ?holder) # ucr - University of California, Riverside
#  BIND (wd:Q17745 as ?holder) # vassar - Vassar College
#  BIND (wd:Q42432 as ?holder) # vermont - University of Vermont
#  BIND (wd:Q54115 as ?holder) # wellesley - Wellesley College
#  BIND (wd:Q27869 as ?holder) # wmu - Western Michigan University
 
  # holding and holding properties
  BIND ( wd:Q2 as ?holdingType )
  BIND ( wdt:P16 as ?instanceOf )
  BIND ( wdt:P2 as ?hasHolding )
  BIND ( pq:P4 as ?qualifierHoldingInstInAuthFile )
  BIND ( p:P5 as ?holdingInstitutionAsRecStmt )
  BIND ( ps:P5 as ?holdingInstAsRecValue )
  BIND ( wdt:P7 as ?hasInstID )
  BIND ( wdt:P8 as ?hasShelfmark )
  BIND ( wdt:P9 as ?hasLinkToInstRecord )
  BIND ( wdt:P38 as ?hasHoldingAddedDate )
  BIND ( wdt:P39 as ?hasHoldingEndDate )
 
  # manuscript properties
  BIND ( wdt:P1 as ?hasDSID )
 
  # DS 2.0 Record properties
  BIND ( wdt:P3 as ?describesManuscript )
  BIND ( wdt:P35 as ?hasDateLastUpdated )
  BIND ( wdt:P41 as ?hasIIIFManifest )
 
 
  # holding information
  ?holding ?instanceOf ?holdingType ;
          ?holdingInstitutionAsRecStmt ?holdingInstStatement ;
          ?hasHoldingAddedDate ?dateAdded .
                     
  OPTIONAL { ?holding ?hasInstID ?institutionalID }
  OPTIONAL { ?holding ?hasShelfmark ?shelfmark }
  OPTIONAL { ?holding ?hasLinkToInstRecord ?linkToRecord }
 
  ?holdingInstStatement ?qualifierHoldingInstInAuthFie ?holder .
  ?holder rdfs:label ?holderName .
 
  # finding linked manuscript objects to holding information patterns above
  ?manuscript ?hasHolding ?holding ;
              ?hasDSID ?dsid .
  ?holding rdfs:label ?holdingLabel .
 
  # finding linked DS records to manuscript object patterns above
  ?ds20Record ?describesManuscript ?manuscript ;
              ?hasDateLastUpdated ?lastUpdated ;
              rdfs:label ?ds20RecordLabel .
 
  # filter results by a period of time when records were last updated
  FILTER ((?lastUpdated > "2024-09-01"^^xsd:dateTime) && (?lastUpdated < "2025-01-01"^^xsd:dateTime)).
 
  # display IIIF manifest URLs if present
  OPTIONAL { ?ds20Record ?hasIIIFManifest ?iiifManifest }
 
  # get alphanumerical IDs from Wikibase URIs
  BIND (STRDT(REPLACE(STR(?holder), "http.+/entity/", ""), xsd:integer) as ?holderQID)
  BIND (STRDT(REPLACE(STR(?holding), "http.+/entity/", ""), xsd:integer) as ?holdingQID)
  BIND (STRDT(REPLACE(STR(?manuscript), "http.+/entity/", ""), xsd:integer) as ?manuscriptQID)
 
  SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
      # allows English language labels to be returned for Wikibase items
  }
} ORDER BY DESC(?lastUpdated) ASC(?shelfmark)
  # sort results by date updated in Wikibase and then by shelfmark
</syntaxhighlight>
 
==Statement Count Generator==
This query generates a count of the number of statements (triples) in the DS Wikibase matching a particular pattern.
 
<syntaxhighlight lang="SPARQL">
# prefixes
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
SELECT (COUNT(?string) AS ?stringCount)
   # declared variable that will be counted and passed to another variable to display as a number
   # declared variable that will be counted and passed to another variable to display as a number
 
 
WHERE {
WHERE {
   ?stringStatement ps:P10 ?string .
   ?stringStatement ps:P10 ?string .
     # use "as recorded" property P-value for the data you want to count
     # use "as recorded" property P-value for the data you want to count
 
    SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
      # allows English language labels to be returned for Wikibase items
  }
}
GROUP BY (?stringCount)
  # this sorts the results by number, and is necessary for COUNT clauses
</syntaxhighlight>
 
==Unenriched Strings Generator==
This query generates a list of string values of a particular type of ''as recorded'' data occurring in a DS Record which have not be qualified by an authority value (i.e., reconciled to its linked data equivalent in a Linked Open Vocabulary or Authority). This example uses properties for name data, but any authority enriched data can be queried using a similar query structure.
 
<syntaxhighlight lang="SPARQL">
# prefixes
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
SELECT
  # find values for the following declared variables matching the below WHERE pattern
?record
  # a link to a DS record
?recordLabel
  # the name/label of the DS record
?string
  # the string value as recorded in the original catalog record
?authority
  # a link to the authority record to which the string value has been reconciled
?authorityLabel
  # a label for the the authority record in the DS database
#?roleLabel
  # where applicable, a label for role information (un-comment roleLabel variable when querying name data to get role information)
 
WHERE
  # the patterns or conditions that need to be met to return values for the above variables
  {
    ?record p:P14 ?stringStatement .
  # identifies records with statements with corresponding property (change P-value for as recorded value to be queried)
    ?stringStatement ps:P14 ?string .
  # identifies statements that have strings with corresponding property (change P-value for as recorded value to be queried)
    FILTER NOT EXISTS { ?stringStatement pq:P17 ?authority . }
  # identifies those statements which have not been enriched with authority values (change P-value for authority file value to be queried)
    #OPTIONAL { ?stringStatement pq:P15 ?role . }
  # only used for name data, un-comment optional clause when querying name data
 
    SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
      # allows English language labels to be returned for Wikibase items
  }
}
ORDER BY ASC (?string)
# this sorts the results alphabetically by as recorded string values
</syntaxhighlight>
 
==Wikidata Uploading Query==
As part of a pilot project, DS is uploading data about manuscripts to represent manuscript objects as Wikidata items. The following query pulls down and formats a dataset which can be loaded in OpenRefine and uploaded to Wikidata using a Wikibase schema. This query is set up to pull records from the University of Missouri, but can be altered for other datasets (see information in commented sections).
 
<syntaxhighlight lang="SPARQL">
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
SELECT
?signature
(CONCAT("manuscript containing ",(GROUP_CONCAT(DISTINCT ?titleRecorded;separator="; "))) as ?description)
?instanceOf
(GROUP_CONCAT(DISTINCT ?materialAuthority;separator="|") as ?materialDS)
(GROUP_CONCAT(DISTINCT ?centuryAuthority;separator="|") as ?centuryDS)
(GROUP_CONCAT(DISTINCT ?earliestDateYear;separator="|") as ?earliestDate)
(GROUP_CONCAT(DISTINCT ?latestDateYear;separator="|") as ?latestDate)
(GROUP_CONCAT(DISTINCT ?placeAuthority;separator="|") as ?placeDS)
(GROUP_CONCAT(DISTINCT ?scribeID;separator="|") as ?scribeWikidata)
(GROUP_CONCAT(DISTINCT ?artistID;separator="|") as ?artistWikidata)
?scriptNote
(GROUP_CONCAT(DISTINCT ?languageID;separator="|") as ?languageWikidata)
(GROUP_CONCAT(DISTINCT ?titleRecorded;separator="|") as ?titleRecord)
(GROUP_CONCAT(DISTINCT ?standardTitleLabel;separator="|") as ?titleStandard)
(GROUP_CONCAT(DISTINCT ?standardTitle;separator="|") as ?titleDS)
(GROUP_CONCAT(DISTINCT ?authorID;separator="|") as ?authorWikidata)
(GROUP_CONCAT(DISTINCT ?ownerID;separator="|") as ?ownerWikidata)
?holderWikidata
?DSID
?institutionalID
?shelfmark
(GROUP_CONCAT(DISTINCT ?iiifManifest;separator="|") as ?iiifURL)
?record
?link
 
WHERE {
  BIND("Q87167" as ?instanceOf)
  BIND(wd:Q42440 as ?holderDS) # DS QID for holding institution
  ?record wdt:P16 wd:Q3 .
 
  # material information
  OPTIONAL {
    ?record p:P30 ?materialStatement .
    ?materialStatement pq:P31 ?materialAuthority .
    ?materialAuthority wdt:P44 ?materialID .
    }
 
  # date information
  OPTIONAL {
    ?record p:P23 ?dateStatement .
    ?dateStatement pq:P24 ?centuryAuthority .
    ?centuryAuthority wdt:P44 ?centuryID .
    ?dateStatement pq:P37 ?earliestDateValue .
    ?dateStatement pq:P36 ?latestDateValue .
    BIND(year(?earliestDateValue) AS ?earliestDateYear)
    BIND(year(?latestDateValue) AS ?latestDateYear)
    }
 
  # place information
  OPTIONAL {
    ?record p:P27 ?placeStatement .
    ?placeStatement pq:P28 ?placeAuthority .
    ?placeAuthority wdt:P44 ?placeID .
    }
 
  # scribe information
  OPTIONAL {
    ?record p:P14 ?nameStatement .
    ?nameStatement pq:P15 wd:Q20 .
    ?nameStatement pq:P17 ?scribeAuthority .
    ?scribeAuthority wdt:P42 ?scribeID .
    }
 
  # artist information
  OPTIONAL {
    ?record p:P14 ?nameStatement .
    ?nameStatement pq:P15 wd:Q19 .
    ?nameStatement pq:P17 ?artistAuthority .
    ?artistAuthority wdt:P42 ?artistID .
    }
 
  # script information
  OPTIONAL {
    ?record wdt:P32 ?note .
    FILTER CONTAINS(?note,"Script:")
    BIND (?note as ?scriptNote )
    }
 
  # language information
  OPTIONAL {
    ?record p:P21 ?languageStatement .
    ?languageStatement pq:P22 ?languageAuthority .
    ?languageAuthority wdt:P42 ?languageID .
    }
 
  # title information
  OPTIONAL {
    ?record p:P10 ?titleStatement .
    ?titleStatement ps:P10 ?titleRecorded .
    }
  OPTIONAL {
    ?record p:P10 ?titleStatement .
    ?titleStatement pq:P11 ?standardTitle .
    ?standardTitle rdfs:label ?standardTitleLabel .
    }
 
  # author information
  OPTIONAL {
    ?record p:P14 ?nameStatement .
    ?nameStatement pq:P15 wd:Q18 .
    ?nameStatement pq:P17 ?authorAuthority .
    ?authorAuthority wdt:P42 ?authorID .
    }
 
  # former owner information
  OPTIONAL {
    ?record p:P14 ?nameStatement .
    ?nameStatement pq:P15 wd:Q21 .
    ?nameStatement pq:P17 ?ownerAuthority .
    ?ownerAuthority wdt:P42 ?ownerID .
    }
 
  ?record wdt:P3 ?manuscript .
  ?manuscript wdt:P1 ?DSID .
  ?manuscript wdt:P2 ?holdingRecord .
  ?holdingRecord p:P5 ?institutionStatement .
  ?institutionStatement pq:P4 ?holderDS .
  ?holderDS rdfs:label ?holderDSLabel .
  ?holderDS wdt:P42 ?holderWikidata .
 
  # holding information
  OPTIONAL {
    ?holdingRecord wdt:P8 ?shelfmark .
    }
  OPTIONAL {
    ?holdingRecord wdt:P7 ?institutionalID .
    }
  OPTIONAL {
    ?holdingRecord wdt:P9 ?link .
    }
 
  # iiif manifest
  OPTIONAL {
    ?record wdt:P41 ?iiifManifest .
    }
    
    
    SERVICE wikibase:label {
BIND(CONCAT("Columbia, Missouri, ",?holderDSLabel,", ",?shelfmark) as ?signature) # hard code location for institution
    bd:serviceParam wikibase:language "en" .
      # allows English language labels to be returned for Wikibase items
  }
}
GROUP BY (?stringCount)
  # this sorts the results by number, and is necessary for COUNT clauses
</syntaxhighlight>
 
==Unenriched Strings Generator==
This query generates a list of string values of a particular type of ''as recorded'' data occurring in a DS Record which have not be qualified by an authority value (i.e., reconciled to its linked data equivalent in a Linked Open Vocabulary or Authority). This example uses properties for name data, but any authority enriched data can be queried using a similar query structure.
 
<syntaxhighlight lang="SPARQL">
# prefixes
PREFIX wd: <https://catalog.digital-scriptorium.org/entity/>
PREFIX wds: <https://catalog.digital-scriptorium.org/entity/statement/>
PREFIX wdv: <https://catalog.digital-scriptorium.org/value/>
PREFIX wdt: <https://catalog.digital-scriptorium.org/prop/direct/>
PREFIX p: <https://catalog.digital-scriptorium.org/prop/>
PREFIX ps: <https://catalog.digital-scriptorium.org/prop/statement/>
PREFIX pq: <https://catalog.digital-scriptorium.org/prop/qualifier/>
PREFIX wikibase: <http://wikiba.se/ontology#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
 
SELECT
  # find values for the following declared variables matching the below WHERE pattern
?record
  # a link to a DS record
?recordLabel
  # the name/label of the DS record
?string
  # the string value as recorded in the original catalog record
?authority
  # a link to the authority record to which the string value has been reconciled
?authorityLabel
  # a label for the the authority record in the DS database
#?roleLabel
  # where applicable, a label for role information (un-comment roleLabel variable when querying name data to get role information)
 
WHERE
  # the patterns or conditions that need to be met to return values for the above variables
  {
    ?record p:P14 ?stringStatement .
  # identifies records with statements with corresponding property (change P-value for as recorded value to be queried)
    ?stringStatement ps:P14 ?string .
  # identifies statements that have strings with corresponding property (change P-value for as recorded value to be queried)
    FILTER NOT EXISTS { ?stringStatement pq:P17 ?authority . }
  # identifies those statements which have not been enriched with authority values (change P-value for authority file value to be queried)
    #OPTIONAL { ?stringStatement pq:P15 ?role . }
  # only used for name data, un-comment optional clause when querying name data
    
    
    SERVICE wikibase:label {
    bd:serviceParam wikibase:language "en" .
      # allows English language labels to be returned for Wikibase items
   }
   }
}
GROUP BY ?signature ?instanceOf ?scriptNote ?holderDS ?holderWikidata ?DSID ?institutionalID ?shelfmark ?record ?link
ORDER BY ASC (?string)
# this sorts the results alphabetically by as recorded string values
</syntaxhighlight>
</syntaxhighlight>
Bots, Bureaucrats, emailconfirmed, Administrators
30,536

edits

Navigation menu