public function endTag($parser, $name) { $this->_parseElementName($name, $nsPrefix, $nsUri, $tagName); if ($tagName == 'Description' && $nsPrefix == 'rdf') { //end of a document: $this->_counter++; if ($this->_counter <= $this->_rdf_parser->getFrom()) { return; } $this->_xml .= "\n </doc>"; if ($this->_counter >= $this->_rdf_parser->getFrom() + $this->_rdf_parser->getLimit()) { throw new OpenSKOS_Rdf_Parser_Helper_Exception($this->_counter . ' documents processed'); } return; } if (substr($this->_xml, -3) == ']]>') { $this->_xml .= "</field>"; } }
if (null !== $OPTS->verbose) { fwrite(STDOUT, "FAILED\n"); } fwrite(STDERR, "Recieved RDF-XML of record `{$record->identifier}` is not valid: expected <rdf:RDF/> rootnode, got <{$doc->documentElement->nodeName}/>\n"); continue; } $Descriptions = $doc->documentElement->getElementsByTagNameNs(OpenSKOS_Rdf_Parser::$namespaces['rdf'], 'Description'); if ($Descriptions->length != 1) { if (null !== $OPTS->verbose) { fwrite(STDOUT, "FAILED\n"); } fwrite(STDERR, "Expected exactly one /rdf:RDF/rdf:Description, got {$Descriptions->length}\n"); continue; } try { $solrDocument = OpenSKOS_Rdf_Parser::DomNode2SolrDocument($Descriptions->item(0), $data); } catch (OpenSKOS_Rdf_Parser_Exception $e) { if (null !== $OPTS->verbose) { fwrite(STDOUT, "FAILED\n"); } fwrite(STDERR, "record {$record->identifier}: " . $e->getMessage() . "\n"); continue; } try { $solrDocument->save(); } catch (OpenSKOS_Solr_Exception $e) { if (null !== $OPTS->verbose) { fwrite(STDOUT, "FAILED\n"); } fwrite(STDERR, 'Failed to save Concept `' . $solrDocument['uri'][0] . '`: ' . $e->getMessage() . "\n"); continue;
/** * Translate data from rdf mapping to rdf nodes * * @return array */ protected function getRdfFromData() { $rdfNodes = array(); $rdfMapping = $this->getRdfMapping(); foreach ($this->data as $docField => $docValue) { $fieldName = explode('@', $docField); $fieldName = $fieldName[0]; if (strpos($docField, '@') !== false && in_array($fieldName, $rdfMapping['languageFields'])) { $rdfNodes = array_merge($rdfNodes, OpenSKOS_Rdf_Parser::createLanguageField($docField, $docValue)); } else { if (in_array($docField, $rdfMapping['resourceFields'])) { $rdfNodes = array_merge($rdfNodes, OpenSKOS_Rdf_Parser::createResourceField($docField, $docValue)); } else { if (in_array($docField, $rdfMapping['dctermsDateFields'])) { if ($docField == 'dcterms_dateAccepted' && (empty($docValue) || empty($docValue[0]))) { continue; } $rdfNodes = array_merge($rdfNodes, OpenSKOS_Rdf_Parser::createDcTermsField($docField, $docValue)); } else { if (in_array($docField, $rdfMapping['simpleSkosFields'])) { $rdfNodes = array_merge($rdfNodes, OpenSKOS_Rdf_Parser::createSimpleSkosField($docField, $docValue)); } else { if (in_array($docField, $rdfMapping['openskosFields'])) { $rdfNodes = array_merge($rdfNodes, OpenSKOS_Rdf_Parser::createSimpleOpenskosField($docField, $docValue)); } } } } } } return $rdfNodes; }
} if ((bool) $job->getParam('onlyNewConcepts')) { $arguments[] = '--onlyNewConcepts'; } if ((bool) $job->getParam('useUriAsIdentifier')) { $arguments[] = '--useUriAsIdentifier'; } $arguments[] = '--commit'; $duplicateConceptSchemes = array(); $notImportedNotations = array(); foreach ($importFiles as $filePath) { $parserOpts = new Zend_Console_Getopt(OpenSKOS_Rdf_Parser::$get_opts); $parserOpts->setArguments(array_merge($arguments, array($filePath))); // The last argument must be the file path. try { $parser = OpenSKOS_Rdf_Parser::factory($parserOpts); $parser->process($job['user']); $duplicateConceptSchemes = array_merge($duplicateConceptSchemes, $parser->getDuplicateConceptSchemes()); $notImportedNotations = array_merge($notImportedNotations, $parser->getNotImportedNotations()); } catch (Exception $e) { $model = new OpenSKOS_Db_Table_Jobs(); // Gets new DB object to prevent connection time out. $job = $model->find($job->id)->current(); // Gets new DB object to prevent connection time out. fwrite(STDERR, $job->id . ': ' . $e->getMessage() . "\n"); $job->error($e->getMessage())->finish()->save(); exit($e->getCode()); } } // Delete extracted files when done. $job->cleanFiles();
public function postAction() { $this->getHelper('layout')->disableLayout(); $this->getHelper('viewRenderer')->setNoRender(true); $this->view->errorOnly = true; $xml = $this->getRequest()->getRawBody(); if (!$xml) { throw new Zend_Controller_Action_Exception('No RDF-XML recieved', 412); } $doc = new DOMDocument(); if (!@$doc->loadXML($xml)) { throw new Zend_Controller_Action_Exception('Recieved RDF-XML is not valid XML', 412); } //do some basic tests if ($doc->documentElement->nodeName != 'rdf:RDF') { throw new Zend_Controller_Action_Exception('Recieved RDF-XML is not valid: expected <rdf:RDF/> rootnode, got <' . $doc->documentElement->nodeName . '/>', 412); } $Descriptions = $doc->documentElement->getElementsByTagNameNs(OpenSKOS_Rdf_Parser::$namespaces['rdf'], 'Description'); if ($Descriptions->length != 1) { throw new Zend_Controller_Action_Exception('Expected exactly one /rdf:RDF/rdf:Description, got ' . $Descriptions->length, 412); } //is a tenant, collection or api key set in the XML? foreach (array('tenant', 'collection', 'key') as $attributeName) { $value = $doc->documentElement->getAttributeNS(OpenSKOS_Rdf_Parser::$namespaces['openskos'], $attributeName); if ($value) { $this->getRequest()->setParam($attributeName, $value); } } $tenant = $this->_getTenant(); $collection = $this->_getCollection(); $user = $this->_getUser(); $data = array('tenant' => $tenant->code, 'collection' => $collection->id); try { $solrDocument = OpenSKOS_Rdf_Parser::DomNode2SolrDocument($Descriptions->item(0), $data); } catch (OpenSKOS_Rdf_Parser_Exception $e) { throw new Zend_Controller_Action_Exception($e->getMessage(), 400); } //get the Concept based on it's URI: $concept = $this->model->getConcept($solrDocument['uri'][0]); //modify the UUID of the Solr Document: if (null !== $concept) { $solrDocument->offsetUnset('uuid'); $solrDocument->offsetSet('uuid', $concept['uuid']); // Preserve any old data which is not part of the rdf. if (isset($concept['created_by'])) { $solrDocument->offsetSet('created_by', $concept['created_by']); } if (isset($concept['modified_by'])) { $solrDocument->offsetSet('modified_by', $concept['modified_by']); } if (isset($concept['approved_by'])) { $solrDocument->offsetSet('approved_by', $concept['approved_by']); } if (isset($concept['deleted_by'])) { $solrDocument->offsetSet('deleted_by', $concept['deleted_by']); } if (isset($concept['toBeChecked'])) { $solrDocument->offsetSet('toBeChecked', $concept['toBeChecked']); } } if ($this->getRequest()->getActionName() == 'put') { if (!$concept) { throw new Zend_Controller_Action_Exception('Concept `' . $solrDocument['uri'][0] . '` does not exists, try POST-ing it to create it as a new concept.', 404); } } else { if ($concept) { throw new Zend_Controller_Action_Exception('Concept `' . $solrDocument['uri'][0] . '` already exists', 409); } } try { $solrDocument->save(true); } catch (OpenSKOS_Solr_Exception $e) { throw new Zend_Controller_Action_Exception('Failed to save Concept `' . $solrDocument['uri'][0] . '`: ' . $e->getMessage(), 400); } $location = $this->view->serverUrl() . $this->view->url(array('controller' => 'concept', 'action' => 'get', 'module' => 'api', 'id' => $solrDocument['uuid'][0]), 'rest', true); $this->getResponse()->setHeader('Content-Type', 'text/xml; charset="utf-8"', true)->setHeader('Location', $location)->setHttpResponseCode(201); echo $doc->saveXml($Descriptions->item(0)); }
/** * Translate data from dc mapping to dc nodes * * @return array */ protected function getDcNodesFromData() { $dcNodes = array(); $dcMapping = $this->getDcFieldsMapping(); foreach ($dcMapping['normalFields'] as $field) { if (isset($this->data[$field])) { $dcNodes = array_merge($dcNodes, OpenSKOS_Rdf_Parser::createDcField($field, $this->data[$field])); } } foreach ($dcMapping['languageFields'] as $field) { if (isset($this->data[$field])) { $dcNodes = array_merge($dcNodes, OpenSKOS_Rdf_Parser::createDcLanguageField($field, $this->data[$field])); } } return $dcNodes; }