|
|
|
@ -65,9 +65,11 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
'GND' => self::gnd,
|
|
|
|
|
'o-gnd' => self::gnd,
|
|
|
|
|
'O-GND' => self::gnd,
|
|
|
|
|
'pnd' => self::gnd,
|
|
|
|
|
'http://d-nb.info/gnd' => self::gnd,
|
|
|
|
|
'http://d-nb.info/gnd/' => self::gnd,
|
|
|
|
|
'd-nb.info' => self::gnd,
|
|
|
|
|
'https://portal.dnb.de' => self::gnd,
|
|
|
|
|
'grobsystematik' => self::grobsystematik,
|
|
|
|
|
'iconclass' => self::iconclass,
|
|
|
|
|
'klbb' => self::klbb,
|
|
|
|
@ -92,6 +94,7 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
'pleiades' => self::pleiades,
|
|
|
|
|
'rkd' => self::rkd,
|
|
|
|
|
'ulan' => self::ulan,
|
|
|
|
|
'ULAN' => self::ulan,
|
|
|
|
|
'viaf' => self::viaf,
|
|
|
|
|
'wikidata' => self::wikidata,
|
|
|
|
|
'Wikidata' => self::wikidata,
|
|
|
|
@ -377,7 +380,10 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
else if (substr($id, 0, 1) === 'n') {
|
|
|
|
|
if (filter_var(trim(substr($id, 1), '0'), FILTER_VALIDATE_INT) === false) return false;
|
|
|
|
|
}
|
|
|
|
|
else throw new MDgenericInvalidInputsException("LOC IDs must start with n or nr or nb (provided: " . strip_tags($id) . ")");
|
|
|
|
|
else if (substr($id, 0, 2) === 'sh') {
|
|
|
|
|
throw new MDInvalidNodaLinkLocIdIsSh("The link to the Library of Congress authority files refers to the LOC Subject Headings. The subject headings are listed as a separate vocabulary.");
|
|
|
|
|
}
|
|
|
|
|
else throw new MDInvalidNodaLinkException("LOC IDs must start with n or nr or nb (provided: " . strip_tags($id) . ")");
|
|
|
|
|
|
|
|
|
|
return (string)$id;
|
|
|
|
|
|
|
|
|
@ -396,11 +402,14 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
$id = strtr($id, [
|
|
|
|
|
'http://id.loc.gov/authorities/names/' => '',
|
|
|
|
|
'https://id.loc.gov/authorities/names/' => '',
|
|
|
|
|
'http://id.loc.gov/authorities/subjects/' => '',
|
|
|
|
|
'https://id.loc.gov/authorities/subjects/' => '',
|
|
|
|
|
'.html' => '',
|
|
|
|
|
]);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (substr($id, 0, 2) !== 'sh') {
|
|
|
|
|
throw new MDgenericInvalidInputsException("LCSH IDs must start with sh");
|
|
|
|
|
throw new MDInvalidNodaLinkException("LCSH IDs must start with sh");
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filter_var(ltrim(substr($id, 2), "0"), FILTER_VALIDATE_INT) === false) {
|
|
|
|
@ -443,6 +452,31 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validates an NPG ID, returning a string or false.
|
|
|
|
|
*
|
|
|
|
|
* @param string $id ID to validate.
|
|
|
|
|
*
|
|
|
|
|
* @return string|false
|
|
|
|
|
*/
|
|
|
|
|
private static function validateNpgId(string $id):string|false {
|
|
|
|
|
|
|
|
|
|
if (filter_var($id, FILTER_VALIDATE_URL) !== false) {
|
|
|
|
|
$id = strtr($id, ['https://www.npg.org.uk/collections/search/person/' => '']);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (substr($id, 0, 2) === 'mp' && is_numeric(substr($id, 2))) {
|
|
|
|
|
return $id;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
if (filter_var($id, FILTER_VALIDATE_INT) === false) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return $id;
|
|
|
|
|
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
/**
|
|
|
|
|
* Validates a wikidata ID, returning a string or false.
|
|
|
|
|
*
|
|
|
|
@ -498,10 +532,17 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
public static function validateWikipediaId(string $id):string|false {
|
|
|
|
|
|
|
|
|
|
$validation = strtr($id, [
|
|
|
|
|
'http://de.wikipedia.org/wiki/' => '',
|
|
|
|
|
'https://de.wikipedia.org/wiki/' => '',
|
|
|
|
|
'http://en.wikipedia.org/wiki/' => '',
|
|
|
|
|
'https://en.wikipedia.org/wiki/' => '',
|
|
|
|
|
'http://fr.wikipedia.org/wiki/' => '',
|
|
|
|
|
'https://fr.wikipedia.org/wiki/' => '',
|
|
|
|
|
'http://nl.wikipedia.org/wiki/' => '',
|
|
|
|
|
'https://nl.wikipedia.org/wiki/' => '',
|
|
|
|
|
'http://sv.wikipedia.org/wiki/' => '',
|
|
|
|
|
'https://sv.wikipedia.org/wiki/' => '',
|
|
|
|
|
'http://ru.wikipedia.org/wiki/' => '',
|
|
|
|
|
'https://ru.wikipedia.org/wiki/' => '',
|
|
|
|
|
]);
|
|
|
|
|
|
|
|
|
@ -522,7 +563,12 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
|
|
|
|
|
return match($this) {
|
|
|
|
|
self::allgemein => filter_var($id, FILTER_VALIDATE_URL),
|
|
|
|
|
self::aat => self::validateNumericId($id, ['https://vocab.getty.edu/page/aat/']),
|
|
|
|
|
self::aat => self::validateNumericId($id, [
|
|
|
|
|
'http://vocab.getty.edu/aat/',
|
|
|
|
|
'http://vocab.getty.edu/page/aat/',
|
|
|
|
|
'https://vocab.getty.edu/aat/',
|
|
|
|
|
'https://vocab.getty.edu/page/aat/',
|
|
|
|
|
]),
|
|
|
|
|
self::ackerbau => self::validateNumericId($id, ['https://term.museum-digital.de/ackerbau/tag/']),
|
|
|
|
|
self::bne => self::validateBneId($id, ['http://datos.bne.es/persona/']),
|
|
|
|
|
self::bnf => self::validateBnfId($id),
|
|
|
|
@ -537,7 +583,7 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
self::mbl => self::validateNumericId($id, ['http://www.uni-magdeburg.de/mbl/PHP_Skripte/mbl_verwaltung/mbl_verw_anzeige_biog.php?auswahl=3&liste_biog_name=']),
|
|
|
|
|
self::mindatorg => self::validateNumericId($id, ['https://www.mindat.org/min-', '.html']),
|
|
|
|
|
self::moebeltypologie => self::validateNumericId($id, ['https://term.museum-digital.de/moebel/tag/']),
|
|
|
|
|
self::ndb_adb => self::validateGndId($id, ['https://www.deutsche-biographie.de/pnd', '.html']),
|
|
|
|
|
self::ndb_adb => self::validateGndId($id, ['https://www.deutsche-biographie.de/pnd', '.html', '#adbcontent', '#ndbcontent']),
|
|
|
|
|
self::ndl => self::validateNumericId($id, [
|
|
|
|
|
'http://id.ndl.go.jp/auth/ndlna/',
|
|
|
|
|
'https://id.ndl.go.jp/auth/ndlna/',
|
|
|
|
@ -545,17 +591,20 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
|
|
|
|
self::ndp_ikmk => self::validateNumericId($id, ['https://ikmk.smb.museum/ndp/land/']),
|
|
|
|
|
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::validateNumericId($id, [
|
|
|
|
|
'https://www.npg.org.uk/collections/search/person/',
|
|
|
|
|
'https://www.npg.org.uk/collections/search/person/mp',
|
|
|
|
|
]),
|
|
|
|
|
self::npg => self::validateNpgId($id),
|
|
|
|
|
self::oberbegriffsdatei => self::validateNumericId($id, ['https://term.museum-digital.de/oberbegriffsdatei/tag/']),
|
|
|
|
|
self::orcid => preg_match('/^[0-9]{4}-[0-9]{4}-[0-9]{4}-[0-9]{4}$/', $id) ? $id : false,
|
|
|
|
|
self::osm => self::validateNumericId($id, ['https://www.openstreetmap.org/relation/']),
|
|
|
|
|
self::pim => self::validatePimId($id),
|
|
|
|
|
self::pleiades => self::validateNumericId($id, ['https://pleiades.stoa.org/places/']),
|
|
|
|
|
self::rkd => self::validateNumericId($id, ['http://rkd.nl/explore/artists/', 'https://rkd.nl/explore/artists/']),
|
|
|
|
|
self::ulan => self::validateNumericId($id, ['http://vocab.getty.edu/ulan/', 'http://vocab.getty.edu/page/ulan/', 'https://vocab.getty.edu/page/ulan/']),
|
|
|
|
|
self::ulan => self::validateNumericId($id, [
|
|
|
|
|
'http://vocab.getty.edu/ulan/',
|
|
|
|
|
'http://vocab.getty.edu/page/ulan/',
|
|
|
|
|
'https://vocab.getty.edu/page/ulan/',
|
|
|
|
|
'http://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=',
|
|
|
|
|
'https://www.getty.edu/vow/ULANFullDisplay?find=&role=&nation=&subjectid=',
|
|
|
|
|
]),
|
|
|
|
|
self::viaf => self::validateNumericId($id, [
|
|
|
|
|
'https://viaf.org/viaf/',
|
|
|
|
|
'http://viaf.org/viaf/',
|
|
|
|
|