RDF-Query
view release on metacpan or search on metacpan
README.html view on Meta::CPAN
<li>Added labels and common patterns to service description template.</li>
<li>Added more logic and debugging to aggregating triples into BGPs for SERVICE calls.</li>
<li>Added optional restriction argument to ::Algebra::subpatterns_of_type.</li>
<li>Added RDF::Query::Model::RDFTrine::BasicGraphPattner::graph() method.</li>
<li>Added RDF::Query::Node::compare for sorting (either Trine or Query) node objects.</li>
<li>Added RDF::Query::plan_class so that ::Federate can overload calls to ::Plan methods.</li>
<li>Added support for computed statement generators (like ARQ's computed property support [e.g. list:member]).</li>
<li>Added trial subsumes() methods to ::Algebra::BasicGraphPattern and ::Algebra::Triple.</li>
<li>Algebra classes now call RDF::Query::algebra_fixup for optimization before falling back on normal fixup code.</li>
<li>Allow equality test and disjunction filters in patterns that can be compiled to SQL.</li>
<li>Fixed ::Algebra::GroupGraphPattern to use join_bnode_streams in cases where the bloom filter wasn't automatically created but instead provided by the user.</li>
<li>Fixed ::Model::RDFTrine::as_string use with Quads.</li>
<li>Fixed argument list for RDF::Query::Algebra::Service::_names_for_node called from bloom function.</li>
<li>Fixed bug so ::Model::RDFTrine::meta may be called as a class method.</li>
<li>Fixed RDF::Query::algebra_fixup to ignore service capabilities that would result in empty BGPs.</li>
<li>Modified code for aggregate queries (though they are currently broken).</li>
<li>Moved construction of bloom-filter-optimized patterns to RDF::Query::Algebra::GroupGraphPattern::_bloom_optimized_pattern().</li>
<li>Moved initial federated service code into RDF::Query::fixup and ::algebra_fixup.</li>
<li>Moved QEP generation code to RDF::Query::query_plan so it can be overloaded.</li>
<li>Moved RDF::Query::add_service() to RDF::Query::Federate::add_service().</li>
<li>Parsing service descriptions now more forgiving in the face of missing values.</li>
<li>RDF::Query::Algebra::Triple::new now adds RDF::Query::Node::Variable objects for undefined nodes.</li>
<li>RDF::Query::fixup() now only returns a construct pattern (the query pattern now being returned by RDF::Query::query_plan()).</li>
<li>RDF::Query::Model::get_computed_statements now doesn't die if there's no query object present.</li>
<li>RDF::Query::new() now accepts two-argument form with just $query and \%options.</li>
<li>RDF::Query::Node::Literal objects now can compare as equal when they're of numeric type but the lexical values aren't numeric.</li>
<li>RDF::Query::prune_plans now takes ExecutionContext as an argument, and in turn calls ::Plan::prune_plans.</li>
<li>RDF::Query::query_plan() now returns all possible query plans when called in list context.</li>
<li>RDF::Query::query_plans now calls RDF::Query::prune_plans to select from the list of possible QEPs.</li>
<li>RDF::Trine::Node::Resource now escapes unicode in base URIs (now just relative URI part) before calling URI->new_abs.</li>
<li>Removed now unused RDF::Query::construct() and RDF::Query::fixup().</li>
<li>Removed old execute() code from ::Algebra classes.</li>
<li>Removed unused redland fallback code from RDF::Query::Model::RDFTrine.</li>
<li>Split RDF::Query::execute into prepare() and execute_plan() methods.</li>
<li>Converted RDF::Query::execute() to use ::Plan classes.</li>
<li>Updated ::Compiler::SQL to recognize ::Algebra::Project objects.</li>
<li>Updates to RDF::Query::execute() to support explicit pre-binding lists (instead of just scalar values).</li>
<li>::Algebra::GroupGraphPattern now throws an exception if passed unblessed values as patterns.</li>
<li>::Federate now labels nodes in the QEP tree with applicable services.</li>
<li>::Model::debug() now shows data from the named graph model.</li>
<li>::Model::RDFTrine::add_uri now decodes resulting content as utf8 before proceeding.</li>
<li>::Model::RDFTrine::meta() probes the underlying store object to declare the proper 'store' class.</li>
<li>::Service::_names_for_node updated to use ::Plan classes for query execution (fixes use of the k:bloom filter).</li>
</ul>
</li>
<li>Classes
<ul>
<li>Added algebra classes for solution modifiers and query forms (construct, project).</li>
<li>Added code and tests for Query Execution Plan classes RDF::Query::Plan::*.</li>
<li>Added RDF::Query::Federate::Plan for federation-specific code.</li>
<li>Added RDF::Query::BGPOptimizer implementing a basic optimizer for basic selectivity-based join ordering.</li>
<li>Added RDF::Query::CostModel classes for computing/estimating the cost of executing a specific pattern.</li>
<li>Added RDF::Query::ExecutionContext to hold all necessary information for query execution (query, model, bound variables).</li>
<li>Added RDF::Query::ServiceDescription for parsing DARQ-style service descriptions.</li>
<li>Added RDF::Query::VariableBindings to wrap existing HASH-based variable binding structure.</li>
<li>Added stub ::Plan::ThresholdUnion class for running optimistic queries.</li>
<li>Added workaround to RDFCore bridge so that RDF::Core doesn't die if getStmts is called with a Literal in the subj or pred position.</li>
<li>Added a RequestedInterruptError exception class.</li>
<li>Added code for RDF-Trine specific BGP query plans.</li>
<li>Changed debugging in RDF::Query modules to use Log::Log4perl.</li>
<li>Made SERVICE work again by rolling back streaming socket work (now commented out).</li>
<li>Moved federation code to new RDF::Query::Federate class.</li>
<li>Plan generation now includes any plans the model object can provide.</li>
<li>RDF::Query now always uses a cost model (defaulting to ::Naive).</li>
<li>RDF::Query::Federate now defaults to SPARQLP parser.</li>
<li>Removed logging/warn calls from forked process in ::Service (was screwing up the parent-child IO pipe).</li>
<li>Removed use of "DISTINCT" queries in SERVICE calls (for pipelining).</li>
<li>ServiceDescription now only runs sofilter if ?subject/?object are bound.</li>
<li>Started work on a more holistic approach to supporting service descriptions (instead of using add_computed_statement_generator()).</li>
<li>Updated ::Algebra::Service to fork and use LWP's callback mechanism for concurrency.</li>
<li>::Algebra::Service now defers loading of content until the first result is requested.</li>
<li>::Model::RDFTrine now only produces BGP plans if there is no get_computed_statement_generators in the query object.</li>
<li>Code now materializes all node identities before creating the Bloom filter (so capacity arg is accurate).</li>
<li>Bloom filter use is now only attempted on SERVICE blocks that don't immediately contain a FILTER.</li>
<li>Re-ordered conditionals so that the service-bloom-filter try block is called less frequently.</li>
<li>SERVICE execution now uses non-identity reasoning Bloom filter function.</li>
</ul>
</li>
<li>Syntax and Serialization
<ul>
<li>Added from_sse method to ::Statement, ::Node.</li>
<li>Added initial code for ARQ-style property paths.</li>
<li>Added initial parser code for SPARQL Update (SPARUL) extension.</li>
<li>Added new 'UNSAID' syntax for SPARQLP, implementing negation.</li>
<li>Added parse_expr method to RDF::Query::Parser::SPARQL.</li>
<li>Added RDF::Query::Algebra::Quad::bf() method.</li>
<li>Fixed RDQL parser to qualify URIs before returning from parse().</li>
<li>Fixed SSE serialization of Aggregates using '*' instead of a variable as the column.</li>
<li>Removed (now unused) parser generator script.</li>
<li>SPARQL parser now always adds a ::Algebra::Project (even when the query selects '*').</li>
<li>SPARQL parser now creates ::Algebra::Construct objects for CONSTRUCT queries.</li>
<li>SPARQL parser now puts ::Distinct above ::Sort algebras in the parse tree.</li>
<li>SPARQLP parser now creates ::Project object as parent of any ::Aggregate.</li>
<li>Turtle parser now doesn't modify the lexical value of numeric typed literals.</li>
<li>Turtle parser now makes universal IDs for all blank node (even those with given IDs like _:xyz).</li>
<li>Updated ::Algebra SSE serializations to conform to Jena's serialization syntax.</li>
<li>Updated ::Algebra::Limit::sse to emit 'slice' serialization if its child is a ::Algebra::Offset.</li>
<li>Updated as_sparql() methods to support the new ::Construct classes.</li>
<li>Updated RDF::Query::sse to emit base and prefix serializations.</li>
<li>Updated SPARQL parser and serializer tests to always assume an ::Algebra::Project on SELECT queries.</li>
<li>Updated SSE serialization of ::Join::PushDownNestedLoop to use 'bind-join' terminology.</li>
<li>Updates to SPARQLP parser to support FeDeRate BINDINGS keyword.</li>
<li>::Algebra::Distinct now does proper serialization in as_sparql().</li>
<li>::GroupGraphPattern::sse() updated to output the '(join ...)' only if the GGP has more than one pattern.</li>
</ul>
</li>
<li>Optimizer
<ul>
<li>Added benchmark/plans.pl to show the runtimes of the available QEPs for a query.</li>
<li>Added benchmark/costmodel.pl for testing the RDF::Query::CostModel.</li>
<li>Added logging for execution time (time to construct iterator) of Triples, BGPs, GGPs and sorting.</li>
<li>Added logging of cardinalities in ::Algebra::Triple, ::Algebra::BasicGraphPattern and ::Algebra::Service.</li>
<li>Added logging to plan classes ::NestedLoop, ::Service, ::Triple.</li>
<li>Naive plan is used in ::Federate::Plan::generate_plans only if no optimistic plans are available.</li>
<li>Updated cost model code to work with ::Plan classes instead of ::Algebra classes.</li>
<li>Logging code now uses sse serialization as log keys (because of expressions that can't be serialized as SPARQL).</li>
<li>Logging object can now be passed to RDF::Query constructor.</li>
<li>Updated logging of algebra execution to use SPARQL serialization as logging key.</li>
</ul>
</li>
<li>Miscellaneous
( run in 2.986 seconds using v1.01-cache-2.11-cpan-df04353d9ac )