|
From: <fu...@us...> - 2007-11-06 14:26:14
|
Revision: 546
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=546&view=rev
Author: fusel2k
Date: 2007-11-06 06:26:06 -0800 (Tue, 06 Nov 2007)
Log Message:
-----------
[create] JSON result renderer roughly following http://www.w3.org/2001/sw/DataAccess/json-sparql/
Added Paths:
-----------
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php
Added: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php (rev 0)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php 2007-11-06 14:26:06 UTC (rev 546)
@@ -0,0 +1,154 @@
+<?php
+require_once RDFAPI_INCLUDE_DIR . 'sparql/SparqlEngineDb/ResultRenderer.php';
+
+/**
+* Sparql DB JSON Renderer. Roughly follows http://www.w3.org/2001/sw/DataAccess/json-sparql/;
+*
+* @author Christoph Rie\xDF
+* @license http://www.gnu.org/licenses/lgpl.html LGPL
+*
+* @package sparql
+*/
+class SparqlEngineDb_ResultRenderer_JSON implements SparqlEngineDb_ResultRenderer
+{
+
+ /**
+ * Converts the database results into JSON Format
+ *
+ * @param array $arRecordSets Array of (possibly several) SQL query results.
+ * @param Query $query SPARQL query object
+ * @param SparqlEngineDb $engine Sparql Engine to query the database
+ * @return mixed HTML code
+ */
+ public function convertFromDbResults($arRecordSets, Query $query, SparqlEngineDb $engine) {
+
+ $this->query = $query;
+ $this->sg = $engine->getSqlGenerator();
+ $strResultForm = $query->getResultForm();
+ switch ($strResultForm) {
+ case 'select':
+ case 'select distinct':
+ $results = $this->createFromRecords($arRecordSets, $strResultForm);
+ $strCode = json_encode(array('head' => array('vars'=>$this->getResultVars()),'results'=>array('bindings'=>$results)));
+ //$strCode = str_replace(',{',','.PHP_EOL.'{',$strCode);
+ break;
+ case 'construct':
+ case 'describe':
+ throw new Exception(
+ 'Construct and describe are not supported by the'
+ . ' JSON renderer'
+ );
+
+ case 'count':
+ case 'ask':
+ if (count($arRecordSets) > 1) {
+ throw new Exception(
+ 'More than one result set for a '
+ . $strResultForm . ' query not supported by JSON Renderer'
+ );
+ }
+
+ $nCount = 0;
+ $dbRecordSet = reset($arRecordSets);
+ foreach ($dbRecordSet as $row) {
+ $nCount += intval($row['count']);
+ break;
+ }
+
+ if ($strResultForm == 'ask') {
+ $strcode = json_encode(array('boolean' => ($nCount > 0)));
+ } else {
+ $strcode = json_encode(array('int' => $nCount ));
+ }
+ break;
+ default:
+ throw new Exception('Error');
+ }
+
+ return $strCode;
+
+
+ }
+ /**
+ * Method to create from record with specific resultform (not used yet)
+ *
+ * @param array $arRecordSets Array of (possibly several) SQL query results.
+ * @param unknown_type $strResultForm
+ * @return array ready for json conversion
+ */
+ protected function createFromRecords($arRecordSets, $strResultForm) {
+
+ $arVarAssignments = $this->sg->arVarAssignments;
+ $code = '';
+ $arResultVars = $this ->getResultVars();
+ $results = array();
+ foreach ($arRecordSets[0] as $value) {
+ $node = array();
+ foreach ($arResultVars as $ResultVar) {
+ $nodeType = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_is']];
+ if ($type == 'r' || $type === null ) {
+ $node[$ResultVar] = array('type'=> 'uri','value'=>$value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']]);
+
+ }
+
+ if ($value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_is']] == 'l') {
+ $literalType = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_type']];
+ $literalLang = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_lang']];
+ $literalValue = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']];
+ $node[$ResultVar] = $this->getLiteral($literalValue,$literalLang,$literalType);
+ }
+ }
+ $results[]=$node;
+
+
+ }
+ return $results;
+
+ }
+
+ /**
+ * COnverting Literals to array ready for json
+ *
+ * @param unknown_type $value
+ * @param unknown_type $lang
+ * @param unknown_type $type
+ * @return unknown
+ */
+ private function getLiteral($value, $lang , $type) {
+
+ $ret = array();
+
+ $type = 'literal';
+
+ if ($value != 'literal') {
+ $ret['value'] = $value;
+ }
+
+ if ($lang != '') {
+ $ret['lang'] = $lang;
+ }
+
+ if ($type != '') {
+ $ret['type'] = $type;
+ }
+
+ return $ret;
+ }
+
+ /**
+ * Giving array of used Vars also resolves the all-quantifier *
+ *
+ * @return array of vars as strings
+ */
+ protected function getResultVars() {
+ $arResultVars = $this->query->getResultVars();
+ if (in_array('*', $arResultVars)) {
+ $arResultVars = array_keys($this->sg->arVarAssignments);
+ }
+
+ return $arResultVars;
+ }
+
+}
+
+?>
\ No newline at end of file
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fu...@us...> - 2007-11-15 13:45:26
|
Revision: 550
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=550&view=rev
Author: fusel2k
Date: 2007-11-15 05:45:22 -0800 (Thu, 15 Nov 2007)
Log Message:
-----------
[fix] Removed trailing ?- or $-SPARQL variable indentifiers from Output to follow http://www.w3.org/TR/rdf-sparql-json-res/
Modified Paths:
--------------
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php 2007-11-15 13:29:04 UTC (rev 549)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php 2007-11-15 13:45:22 UTC (rev 550)
@@ -25,11 +25,15 @@
$this->query = $query;
$this->sg = $engine->getSqlGenerator();
$strResultForm = $query->getResultForm();
+
+ foreach ($this->getResultVars() as $var)
+ $ResultVarsTemp[] = substr($var,1);
+
switch ($strResultForm) {
case 'select':
case 'select distinct':
$results = $this->createFromRecords($arRecordSets, $strResultForm);
- $strCode = json_encode(array('head' => array('vars'=>$this->getResultVars()),'results'=>array('bindings'=>$results)));
+ $strCode = json_encode(array('head' => array('vars'=>$ResultVarsTemp),'results'=>array('bindings'=>$results)));
//$strCode = str_replace(',{',','.PHP_EOL.'{',$strCode);
break;
case 'construct':
@@ -87,7 +91,7 @@
foreach ($arResultVars as $ResultVar) {
$nodeType = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_is']];
if ($type == 'r' || $type === null ) {
- $node[$ResultVar] = array('type'=> 'uri','value'=>$value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']]);
+ $node[substr($ResultVar,1)] = array('type'=> 'uri','value'=>$value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']]);
}
@@ -95,7 +99,7 @@
$literalType = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_type']];
$literalLang = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_lang']];
$literalValue = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']];
- $node[$ResultVar] = $this->getLiteral($literalValue,$literalLang,$literalType);
+ $node[substr($ResultVar,1)] = $this->getLiteral($literalValue,$literalLang,$literalType);
}
}
$results[]=$node;
@@ -144,6 +148,11 @@
$arResultVars = $this->query->getResultVars();
if (in_array('*', $arResultVars)) {
$arResultVars = array_keys($this->sg->arVarAssignments);
+ } else {
+ $arResultVars = array();
+ foreach ($this->query->getResultVars() as $Var) {
+ $arResultVars[] = (string) $Var;
+ }
}
return $arResultVars;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|
|
From: <fu...@us...> - 2007-11-27 13:06:17
|
Revision: 553
http://rdfapi-php.svn.sourceforge.net/rdfapi-php/?rev=553&view=rev
Author: fusel2k
Date: 2007-11-27 05:06:14 -0800 (Tue, 27 Nov 2007)
Log Message:
-----------
[fix] bnode output works correctly now
Modified Paths:
--------------
trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php
Modified: trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php
===================================================================
--- trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php 2007-11-23 09:12:11 UTC (rev 552)
+++ trunk/rdfapi-php/api/sparql/SparqlEngineDb/ResultRenderer/JSON.php 2007-11-27 13:06:14 UTC (rev 553)
@@ -33,7 +33,10 @@
case 'select':
case 'select distinct':
$results = $this->createFromRecords($arRecordSets, $strResultForm);
- $strCode = json_encode(array('head' => array('vars'=>$ResultVarsTemp),'results'=>array('bindings'=>$results)));
+ $strCode = json_encode(array(
+ 'head' => array('vars'=>$ResultVarsTemp),
+ 'results'=>array('bindings'=>$results))
+ );
//$strCode = str_replace(',{',','.PHP_EOL.'{',$strCode);
break;
case 'construct':
@@ -90,17 +93,25 @@
$node = array();
foreach ($arResultVars as $ResultVar) {
$nodeType = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_is']];
- if ($type == 'r' || $type === null ) {
+ if ($nodeType == 'r') {
$node[substr($ResultVar,1)] = array('type'=> 'uri','value'=>$value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']]);
}
if ($value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_is']] == 'l') {
- $literalType = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_type']];
- $literalLang = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_lang']];
- $literalValue = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']];
+ $literalType = $value[$arVarAssignments[$ResultVar][0] .
+ '.' . $arVarAssignments[$ResultVar]['sql_type']];
+ $literalLang = $value[$arVarAssignments[$ResultVar][0] .
+ '.' . $arVarAssignments[$ResultVar]['sql_lang']];
+ $literalValue = $value[$arVarAssignments[$ResultVar][0] .
+ '.' . $arVarAssignments[$ResultVar]['sql_value']];
$node[substr($ResultVar,1)] = $this->getLiteral($literalValue,$literalLang,$literalType);
}
+
+ if ($nodeType === 'b') {
+ $literalValue = $value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']];
+ $node[substr($ResultVar,1)] = array ('type'=>'bnode' ,'value'=>$value[$arVarAssignments[$ResultVar][0].'.'.$arVarAssignments[$ResultVar]['sql_value']]);
+ }
}
$results[]=$node;
This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site.
|