Сбор отдельных элементов с помощью DSpace

Можно ли с помощью DSpace собирать отдельные элементы из других репозиториев? Возможно из командной строки? Насколько я понимаю, с помощью XMLUI возможен сбор только полных сообществ или полных коллекций. Но тогда я получаю в основном слишком много предметов, которые мне не нужны.


person Peter Bakker    schedule 26.10.2015    source источник


Ответы (3)


Стандарт OAI-PMH предоставляет метод GetRecord.

https://knb.ecoinformatics.org/knb/docs/oaipmh.html

Если вы перемещаетесь по набору, содержащему интересующий вас элемент, вы сможете найти идентификатор элемента. Вы можете использовать этот идентификатор в качестве параметра GetRecord.

Пример: https://repository.library.georgetown.edu/oai/request?verb=GetRecord&identifier=oai:repository.library.georgetown.edu:10822/503788&metadataPrefix=qdc

Это позволит вам извлечь метаданные элемента. Я полагаю, что для того, чтобы поместить элемент в DSpace, вам потребуется упаковать элемент для загрузки в репозиторий.

person terrywb    schedule 29.10.2015
comment
Спасибо Терри! Это подводит меня дальше. Я скажу вам результаты. - person Peter Bakker; 30.10.2015

Как писал Терри, вы можете получить один элемент/документ из репозитория с помощью запроса GetRecord. С помощью пункта меню DSpace «Пакетный импорт (ZIP)» можно импортировать элементы, если содержимое zip имеет определенный формат.

Следующий код PHP извлекает метаданные из созданного GetRecord XML. На следующем этапе эти метаданные упаковываются в XML-формат, понятный DSpace. Этот XML добавляется в виде файла (dublin_core.xml) в созданный ZIP вместе с небольшим файлом (дескриптором), содержащим дескриптор. Наконец, ZIP записывается на сервер.

Кстати, импорт zip-файла также можно выполнить из командной строки, как упомянул Терри в своем первом ответе.

<?php 
// handle and harvest-string
$handle  = "1874/1506";
$harvest = "http://dspace.library.uu.nl/oai/request?verb=GetRecord&metadataPrefix=oai_dc&identifier=oai:dspace.library.uu.nl:" . $handle;

// get XML from source repository
$sxe = simplexml_load_file($harvest, "SimpleXMLElement");

// add namespace schema-urls
$sxe->registerXPathNamespace('oai_dc', 'http://www.openarchives.org/OAI/2.0/oai_dc/');
$sxe->registerXPathNamespace('dc', 'http://purl.org/dc/elements/1.1/');

// get Dublin Core (dc) elements from the XML
foreach($sxe->xpath("//oai_dc:dc") as $entry) {
    $child = $entry->children('dc', true);
}

// add dc-elements (names and values) to array
foreach($child as $elementName => $elementValue) {$elements[$elementName][]  = $elementValue;}

// create zip-object and -file
$zip = new ZipArchive();
$zip->open("doc/importZip.zip", ZipArchive::CREATE);

// create a directory in the zip-object
$zip->addEmptyDir("item");

// create Dublin Core XML object
$oXML = new DOMDocument();
$oXML->encoding      = "UTF-8";
$oXML->formatOutput  = true;
$oXML->xmlStandalone = false;

$oRoot = $oXML->createElement('dublin_core');
$oRoot->setAttribute('schema', 'dc');
$oXML->appendChild($oRoot);

// add elements and their values to XML object
foreach($elements as $elementName => $elementValues) {
    foreach($elementValues as $elementValue) {
        $oDcValue = $oXML->createElement('dcvalue');
        $oDcValue->setAttribute('element', $elementName);
        $oText = $oXML->createTextNode($elementValue);
        $oDcValue->appendChild($oText);
        $oRoot->appendChild($oDcValue);
    }
}

// save created XML to string
$dublinCoreXml = $oXML->saveXML();

// add XML-string as file to zip-object
$zip->addFromString("item/1/dublin_core.xml", $dublinCoreXml);

// add handle as file to zip-object
$zip->addFromString("item/1/handle", $handle);

$zip->close();

?>
person Peter Bakker    schedule 18.12.2015
comment
Можно ли включить битстрим? Я пытаюсь собрать один предмет, но мне также нужен битовый поток. Если я хочу использовать dim в качестве префикса метаданных, что мне следует изменить в вашем примере кода? Заранее спасибо. - person euler; 03.03.2017

Если вы хотите получить один элемент через командную строку, рассмотрите команду packager.

https://wiki.duraspace.org/display/DSDOC5x/Импорт+и+экспорт+контента+через+пакеты

person terrywb    schedule 26.10.2015
comment
Насколько я понимаю, с упаковщиком можно импортировать только zip-файл (или из каталога). Но мне нужно импортировать отдельные элементы из нескольких зарубежных репозиториев, поэтому у меня нет zip-файлов. - person Peter Bakker; 27.10.2015
comment
Возможно, вообще невозможно собрать или импортировать отдельный предмет из чужого хранилища? Я имею в виду: не без сотрудничества с администратором этого репозитория? - person Peter Bakker; 29.10.2015
comment
Питер, я неправильно понял ваш первоначальный вопрос. Я думал, ты пытаешься собрать урожай из своего репозитория. Я опубликую новый ответ. - person terrywb; 29.10.2015