Allow different sub-vocabs of NDP-IKMK for places
This commit is contained in:
		@@ -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"));
 | 
			
		||||
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user