/rdfapi-php/api/syntax/RdfParser.php
PHP | 2365 lines | 1863 code | 222 blank | 280 comment | 340 complexity | d0af4df4764002000528f965b16b8616 MD5 | raw file
Possible License(s): LGPL-2.1
Large files files are truncated, but you can click here to view the full file
- <?php
- // ----------------------------------------------------------------------------------
- // Class: RdfParser
- // ----------------------------------------------------------------------------------
- /**
- * An RDF paser.
- * This class reads RDF data from files or URIs and generates models out of it. All valid
- * RDF XML syntaxes defined by the W3C in RDF/XML Syntax Specification (Revised)
- * - W3C Working Draft 10 October 2003
- * (http://www.w3.org/TR/2003/WD-rdf-syntax-grammar-20031010/) are supported.
- * The parser is based on the PHP version of repat
- * (http://phpxmlclasses.sourceforge.net/show_doc.php?class=class_rdf_parser.html)
- * by Luis Argerich (lrargerich@yahoo.com).
- *
- * @version $Id: RdfParser.php 493 2007-08-12 17:43:07Z cweiske $
- * @author Luis Argerich <lrargerich@yahoo.com>,
- * Chris Bizer <chris@bizer.de>,
- * Radoslaw Oldakowski <radol@gmx.de>
- * Daniel Westphal <mail@d-westphal.de>
- * @package syntax
- * @access public
- *
- */
- class RdfParser extends Object {
- var $rdf_parser;
- var $model;
- /* Private Methods */
- /**
- * converts a string to its unicode NFC form (e.g. \uHHHH or \UHHHHHHHH).
- *
- * @param String $str
- * @return String
- * @access private
- *
- */
- function str2unicode_nfc($str=""){
- $result="";
- /* try to detect encoding */
- $tmp=str_replace("?", "", $str);
- if(strpos(utf8_decode($tmp), "?")===false){
- $str=utf8_decode($str);
- }
- for($i=0,$i_max=strlen($str);$i<$i_max;$i++){
- $nr=0;/* unicode dec nr */
- /* char */
- $char=$str[$i];
- /* utf8 binary */
- $utf8_char=utf8_encode($char);
- $bytes=strlen($utf8_char);
- if($bytes==1){
- /* 0####### (0-127) */
- $nr=ord($utf8_char);
- }
- elseif($bytes==2){
- /* 110##### 10###### = 192+x 128+x */
- $nr=((ord($utf8_char[0])-192)*64) + (ord($utf8_char[1])-128);
- }
- elseif($bytes==3){
- /* 1110#### 10###### 10###### = 224+x 128+x 128+x */
- $nr=((ord($utf8_char[0])-224)*4096) + ((ord($utf8_char[1])-128)*64) + (ord($utf8_char[2])-128);
- }
- elseif($bytes==4){
- /* 1111#### 10###### 10###### 10###### = 240+x 128+x 128+x 128+x */
- $nr=((ord($utf8_char[0])-240)*262144) + ((ord($utf8_char[1])-128)*4096) + ((ord($utf8_char[2])-128)*64) + (ord($utf8_char[3])-128);
- }
- /* result (see http://www.w3.org/TR/rdf-testcases/#ntrip_strings) */
- if($nr<9){/* #x0-#x8 (0-8) */
- $result.="\\u".sprintf("%04X",$nr);
- }
- elseif($nr==9){/* #x9 (9) */
- $result.='\t';
- }
- elseif($nr==10){/* #xA (10) */
- $result.='\n';
- }
- elseif($nr<13){/* #xB-#xC (11-12) */
- $result.="\\u".sprintf("%04X",$nr);
- }
- elseif($nr==13){/* #xD (13) */
- $result.='\t';
- }
- elseif($nr<32){/* #xE-#x1F (14-31) */
- $result.="\\u".sprintf("%04X",$nr);
- }
- elseif($nr<34){/* #x20-#x21 (32-33) */
- $result.=$char;
- }
- elseif($nr==34){/* #x22 (34) */
- $result.='\"';
- }
- elseif($nr<92){/* #x23-#x5B (35-91) */
- $result.=$char;
- }
- elseif($nr==92){/* #x5C (92) */
- $result.='\\';
- }
- elseif($nr<127){/* #x5D-#x7E (93-126) */
- $result.=$char;
- }
- elseif($nr<65536){/* #x7F-#xFFFF (128-65535) */
- $result.="\\u".sprintf("%04X",$nr);
- }
- elseif($nr<1114112){/* #x10000-#x10FFFF (65536-1114111) */
- $result.="\\U".sprintf("%08X",$nr);
- }
- else{
- /* other chars are not defined => ignore */
- }
- }
- return $result;
- }
- /**
- * @access private
- */
- function _new_element()
- {
- $e['parent']=Array(); // Parent is a blank Array
- $e['state']=0;
- $e['has_property_atributes']=0;
- $e['has_member_attributes']=0;
- $e['subject_type']=0;
- $e['subject']='';
- $e['predicate']='';
- $e['ordinal']=0;
- $e['members']=0;
- $e['data']='';
- $e['xml_lang']='';
- $e['bag_id']='';
- $e['statements']=0;
- $e['statement_id']='';
- $e['datatype']='';
- $e['element_base_uri'] = '';
- return $e;
- }
- /**
- * @param string $source
- * @param string &$destination
- *
- * @access private
- */
- function _copy_element($source, &$destination )
- {
- if( $source )
- {
- $destination['parent'] = $source;
- $destination['state'] = $source['state'];
- $destination['xml_lang'] = $source['xml_lang'];
- $destination['element_base_uri'] = $source['element_base_uri'];
- }
- }
- /**
- * @param string &$e
- * @access private
- */
- function _clear_element(&$e)
- {
- $e['subject']='';
- $e['predicate']='';
- $e['data']='';
- $e['bag_id']='';
- $e['statement_id']='';
- if(isset($e['parent'])) {
- if( $e['parent'] )
- {
- if( $e['parent']['xml_lang'] != $e['xml_lang'] )
- {
- $e['xml_lang']='';
- }
- }
- else
- {
- $e['xml_lang']='';
- }
- } else {
- $e['xml_lang']='';
- }
- $e['parent']=Array();
- $e['state']=0;
- $e['has_property_attributes']=0;
- $e['has_member_attributes']=0;
- $e['subject_type']=0;
- $e['subject']='';
- $e['predicate']='';
- $e['ordinal']=0;
- $e['members']=0;
- $e['data']='';
- $e['xml_lang']='';
- $e['bag_id']='';
- $e['statements']=0;
- $e['statement_id']='';
- $e['datatype']='';
- $e['element_base_uri'] = '';
- }
- /**
- * @access private
- */
- function _push_element()
- {
- if(!isset($this->rdf_parser['free'])) {
- $this->rdf_parser['free']=Array();
- }
- if(count($this->rdf_parser['free'])>0)
- {
- $e = $this->rdf_parser['free'];
- if(isset($e['parent'])) {
- $this->rdf_parser['free'] = $e['parent'];
- } else {
- $this->rdf_parser['free']=$this->_new_element();
- }
- }
- else
- {
- $e = $this->_new_element();
- }
- if(!isset($this->rdf_parser['top'])) {
- $this->rdf_parser['top']=Array();
- }
- $this->_copy_element( $this->rdf_parser['top'], $e );
- $this->rdf_parser['top'] = $e;
- }
- /**
- * @access private
- */
- function _pop_element()
- {
- $e = $this->rdf_parser['top'];
- $this->rdf_parser['top'] = $e['parent'];
- $this->_clear_element( $e );
- $this->rdf_parser['free'] = $e;
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_rdf_property_attribute_resource($local_name )
- {
- return ( $local_name == RDF_TYPE );
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_rdf_property_attribute_literal($local_name )
- {
- return ( $local_name == RDF_VALUE )
- || ( $local_name == RDF_BAG )
- || ( $local_name == RDF_SEQ )
- || ( $local_name == RDF_ALT )
- || ( $local_name == RDF_STATEMENT )
- || ( $local_name == RDF_PROPERTY )
- || ( $local_name == RDF_LIST );
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_rdf_ordinal( $local_name )
- {
- $ordinal = -1;
- if( $local_name{0} == '_' )
- {
- $ordinal = substr($local_name,1) + 1 ;
- }
- return ( $ordinal > 0 ) ? $ordinal : 0;
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_rdf_property_attribute( $local_name )
- {
- return $this->_is_rdf_property_attribute_resource( $local_name )
- || $this->_is_rdf_property_attribute_literal( $local_name );
- }
- function _is_forbidden_rdf_property_attribute($local_name)
- {
- return ( $local_name == RDF_RDF )
- || ( $local_name == RDF_DESCRIPTION)
- || ( $local_name == RDF_ID)
- || ( $local_name == RDF_ABOUT )
- || ( $local_name == RDF_BAG_ID )
- || ( $local_name == RDF_PARSE_TYPE )
- || ( $local_name == RDF_RESOURCE )
- || ( $local_name == RDF_NODEID )
- || ( $local_name == RDF_LI )
- || ( $local_name == RDF_ABOUT_EACH )
- || ( $local_name == RDF_ABOUT_EACH_PREFIX )
- || ( $local_name == RDF_DATATYPE );
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_rdf_property_element( $local_name )
- {
- return ( $local_name == RDF_TYPE )
- || ( $local_name == RDF_SUBJECT )
- || ( $local_name == RDF_PREDICATE )
- || ( $local_name == RDF_OBJECT )
- || ( $local_name == RDF_VALUE )
- || ( $local_name == RDF_LI )
- || ( $local_name == RDF_SEEALSO )
- || ( $local_name == RDF_BAG )
- || ( $local_name == RDF_SEQ )
- || ( $local_name == RDF_ALT )
- || ( $local_name == RDF_STATEMENT )
- || ( $local_name == RDF_PROPERTY )
- || ( $local_name == RDF_LIST )
- || ( $local_name == RDF_FIRST )
- || ( $local_name == RDF_REST )
- || ( $local_name{0} == '_' );
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_forbidden_rdf_property_element ($local_name)
- {
- return ( $local_name == RDF_RDF )
- || ( $local_name == RDF_DESCRIPTION)
- || ( $local_name == RDF_ID)
- || ( $local_name == RDF_ABOUT )
- || ( $local_name == RDF_BAG_ID )
- || ( $local_name == RDF_PARSE_TYPE )
- || ( $local_name == RDF_RESOURCE )
- || ( $local_name == RDF_NODEID )
- || ( $local_name == RDF_ABOUT_EACH )
- || ( $local_name == RDF_ABOUT_EACH_PREFIX )
- || ( $local_name == RDF_DATATYPE );
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_rdf_node_element( $local_name )
- {
- return ( $local_name == RDF_DESCRIPTION )
- || ( $local_name == RDF_STATEMENT )
- || ( $local_name == RDF_SUBJECT )
- || ( $local_name == RDF_PREDICATE )
- || ( $local_name == RDF_OBJECT )
- || ( $local_name == RDF_PROPERTY )
- || ( $local_name == RDF_TYPE )
- || ( $local_name == RDF_VALUE )
- || ( $local_name == RDF_BAG )
- || ( $local_name == RDF_SEQ )
- || ( $local_name == RDF_ALT )
- || ( $local_name == RDF_SEEALSO )
- || ( $local_name == RDF_LIST )
- || ( $local_name == RDF_FIRST )
- || ( $local_name == RDF_REST )
- || ( $local_name == RDF_NIL )
- || ( $local_name{0} == '_' );
- }
- /**
- * @param string $local_name
- * @access private
- */
- function _is_forbidden_rdf_node_element ($local_name)
- {
- return ( $local_name == RDF_RDF )
- || ( $local_name == RDF_ID)
- || ( $local_name == RDF_ABOUT )
- || ( $local_name == RDF_BAG_ID )
- || ( $local_name == RDF_PARSE_TYPE )
- || ( $local_name == RDF_RESOURCE )
- || ( $local_name == RDF_NODEID )
- || ( $local_name == RDF_LI )
- || ( $local_name == RDF_ABOUT_EACH )
- || ( $local_name == RDF_ABOUT_EACH_PREFIX )
- || ( $local_name == RDF_DATATYPE );
- }
- /**
- * @param string $val
- * @access private
- */
- function _istalnum($val) {
- return @ereg("[A-Za-z0-9]",$val);
- }
- /**
- * @param string $val
- * @access private
- */
- function _istalpha($val) {
- return @ereg("[A-Za-z]",$val);
- }
- /**
- * @param string $uri
- * @access private
- */
- function _is_absolute_uri($uri )
- {
- $result = false;
- $uri_p=0;
- if( $uri && $this->_istalpha( $uri{$uri_p} ) )
- {
- ++$uri_p;
- while( ($uri_p<strlen($uri))
- && ( $this->_istalnum( $uri{$uri_p} )
- || ( $uri{$uri_p} == '+' )
- || ( $uri{$uri_p} == '-' )
- || ( $uri{$uri_p} == '.' ) ) )
- {
- ++$uri_p;
- }
- $result = ( $uri{$uri_p} == ':' );
- }
- return $result;
- }
- /*
- * This function returns an associative array returning any of the various components of the URL that are present. This includes the
- * $arr=parse_url($url)
- * scheme - e.g. http
- * host
- * port
- * user
- * pass
- * path
- * query - after the question mark ?
- * fragment - after the hashmark #
- *
- * @param string $uri
- * @param string $buffer
- * @param string &$scheme
- * @param string &$authority
- * @param string &$path
- * @param string &$query
- * @param string &$fragment
- * @access private
- */
- function _parse_uri($uri,$buffer,&$scheme,&$authority,&$path,&$query,&$fragment ) {
- $parsed=parse_url($uri);
- if(isset($parsed['scheme'])) {
- $scheme=$parsed['scheme'];
- } else {
- $scheme='';
- }
- if(isset($parsed['host'])) {
- $host=$parsed['host'];
- } else {
- $host='';
- }
- if(isset($parsed['host'])) {
- $authority=$parsed['host'];
- } else {
- $authority='';
- }
- if(isset($parsed['path'])) {
- $path=$parsed['path'];
- } else {
- $path='';
- }
- if(isset($parsed['query'])) {
- $query=$parsed['query'];
- } else {
- $query='';
- }
- if(isset($parsed['fragment'])) {
- $fragment=$parsed['fragment'];
- } else {
- $fragment='';
- }
- }
- /**
- * @param string $base_uri
- * @param string $reference_uri
- * @param string &$buffer
- * @access private
- */
- function _resolve_uri_reference($base_uri,$reference_uri,&$buffer )
- {
- if ($reference_uri == '')
- return ($buffer = preg_replace("/\#[^\/\\\]*$/", '', $base_uri));
- $base_buffer='';
- $reference_buffer='';
- $path_buffer='';
- $buffer = '';
- $this->_parse_uri($reference_uri,
- $reference_buffer,
- $reference_scheme,
- $reference_authority,
- $reference_path,
- $reference_query,
- $reference_fragment );
- $this->_parse_uri($base_uri,
- $base_buffer,
- $base_scheme,
- $base_authority,
- $base_path,
- $base_query,
- $base_fragment );
- if( $reference_scheme == ''
- && $reference_authority == ''
- && $reference_path == ''
- && $reference_query == '' )
- {
- $buffer=$base_uri;
- if( $reference_fragment != '' )
- {
- if ($base_path == '' || $base_path == '/' || $base_path == "\\") {
- $buffer = $this->rdf_parser['document_base_uri'];
- }
- else
- {
- $buffer = preg_replace("/\#[^\/\\\]*$/", '', $base_uri);
- }
- // CB: Changed for base URI
- $c = substr($buffer, strlen($buffer)-1 ,1);
- if (!($c=='#' || $c==':' || $c=='/' || $c=="\\"))
- $buffer.= '#' ;
- $buffer.=$reference_fragment;
- }
- }
- else if( $reference_scheme != '' )
- {
- $buffer=$reference_uri;
- }
- else
- {
- $result_scheme = $base_scheme;
- $result_path = '';
- if( $reference_authority != '' )
- {
- $result_authority = $reference_authority;
- }
- else
- {
- $result_authority = $base_authority;
- if ($reference_path != '')
- {
- if ($reference_path{0} == '/' || $reference_path{0} == "\\")
- {
- if ($reference_path{1} == '/' || $reference_path{1} == "\\")
- {
- $result_authority = '';
- $result_path = $reference_path;
- }
- else
- $result_path = $reference_path;
- }
- elseif (substr($reference_path, 0, 3) == '../' ||
- substr($reference_path, 0, 3) == '..\\')
- {
- $slash = $reference_path{2};
- while($base_path != '' && ( substr($reference_path, 0, 3) == '../'
- || substr($reference_path, 0, 3) == '..\\'))
- {
- $base_path = preg_replace("/((\/)|(\\\))[^\/\\\]*$/", '', $base_path);
- if ($base_path != '') {
- $base_path = preg_replace("/((\/)|(\\\))[^\/\\\]*$/", '', $base_path);
- $reference_path = substr($reference_path, 3);
- }
- }
- $result_path = $base_path .$slash .$reference_path;
- }
- else
- {
- if ($base_path)
- $result_path = preg_replace("/[^\/\\\]*$/", $reference_path, $base_path, 1);
- else
- $result_path = '/' .$reference_path;
- }
- }
- }
- if( $result_scheme != '' )
- {
- $buffer=$result_scheme;
- $buffer.=':';
- }
- if( $result_authority != '' )
- {
- $buffer.="//";
- $buffer.=$result_authority;
- }
- if( $result_path != '' )
- {
- $buffer.=$result_path;
- }
- if( $reference_query != '' )
- {
- $buffer.='?';
- $buffer.=$reference_query;
- }
- if( $reference_fragment != '' )
- {
- $buffer.='#';
- $buffer.=$reference_fragment;
- }
- }
- }
- /**
- * IDs which contain CombiningChars or Extenders
- * (see http://www.w3.org/TR/REC-xml-names/#NT-NCName) are assumed to be invalid.
- * If you want to use IDs containing these characters you can turn off
- * the validating by setting the constant VALIDATE_IDS to FALSE (see constants.php).
- *
- * @param string $id
- * @access private
- */
- function is_valid_id($id )
- {
- if (!VALIDATE_IDS)
- return TRUE;
- $result = FALSE;
- if( $id )
- {
- if( $this->_istalpha($id{0}) || $id{0} == '_')
- {
- $result = TRUE;
- $i=0;
- $len = strlen($id);
- while( $result != FALSE && ++$i < $len )
- {
- if( !($this->_istalnum( $id{$i})
- || $id{$i} == '.'
- || $id{$i} == '-'
- || $id{$i} == '_'))
- {
- $result = FALSE;
- }
- }
- }
- }
- if (!$result)
- $this->_report_error('illegal ID, nodeID or bagID attribute value');
- else
- return TRUE;
- }
- /**
- * @param string $id
- * @param string &$buffer
- * @access private
- */
- function _resolve_id($id,&$buffer )
- {
- $id_buffer='';
- if( $this->is_valid_id($id) )
- {
- $id_buffer="#$id";
- }
- $this->_resolve_uri_reference( $this->rdf_get_base(), $id_buffer, $buffer );
- }
- /**
- * @param string $name
- * @param string &$buffer
- * @param string &$namespace_uri
- * @param string &$local_name
- * @access private
- */
- function _split_name($name, &$buffer, &$namespace_uri, &$local_name )
- {
- static $nul = 0;
- $buffer=$name;
- if( strstr( $buffer, NAMESPACE_SEPARATOR_CHAR ) )
- {
- $cosas=explode(NAMESPACE_SEPARATOR_CHAR,$buffer);
- $namespace_uri = $cosas[0];
- $local_name = $cosas[1];
- }
- else
- {
- if( ( $buffer{ 0 } == 'x' )
- && ( $buffer{ 1 } == 'm' )
- && ( $buffer{ 2 } == 'l' )
- && ( $buffer{ 3 } == ':' ) )
- {
- $namespace_uri = XML_NAMESPACE_URI;
- $local_name = substr($buffer,4);
- }
- else
- {
- $namespace_uri = '';
- $local_name = $buffer;
- }
- }
- }
- /**
- * @param string &$buf
- * @access private
- */
- function _generate_anonymous_uri(&$buf )
- {
- $id='';
- if(!isset($this->rdf_parser['anonymous_id'])) {
- $this->rdf_parser['anonymous_id']=0;
- }
- $this->rdf_parser['anonymous_id']++;
- $buf= BNODE_PREFIX . $this->rdf_parser['anonymous_id'];
- }
- /**
- * @param string $subject_type
- * @param string $subject
- * @param string $predicate
- * @param string $ordinal
- * @param string $object_type
- * @param string $object
- * @param string $xml_lang
- * @param string $bag_id
- * @param string $statements
- * @param string $statement_id
- * @access private
- */
- function _report_statement( $subject_type, $subject, $predicate, $ordinal, $object_type, $object, $xml_lang, $bag_id, $statements, $statement_id, $datatype )
- {
- $statement_id_type = RDF_SUBJECT_TYPE_URI;
- $statement_id_buffer='';
- $predicate_buffer='';
- if (!$xml_lang && $object_type == RDF_OBJECT_TYPE_LITERAL && isset($this->rdf_parser['document_xml_lang']))
- $xml_lang = $this->rdf_parser['document_xml_lang'];
- // call add statement
- $this->add_statement_to_model($this->rdf_parser['user_data'],$subject_type,$subject,$predicate,$ordinal,$object_type,$object,$xml_lang, $datatype );
- if( $bag_id )
- {
- if( $statements == '' )
- {
- $this->_report_statement(RDF_SUBJECT_TYPE_URI,
- $bag_id,
- RDF_NAMESPACE_URI.RDF_TYPE,
- 0,
- RDF_OBJECT_TYPE_RESOURCE,
- RDF_NAMESPACE_URI.RDF_BAG,
- '',
- '',
- '',
- '',
- $datatype );
- }
- if( ! $statement_id )
- {
- $statement_id_type = RDF_SUBJECT_TYPE_BNODE;
- $this->_generate_anonymous_uri( $statement_id_buffer );
- $statement_id = $statement_id_buffer;
- }
- $statements++;
- $predicate_buffer='RDF_NAMESPACE_URI_'.$statements;
- $this->_report_statement(
- RDF_SUBJECT_TYPE_URI,
- $bag_id,
- $predicate_buffer,
- $statements,
- RDF_OBJECT_TYPE_BNODE,
- $statement_id,
- '',
- '',
- '',
- '',
- $datatype );
- }
- if( $statement_id )
- {
- // rdf:type = rdf:Statement
- $this->_report_statement(
- $statement_id_type,
- $statement_id,
- RDF_NAMESPACE_URI.RDF_TYPE,
- 0,
- RDF_OBJECT_TYPE_RESOURCE,
- RDF_NAMESPACE_URI.RDF_STATEMENT,
- '',
- '',
- '',
- '',
- $datatype );
- if ($subject_type == RDF_SUBJECT_TYPE_BNODE)
- $obj_type = RDF_OBJECT_TYPE_BNODE;
- else
- $obj_type = RDF_OBJECT_TYPE_RESOURCE;
- // rdf:subject
- $this->_report_statement(
- $statement_id_type,
- $statement_id,
- RDF_NAMESPACE_URI.RDF_SUBJECT,
- 0,
- $obj_type,
- $subject,
- '',
- '',
- '',
- '',
- $datatype );
- // rdf:predicate
- $this->_report_statement(
- $statement_id_type,
- $statement_id,
- RDF_NAMESPACE_URI.RDF_PREDICATE,
- 0,
- RDF_OBJECT_TYPE_RESOURCE,
- $predicate,
- '',
- '',
- '',
- '',
- $datatype );
- // rdf:object
- $this->_report_statement(
- $statement_id_type,
- $statement_id,
- RDF_NAMESPACE_URI.RDF_OBJECT,
- 0,
- $object_type,
- $object,
- '',
- '',
- '',
- '',
- $datatype );
- }
- }
- /**
- * @param string $subject_type
- * @param string $subject
- * @param string $attributes
- * @param string $xml_lang
- * @param string $bag_id
- * @param string $statements
- * @access private
- */
- function _handle_property_attributes($subject_type, $subject, $attributes, $xml_lang, $bag_id, $statements )
- {
- $i=0;
- $attribute='';
- $predicate='';
- $attribute_namespace_uri='';
- $attribute_local_name='';
- $attribute_value='';
- $ordinal=0;
- for( $i = 0; isset($attributes[ $i ]); $i += 2 )
- {
- $this->_split_name(
- $attributes[ $i ],
- $attribute,
- $attribute_namespace_uri,
- $attribute_local_name );
- $attribute_value = $attributes[ $i + 1 ];
- $predicate=$attribute_namespace_uri;
- $predicate.=$attribute_local_name;
- if( RDF_NAMESPACE_URI == $attribute_namespace_uri )
- {
- if( $this->_is_rdf_property_attribute_literal( $attribute_local_name ) )
- {
- $this->_report_statement(
- $subject_type,
- $subject,
- $predicate,
- 0,
- RDF_OBJECT_TYPE_LITERAL,
- $attribute_value,
- $xml_lang,
- $bag_id,
- $statements,
- '',
- '');
- }
- else if( $this->_is_rdf_property_attribute_resource( $attribute_local_name ) )
- {
- $this->_report_statement(
- $subject_type,
- $subject,
- $predicate,
- 0,
- RDF_OBJECT_TYPE_RESOURCE,
- $attribute_value,
- '',
- $bag_id,
- $statements,
- '',
- '');
- }
- else if( ( $ordinal = $this->_is_rdf_ordinal( $attribute_local_name ) ) != 0 )
- {
- $this->_report_statement(
- $subject_type,
- $subject,
- $predicate,
- $ordinal,
- RDF_OBJECT_TYPE_LITERAL,
- $attribute_value,
- $xml_lang,
- $bag_id,
- $statements,
- '',
- '' );
- }
- else if ( ($attribute_local_name != RDF_ABOUT)
- && ($attribute_local_name != RDF_RDF)
- && ($attribute_local_name != RDF_DESCRIPTION)
- && ($attribute_local_name != RDF_ID)
- && ($attribute_local_name != RDF_ABOUT_EACH)
- && ($attribute_local_name != RDF_ABOUT_EACH_PREFIX)
- && ($attribute_local_name != RDF_BAG_ID)
- && ($attribute_local_name != RDF_RESOURCE)
- && ($attribute_local_name != RDF_PARSE_TYPE)
- && ($attribute_local_name != RDF_PARSE_TYPE_LITERAL)
- && ($attribute_local_name != RDF_PARSE_TYPE_RESOURCE)
- && ($attribute_local_name != RDF_LI)
- && ($attribute_local_name != RDF_SUBJECT)
- && ($attribute_local_name != RDF_PREDICATE)
- && ($attribute_local_name != RDF_OBJECT)
- && ($attribute_local_name != RDF_NODEID)
- && ($attribute_local_name != RDF_DATATYPE)
- && ($attribute_local_name != RDF_SEEALSO)
- && ($attribute_local_name != RDF_NIL)
- && ($attribute_local_name != RDF_REST)
- && ($attribute_local_name != RDF_FIRST)
- )
- {
- $this->_report_statement(
- $subject_type,
- $subject,
- $predicate,
- 0,
- RDF_OBJECT_TYPE_LITERAL,
- $attribute_value,
- $xml_lang,
- $bag_id,
- $statements,
- '',
- '' );
- }
- }
- else if( XML_NAMESPACE_URI == $attribute_namespace_uri )
- {
- if ($attribute_local_name == 'base')
- {
- $this->rdf_parser['top']['element_base_uri'] = $attribute_value;
- }
- }
- else if( $attribute_namespace_uri )
- {
- // is it required that property attributes be in an explicit namespace?
- $this->_report_statement(
- $subject_type,
- $subject,
- $predicate,
- 0,
- RDF_OBJECT_TYPE_LITERAL,
- $attribute_value,
- $xml_lang,
- $bag_id,
- $statements,
- '',
- '' );
- }
- }
- }
- /**
- * @param string $warning
- * @access private
- */
- function _report_warning($warning)
- {
- $errmsg = RDFAPI_ERROR . '(class: parser): ' . $warning .'.';
- trigger_error($errmsg, E_USER_WARNING);
- }
- function _report_error($error)
- {
- $errmsg = RDFAPI_ERROR . '(class: parser): ' . $error .'.';
- trigger_error($errmsg, E_USER_ERROR);
- }
- /**
- * @param string $namespace_uri
- * @param string $local_name
- * @param string $attributes
- * @param string $parent
- * @access private
- */
- function _handle_resource_element( $namespace_uri, $local_name, $attributes, $parent )
- {
- $subjects_found = 0;
- $aux=$attributes;
- $aux2=Array();
- foreach($attributes as $atkey=>$atvalue) {
- $aux2[]=$atkey;
- $aux2[]=$atvalue;
- }
- $attributes=$aux2;
- $id = '';
- $about = '';
- $bag_id = '';
- $node_id = '';
- $datatype = '';
- $i=0;
- $attribute='';
- $attribute_namespace_uri='';
- $attribute_local_name='';
- $attribute_value='';
- $id_buffer='';
- $type='';
- $this->rdf_parser['top']['has_property_attributes'] = false;
- $this->rdf_parser['top']['has_member_attributes'] = false;
- if( $namespace_uri == RDF_NAMESPACE_URI )
- {
- if( ! $this->_is_rdf_node_element( $local_name ) )
- {
- $msg = 'unknown or out of context rdf node element: '.$local_name;
- if ($this->_is_forbidden_rdf_node_element($local_name))
- $this->_report_error($msg);
- else
- $this->_report_warning($msg);
- }
- }
- // examine each attribute for the standard RDF "keywords"
- for( $i = 0; isset($attributes[$i]); $i += 2 )
- {
- $this->_split_name(
- $attributes[ $i ],
- $attribute,
- $attribute_namespace_uri,
- $attribute_local_name );
- $attribute_value = $attributes[ $i + 1 ];
- // if the attribute is not in any namespace
- // or the attribute is in the RDF namespace
- if( ( $attribute_namespace_uri == '' )
- || ( $attribute_namespace_uri == RDF_NAMESPACE_URI ))
- {
- if( $attribute_local_name == RDF_ID )
- {
- $id = $attribute_value;
- ++$subjects_found;
- } else if( $attribute_local_name == RDF_ABOUT ) {
- $about = '_'.$attribute_value;
- ++$subjects_found;
- } else if( $attribute_local_name == RDF_NODEID) {
- $node_id = $attribute_value;
- ++$subjects_found;
- } else if( $attribute_local_name == RDF_ABOUT_EACH ) {
- $error = 'aboutEach has been removed from the RDF specifications';
- $this->_report_error($error);
- } else if( $attribute_local_name == RDF_ABOUT_EACH_PREFIX ) {
- $error = 'aboutEachPrefix has been removed from the RDF specifications';
- $this->_report_error($error);
- } else if( $attribute_local_name == RDF_BAG_ID) {
- $bag_id = $attribute_value;
- } else if( $attribute_local_name == RDF_DATATYPE) {
- $datatype = $attribute_value;
- } else if( $this->_is_rdf_property_attribute( $attribute_local_name )) {
- $this->rdf_parser['top']['has_property_attributes'] = true;
- } else if( $this->_is_rdf_ordinal( $attribute_local_name )) {
- $this->rdf_parser['top']['has_property_attributes'] = true;
- $this->rdf_parser['top']['has_member_attributes'] = true;
- } else {
- $this->rdf_parser['top']['has_property_attributes'] = true;
- $msg = 'unknown or out of context rdf attribute: '.$attribute_local_name;
- if ($this->_is_forbidden_rdf_property_attribute($attribute_local_name))
- $this->_report_error($msg);
- else
- $this->_report_warning($msg);
- }
- }
- else if( $attribute_namespace_uri == XML_NAMESPACE_URI )
- {
- if( $attribute_local_name == XML_LANG )
- {
- $this->rdf_parser['top']['xml_lang'] = $attribute_value;
- }
- elseif ($attribute_local_name == 'base')
- {
- $this->rdf_parser['top']['element_base_uri'] = $attribute_value;
- }
- }
- else if( $attribute_namespace_uri )
- {
- $this->rdf_parser['top']['has_property_attributes'] = true;
- }
- }
- // if no subjects were found, generate one.
- if( $subjects_found == 0 )
- {
- $this->_generate_anonymous_uri( $id_buffer );
- $this->rdf_parser['top']['subject']=$id_buffer;
- $this->rdf_parser['top']['subject_type'] = RDF_SUBJECT_TYPE_BNODE;
- }
- else if( $subjects_found > 1 )
- {
- $this->_report_error('ID, about and nodeID are mutually exclusive');
- }
- else if( $id )
- {
- $this->_resolve_id( $id, $id_buffer );
- $this->rdf_parser['top']['subject_type'] = RDF_SUBJECT_TYPE_URI;
- $this->rdf_parser['top']['subject']=$id_buffer;
- }
- else if( $about )
- {
- $this->_resolve_uri_reference( $this->rdf_get_base(), substr($about,1), $id_buffer );
- $this->rdf_parser['top']['subject_type'] = RDF_SUBJECT_TYPE_URI;
- $this->rdf_parser['top']['subject']=$id_buffer;
- }
- else if( $node_id )
- {
- $this->is_valid_id($node_id);
- $this->rdf_parser['top']['subject_type'] = RDF_SUBJECT_TYPE_BNODE;
- $this->rdf_parser['top']['subject']=$node_id;
- }
- // if the subject is empty, assign it the document uri
- if( $this->rdf_parser['top']['subject'] == '' )
- {
- $this->rdf_parser['top']['subject']=$this->rdf_get_base();
- }
- if( $bag_id )
- {
- $this->_resolve_id( $bag_id, $id_buffer );
- $this->rdf_parser['top']['bag_id']=$id_buffer;
- }
- // only report the type for non-rdf:Description elements.
- if( ($local_name != RDF_DESCRIPTION )
- || ( $namespace_uri != RDF_NAMESPACE_URI ) )
- {
- $type=$namespace_uri;
- $type.=$local_name;
- $this->_report_statement(
- $this->rdf_parser['top']['subject_type'],
- $this->rdf_parser['top']['subject'],
- RDF_NAMESPACE_URI.RDF_TYPE,
- 0,
- RDF_OBJECT_TYPE_RESOURCE,
- $type,
- '',
- $this->rdf_parser['top']['bag_id'],
- $this->rdf_parser['top']['statements'],
- '',
- $datatype);
- }
- // if this element is the child of some property,
- // report the appropriate statement.
- if( $parent )
- {
- if ($this->rdf_parser['top']['subject_type'] == RDF_SUBJECT_TYPE_BNODE)
- $objtype = RDF_OBJECT_TYPE_BNODE;
- else
- $objtype = RDF_OBJECT_TYPE_RESOURCE;
- $this->_report_statement(
- $parent['parent']['subject_type'],
- $parent['parent']['subject'],
- $parent['predicate'],
- $parent['ordinal'],
- $objtype,
- $this->rdf_parser['top']['subject'],
- '',
- $parent['parent']['bag_id'],
- $parent['parent']['statements'],
- $parent['statement_id'],
- $parent['datatype']);
- }
- if( $this->rdf_parser['top']['has_property_attributes'] )
- {
- $this->_handle_property_attributes(
- $this->rdf_parser['top']['subject_type'],
- $this->rdf_parser['top']['subject'],
- $attributes,
- $this->rdf_parser['top']['xml_lang'],
- $this->rdf_parser['top']['bag_id'],
- $this->rdf_parser['top']['statements'] );
- }
- }
- /**
- * @param string &$namespace_uri
- * @param string &$local_name
- * @param string &$attributes
- * @access private
- */
- function _handle_property_element( &$namespace_uri, &$local_name, &$attributes )
- {
- $buffer='';
- $i=0;
- $aux=$attributes;
- $aux2=Array();
- foreach($attributes as $atkey=>$atvalue) {
- $aux2[]=$atkey;
- $aux2[]=$atvalue;
- }
- $attributes=$aux2;
- $attribute_namespace_uri='';
- $attribute_local_name='';
- $attribute_value = '';
- $resource = NULL;
- $statement_id = '';
- $bag_id = '';
- $parse_type = '';
- $node_id = '';
- $datatype = '';
- $this->rdf_parser['top']['ordinal'] = 0;
- if( $namespace_uri == RDF_NAMESPACE_URI )
- {
- if( ! $this->_is_rdf_property_element( $local_name ) )
- {
- $msg = 'unknown or out of context rdf property element: '.$local_name;
- if ($this->_is_forbidden_rdf_property_element($local_name))
- $this->_report_error($msg);
- else
- $this->_report_warning($msg);
- }
- }
- $buffer=$namespace_uri;
- if( ( $namespace_uri == RDF_NAMESPACE_URI )
- && ( $local_name == RDF_LI ) )
- {
- $this->rdf_parser['top']['parent']['members']++;
- $this->rdf_parser['top']['ordinal'] = $this->rdf_parser['top']['parent']['members'];
- $this->rdf_parser['top']['ordinal']=$this->rdf_parser['top']['ordinal'];
- $buffer.='_'.$this->rdf_parser['top']['ordinal'];
- }
- else
- {
- $buffer.=$local_name;
- }
- $this->rdf_parser['top']['predicate']=$buffer;
- $this->rdf_parser['top']['has_property_attributes'] = false;
- $this->rdf_parser['top']['has_member_attributes'] = false;
- for( $i = 0; isset($attributes[$i]); $i += 2 )
- {
- $this->_split_name(
- $attributes[$i],
- $buffer,
- $attribute_namespace_uri,
- $attribute_local_name );
- $attribute_value = $attributes[$i + 1];
- // if the attribute is not in any namespace
- // or the attribute is in the RDF namespace
- if( ( $attribute_namespace_uri == '' )
- || ( $attribute_namespace_uri == RDF_NAMESPACE_URI ) )
- {
- if( ( $attribute_local_name == RDF_ID ) )
- {
- $statement_id = $attribute_value;
- }
- else if( $attribute_local_name == RDF_PARSE_TYPE )
- {
- $parse_type = $attribute_value;
- }
- else if( $attribute_local_name == RDF_RESOURCE )
- {
- $resource = $attribute_value;
- }
- else if( $attribute_local_name == RDF_NODEID )
- {
- $node_id = $attribute_value;
- }
- else if( $attribute_local_name == RDF_BAG_ID )
- {
- $bag_id = $attribute_value;
- }
- else if( $attribute_local_name == RDF_DATATYPE )
- {
- $datatype = $attribute_value;
- $this->rdf_parser['top']['datatype'] = $attribute_value;
- }
- else if( $this->_is_rdf_property_attribute( $attribute_local_name ) )
- {
- $this->rdf_parser['top']['has_property_attributes'] = true;
- }
- else
- {
- $this->_report_warning('unknown rdf attribute: '.$attribute_local_name );
- return;
- }
- }
- else if( $attribute_namespace_uri == XML_NAMESPACE_URI )
- {
- if( $attribute_local_name == XML_LANG )
- {
- $this->rdf_parser['top']['xml_lang'] = $attribute_value;
- }
- elseif ($attribute_local_name == 'base')
- {
- $this->rdf_parser['top']['element_base_uri'] = $attribute_value;
- }
- }
- else if( $attribute_namespace_uri )
- {
- $this->rdf_parser['top']['has_property_attributes'] = true;
- }
- }
- if( $statement_id )
- {
- $this->_resolve_id($statement_id, $buffer );
- $this->rdf_parser['top']['statement_id']=$buffer;
- }
- if ($node_id)
- {
- $this->is_valid_id($node_id);
- if ($resource)
- {
- $this->_report_error('nodeID and resource are mutually exclusive');
- }
- if ($statement_id)
- {
- // reify statement
- $this->_report_statement(
- $this->rdf_parser['top']['parent']['subject_type'],
- $this->rdf_parser['top']['parent']['subject'],
- $this->rdf_parser['top']['predicate'],
- $this->rdf_parser['top']['ordinal'],
- RDF_OBJECT_TYPE_BNODE,
- $node_id,
- '',
- $this->rdf_parser['top']['parent']['bag_id'],
- $this->rdf_parser['top']['parent']['statements'],
- $this->rdf_parser['top']['statement_id'],
- '');
- $statement_id = '';
- }
- else
- {
- $this->_report_statement(
- $this->rdf_parser['top']['parent']['subject_type'],
- $this->rdf_parser['top']['parent']['subject'],
- $this->rdf_parser['top']['predicate'],
- $this->rdf_parser['top']['ordinal'],
- RDF_OBJECT_TYPE_BNODE,
- $node_id,
- '',
- $this->rdf_parser['top']['parent']['bag_id'],
- $this->rdf_parser['top']['parent']['statements'],
- '',
- $datatype );
- }
- $this->rdf_parser['top']['state'] = IN_PROPERTY_EMPTY_RESOURCE;
- }
- if( $parse_type )
- {
- if( $resource ) {
- $this->_report_error('property elements with rdf:parseType do not allow rdf:resource' );
- }
- if( $bag_id ) {
- $this->_report_warning('property elements with rdf:parseType do not allow rdf:bagID' );
- return;
- }
- if( $this->rdf_parser['top']['has_property_attributes'] )
- {
- $this->_report_error('property elements with rdf:parseType do not allow property attributes');
- return;
- }
- if( $attribute_value == RDF_PARSE_TYPE_RESOURCE )
- {
- $this->_generate_anonymous_uri( $buffer );
- // since we are sure that this is now a resource property we can report it
- $this->_report_statement(
- $this->rdf_parser['top']['parent']['subject_type'],
- $this->rdf_parser['top']['parent']['subject'],
- $this->rdf_parser['top']['predicate'],
- 0,
- RDF_OBJECT_TYPE_BNODE,
- $buffer,
- '',
- $this->rdf_parser['top']['parent']['bag_id'],
- $this->rdf_parser['top']['parent']['statements'],
- $this->rdf_parser['top']['statement_id'],
- $datatype );
- $this->_push_element( );
- $this->rdf_parser['top']['state'] = IN_PROPERTY_PARSE_TYPE_RESOURCE;
- $this->rdf_parser['top']['subject_type'] = RDF_SUBJECT_TYPE_BNODE;
- $this->rdf_parser['top']['subject']=$buffer;
- $this->rdf_parser['top']['bag_id']='';
- $this->rdf_parser['top']['datatype']= $datatype;
- }
- elseif ( $attribute_value == RDF_PARSE_TYPE_LITERAL )
- {
- $this->rdf_parser['top']['state'] = IN_PROPERTY_PARSE_TYPE_LITERAL;
- $this->rdf_parser['top']['datatype']= RDF_NAMESPACE_URI .RDF_XMLLITERAL;
- $this->rdf_parser['xml_literal']['buffer'] = '';
- $this->rdf_parser['xml_literal']['depth'] = 0;
- }
- elseif ($attribute_value == RDF_PARSE_TYPE_COLLECTION)
- {
- $this->_generate_anonymous_uri( $buffer );
- $this->_report_statement(
- $this->rdf_parser['top']['parent']['subject_type'],
- $this->rdf_parser['top']['parent']['subject'],
- $this->rdf_parser['top']['predicate'],
- 0,
- RDF_OBJECT_TYPE_BNODE,
- $buffer,
- '',
- $this->rdf_parser['top']['parent']['bag_id'],
- $this->rdf_parser['top']['parent']['statements'],
- $this->rdf_parser['top']['statement_id'],
- $datatype );
- $this->rdf_parser['top']['state'] = IN_PROPERTY_PARSE_TYPE_COLLECTION;
- $this->rdf_parser['top']['collection']['first_blank_node_id'] = $buffer;
- }
- else
- {
- $this->_report_statement(
- $this->rdf_parser['top']['parent']['subject_type'],
- $this->rdf_parser['top']['parent']['subject'],
- $this->rdf_parser['top']['predicate'],
- 0,
- RDF_OBJECT_TYPE_XML,
- '',
- '',
- $this->rdf_parser['top']['parent']['bag_id'],
- $this->rdf_parser['top']['parent']['statements'],
- $this->rdf_parser['top']['statement_id'],
- $datatype );
- $this->rdf_parser['top']['state'] = IN_PROPERTY_PARSE_TYPE_LITERAL;
- }
- }
- else if( $resource !== NULL || $bag_id || $this->rdf_parser['top']['has_property_attributes'] )
- {
- if( $resource !== NULL )
- {
- $subject_type = RDF_SUBJECT_TYPE_URI;
- $this->_resolve_uri_reference( $this->rdf_get_base(), $resource, $buffer );
- $object_type=RDF_OBJECT_TYPE_RESOURCE;
- }
- else
- {
- $subject_type = RDF_SUBJECT_TYPE_BNODE;
- $this->_generate_anonymous_uri( $buffer );
- $object_type=RDF_OBJECT_TYPE_BNODE;
- }
- $this->rdf_parser['top']['state'] = IN_PROPERTY_EMPTY_RESOURCE;
- // since we are sure that this is now a resource property we can report it.
- $this->_report_statement(
- $this->rdf_parser['top']['parent']['subject_type'],
- $this->rdf_parser['top']['parent']['subject'],
- $this->rdf_parser['top']['predicate'],
- $this->rdf_parser['top']['ordinal'],
- $object_type,
- $buffer,
- '',
- $this->rdf_parser['top']['parent']['bag_id'],
- $this->rdf_parser['top']['parent']['statements'],
- $this->rdf_parser['top']['statement_id'],
- $datatype ); // should we allow IDs?
- if( $bag_id )
- {
- $this->_resolve_id( $bag_id, $buffer );
- $this->rdf_parser['top']['bag_id']=$buffer;
- }
- if( $this->rdf_parser['top']['has_property_attributes'] )
- {
- $this->_handle_property_attributes(
- $subject_type,
- $buffer,
- $attributes,
- $this->rdf_parser['top']['xml_lang'],
- $this->rdf_parser['top']['bag_id'],
- $this->rdf_parser['top']['statements'] );
- }
- }
- }
- /**
- * @param string &$namespace_uri
- * @param string &$local_name
- * @param string &$attributes
- * @access private
- */
- function _handle_collection_element(&$namespace_uri, &$local_name, &$attributes)
- {
- $aux2=Array();
- foreach($attributes as $atkey=>$atvalue) {
- $aux2[]=$atkey;
- $aux2[]=$atvalue;
- }
- $attributes=$aux2;
- /* collection construction site
- // old:
- if ( ($namespace_uri == RDF_NAMESPACE_URI || $namespace_uri == '')
- && ($local_name == RDF_DESCRIPTION || $local_name == RDF_LI) )
- {
- for( $i = 0; isset($attributes[$i]); $i += 2 )
- {
- $this->_split_name(
- $attributes[ $i ],
- $attribute,
- $attribute_namespace_uri,
- $attribute_local_name );
- $attribute_value = $attributes[ $i + 1 ];
- if( $attribute_namespace_uri == '' || $attribute_namespace_uri == RDF_NAMESPACE_URI )
- {
- if( $attribute_local_name == RDF_ABOUT ||
- $attribute_local_name == RDF_RESOURCE)
- {
- $this->rdf_parser['top']['parent']['collection']['object_type'][] = RDF_OBJECT_TYPE_RESOURCE;
- }
- elseif ( $attribute_local_name == RDF_NODEID ) {
- $this->rdf_parser['top']['parent']['collection']['object_type'][] = RDF_OBJECT_TYPE_BNODE;
- }
- $this->rdf_parser['top']['parent']['collection']['object_label'][] = $attribute_value;
- }
- }
- }
- */
- // new
- for( $i = 0; isset($attributes[$i]); $i += 2 )
- {
- $this->_split_name(
- $attributes[ $i ],
- $attribute,
- $attribute_namespace_uri,
- $attribute_local_name );
- $attribute_value = $attributes[ $i + 1 ];
- if( $attribute_namespace_uri == '' || $attribute_namespace_uri == RDF_NAMESPACE_URI )
- {
- $tmp_subject_type = RDF_SUBJECT_TYPE_URI;
- if( $attribute_local_name == RDF_ABOUT ||
- $attribute_local_name == RDF_RESOURCE)
- {
- $this->rdf_parser['top']['parent']['collection']['object_type'][] = RDF_OBJECT_TYPE_RESOURCE;
- }
- elseif ( $attribute_local_name == RDF_NODEID ) {
- $this->rdf_parser['top']['parent']['collection']['object_type'][] = RDF_OBJECT_TYPE_BNODE;
- $tmp_subject_type = RDF_SUBJECT_TYPE_BNODE;
- }
- $id_buffer = '';
- $this->_resolve_uri_reference( $this->rdf_get_base(), $attribute_value, $id_buffer );
- $this->rdf_parser['top']['parent']['collection']['object_label'][] = $id_buffer;
- if (!( ($namespace_uri == RDF_NAMESPACE_URI || $namespace_uri == '')
- && ($local_name == RDF_DESCRIPTION || $local_name == RDF_LI) ))
- {
- $this->_report_statement(
- $tmp_subject_type,
- $id_buffer,
- RDF_NAMESPACE_URI.RDF_TYPE,
- '',
- RDF_OBJECT_TYPE_RESOURCE,
- $namespace_uri.$local_name,
- '',
- '',
- '',
- '',
- '');
- }
- }
- }
- // collection construction site
- }
- /**
- * @param string &$namespace_uri
- * @param string &$local_name
- * @param string &$attributes
- * @access private
- */
- function _handle_xml_start_element(&$namespace_uri, &$local_name, &$attributes)
- {
- $aux2=Array();
- foreach($attributes as $atkey=>$atvalue) {
- $aux2[]=$atkey;
- $aux2[]=$atvalue;
- }
- $attributes=$aux2;
- $element = '<' .$this->_join_name_and_declare_prefix($namespace_uri, $local_name);
- for( $i = 0; isset($attributes[$i]); $i += 2 )
- {
- $this->_split_name(
- $attributes[ $i ],
- $attribute,
- $attribute_namespace_uri,
- $attribute_local_name );
- $attribute_value = $attributes[ $i + 1 ];
- $element .= ' ' .$this->_join_name_and_declare_prefix($attribute_namespace_uri, $attribute_local_name);
- $element .= '=\"' .$attribute_value .'\"';
- }
- $element .= '>';
- $this->rdf_parser['xml_literal']['buffer'] .= $element;
- }
- /**
- * @param string $name
- * @access private
- */
- function _handle_xml_end_element($name)
- {
- $buffer='';
- $namespace_uri='';
- $local_name='';
- $this->_split_name(
- $name,
- $buffer,
- $namespace_uri,
- $local_name );
- $element = '</';
- if ($namespace_uri && isset($this->rdf_parser['default_namespace'])
- &&$namespace_uri != $this->rdf_parser['default_namespace'])
- {
- $element .= $this->rdf_parser['namespaces'][$namespace_uri] .':';
- }
- $element .= $local_name .'>';
- $this->rdf_parser['xml_literal']['buffer'] .= $element;
- $depth = $this->rdf_parser['xml_literal']['depth']--;
- if (isset($this->rdf_parser['xml_literal']['declared_ns']))
- foreach ($this->rdf_parser['xml_literal']['declared_ns'] as $prefix => $_depth)
- {
- if ($depth == $_depth)
- unset($this->rdf_parser['xml_litera…
Large files files are truncated, but you can click here to view the full file