function test_set_comment_add_rdfs_comment_triple() { $fpmap = new QueryProfile("http://example.org/store/queryprofiles/1"); $fpmap->set_comment('my qp is kewl'); $index = ARC2::getSimpleIndex($fpmap->get_triples(), true); $this->assertEquals("my qp is kewl", $index[$fpmap->uri]['http://www.w3.org/2000/01/rdf-schema#comment'][0]); }
function sparql($I) { ##Parse the query and build the dataset #global $timer; if (is_file(S3DB_SERVER_ROOT . '/pearlib/Benchmark/Timer.php')) { require_once S3DB_SERVER_ROOT . '/pearlib/Benchmark/Timer.php'; $timer = new Benchmark_Timer(); $timer->start(); } extract($I); ##To use SPARQL with ARC library, we will need it to work with a remote endpoint. That means that we do not want to configure ARC as a datastore, but rather to retrieve the data from s3db deployments, convert it to RDF and then use ARC to run the query on it /* ARC2 static class inclusion */ ini_set("include_path", S3DB_SERVER_ROOT . "/pearlib/arc" . PATH_SEPARATOR . ini_get("include_path")); include_once "ARC2.php"; $s3ql['url'] = $in['url'] != '' ? $in['url'] : $default_uri; $s3ql['key'] = $in['key'] != '' ? $in['key'] : get_user_key($user_id, $db); $q = $in['query']; list($query, $triples, $prefixes) = parse_sparql_query($q, $s3ql); $bq .= "PREFIX " . implode("\n PREFIX ", $query['prefix']) . "\n "; $bq .= "SELECT " . $query['select'][0] . "\n "; $bq .= "FROM" . implode(" FROM ", $query['from']) . "\n "; $bq .= "WHERE " . $query['where'][0] . "\n "; preg_match_all('(\\?[A-Za-z0-9]+) ', $bq, $vars); if ($vars[0]) { $vars = array_unique($vars[0]); $sparql_vars = implode(" ", $vars); } if ($query['select'][0] != "" && $query['select'][0] != "*") { $outputCols = explode(" ", trim($query['select'][0])); $outputCols = array_filter($outputCols); $outputCols = array_intersect($vars, $outputCols); } $sparql = ereg_replace("FROM(.*)WHERE", "WHERE", $bq); #lets preprocess the order by which the must be queries must be performed to optimize speedness list($iterations, $scrambled) = iterationOrder($triples, $prefixes, true); ##$rdf_results will contain the totality of triples retrieved from s3db; ##Start a rdf-api model $iterations = array_values($iterations); $rdf = S3DB_URI_BASE . '/s3dbcore/model.n3'; #base s3db rdf model $filename = md5($rdf); $file_place = $GLOBALS['uploads'] . '/'; #$queryModel = rdf2php($rdf); #$data = $queryModel->sparqlQuery($sparql); #echo '<pre>';print_r($data);exit; if ($timer) { $timer->setMarker('Core model read into results'); } $rdf_results = array(); $performedQueries = array(); $r = 0; foreach ($iterations as $it => $triples2query) { $S3QL = array(); $S3QLfinal = array(); foreach ($triples2query as $i => $tripleInd) { $tripleString = $tripleInd; list($subject, $predicate, $object) = explode(' ', trim($tripleString)); $subject = ereg_replace('^<|>$', '', $subject); $predicate = ereg_replace('^<|>$', '', $predicate); $object = ereg_replace('^<|>$', '', $object); $triple = compact('subject', 'predicate', 'object'); #sparql triple is used to calculate the values of the variables in the triple #$sparql_triple = $sparql_prefixes_default.' SELECT * WHERE { '.ltrim($tripleString).' . }'; #now lets interpret the triple to explore the space of possible queries on S3QL $pack = compact('triple', 's3ql', 'user_id', 'db', 'prefixes', 'varType', 'discoveredData', 'it', 'varTypeWhere', 'collected_data', 'performedQueries'); $sp = sparql_navigator($pack); extract($sp); # if($timer) $timer->setMarker('Built query '.$i); ##Remove queries that were already performed if ($S3QL[0]) { foreach ($S3QL as $s => $q) { $S3QLfinal[] = $q; $queried_elements[] = $element[$s]; } $localQueries[$tripleString] = $localQueries[0]; $remoteQueries[$tripleString] = $remoteQueries[0]; $localQueries = array_filter($localQueries); $remoteQueries = array_filter($remoteQueries); } } $S3QL = $S3QLfinal; ##Remove repeated queries $S3QL = array_unique($S3QL); #if only the s3ql is requested, we can return it now if ($in['output'] == 'S3QL') { foreach ($localQueries as $sparqlVersion => $s3qlVersion) { $Q[]['S3QL'] = S3QLQuery($s3qlVersion); } foreach ($remoteQueries as $rq) { $Q[]['S3QL'] = $rq; } $root = 's3ql'; #root is just the word that xml should parse as the root for each entry $data = $Q; $cols = array('S3QL'); $format = $in['format'] == '' ? 'html' : $in['format']; $z = compact('data', 'cols', 'format', 'root'); $out = outputFormat($z); return array(true, $out); } #If paralel library is activated, use it for the data. Otherwise use the custom version #$query_answers_file = 'sparql_query_ans'.rand(100,200); $a=fopen($query_answers_file, 'a'); if (!empty($S3QL)) { if (extension_loaded('curl') && $goparallel) { // Create cURL handlers if ($timer) { $timer->setMarker('Starting queries from group ' . $it); } foreach ($S3QL as $k => $url) { $qURL = $url; $ch[$k] = curl_init(); // Set options curl_setopt($ch[$k], CURLOPT_URL, $qURL . '&format=php'); curl_setopt($ch[$k], CURLOPT_RETURNTRANSFER, 1); } $mh = curl_multi_init(); foreach ($S3QL as $k => $url) { curl_multi_add_handle($mh, $ch[$k]); } $running = null; do { curl_multi_exec($mh, $running); if ($timer) { $timer->setMarker('Query ' . $k . ' of group ' . $it . ' executed'); } } while ($running > 0); foreach ($S3QL as $k => $url) { $answer[$k] = curl_multi_getcontent($ch[$k]); if (!empty($answer[$k])) { #@fwrite($a, $answer[$k]); ##This is what takes the longest after the query, can it be replaced? $ans = unserialize($answer[$k]); $letter = $queried_elements[$r][0]; if (empty($ans)) { ##is this query part is not optional, then the result will be null ##TO BE DEVELOPED SOON } else { $rdf_results[$letter][] = $ans; } $r++; ##Add the triples to already existing triples #Line up the answer with the model if ($timer) { $timer->setMarker('Query ' . $it . '=>' . $k . ' converted to php '); } } } curl_multi_close($mh); ####Time count #$time_end = microtime(true); #$time = $time_end - $time_start; #echo "Query took ".$time." seconds\n";exit; ### } else { #Now solve the remaining triples with the constants found in this one if (is_array($localQueries) && !empty($localQueries)) { foreach ($localQueries as $sparql_triple => $s3ql) { $s3ql = array_filter(array_diff_key($s3ql, array('url' => ''))); $answer = localQ($s3ql); if (!empty($answer)) { $rdfanswer = rdf2php($answer); #Line up the answer with the model $queryModel->addModel($rdfanswer); #Now perform the query on the small model to find a constant for the remaining queries #list($data,$discovered, $discoveredData,$queryModel) = executeQuery($queryModel,$sparql_triple,$discovered,$format); } } } if (is_array($remoteQueries) && !empty($remoteQueries)) { foreach ($remoteQueries as $remoteQuery) { $answer = remoteQ($remoteQuery); if (!empty($answer)) { $rdfanswer = rdf2php($answer); #Line up the answer with the model $queryModel->addModel($rdfanswer); #Now perform the query on the small model to find a constant for the remaining queries #list($data,$discovered, $discoveredData,$queryModel) = executeQuery($queryModel,$sparql_triple,$discovered,$format); } } } } } } ##Get the data from the file ##Now, add the dictionary data if ($complete) { include_once S3DB_SERVER_ROOT . '/s3dbcore/dictionary.php'; $s3qlN = compact('user_id', 'db'); $s3qlN['from'] = 'link'; $s3qlN['format'] = 'php'; $links = query_user_dictionaries($s3qlN, $db, $user_id); $links = unserialize($links); $rdf_results['E'][0] = $links; $s3qlN = compact('user_id', 'db'); $s3qlN['from'] = 'namespaces'; $s3qlN['format'] = 'php'; $ns = query_user_dictionaries($s3qlN, $db, $user_id); $ns = unserialize($ns); if ($timer) { $timer->setMarker('Dictionary links retrieved'); } } ##Convert the result into an RDF file $data_triples = array(); if (is_array($rdf_results)) { foreach ($rdf_results as $letter => $results2rdfize) { $dont_skip_core_name = false; $dont_skip_serialized = true; if (ereg('S', $letter)) { $dont_skip_serialized = false; } if (ereg('C|R|P', $letter)) { $dont_skip_core_name = true; } foreach ($results2rdfize as $k => $data) { $tmp_triples = rdf_encode($data, $letter, 'array', $s3ql['db'], $ns, $collected_data, $dont_skip_serialized, $dont_skip_core_name); if (is_array($tmp_triples)) { $data_triples = array_merge($data_triples, $tmp_triples); } } } } if (!empty($data_triples)) { $tmp['ns'] = $prefixes; /* #this one for turtle $parser = ARC2::getComponent('TurtleParser', $a); $index = ARC2::getSimpleIndex($triples, false) ; # false -> non-flat version $rdf_doc = $parser->toTurtle($index,$prefixes); */ $parser = ARC2::getComponent('RDFXMLParser', $tmp); $index = ARC2::getSimpleIndex($data_triples, false); /* false -> non-flat version */ $rdf_doc = $parser->toRDFXML($index, $prefixes); $filename = S3DB_SERVER_ROOT . '/tmp/' . random_string(15) . '.rdf'; $rr = fopen($filename, 'a+'); fwrite($rr, $rdf_doc); fclose($rr); if ($timer) { $timer->setMarker(count($data_triples) . ' triples written to file ' . $filename); } ##The better strategy would be to let the client cpu resolve the query; return the graphs with the rdf so that a sparql on the client can handle it if ($return_file_name) { if (filesize($filename) > 0) { return array(true, $filename); } else { return array(false); } exit; } if ($redirect) { ##And now use an external service ( I gave up with ARC) to parse the query $url2search = str_replace(S3DB_SERVER_ROOT, S3DB_URI_BASE, $filename); ##Giving up on ARC, surrender to sparql.com $remote_endpoint = "http://sparql.org/sparql?query="; $bq = ereg_replace("FROM <.*>", "FROM <" . $url2search . ">", $bq); $bq = urlencode($bq); $remote_endpoint .= $bq . '&default-graph-uri=&stylesheet=/xml-to-html.xsl'; return array(true, $remote_endpoint); } #echo $filename;exit; #And finally perform the query on the model. $queryModel = rdf2php($filename); $format = $in['format'] != '' ? $in['format'] : 'html'; unlink($filename); if ($timer) { $timer->setMarker('Data converted to a model the rdf-api can query'); } if (eregi('^(sparql-xml|sparql-html)$', $format)) { switch ($format) { case 'sparql-xml': $result = $queryModel->sparqlQuery($sparql, 'XML'); break; case 'sparql-html': $result = $queryModel->sparqlQuery($sparql, 'HTML'); if ($_REQUEST['su3d']) { $timer->stop(); $profiling = $timer->getProfiling(); echo "Query took " . $profiling[count($profiling) - 1]['total'] . ' sec'; } break; } if ($result) { return array(true, $result); } else { return false; } } elseif ($format == 'html.form') { $form .= ' <html> <head> </head><body> <form method="GET" action="sparql.php" id="sparqlform"> <h5>Target Deployment(s)</h5> <input type="hidden" name="key" value="' . $s3ql['key'] . '"/> <input type="hidden" name="format" value="' . $_REQUEST['format'] . '"/> <input type = "text" id="url" size = "100%" value="' . $GLOBALS['url'] . '" name="url"> <h5>SPARQL <a href="http://www.w3.org/TR/rdf-sparql-query/" target="_blank">(help!!)</a></h5> <br /> <textarea cols="100" id="sparql" rows="10" name = "query">' . stripslashes($sparql) . '</textarea><br /> <input type="submit" value="SPARQL this!" id="submitsparql"></body> </form> '; $form .= '<br />' . count($data) . " rows"; $form .= '<br />Query took ' . (strtotime(date('His')) - $start) . ' sec'; if (count($data) > 0) { return array(true, $form); } else { return array(false); } } else { #and output the result according to requested format $data = $queryModel->sparqlQuery($sparql); if ($timer) { $timer->setMarker('Query on SPARQL data executed by rdf-api.'); } if (is_array($outputCols) && !empty($outputCols)) { ##only this one are to be shown in the final result $vars = $outputCols; } $cleanCols = array(); foreach ($vars as $varname) { $cleanCols[] = ereg_replace('^\\?', '', $varname); } $outputData = array(); if (is_array($data)) { foreach ($data as $s => $sparql_line) { foreach ($sparql_line as $sparql_var => $sparql_var_value) { if ($sparql_var_value->uri != '') { $outputData[$s][ereg_replace('^\\?', '', $sparql_var)] = $sparql_var_value->uri; } elseif ($sparql_var_value->label != '') { $outputData[$s][ereg_replace('^\\?', '', $sparql_var)] = $sparql_var_value->label; } else { $outputData[$s][ereg_replace('^\\?', '', $sparql_var)] = ""; } } } } if ($timer) { $timer->setMarker('Data converted in a format that fun outputformat can read'); } #$timer ->display(); #root is just the word that xml should parse as the root for each entry $root = 'sparql'; if ($timer) { $timer->setMarker('All variables fitted into their places to represent in the final output'); } $data = $outputData; $cols = $cleanCols; if ($_REQUEST['su3d']) { $timer->stop(); $profiling = $timer->getProfiling(); echo "Query took " . $profiling[count($profiling) - 1]['total'] . ' sec<br>'; } $z = compact('data', 'cols', 'format', 'root'); $out = outputFormat($z); echo $out; exit; if (count($data) > 0) { return array(true, $out); } else { return array(false); } } } else { return array(false); } #else { #$out= formatReturn($GLOBALS['error_codes']['no_results'], 'Your query did not return any results.', $format,''); #} }
function getSimpleIndex($flatten_objects = 1, $vals = '') { return ARC2::getSimpleIndex($this->getTriples(), $flatten_objects, $vals); }
function getSerializedTriples($triples) { $index = ARC2::getSimpleIndex($triples, 0); return $this->getSerializedIndex($index); }
function toIndex($v) { if (is_array($v)) { if (isset($v[0]) && isset($v[0]['s'])) { return ARC2::getSimpleIndex($v, 0); } return $v; } $parser = ARC2::getRDFParser($this->a); if ($v && !preg_match('/\\s/', $v)) { /* assume graph URI */ $parser->parse($v); } else { $parser->parse('', $v); } return $parser->getSimpleIndex(0); }
function getUpdatedIndex($old_index, $q) { if (!preg_match('/^\\s*(INSERT|DELETE)\\s*(INTO|FROM)?\\s*(.*)$/is', $q, $m)) { return 0; } $qt = strtolower($m[1]); $g = $this->getTargetGraph(); /* inject a target graph, if necessary */ if (!$m[2]) { $q = strtoupper($qt) . ($qt == 'insert' ? ' INTO ' : ' FROM') . ' <' . $g . '> ' . $m[3]; } /* parse the query */ $this->writeLog($q); ARC2::inc('SPARQLPlusParser'); $p =& new ARC2_SPARQLPlusParser($this->a, $this); $p->parse($q); $infos = $p->getQueryInfos(); /* errors? */ if ($errors = $this->getErrors()) { $this->setHeader('http', 'HTTP/1.1 400 Bad Request'); $this->setHeader('content-type', 'Content-type: text/plain; charset=utf-8'); $this->result = join("\n", $errors); return 0; } $q_index = ARC2::getSimpleIndex($infos['query']['construct_triples'], 0); if ($qt == 'insert') { return ARC2::getMergedIndex($old_index, $q_index); } elseif ($qt == 'delete') { return ARC2::getCleanedIndex($old_index, $q_index); } }
/** * Get generated triple index from the ARC2 parser and store in object variable */ private function extractTripleIndex() { $this->m_tripleindex = ARC2::getSimpleIndex( $this->m_triples, false ); $this->m_tripleindexflat = ARC2::getSimpleIndex( $this->m_triples, true ); }
function make_rdf_model($triples) { $parser = ARC2::getComponent('RDFXMLParser'); $index = ARC2::getSimpleIndex($triples, false); /* false -> non-flat version */ $rdf_doc = $parser->toRDFXML($index); $filename = S3DB_SERVER_ROOT . '/tmp/' . md5(rand(10000, 200000)); $rr = fopen($filename, 'a+'); fwrite($rr, $rdf_doc); fclose($rr); return $filename; }
/* false -> non-flat version */ $rdf_doc = $parser->toTurtle($index, $ns); } elseif ($format == 'json' || $format == 'rdf-json') { ini_set("include_path", S3DB_SERVER_ROOT . "/pearlib/arc" . PATH_SEPARATOR . ini_get("include_path")); include_once "ARC2.php"; $a['ns'] = $ns; $parser = ARC2::getComponent('RDFJSONSerializer', $a); $index = ARC2::getSimpleIndex($triples, false); $rdf_doc = $parser->toRDFJSON($index, $ns); } else { $format = 'n3'; ini_set("include_path", S3DB_SERVER_ROOT . "/pearlib/arc" . PATH_SEPARATOR . ini_get("include_path")); include_once "ARC2.php"; $a['ns'] = $ns; $parser = ARC2::getComponent('NTriplesSerializer', $a); $index = ARC2::getSimpleIndex($triples, false); /* false -> non-flat version */ $rdf_doc = $parser->toNTriples($index, $ns); } fwrite($fid, $rdf_doc); fclose($fid); chmod($FinalFfilename, 0777); ##Prepare to output $linkname = random_string('10') . '.' . $format; $filelink = $GLOBALS['URI'] . '/extras/' . $linkname; if (!copy($FinalFfilename, S3DB_SERVER_ROOT . '/extras/' . $linkname)) { echo "Could not copy the file. This could be because Apache does not have 'write' permission on the s3db folder or the /extras/."; exit; } if (in_array('link', array_keys($inputs))) { echo $filelink;
/** * Parse the results of a search on the contentbox. * @param string uri the URI used to obtain the search * @param string xml the xml returned from a search request * @return ResourceList */ function parse_results_xml($uri, $xml) { // fix up unprefixed rdf:resource in rss 1.0 otherwise ARC gets confused $xml = preg_replace("~rdf:li resource=~", "rdf:li rdf:resource=", $xml); $parser_args = array("bnode_prefix" => "genid", "base" => $this->uri); $resources = new ResourceList(); $resources->items = array(); $parser = ARC2::getRDFXMLParser($parser_args); $parser->parse($this->uri, $xml); $triples = $parser->getTriples(); $index = ARC2::getSimpleIndex($triples, true); $resources->title = $index[$uri][RSS_TITLE][0]; $resources->description = $index[$uri][RSS_DESCRIPTION][0]; $resources->start_index = $index[$uri][OS_STARTINDEX][0]; $resources->items_per_page = $index[$uri][OS_ITEMSPERPAGE][0]; $resources->total_results = $index[$uri][OS_TOTALRESULTS][0]; $items_resource = $index[$uri][RSS_ITEMS][0]; foreach ($index[$items_resource] as $items_property => $items_property_value) { if (strpos($items_property, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#_') === 0) { $resources->items[] = $index[$items_property_value[0]]; } } return $resources; }
public function getIndexFromData($data) { $parser = ARC2::getRDFParser(); $parser->parseData($data); return ARC2::getSimpleIndex($parser->getTriples(), false); }
function rdf_encode_old($data, $letter, $format, $db, $namespaces = false) { global $timer; define('s3db', 'http://www.s3db.org/core'); define('rdf', 'http://www.w3.org/1999/02/22-rdf-syntax-ns'); define('rdfs', 'http://www.w3.org/2000/01/rdf-schema'); #any more namespaces? $usedNS = array('' => $GLOBALS['URI'], 'dc' => 'http://purl.org/dc/terms/', 's3db' => 'http://www.s3db.org/core#', 'rdf' => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', 'rdfs' => 'http://www.w3.org/2000/01/rdf-schema#'); if ($namespaces) { foreach ($namespaces as $nInfo) { if ($nInfo['qname'] && $nInfo['url']) { if (!in_array($nInfo['qname'], array_keys($usedNS))) { #define($nInfo['qname'], $nInfo['url']); if (!ereg('(\\#|\\/)$', $nInfo['url'])) { $nInfo['url'] = $nInfo['url'] . '#'; } $usedNS[$nInfo['qname']] = $nInfo['url']; } } } } ##without a letter, we need to know what type of data is this - dictionary data? if (!$letter || !ereg('D|P|S|I|C|R|U|G', $letter)) { foreach ($data as $d => $tuple) { if ($tuple['link_id']) { #good, this is actual links - do not reify them #what will be the URI of the uid? $D = S3DB_URI_BASE; $property = $tuple['relation']; $value = $tuple['value']; $nsV = ""; $termV = ""; $nsP = ""; $termP = ""; list($nsP, $termP) = explode(":", $tuple['relation']); list($nsV, $termV) = explode(":", $tuple['value']); $s = $D . '/' . $tuple['uid']; $triple['s'] = $s; if ($nsP && $termP) { if ($usedNS[$nsP] != "") { $triple['p'] = str_replace($nsP . ":", eregi("#\$", $usedNS[$nsP]) ? $usedNS[$nsP] : $usedNS[$nsP] . "#", $property); $triple['p_type'] = 'uri'; } } if ($nsV && $termV) { if ($usedNS[$nsV] != "") { $triple['o'] = str_replace($nsV . ':', eregi("#\$", $usedNS[$nsV]) ? $usedNS[$nsV] : $usedNS[$nsV] . "#", $value); $triple['o_type'] = 'uri'; } } else { $triple['o'] = $value; if (ereg('^http', $value)) { $triple['o_type'] = 'uri'; } else { $triple['o_type'] = 'literal'; } } } if ($triple) { $triples[] = $triple; } } } else { #put data in the triple structure required by the parser foreach ($data as $ind => $res_data) { #which element are we trying to retrieve? $ID = $res_data[$GLOBALS['COREletterInv'][$letter]]; $D = S3DB_URI_BASE; $s = $D . '/' . $letter . $ID; foreach ($res_data as $property => $value) { $nsV = ""; $termV = ""; $nsP = ""; $termP = ""; list($nsP, $termP) = explode(":", $property); list($nsV, $termV) = explode(":", $value); if (!empty($value)) { if (@in_array($property, @array_keys($GLOBALS['propertyURI'][$letter]))) { $p = $GLOBALS['propertyURI'][$letter][$property]; if (in_array($property, array_keys($GLOBALS['pointer']))) { $o = $D . '/' . letter($GLOBALS['pointer'][$property]) . $value; $otype = 'uri'; } elseif (in_array($property, $GLOBALS['COREids'])) { $o = $D . '/' . letter($property) . $value; $otype = 'uri'; } elseif ($property == 'value' && RuleHasObjectId($ID, $db)) { $o = $D . '/I' . $value; $otype = 'uri'; } else { $o = $value; $otype = 'literal'; } $triple['s'] = $s; $triple['p'] = $p; $triple['o'] = $o; $triple['s_type'] = 'uri'; $triple['o_type'] = $otype; $triples[] = $triple; } elseif ($nsP && $termP) { #replace nsP by the corresponding namespace and build a triple if ($usedNS[$nsP] != "") { $triple['s'] = $s; $triple['s_type'] = 'uri'; $triple['p'] = str_replace($nsP . ":", eregi("#\$", $usedNS[$nsP]) ? $usedNS[$nsP] : $usedNS[$nsP] . "#", $property); } if ($nsV && $termV) { if ($usedNS[$nsV] != "") { $triple['o'] = str_replace($nsV . ':', eregi("#\$", $usedNS[$nsV]) ? $usedNS[$nsV] : $usedNS[$nsV] . "#", $value); $triple['o_type'] = 'uri'; } } else { $triple['o'] = $value; if (ereg('^http', $value)) { $triple['o_type'] = 'uri'; } else { $triple['o_type'] = 'literal'; } } if ($triple) { $triples[] = $triple; } } } } if ($letter == 'S') { ##Outputalso a statment for the unserialized statement where subject is item_id, pred is rule, object is value if (RuleHasObjectId($ID, $db)) { $obj = $D . '/I' . $data[$ind]['value']; $objType = 'uri'; } else { $obj = $data[$ind]['value']; $objType = 'literal'; } $triple['s'] = $D . '/I' . $data[$ind]['item_id']; $triple['p'] = $D . '/R' . $data[$ind]['rule_id']; $triple['o'] = $obj; $triple['s_type'] = 'uri'; $triple['o_type'] = $objType; $triples[] = $triple; } #And for every element that is part of the core, output a statement that mentions where in the ontology they belong $triple['s'] = $D . '/' . $letter . $ID; $triple['p'] = $usedNS['rdf'] . "type"; $triple['o'] = $usedNS['s3db'] . $GLOBALS['N3Names'][$GLOBALS['s3codes'][$letter]]; $triple['s_type'] = 'uri'; $triple['o_type'] = 'uri'; $triples[] = $triple; } } if ($format == 'rdf') { $a['ns'] = $usedNS; $parser = ARC2::getComponent('RDFXMLParser', $a); $index = ARC2::getSimpleIndex($triples, false); /* false -> non-flat version */ $rdf_doc = $parser->toRDFXML($index, $usedNS); } elseif ($format == 'turtle') { $a['ns'] = $usedNS; $parser = ARC2::getComponent('TurtleParser', $a); $index = ARC2::getSimpleIndex($triples, false); /* false -> non-flat version */ $rdf_doc = $parser->toTurtle($index, $usedNS); } elseif ($format == 'n3') { $a['ns'] = $usedNS; $parser = ARC2::getComponent('NTriplesSerializer', $a); $index = ARC2::getSimpleIndex($triples, false); /* false -> non-flat version */ $rdf_doc = $parser->toNTriples($index, $usedNS); } return $rdf_doc; }