コード例 #1
0
ファイル: literals_tests.php プロジェクト: VUW-SIM-FIS/emiemi
 /**
  * tests if equals() works according to the RDF specifications
  *
  */
 function testEquals()
 {
     $_SESSION['test'] = 'Litras Equals test';
     $literal1 = new Literal('test');
     $literal2 = new Literal('test');
     $this->assertTrue($literal1->equals($literal2));
     $literal2->setLanguage('DE');
     $this->assertFalse($literal1->equals($literal2));
     $literal1->setLanguage('FR');
     $this->assertFalse($literal1->equals($literal2));
     $literal1->setLanguage('DE');
     $this->assertTrue($literal1->equals($literal2));
     $literal1->setDatatype("http://www.w3.org/TR/xmlschema-2/integer");
     $this->assertFalse($literal1->equals($literal2));
     $literal2->setDatatype("http://www.w3.org/TR/xmlschema-2/integer1");
     $this->assertFalse($literal1->equals($literal2));
     $literal2->setDatatype("http://www.w3.org/TR/xmlschema-2/integer");
     $this->assertTrue($literal1->equals($literal2));
 }
コード例 #2
0
ファイル: rdql.php プロジェクト: komagata/plnet
function generateResultStatementsFromVarResult(&$result, $parsedq, &$outm, $closure, &$model)
{
    foreach ($parsedq['patterns'] as $n => $pattern) {
        if (substr($pattern['subject']['value'], 0, 1) == '?') {
            $subj = $result[$pattern['subject']['value']];
        } else {
            $subj = new Resource($pattern['subject']['value']);
        }
        if (substr($pattern['predicate']['value'], 0, 1) == '?') {
            $pred = $result[$pattern['predicate']['value']];
        } else {
            $pred = new Resource($pattern['predicate']['value']);
        }
        if (substr($pattern['object']['value'], 0, 1) == '?') {
            $obj = $result[$pattern['object']['value']];
        } else {
            if ($pattern['object']['is_literal']) {
                $obj = new Literal($pattern['object']['value']);
                $obj->setDatatype($pattern['object']['l_dtype']);
                $obj->setLanguage($pattern['object']['l_lang']);
            } else {
                $obj = new Resource($pattern['object']['value']);
            }
        }
        $stmt = new Statement($subj, $pred, $obj);
        // bNode closure
        if (is_a($stmt->object(), 'BlankNode') && $closure == True) {
            getBNodeClosure($stmt->object(), $model, $outm);
        }
        if (is_a($stmt->subject(), 'BlankNode') && $closure == True) {
            getBNodeClosure($stmt->subject(), $model, $outm);
        }
        // Add statement to model
        $outm->add($stmt);
    }
}
コード例 #3
0
ファイル: RdqlDbEngine.php プロジェクト: p4535992/programate
 /**
  * Filter tuples containing variables matching all patterns from the WHERE clause
  * of an RDQL query. As a result of a database query using ADOdb these tuples
  * are returned as an ADORecordSet object, which is then passed to this function.
  *
  * @param   object ADORecordSet &$recordSet
  * @return  array  [][?VARNAME]['value']   = string
  *                             ['nType']   = string
  *                             ['l_lang']  = string
  *                             ['l_dtype'] = string
  * @access	private
  */
 function filterQueryResult(&$recordSet)
 {
     $queryResult = array();
     if (isset($this->parsedQuery['filters'])) {
         while (!$recordSet->EOF) {
             foreach ($this->parsedQuery['filters'] as $filter) {
                 $evalFilterStr = $filter['evalFilterStr'];
                 // evaluate regex equality expressions of each filter
                 foreach ($filter['regexEqExprs'] as $i => $expr) {
                     preg_match($expr['regex'], $recordSet->fields[$this->rsIndexes[$expr['var']]['value']], $match);
                     $op = substr($expr['operator'], 0, 1);
                     if ($op != '!' && !isset($match[0]) || $op == '!' && isset($match[0])) {
                         $evalFilterStr = str_replace("##RegEx_{$i}##", 'FALSE', $evalFilterStr);
                     } else {
                         $evalFilterStr = str_replace("##RegEx_{$i}##", 'TRUE', $evalFilterStr);
                     }
                 }
                 // evaluate string equality expressions
                 foreach ($filter['strEqExprs'] as $i => $expr) {
                     $exprBoolVal = 'FALSE';
                     switch ($expr['value_type']) {
                         case 'variable':
                             if ($recordSet->fields[$this->rsIndexes[$expr['var']]['value']] == $recordSet->fields[$this->rsIndexes[$expr['value']]['value']] && $expr['operator'] == 'eq' || $recordSet->fields[$this->rsIndexes[$expr['var']]['value']] != $recordSet->fields[$this->rsIndexes[$expr['value']]['value']] && $expr['operator'] == 'ne') {
                                 $exprBoolVal = 'TRUE';
                             }
                             break;
                         case 'URI':
                             if (isset($this->rsIndexes[$expr['var']]['nType']) && $recordSet->fields[$this->rsIndexes[$expr['var']]['nType']] == 'l') {
                                 if ($expr['operator'] == 'ne') {
                                     $exprBoolVal = 'TRUE';
                                 }
                                 break;
                             }
                             if ($recordSet->fields[$this->rsIndexes[$expr['var']]['value']] == $expr['value'] && $expr['operator'] == 'eq' || $recordSet->fields[$this->rsIndexes[$expr['var']]['value']] != $expr['value'] && $expr['operator'] == 'ne') {
                                 $exprBoolVal = 'TRUE';
                             }
                             break;
                         case 'Literal':
                             if (!isset($this->rsIndexes[$expr['var']]['nType']) || $recordSet->fields[$this->rsIndexes[$expr['var']]['nType']] != 'l') {
                                 if ($expr['operator'] == 'ne') {
                                     $exprBoolVal = 'TRUE';
                                 }
                                 break;
                             }
                             $filterLiteral = new Literal($expr['value'], $expr['value_lang']);
                             $filterLiteral->setDatatype($expr['value_dtype']);
                             $resultLiteral = new Literal($recordSet->fields[$this->rsIndexes[$expr['var']]['value']]);
                             $resultLiteral->setDatatype($recordSet->fields[$this->rsIndexes[$expr['var']]['l_dtype']]);
                             $resultLiteral->setLanguage($recordSet->fields[$this->rsIndexes[$expr['var']]['l_lang']]);
                             $equal = $resultLiteral->equals($filterLiteral);
                             if ($equal && $expr['operator'] == 'eq' || !$equal && $expr['operator'] == 'ne') {
                                 $exprBoolVal = 'TRUE';
                             } else {
                                 $exprBoolVal = 'FALSE';
                             }
                     }
                     $evalFilterStr = str_replace("##strEqExpr_{$i}##", $exprBoolVal, $evalFilterStr);
                 }
                 // evaluate numerical expressions
                 foreach ($filter['numExprVars'] as $varName) {
                     $varValue = "'" . $recordSet->fields[$this->rsIndexes[$varName]['value']] . "'";
                     $evalFilterStr = str_replace($varName, $varValue, $evalFilterStr);
                 }
                 eval("\$filterBoolVal = {$evalFilterStr}; \$eval_filter_ok = TRUE;");
                 if (!isset($eval_filter_ok)) {
                     trigger_error(RDQL_AND_ERR . "'" . htmlspecialchars($filter['string']) . "'", E_USER_ERROR);
                 }
                 if (!$filterBoolVal) {
                     $recordSet->MoveNext();
                     continue 2;
                 }
             }
             $queryResult[] = $this->_convertRsRowToQueryResultRow($recordSet->fields);
             $recordSet->MoveNext();
         }
     } else {
         while (!$recordSet->EOF) {
             $queryResult[] = $this->_convertRsRowToQueryResultRow($recordSet->fields);
             $recordSet->MoveNext();
         }
     }
     return $queryResult;
 }
