Можно ли с помощью DSpace собирать отдельные элементы из других репозиториев? Возможно из командной строки? Насколько я понимаю, с помощью XMLUI возможен сбор только полных сообществ или полных коллекций. Но тогда я получаю в основном слишком много предметов, которые мне не нужны.
Сбор отдельных элементов с помощью DSpace
Ответы (3)
Стандарт OAI-PMH предоставляет метод GetRecord.
https://knb.ecoinformatics.org/knb/docs/oaipmh.html
Если вы перемещаетесь по набору, содержащему интересующий вас элемент, вы сможете найти идентификатор элемента. Вы можете использовать этот идентификатор в качестве параметра GetRecord.
Это позволит вам извлечь метаданные элемента. Я полагаю, что для того, чтобы поместить элемент в DSpace, вам потребуется упаковать элемент для загрузки в репозиторий.
Как писал Терри, вы можете получить один элемент/документ из репозитория с помощью запроса 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();
?>
dim
в качестве префикса метаданных, что мне следует изменить в вашем примере кода? Заранее спасибо.
- person euler; 03.03.2017
Если вы хотите получить один элемент через командную строку, рассмотрите команду packager.
https://wiki.duraspace.org/display/DSDOC5x/Импорт+и+экспорт+контента+через+пакеты