Revision history for Perl extension RDFStore.

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

	Updated Makefiel.PL

		- added to test cases as part of the RDF Core working group (see
		- updated
		- updated
		- updated
		- updated dbcat

		- updated accordingly to RDF Core Working Group decisions (see
			* 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

		- fixed compilation bug while strict subs when missing DB_File

		- updated magictie.t
		- updated rdfstore.t

		- updated toString() and getDigest()

		- 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

		- updated accordingly to new RDFStore::Model

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

		- fixed bug with XML::Parser 2.30 using expat-1.95.1
		     * XMLSCHEMA set to (see
		     * added XMLSCHEMA_prefix
		- changed RDF_SCHEMA_NS to

		- fixed bug with XML::Parser 2.30 using expat-1.95.1
		     * XMLSCHEMA set to (see
		     * added XMLSCHEMA_prefix
		- changed RDF_SCHEMA_NS to

		- updated digestBytes2HashCode()

		- updated _getLookupValue() and _getValuesFromLookup() to consider negative hashcodes

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

		- 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

		- 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.
	The SiRPAC parser has been also updated accordingly to the latest W3C 
	version at

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

		- added separated changes file for the DBMS module

		- updated

		- removed FindIndex module

		- 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

		- 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 <> 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

		- 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

		- updated accordingly to new RDFStore::Model
		- modified Assert() to print only new statements

		- 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 DB_File
		- does not generate multiple '.db' extensions to files in _tie()

		- updated magictie.t
		- added rdfstore.t

		- zapped a few examples
		- updated

		- zapped a few examples

		- 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

		- added DCQ vocabulary

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

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

		- 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)

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

		- fixed stupid/braindead bug when disable warnings- Thanks to Marc Lehmann <>
		- added getDigestAlgorithm() method
		- Devon Smith <> changed digestBytes2HashCode() and toHexString() to
		  generate digests and hashes that match Stanford java ones exactly

		- changed way to return undef in subroutines
		- fixed warnings in getAttributeValue()

		- 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
			* 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
		- bug fix in reify() when generate the subject property triple
		- added getReificationCounter()

		- 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 <> changed getDigest to generate digests and hashes
		  that match Stanford java ones exactly

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

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

		- 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

		- updated,, and
		- updated dbcat

		- 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. 

		- added new index storage method. Does not use Freezed/Thawed arrays  if possible

		- fixed nusty bug in digestBytes2HashCode() to cast hash code to INTEGER

		- added get_Options() method

		- completely modified the access methods to Sleepycat library and DBs - see Data::MagicTie::DB_File(3)

		- added use (include) of all RDFStore modules suite

		- 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

		- fixed the parameters checking when create Statements

		- 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 for xhtml2rdf stuff

		- 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

		- added to ingest (S,P,O) comma separated text files right the way
		- updated
		- added bagIDs option to

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
	Almost all modules have been fixed when checking references/pointers (defined and ref() )

		- fixed bugs when checking references/pointers (defined and ref() )

		- 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

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

		- changed namespace to

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

		- fixed bug in toPerlName() and dumpVocabulary() avoid grep regex checking

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

		- fixed bug in FIRSTKEY(). Do not call keys and each anymore.

		- little bit of changes in and
		- 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/

		- 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

		- Init() now setSourceURI() for the model
		- now the result set is a SetModel

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

		- 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 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

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

		- pass @_ array to new methods
		- fixed warning messages

		- fixed bug in intersect()
		- now all methods return the modified model

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

		- fixed bugs in and
		- uses SetModel to unite (||), intersect (&&), subtract(!), 

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