是否可以使用DSpace从其他存储库中获取单个项目?也许来自命令行? 据我所知,使用XMLUI只能收集完整的社区或完整的集合。但后来我得到了太多我不需要的东西。
答案 0 :(得分:2)
正如Terry所写,您可以使用GetRecord请求从存储库中收集单个项目/文档。 如果zip的内容具有特定格式,则可以导入DSpace菜单项“批量导入(ZIP)”项目。
以下PHP代码从GetRecord创建的XML中提取metatdata。 在下一步中,此元数据以DSpace理解的XML格式打包。 此XML作为文件(dublin_core.xml)添加到创建的ZIP,以及包含句柄的小文件(句柄)。 最后,ZIP被写入服务器。
BTW导入zip文件也可以从命令行完成,正如Terry在他的第一个答案中提到的那样。
<?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();
?>
答案 1 :(得分:1)
如果您想通过命令行提取单个项目,请考虑packager命令。
https://wiki.duraspace.org/display/DSDOC5x/Importing+and+Exporting+Content+via+Packages
答案 2 :(得分:1)
OAI-PMH标准提供了GetRecord方法。
https://knb.ecoinformatics.org/knb/docs/oaipmh.html
如果您浏览包含您感兴趣的项目的集合,您应该能够找到该项目的标识符。您可以将该标识符用作GetRecord的参数。
这将允许您提取项目元数据。为了将项目放入DSpace,我想你需要将项目打包到存储库中。