Allow different sub-vocabs of NDP-IKMK for places
This commit is contained in:
parent
c43cc7e42a
commit
dcfba67422
|
@ -205,7 +205,7 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|||
self::moebeltypologie => 'https://term.museum-digital.de/moebel/tag/',
|
||||
self::ndb_adb => 'https://www.deutsche-biographie.de/pnd',
|
||||
self::ndl => 'https://id.ndl.go.jp/auth/ndlna/',
|
||||
self::ndp_ikmk => 'https://ikmk.smb.museum/ndp/land/',
|
||||
self::ndp_ikmk => 'https://ikmk.smb.museum/ndp/',
|
||||
self::ndp_ikmk_persons => 'https://ikmk.smb.museum/ndp/person/',
|
||||
self::nomisma => 'http://nomisma.org/id/',
|
||||
self::npg => 'https://www.npg.org.uk/collections/search/person/',
|
||||
|
@ -473,6 +473,36 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|||
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates an NDP-IKMK ID. The IKMK vocabularies for places are actually quite
|
||||
* numerous, identifying places, countries, regions separately.
|
||||
*
|
||||
* @param string $id ID to validate.
|
||||
*
|
||||
* @return string|false
|
||||
*/
|
||||
private static function validateNdpIkmkForPlaces(string $id):string|false {
|
||||
|
||||
$id = str_replace("https://ikmk.smb.museum/ndp/", "", trim($id, '/'));
|
||||
|
||||
$parts = explode('/', $id);
|
||||
if (count($parts) !== 2) {
|
||||
return false;
|
||||
}
|
||||
|
||||
if (!in_array($parts[0], ['ort', 'land', 'region'], true)) {
|
||||
return false;
|
||||
}
|
||||
|
||||
// There is an issue with this regex
|
||||
if (self::_is_numeric($parts[1]) === false) {
|
||||
return false;
|
||||
}
|
||||
|
||||
return $parts[0] . '/' . $parts[1];
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Validates a PIM ID, returning a string or false.
|
||||
*
|
||||
|
@ -661,7 +691,7 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|||
'http://id.ndl.go.jp/auth/ndlna/',
|
||||
'https://id.ndl.go.jp/auth/ndlna/',
|
||||
]),
|
||||
self::ndp_ikmk => self::validateNumericId($id, ['https://ikmk.smb.museum/ndp/land/']),
|
||||
self::ndp_ikmk => self::validateNdpIkmkForPlaces($id),
|
||||
self::ndp_ikmk_persons => self::validateNumericId($id, ['https://ikmk.smb.museum/ndp/person/']),
|
||||
self::nomisma => str_replace('http://nomisma.org/id/', '', $id),
|
||||
self::npg => self::validateNpgId($id),
|
||||
|
|
|
@ -69,5 +69,12 @@ final class MDNodaRepositoryTest extends TestCase {
|
|||
self::assertEquals("2869150688328112660005", MDNodaRepository::viaf->validateId("2869150688328112660005"));
|
||||
self::assertEquals(false, MDNodaRepository::viaf->validateId("2869150688328112;;660005"));
|
||||
|
||||
# NDP-IKMK (Places)
|
||||
self::assertEquals("ort/2847", MDNodaRepository::ndp_ikmk->validateId("https://ikmk.smb.museum/ndp/ort/2847"));
|
||||
self::assertEquals("land/123", MDNodaRepository::ndp_ikmk->validateId("https://ikmk.smb.museum/ndp/land/123"));
|
||||
self::assertEquals("region/123", MDNodaRepository::ndp_ikmk->validateId("https://ikmk.smb.museum/ndp/region/123"));
|
||||
self::assertEquals("land/123", MDNodaRepository::ndp_ikmk->validateId("land/123"));
|
||||
self::assertEquals(false, MDNodaRepository::ndp_ikmk->validateId("123123"));
|
||||
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue
Block a user