annotate sites/all/modules/rdfx/rdfx.query.inc @ 4:ce11bbd8f642

added modules
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:38:44 +0100
parents
children
rev   line source
danielebarchiesi@4 1 <?php
danielebarchiesi@4 2
danielebarchiesi@4 3 /**
danielebarchiesi@4 4 * @file
danielebarchiesi@4 5 * Functions for querying with SPARQL or extracting triples from an ARC2-style
danielebarchiesi@4 6 * data structure.
danielebarchiesi@4 7 */
danielebarchiesi@4 8
danielebarchiesi@4 9 function _rdfx_query_ask(&$model, $queries) {
danielebarchiesi@4 10 foreach ($queries as $query) {
danielebarchiesi@4 11 list($s, $p, $o) = $query;
danielebarchiesi@4 12 if (_rdfx_query_find_first($model, $s, $p, $o)) return true;
danielebarchiesi@4 13 }
danielebarchiesi@4 14 return false;
danielebarchiesi@4 15 }
danielebarchiesi@4 16
danielebarchiesi@4 17 function _rdfx_query_find_literal(&$model, $queries) {
danielebarchiesi@4 18 $literal = array();
danielebarchiesi@4 19 foreach ($queries as $query) {
danielebarchiesi@4 20 list($s, $p, $o) = $query;
danielebarchiesi@4 21 $triples = _rdfx_query_find_all($model, $s, $p, $o);
danielebarchiesi@4 22 // We create an associative array based on the language code of the
danielebarchiesi@4 23 // literal. The language codes Drupal uses are specified in includes/iso.inc.
danielebarchiesi@4 24 foreach ($triples as $triple) {
danielebarchiesi@4 25 if ($triple['o_lang'] !== '') {
danielebarchiesi@4 26 // Chinese and Portuguese are the only languages with a >2 letter
danielebarchiesi@4 27 // langcode.
danielebarchiesi@4 28 if (preg_match('/(zh-hans)|(zh-hant)|(pt-pt)|(pt-br)/', $triple['o_lang'])) {
danielebarchiesi@4 29 $langcode = $triple['o_lang'];
danielebarchiesi@4 30 }
danielebarchiesi@4 31 // Remove the region code if it is used (i.e. en-US is changed to en).
danielebarchiesi@4 32 else {
danielebarchiesi@4 33 $lang_array = explode('-', $triple['o_lang']);
danielebarchiesi@4 34 $langcode = !empty($lang_array[0]) ? $lang_array[0] : $triple['o_lang'];
danielebarchiesi@4 35 }
danielebarchiesi@4 36 }
danielebarchiesi@4 37 else {
danielebarchiesi@4 38 $langcode = 'und';
danielebarchiesi@4 39 }
danielebarchiesi@4 40 $literal[$langcode] = $triple['o'];
danielebarchiesi@4 41 }
danielebarchiesi@4 42 }
danielebarchiesi@4 43 return $literal;
danielebarchiesi@4 44 }
danielebarchiesi@4 45
danielebarchiesi@4 46 function _rdfx_query_find_uris(&$model, $queries) {
danielebarchiesi@4 47 $uris = array();
danielebarchiesi@4 48 foreach ($queries as $query) {
danielebarchiesi@4 49 list($s, $p, $o) = $query;
danielebarchiesi@4 50 $result = _rdfx_query_find_all($model, $s, $p, $o);
danielebarchiesi@4 51 foreach ($result as $triple) {
danielebarchiesi@4 52 if ($s == '?' && $triple['s_type'] == 'uri') {
danielebarchiesi@4 53 $uris[] = $triple['s'];
danielebarchiesi@4 54 }
danielebarchiesi@4 55 if ($p == '?') {
danielebarchiesi@4 56 $uris[] = $triple['p'];
danielebarchiesi@4 57 }
danielebarchiesi@4 58 if ($o == '?' && $triple['o_type'] == 'uri') {
danielebarchiesi@4 59 $uris[] = $triple['o'];
danielebarchiesi@4 60 }
danielebarchiesi@4 61 }
danielebarchiesi@4 62 }
danielebarchiesi@4 63 return array_unique($uris);
danielebarchiesi@4 64 }
danielebarchiesi@4 65
danielebarchiesi@4 66 function _rdfx_query_find_qnames(&$model, $queries) {
danielebarchiesi@4 67 $uris = _rdfx_query_find_uris($model, $queries);
danielebarchiesi@4 68 $qnames = array();
danielebarchiesi@4 69 foreach ($uris as $uri) {
danielebarchiesi@4 70 $qnames[] = $uri;
danielebarchiesi@4 71 }
danielebarchiesi@4 72 return $qnames;
danielebarchiesi@4 73 }
danielebarchiesi@4 74
danielebarchiesi@4 75 function _rdfx_query_find_first(&$model, $s, $p, $o) {
danielebarchiesi@4 76 foreach ($model as $triple) {
danielebarchiesi@4 77 if (!is_null($s) && $s != '?' && ($triple['s'] != $s || $triple['s_type'] != 'uri')) continue;
danielebarchiesi@4 78 if (!is_null($p) && $p != '?' && ($triple['p'] != $p)) continue;
danielebarchiesi@4 79 if (!is_null($o) && $o != '?' && ($triple['o'] != $o || $triple['o_type'] != 'uri')) continue;
danielebarchiesi@4 80 return $triple;
danielebarchiesi@4 81 }
danielebarchiesi@4 82 return null;
danielebarchiesi@4 83 }
danielebarchiesi@4 84
danielebarchiesi@4 85 function _rdfx_query_find_all(&$model, $s, $p, $o) {
danielebarchiesi@4 86 $result = array();
danielebarchiesi@4 87 foreach ($model as $triple) {
danielebarchiesi@4 88 if (!is_null($s) && $s != '?' && ($triple['s'] != $s)) continue;
danielebarchiesi@4 89 if (!is_null($p) && $p != '?' && ($triple['p'] != $p)) continue;
danielebarchiesi@4 90 if (!is_null($o) && $o != '?' && ($triple['o'] != $o)) continue;
danielebarchiesi@4 91 $result[] = $triple;
danielebarchiesi@4 92 }
danielebarchiesi@4 93 return $result;
danielebarchiesi@4 94 }