2015-10-26 2 views
1

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

ответ

1

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

https://wiki.duraspace.org/display/DSDOC5x/Importing+and+Exporting+Content+via+Packages

+0

Насколько я вижу, с упаковщиком можно импортировать только zip-файл (из каталога). Но мне нужно импортировать отдельные элементы из нескольких внешних репозиториев, поэтому у меня нет никаких zip-файлов. –

+0

Возможно, вообще невозможно собрать или импортировать отдельный элемент из чужого репозитория? Я имею в виду: не без сотрудничества с администратором этого хранилища? –

+0

Питер, я неправильно понял ваш первоначальный вопрос. Я думал, что вы пытаетесь собрать урожай из своего хранилища. Я отправлю новый ответ. – terrywb

1

Стандарт ОАИ-СМ обеспечивает способ 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, я предполагаю, что вам нужно будет упаковать элемент для входа в репозиторий.

+1

Спасибо Терри! Это подводит меня дальше. Я скажу вам результаты. –

2

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

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

BTW Импорт 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(); 

?> 
+0

Можно ли включить бит-поток? Я пытаюсь сделать единичный сбор урожая, но мне также нужен бит-поток. Если я хочу использовать 'dim' как metadataPrefix, что я должен изменить в вашем примере кода? Заранее спасибо. – euler

Смежные вопросы