From b69017aaf91df8cf94760aff747107c94e853fed Mon Sep 17 00:00:00 2001 From: mshroom <32199029+mshroom@users.noreply.github.com> Date: Fri, 19 Dec 2025 15:08:49 +0200 Subject: [PATCH 1/2] LIDO: Include subject actor ids in topic ids and enrichment --- .../Finna/Record/AuthoritySupportTrait.php | 7 ++++- src/RecordManager/Finna/Record/Lido.php | 31 +++++++++++++++++-- .../Finna/Record/LidoTest.php | 10 ++++++ tests/fixtures/Finna/record/musketti2.xml | 1 + 4 files changed, 46 insertions(+), 3 deletions(-) diff --git a/src/RecordManager/Finna/Record/AuthoritySupportTrait.php b/src/RecordManager/Finna/Record/AuthoritySupportTrait.php index 5f2ba332..56e87eab 100644 --- a/src/RecordManager/Finna/Record/AuthoritySupportTrait.php +++ b/src/RecordManager/Finna/Record/AuthoritySupportTrait.php @@ -79,8 +79,13 @@ function ($id) use ($type) { $ns = $this->getAuthorityNamespace($type); $result = []; foreach ($ids as $id) { + if (preg_match('/^(https:\/\/isni\.org\/isni\/)(.*)/', $id, $matches)) { + // Normalize ISNI URIs to match ISNI identifiers in authority sources + $result[] = '(isni)' . $matches[2]; + continue; + } if (preg_match('/^https?:/', $id)) { - // Never prefix http(s) url's + // Never prefix other http(s) url's $result[] = $id; continue; } diff --git a/src/RecordManager/Finna/Record/Lido.php b/src/RecordManager/Finna/Record/Lido.php index 641c6496..c08767a7 100644 --- a/src/RecordManager/Finna/Record/Lido.php +++ b/src/RecordManager/Finna/Record/Lido.php @@ -340,6 +340,13 @@ public function toSolrArray(?Database $db = null) 'author' ); $data['author2_id_role_str_mv'] = $this->addNamespaceToAuthorityIds($this->getAllAuthorIdsAndRoles(), 'author'); + // Add values with namespaces also to allfields + $data['allfields'] = [ + ...$data['allfields'], + ...$data['topic_id_str_mv'], + ...$data['geographic_id_str_mv'], + ...$data['author2_id_str_mv'], + ]; $data['language'] = $this->getLanguages(); // do not index online urls as they display extra information in Finna $onlineUrls = $this->getOnlineUrls(); @@ -473,7 +480,7 @@ public function getMainAuthor() */ public function getRawTopicIds(): array { - return parent::getTopicIDs(); + return array_filter(array_unique([...parent::getTopicIDs(), ...$this->getSubjectActorIds()])); } /** @@ -585,6 +592,26 @@ protected function getAllAuthorIdsAndRoles(): array return $results; } + /** + * Get subject actor ids + * + * @return array + */ + protected function getSubjectActorIds(): array + { + $result = []; + foreach ($this->getSubjectNodes() as $subject) { + foreach ($subject->subjectActor as $subjectActor) { + foreach ($subjectActor->actor->actorID ?? [] as $actorID) { + if ($id = trim((string)$actorID)) { + $result[] = $id; + } + } + } + } + return array_values(array_unique($result)); + } + /** * Process an array of placeID elements * @@ -922,7 +949,7 @@ protected function getUsageRights() */ protected function getTopicIDs($exclude = ['iconclass']): array { - $result = parent::getTopicIDs($exclude); + $result = [...parent::getTopicIDs($exclude), ...$this->getSubjectActorIds()]; return $this->addNamespaceToAuthorityIds($result, 'topic'); } diff --git a/tests/RecordManagerTest/Finna/Record/LidoTest.php b/tests/RecordManagerTest/Finna/Record/LidoTest.php index 9b8dd78a..0a8164cc 100644 --- a/tests/RecordManagerTest/Finna/Record/LidoTest.php +++ b/tests/RecordManagerTest/Finna/Record/LidoTest.php @@ -149,10 +149,13 @@ public function testMusketti2() 'author2' => [], 'author2_id_str_mv' => [ 'http://urn.fi/URN:NBN:fi:au:finaf:000173713', + '(isni)0000000073500621', ], 'author2_id_role_str_mv' => [ 'http://urn.fi/URN:NBN:fi:au:finaf:000173713###kuvaaja', 'http://urn.fi/URN:NBN:fi:au:finaf:000173713###kehittäjä', + '(isni)0000000073500621###kuvaaja', + '(isni)0000000073500621###kehittäjä', ], 'topic_facet' => [], 'topic' => [], @@ -217,6 +220,7 @@ public function testMusketti2() 'Helsinki', 'valmistus', 'http://urn.fi/URN:NBN:fi:au:finaf:000173713', + 'https://isni.org/isni/0000000073500621', 'Hintze Harry', '1897', '1897', @@ -240,6 +244,12 @@ public function testMusketti2() 'Museovirasto/MV', 'Kansatieteen kuvakokoelma', 'Museovirasto/MV', + '(prt)Prt', + '(prt)Prt 2', + '(kiinteistötunnus)Kiinteistötunnus', + 'http://www.yso.fi/onto/yso/p94413', + 'http://urn.fi/URN:NBN:fi:au:finaf:000173713', + '(isni)0000000073500621', ], 'identifier' => '4878:1', 'measurements' => [ diff --git a/tests/fixtures/Finna/record/musketti2.xml b/tests/fixtures/Finna/record/musketti2.xml index 30fe970f..93880ff7 100644 --- a/tests/fixtures/Finna/record/musketti2.xml +++ b/tests/fixtures/Finna/record/musketti2.xml @@ -126,6 +126,7 @@ http://urn.fi/URN:NBN:fi:au:finaf:000173713 + https://isni.org/isni/0000000073500621 Hintze Harry From fe356b9ab669616176bb0e5a70f2a9bbfe087390 Mon Sep 17 00:00:00 2001 From: mshroom <32199029+mshroom@users.noreply.github.com> Date: Tue, 30 Dec 2025 11:24:25 +0200 Subject: [PATCH 2/2] edit regex --- src/RecordManager/Finna/Record/AuthoritySupportTrait.php | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/RecordManager/Finna/Record/AuthoritySupportTrait.php b/src/RecordManager/Finna/Record/AuthoritySupportTrait.php index 56e87eab..65b6c3bd 100644 --- a/src/RecordManager/Finna/Record/AuthoritySupportTrait.php +++ b/src/RecordManager/Finna/Record/AuthoritySupportTrait.php @@ -79,13 +79,13 @@ function ($id) use ($type) { $ns = $this->getAuthorityNamespace($type); $result = []; foreach ($ids as $id) { - if (preg_match('/^(https:\/\/isni\.org\/isni\/)(.*)/', $id, $matches)) { - // Normalize ISNI URIs to match ISNI identifiers in authority sources - $result[] = '(isni)' . $matches[2]; + // Normalize ISNI URIs to match ISNI identifiers in authority sources + if (preg_match('/^https:\/\/isni\.org\/isni\/(.*)/', $id, $matches)) { + $result[] = '(isni)' . $matches[1]; continue; } + // Never prefix other http(s) url's if (preg_match('/^https?:/', $id)) { - // Never prefix other http(s) url's $result[] = $id; continue; }