topical media & game development
server-php-xml-class-rddl-parser-class-rddl.php / php
<?php
// # # # # # # # # # # # # # # # # # # # ###
// Title : Class RDDL_parser
// Version : 1.0
// Author : Luis Argerich (lrargerich@yahoo.com)
// Last modification date : 06-20-2002
// Description : A class to parse RDDL documents.
// Can parse documents from files or URIs.
// Once you parsed the RDDL document you get a list of resources
// to process them.
// # # # # # # # # # # # # # # # # # # # ###
// History:
// 06-20-2002 : First version of this class.
// # # # # # # # # # # # # # # # # # # # ###
// To-Dos:
//
// # # # # # # # # # # # # # # # # # # # ###
// How to use it:
// Read the documentation in rddl_parser.html
// # # # # # # # # # # # # # # # # # # # ###
if(defined("_class_rddl_parser_is_included")) {
// do nothing since the class is already included
} else {
define("_class_rddl_parser_is_included",1);
define("NAMESPACE_SEPARATOR_CHAR","^");
define("RDDL_NAMESPACE_NAME","http://www.rddl.org/");
define("XLINK_NAMESPACE_NAME","http://www.w3.org/1999/xlink");
class RDDL_parser {
var base='';
var error='';
function get_error() {
return this->resources;
}
function rddl_parse(this->base=this->parser = xml_parser_create_ns("",NAMESPACE_SEPARATOR_CHAR);
xml_set_object(this);
xml_parser_set_option(this->parser, "startElement", "endElement");
if (!(rddl, "r"))) {
rddl";
return false;
}
while (fp, 4096)) {
if (!xml_parse(data, feof(this->error="XML error: ".xml_error_string(xml_get_error_code(this->parser);
return false;
}
}
xml_parser_free(parser, attrs) {
name);
if(strstr(attrs as atv) {
if(strstr(atrib_parts=explode(NAMESPACE_SEPARATOR_CHAR,atk=atk=="href") {
this->base,buffer,0);
buffer;
}
atk]=this->resources[]=name<br/>";
}
function endElement(name) {
}
function _parse_uri(buffer,scheme,&path,&fragment ) {
uri);
if(isset(scheme=scheme='';
}
if(isset(host=host='';
}
if(isset(authority=authority='';
}
if(isset(path=path='';
}
if(isset(query=query='';
}
if(isset(fragment=fragment='';
}
}
function _resolve_uri_reference(reference_uri,&length ) {
reference_buffer='';
buffer = '';
reference_uri,reference_buffer ),reference_authority,
reference_query,reference_scheme == ''
&& reference_path == ''
&& buffer=reference_fragment != '' )
{
buffer.=reference_scheme != '' )
{
reference_uri;
}
else
{
base_uri,
base_buffer ),
base_authority,
base_query,
result_scheme = reference_authority != '' )
{
reference_authority;
}
else
{
base_authority;
if( reference_path{0} == '/')
|| (result_path = p = '';
path_buffer;
p = strstr( p )
{
base_path, '\\' );
}
if( path_buffer.=reference_path != '' )
{
reference_path;
}
{
//remove all occurrences of "./"
//print(
path_buffer=preg_replace("/\/\.\//","/",
path_buffer=preg_replace("/\/([^\/\.])*\/..path_buffer);
while(preg_match("/\.\./",path_buffer=preg_replace("/\/([^\/\.]*)\/..\//","/",
}
path_buffer=preg_replace("/\.path_buffer);
}
}
}
// This replaces the C pointer assignament
path_buffer;
if( buffer=buffer.=":";
}
if( buffer.="//";
result_authority;
}
if( buffer.=reference_query != '' )
{
buffer.=reference_fragment != '' )
{
buffer.=
(C) Æliens
20/2/2008
You may not copy or print any of this material without explicit permission of the author or the publisher.
In case of other copyright issues, contact the author.