getStructType() 정적인 공개 메소드

*
static public getStructType ( $v )
예제 #1
0
 function getArraySerialization($v, $context)
 {
     $v_type = ARC2::getStructType($v);
     /* string|array|triples|index */
     $pf = ARC2::getPreferredFormat();
     /* string */
     if ($v_type == 'string') {
         return $v;
     }
     /* simple array (e.g. from SELECT) */
     if ($v_type == 'array') {
         return join(', ', $v);
         $m = method_exists($this, 'toLegacy' . $pf) ? 'toLegacy' . $pf : 'toLegacyXML';
     }
     /* rdf */
     if ($v_type == 'triples' || $v_type == 'index') {
         $m = method_exists($this, 'to' . $pf) ? 'to' . $pf : ($context == 'query' ? 'toNTriples' : 'toRDFXML');
     }
     /* else */
     return $this->{$m}($v);
 }
 /**
  * Construct dot source file based on a query result.
  *
  * @param    array   $res
  * @param    array   $infos
  * @param    String $format = 'dot'
  * @return   string
  * @access   public
  */
 function dot($triples, $format = 'dot')
 {
     if (!in_array($format, array('dot', 'png', 'svg'))) {
         return $this->addError('Unsupported format "' . $format . '"');
     }
     if (ARC2::getStructType($triples) != 'triples') {
         return $this->addError('Input structure is not a triples array.');
     }
     $dot = 'digraph arc2 {' . "\n";
     $ns = $this->v('ns', array(), $this->a);
     $nsc = 0;
     $dot .= '_ns_box_';
     // dot general graph parameters
     $dot .= 'rankdir=LR;' . 'ranksep=3;' . 'nodesep=0.3;' . "\n";
     //$vars= & $res['variables'];
     $nodes = array('uri' => array(), 'bnode' => array(), 'literal' => array());
     $edges = array('uri' => array());
     foreach ($triples as $i => $t) {
         $type = isset($t['s type']) ? $t['s type'] : $t['s_type'];
         if (!($s = array_search($t['s'], $nodes[$type]))) {
             $s = 's' . $i;
             switch ($type) {
                 case 'uri':
                 case 'bnode':
                     $nodes[$type][$s] =& $t['s'];
                     break;
                 default:
                     alert('Invalid type ' . $type);
                     return '';
             }
         }
         $type = isset($t['o type']) ? $t['o type'] : $t['o_type'];
         if (!($o = array_search($t['o'], $nodes[$type]))) {
             $o = 'o' . $i;
             switch ($type) {
                 case 'uri':
                 case 'bnode':
                     $nodes[$type][$o] =& $t['o'];
                     break;
                 case 'literal':
                     $nodes[$type][$o] =& $t['o'];
                     break;
                 default:
                     alert('Invalid type ' . $type);
                     return '';
             }
         }
         /* p */
         $type = 'uri';
         switch ($type) {
             case 'uri':
                 $edges[$type][] = array('label' => &$t['p'], 's' => $s, 'o' => $o);
                 break;
             default:
                 alert('Invalid edge type ' . $type);
                 return '';
         }
     }
     // dot uri parameters
     $dot .= "node [shape=ellipse,fontsize=20,style=filled,fillcolor=limegreen];\n";
     foreach ($nodes['uri'] as $i => $nd) {
         $label = self::guessNamespace($nd);
         $prefix = array_search($label, $ns);
         if ($prefix) {
             $label = self::guessName($nd);
             $label = $label ? $prefix . ':' . $label : $nd;
         } else {
             $label = $nd;
         }
         $dot .= $i . '[label="' . $label . '"];' . "\n";
     }
     // dot blanknode parameters
     $dot .= "node [fillcolor=greenyellow];\n";
     foreach ($nodes['bnode'] as $i => $nd) {
         $dot .= $i . ';' . "\n";
     }
     // dot literal parameters
     $dot .= "node [shape=box,fontsize=20,style=filled,fillcolor=orange];\n";
     foreach ($nodes['literal'] as $i => $nd) {
         $label = substr(strip_tags($nd), 0, 80);
         $dot .= $i . '[label="' . $label . '"];' . "\n";
     }
     // dot arrows (edge) parameters
     $dot .= "edge [samehead,fontsize=20];\n";
     foreach ($edges['uri'] as $nd) {
         $label = $nd['label'];
         if (preg_match('/^(.*[\\/#])([^\\/\\#]*)$/', $nd['label'], $m)) {
             $ns_uri = $m[1];
             $lname = $m[2];
             if (!($prefix = array_search($ns_uri, $ns))) {
                 $ns['ns' . $nsc] = $ns_uri;
                 $prefix = 'ns' . $nsc;
                 $nsc++;
             }
             $label = $prefix . ':' . $lname;
         }
         $dot .= $nd['s'] . ' -> ' . $nd['o'] . '[label="' . $label . '"];' . "\n";
     }
     $dot .= '}' . "\n";
     /* ns box */
     $sub_r = '';
     if ($ns) {
         $sub_r .= 'node [shape=record,fontsize=20,style=filled,color=black,fillcolor=gray];' . "\n";
         $first = 1;
         foreach ($ns as $prefix => $uri) {
             $sub_r .= $first ? 'struct [label="' : '|';
             $sub_r .= $prefix . ': \\<' . $uri . '\\>';
             $first = 0;
         }
         $sub_r .= '"];' . "\n";
     }
     $dot = str_replace('_ns_box_', $sub_r, $dot);
     return $dot;
 }