$Id: CHANGES,v 1.71 2006/06/19 10:10:21 areggiori Exp $

Revision history for Perl extension RDFStore.

version 0.51 - Mon Jun 19 09:56:48 BST 2006

        RDFStore.xs
                - fixed bug into RDFStore_Literal_new() when literal is NULL
                - fixed bug when using modern threaded versions of perl (added dTHX; definitions)
                - updated search() to receive an hash-ref as main paramter (see t/01_rdfstore.t for example)
                - updated TIEHASH() to receive bt_compare_fcn_type parameter after mode (alos updated dbms/clinet tests)
                - added from() method to DBMS
                - added RDFStore::if_modified_since() method

        DBMS.pm
                - added $DBMS::BT_COMP_INT, $DBMS::BT_COMP_DOUBLE and $DBMS::BT_COMP_DATE definitions accordngly to include/rdfstore_flat_store.h

        include/backend_bdb_store_private.h
                - added from() method

        include/backend_dbms_store_private.h
                - added from() method

        include/backend_store.h
                - added from() method

        backend_caching_store.c
                - updated to use debug malloc/free
                - added from() method

        backend_bdb_store.c
                - fixed bug into first() and next() methods by removing DB_DBT_MALLOC flag on returned key
                - added from() method

        backend_dbms_store.c
                - added from() method
                - misc fixed bugs when returning status and errors to caller

        include/rdfstore_ms.h
                - added some XSD constants

        include/rdfstore_flat_store.h
                - added b-tree ordering function support if requested on open/creation
                - added from() method

        rdfstore_flat_store.c
                - added b-tree ordering function support if requested on open/creation
                - added from() method
                - updated delete() method to properly return FLAT_STOREENOTFOUND if key not found

        include/rdfstore.h
                - added RDFSTORE_INDEXING_VERSION_KEY and RDFSTORE_INDEXING_VERSION constants

        rdfstore_kernel.c
                - ignore default model context for data access methods like search() and contains() and use explit parameter
                - updated rdfstore_fetch_object() method to consider also bNodes as source node of the CBD
                - added xsd:double and xsd:integer b-tree sorted tables
                - added simple range search using xsd:integer and xsd:double tables
                - added RDFSTORE_INDEXING_VERSION_KEY to model and check of RDFSTORE_INDEXING_VERSION on connect()
                - updated insert and remove methods to check rdfstore_flat_store_delete() errors and avoid to index word as stem too
                - added rdfstore_if_modified_since() method and updated insert and remove methods to touch last modify date
                - added rdfstore_get_version() method to return perl level compiled time $VERSION string

        RDFStore::NodeFactory
                - fixed bNodes identifers generation
        
        RDFStore::Parser
                - updated wget() adding Accept: HTTP header and use LWP::UserAgent if available

        RDFStore::Parser::SiRPAC
                - updated wget() method invocation
                - force rdf:parseType="Literal" if rdf:dataType="http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral"
                - fixed bug in processDescription() when expanding rdf:nodeID on predicate with inline typed node

        RDFStore::Parser::NTriples
                - updated wget() method invocation

        RDFStore::Parser::Styles::RDFStore::Statement
                - new module to dump dump RDF/XML parsing results / statements

        RDQL::Parser
                - added SELECT DISTINCT
                - added SPARQL PREFIX support and default/built-in prefixes
                - added # and // style comments
                - added SPARQL QNAME like support
                - added ?prefix:var QName support to vars
                - added SPARQL CONSTRUCT support
                - added SPARQL $var support
                - added getQueryType() method
                - added SPARQL DESCRIBE support
                - fixed bug in Literal() when matching floating point numbers
                - updated constraints and removed AND keyword to be SPARQL compatible
                - added not standard RDQL/SPARQL DELETE support
                - added default SPARQL PREFIX op: <http://www.w3.org/2001/sw/DataAccess/operations> and PREFIX fn: <http://www.w3.org/2004/07/xpath-functions>
                - updated and simplified constraints productions to reflect latest SPARQL spec
                - constraints are now stacked into a RPN 
                - added full SPARQL graph-patterns and grouping
                - added SPARQL FROM NAMED support
                - added SPARQL LIMIT support
                - added SPARQL OFFSET support
                - added SPARQL ORDER BY support

        DBD::RDFStore
                - added SELECT DISTINCT support
                - updated RDF-for-XML format to return xsi:type information     
                - start adding empty bound/var support
                - added ?prefix:var QName support to vars
                - updated RDF/XML format to stream one single graph
                - added SPARQL CONSTRUCT support
                - added DBD::RDFStore::st::getQueryStatement() method
                - renamed asRDF DBI parameter as results - and removed output handle and output_string modes
                - updated XML and misc RDF output format interface to use DBD::RDFStore::st specific methods:
                        fetchrow_XML(), fetchall_XML(), fetchsubgraph_serialize(), fetchallgraph_serialize()
                - added fetchsubgraph() and fetchallgraph() methods to return matches as RDFStore::Model
                - added SPARQL DESCRIBE support
                - fixed bug into _prepareTriplepattern() when bNode is substituted
                - added simple RDF/S rdfs:subClassOf rdfs:subPropertyOf and owl:sameAs inferencing if aval into input RDF merge and requested
                - updated search() method call to use new XS code interface (hash ref)
                - added simpler XML serialization (dawg-xml) see http://www.w3.org/2001/sw/DataAccess/rf1/
                - replaced rdfqr-results with dawg-results format http://www.w3.org/2001/sw/DataAccess/tests/result-set#
                - removed rs:size from dawg-results format see http://lists.w3.org/Archives/Public/public-rdf-dawg/2004OctDec/0196.html
                - added not standard RDQL/SPARQL DELETE support
                - updated to rw mode for database connection if specified or DELETE requested
                - added default SPARQL PREFIX op: <http://www.w3.org/2001/sw/DataAccess/operations> and PREFIX fn: <http://www.w3.org/2004/07/xpath-functions>
                - added basic set of SPARQL operations and functions - see http://www.w3.org/2001/sw/DataAccess/rq23/#tests
                - constraints are now process using a RPN stack
                - added simple SPARQL OPTIONAL keyword support
                - fixed bug when processing bNodes
                - added SPARQL LIMIT support
                - added SPARQL OFFSET support
                - added SPARQL ORDER BY support

        lib/RDFStore/Model
                - updated search() method call to use new XS code interface (hash ref)
                - added ifModifiedSince() method

        utils/rdfquery.pl
                - replaced rdfqr-results with dawg-results format http://www.w3.org/2001/sw/DataAccess/tests/result-set#
                - added dawg-xml serialization ( see http://www.w3.org/2001/sw/DataAccess/rf1/ )
                - updated to use more general fetchrow_XML() adn fetchsubgraph_serialize() methods and return XML results by default
                - added -smart option to due simple inferencing
                - removed -query option and reads query either as string or from specified filename
                - added 'comment' and 'metadata' options

        utils/rdf.pl
                - use RDFStore::Parser::Styles::RDFStore::Statement if no storage is required
                - added '-version' option to print $RDFStore::VERSION

        RDFStore::Serializer::RDFXML
                - fixed bug when model context is set

        RDFStore::Serializer::RSS
                - fixed bug when model context is set

version 0.5 - Thu Aug 19 20:08:14 CEST 2004

        A brand new indexing model for RDF data has been developed in this release - such a indexing model allows to store
        quite efficienty "pedantic" RDF descriptions by leveraging on compression of the index of triples using a custom RLE+VLE
        compression algorithm written in C and XS.  It is under investigation the real need to have a custom compression algorithm 
        for RDFStore instead of using one in the public domain; some tests showed that general purpose algorithms like LZO or LZF 
        perfom worse in the specific case of RDFStore where the sparse matrix contains well-known patterns.

        This version start to support the RDF Data Query language (RDQL/Squish) via a proper DBD::RDFStore DBI driver 
        (see http://www.hpl.hp.co.uk/people/afs/RDQL/ and http://swordfish.rdfweb.org/rdfquery/) The software support tha basic 
        query language with some extensions to run free-text queries over literals (property values). See also the RDF Query and Rules
        page at http://www.w3.org/2003/03/rdfqr-tests/

        RDFStore::Model now support basic single statement-grouping (i.e. "context") per statement that allow to run storage 
        operations giving a kind of context to them e.g. a spatial or temporal context or just the source URI; all basic model 
        method have been updated to support that. This stuff is really much close to the on going work of RDF Core WG and other 
        proposals about adding context information to individual triples. This software part is just meant to be a useful and practical
        artifact and does not want or pretend any of the complex issues being discussed in the RDF community.

        The RDFStore::Parser::OpenHealth parser has been removed from the distribution

        Being that the new storage model does not require Data::MagicTie anymore, the module is being distributed separatly (not on CPAN even ;)

        Some useless modules has been removed from the distribution and some has been renamed; in general the basic storage 
        functionalities are provided through the RDFStore module, while the Stanford API specific code is available in the RDFStore::* modules. 
        The SiRPAC RDF parser is still being distributed with the main storage sources but they will be also distributed separately 
        in the future (XML::SAX::RDF::Filter or something)

        UTF-8 (Unicode) support has been natively introduced into this release - custom C/XS code has been written to allow convertion
        from/to utf8 to other char encodings - the perl use can also use the RDFStore::Util::UTF8(3) to get general string utility functions
        which work on UTF8/Unicode.

        Things in CVS now also into the sourceoforge RDFStore CVS repository. In addition the system should compile fine on most of the 
        UNIX systems out there (including the dbms/ tcp/ip deamon)

        Backend now fully general - software ships with BerkeleyDB, DBMS and caching (in-memory) backends

        Basic caching layer added which should speed up all the DB and I/O operations

        t/
                - updated all test cases
                - added 04_rdql.t, 05_serializier.t and 06_objects tests

        RDFStore
                - updated to be the corner stone of the RDF storage actually implemented in C and XS (lots of C and XS code really hoping to gain 
                  some speed and credibility here :) Here is the place where all perl world magics happen....almost
                - now brand new C low-level API interfaced to perl via XS code

        RDQL::Parser
                - new module

        DBD::RDFStore
                - new DBI driver to run RDQL/Squish SQL like queries :-) allows to dump query results in several different formats

        RDFStore::Iterator
                - new module

        RDFStore::Object
                - new module

        RDFStore::Serializer
                - new module

        RDFStore::Serializer::RDFXML
                - new module

        RDFStore::Serializer::NTriples
                - new module

        RDFStore::Serializer::RSS
                - new module

        RDFStore::Util::UTF8
                - new module

        RDFStore::Model
                - brand new design now using the faster C/XS RDFStore(3) module....finally :)
                - updated methods to avoid a full copy of statements across when the model is shared if possible
                - added basic support for statements grouping - see setContext(), getContext() and resetContext()
                - zapped toStrawmanRDF() method
                - added serialize() method to generally dump a model/graph to a string or filehanlde
                - added isConnected() and isRemote() methods
                - added unite(), subtract(), intersect(), complement() and exor() methods
                - re-added RDFStore::Resource inheritance  
                - added getParser(), getReader(), getSerializer() and getWriter() methods

        RDFStore::Parser
                - new module
                - includes wget() now using IO::Socket and other general purpose parsing methods

        RDFStore::Parser::SiRPAC
                - fixed bug in processDescription()
                - fixed bug in processTypedNode() when removeAttribute
                - fixed bug in makeAbsolute() when LocalName contains '#'
                - removed xml:space handling in RDFXML_CharacterDataHandler()
                - fixed bug in processPredicate() - does not generate triples when PCDATA is pure whitespaces stuff and there are XML subelements
                - fixed bug in processListItem() when generate rdf:li elements
                - added rdfcroak() instead of using $expat->xpcroak()
                - updated newReificationID()
                - added RDFMS_nodeID and RDFMS_datatype
                - updated reify()
                - added rdf:nodeID support
                - added rdf:parseType="Collection" support to processPredicate()
                - fixed bug in processPredicate() to force a resource node object for rdf:type on predicate with rdf:resource
                - removed parse_start() method and added parsestream() to do expat no-blocking parseing of large XML streams
                - removed processListItem() - new specs require to process containers as nomral predicates and simply enumerating elements
                - fixed bug in processContainer() to treat RDF containers just like any other typed node but with rdf:li or rdf:n nodes
                - added xml:base support
                - added xml:lang support
                - added managebNodes callback/hanlder
                - updated bNode identifier generation algorithm - now parser run wide unique - see newReificationID()
                - various fixes when using getAttributeValue() 
                - updated rdfcroak() to return source name too when failing
                - updated processXML() - removed the fetchSchema part
                - force source to STDIN: if not defined
                - removed RDFCore_Issues option - now default
                - added rdfwarn()
                - added warnings()
                - moved common code to RDFStore::Parser
                - added rdf:datatype support
                - added rdfstore:context support

        RDFStore::Parser::NTriples
                - new module

        RDFStore::Vocabulary::DC
                - updated DCMI namespace to http://purl.org/dc/elements/1.1/

        RDFStore::Parser::Styles::RDFStore::Model
                - renamed from RDFStore::Parser::Styles::MagicTie
                - added Context option to the storage
                - fixed typing error when apssing the nodeFactory to the model
                - allows to specify an existing RDFStore::Model as input
                - added owl:imports support

        utils/
                - updated rdfquery.pl to use RDQL/Squish syntax and read some default storage parameters
                - added context/provenance flags to rdf.pl and rdfingest.pl
                - added pod2html.pl utility to HTMl format native perl POD documentation

        RDFStore::Resource
                - added anonymous resources support - see also RDFStore::NodeFactory(3) and RDFStore::Model(3)
                - added isAnonymous() and isbNode()
                - updated accordingly to new RDFStore API
                - removed BLOB support

        RDFStore::RDFNode
                - updated accordingly to new RDFStore API
                - removed BLOB support

        RDFStore::Literal
                - updated accordingly to new RDFStore API
                - removed BLOB support

        RDFStore::Statement
                - updated accordingly to new RDFStore API
                - added statements reification and context support

        RDFStore::Vocabulary::Generator
                - updated to use RDFStore::Model new API

        RDFStore::Vocabulary::DCQ
                - updated

        RDFStore::Vocabulary::DCT
                - new vocabulary for DCMI Type Vocabulary

        RDFStore::Vocabulary::RSS
                - new vocabulary for RSS1.0 see http://purl.org/rss/1.0/

        RDFStore::Vocabulary::RDFStoreContext
                - new vocabulary for RDFStore contexts

        RDFStore::Vocabulary::OWL
                - new vocabulary for OWL see http://www.w3.org/2002/07/owl#

        RDFStore::NodeFactory
                - added anonymous resource support via createAnonymousResource() and createbNode() - see also RDFStore::Resource(3)
                - added statements reification support via createReifiedStatement() - see also RDFStore::Statement(3)
                - updated accordingly to new RDFStore API
                - added createNTriple() method

        RDFStore::SetModel
                - removed now included into main RDFStore::Model(3)

        RDFStore::Util::Digest
                - added as new module to manage SHA-1 cryptographic digests natively (using apache SHA-1 code) most of functionality 
                  like old module RDFStore::Stanford::Digest::Util(2)

        RDFStore::Model::Iterator
                - re-implementation of old RDFStore::Model::Statements using RDFStore::Iterator

