/** * This method takes a json encoded rdf-model and a reference to aa (usually empty) MemModel, parses the json * string and adds the statements to the given MemModel. * * @param string $jsonString The string that contains the rdf model, encoded as a json-string. * @param MemModel $model A reference to the model, where to add the statements, usually an empty MemModel. */ public function generateModelFromString($jsonString, $model) { $jsonModel = array(); $jsonModel = json_decode($jsonString, true); // throws an excpetion if json model was corrupt if (!is_array($jsonModel)) { throw new Exception('error in json string'); } foreach ($jsonModel as $subject => $remain) { foreach ($remain as $predicate => $object) { $s = strpos($subject, '_') === 0 ? new BlankNode(substr($subject, 2)) : new Resource($subject); $p = new Resource($predicate); foreach ($object as $obj) { if ($obj['type'] === 'uri') { $o = new Resource($obj['value']); } else { if ($obj['type'] === 'bnode') { $o = new BlankNode(substr($obj['value'], 2)); } else { $dtype = isset($obj['datatype']) ? $obj['datatype'] : ''; $lang = isset($obj['lang']) ? $obj['lang'] : ''; $oVal = $obj['value']; $o = new Literal($oVal, $lang); $o->setDatatype($dtype); } } $model->add(new Statement($s, $p, $o)); } } } }
function _doFindFromFile($file, &$model) { $nullVarURIs = array('var:x', 'var:y', 'var:z'); $mod = new MemModel(); $mod->load($file); $return = new MemModel(); foreach ($mod->triples as $statement) { if (in_array($statement->getLabelSubject(), $nullVarURIs)) { $findS = null; } else { $findS = $statement->getSubject(); } if (in_array($statement->getLabelPredicate(), $nullVarURIs)) { $findP = null; } else { $findP = $statement->getPredicate(); } if (in_array($statement->getLabelObject(), $nullVarURIs)) { $findO = null; } else { $findO = $statement->getObject(); } $return->addModel($model->find($findS, $findP, $findO)); } return $return; }
function testSerialize() { $ser = new JsonSerializer(); $jsonString = $ser->serialize($this->model); $memModel = new MemModel(); $memModel->loadFromString($jsonString, 'json'); $this->assertTrue($this->model->equals($memModel)); }
function _generateModel($num, $ind) { $model = new MemModel(); $model->index($ind); for ($i = 0; $i < $num; $i++) { $subs[$i] = new Resource('http://www.example.org/sub' . $i % 3); $preds[$i] = new Resource('http://www.example.org/pred' . $i % 5); $objs[$i] = new Resource('http://www.example.org/obj' . $i % 9); $stat = new Statement($subs[$i], $preds[$i], $objs[$i]); $model->add($stat); } return $model; }
function testGenerateModelFromString() { $parser = new JsonParser(); $model = new MemModel('http://example.com/'); try { $parser->generateModelFromString($this->modelString, $model); } catch (Exception $e) { $this->fail($e->getMessage()); } #echo "<pre>"; #print_r($model); global $short_datatype; $model2 = new MemModel('http://example.com/'); // Ceate new statements and add them to the model $statement1 = new Statement(new Resource('http://example.org/about'), new Resource('http://purl.org/dc/elements/1.1/creator'), new Literal('Anna Wilder')); $statement2 = new Statement(new Resource('http://example.org/about'), new Resource("http://purl.org/dc/elements/1.1/title"), new Literal('Annas Homepage', 'en')); $statement3 = new Statement(new Resource('http://example.org/about'), new Resource('http://xmlns.com/foaf/0.1/maker'), new BlankNode('person')); $statement4 = new Statement(new BlankNode('person'), new Resource("http://xmlns.com/foaf/0.1/homepage"), new Resource('http://example.org/about')); $statement5 = new Statement(new Resource('http://example.org/about'), new Resource("http://purl.org/dc/elements/1.1/title2"), new Literal('Anns HP', 'en', $short_datatype['STRING'])); $statement6 = new Statement(new Resource('http://example.org/about'), new Resource("http://purl.org/dc/elements/1.1/title2"), new Literal('Anns HP', 'en', $short_datatype['INTEGER'])); $statement7 = new Statement(new BlankNode('person'), new Resource("http://example.com/testProp1"), new Literal("\"double quote\nnewline\ttab\rcarriage return\\reverse solidus")); $model2->add($statement1); $model2->add($statement2); $model2->add($statement3); $model2->add($statement4); $model2->add($statement5); $model2->add($statement7); $this->assertTrue($model->containsAll($model2)); $model2->remove($statement5); $model2->add($statement6); $this->assertFalse($model->containsAll($model2)); #echo "<pre>"; #print_r($model2); #echo "</pre>"; }
function testRdfParser() { $_SESSION['test'] = 'Rdf- Parser Empty Resource test'; $mod1 = new MemModel(); $mod2 = new MemModel(); $mod1->load('emptyResource.rdf'); $mod2->load('emptyResource_serialized.rdf'); if ($mod1->equals($mod2)) { $pass = true; } else { $pass = false; } $this->assertTrue($pass); }
function testIsEquals() { foreach ($_SESSION['rdf_positive_tests'] as $key => $value) { $model1 = new MemModel(); $model2 = new MemModel(); $file = $value; $_SESSION['test'] =& $value; $_SESSION['key'] =& $key; $model1->load(TESTCASES_DIR . $file . ".rdf"); $_SESSION['mod1'] = $model1; $model2->load(TESTCASES_DIR . $file . ".nt"); $_SESSION['mod2'] = $model2; $this->assertTrue($model1->equals($model2)); } }
/** * loads namespaces from file or rewrites from configuration model */ function loadNamespaces($url) { if ($url) { $nmsp_m = new MemModel(); $nmsp_m->load($url); $this->ns = $nmsp_m->getParsedNamespaces(); if (!$this->ns) { trigger_error("The file:" . $url . "does not contain any namespace declarations." . "The prefixes from the configuration model will be used instead"); } } else { $nmsp = $this->m->getParsedNamespaces(); if ($nmsp) { $this->ns = RAPpubbyURIrewriter::rewrNamespaces($nmsp); } } }
/** * parser overwrites the prefixes defined in the default_prefixes array */ function testOverwritingDefaultParser() { $_SESSION['test'] = 'Overwriting default parser test'; $string = "<?xml version='1.0'?>\n \t\t\t\t<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'\n \t\t\txmlns:exterms='http://www.example.org/terms/'>\n\t\t\t\t\t<rdf:Description rdf:about='http://www.example.org/index.html'>\n\t\t\t\t\t\t<exterms:creation-date>August 16, 1999</exterms:creation-date>\n\t\t\t\t\t</rdf:Description>\n\t\t\t\t</rdf:RDF>"; // delete default prefixes global $default_prefixes; $backup = $default_prefixes; foreach ($default_prefixes as $name => $pref) { unset($default_prefixes[$name]); } $default_prefixes = array('foo' => RDF_NAMESPACE_URI); $model = new MemModel(); $model->load($string); $nmsp = $model->getParsedNamespaces(); $this->assertEqual($nmsp[RDF_NAMESPACE_URI], 'rdf'); $default_prefixes = $backup; }
function testRdfSerializer() { $_SESSION['test'] = 'Rdf- Parser Empty Resource test'; $mod1 = new MemModel(); $mod2 = new MemModel(); $mod3 = new MemModel(); $mod1->load('multipleTypes.rdf'); $mod1->saveAs('mt1.rdf', 'rdf'); $mod3->load('mt1.rdf'); $mod2->load('multipleTypes.rdf'); $_SESSION['mod1'] = $mod3; $_SESSIOn['mod2'] = $mod2; if ($mod3->equals($mod2)) { $pass = true; } else { $pass = false; } $this->assertTrue($pass); }
/** * generates a test model containing given number of statements * and given indextype. * * @return Object MemModel $model * @param int $num * @param int $des * @param int $ind * @param Object MemModel $needle */ function _generateModel($num, $des, $ind, $needle) { $model = new MemModel(); // generate Subjects for ($i = 0; $i < $num; $i++) { $subs[$i] = new Resource('http://www.example.org/Subject' . $i % 6); } // generate Predicates for ($i = 0; $i < $num; $i++) { $preds[$i] = new Resource('http://www.example.org/Predicate' . $i % 7); } // generate Objects for ($i = 0; $i < $num; $i++) { $objs[$i] = new Resource('http://www.example.org/Object' . $i % 5); } for ($i = 0; $i < $num; $i++) { $model->add(new Statement($subs[$i], $preds[$i], $objs[$i])); } $model->index($ind); return $model; }
/** * SPO (also known as "Triples" or "find(spo)") is an experimental minimal query language. * An SPO query is a single triple pattern, with optional subject (parameter "s"), predicate (parameter "p"), * and object (parameter "o", if a URIref, parameter "v" for a string literal). * Absence of a parameter implies "any" for matching that slot of the triple pattern. * * @version $Id: spo.php 268 2006-05-15 05:28:09Z tgauss $ * @author Chris Bizer <*****@*****.**> * @author Phil Dawes <*****@*****.**> * * @package netapi * @todo Support typed literals. * @access public */ function spoQuery($model, $serializer, $remove = false, $modelId = false) { // Get SPO query from HTTP request if (isset($_REQUEST['s'])) { $subject = new Resource($_REQUEST['s']); } else { $subject = NULL; } if (isset($_REQUEST['p'])) { $predicate = new Resource($_REQUEST['p']); } else { $predicate = NULL; } if (isset($_REQUEST['o'])) { $object = new Resource($_REQUEST['o']); } else { if (isset($_REQUEST['v'])) { $object = new Literal($_REQUEST['v']); } else { $object = NULL; } } if (isset($_REQUEST['closure'])) { if (strtoupper($_REQUEST['closure']) == "TRUE") { $closure = True; } else { $closure = False; } } else { $closure = False; } $outm = new MemModel(); $resultmodel = $model->find($subject, $predicate, $object); $it = $resultmodel->getStatementIterator(); while ($it->hasNext()) { $stmt = $it->next(); if ($remove) { $model->remove($stmt); } else { $outm->add(new Statement($stmt->subject(), $stmt->predicate(), $stmt->object())); 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); } } } if ($remove) { if (substr($modelId, 0, 5) == "file:") { $model->saveAs(substr($modelId, 5)); } if ($resultmodel->size() > 0) { header('200 - OK'); echo "200 - OK"; } else { echo "No matching statements"; } } else { echo $serializer->Serialize($outm); } $outm->close(); }
function _generateRDF() { $model = new MemModel(); $model->setBaseURI($this->doclink); $proc = new xsltprocessor(); include_once RDFAPI_INCLUDE_DIR . PACKAGE_SYNTAX_RDF; $pars = new RdfParser(); foreach ($this->stylelink as $key => $value) { $xsl = new DomDocument(); $xsl->load($value); $proc->importStyleSheet($xsl); $model->addModel($pars->generateModel($proc->transformToXML($this->domdoc), $this->doclink)); } return $model; }
<?php // Include RAP define("RDFAPI_INCLUDE_DIR", "./../api/"); include RDFAPI_INCLUDE_DIR . "RdfAPI.php"; ## 1. Connect to MsAccess database (via ODBC) ## ------------------------------------------ // Connect to MsAccess (rdf_db DSN) database using connection settings // defined in constants.php : $rdf_database = new DbStore(); ## 2. Store a memory model in database. ## ------------------------------------ // Load an RDF-Documtent into a memory model // Filename of an RDF document $base = "example1.rdf"; // Create a new memory model $memModel = new MemModel(); // Load and parse document $memModel->load($base); // Now store the model in database // An unique modelURI will be generated $rdf_database->putModel($memModel); // You can also provide an URI for the model to be stored $modelURI = "example1.rdf"; // But then you must check if there already is a model with the same modelURI // otherwise the method putModel() will return FALSE if ($rdf_database->modelExists($modelURI)) { echo "Model with the same URI: '{$modelURI}' already exists"; } else { $rdf_database->putModel($memModel, $modelURI); } ## 3. Create a new database model
private function addBookToModel(SimpleXMLElement $item, MemModel $model) { $itemresource = new Resource($this->uri); // rdf:type $model->add(new Statement($itemresource, new Resource(RDF_NAMESPACE_URI . RDF_TYPE), new Resource("http://sites.wiwiss.fu-berlin.de/suhl/bizer/bookmashup/simpleCommerceVocab01.rdf#Book"))); // homepage (link to details page @ amazon) //$model->add(new Statement($itemresource ,new Resource("http://xmlns.com/foaf/0.1/homepage"),new Resource($item->DetailPageURL))); // label $model->add(new Statement($itemresource, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal((string) $item->ItemAttributes->Title))); // date $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/date"), new Literal((string) $item->ItemAttributes->PublicationDate))); // title $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/title"), new Literal((string) $item->ItemAttributes->Title))); //large image $model->add(new Statement($itemresource, new Resource("http://xmlns.com/foaf/0.1/depiction"), new Resource((string) $item->LargeImage->URL))); // thumbnail $model->add(new Statement($itemresource, new Resource("http://xmlns.com/foaf/0.1/thumbnail"), new Resource((string) $item->SmallImage->URL))); // isbn $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/identifier"), new Resource("urn:ISBN:" . $item->ItemAttributes->ISBN))); // publisher $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/publisher"), new Literal((string) $item->ItemAttributes->Label))); // format if (isset($item->ItemAttributes->format)) { $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/format"), new Literal((string) $item->ItemAttributes->format))); } if (isset($item->ItemAttributes->Binding)) { $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/format"), new Literal((string) $item->ItemAttributes->Binding))); } // reviews $i = 1; foreach ($item->EditorialReviews->EditorialReview as $index => $review) { $newuri = str_replace("/books/", "/reviews/", $this->uri); $pos = strrpos($newuri, "/"); $review = new Resource($newuri . "_" . $index . $i); $model->add(new Statement($itemresource, new Resource("http://dannyayers.com/xmlns/rev/#hasReview"), $review)); $model->add(new Statement($review, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal("Review number " . $i . " about: " . $item->ItemAttributes->Title))); $i++; } // author $newuri = str_replace("/books/", "/persons/", $this->uri); $pos = strrpos($newuri, "/"); if (isset($item->ItemAttributes->Author)) { foreach ($item->ItemAttributes->Author as $k => $author) { $authorUri = new Resource(substr($newuri, 0, $pos + 1) . urlencode($author)); $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/creator"), $authorUri)); $model->add(new Statement($authorUri, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal((string) $author))); } } // subject(s) $newuri = str_replace("/books/", "/subject/", $this->uri); $skosSubject = new Resource("http://www.w3.org/2004/02/skos/core#subject"); $pos = strrpos($newuri, "/"); if (isset($item->Subjects)) { foreach ($item->Subjects as $k => $subjects) { foreach ($subjects as $kk => $subject) { $subjectUri = new Resource(substr($newuri, 0, $pos + 1) . urlencode($subject)); $model->add(new Statement($itemresource, $skosSubject, $subjectUri)); $model->add(new Statement($subjectUri, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal((string) $subject))); } } } if (isset($item->ItemAttributes->Creator)) { foreach ($item->ItemAttributes->Creator as $key => $creator) { $creatorUri = new Resource(substr($newuri, 0, $pos + 1) . urlencode($creator)); $model->add(new Statement($itemresource, new Resource("http://purl.org/dc/elements/1.1/creator"), $creatorUri)); $model->add(new Statement($creatorUri, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal((string) $creator))); } } // amazon offer $newuri = str_replace("/books/", "/offers/", $this->uri); $pos = strrpos($newuri, "/"); $offer = new Resource($newuri . "amazonOffer"); $model->add(new Statement($itemresource, new Resource("http://sites.wiwiss.fu-berlin.de/suhl/bizer/bookmashup/simpleCommerceVocab01.rdf#hasOffer"), $offer)); $model->add(new Statement($offer, new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal("Offer for the book with the ISBN: " . $item->ItemAttributes->ISBN))); // create OFFER from google $this->addGoogleOffersToModel($model, $this->uri); // $model->add(new Statement(new Resource($this->document), new Resource("http://www.w3.org/2000/01/rdf-schema#label"), new Literal("RDF document about the book: " . $item->ItemAttributes->Title))); }
/** * Constructs a result graph. * * @param array $arVartable A table containing the result vars and their bindings * @param GraphPattern $constructPattern The CONSTRUCT pattern * @return MemModel The result graph which matches the CONSTRUCT pattern */ protected function constructGraph($arVartable, $constructPattern) { $resultGraph = new MemModel(); if (!$arVartable) { return $resultGraph; } $tp = $constructPattern->getTriplePatterns(); $bnode = 0; foreach ($arVartable as $value) { foreach ($tp as $triple) { $sub = $triple->getSubject(); $pred = $triple->getPredicate(); $obj = $triple->getObject(); if (is_string($sub) && $sub[1] == '_') { $sub = new BlankNode("_bN" . $bnode); } if (is_string($pred) && $pred[1] == '_') { $pred = new BlankNode("_bN" . $bnode); } if (is_string($obj) && $obj[1] == '_') { $obj = new BlankNode("_bN" . $bnode); } if (is_string($sub)) { $sub = $value[$sub]; } if (is_string($pred)) { $pred = $value[$pred]; } if (is_string($obj)) { $obj = $value[$obj]; } if ($sub !== "" && $pred !== "" && $obj !== "") { $resultGraph->add(new Statement($sub, $pred, $obj)); } } $bnode++; } return $resultGraph; }
/** * Reifies a statement. * Returns a new MemModel 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, 'MemModel')) { // parameter is model $statementModel = new MemModel($model_or_bNodeID->getBaseURI()); $thisStatement = new BlankNode($model_or_bNodeID); } else { // parameter is bNodeID $statementModel = new MemModel(); $thisStatement =& $model_or_bNodeID; } $RDFstatement = new Resource(RDF_NAMESPACE_URI . RDF_STATEMENT); $RDFtype = new Resource(RDF_NAMESPACE_URI . RDF_TYPE); $RDFsubject = new Resource(RDF_NAMESPACE_URI . RDF_SUBJECT); $RDFpredicate = new Resource(RDF_NAMESPACE_URI . RDF_PREDICATE); $RDFobject = new Resource(RDF_NAMESPACE_URI . RDF_OBJECT); $statementModel->add(new Statement($thisStatement, $RDFtype, $RDFstatement)); $statementModel->add(new Statement($thisStatement, $RDFsubject, $this->getSubject())); $statementModel->add(new Statement($thisStatement, $RDFpredicate, $this->getPredicate())); $statementModel->add(new Statement($thisStatement, $RDFobject, $this->Object())); return $statementModel; }
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"> <html> <head> <title>Test Traverse MemModel</title> </head> <body> <?php define("RDFAPI_INCLUDE_DIR", "./../api/"); include RDFAPI_INCLUDE_DIR . "RdfAPI.php"; // Filename of an RDF document $base = "example1.rdf"; // Create a new MemModel $model = new MemModel(); // Load and parse document $model->load($base); // Get Iterator from model $it = $model->getStatementIterator(); // Traverse model and output statements while ($it->hasNext()) { $statement = $it->next(); echo "Statement number: " . $it->getCurrentPosition() . "<BR>"; echo "Subject: " . $statement->getLabelSubject() . "<BR>"; echo "Predicate: " . $statement->getLabelPredicate() . "<BR>"; echo "Object: " . $statement->getLabelObject() . "<P>"; } // Move to the last statement and print it $it->moveLast(); $statement = $it->current(); // Traverse model backward and print statements echo $statement->toString() . "<BR>";
/** * Create a MemModel containing only the base triples (without inferred * statements) of the current InfModelB. * * @return object MemModel * @access public */ function &getBaseMemModel() { $return = new MemModel(); $return->setBaseURI($this->baseURI); foreach ($this->triples as $statement) { $return->add($statement); } $retun->addParsedNamespaces($this->getParsedNamespaces()); return $return; }
function testNestBlankAtEnd() { $mod = new MemModel(); $b3 = new BlankNode($mod); $mod->add(new Statement(new Resource('http://example.org/foo'), new Resource("http://example.org/bar2"), $b3)); $ser = new N3Serializer(); $ser->setCompress(true); $ser->setNest(true); $str = $ser->serialize($mod); //test if it can be loaded $par = new N3Parser(); $mod2 = $par->parse2model($str, false); //var_dump($str, $mod2->triples); $this->compareModelsIgnoringBlankNodes($mod, $mod2); }
/** * tests _node2ResNode() */ function test_node2ResNodeTest() { $_SESSION['test'] = 'ResModel _node2ResNode test'; $model1 = new MemModel(); $resmodel = new ResModel($model1); $literal = new Literal('Literal', 'DE'); $literal->setDatatype('type'); $result = $resmodel->_node2ResNode($literal); $this->assertIsA($result, 'ResLiteral'); $this->assertEqual($result->getLanguage(), 'DE'); $this->assertEqual($result->getDatatype(), 'type'); $model1->close(); }
/** * Search the attributes listed in $list in the dataset. * Modifies $resultGraph * * @param Array $list List containing the attributes * @param MemModel $resultGraph The result graph which describes the Resource * @return void */ protected function _getAttributes($list, $resultGraph, $varvalue) { if ($list) { foreach ($list as $attribute) { if (!$varvalue instanceof Literal) { $iter2 = $this->dataset->findInNamedGraphs(null, $varvalue, new Resource($attribute), null, true); while ($iter2->valid()) { $resultGraph->add($iter2->current()); $iter2->next(); } $iter3 = $this->dataset->findInDefaultGraph($varvalue, new Resource($attribute), null); while ($iter3->valid()) { $resultGraph->add($iter3->current()); $iter3->next(); } } } } }
/** * */ function &rewriteURIsInResDescrModel(&$rd_m) { global $_PUBBY_DATASET; global $namespaces; $rew_rd_m = new MemModel(); // uri rewriting + regex filtering if ($_PUBBY_DATASET['datasetURIPattern'] != '') { $l = strlen($_PUBBY_DATASET['datasetBase']); $iter = $rd_m->getStatementIterator(); while ($iter->hasNext()) { $triple = $iter->next(); $subj = $triple->getSubject(); // if subjURI is a datasetURI & does not match the pattern if (stripos($subj->getURI(), $_PUBBY_DATASET['datasetBase']) === 0 && !preg_match($_PUBBY_DATASET['datasetURIPattern'], substr($subj->getURI(), $l))) { continue; } else { // if predURI is a datasetURI & does not match the pattern $pred = $triple->getPredicate(); if (stripos($pred->getURI(), $_PUBBY_DATASET['datasetBase']) === 0 && !preg_match($_PUBBY_DATASET['datasetURIPattern'], substr($pred->getURI(), $l))) { continue; } else { // if obj is a Literal & objeURI is a datasetURI & does not match the pattern $obj = $triple->getObject(); if (!is_a($obj, "Literal")) { if (stripos($obj->getURI(), $_PUBBY_DATASET['datasetBase']) === 0 && !preg_match($_PUBBY_DATASET['datasetURIPattern'], substr($obj->getURI(), $l))) { continue; } else { $obj = new Resource(RAPpubbyURIrewriter::datasetURItoPubbyURI($obj->getURI())); } } $subj = new Resource(RAPpubbyURIrewriter::datasetURItoPubbyURI($subj->getURI())); $pred = new Resource(RAPpubbyURIrewriter::datasetURItoPubbyURI($pred->getURI())); $rew_rd_m->add(new Statement($subj, $pred, $obj)); } } } } else { $iter = $rd_m->getStatementIterator(); while ($iter->hasNext()) { $triple = $iter->next(); $subj = new Resource(RAPpubbyURIrewriter::datasetURItoPubbyURI($triple->getSubject()->getURI())); $pred = new Resource(RAPpubbyURIrewriter::datasetURItoPubbyURI($triple->getPredicate()->getURI())); $obj = $triple->getObject(); if (!is_a($obj, "Literal")) { $obj = new Resource(RAPpubbyURIrewriter::datasetURItoPubbyURI($obj->getURI())); } $rew_rd_m->add(new Statement($subj, $pred, $obj)); } } return $rew_rd_m; }
function _generateModelLiteral($stats, $ind) { $model = new MemModel(); $model->index($ind); for ($i = 0; $i < $stats; $i++) { $subs[$i] = new Resource('http://www.example.org/sub' . $i % 3); $preds[$i] = new Resource('http://www.example.org/pred' . $i % 5); $objs[$i] = new Literal('http://www.example.org/obj' . $i % 9); $objs[$i]->setDatatype('test'); } for ($i = 0; $i < $stats; $i++) { $model->add(new Statement($subs[$i], $preds[$i], $objs[$i])); } return $model; }
/** * */ function test1() { $inf = new RDFSBModel('http://myRDFSFModel.com'); $result = new MemModel(); $parser = new N3Parser(); $inf->addModel($parser->parse2model(' <http://example.org/baz1> <http://example.org/bat> <http://example.org/baz2> . <http://example.org/bat> <http://www.w3.org/2000/01/rdf-schema#subPropertyOf> <http://example.org/bas> . ')); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . ns0:baz1 ns0:bas ns0:baz2 ; ns0:bat ns0:baz2 . ns0:bat rdfs:subPropertyOf ns0:bas . ')); $this->assertTrue($inf->equals($result)); //next test $inf->add(new Statement(new Resource('http://example.org/bat'), new Resource('http://www.w3.org/2000/01/rdf-schema#domain'), new Resource('http://example.org/Domain1'))); $inf->add(new Statement(new Resource('http://example.org/bat'), new Resource('http://www.w3.org/2000/01/rdf-schema#range'), new Resource('http://example.org/Range1'))); $result = new MemModel(); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ns0:baz1 ns0:bas ns0:baz2 ; ns0:bat ns0:baz2 ; a ns0:Domain1 . ns0:bat rdfs:domain ns0:Domain1 ; rdfs:range ns0:Range1 ; rdfs:subPropertyOf ns0:bas . ns0:baz2 a ns0:Range1 . ')); $this->assertTrue($inf->equals($result)); // next test $inf->add(new Statement(new Resource('http://example.org/bas'), new Resource('http://www.w3.org/2000/01/rdf-schema#domain'), new Resource('http://example.org/Domain2'))); $inf->add(new Statement(new Resource('http://example.org/bas'), new Resource('http://www.w3.org/2000/01/rdf-schema#range'), new Resource('http://example.org/Range2'))); $result = new MemModel(); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ns0:baz1 ns0:bas ns0:baz2 ; ns0:bat ns0:baz2 ; a ns0:Domain1 , ns0:Domain2 . ns0:bat rdfs:domain ns0:Domain1 ; rdfs:range ns0:Range1 ; rdfs:subPropertyOf ns0:bas . ns0:bas rdfs:domain ns0:Domain2 ; rdfs:range ns0:Range2 . ns0:baz2 a ns0:Range1 , ns0:Range2 . ')); $this->assertTrue($inf->equals($result)); //next test $inf->add(new Statement(new Resource('http://example.org/Domain2'), new Resource('http://www.w3.org/2000/01/rdf-schema#subClassOf'), new Resource('http://example.org/Domain3'))); $inf->add(new Statement(new Resource('http://example.org/Domain3'), new Resource('http://www.w3.org/2000/01/rdf-schema#subClassOf'), new Resource('http://example.org/Domain2'))); $result = new MemModel(); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ns0:baz1 ns0:bas ns0:baz2 ; ns0:bat ns0:baz2 ; a ns0:Domain1 , ns0:Domain2 , ns0:Domain3 . ns0:bat rdfs:domain ns0:Domain1 ; rdfs:range ns0:Range1 ; rdfs:subPropertyOf ns0:bas . ns0:bas rdfs:domain ns0:Domain2 ; rdfs:range ns0:Range2 . ns0:baz2 a ns0:Range1 , ns0:Range2 . ns0:Domain3 rdfs:subClassOf ns0:Domain2 . ns0:Domain2 rdfs:subClassOf ns0:Domain3 . ')); $this->assertTrue($inf->equals($result)); //next test $inf->add(new Statement(new Resource('http://example.org/Range3'), new Resource('http://www.w3.org/2002/07/owl#sameAs'), new Resource('http://example.org/Range2'))); $result = new MemModel(); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . ns0:baz1 ns0:bas ns0:baz2 ; ns0:bat ns0:baz2 ; a ns0:Domain1 , ns0:Domain2 , ns0:Domain3 . ns0:baz2 a ns0:Range1 , ns0:Range2 , ns0:Range3 . ns0:bat rdfs:domain ns0:Domain1 ; rdfs:range ns0:Range1 ; rdfs:subPropertyOf ns0:bas . ns0:bas rdfs:domain ns0:Domain2 ; rdfs:range ns0:Range2 . ns0:Range3 owl:sameAs ns0:Range2 . ns0:Domain3 rdfs:subClassOf ns0:Domain2 . ns0:Domain2 rdfs:subClassOf ns0:Domain3 . ')); $this->assertTrue($inf->equals($result)); //next test $findResult = $inf->find(new Resource('http://example.org/baz2'), null, null); $result = new MemModel(); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ns0:baz2 a ns0:Range1 , ns0:Range2 , ns0:Range3 . ')); $this->assertTrue($findResult->equals($result)); //text test $inf->remove(new Statement(new Resource('http://example.org/bat'), new Resource('http://www.w3.org/2000/01/rdf-schema#subPropertyOf'), new Resource('http://example.org/bas'))); $result = new MemModel(); $result->addModel($parser->parse2model(' @prefix ns0: <http://example.org/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . ns0:baz1 ns0:bat ns0:baz2 ; a ns0:Domain1 . ns0:bas rdfs:domain ns0:Domain2 ; rdfs:range ns0:Range2 . ns0:bat rdfs:domain ns0:Domain1 ; rdfs:range ns0:Range1 . ns0:baz2 a ns0:Range1 . ns0:Range3 owl:sameAs ns0:Range2 . ns0:Domain2 rdfs:subClassOf ns0:Domain3 . ns0:Domain3 rdfs:subClassOf ns0:Domain2 . ')); $this->assertTrue($inf->equals($result)); }
if ($database->datasetExists($modelURI) == False) { // Model not found in the database header('HTTP/1.0 404 Not Found'); echo "404 - Model " . $model . " not found\n"; return; } } if ($type == 'model') { $model1 = $database->getModel($modelURI); } else { $model1 = $database->getDatasetDb($modelURI); } } elseif (substr($modelId, 0, 5) == "file:") { // File backed model $modelURI = substr($modelId, 5); $model1 = new MemModel(); $model1->load($modelURI); } else { // Undefined repository type header('HTTP/1.0 500 Internal Server Error'); echo "500 - I don't understand " . $modelId; } // Process query or update operation if ($_SERVER['QUERY_STRING'] != '') { $headers = getallheaders(); if (isset($_REQUEST['op'])) { $op = $_REQUEST['op']; if ($op == "add") { // Add Operation if (NETAPI_ALLOW_ADD == True) { addStatementsToModel($model1, $headers['Content-Type'], $HTTP_RAW_POST_DATA);
function testGetModelByRDQL6() { if (isset($model2)) { } unset($model2); $_SESSION['test'] = 'simple rdql query6'; $model = new MemModel(); $model->load('employees.rdf'); $query = ' SELECT ?resource, ?email WHERE (?resource, vcard:N, ?blank1) (?blank1, vcard:Family, ?familyName) (?resource, vcard:EMAIL, ?blank2) (?blank2, rdf:value, ?email) (?blank2, rdf:type, vcard:work) AND ?familyName ~~ "/^M/" USING vcard FOR <http://www.w3.org/2001/vcard-rdf/3.0#>'; $model2 = $model->getMemModelByRDQL($query); $this->assertEqual($model2->size(), 5); }
/** * Convert an ADORecordSet to a memory Model. * * Every successful database query returns an ADORecordSet object which is actually * a cursor that holds the current row in the array fields[]. * !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! * !!! This method can only be applied to a RecordSet with array fields[] * !!! 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 object ADORecordSet * @return object MemModel * @access private */ function _convertRecordSetToMemModel(&$recordSet) { $res = new MemModel($this->baseURI); while (!$recordSet->EOF) { // subject if ($recordSet->fields[5] == 'r') { $sub = new Resource($recordSet->fields[0]); } else { $sub = new BlankNode($recordSet->fields[0]); } // predicate $pred = new Resource($recordSet->fields[1]); // object if ($recordSet->fields[6] == 'r') { $obj = new Resource($recordSet->fields[2]); } elseif ($recordSet->fields[6] == 'b') { $obj = new BlankNode($recordSet->fields[2]); } else { $obj = new Literal($recordSet->fields[2], $recordSet->fields[3]); if ($recordSet->fields[4]) { $obj->setDatatype($recordSet->fields[4]); } } $statement = new Statement($sub, $pred, $obj); $res->add($statement); $recordSet->moveNext(); } $res->addParsedNamespaces($this->getParsedNamespaces()); return $res; }
/** * Returns a model, containing all Statements, having a Predicate, that * is supported by the inference. * * @return object Model * @access public */ function getSchema() { $res = new MemModel(); //Search the base-model for all statements, having a Predicate, that //is supported by the inference. foreach ($this->supportedInference as $inferencePredicateLabel) { $res->addModel($this->find(null, new Resource($inferencePredicateLabel), null)); } return $res; }
/** * Create a MemModel containing only the base triples * (without inferred statements) of the current InfModelF. * * @return object MemModel * @access public */ function getBaseMemModel() { $return = new MemModel(); $return->setBaseURI($this->baseURI); foreach ($this->triples as $key => $statement) { if (!in_array($key, $this->infPos)) { $return->add($statement); } } $retun->addParsedNamespaces($this->getParsedNamespaces()); return $return; }