Example #1
0
 /**
  * Convert an MDB result to a memory Model.
  *
  * Every successful database query returns an MDB result
  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  * !!! This method can only be applied to a result with row arrays
  * !!! containing a representation of the database table: statements,
  * !!! with an index corresponding to following table columns:
  * !!! [0] - subject, [1] - predicate, [2] - object, [3] - l_language,
  * !!! [4] - l_datatype, [5] - subject_is, [6] - object_is
  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  *
  * @param ressource MDB Result
  * @return object Model_Memory
  * @access private
  */
 function _convertRecordSetToMemModel($result)
 {
     $res =& new RDF_Model_Memory($this->getBaseURI());
     while (is_array($row = $this->dbConn->fetchInto($result))) {
         // subject
         if ($row[5] == 'r') {
             $sub =& RDF_Resource::factory($row[0]);
         } else {
             $sub =& RDF_BlankNode::factory($row[0]);
         }
         // predicate
         $pred =& RDF_Resource::factory($row[1]);
         // object
         if ($row[6] == 'r') {
             $obj =& RDF_Resource::factory($row[2]);
         } elseif ($row[6] == 'b') {
             $obj =& RDF_BlankNode::factory($row[2]);
         } else {
             $obj =& RDF_Literal::factory($row[2], $row[3]);
             if ($row[4]) {
                 $obj->setDatatype($row[4]);
             }
         }
         $statement =& RDF_Statement::factory($sub, $pred, $obj);
         $res->add($statement);
     }
     $this->dbConn->freeResult($result);
     return $res;
 }
Example #2
0
 /**
  * Internal method, that returns a resource URI that is unique for the Model_Memory.
  * URIs are generated using the base_uri of the Model_Memory, the prefix and a unique number.
  *
  * @param string $prefix
  * @return string
  * @access private
  */
 function getUniqueResourceURI($prefix)
 {
     $counter = 1;
     while (true) {
         $uri = $this->getBaseURI() . $prefix . $counter;
         $tempbNode =& RDF_BlankNode::factory($uri);
         $res1 = $this->find($tempbNode, null, null);
         $res2 = $this->find(null, null, $tempbNode);
         if ($res1->size() == 0 && $res2->size() == 0) {
             return $uri;
         }
         ++$counter;
     }
 }
Example #3
0
 /**
  * Adds a statement from another model to this model. 
  * If the statement to be added contains a blankNode with an identifier 
  * already existing in this model, a new blankNode is generated.
  *
  * @param RDF_Object Statement   $statement
  * @access private
  */
 function _addStatementFromAnotherModel($statement, &$blankNodes_tmp)
 {
     $subject = $statement->getSubject();
     $object = $statement->getObject();
     if (is_a($subject, 'RDF_BlankNode')) {
         $label = $subject->getLabel();
         if (!array_key_exists($label, $blankNodes_tmp)) {
             if ($this->findFirstMatchingStatement($subject, null, null) || $this->findFirstMatchingStatement(null, null, $subject)) {
                 $blankNodes_tmp[$label] =& RDF_BlankNode::factory($this);
                 $statement->subj = $blankNodes_tmp[$label];
             } else {
                 $blankNodes_tmp[$label] = $subject;
             }
         } else {
             $statement->subj = $blankNodes_tmp[$label];
         }
     }
     if (is_a($object, 'RDF_BlankNode')) {
         $label = $object->getLabel();
         if (!array_key_exists($label, $blankNodes_tmp)) {
             if ($this->findFirstMatchingStatement($object, null, null) || $this->findFirstMatchingStatement(null, null, $object)) {
                 $blankNodes_tmp[$label] =& RDF_BlankNode::factory($this);
                 $statement->obj = $blankNodes_tmp[$label];
             } else {
                 $blankNodes_tmp[$label] = $object;
             }
         } else {
             $statement->obj = $blankNodes_tmp[$label];
         }
     }
     $this->add($statement);
 }
Example #4
0
 /**
  * Adds a new statement to the model
  * This method is called by generateModel().
  *
  * @access private
  * @param string &$user_data
  * @param string $subject_type
  * @param string $subject
  * @param string $predicate
  * @param string $ordinal
  * @param string $object_type
  * @param string $object
  * @param string $xml_lang )
  * @return object Model_Memory
  */
 function add_statement_to_model(&$user_data, $subject_type, $subject, $predicate, $ordinal, $object_type, $object, $xml_lang, $datatype)
 {
     // create subject
     if ($subject_type == RDF_SUBJECT_TYPE_BNODE) {
         $objsub =& RDF_BlankNode::factory($subject);
     } else {
         $objsub =& RDF_Resource::factory($subject);
     }
     // create predicate
     $objpred =& RDF_Resource::factory($predicate);
     // create object
     if ($object_type == RDF_OBJECT_TYPE_RESOURCE || $object_type == RDF_OBJECT_TYPE_BNODE) {
         if ($object_type == RDF_OBJECT_TYPE_BNODE) {
             $objobj =& RDF_BlankNode::factory($object);
         } else {
             $objobj =& RDF_Resource::factory($object);
         }
     } else {
         $objobj =& RDF_Literal::factory($object);
         if ($datatype != '') {
             $objobj->setDatatype($datatype);
         } elseif ($xml_lang != "") {
             $objobj->setLanguage($xml_lang);
         }
     }
     // create statement
     $statement =& RDF_Statement::factory($objsub, $objpred, $objobj);
     // add statement to model
     $this->model->add($statement);
 }
Example #5
0
 /**
  * Reifies a statement.
  * Returns a new Model_Memory that is the reification of the statement.
  * For naming the statement's bNode a Model or bNodeID must be passed to the method.
  *
  * @access public
  * @param mixed &$model_or_bNodeID
  * @return object model
  */
 function &reify(&$model_or_bNodeID)
 {
     if (is_a($model_or_bNodeID, 'RDF_Model_Memory')) {
         // parameter is model
         $statementModel =& new RDF_Model_Memory($model_or_bNodeID->getBaseURI());
         $thisStatement =& RDF_BlankNode::factory($model_or_bNodeID);
     } else {
         // parameter is bNodeID
         $statementModel =& new RDF_Model_Memory();
         $thisStatement =& RDF_BlankNode::factory($model_or_bNodeID);
     }
     $RDFstatement =& RDF_Resource::factory(RDF_NAMESPACE_URI . RDF_STATEMENT);
     $RDFtype =& RDF_Resource::factory(RDF_NAMESPACE_URI . RDF_TYPE);
     $RDFsubject =& RDF_Resource::factory(RDF_NAMESPACE_URI . RDF_SUBJECT);
     $RDFpredicate =& RDF_Resource::factory(RDF_NAMESPACE_URI . RDF_PREDICATE);
     $RDFobject =& RDF_Resource::factory(RDF_NAMESPACE_URI . RDF_OBJECT);
     $statementModel->add(RDF_Statement::factory($thisStatement, $RDFtype, $RDFstatement));
     $statementModel->add(RDF_Statement::factory($thisStatement, $RDFsubject, $this->getSubject()));
     $statementModel->add(RDF_Statement::factory($thisStatement, $RDFpredicate, $this->getPredicate()));
     $statementModel->add(RDF_Statement::factory($thisStatement, $RDFobject, $this->getObject()));
     return $statementModel;
 }