version 0.42 - Fri Aug 31 17:31:13 CEST 2001

Updated Makefiel.PL

        utils/
                - added rdf2n3p.pl to test cases as part of the RDF Core working group (see
                  http://www.w3.org/2001/sw/RDFCore/ntriples/)
                - updated rdf.pl
                - updated rdfquery.pl
                - updated rdfingest.pl
                - updated dbcat

        RDFStore::Parser::SiRPAC
                - updated accordingly to RDF Core Working Group decisions (see 
                  http://www.w3.org/2000/03/rdf-tracking/#attention-developers)
                        * rdf-ns-prefix-confusion (carp if error)
                        * rdfms-abouteachprefix (removed aboutEachPrefix)
                        * rdfms-empty-property-elements (updated  processDescription() and processPredicate())
                        * rdf-containers-formalmodel (updated processListItem())
                - added RDFCore_Issues option
                - fixed bug when calling setSource() internally
                - updated makeAbsolute()
                - fixed bug in processListItem() when calling processContainer()
                - fixed bug in processPredicate() for empty predicate elements having zero attributes

        Data::MagicTie
                - fixed compilation bug while strict subs when missing DB_File

        t/
                - updated magictie.t
                - updated rdfstore.t

        RDFStore::Statement
                - updated toString() and getDigest()

        RDFStore::Model
                - complete redesign of the indexing method up to free-text search on literals
                - added tied array iterator RDFStore::Model::Statements to allow fetching results one by one
                - modified find() to allow a 4th paramater to make free-text search over literals

        RDFStore::SetModel
                - updated accordingly to new RDFStore::Model

version 0.41 - Thu Jul 12 17:11:02 CEST 2001

        RDFStore::Parser::SiRPAC
                - fixed bug with XML::Parser 2.30 using expat-1.95.1
                     * XMLSCHEMA set to http://www.w3.org/XML/1998/namespace (see http://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-using)
                     * added XMLSCHEMA_prefix
                - changed RDF_SCHEMA_NS to http://www.w3.org/2000/01/rdf-schema#

        RDFStore::Parser::OpenHealth
                - fixed bug with XML::Parser 2.30 using expat-1.95.1
                     * XMLSCHEMA set to http://www.w3.org/XML/1998/namespace (see http://www.w3.org/TR/1999/REC-xml-names-19990114/#ns-using)
                     * added XMLSCHEMA_prefix
                - changed RDF_SCHEMA_NS to http://www.w3.org/2000/01/rdf-schema#

        RDFStore::Stanford::Digest::Util
                - updated digestBytes2HashCode()

        RDFStore::Model
                - updated _getLookupValue() and _getValuesFromLookup() to consider negative hashcodes

        RDFStore::Literal
                - added getDigest() to generate the digest using quotes and the label

        Data::MagicTie
                - fixed compilation bug while strict subs
                - added a warning in del_dup() if not supported by underlying DB_File library
                - updated _untie() to avoid warnings while untie databases

        t/
                - updated rdfstore.t
                - updated parser.t
                - updated magictie.t moving DBMS specific code to dbms/DBMS/t/magictie.t

version 0.4 - Mon Jun 18 17:18:36 CEST 2001

        This a major release. A lot of changes ahs been made to the storage system in parituclar
        the dbms/ TCP/IP has been compeltely updated and the Data::MagicTie BerkeleyDB has been
        updated to make properly DB locking to handle concurrency and avoid dead-locks situations.
        The API modified accordingly to the latest changes in the Stanford Java API 2001-01-19 distribution.
        (see http://www-db.stanford.edu/~melnik/rdf/rdf-api-2001-01-19.zip)
        The SiRPAC parser has been also updated accordingly to the latest W3C 
        version at http://www.w3.org/RDF/Implementations/SiRPAC/

        Updated documentation of all the perl modules and fixed a few typo warnings.

        dbms/CHANGES
                - added separated changes file for the DBMS module

        Makefile.PL
                - updated

        RDFStore
                - removed FindIndex module

        RDFStore::Stanford::Vocabulary::Generator
                - fixed bug in dumpVocabulary() when matching input namespace (escape plus signs)
                  and output full qualified package variable names of voc properties
                - fixed bug in createVocabulary() when check package name
                - fixed miss-spelling bug in toPerlName()
                - fixed a few warnings
                - updated accordingly to new RDFStore::Model

        RDFStore::Model
                - modifed add() to return undef if the triples exists already in the database
                - changed way to return undef in subroutines
                - adapted to use the new Data::MagicTie interface
                - complete re-design of the indexing and storage method
                - added getOptions() method
                - Devon Smith <devon@taller.pscl.cwru.edu> changed getDigestBytes() to generate digests and hashes
                  that match Stanford java ones exactly
                - added inheritance from RDFStore::Stanford::Digest::Digestable
                - removed RDFStore::Stanford::Resource inheritance

        RDFStore::Resource
                - added check on local name when create a new Resource
                - allow creation of resources from URI(3) objects or strings using XMLNS LocalPart
                - hashCode() and getDigest() return separated values for localName and namespace if requested

        RDFStore::SetModel
                - updated accordingly to new RDFStore::Model
        
        RDFStore::Parser::Styles::MagicTie
                - modified Assert() to print only new statements

        Data::MagicTie
                - complete redesign of Data::MagicTie. Dropped Data::MagicTie::(DBMS|DB_File|BerkeleyDB) modules
                  Everything is self contained in one model now.
                - changed options labels
                - modified mode option managemnt
                - added checking if DBMS, BerkeleyDB, DB_File or SDBM_File styles can not be loaded
                - changed way to return undef in subroutines
                - remove db files directory if tie operation fails
                - FIRSTKEY() and NEXTKEY() methods optimised
                - use File::Path module to create and remove directories to be portable
                - changed mode to DB_BTREE for DB_File TIEHASH
                - added BerkeleyDB file locking in TIEHASH and TIEARRAY
                - took off a few useless sync() calls
                - dropped lr (local/remote) option
                - dropped noft (no freeze/thaw) option
                - added in-memory style
                - added sharing option
                - added SDBM_File default style
                - fixed warning in keyDB()
                - added perl version checking for Data::MagicTie::Array methods
                - added multiple reader/single writer locking support for DBFile
                - does not generate multiple '.db' extensions to files in _tie()

        t/
                - updated magictie.t
                - added rdfstore.t

        samples
                - zapped a few examples
                - updated test.pl

        samples/rdf
                - zapped a few examples

        samples/rdf/vocabularies
                - zapped a few examples. Updated DAML and foaf schemas
                - added RSS schema
                - added XML infoset RDF Schema
                - zapped DublinCore
                - added 22-rdf-syntax-ns, rdf-schema, 13-dces and 13-dcq

        RDFStore::Vocabulary::DCQ
                - added DCQ vocabulary http://dublincore.org/2000/03/13-dcq#

        RDFStore::Vocabulary::DC
                - updated accordingly to RDFStore::Stanford::Vocabulary::Generator changes and http://dublincore.org/2000/03/13/dces#

        RDFStore::Vocabulary::DAML
                - updated accordingly to RDFStore::Stanford::Vocabulary::Generator changes and http://www.daml.org/2001/03/daml+oil.daml

        RDFStore::Vocabulary::RDF
                - updated accordingly to RDFStore::Stanford::Vocabulary::Generator changes
                - removed rdf:Description, rdf:resource, rdf:about, rdf:aboutEach, rdf:anboutEachPrefix, rdf:ID, rdf:parseType, rdf:parseType (it is up to the application to build resources with them using $RDF::_Namespace)

        RDFStore::Vocabulary::RDFS
                - updated accordingly to RDFStore::Stanford::Vocabulary::Generator changes

        RDFStore::Stanford::Digest::Util
                - fixed stupid/braindead bug when disable warnings- Thanks to Marc Lehmann <pcg@goof.com>
                - added getDigestAlgorithm() method
                - Devon Smith <devon@taller.pscl.cwru.edu> changed digestBytes2HashCode() and toHexString() to
                  generate digests and hashes that match Stanford java ones exactly

        RDFStore::Parser::OpenHealth
                - changed way to return undef in subroutines
                - fixed warnings in getAttributeValue()

        RDFStore::Parser::SiRPAC
                - changed way to return undef in subroutines
                - now creation of Bag instances for each Description block is an option
                - fixed bug in getAttributeValue() when check attribute name
                - fixed bug in setSource() when add trailing '#' char   
                - bug fixing by rob@eorbit.net
                        * Some of the generated URIs were not prepended with #
                        * The parser spits out lots of 'undefined value used' during the parsing process
                - fixed warnings in getAttributeValue(), RDFXML_StartElementHandler()
                - added GenidNumber parameter
                - updated accordingly to http://www.w3.org/RDF/Implementations/SiRPAC/
                - bug fix in reify() when generate the subject property triple
                - added getReificationCounter()

        RDFStore::Statement
                - changed way to return undef in subroutines
                - fixed warning in getDigest()
                - updated new() equals() and added hashCode() accordingly to rdf-api-2001-01-19
                - Devon Smith <devon@taller.pscl.cwru.edu> changed getDigest to generate digests and hashes
                  that match Stanford java ones exactly

        RDFStore::RDFNode
                - fixed bug in hashCode() to avoid bulding the digest each time
                - added inheritance from RDFStore::Stanford::Digest::Digestable

        RDFStore::NodeFactory
                - changed way to return undef in subroutines
                - implemented createOrdinal()

        RDStore::Literal
                - modified getLabel() and getURI() to return a lebel even if the Literal is a BLOB (using Storable)
                - updated equals() method to make a real comparison of BLOBs using Storable module

        utils/
                - updated rdf.pl, rdfingest.pl, rdfquery.pl and vocabulary-generator.pl
                - updated dbcat

        RDFStore::Stanford::Digest::Digestable
                - added new module which represent objects that can produce a digest 

version 0.31 - Fri Dec 22 15:31:14 CET 2000

        This version has renamed all the Perl packages making RDFStore ready to be published to
        the Perl CPAN archive. The module names have been mapped as follows:

version<=0.3 version>=0.31

Data::MagicTie::Client Data::MagicTie::DBMS Data::MagicTie::DB_File (unchanged) Data::MagicTie::BerkeleyDB (unchanged) Data::MagicTie (unchanged) RDF::Digest::Abstract RDFStore::Stanford::Digest::Abstract RDF::Digest::Util RDFStore::Stanford::Digest::Util RDF::Digest::MD5 RDFStore::Stanford::Digest::MD5 RDF::Digest::Generic RDFStore::Stanford::Digest::Generic RDF::Digest::SHA1 RDFStore::Stanford::Digest::SHA1 RDF::Vocabulary::RDFS RDFStore::Vocabulary::RDFS RDF::Vocabulary::Generator RDFStore::Stanford::Vocabulary::Generator RDF::Vocabulary::DC RDFStore::Vocabulary::DC RDF::Vocabulary::DAML RDFStore::Vocabulary::DAML RDF::Vocabulary::RDF RDFStore::Vocabulary::RDF RDF::Store::SchemaModel RDFStore::SchemaModel RDF::Store::Model RDFStore::Model RDF::Store::NodeFactory RDFStore::NodeFactory RDF::Store::RDFNode RDFStore::RDFNode RDF::Store::Resource RDFStore::Resource RDF::Store::Statement RDFStore::Statement RDF::Store::SetModel RDFStore::SetModel RDF::Store::VirtualModel RDFStore::VirtualModel RDF::Store::FindIndex RDFStore::FindIndex RDF::Store::Literal RDFStore::Literal RDF::RDFNode RDFStore::Stanford::RDFNode RDF::Model RDFStore::Stanford::Model RDF::Statement RDFStore::Stanford::Statement RDF::NodeFactory RDFStore::Stanford::NodeFactory RDF::SetModel RDFStore::Stanford::SetModel RDF::VirtualModel RDFStore::Stanford::VirtualModel RDF::Literal RDFStore::Stanford::Literal RDF::Store RDFStore::Stanford::Store RDF::Digest RDFStore::Stanford::Digest RDF::Resource RDFStore::Stanford::Resource XML::Parser::PenRDF::RDFStore RDFStore::Parser::Styles::MagicTie XML::Parser::PenRDF RDFStore::Parser::SiRPAC XML::Parser::PenRDFStrawman RDFStore::Parser::OpenHealth The only Perl package namespace "invaded" is the Data one with the Data::MagicTie modules. In addition the documentation has been updated and the API modified accordingly to the latest changes in the Stanford Java API 2000-12-05 distribution. (see http://www-db.stanford.edu/~melnik/rdf/rdf-api-2000-12-05.zip) RDFStore::FindIndex - added new index storage method. Does not use Freezed/Thawed arrays if possible RDFStore::Stanford::Digest::Util - fixed nusty bug in digestBytes2HashCode() to cast hash code to INTEGER Data::MagicTie - added get_Options() method Data::MagicTie::BerkeleyDB - completely modified the access methods to Sleepycat library and DBs - see Data::MagicTie::DB_File(3) RDFStore - added use (include) of all RDFStore modules suite RDFStore::Model - fixed bug in add() when adding statements with a Literal value - commented out isEmpty() check in find() due to DBMS(3) efficency problems - updated toStrawmanRDF() method - modifed add() to avoid update of existing statements RDFStore::Stanford::NodeFactory - fixed the parameters checking when create Statements RDFStore::Parser::SiRPAC - fixed bug in parse_start() and parse() to check $file_or_uri is a reference to an URI object - changed wget() Socket handle to work with previous Perl versions (not my $handle) and do HTTP GET even on HTTP 'Location' redirect header - fixed bug in RDFXML_CharacterDataHand() when trim text and $preserveWhiteSpace - fixed bug in processTypedNode() when remove attributes - commented off croak in expandAttributes() when 'expanding predicate element' for production http://www.w3.org/TR/REC-rdf-syntax/#typedNode for xhtml2rdf stuff RDFStore::Parser::OpenHealth - changed wget() Socket handle to work with previous Perl versions (not my $handle) and do HTTP GET even on HTTP 'Location' redirect header - little change when checking if a prefix is undefined utils/ - added rdfingest.pl to ingest (S,P,O) comma separated text files right the way - updated rdf.pl rdfquery.pl - added bagIDs option to rdf.pl

version 0.3 - Tue Nov 28 14:02:10 CET 2000

        This version has updated the Perl modules set accordingly to the latest chnages in the Stanford
        Java API 2000-11-13 distribution. (see http://www-db.stanford.edu/~melnik/rdf/rdf-api-2000-11-13.zip)
        
        Almost all modules have been fixed when checking references/pointers (defined and ref() )

        RDF::Store::FindIndex
                - fixed bugs when checking references/pointers (defined and ref() )

        XML::Parser::PenRDF
                - fixed bug in expandAttributes() when expand rdf:value
                - Modified addOrder() expandAttributes() accordingly to rdf-api-2000-11-13
                - fixed bug in parse() parse_start() to set the Source right
                - fixed bug in RDFXML_StartElementHandler() when parseLiteral process attributes also
                - fixed bug in processTypedNode() to manage new attlist way
                - fixed bug in processPredicate() to manage new attlist way
                - fixed bugs due to the modifications due rdf-api-2000-10-30. Now $n->{tag} is either
                  $n->name() or $n->localName(); code got more clear also
                - fixed addTriple() and reify() - more checking and modified to manage right $subject

        XML::Parser::PenRDF::RDFStore
                - fixed bug in Assert() checking if $st is a ref and valid RDF::Statement

        RDF::Vocabulary::RDFS
                - changed namespace to http://www.w3.org/2000/01/rdf-schema#

        RDF::Store::Model
                - fixed bug in find(). Check the type of $t before using methods on it
                - added toStrawmanRDF() to serialise the model in strawman RDF for 
                  XML::Parser::PenRDFStrawman
                - fixed bug in create()
                - modified updateDigest() method accordingly to rdf-api-2000-11-13

        RDF::Vocabulary::Generator
                - fixed bug in toPerlName() and dumpVocabulary() avoid grep regex checking

        RDF::Store::SchemaModel
                - added getLocalName() and getNamespace() to delegate to instances
                - changed checking to RDF::SetModel type
                - modified toString()
                - fixed miss-spell in validate()

        Data::MagicTie::Client
                - fixed bug in FIRSTKEY(). Do not call keys and each anymore.

        utils/
                - little bit of changes in rdf.pl and rdfquery.pl
                - rdfquery.pl query syntax changed

version 0.2 - Mon Nov 13 14:56:46 CET 2000

        This version updates the whole Perl modules set accordingly to the latest chnages in the Stanford 
        Java API 2000-10-30 distribution. (see http://WWW-DB.Stanford.EDU/~melnik/rdf/rdf-api-2000-10-30.zip)

        XML::Parser::PenRDF/XML::Parser::PenRDFStrawman
                - fixed bug in parsefile() to read URL-less filenames
                  (version0.1 was working only with 'file:' URL prefix)
                - fixed a lot of bugs/inconsistences in new(), parse(), setSource(), parsestring()
                  processXML() in the fetchSchema part, makeAbsolute()
                - added parse_start a la XML::parser for no-blocking stream
                  parsing using XML::Parser::ExpatNB
                - pod documentation updated
                - does not use URI::file anymore
                - Modified createResource(), XML::Parser::PenRDF::Element and
                  XML::Parser::PenRDF::DataElement accordingly to rdf-api-2000-10-30
                - General bug fixing

        XML::Parser::PenRDF::RDFStore
                - Init() now setSourceURI() for the model
                - now the result set is a SetModel

        RDF::Resource, RDF::NodeFactory, RDF::Store::Literal, RDF::Store::NodeFactory,
        RDF::Store::RDFNode,RDF::Store::Resource,RDF::Store::Statement
                - Modified accordingly to rdf-api-2000-10-30

        RDF::Store::Model
                - fixed bug in new() to check if triples is HASH ref when passed by user
                - fixed bug in find() do avoid to  return instances of SetModel (see SchemaModel.pm also)
                  Now result sets are put in an object(model) of the the same type - see find()
                - modified add() remove() clone() duplicate() and added toString() makePrivate()
                  getNamespace() getLocalName() methods accordingly to rdf-api-2000-10-30
                - modifed new(), duplicate(), clone() and find() to support cloned models
                - modified find() to manage normal Models and indexed Models differently
                - added optional indirect indexing to find() i.e. the FindIndex 
                  stores just digested keys and not the full BLOB; fetch from an 
                  index then require an additional look up in triples

        RDF::Vocabulary::Generator
                - added more magic keywords to 'reservedWords' list (my, local)
                - Modified createResource() accordingly to rdf-api-2000-10-30

        RDF::NodeFactory
                - pass @_ array to new methods
        
        Data::MagicTie
                - fixed warning messages

        RDF::Store::SetModel
                - fixed bug in intersect()
                - now all methods return the modified model

        RDF::Store::FindIndex
                - fixed miss-spelling bug in remove()
                - added indirect indexing support to be de-referenced by the caller 
                  Model object.

        samples/
                - fixed bugs in rdf.pl and rdfquery.pl
                - rdfquery.pl uses SetModel to unite (||), intersect (&&), subtract(!), 

version 0.1 - 2000/11/03 at 04:30 CEST