Remove whitespaces from vocabulary links, add dedicated exception for
lcsh links that are actually loc links
This commit is contained in:
parent
da6e40282d
commit
1d1a690e0f
20
exceptions/MDInvalidNodaLinkLcshIdIsGeneralLoc.php
Normal file
20
exceptions/MDInvalidNodaLinkLcshIdIsGeneralLoc.php
Normal file
|
@ -0,0 +1,20 @@
|
||||||
|
<?PHP
|
||||||
|
declare(strict_types = 1);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Exception thrown in case a library of congress subject headings link refers
|
||||||
|
* to the other authority files of the Library of Congress.
|
||||||
|
*/
|
||||||
|
final class MDInvalidNodaLinkLcshIdIsGeneralLoc extends MDInvalidNodaLinkException {
|
||||||
|
/**
|
||||||
|
* Error message.
|
||||||
|
*
|
||||||
|
* @return string
|
||||||
|
*/
|
||||||
|
public function errorMessage() {
|
||||||
|
//error message
|
||||||
|
return 'Inputs are not valid.';
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
@ -36,7 +36,7 @@ final class MDNodaLink {
|
||||||
public function __construct(MDNodaRepository $source, string $id) {
|
public function __construct(MDNodaRepository $source, string $id) {
|
||||||
|
|
||||||
$this->source = $source;
|
$this->source = $source;
|
||||||
if (($validatedId = $this->source->validateId(trim($id))) === false) {
|
if (($validatedId = $this->source->validateId(strtr(trim($id), [" " => "", "\t" => "", "\n" => ""]))) === false) {
|
||||||
throw new MDInvalidNodaLink("Invalid noda ID / link: \"" . $id . "\" [Repository: " . $this->source->toDbName() . "]");
|
throw new MDInvalidNodaLink("Invalid noda ID / link: \"" . $id . "\" [Repository: " . $this->source->toDbName() . "]");
|
||||||
}
|
}
|
||||||
$this->id = $validatedId;
|
$this->id = $validatedId;
|
||||||
|
|
|
@ -351,6 +351,7 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
if (is_numeric(strtr($id, ['-' => '', 'X' => ''])) === false) {
|
if (is_numeric(strtr($id, ['-' => '', 'X' => ''])) === false) {
|
||||||
|
throw new Exception($id);
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -409,7 +410,10 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (substr($id, 0, 2) !== 'sh') {
|
if (substr($id, 0, 2) !== 'sh') {
|
||||||
throw new MDInvalidNodaLinkException("LCSH IDs must start with sh");
|
if (str_starts_with(substr($id, 0, 1), 'n')) {
|
||||||
|
throw new MDInvalidNodaLinkLcshIdIsGeneralLoc("LCSH IDs must start with sh. ID started with n. Use general LOC link instead.");
|
||||||
|
}
|
||||||
|
throw new MDInvalidNodaLinkException("LCSH IDs must start with sh. ID provided is: " . $id);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (filter_var(ltrim(substr($id, 2), "0"), FILTER_VALIDATE_INT) === false) {
|
if (filter_var(ltrim(substr($id, 2), "0"), FILTER_VALIDATE_INT) === false) {
|
||||||
|
@ -538,6 +542,10 @@ enum MDNodaRepository implements MDValueEnumInterface, JsonSerializable {
|
||||||
'https://en.wikipedia.org/wiki/' => '',
|
'https://en.wikipedia.org/wiki/' => '',
|
||||||
'http://fr.wikipedia.org/wiki/' => '',
|
'http://fr.wikipedia.org/wiki/' => '',
|
||||||
'https://fr.wikipedia.org/wiki/' => '',
|
'https://fr.wikipedia.org/wiki/' => '',
|
||||||
|
'http://id.wikipedia.org/wiki/' => '',
|
||||||
|
'https://id.wikipedia.org/wiki/' => '',
|
||||||
|
'http://it.wikipedia.org/wiki/' => '',
|
||||||
|
'https://it.wikipedia.org/wiki/' => '',
|
||||||
'http://nl.wikipedia.org/wiki/' => '',
|
'http://nl.wikipedia.org/wiki/' => '',
|
||||||
'https://nl.wikipedia.org/wiki/' => '',
|
'https://nl.wikipedia.org/wiki/' => '',
|
||||||
'http://sv.wikipedia.org/wiki/' => '',
|
'http://sv.wikipedia.org/wiki/' => '',
|
||||||
|
|
|
@ -27,6 +27,7 @@ final class MDNodaRepositoryTest extends TestCase {
|
||||||
// GND (Germany)
|
// GND (Germany)
|
||||||
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("https://d-nb.info/gnd/102423008"));
|
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("https://d-nb.info/gnd/102423008"));
|
||||||
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("http://d-nb.info/gnd/102423008"));
|
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("http://d-nb.info/gnd/102423008"));
|
||||||
|
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("http://d-nb.info/gnd/ 102423008"));
|
||||||
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("102423008"));
|
self::assertEquals("102423008", MDNodaRepository::gnd->validateId("102423008"));
|
||||||
|
|
||||||
// NDL (Japan)
|
// NDL (Japan)
|
||||||
|
|
Loading…
Reference in New Issue
Block a user