• AbstractSQLStore was incorrectly putting Literal::Language representation rather than value in database.

  • Changed Graph#eql? and Graph#== to do simple equality check.

  • Added Graph#isomorphic? which does more exhaustive equivalence check.

  • Fixed bug in MemoryStore where a frozen resource could be returned.

  • AbstractStore#destroy either removes all triples from store, or specified context. No longer removes the DB file.


  • N3 Parser

    • Allow mixed case literal languages.

    • Unescape literals

  • Rspec 2.1.0

  • Added Resource class, a common super-class of BNode, Graph, Literal and URIRef.

  • Implemented Resource.parse and variations for sub-classes to parse N3-coded resources.

  • Literal#typed

    • Namespaces option now is => href rather than => Namespace.

    • Add all in-scope namespaces, not just those that seem to be used.

  • RDFa Parser

    • Upgrade for changes to RDFa 1.1 test suite

    • For non-XHTML, allow use of xml:base for non-HTML languages

    • XHTML has no default vocabulary.

    • No longer pass vocabularies, prefixes or terms when creating XMLLiterals. Only namespaces derived via xmlns are passed to Literal#typed.

  • SQLite3Store

    • Basic support for using with ActiveRecord: #initialize configuration can take a connection option, using ActiveRecord::Base.connection.raw_connection

    • If result set is returned as a hash, change back to an array (needed, as rails sets results_as_hash attribute on DB)

  • Added ActiveRecordStore

    • Uses ActiveRecord connection to store graph information, not an ActiveRecord::Base model

  • Fix minor graph property caching bug relating to manipulation of sequences.


  • Update to 2010-10-26 LC version of RDFa Core 1.1

    • Deep processing of XMLLiterals

    • Case sensitive Terms

    • Updated processor graph vocabulary

  • Don't create unnecessary namespaces when serializing RDF/XML.

  • Don't use regexp to substitute base URI in URI serialization.

  • Added profile_graph option to RdfaParser#parse. This MUST be a ConjunctiveGraph and will be used to save profiles that are encountered.

    • Fixme, for now, retrieval should include HTTP headers and perform appropriate HTTP cache control and check for potential updates.

  • Added ConjunctiveGraph#add_quad. Adds a quad from the intended subject, predicate, object, and context.

     g = Graph.new
     cg = ConjunctiveGraph.new
     cg.add_quad(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new, g)
     => results in the triple being added to g


  • Remove dependency on whatlanguage.

  • Added support for Processor Graphs.

  • Change Graph#seq to specifically look for subject type of rdf:Seq, rdf:Bag or rdf:Alt to trigger rdf:_n processing.

  • Update RDFa processing to WD-rdfa-core-20100803 semantics

    • Added Processor Graph and required output

    • Reverse order of processing profiles

    • Don't process element if any profile fails

    • XMLLiterals must be explicitly specified as @datatype

    • TERMorCURIEorAbsURI requires an absolute URI, not document relative

    • Move @profile parsing before @vocabulary.

    • Extract a new default vocabulary from @profile.*


  • Add back support for RDFa 1.0 as well as RDFa 1.1. Parser checks @version to determine which

  • Remove specs for html4 and html5 until sorted out.

  • Don't allow _ as a prefix name.

  • Don't emit non-URI predicate values

  • Use sqlite3-ruby version 1.2.5, as 1.3.1 breaks multiple argument execs.


  • Remove trailing ' in #encoding for treetop grammer, which caused problems installing rdoc in ruby 1.9.

  • Fixed corner case in RDFa parser where document doesn't exist, which was raising an error.

  • Add dependency on patron >= 0.4.6.

  • Fixed Triple#inspect to properly display paterns. (closes Issue #2).

  • Pre-process spec manifests into YAML files.

  • Unescape values when creating URIs from N3 parser.

  • URI Normalization isn't required so removed from parsers.


  • RDFa 1.1 parsing supported (based on RDFa Core 1.1 W3C Working Draft 22 April 2010)

  • Fix URIRef#short_name (and consequently #base and #namespace) to not extract a non-hierarchical path as a short_name

  • Namespace no longer uses URIRef, but just acts on strings.

  • Namespace#new does not take an optional fragment argument any longer.

  • Added Namespace#to_s to output “prefix: uri” format

  • Graph#qname first trys generating using bound namespaces, then adds well-known namespaces.

  • URIRef#to_qname and #to_namespace No longer generates an exception. Each take either a Hash or an Array of namespaces and tries them from longest to shortest.

  • Improved Turtle and XML serializers in use of namespaces.

  • Generate pending messages if RDFa tests skipped due to lack of Redland installation.

  • Change dcterms: prefix to dc: (fully compatible with previous /elements/ definitions)


  • Fix bug in XML serializer when type is a BNode.

  • Undo change in 0.5.2 to remove old binding based on equivalent URI to equivalent prefix.

  • Undo change form 0.5.1 to make BNode.new(“”) a named identifier. Required for RDFa test 0088.


  • Remove old binding for a namespace URI creating a new binding


  • Avoid stack-overflow when checking graph size (if ::RdfContext::debug? == true)

  • Refactor serializers to be based on AbstractSerializer

  • Graph

    • Add Graph#serialize taking a serializer or symbol identifing a serialzer and a base URI

    • Add Graph#add_seq to add the list of Resources as to an RDF Container (i.e., rdf:first/rdf:rest)

    • Add Graph#sync_properties to write properties cached from Graph#properties back to the store.

  • Add TurtleSerializer, along with AbstractSerializer, RecusiveSerializer, NTSerializer and XMLSerializer

  • Update XmlSerializer, and Graph#to_xml to do more intelligent generation of RDF/XML

    • Control depth of recursive node generation with :max_depth

    • Serialize rdf:type and untyped literals as attributes with :attributes => :untyped

    • Serialize typed literals as attributes with :attributes => :typed

  • Added Literal#typed? and Literal#untyped? in addition to Literal#xmlliteral?

  • BNode.new(“”) is not a named identifier, it's equivalent to an anonymous BNode


  • Support for Ruby 1.9, 1.8.7 and 1.8.6.

    • Unicode escapes and URIRefs only work properly in Ruby 1.9

    • Replaced some (&:meth) spells with {|c| c.meth} for Ruby 1.8.6 compatibility

  • Fully compliant N3 parser (n3-rdf level) with extnensive tests, including SWAP, CWM and Turtle test suites.

    • Supports paths, keywords, all semantic expressions.

    • No support yet for Formulae, variables, rules or automatic reification

    • Allow Triple#subject to be like an object, allowing literals and graphs

    • Allow Triple#predicate to be a BNode as well as a URIRef

  • Graph changes

    • Graph#properties(subject) returns properties of a subject expressed as a hash to arrays of objects.

    • Graph#seq(subject) returns ordered rdf:_n objects if subject is a rdf:Seq., or list of rdf:first/rdf:rest

    • Graph#qname(uri) as alternative to uri.qname, has namespaces available.

    • Graph#type_of(subject) array of RDF_TYPE objects.

    • Graph#allow_n3 (getter/setter and option) controls if extra N3 semantics for graphs are allowed. Otherwise, calls Triple#validate_rdf to raise exception

    • Real graph comparisons, including permutation search of triples containing BNodes (obviously, may be expensive)

    • Add QuotedGraph and AggregateGraph

  • Literal changes

    • Literal#== as alias to eql? Needed for sort and uniq.

    • Normalize valid typed literals

    • Added Literal#valid? to perform some content validations.

  • URIRef/Namespace changes

    • Fix URI generation, performing normalizations for normal URI refs, and not for Namespace URIs.

    • Fixed bug in URIRef#namespace & to_qname when namespace does not have a trailing / or #

    • URIRef#short_name may return a different value after a namespace is assigned.

  • Reduce dependency on Redland when running tests


  • Add Duration and support in Literal

  • Add datatype support for xs:boolean, xs:double, xs:duration and xs:time.

  • Literal::Encoding#encode_contents properly encodes different datatypes to string.

  • Literal#to_native converts literal value to appropriate native object based on datatype.


  • Graph identifiers only URIRef or BNode; Literal not supported by SQL Store.

  • Namespace#+ updated to not use URIRef logic for creating URIs, as this removes part of the URI in the case that the URI does not end with / or #.

  • Incorporated pdlug's changes:

    • Support using trailing underscores to work around generating URI's with Namespace that use methods that are on core ruby classes or reserved words (like Nokogiri Builder does). For example dc.type_ to generate the dc:type URI.

    • Tests for Date/DateTime literals, added support for detecting them and generating the right literals in Triple.


  • Added Graph#uri_mapping and AbstractStore#uri_mapping for uri => Namespace mappings in graph

  • Fix BNode creation from existing identifier (named or un-named)

  • Graph#destroy removes graph context from store without configuration, and removes store storage with configuration

  • Added Triple#to_n3 and URIRef#to_n3

  • Added AbstractStore#uri_binding to give uri => namespace mapping from all store classes.


  • Order includes to remove platform dependencies on load requirements.

  • Fix XML Comparison matcher

  • Add –store option to bin/rdf_context. Let Parser#detect_format intuit file type.

  • Add Graph#contents as alias to store

  • Add ConjunctiveGraph#triples to return all triples from store, not just default context

  • Add Graph#nsbinding to retreive Store#nsbinding

  • Fix numerous SQLite3Store and AbstractSQLStore bugs. Add round-trip tests to Graph spec.


  • Namespace usage cleanup

  • When serializing graph to RDF/XML, create namespaces as necessary.

  • rename bin/reddy to bin/rdf_context


  • Coverage tests


  • Released as RdfContext gem


  • Added AbstractSqlStore and SQLite3Store

  • Store contexts are always graphs


  • Added MemoryStore, a context-aware store based on Python RDFLib IOMemory

  • Add ConjunctiveGraph, a conjunction of all graphs in a context-aware store

  • Triple(nil, nil, nil) is wildcard, plus variations. No support for regular expressions.

  • BNodes not graph/store specific, generated using milli-second time and sequence.

  • Graph(:store) may be one of :list_store or :memory_store, which will instanciate appropriate store

  • Graph#contains? iterates over triples if object is a literal to allow for fuzzy matching.

  • Change gem name to “gkellogg-reddy” to allow publishing to Github.

  • ConjunctiveGraph tests.


  • API and RDoc cleanup

  • Removed Graph#each_with_subject, Graph#get_resource, Graph#has_bnode_identifier?

  • Added Graph#predicates and Graph#objects

  • Changed Graph#triples to take optional subject predicate and object to match statements.

  • Renamed Graph#bind o Graph#merge!

  • Graph#triples yields triples if a block is provided

  • Changed Namespace#short to Namespace#prefix

  • Change BNode to require a graph. Most uses go from graph.bnode, rather than BNode.new. This is required because bnodes are only equivalent within the same graph

  • Added identifier to Graph, defaults to BNode. This from Python RDFlib based on TriX recommendation, see: www.w3.org/2004/03/trix/

  • Only add triple to graph if it does not already exist in graph.

  • Added Graph#contains? to look for existance of triple.

  • Added Graph#eql? (and ===) to do simple check for graph equality. This version ignores BNodes (like Python RDFlib)

  • Prepend “named” to named BNodes to ensure no overlap between generated and named BNodes.

  • Added Graph#clone and Triple#clone

  • Merge Graphs, replacing BNodes with new values from new graph.

  • Remove duplicate triples when adding or merging graphs

  • Added Abstract Store and List Store.

  • Delegate Graph methods to store. Currently only supports :list.

  • Reduce dependence on HTML namespace in RDFa parser.

  • Add RDFa tests for HTML4 and HTML5


  • Update RDFa tests to use RdfContext RDF/XML parser.

  • All negative RDF/XML parser tests pass.

  • Add RdfContext::Parser, super-class of other parsers and move common code.

  • Change N3Parser to use same new/parse logic as other parsers.

  • Remove debug array by default, and add in calls to tests.


  • Update N3 treetop parser to version 1.4.0 (no digits in parser rule names).

  • Fix N3 literal handling (still has bug with escaped double quote).

  • Handle N3 <#> prefix.

  • Don't output lang for typed literals in n3 format

  • Rewrite of RDF/XML parser based on spec; passes existing tests.

  • Update rdfcore tests based on rdfa test harness.

  • Move Literal string escape/unescape to string_hacks.

  • Fix literal n3_encoded parsing.

  • All positive RDF/XML parser tests pass.


  • Added rdfa-test-suite as sub-module and refactored RDFa tests to use them.

  • Fix but in white-space separated attributes

  • Downcase XHTML reserved words


  • Move most test-case logic into rdfa_helper.

  • Separate approved and unreviewed tests.

  • Allow for soft failure of unreviewed tests by catching Spec::Expectations::ExpectationNotMetError.

  • Integrate rdfa-test-suite and create test cases in the same manner. (Causing SPARQL problems with XMLLiterals)

0.1.1 / 2009-11-01

  • Changes from rdfa_parser project.

0.1.0 / 2008-12-02

  • First public alpha. RDF/XML parsing works but is not fully spec or test compliant. There is much work to be done.