コード例 #4
0
ファイル: RdfParser.php プロジェクト: richardjennings/rap
 /**
  * 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 MemModel
  */
 function add_statement_to_model(&$user_data, $subject_type, $subject, $predicate, $ordinal, $object_type, $object, $xml_lang, $datatype)
 {
     // ParseUnicode
     if (UNIC_RDF) {
         $subject = $this->str2unicode_nfc($subject);
         $predicate = $this->str2unicode_nfc($predicate);
         $object = $this->str2unicode_nfc($object);
     }
     //create subject
     if ($subject_type == RDF_SUBJECT_TYPE_BNODE) {
         $objsub = new BlankNode($subject);
     } else {
         $objsub = new Resource($subject);
     }
     // create predicate
     $objpred = new Resource($predicate);
     // create object
     if ($object_type == RDF_OBJECT_TYPE_RESOURCE || $object_type == RDF_OBJECT_TYPE_BNODE) {
         if ($object_type == RDF_OBJECT_TYPE_BNODE) {
             $objobj = new BlankNode($object);
         } else {
             $objobj = new Resource($object);
         }
     } else {
         $objobj = new Literal($object);
         if ($datatype != '') {
             $objobj->setDatatype($datatype);
         } elseif ($xml_lang != '') {
             $objobj->setLanguage($xml_lang);
         }
     }
     // create statement
     $statement = new Statement($objsub, $objpred, $objobj);
     // add statement to model
     if (CREATE_MODEL_WITHOUT_DUPLICATES == TRUE) {
         $this->model->addWithoutDuplicates($statement);
     } else {
         $this->model->add($statement);
     }
 }
