Example #1
0
 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>";
     }
 }
Example #2
0
     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;
Example #3
0
 /**
  * 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;
 }
Example #4
0
 }
 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));
 }
Example #6
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;
 }