/** * 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; }
/** * 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; } }
/** * 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); }
/** * 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); }
/** * 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; }