diff --git a/api/v1/openapi/schemas/facets.yaml b/api/v1/openapi/schemas/facets.yaml
index 0b0a3d3a1..0f1c836bd 100644
--- a/api/v1/openapi/schemas/facets.yaml
+++ b/api/v1/openapi/schemas/facets.yaml
@@ -25,6 +25,7 @@ enum:
- placenames
- places
- pubPlace
+ - publisher
- repository
- residences
- sender
diff --git a/catalogues/dictionary_de.xml b/catalogues/dictionary_de.xml
index bb980b392..1dc945ca0 100644
--- a/catalogues/dictionary_de.xml
+++ b/catalogues/dictionary_de.xml
@@ -590,6 +590,7 @@
Kategorie (Detail)KategorieDruckort
+ Verlag/DruckereierhaltenBeschreibungenÜbermittelter Brief
diff --git a/catalogues/dictionary_en.xml b/catalogues/dictionary_en.xml
index c7d215c84..62f6bb2e4 100644
--- a/catalogues/dictionary_en.xml
+++ b/catalogues/dictionary_en.xml
@@ -560,6 +560,7 @@
Category (Detail)CategoryPlace of Publication
+ PublisherreceivedDescriptionsSent letter
diff --git a/modules/api.xqm b/modules/api.xqm
index 7fa30470c..497e7a239 100644
--- a/modules/api.xqm
+++ b/modules/api.xqm
@@ -978,6 +978,16 @@ declare function api:validate-pubPlace($model as map(*)) as map(*)? {
else error($api:INVALID_PARAMETER, 'Unsupported value for parameter "pubPlace". It must be a WeGA place ID.' )
};
+(:~
+ : Check parameter publisher
+ : multiple values allowed as input, either by providing multiple URL parameters
+ : or by sending a comma separated list as the value of one URL parameter
+~:)
+declare function api:validate-publisher($model as map(*)) as map(*)? {
+ if(every $i in $model?publisher ! tokenize(., ',') satisfies wdt:personsPlus($i)('check')()) then map { 'publisher': $model?publisher ! tokenize(., ',') }
+ else error($api:INVALID_PARAMETER, 'Unsupported value for parameter "publisher". It must be a WeGA org or person ID.' )
+};
+
(:~
: Check parameter placenames (NB: this is supposed to be a string value, not a WeGA ID)
: multiple values allowed as input, either by providing multiple URL parameters
diff --git a/modules/facets.xqm b/modules/facets.xqm
index 1b54b4952..1458f74d9 100644
--- a/modules/facets.xqm
+++ b/modules/facets.xqm
@@ -119,7 +119,7 @@ declare %private function facets:display-term($facet as xs:string, $term as xs:s
switch($facet)
case 'persons' case 'personsPlus' case 'sender' case 'addressee'
case 'dedicatees' case 'lyricists' case 'librettists'
- case 'composers' case 'authors' case 'editors' return
+ case 'composers' case 'authors' case 'editors' case 'publisher' return
if(wdt:persons($term)('check')()) then wdt:persons($term)('label-facets')() (:$facets:persons-norm-file//norm:entry[range:eq(@docID,$term)]/normalize-space():)
else wdt:orgs($term)('label-facets')()
case 'works' return wdt:works($term)('label-facets')()
diff --git a/modules/query.xqm b/modules/query.xqm
index e5bae05d0..1df1d35c3 100644
--- a/modules/query.xqm
+++ b/modules/query.xqm
@@ -359,6 +359,7 @@ declare function query:get-facets($collection as node()*, $facet as xs:string) a
case 'forenames' return $collection//tei:forename[not(@full)]
case 'surnames' return $collection//tei:surname | $collection//tei:orgName[@type]
case 'pubPlace' return ($collection//mei:pubPlace/@codedval | $collection//tei:pubPlace/@key)
+ case 'publisher' return ($collection//mei:publisher[parent::mei:pubStmt]/@codedval | $collection//tei:publisher[parent::tei:imprint]/@key)
case 'sources-details-cat' return ($collection//mei:termList[@label='sources-details-cat']/mei:term | $collection//tei:keywords[@scheme='sources-details-cat']/tei:term)
case 'sources-meta-cat' return ($collection//mei:termList[@label='sources-meta-cat']/mei:term | $collection//tei:keywords[@scheme='sources-meta-cat']/tei:term)
case 'placenames' return $collection//tei:placeName[@type='reg']
diff --git a/templates/ajax/sources.html b/templates/ajax/sources.html
index 608c8740d..2722174b9 100644
--- a/templates/ajax/sources.html
+++ b/templates/ajax/sources.html
@@ -15,8 +15,8 @@