コード例 #5
0
ファイル: RdqlMemEngine.php プロジェクト: helenadeus/s3db.map
 /**
  * Search in $memModel for triples matching one pattern from the WHERE clause.
  * 'ANY' input for $subjLabel..$objLabel, $obj_is will match anything.
  * NULL input for $objDtype will only match obj->dtype = NULL
  * NULL input for $objLanguage will match obj->lang = NULL or anything if a
  * literal is datatyped (except for XMLLiterals and plain literals)
  * This method also checks internal bindings if provided.
  *
  * @param   object MemModel $memModel
  * @param   string $subjLabel
  * @param   string $predLabel
  * @param   string $objLabel
  * @param   string $obj_is
  * @param   string $objLanguage
  * @param   string $objDtype
  * @param   array  $intBindings [] = string
  * @return  object MemModel
  * @access	private
  */
 function findTriplesMatchingPattern(&$memModel, $subjLabel, $predLabel, $obj_is, $objLabel, $objLang, $objDtype, &$intBindings)
 {
     $res = new MemModel();
     if ($memModel->isEmpty()) {
         return $res;
     }
     if ($subjLabel == 'ANY') {
         $subj = NULL;
     } else {
         $subj = new Resource($subjLabel);
     }
     if ($predLabel == 'ANY') {
         $pred = NULL;
     } else {
         $pred = new Resource($predLabel);
     }
     if ($objLabel == 'ANY') {
         $obj = NULL;
     } else {
         if ($obj_is == 'Literal') {
             $obj = new Literal($objLabel);
             $obj->setDatatype($objDtype);
             $obj->setLanguage($objLang);
         } else {
             $obj = new Resource($objLabel);
         }
     }
     $res = $memModel->find($subj, $pred, $obj);
     if ($intBindings) {
         foreach ($res->triples as $triple) {
             if (!$this->_checkIntBindings($triple, $intBindings)) {
                 $res->remove($triple);
             }
         }
     }
     return $res;
 }
コード例 #6
0
ファイル: Model.php プロジェクト: p4535992/programate
 /**
  * Perform an RDQL query on this Model. Should work with all types of models.
  * This method returns a MemModel containing the result statements.
  * If $closure is set to TRUE, the result will additionally contain
  * statements found by the findForward-method for blank nodes.
  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  * WARNING: If called with $closure = TRUE this method
  *          can be slow with large models.
  * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
  *
  * @author   Anton K�tlbacher <*****@*****.**>
  * @author   code snippets taken from the RAP Netapi by Phil Dawes and Chris Bizer
  * @access   public
  * @param    string $queryString
  * @param    boolean $closure
  * @return   object MemModel
  *
  */
 function &getMemModelByRDQL($queryString, $closure = FALSE)
 {
     require_once RDFAPI_INCLUDE_DIR . PACKAGE_RDQL;
     $parser = new RdqlParser();
     $parsedQuery =& $parser->parseQuery($queryString);
     // If there are variables used in the pattern but not
     // in the select clause, add them to the select clause
     foreach ($parsedQuery['patterns'] as $n => $pattern) {
         foreach ($pattern as $key => $val_1) {
             if ($val_1['value'][0] == '?') {
                 if (!in_array($val_1['value'], $parsedQuery['selectVars'])) {
                     array_push($parsedQuery['selectVars'], $val_1['value']);
                 }
             }
         }
     }
     if (is_a($this, "DbModel")) {
         $engine = new RdqlDbEngine();
         $model = $this;
     } elseif (is_a($this, "MemModel")) {
         $engine = new RdqlMemEngine();
         $model = $this;
     } elseif (is_a($this, "ResModel")) {
         $engine = new RdqlMemEngine();
         $model = $this->model;
     }
     $res = $engine->queryModel($model, $parsedQuery, TRUE);
     $rdqlIter = new RdqlResultIterator($res);
     $newModel = new MemModel();
     // Build statements from RdqlResultIterator
     while ($rdqlIter->hasNext()) {
         $result = $rdqlIter->next();
         foreach ($parsedQuery['patterns'] as $n => $pattern) {
             if (substr($pattern['subject']['value'], 0, 1) == '?') {
                 $subj = $result[$pattern['subject']['value']];
             } else {
                 $subj = new Resource($pattern['subject']['value']);
             }
             if (substr($pattern['predicate']['value'], 0, 1) == '?') {
                 $pred = $result[$pattern['predicate']['value']];
             } else {
                 $pred = new Resource($pattern['predicate']['value']);
             }
             if (substr($pattern['object']['value'], 0, 1) == '?') {
                 $obj = $result[$pattern['object']['value']];
             } else {
                 if (isset($pattern['object']['is_literal'])) {
                     $obj = new Literal($pattern['object']['value']);
                     $obj->setDatatype($pattern['object']['l_dtype']);
                     $obj->setLanguage($pattern['object']['l_lang']);
                 } else {
                     $obj = new Resource($pattern['object']['value']);
                 }
             }
             $statement = new Statement($subj, $pred, $obj);
             $newModel->add($statement);
             // findForward() Statements containing an eventually given blank node
             // and add them to the result, if closure = true
             if (is_a($statement->object(), 'BlankNode') && $closure == True) {
                 $newModel = $model->findForward($statement->object(), NULL, NULL, $newModel);
             }
             if (is_a($statement->subject(), 'BlankNode') && $closure == True) {
                 $newModel = $model->findForward($statement->subject(), NULL, NULL, $newModel);
             }
         }
     }
     return $newModel;
 }
