The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

perfSONAR_PS::DB::File - A module that provides methods for adding 'database like' functions to files that contain XML markup.

DESCRIPTION

This purpose of this module is to ease the burden for someone who simply wishes to use a flat file as an XML database. It should be known that this is not recommended as performance will no doubt suffer, but the ability to do so can be valuable. The module is to be treated as an object, where each instance of the object represents a direct connection to a file. Each method may then be invoked on the object for the specific database.

SYNOPSIS

    use perfSONAR_PS::DB::File;
  
    my $file = new perfSONAR_PS::DB::File(
      "./store.xml"
    );

    # or also:
    # 
    # my $file = new perfSONAR_PS::DB::File;
    # $file->setFile("./store.xml");  
    
    my $error = "";
    $file->openDB($error);

    print "There are " , $file->count("//nmwg:metadata", $error) , " elements in the file.\n";

    my @results = $file->query("//nmwg:metadata", $error);
    foreach my $r (@results) {
      print $r , "\n";
    }

    $file->closeDB($error);
    
    # If a DOM already exists...
    
    my $dom = XML::LibXML::Document->new("1.0", "UTF-8");
    $file->setDOM($dom, $error);
    
    # or getting back the DOM...
    
    my $dom2 = $file->getDOM($error);
    

DETAILS

The API is very simple for now, and does not offer things like insert or delete. At this time the necessary tooling for XML (XPath, DOM, SAX, etc) does not provide an efficient or prudent solution to these tasks, so they will probably not be added to this module. If you wish to edit your XML file, do so out of band.

API

The API of perfSONAR_PS::DB::File is rather simple, and attempts to mirror the API of the other perfSONAR_PS::DB::* modules.

new($package, $file)

The only argument is a string representing the file to be opened.

setFile($self, $file)

(Re-)Sets the name of the file to be used.

openDB($self, $error)

Opens the database, will return status of operation.

closeDB($self, $error)

Close the database, will return status of operation.

query($self, $query, $error)

Given a query, returns the results or nothing.

querySet($self, $query, $error)

Given a query, returns the results (as a nodeset) or nothing.

count($self, $query, $error)

Counts the results of a query.

getDOM($self, $error)

Returns the internal XML::LibXML DOM object. Will return "" on error.

setDOM($self, $dom, $error)

Sets the DOM object.

SEE ALSO

XML::LibXML, Log::Log4perl

To join the 'perfSONAR-PS' mailing list, please visit:

  https://mail.internet2.edu/wws/info/i2-perfsonar

The perfSONAR-PS subversion repository is located at:

  https://svn.internet2.edu/svn/perfSONAR-PS 
  

Questions and comments can be directed to the author, or the mailing list. Bugs, feature requests, and improvements can be directed here:

  https://bugs.internet2.edu/jira/browse/PSPS

VERSION

$Id$

AUTHOR

Jason Zurawski, zurawski@internet2.edu

LICENSE

You should have received a copy of the Internet2 Intellectual Property Framework along with this software. If not, see <http://www.internet2.edu/membership/ip.html>

COPYRIGHT

Copyright (c) 2004-2007, Internet2 and the University of Delaware

All rights reserved.