使用DSpace收集单个项目

时间:2015-10-26 12:40:24

标签: dspace

是否可以使用DSpace从其他存储库中获取单个项目?也许来自命令行? 据我所知,使用XMLUI只能收集完整的社区或完整的集合。但后来我得到了太多我不需要的东西。

3 个答案:

答案 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的参数。

实施例: https://repository.library.georgetown.edu/oai/request?verb=GetRecord&identifier=oai:repository.library.georgetown.edu:10822/503788&metadataPrefix=qdc

这将允许您提取项目元数据。为了将项目放入DSpace,我想你需要将项目打包到存储库中。