コード例 #7
0
ファイル: dBModel_test.php プロジェクト: Gigi33/exif2rdf
 function _generateModelLiteral()
 {
     $model = new MemModel();
     $model->setBaseURI('http://www.example.org');
     $sub = new Resource('http://www.example.org/subject1');
     $pred = new Resource('http://www.example.org/predicate1');
     $obj = new Literal('http://www.example.org/object1');
     $obj->setDatatype('test');
     $obj->setLanguage('DE');
     $model->add(new Statement($sub, $pred, $obj));
     return $model;
 }
コード例 #8
0
 function tagClosed($parser, $name)
 {
     if ($this->mode == 1) {
         $lit = new Literal($this->current_literal);
         if ($this->lang) {
             $lit->setLanguage($this->lang);
         }
         if ($this->dtype) {
             $lit->setDatatype($this->dtype);
         }
         $this->arrOutput[$this->counter][$this->varname] = $lit;
         $this->mode = -1;
     }
 }
コード例 #9
0
ファイル: TriXParser.php プロジェクト: p4535992/programate
 /**
  * return a mathing resource tyoe
  *
  * @param   string  
  * @param   object simpleXMLNode $value
  * @access	private
  */
 function _element2Resource($tag, $value)
 {
     switch ($tag) {
         case 'uri':
             return new Resource((string) $value);
             break;
         case 'id':
             return new BlankNode((string) $value);
             break;
         case 'typedLiteral':
             $literal = new Literal((string) $value);
             $literal->setDatatype((string) $value['datatype']);
             return $literal;
             break;
         case 'plainLiteral':
             $literal = new Literal((string) $value);
             if (isset($value['xml:lang'])) {
                 $literal->setLanguage((string) $value['xml:lang']);
             }
             return $literal;
             break;
     }
 }
コード例 #10
0
ファイル: SparqlResultParser.php プロジェクト: komagata/plnet
 function tagData($parser, $tagData)
 {
     switch ($this->mode) {
         case 0:
             $this->arrOutput[$this->counter][$this->varname] = new Resource($tagData);
             $this->mode = -1;
             break;
         case 1:
             $lit = new Literal($tagData);
             if ($this->lang) {
                 $lit->setLanguage($this->lang);
             }
             if ($this->dtype) {
                 $lit->setDatatype($this->dtype);
             }
             $this->arrOutput[$this->counter][$this->varname] = $lit;
             $this->mode = -1;
             break;
         case 2:
             if ($tagData == "/") {
                 $bn = "bNode" . $this->bncounter;
                 $this->bncounter++;
             } else {
                 $bn = $tagData;
             }
             $this->arrOutput[$this->counter][$this->varname] = new BlankNode($bn);
             $this->mode = -1;
             break;
         case 3:
             $this->arrOutput = $tagData;
             $this->mode = -1;
             break;
     }
 }