Esempio n. 1
0
 /**
  * @todo Implement testInitWithNamespaceAndLocalname().
  */
 public function testInitWithNamespaceAndLocalname()
 {
     $ns = 'http://example.org/';
     $l = 'resourceLocal123abc';
     $r = Erfurt_Rdf_Resource::initWithNamespaceAndLocalName($ns, $l);
     $this->assertTrue($r instanceof Erfurt_Rdf_Resource);
     $this->assertEquals('http://example.org/resourceLocal123abc', $r->getUri());
     $this->assertEquals('http://example.org/', $r->getNamespace());
     $this->assertEquals('resourceLocal123abc', $r->getLocalName());
 }
Esempio n. 2
0
 /**
  * Parses a String to an RDF node.
  *
  * @param  string $node
  * @return Erfurt_Rdf_Node The parsed RDF node
  * @throws Erfurt_Sparql_ParserException
  */
 protected function _parseNode($node = false)
 {
     if ($node) {
         $node = $node;
     } else {
         $node = current($this->_tokens);
     }
     if ($node[strlen($node) - 1] === '.') {
         $node = substr($node, 0, -1);
     }
     if ($this->_dtypeCheck($node)) {
         return $node;
     }
     if ($this->_bNodeCheck($node)) {
         $node = '?' . $node;
         if (isset($this->_usedBlankNodes[$node]) && $this->_usedBlankNodes[$node] === false) {
             require_once 'Erfurt/Sparql/ParserException.php';
             throw new Erfurt_Sparql_ParserException('Reuse of blank node id not allowed here.' - 1, key($this->_tokens));
         }
         $this->_query->addUsedVar($node);
         $this->_usedBlankNodes[$node] = true;
         return $node;
     }
     if ($node === '[') {
         $node = '?' . substr($this->_query->getBlanknodeLabel(), 1);
         $this->_query->addUsedVar($node);
         $this->_fastForward();
         if (current($this->_tokens) !== ']') {
             prev($this->_tokens);
         }
         return $node;
     }
     if ($this->_iriCheck($node)) {
         $base = $this->_query->getBase();
         if ($base != null) {
             require_once 'Erfurt/Rdf/Resource.php';
             $node = Erfurt_Rdf_Resource::initWithNamespaceAndLocalName(substr($base, 1, -1), substr($node, 1, -1));
         } else {
             require_once 'Erfurt/Rdf/Resource.php';
             $node = Erfurt_Rdf_Resource::initWithIri(substr($node, 1, -1));
         }
         return $node;
     } else {
         if ($this->_qnameCheck($node)) {
             $node = $this->_query->getFullUri($node);
             require_once 'Erfurt/Rdf/Resource.php';
             $node = Erfurt_Rdf_Resource::initWithIri($node);
             return $node;
         } else {
             if ($this->_literalCheck($node)) {
                 if (substr($node, 0, 1) === '"' || substr($node, 0, 1) === "'") {
                     $ch = substr($node, 0, 1);
                     $chLong = str_repeat($ch, 3);
                     if (substr($node, 0, 3) == $chLong) {
                         $ch = $chLong;
                     }
                     $this->_parseLiteral($node, $ch);
                 } else {
                     $this->_parseLiteral($node, null);
                 }
             } else {
                 if ($this->_varCheck($node)) {
                     $pos = is_string($node) ? strpos($node, '.') : false;
                     if ($pos) {
                         return substr($node, 0, $pos);
                     } else {
                         return $node;
                     }
                 } else {
                     if ($node[0] === '<') {
                         //partial IRI? loop tokens until we find a closing >
                         while (next($this->_tokens)) {
                             $node .= current($this->_tokens);
                             if (substr($node, -1) === '>') {
                                 break;
                             }
                         }
                         if (substr($node, -1) != '>') {
                             var_dump($this->_tokens);
                             exit;
                             require_once 'Erfurt/Sparql/ParserException.php';
                             throw new Erfurt_Sparql_ParserException('Unclosed IRI: ' . $node, -1, key($this->_tokens));
                         }
                         return $this->_parseNode($node);
                     } else {
                         require_once 'Erfurt/Sparql/ParserException.php';
                         throw new Erfurt_Sparql_ParserException('"' . $node . '" is neither a valid rdf- node nor a variable.', -1, key($this->_tokens));
                     }
                 }
             }
         }
     }
     return $node;
 }
Esempio n. 3
0
 protected function _parseQNameOrBoolean()
 {
     $c = $this->_read();
     #if ($c !== ':' && !$this->_isPrefixStartChar($c)) {
     #    $this->_throwException('Expected ":" or letter.');
     #}
     $namespace = null;
     if ($c === ':') {
         // QName with default namespace
         if (isset($this->_namespaces[''])) {
             $namespace = $this->_namespaces[''];
         } else {
             $this->_throwException('Default namespace used, but not defined.');
         }
     } else {
         $prefix = $c;
         $c = $this->_read();
         while ($c !== -1 && !$this->_isWS($c) && $c !== ':') {
             $prefix .= $c;
             $c = $this->_read();
         }
         if ($c !== ':') {
             // Prefix might be a boolean value.
             $value = $prefix;
             if ($prefix === 'true' || $prefix === 'false') {
                 require_once 'Erfurt/Rdf/Literal.php';
                 return Erfurt_Rdf_Literal::initWithLabelAndDatatype($value, EF_XSD_BOOLEAN);
             }
         }
         $this->_verifyChar($c, ':');
         if (isset($this->_namespaces[$prefix])) {
             $namespace = $this->_namespaces[$prefix];
         } else {
             $this->_throwException("Namespace '{$prefix}' used, but not defined.");
         }
     }
     $localName = '';
     $c = $this->_read();
     while ($c !== -1 && !$this->_isWS($c) && $c !== ',' && $c !== ';' && $c !== ')') {
         $localName .= $c;
         $c = $this->_read();
     }
     $this->_unread();
     require_once 'Erfurt/Rdf/Resource.php';
     return Erfurt_Rdf_Resource::initWithNamespaceAndLocalName($namespace, $localName);
 }