RDF-Trine-1.007/000755 000765 000024 00000000000 12171744446 013314 5ustar00gregstaff000000 000000 RDF-Trine-1.007/bin/000755 000765 000024 00000000000 12171744443 014061 5ustar00gregstaff000000 000000 RDF-Trine-1.007/Changes.ttl000644 000765 000024 00000256007 12171744353 015420 0ustar00gregstaff000000 000000 # -*-n3-*- @prefix dc: . @prefix dcterms: . @prefix doap: . @prefix asc: . <> dc:description "Changes for RDF::Trine" ; dcterms:references . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.007" ; doap:created "2012-07-18" ; ]; asc:changes [ asc:addition "Added initial implementation of TriG serializer." ; asc:addition "Added implementation of the RDF Patch exporter and serializer, and ability to serialize model changes in RDF Patch format." ; asc:addition "Added ability to configure the LWP::UserAgent used through the RDF::Trine framework." ; asc:addition "Added Test::Compile developer test xt/00_compile.t." ; asc:update "Update Turtle lexer to look for whitespace (instead of a word break) after 'a' when looking for the A token." ; asc:update "Work around a XML::Namespace bug in RDF::Trine::Namespace->uri." ; asc:update "Fixed xt/pod-coverage.t to avoid checking modules which fail to load." ; asc:update "Updated Turtle and TriG parsers and test suites to track W3C standardization work." ; asc:update "Update bin/turtle_parse.pl to output N-Quads when the input format contains quads." ; asc:update "Update RDF::Trine::Parser->parse_url_into_model to accept a base argument." ; asc:update "Allow lowercase hex codepoint values in N-Triples escapes in RDF::Trine::Parser::NTriples." ; asc:update "Use the :encoding(UTF-8) IO layer where previously just :utf8 was used." ; asc:update "s/exists/defined/ in RDF::Trine::Parser->parse_url_into_model." ; asc:update "Update the characters that may be used in blank node identifiers in RDF::Trine::Node::Blank->new." ; asc:update "Added POD for RDF::Trine::Statement::Quad->graph (alias for ->context)." ; asc:update "Updated RDF::Trine::Store::Memory to generate SHA digests (for ETag use) based on bytes, not unicode strings." ; asc:update "Add RDF::Trine::Statement::Quad->graph as an alias for RDF::Trine::Statement::Quad->context." ; asc:update "Updated t/serializer-trig.t to load RDF::Trine before any sub-modules." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.006" ; doap:created "2012-07-01" ; ]; asc:changes [ asc:addition "Split RDF::Trine::Iterator->from_string into from_string and from_bytes." ; asc:update "Punycode URIs are now left as-is (without decoding) in RDF::Trine::Node::Resource->new." ; asc:update "Fix handling of IRIs with codepoints > 127 in RDF::Trine::Node::Resource (GitHub issue #85)." ; asc:update "Remove empty-string default in SQL schema of RDF::Trine::Store::DBI::mysql and update code to compensate." ; asc:update "Remove bad calls to encode_utf8 in sse and as_ntriples methods of RDF::Trine::Node::Resource." ; asc:update "Normalize IRI values before serialization in RDF::Trine::Node::Resource->as_ntriples and RDF::Trine::Node::Resource->compare." ; asc:update "Update RDF::Trine::Serializer::NTriples::Canonical to use $node->as_ntriples instead of $node->sse." ; asc:update "Add documentation noting that punycode will be decoded as a part of N-Triples serialization." ; asc:update "Change use of utf8::all to utf8 in t/node.t." ; asc:update "Mark TryCatch as a build_requires instead of a requires module in Makefile.PL." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.005" ; doap:created "2012-05-27" ; ]; asc:changes [ asc:addition "Updated Turtle parser to support the Turtle 2013 draft syntax." ; asc:update "Throw exception in RDF::Trine::Node::Resource->new when IRI contains bad characters." ; asc:update "Fix RDF::Trine::Parser::RDFXML to UTF-8 encode strings before calling into the SAX parser (related to github pull request #82)." ; asc:update "Fixed typo in exception throwing in RDF::Trine::Parser::TriG." ; asc:update "Fixed mistaken use of 'otherwise' exception handler in turtle_tokenize.pl." ; asc:update "Improved error handling in RDF::Trine::Parser->parse_url_into_model." ; asc:update "Implemented streaming version of RDF::Trine::Parser::RDFXML->parse_file using parse_file from XML::SAX." ; asc:update "Removed use of given/when statements to make perl 5.18 happy." ; asc:update "Silence tracing code in RDF::Trine::Store::Hexastore." ; asc:update "Added TryCatch to list of required modules." ; asc:update "Changed key names and layout of nodemap data in Redis store." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.004" ; doap:created "2012-03-02" ; ]; asc:changes [ asc:addition "Added get_graphs as an alias for get_contexts in RDF::Trine::Model and RDF:Trine::Model::Dataset." ; asc:addition "Added turtle command line tools turtle_parse.pl, turtle_benchmark.pl, and turtle_tokenize.pl." ; asc:update "Changed RT:spog:* keys to be a hash with node ID data for each quad position in Redis store." ; asc:update "Treat data passed into parsers as characters (github pull request #82 from Tony Cook)." ; asc:update "Improve the error message when trying to parse an empty RDF/XML string (Kjetil Kjernsmo)." ; asc:update "Test to see if DBD::Pg is installed in test suite (github pull request #78 from Kjetil Kjernsmo)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.003" ; doap:created "2012-12-22" ; ]; asc:changes [ asc:addition "Added prefix_for and abbreviate methods to RDF::Trine::NamespaceMap (patch from Dorian Taylor)" ; asc:update "Fixes to code that depended on hash key ordering." ; asc:update "Require Scalar::Util 1.24." ; asc:update "Fixed test of error conditions in RDF::Trine::Parser->parse_url_into_model." ; asc:update "Fixed bug in RDF::Trine::Parser::RDFXML that caused fatal errors on malformed input instead of throwing RDF::Trine::Error exceptions." ; asc:update "Re-added RDF::Trine::Parser::Turtle->parse_node method." ; asc:update "Fixed RDF::Trine::Parser::Turtle::Lexer->check_for_bom to handle zero-length input." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.002" ; doap:created "2012-10-20" ; ]; asc:changes [ asc:update "Require Scalar::Util version 1.23." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.001" ; doap:created "2012-10-05" ; ]; asc:changes [ asc:update "Replaced old Turtle and TriG parsers with new streaming implementations." ; asc:update "Added RDF::Trine::Node::Literal->canonicalize method." ; asc:update "Updated RDF::Trine::Parser::Redland to construct a new parser object on each parse (avoiding a bug in redland)." ; asc:update "Applied partial patch to 'fix interaction with HTML::Data::Parser' (from Dorian Taylor; commit 9b713b23b6)." ; asc:update "Added Moose and MooseX::ArrayRef to prerequisites list." ; asc:update "Updated code style to work with Perl::Critic core policies." ; asc:update "Added POD to RDF::Trine and RDF::Trine::Store::DBI (based on patch from Evan Carew)." ; asc:update "Fixed bareword bug in RDF::Trine::Parser when UUID::Tiny is not available." ; asc:update "Silenced undefined warnings in RDF::Trine::Parser::Turtle::Lexer." ; asc:update "Updated required version of perl to 5.10." ; asc:update "Silenced warning of cartesian joins in RDF::Trine::Store::Hexastore." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "1.000" ; doap:created "2012-06-29" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Model->add_iterator method." ; asc:update "Fixed etag bug in RDF::Trine::Store::Memory." ; asc:update "Document the extends option to negotiate in the serializer (from KjetilK)." ; asc:update "Document RDFTRINE_NO_REDLAND (from KjetilK)." ; asc:update "Made Literal and Resource node constructors throw exception when passed undef lexical value." ; asc:update "Removed RDF::Trine methods count, add_extra_result_data, extra_result_data." ; asc:update "Removed support for extra data serialized in SPARQL/XML result format link tags." ; asc:update "Rolled back attempted optimization of bulk ops calls (which broke the code)." ; asc:update "Fixed parsing of backslash escapes in Turtle quoted literals (from Toby Inkster via github pull request #63)." ; asc:update "Fixed miscellaneous typos (from Evan Carew)." ; asc:update "Updated bug reporting details in BUGS POD section." ; asc:update "Updated documentation in several classes." ; asc:update "Removed redundant documentation in RDF::Trine::Parser." ; asc:update "Added Redland test for UTF8 (from Kjetil Kjernsmo)." ; asc:update "Added two tests for concat graph iterators (from Kjetil Kjernsmo)." ; asc:update "Fix usage of materialized iterators in t/iterator-graph.t (from Kjetil Kjernsmo)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.140" ; doap:created "2012-05-08" ; ]; asc:changes [ asc:addition "Added optional content_cb callback argument to RDF::Trine::Parser->parse_url_into_model." ; asc:update "Removed default get_pattern implementation in RDF::Trine::Store." ; asc:update "Added missing import of looks_like_number function in RDF::Trine::Node::Literal." ; asc:update "Added RDF::Trine::Pattern->sort_for_join_variables method to prevent unnecessary cartesian joins." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.139" ; doap:created "2012-04-11" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Serializer::NQuads->statement_as_string method." ; asc:addition "Add pg tests (Kjetil Kjernsmo)." ; asc:addition "Added tests for RDF::Trine::Iterator->peek." ; asc:addition "Adding some get_pattern tests to the Store tests (Kjetil Kjernsmo)." ; asc:update "Made server a required configuration key in RDF::Trine::Store::Redis." ; asc:update "Fixed interaction of peek() and finished() in RDF::Trine::Iterator." ; asc:update "Fixed use of iterator finished method in RDF::Trine::Iterator::Bindings->as_json." ; asc:update "Fixed use of iterator finished method in RDF::Trine::Store::Hexastore->get_pattern." ; asc:update "Fixed bug when RDF::Trine::Iterator->finished is called before an (empty) iterator is used." ; asc:update "Fixed fallback parsing bug in RDF::Trine::Parser->parse_url_into_model." ; asc:update "Fixed PostgreSQL capitalization bug (patch from https://rt.cpan.org/Ticket/Display.html?id=71890 applied by Kjetil Kjernsmo)." ; asc:update "Added 'scoped_namespaces' constructor argument to RDF::Trine::Serializer::RDFXML to serialize only necessary namespace declarations. (github issue 33)." ; asc:update "Initialize Log4perl only if it isn't initialized already (pull request 57 from kba)." ; asc:update "Fixed expected result count in Test::RDF::Trine::Store->get_pattern_tests." ; asc:update "Simplified code in t/store-hexastore-pattern.t." ; asc:update "Replaced references to RDFQUERY_NO_REDLAND environment variable with proper RDFTRINE_NO_REDLAND." ; asc:update "Allow suppressing RDF::Redland use if the RDFQUERY_NO_REDLAND environment variable is set." ; asc:update "Removed erroneous copies of RDF::Trine::Store::DBI::Pg->init method." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.138" ; doap:created "2012-01-25" ; ]; asc:changes [ asc:addition "Make Hexastore support etag." ; asc:update "Fixed error-handling syntax bug in RDF::Trine::Parser->parse_url_into_model." ; asc:update "Fix documentation typos from fschlich@zedat.fu-berlin.de." ; asc:update "Improved performance of Redis store with use of variadic functions." ; asc:update "Croak rather than die in some places and use logdie in one place." ; asc:update "Added store tests for literals including utf-8 handling and languages." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.137" ; doap:created "2011-12-20" ; ]; asc:changes [ asc:addition "Implement RDF::Trine::Store::Hexastore->nuke (KjetilK)." ; asc:addition "Added initial code for a Redis-based store." ; asc:addition "Added serialize_node method to RDF::Trine::Serializer::NTriples and RDF::Trine::Serializer::Turtle." ; asc:addition "Added parse_node method to RDF::Trine::Parser::NTriples." ; asc:update "Trying to instantiate a resource node with the Nil IRI results in the Nil node object." ; asc:update "Fixed unicode escaping issues in RDF::Trine::Serializer::Turtle (bugreport from nichtich <4EB7B9BE.8000205@gbv.de>)." ; asc:update "Fixed RDF::Trine::Parser::Turtle to properly unescape percent-encoded URIs." ; asc:update "Fixed RDF::Trine::Statement->from_redland to properly unescape percent-encoded URIs." ; asc:update "Only set parser metadata if RDF::RDFa::Parser is available (github issue 32 from nichtich)." ; asc:update "Added PostgreSQL-specific init method to handle case sensitivity of table names (RT#71890 from John Nicholas Whitley)." ; asc:update "Create a fallback-implementation of remove_statements in Store.pm (KjetilK)." ; asc:update "Updated RDF::Trine::Graph to use Algorithm::Combinatorics for memory/speed improvements (instead of Math::Combinatorics)." ; asc:update "Support triple-only stores in the test suite (patches from KjetilK)." ; asc:update "Added missing POD to RDF::Trine::Store::DBI::Pg and RDF::Trine::Store::Redis." ; asc:update "Check the Perl version when running Tiny::UUID (KjetilK)." ; asc:update "RDF::Trine::Parser now attempts to use Data::UUID before UUID::Tiny in bnode ID generation (based on test failures)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.136" ; doap:created "2011-10-19" ; ]; asc:changes [ asc:addition "Added text/html media type, and added use of Module::Load::Conditional in RDF::Trine::Parser::RDFa." ; asc:addition "Added RDF::Trine::Parser::Turtle->parse_node method." ; asc:addition "Made RDF::Trine::Serializer::NTriples->statement_as_string a public method." ; asc:addition "Initial support for using Dydra as a store." ; asc:addition "Added RDF::Trine::Node::Literal->is_canonical_lexical_form." ; asc:addition "Added TSV serializer." ; asc:addition "RDF::Trine::Parser->parse_url_into_model now fill properly fall back on guesswork when media-type parsing fails." ; asc:addition "Moved as_hashref functionality from RDF::Trine::Model to RDF::Trine::Iterator::Graph." ; asc:addition "Added simple store tests for bulk_ops in Test::RDF::Trine::Store." ; asc:update "Fixed escaping of URIs in rdf:about attributes (patch from SADI Framework)." ; asc:update "Allow empty namespace prefix in RDF::Trine::NamespaceMap (patch from Jakob Voss)." ; asc:update "Added option to sleep after each store update in Test::RDF::Trine::Store." ; asc:update "Return an empty string instead of undef in RDF::Trine::Iterator->format_node_xml." ; asc:update "Fixed RDF::Trine::Store::SPARQL->count_statements handling of variables." ; asc:update "Fixed code in RDF::Trine::Store::SPARQL that was causing a warning when a variable name was redefined." ; asc:update "Added support of SPARQL endpoints with URL parameters like Virtuoso's 'http://example.org:8890/sparql?default-graph-uri=...' (patch from Jakob Voss)." ; asc:update "Fixed turtle serializer to check if numerics are in canonical form." ; asc:update "Fixed mysql schema to quote index names that might contain reserved characters." ; asc:update "Removed RDF::Trine::Iterator::SAXHandler->rate method and dropped dependency on Time::HiRes." ; asc:update "Consolidated bnode prefix handling in parser classes, adding support for UUID::Tiny." ; asc:update "Fix RDF::Trine::Model->get_statements to throw an error when called with arguments that aren't either undef or node objects." ; asc:update "Fixed titlecase of table reference in RDF::Trine::Store::DBI::mysql->init." ; asc:update "Fixed bug in use of UUID::Tiny::UUID_V1 bareword in RDF::Trine::Parser->new_bnode_prefix." ; asc:update "Updated RDF::Trine::Store::DBI to use DBIx::Connector." ; asc:update "Updated RDF::Trine::Store::DBI::mysql->_add_node to return the node hash value." ; asc:update "Stop RDF::Trine::Store::DBI->add_statement from unnecessarily hashing nodes multiple times (patch from tobyink)." ; asc:update "Moved redland store tests to developer xt directory." ; asc:update "Updated t/serializer-turtle.t to be more accepting of stores returning data in varying orders." ; asc:update "Removed 'or die' conditional from store tests." ; asc:update "Changed test endpoint from kasei.us to myrdf.us." ; asc:update "Removed heavy dependency on DBI store in test cases." ; asc:update "Require RDF::Redland 1.0.7.1 in xt/store-redland.t." ; asc:update "Add missing use of RDF::Trine::Statement::Quad." ; asc:update "Conditionally load DBI store, and return Memory store from temporary_store()." ; asc:update "Removed dependency on Unicode::Escape." ; asc:update "Made XML::LibXML an optional dependency (RDF/XML parser will not perform c14n if it is not installed)" ; asc:update "Updated RDF::Trine::Store::Memory to use Digest::SHA instead of Digest::MD5." ; asc:update "Removed depedency on List::MoreUtils." ; asc:update "Added POD for Test::RDF::Trine::Store->update_sleep." ; asc:update "Added POD for RDF::Trine::Serializer::NTriples->statement_as_string." ; asc:update "Removed depedency on Unicode::String and List::MoreUtils." ; asc:update "Removed unnecessary use statements." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.135" ; doap:created "2011-04-30" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Store::DBI->nuke method for removing store data." ; asc:addition "Added RDF::Trine::Model->remove_list method (patch from tobyink)." ; asc:addition "Added RDF::Trine::Iterator->seen_count method." ; asc:addition "Added RDF::Trine::Model->get_sparql delegation method." ; asc:update "Globally changed 'base' to 'base_uri' in Trine code and API." ; asc:update "Changed name of redland rdfa parser to 'librdfa' and removed associated media type and file extensions (due to librdfa bugs)." ; asc:update "Fixed bug in RDF::Trine::Store::DBI::mysql that was causing init() to remove existing data." ; asc:update "Updated RDF::Trine::Parser->parse_url_into_model to be better at guessing media types for file: URIs." ; asc:update "Updated RDF::Trine::Parser::Redland to allow the $base argument to be a URI object." ; asc:update "Updated RDF::Trine::Parser->parse_url_into_model to not catch and hide exceptions thrown from calls to parse_into_model." ; asc:update "Updated bin/srx2csv to handle unbound variables in results." ; asc:update "Added support for 'storeclass' key in RDF::Trine::Store->new_with_config." ; asc:update "Added supports method to RDF::Trine::Model, RDF::Trine::Model::Dataset, and RDF::Trine::Store classes." ; asc:update "RDF::Trine::Store->new_with_string now attempts to load store classes before using them." ; asc:update "Renamed RDF::Trine::Store::SPARQL->_get_iterator to get_sparql." ; asc:update "Added SQL file for creating the mysql backend database." ; asc:update "Remove the meaningless \"All rights reserved\" copyright text." ; asc:update "Style changes to RDF::Trine::Iterator::Bindings->print_xml." ; asc:update "Updated required version of XML::SAX to 0.96." ; asc:update "Updated store tests (KjetilK)." ; asc:update "Removed Digest::SHA1 from list of prereq modules." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.134" ; doap:created "2011-03-29" ; ]; asc:changes [ asc:addition "Added srx2csv and srx2table scripts." ; asc:addition "Added API for stream parsing of srx results to RDF::Trine::Iterator::SAXHandler." ; asc:addition "Added RDF::Trine::Model->get_sequence method for accessing rdf:Seq structures." ; asc:addition "Added 'value' method to RDF::Trine::Node subclasses for accessing the primary scalar value of a node." ; asc:addition "Added RDF::Trine::Graph->error method to explain failures in RDF::Trine::Graph->equal." ; asc:addition "Updated RDF::Trine::Graph to support: subgraph testing, access to injection map, delegation to RDF::Trine::Model (patch from tobyink)." ; asc:update "Deprecated RDF::Trine::Iterator->count." ; asc:update "Fixed bug in RDF::Trine::Iterator::SAXHandler on data with empty results." ; asc:update "Fixed canonicalization bug in RDF::Trine::Node::Literal for xsd:decimals with no decimal point." ; asc:update "Fixed RDF::Trine::Node::Resource->qname handling of unicode IRIs." ; asc:update "Fixed RDF::Trine::Parser::NTriples->parse_file to accept filenames just like the superclass implementation." ; asc:update "Fixed RDF::Trine::Parser->parse_file to open files as utf8." ; asc:update "Fixed RDF::Trine::Parser->parse_url_into_model to pass through 'canonicalize' argument to actual parser method call." ; asc:update "Allow 'canonicalize' argument to RDF::Trine::Iterator->from_json method." ; asc:update "Made diagnostic messages less noisy in t/store-hexastore-storable.t." ; asc:update "Silenced an uninitialized warning in RDF::Trine::Parser::NTriples." ; asc:update "Removed use of XML::SAX in RDF::Trine::Serializer subclasses." ; asc:update "Added turtle parser test for file with BOM." ; asc:update "Updated RDF::Trine::Store::DBI and RDF::Trine::Store::DBI::mysql to use DBI placeholders." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.133" ; doap:created "2011-02-07" ; ]; asc:changes [ asc:addition "Added RDF::Trine::NamespaceMap class." ; asc:addition "Added support to populate RDF::Trine::NamespaceMap objects during RDF parsing." ; asc:addition "Added RDF::Trine::Model get_list and add_list methods for managing rdf:List structures." ; asc:addition "Added support for parsing SPARQL JSON Results format in RDF::Trine::Iterator->from_json." ; asc:addition "RDF::Trine::Parser subclasses now allow parse_file_into_model and parse_file being called as class methods." ; asc:addition "Added 'restrict' and 'extend' options to RDF::Trine::Serializer->negotiate to allow more control over content negotiation." ; asc:addition "Added the ability to restrict the nodes returned from the RDF::Trine::Model->objects method by node type or by literal language/datatype." ; asc:update "Fixed bug in Turtle parser that wouldn't allow a Unicode BOM in the input." ; asc:update "Fixed bug in turtle serialization of blank nodes used in graph cycles (reported by tobyink)." ; asc:update "Fixed bug in RDF::Trine::Serializer::RDFXML that wasn't escaping XML entities in IRIs and bnode labels (github issue 3 from nichtich)." ; asc:update "Updated RDF::Trine::Store::Hexastore to use equal() method instead of op<==> for testing node equality." ; asc:update "Updated t/parser-rdfjson.t to test bnode equality using identifier strings, not with op<==>." ; asc:update "Updated RDF::Trine::Store::SPARQL to allow bulk-update operations." ; asc:update "Added string overloading to RDF::Trine::Node subclasses." ; asc:update "Updated conneg code setting default q-values in RDF::Trine::Serializer." ; asc:update "Updated RDF::Trine::Iterator::Graph->print_xml to set utf8 binmode on the output filehandle." ; asc:update "Changed required version of Module::Load::Conditional to 0.38 (based on version in debian)." ; asc:update "Fixed RDF/XML xmlns serialization bug when used with RDF::Trine::NamespaceMap objects." ; asc:update "Added text/rdf+n3 as a media type for RDF::Trine::Serializer::Turtle." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.132" ; doap:created "2010-12-23" ; ]; asc:changes [ asc:addition "Added conditional loading of Redland parsers and stores when available using Module::Load::Conditional." ; asc:addition "Added auto-initialization of DBI stores during object construction." ; asc:addition "Added RDF::Trine::Store->new method to delegate to existing constructors." ; asc:update "Moved slow turtle parser tests into developer tests directory xt/." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.131" ; doap:created "2010-12-07" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Model->as_graphviz method." ; asc:update "Fixed SPARQL XML Results serialization to omit unbound variables and properly declare literal languages and datatypes." ; asc:update "Copied implementations of is_numeric_type() and numeric_value() from RDF::Query::Node::Literal to RDF::Trine::Node::Literal." ; asc:update "Updated documentation to explicitly discuss inherited methods due to subclassing (RT 63153 comment from Ivan Shmakov)." ; asc:update "Updated POD for RDF::Trine::Iterator subclasses (RT 63153 comment from Ivan Shmakov)." ; asc:update "Fixed RDF::Trine::Parser->guess_parser_by_filename to get RDF/XML parser class from parser_by_media_type() instead of being hardcoded." ; asc:update "Fixed RDF::Trine::Serializer::Turtle::_node_concise_string to allow call as class method." ; asc:update "Added RDF::Trine::Parser::Redland subclasses to allow calling new() with no 'name' argument." ; asc:update "Added file extensions to parser registry for RDF::Trine::Parser::Redland." ; asc:update "Added checks to avoid undefined warnings in RDF::Trine::Serializer::NTriples::Canonical (suggestion from KjetilK)." ; asc:update "Set :utf8 mode on string-backed filehandles in RDF::Trine::Serializer::Turtle." ; asc:update "Attempt at patching utf8 turtle/trig parsing bug submitted by KjetilK." ; asc:update "Updated required version of Test::More to 0.88 (bugreport from @danbri)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.130" ; doap:created "2010-10-18" ; ]; asc:changes [ asc:update "Fixed bug in RDF::Trine::Node::Literal->is_valid_lexical_form check for xsd:double." ; asc:update "Updated RDF::Trine::Iterator::Bindings->as_string to use concise turtle syntax." ; asc:addition "Added RDF::Trine::Parser methods media_type(), media_types(), parser_by_media_type(), and guess_parser_by_filename()." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.129" ; doap:created "2010-10-04" ; ]; asc:changes [ asc:update "Updated Makefile.PL and RDF::Trine to require perl v5.8.3." ; asc:update "Fixed bug in promotion of temporary models from memory-backed to a SQLite-backed store." ; asc:update "Fixed RDF::Trine::Store::DBI->new to bless into backend-specific classes when passed a database handle (bug report from tobyink)." ; asc:update "Updated RDF::Trine::Node::Literal to produce more accurate canonical lexical forms for xsd types." ; asc:addition "Added RDF::Trine::Node::Literal->is_valid_lexical_form method." ; asc:addition "Added support for special union-graph 'tag:gwilliams@cpan.org,2010-01-01:RT:ALL'." ; asc:addition "Added exportable constants for UNION_GRAPH and NIL_GRAPH in RDF::Trine." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.128" ; doap:created "2010-09-28" ; ]; asc:changes [ asc:update "Added .owl as a recognized RDF/XML file extension for the fallback parser guessing code." ; asc:update "Fixed bug in RDF::Trine::Store::SPARQL preventing access to the default graph." ; asc:update "Updated RDF::Trine::Store::DBI->init to (partially) work if called for a new model (but the database has already been initialized)." ; asc:update "Fixed call to RDF::Trine::Parser->parse_into_model in bin/rdf_store_add_file.pl." ; asc:update "Fixed call to RDF::Trine::Parser->parse_url_into_model in RDF::Trine::Store::Memory." ; asc:update "Removed RDF::Redland dependency in bin/rdf_store_add_file.pl." ; asc:update "Updated RDF::Trine::Node::Literal->canonicalize_literal_value coercion of xsd:decimal values." ; asc:update "Added optional flag to RDF::Trine::Node::Literal->new to attempt to canonicalize recognized XSD values." ; asc:update "Updated RDF::Trine::Exporter::CSV to accept a graph iterator (for serializing s,p,o as CSV)." ; asc:update "Updated RDF::Trine::Store::Redland to improve efficiency (based on suggestions from Dorian Taylor)." ; asc:update "Made code updates to improve performance based on profiling." ; asc:update "Updated to use URI 1.52 to allow direct usage of IRIs without unicode workarounds." ; asc:update "Added content-sniffing to fallback parser guessing code for RDF/XML and Turtle." ; asc:update "Lowered required version of redland in RDF::Trine::Parser::Redland to 1.0.7.1." ; asc:addition "Added new_with_config method to allow interactive configuration via rqsh.pl." ; asc:addition "Added introspective _config_meta method to RDF::Trine::Store subclasses to allow interactive configuration." ; asc:addition "Added RDF::Trine::Store->class_by_name class method." ; asc:addition "Added etag method to RDF::Trine::Model and RDF::Trine::Store::Memory to allow for HTTP caching." ; asc:addition "Added RDF::Trine::Store::DBI->clear_restrictions method (suggestion and partial patch from tobyink)." ; asc:addition "Added native redland parser class and tests (patch from Dorian Taylor)." ; asc:addition "Added RDF::Trine::Iterator->each method (requested by tobyink)." ; asc:addition "Added RDF::Trine::Serializer->serializer_names method for listing available serializers." ; asc:addition "Added as_string method to RDF::Trine::Iterator::Boolean and RDF::Trine::Iterator::Graph." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.127" ; doap:created "2010-08-30" ; ]; asc:changes [ asc:update "Removed redundant prerequisite for XML::LibXML::SAX from Makefile.PL." ; asc:update "RDF::Trine::Model->bounded_description now catches and ignores UnimplementedError exceptions." ; asc:update "Added heuristics support for TriG, RDF/JSON, and N-Quads to RDF::Trine::Parser->parse_url_into_model." ; asc:update "Added ability to specify the base URI for serializing RDF/XML and Turtle (patch from KjetilK)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.126" ; doap:created "2010-08-16" ; ]; asc:changes [ asc:addition "Added begin_bulk_ops() and end_bulk_ops() hint methods to RDF::Trine::Model." ; asc:addition "Updated RDF::Trine::Parser to call begin_bulk_ops() and end_bulk_ops() on model object." ; asc:addition "Updated DBI backend to use transactions when bulk_ops hints are used." ; asc:addition "Added '==' and 'eq' overloading to RDF::Trine::Graph class." ; asc:update "Fixed N-Triples serialization escaping bug for strings whose only escapable character is '\\'." ; asc:update "Fixed typo in handling of RDF::Trine::Node::Formula extension." ; asc:update "RDF::Trine::Model->new will now return a temporary model when called with no arguments." ; asc:update "Updated get_pattern methods in Model and Store classes to return VariableBindings objects." ; asc:update "Updated DBI backend to allow no-op adding of the nil node." ; asc:update "Updated SPARQL backend to use SPARQL 1.1 Update and Aggregate operations." ; asc:update "Updated Memory and Hexastore backends to support 'graph' key in _new_with_config()." ; asc:update "Improved error messages in N-Triples and N-Quads parsers." ; asc:update "Fixed column naming bug in RDF::Trine::Store::DBI->get_contexts." ; asc:update "Updated RDF::Trine::Model->bounded_description to traverse backwards links across blank nodes." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.125" ; doap:created "2010-07-29" ; ]; asc:changes [ asc:addition "Added RDF::Trine::VariableBindings class (ported from RDF::Query)." ; asc:addition "Added media types and URIs for N-Quads parser and serializer." ; asc:addition "Added RDF::Trine::Statement->rdf_compatible method (patch from tobyink)." ; asc:addition "Added documentation for new_with_object and hashref config." ; asc:addition "Added %format_uris registry for parsers and serializers." ; asc:addition "Added RDF::Trine::Model::as_string method." ; asc:addition "Added character encoding declaration to RDF::Trine::Iterator::Bindings->print_xml." ; asc:addition "Added character encoding declaration to RDF::Trine::Iterator::Boolean->print_xml." ; asc:update "Fixed hash collision bug in RDF::Trine::Store::DBI handling of literals with values '' and '0'." ; asc:update "Iterators constructed from SPARQL XML Results format now return variable bindings objects." ; asc:update "Turtle serialization to strings now only declares prefixes that are used in the data." ; asc:update "Changed RDF::Trine::Model node methods (subjects, predicates, objects) to use quad semantics and accept a graph parameter." ; asc:update "Improved efficiency of counting quad patterns in RDF::Trine::Store::DBI." ; asc:update "Fixed bug in N-Triples serializer (was serializing quads)." ; asc:update "Require XML::LibXML 1.70." ; asc:update "Removed unused variable in RDF::Trine::Parser::RDFXML." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.124" ; doap:created "2010-06-21" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Iterator->count method." ; asc:addition "Added ability to access the number of rows returned from RDF::Trine::Iterator::Bindings::as_string." ; asc:addition "Added RDF::Trine::Model::Dataset for constructing views over a model, and RDF::Trine::Model->dataset_model constructor method." ; asc:addition "Added missing use of Encode to RDF::Trine::Store::Redland." ; asc:addition "Added bin/rdf_transcode.pl for (streaming) conversion between RDF serialization formats." ; asc:addition "Added ability for RDF::Trine::Store::Memory to load RDF files by URI in _new_with_string." ; asc:update "Updated quality value heuristics in RDF::Trine::Serializer::negotiate to prefer turtle if no accept headers are supplied." ; asc:update "Fixed RDF::Trine::Iterator::Bindings::as_string to respect $max_result_size argument." ; asc:update "RDF::Trine::Iterator::Bindings::as_string now returns unescaped strings." ; asc:update "Updated RDF::Trine::Parser::parse_url_into_model to fall back on file extension heuristics if the media-type based parse fails." ; asc:update "Updated RDF::Trine::Parser::RDFJSON to throw an error if input isn't valid JSON." ; asc:update "Updated RDF::Trine::Model to throw an error if not passed a store object." ; asc:update "Fixed bug in handling of quads in RDF::Trine::Model::get_pattern and RDF::Trine::Store::get_pattern." ; asc:update "Updated RDF::Trine::Store::DBI and RDF::Trine::Store::Memory to not return the default (nil) context from get_contexts." ; asc:update "Fixed bug in RDF::Trine::Store::Memory::_get_statements_quad that would infinite loop after removing statements." ; asc:update "RDF::Trine::Store doesn't load RDF::Redland (now only checks if it is already loaded)." ; asc:update "Fixed bug in RDF::Trine::Store subclasses registering their class names in %STORE_CLASSES." ; asc:update "Made $RDF::Trine::Store::Redland::NIL_TAG globally accessible." ; asc:update "Updated POD tests to not use taint mode (and synced between R::T and R::Q)." ; asc:update "Changed test data in t/iterator-thaw.t." ; asc:update "Removed RDF::Core as a prerequisite in META.yml." ; asc:update "Added default implementation of RDF::Trine::Serializer::serialize_iterator_to_file." ; asc:update "RDF::Trine::Serializer::negotiate now slightly prefers turtle." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.123" ; doap:created "2010-05-13" ; ]; asc:changes [ asc:addition "Added turtle utf8 decoding for Turtle parser." ; asc:addition "Added RDF::Trine::Serializer::media_types method." ; asc:addition "Added RDF::Trine::Store::new_with_object method." ; asc:update "Fixed unicode encoding bug in RDF::Trine::Store::DBI." ; asc:update "RDF::Trine::Serializer::NTriples::Canonical.pm now inherits from RDF::Trine::Serializer::NTriples." ; asc:update "Cleaned up VERSION declarations." ; asc:update "Updated RDF::Trine::Parser::parse_url_into_model to fall back on file extension heuristics if the media-type based parse fails." ; asc:update "Updated RDF::Trine::Parser::RDFJSON to throw an error if input isn't valid JSON." ; asc:update "Added character decoding to RDF::Trine::Parser->parse_url_into_model." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.122" ; doap:created "2010-05-05" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Model::bounded_description method." ; asc:addition "Added initial implementation of a Redland-based storage class." ; asc:update "Fixed SPARQL store tests to align with recent coverage efforts." ; asc:update "Code cleanup and updates to improve test coverage." ; asc:update "Rearranged POD in RDF::Trine::Parser." ; asc:update "Fixed type in RDF::Trine::Node::Literal::_compare." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.121" ; doap:created "2010-04-29" ; ]; asc:changes [ asc:addition "Added node-centric methods to RDF::Trine::Model: subjects, predicates, objects." ; asc:update "Fixed URI qname code to disallow ':' in local name." ; asc:update "Improved POD for value canonicalization in RDF::Trine::Parser." ; asc:update "Added POD for RDF::Trine::Model::get_contexts." ; asc:update "Added POD details to RDF::Trine::Model::get_statements regarding triple and quad semantics." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.120" ; doap:created "2010-04-20" ; ]; asc:changes [ asc:addition "Added optional value canonicalization on parsing (xsd integer, decimal, and boolean)." ; asc:update "RDF/XML parser now attempts to canonicalize XMLLiterals (doesn't yet canonicalize all XMLLiterals that it shold)." ; asc:update "Added RDF::Trine::Node::Blank::_new constructor that doesn't validate bnode name for N-Triples conformance." ; asc:update "Performance improvements to RDF::Trine::Node::_unicode_escape." ; asc:update "Updated Turtle parser to throw error on undeclared namespace prefixes." ; asc:update "Updated Turtle serializer to produce QName literal datatypes." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.119" ; doap:created "2010-04-15" ; ]; asc:changes [ asc:update "Fixed bug in NTriples parser handling of language literals (reported by tobyink)." ; asc:update "Fixed another bug in turtle serializer that improperly serialized bnode objects 'belonging' to a parent triple (in-edge count of 1)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.118" ; doap:created "2010-03-22" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Parser::TriG." ; asc:addition "Added RDF::Trine::Parser::parse_file_into_model method." ; asc:addition "Added RDF::Trine::Serializer::NQuads." ; asc:addition "Added RDF::Trine::Serializer::negotiate constructor." ; asc:addition "Added RDF::Trine::Serializer::new constructor based on requested serializer name." ; asc:addition "Added RDF::Trine::Exporter::CSV for serializing variable bindings." ; asc:addition "Added Text::CSV and HTTP::Negotiate to RDF::Trine prereq list." ; asc:update "Fixed exception thrown on unrecognized parser name." ; asc:update "Removed dependency list and added perlrdf link to POD in RDF::Trine and RDF::Query." ; asc:update "Updated RDF::Trine::Serializer::Turtle->new API to take %args instead of \\%namespaces." ; asc:update "Updated RDF::Trine::Serializer::RDFXML to take %args and properly accept and serialize xmlns namespaces." ; asc:update "Updated RDF::Trine::Parser::RDFa to use streaming parsing (instead of materializing the graph first)." ; asc:update "Updated RDF::Trine::Model::_debug to use quad semantics when getting statement iterator." ; asc:update "Updated t/parser-turtle.t to use File::Glob::bsd_glob for cases where the test directory's path contains whitespace." ; asc:update "Removed redundant parse_into_model methods from RDF::Trine::Parser subclasses." ; asc:update "Renamed examples/create_store.pl to examples/foaf_labels.pl." ; asc:update "Fixed bug in turtle serializer that improperly serialized bnode objects 'belonging' to a parent bnode." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.117" ; doap:created "2010-02-04" ; ]; asc:changes [ asc:update "Fixed bug in RDF::Trine::Iterator::Bindings::as_json when using empty iterator." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.116" ; doap:created "2010-01-31" ; ]; asc:changes [ asc:update "Fixed bug in RDF::Trine::Serializer::RDFXML when serializing empty models." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.115" ; doap:created "2010-01-30" ; ]; asc:changes [ asc:addition "Added N-Triples and N-Quads parsers." ; asc:addition "Added RDF::Trine::Store::SPARQL::get_pattern implementation." ; asc:update "Changed RDF::Trine::Model::objects_for_predicate_list to return only a single node in scalar context." ; asc:update "Added table alias for COUNT(*) queries in RDF::Trine::Store::DBI (fix for mysql)." ; asc:update "Added example of using parse_url_into_model to RDF::Trine::Parser SYNOPSIS." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.114" ; doap:created "2010-01-27" ; ]; asc:changes [ asc:addition "Added new Turtle serializer." ; asc:addition "Added Storable to list of prereq modules." ; asc:addition "Added partial support for rdf:Lists to RDF::Trine::Serializer::Turtle." ; asc:addition "Added RDF::Trine::Namespace::uri_value method." ; asc:addition "Added variable() shortcut function to RDF::Trine package." ; asc:addition "Added UnimplementedError exception class." ; asc:update "Updated RDF/XML serializer grouping of same-subject statements for bounded descriptions." ; asc:update "Updated parse_into_model parser methods to be both class and object methods." ; asc:update "Updated Parser parse_* methods to take extra %args with optional 'context' value." ; asc:update "Moved RDF::Trine::Store::Hexastore from alpha/ directory into RDF::Trine package." ; asc:update "Updated unicode encoding and escaping in ::Node, ::Node::Literal, and ::Store::DBI." ; asc:update "Updated RDF::Trine::Graph to materialize statements when constructed with a graph iterator." ; asc:update "Moved get_pattern logic from ::Store to ::Model." ; asc:update "Updated ::Model::Union to work better with ::Model::get_pattern." ; asc:update "Updated Node and Statement from_sse methods to work with constant string arguments." ; asc:update "Updated code and tests for better coverage." ; asc:update "Removed unused RDF::Trine::Iterator::sfinally function." ; asc:update "Fixed bug in RDF::Trine::Graph::equals." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.113" ; doap:created "2009-12-30" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Parser::RDFa implementation to connect with RDF::RDFa::Parser." ; asc:addition "Added ability to pass RDF::Trine::Node::Resource values as the datatype argument to RDF::Trine::Node::Literal::new()." ; asc:addition "Added syntax shortcuts as exportable from RDF::Trine: iri(), blank(), and literal()." ; asc:addition "Added RDF::Trine::Serializer base class." ; asc:addition "Added RDF::Trine::Parser::parse_url_into_model class method." ; asc:addition "Added RDF::Trine::Model::size method." ; asc:addition "Added RDF::Trine::Model::objects_for_predicate_list method." ; asc:addition "Added RDF::Trine::Node::Resource::qname method to split an IRI into namespace and local parts." ; asc:addition "Added RDF::Trine::Serializer::NTriples::Canonical (from tobyink)." ; asc:addition "Added RDF::Trine::Iterator::Bindings::as_statements to return a graph iterator." ; asc:update "Special-cased 'xsd' in RDF::Trine::Namespace to return the RDF-version of the namespace URI (with trailing '#')." ; asc:update "Fixed syntax error in generated RDF/XML in RDF::Trine::Serializer::RDFXML." ; asc:update "Fixed bug in RDF::Trine::Serializer::RDFXML that was dropping triples." ; asc:update "Updated parser classes' registration of parser names and media types." ; asc:update "Removed ::Parser::Error package. Replaced with use of RDF::Trine::Error." ; asc:update "Convert data to utf8 encoding before hashing in RDF::Trine::Store::DBI::_mysql_hash_pp." ; asc:update "Removed RDF::Trine::Serializer::RDFXML::_split_predicate and replaced with call to $pred->qname." ; asc:update "Updated POD for ::Model::get_pattern to mention 'orderby' argument." ; asc:update "Updated ::Model::as_stream to return a graph iterator sorted by (s,p,o)." ; asc:update "Updated RDF/XML serializer to merge same-subject rdf:Descriptions." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.112" ; doap:created "2009-12-12" ; ]; asc:changes [ asc:addition "Added RDF/XML serializer." ; asc:addition "Added serialize_iterator_to_file and serialize_iterator_to_string methods to NTriples serializer." ; asc:addition "Added _serialize_bounded_description method to NTriples serializer." ; asc:addition "Added RDF::Trine::Parser::RDFJSON package (patch from tobyink)." ; asc:addition "Added RDF::Trine::Serializer::RDFJSON package (patch from tobyink)." ; asc:addition "Added add_hashref and as_hashref methods to RDF::Trine::Model (patch from tobyink)." ; asc:addition "Added tests for RDF/JSON parsing/serializing (patch from tobyink)." ; asc:addition "Added logging code to RDF::Trine::Store::DBI." ; asc:addition "Added as_ntriples methods to RDF::Trine::Node and subclasses for proper NTriples formatting." ; asc:update "Updated RDF::Trine docs to mention the RDF/XML parser (good catch by tobyink)." ; asc:update "Changed ::Store::DBI::get_statements to skip (with warning) past ill-formed statements with IDs that don't appear in any of the value tables." ; asc:update "Updated RDF::Trine::Serializer::NTriples to call as_ntriples on node objects during serialization." ; asc:update "Updated bin/rdf_store_serialize.pl to print in NTriples format." ; asc:update "Skip some failing tests when RDF::Trine::Node::Literal::XML is loaded." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.111" ; doap:created "2009-07-14" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Graph for testing graph equality." ; asc:addition "Added node_names() method to ::Statement and ::Statement::Quad." ; asc:addition "Added RDF::Trine::Statement::has_blanks method." ; asc:update "Fixed bug in RDF::Trine::Namespace to allow subclassing." ; asc:update "Removed dependency on Test::JSON, List::MoreUtils, and XML::Parser." ; asc:update "Added POD to RDF::Trine::Parser." ; asc:update "RDF::Trine::Store::temporary_store now delegates to RDF::Trine::Store::DBI." ; asc:update "Removed unnecessary call to blessed() in RDF::Trine::Statement." ; asc:update "Removed unused RDF::Trine::Promise class." ; asc:update "RDF::Trine now loads RDF::Trine::Store." ; asc:update "Removed TODO labeling of tests in t/model-filter.t." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.110" ; doap:created "2009-03-14" ; ]; asc:changes [ asc:addition "Added RDF::Trine::Store base class with default implementation of get_pattern()." ; asc:addition "Added POD description to RDF::Trine package." ; asc:addition "Added debug tracing code to ::Store::DBI." ; asc:update "Updated bin/rdf_store_add_file.pl to use the RDF::Trine parser, not Redland's parser." ; asc:update "Updated ::Iterator::Bindings::as_string to join lines with empty string (had been returning a list)." ; asc:update "Updated schema in ::Store::DBI::mysql to use utf8 charset and collation, and use a pkey instead of a unique." ; asc:update "RDF::Trine::Store::get_pattern now passes through optional @args (used for order-by)." ; asc:update "Fixed bug in ::Store::DBI::remove_statements causing bad SQL when all nodes are undef (remove all triples)." ; asc:update "::Node::Literal::new now calls ::Node::Literal::XML::new if available and applicable." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.109" ; doap:created "2008-11-14" ; ]; asc:changes [ asc:addition "Added $IGNORE_CLEANUP to ::Store::DBI to allow preventing DBI cleanup." ; asc:addition "Added SQLite-specific ::Store::DBI subclass so that indexes are created properly." ; asc:addition "Added POD to from_sse methods in ::Node and ::Statement." ; asc:addition "Added parsing of variables to RDF::Trine::Node::from_sse." ; asc:update "Removed incremental parsing code from RDF-Trine package." ; asc:update "Small changes to ::Iterator and ::Trine::Node::Literal for efficiency." ; asc:update "Whitespace updates to ::Trine::Node." ; asc:update "Fixed bug in RDF::Trine::Iterator::Bindings::print_xml that dropped every other row." ; asc:update "Updated RDF::Trine::Node::Resource to work with URI objects." ; asc:update "rdf_parse_turtle.pl now warns on any parser error." ; asc:update "RDF::Trine::Node::Resource now escapes unicode in base URIs (now just relative URI part) before calling URI->new_abs." ; asc:update "Turtle parser now makes universal IDs for all blank node (even those with given IDs like _:xyz)." ; asc:update "Fixed Unicode unescaping in Turtle parser's handling of string literals." ; asc:update "Turtle parser now doesn't modify the lexical value of numeric typed literals." ; asc:update "Fixed ::Store::DBI handling of Quads in get_statements (had been broken because RDF::Query bypasses it by using get_pattern)." ; asc:update "Fixed bug in ::Iterator::Bindings::print_xml that would drop every other result." ; asc:update "Updated VERSION numbers and docs for RDF::Trine for 0.109_01 candidate release." ; asc:update "::Store::DBI now throws an error if call to DBI->connect doesn't return a database handle." ; asc:update "::Iterator::Bindings::as_string now returns '' when there are no rows (instead of dying)." ; asc:update "::Store::DBI now throws an error if call to DBI->connect doesn't return a database handle." ; asc:update "::Iterator::Bindings::as_string now returns '' when there are no rows (instead of dying)." ; asc:update "Moved all debugging over to use Log::Log4perl." ; asc:update "Updated prerequisite list (removed Digest::SHA1 and XML::Parser, and added missing modules)." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.108" ; doap:created "2008-07-14" ; ]; asc:changes [ asc:addition "Added NTriples serializer module." ; asc:addition "Added POD to RDF::Trine::Promise." ; asc:addition "Added XML::Parser to list of required modules." ; asc:addition "Added a peek method to ::Iterator to support execution deferment like in ::Algebra::Service." ; asc:addition "Added RDF::Trine::Promise for general computation deferment." ; asc:addition "Added print_xml method to RDF::Trine::Iterator classes." ; asc:addition "Added support for Postgres storage." ; asc:addition "Added XML::LibXML::SAX as a prerequisite (because XML::SAX::PurePerl can't handle some RDF/XML that uses unicode)." ; asc:addition "Added unicode escaping to Literal and Resource sse serialization." ; asc:addition "Added W3C RDF/XML data and test script." ; asc:addition "Added support to the DBI store for filters for equality tests." ; asc:addition "Added support to compile normalized UNION (can only be the top-level node or a child of another UNION) patterns to SQL." ; asc:addition "Added Text::Table as a prerequisite." ; asc:update "Replaced RDF::Core-based RDF/XML parser with a new XML::SAX based parser." ; asc:update "Removed now unused redland-based RDF/XML test data." ; asc:update "Removed unused redland fallback code from RDF::Query::Model::RDFTrine." ; asc:update "Removed redland-based RDF/XML parser tests." ; asc:update "Updated Turtle grammar to accept uppercase language tags." ; asc:update "Fixed COLLECTION support in RDF/XML parser." ; asc:update "Fixed RDF/XML parser for nodeID, sequence, reification, and base URI handling." ; asc:update "Fixed POD in NTriples serializer." ; asc:update "Fixed RDF/XML parser to handle nodeID, arbitrary xml attributes, parseType=\"Literal\" serialization, and base URI handling." ; asc:update "Normlized expected NTriples data in W3C RDF/XML test files." ; asc:update "Fixes to deferring XML serialization for SPARQL bindings." ; asc:update "Fixed bug in delaying XML serialization for identity hints header computation." ; asc:update "Fixed extra data following xml query results." ; asc:update "Fixed strict refs bug in print_xml in iterator classes." ; asc:update "Updated tests that started failing after the previous commit (affecting SQL-compilation)." ; asc:update "Allow equality test and disjunction filters in patterns that can be compiled to SQL." ; asc:update "Fix bug in SQL compilation when restricting left-joins to specific node types (based on functions like isIRI)." ; asc:update "Mysql store schema now adds indexes." ; asc:update "Improved use of temporary RDF::Trine stores in RDF::Query tests." ; asc:update "DBI temporary stores now use an in-memory SQLite database." ; asc:update "Fixed bug in RDF::Trine::Store::DBI::mysql (calling _mysql_hash() without qualifying it in the superclass)." ; asc:update "Fixed variable ordering bug in UNION to SQL handling by forcing a sorted projection order." ; asc:update "Made SQL more standards compliant." ; asc:update "RDF::Trine::Store::DBI now auto-upgrades to mysql and postgres classes." ; asc:update "Fixed unicode escaping by replacing Unicode::Escape calls to hand-rolled code in RDF::Trine::Node." ; asc:update "RDF/XML parser now accept more than one top-level resource." ; asc:update "RDF/XML parser now accepts URI objects as base uri (not just RDF::Trine::Node::Resource objects)." ; asc:update "Added tabular as_string serialization of ::Iterator::Bindings objects." ; asc:update "Fixed RDF/XML parser handling of strings (versus file handles)." ; asc:update "Fixed Turtle parser to properly keep '+' on integer literals." ; asc:update "Fixed bindings_count so it doesn't pull a result from the stream (basing the count on binding_names)." ; asc:update "Fixed bindings xml serialization whitespace formatting." ; asc:update "Cleaned up ::Iterator::Bindings::as_string serialization code." ; asc:update "Replaced use of splice() with shift() in ::Iterator::SAXHandler::pull_result." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.107" ; doap:created "2008-04-25" ; ]; asc:changes [ asc:addition "Added Digest::SHA1 as a requirement for RDF::Trine." ; asc:update "Fixed base URI use in Turtle parser." ; asc:update "Fixed SQLite DSN in example scripts." ; asc:update "Fixed XML whitespace error in iterator-thaw.t" ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.106" ; doap:created "2008-04-19" ; ]; asc:changes [ asc:addition "Added examples directory (and an example script) to the RDF-Trine package." ; asc:addition "Added a mysql-specific RDF::Trine::Store class (now uses INSERT IGNORE for efficiency)." ; asc:addition "Added new tests to improve coverage of node and iterator classes." ; asc:addition "Added tests for binding iterator cartesian product join." ; asc:addition "Added SPARQL XML Results test for identity hints in element." ; asc:addition "Added support to incrementally thaw an Iterator from an IO::Socket." ; asc:addition "Added RDF::Trine::Iterator::SAXHandler::rate method." ; asc:addition "Added Time::HiRes as prerequisite to META.yml and Makefile.PL." ; asc:update "Removed Bloom::Filtere from the list of prerequisites (functionality has moved to RDF::Query)." ; asc:update "SQL compiler now doesn't select statement contexts unless called via get_statements (not get_pattern)." ; asc:update "RDF::Trine::Iterator::Graph::as_bindings now can be called with no arguments (uses default names)." ; asc:update "Moved the nested hash join from ::Iterator to ::Iterator::Bindings." ; asc:update "Pipelined the code for nested loop joins on binding iterators." ; asc:update "Fixed bug in ::Model::StatementFilter to call join_steams in ::Iterator::Bindings." ; asc:update "Fixed bug in ::Iterator::Graph::as_bindings where not all arguments are ::Node::Variable objects." ; asc:update "Updated SPARQL XML Results namespace for boolean iterators." ; asc:update "Replaced XML::Twig code with new XML::SAX parser (allowing streaming parsing)." ; asc:update "Moved as_sparql methods from RDF::Trine:: to RDF::Query:: classes." ; asc:update "RDF::Trine::Iterator::smap now allows overriding default construct_args (e.g. binding names)." ; asc:update "Fixed RDF::Trine::Model::StatementFilter::get_pattern to project away unused variables (fixing a bug that caused joining to always fail)." ; asc:update "Updated example turtle parser to accept URLs as command line arguments." ; asc:update "Turtle parser now removes dashes from the UUIDs used for blank node IDs." ; asc:update "Updated all RDF::Trine modules to use consistent VERSION number for 0.106 release." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.105" ; doap:created "2008-03-19" ; ]; asc:changes [ asc:update "Removed use of File::Slurp in parser tests." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.104" ; doap:created "2008-03-14" ; ]; asc:changes [ asc:update "Updated SPARQL XML Results namespace declaration in RDF::Trine::Iterator serialization methods." ; asc:addition "Added extra_result_data methods to add data to the XML Results header tag." ; asc:update "RDF::Trine::Node::Resource now serializes to QName when passed valid namespace data." ; asc:update "Fixed xml results serialization for style." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.102" ; doap:created "2008-03-XX" ; ]; asc:changes [ asc:addition "Added length() method to Materialized bindings iterator class." ; asc:update "Removed bloom filter construction from bindings iterator (RDF::Query code now does this itself)." ; asc:update "Fixed escaping of backslashes in Literal node serialization." ; ] . dcterms:isVersionOf ; dcterms:replaces ; doap:Version [ doap:revision "0.101" ; doap:created "2008-03-04" ; ]; asc:changes [ asc:addition "Added an RDF/XML parser based on RDF::Core::Parser." ; asc:update "Added Bloom filter support for Materialized bindings iterators." ; asc:update "Fixed IRI workaround using the URI module." ; asc:update "Turtle parser now uses Data::UUID for unique names." ; asc:update "Fixed turtle parser bug for Verb testing." ; asc:update "Added RDF::Trine::Statement::Quad::from_redland method." ; asc:update "DBI store now constrains variable node types based on position in a statement." ; asc:update "Added support for BOUND(), ISLITERAL(), ISURI() and ISIRI() functions in DBI store." ; ] . dcterms:isVersionOf ; doap:Version [ doap:revision "0.100" ; doap:created "2008-02-18" ; ]; asc:changes [ asc:addition "Initial public release." ; ] . a doap:Project ; doap:download-page ; doap:download-mirror . RDF-Trine-1.007/examples/000755 000765 000024 00000000000 12171744442 015126 5ustar00gregstaff000000 000000 RDF-Trine-1.007/extra/000755 000765 000024 00000000000 12171744443 014434 5ustar00gregstaff000000 000000 RDF-Trine-1.007/inc/000755 000765 000024 00000000000 12171744442 014061 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/000755 000765 000024 00000000000 12171744443 014057 5ustar00gregstaff000000 000000 RDF-Trine-1.007/Makefile.PL000644 000765 000024 00000003231 12164234603 015254 0ustar00gregstaff000000 000000 use strict; use warnings; use inc::Module::Install; name 'RDF-Trine'; all_from 'lib/RDF/Trine.pm'; author 'Gregory Todd Williams '; license 'perl'; build_requires 'Test::More' => 0.88; build_requires 'Test::Exception' => 0; build_requires 'Test::JSON' => 0; build_requires 'TryCatch' => 0; perl_version '5.010'; requires 'Moose' => 2; requires 'MooseX::ArrayRef' => 0; requires 'Module::Load::Conditional' => 0.38; requires 'Data::UUID' => 0; requires 'DBI' => 0; requires 'DBIx::Connector' => 0; requires 'DBD::SQLite' => 1.14; requires 'Digest::MD5' => 0; requires 'Digest::SHA' => 0; requires 'Error' => 0; requires 'HTTP::Negotiate' => 0; requires 'JSON' => 2; requires 'LWP::UserAgent' => 0; requires 'List::Util' => 0; requires 'Log::Log4perl' => 0; requires 'Math::BigInt' => 0; requires 'Algorithm::Combinatorics' => 0; requires 'Scalar::Util' => 1.24; requires 'Set::Scalar' => 0; requires 'Storable' => 0; requires 'Text::CSV' => 0; requires 'Text::Table' => 0; requires 'URI' => 1.52; requires 'XML::CommonNS' => 0.04; requires 'XML::Namespace' => 0; requires 'XML::SAX' => 0.96; requires 'Time::HiRes' => 0; recommends 'XML::LibXML' => 1.70; recommends 'Term::ANSIColor' => 0; resources( 'homepage' => "http://search.cpan.org/dist/RDF-Trine/", 'repository' => "http://github.com/kasei/perlrdf/", 'bugtracker' => "https://github.com/kasei/perlrdf/issues" ); author_tests('xt'); install_script glob('bin/srx2csv'); install_script glob('bin/srx2table'); sign; WriteAll; RDF-Trine-1.007/MANIFEST000644 000765 000024 00000165555 12171024446 014455 0ustar00gregstaff000000 000000 bin/graph.pl bin/rdf_init_store.pl bin/rdf_parse_turtle.pl bin/rdf_parse_xml.pl bin/rdf_store_add_file.pl bin/rdf_store_makeprivate.pl bin/rdf_store_serialize.pl bin/rdf_transcode.pl bin/srx2csv bin/srx2table Changes.ttl examples/foaf_labels.pl extra/mysql.sql inc/Module/Install.pm inc/Module/Install/AuthorTests.pm inc/Module/Install/Base.pm inc/Module/Install/Can.pm inc/Module/Install/Fetch.pm inc/Module/Install/Makefile.pm inc/Module/Install/Metadata.pm inc/Module/Install/Scripts.pm inc/Module/Install/Win32.pm inc/Module/Install/WriteAll.pm lib/RDF/Trine.pm lib/RDF/Trine/Error.pm lib/RDF/Trine/Exporter/CSV.pm lib/RDF/Trine/Exporter/RDFPatch.pm lib/RDF/Trine/Graph.pm lib/RDF/Trine/Iterator.pm lib/RDF/Trine/Iterator/Bindings.pm lib/RDF/Trine/Iterator/Bindings/Materialized.pm lib/RDF/Trine/Iterator/Boolean.pm lib/RDF/Trine/Iterator/Graph.pm lib/RDF/Trine/Iterator/Graph/Materialized.pm lib/RDF/Trine/Iterator/JSONHandler.pm lib/RDF/Trine/Iterator/SAXHandler.pm lib/RDF/Trine/Model.pm lib/RDF/Trine/Model/Dataset.pm lib/RDF/Trine/Model/StatementFilter.pm lib/RDF/Trine/Model/Union.pm lib/RDF/Trine/Namespace.pm lib/RDF/Trine/NamespaceMap.pm lib/RDF/Trine/Node.pm lib/RDF/Trine/Node/Blank.pm lib/RDF/Trine/Node/Literal.pm lib/RDF/Trine/Node/Nil.pm lib/RDF/Trine/Node/Resource.pm lib/RDF/Trine/Node/Variable.pm lib/RDF/Trine/Parser.pm lib/RDF/Trine/Parser/NQuads.pm lib/RDF/Trine/Parser/NTriples.pm lib/RDF/Trine/Parser/RDFa.pm lib/RDF/Trine/Parser/RDFJSON.pm lib/RDF/Trine/Parser/RDFXML.pm lib/RDF/Trine/Parser/Redland.pm lib/RDF/Trine/Parser/TriG.pm lib/RDF/Trine/Parser/Turtle.pm lib/RDF/Trine/Parser/Turtle/Constants.pm lib/RDF/Trine/Parser/Turtle/Lexer.pm lib/RDF/Trine/Parser/Turtle/Token.pm lib/RDF/Trine/Pattern.pm lib/RDF/Trine/Serializer.pm lib/RDF/Trine/Serializer/NQuads.pm lib/RDF/Trine/Serializer/NTriples.pm lib/RDF/Trine/Serializer/NTriples/Canonical.pm lib/RDF/Trine/Serializer/RDFJSON.pm lib/RDF/Trine/Serializer/RDFPatch.pm lib/RDF/Trine/Serializer/RDFXML.pm lib/RDF/Trine/Serializer/TriG.pm lib/RDF/Trine/Serializer/TSV.pm lib/RDF/Trine/Serializer/Turtle.pm lib/RDF/Trine/Statement.pm lib/RDF/Trine/Statement/Quad.pm lib/RDF/Trine/Store.pm lib/RDF/Trine/Store/DBI.pm lib/RDF/Trine/Store/DBI/mysql.pm lib/RDF/Trine/Store/DBI/Pg.pm lib/RDF/Trine/Store/DBI/SQLite.pm lib/RDF/Trine/Store/Dydra.pm lib/RDF/Trine/Store/Hexastore.pm lib/RDF/Trine/Store/Memory.pm lib/RDF/Trine/Store/Redis.pm lib/RDF/Trine/Store/Redland.pm lib/RDF/Trine/Store/SPARQL.pm lib/RDF/Trine/VariableBindings.pm lib/Test/RDF/Trine/Store.pm Makefile.PL MANIFEST This list of files META.yml README SIGNATURE t/00.load.t t/data/bugs/ttl-with-bom.ttl t/data/rdfa/test-sd.nt t/data/rdfa/test-sd.xhtml t/data/rdfxml-w3c/amp-in-url/test001.nt t/data/rdfxml-w3c/amp-in-url/test001.rdf t/data/rdfxml-w3c/datatypes-intensional/test001.nt t/data/rdfxml-w3c/datatypes-intensional/test002.nt t/data/rdfxml-w3c/datatypes/test001.nt t/data/rdfxml-w3c/datatypes/test001.rdf t/data/rdfxml-w3c/datatypes/test002.nt t/data/rdfxml-w3c/datatypes/test002.rdf t/data/rdfxml-w3c/datatypes/test002b.nt t/data/rdfxml-w3c/datatypes/test003a.nt t/data/rdfxml-w3c/datatypes/test003b.nt t/data/rdfxml-w3c/datatypes/test005a.nt t/data/rdfxml-w3c/datatypes/test005b.nt t/data/rdfxml-w3c/datatypes/test006.nt t/data/rdfxml-w3c/datatypes/test008a.nt t/data/rdfxml-w3c/datatypes/test008b.nt t/data/rdfxml-w3c/datatypes/test009a.nt t/data/rdfxml-w3c/datatypes/test009b.nt t/data/rdfxml-w3c/datatypes/test010.nt t/data/rdfxml-w3c/datatypes/test011a.nt t/data/rdfxml-w3c/datatypes/test011b.nt t/data/rdfxml-w3c/horst-01/test001.rdf t/data/rdfxml-w3c/horst-01/test002.rdf t/data/rdfxml-w3c/horst-01/test003.rdf t/data/rdfxml-w3c/horst-01/test004.rdf t/data/rdfxml-w3c/Manifest.rdf t/data/rdfxml-w3c/pfps-10/test001a.nt t/data/rdfxml-w3c/pfps-10/test001b.nt t/data/rdfxml-w3c/rdf-charmod-literals/test001.nt t/data/rdfxml-w3c/rdf-charmod-literals/test001.rdf t/data/rdfxml-w3c/rdf-charmod-uris/test001.nt t/data/rdfxml-w3c/rdf-charmod-uris/test001.rdf t/data/rdfxml-w3c/rdf-charmod-uris/test002.nt t/data/rdfxml-w3c/rdf-charmod-uris/test002.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/error001.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/error002.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test001.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test001.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test002.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test002.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test003.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test003.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test004.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test004.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test006.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test006.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test007.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test007.rdf t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test008.nt t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test008.rdf t/data/rdfxml-w3c/rdf-element-not-mandatory/test001.nt t/data/rdfxml-w3c/rdf-element-not-mandatory/test001.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0001.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0001.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0003.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0003.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0004.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0004.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0005.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0005.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0006.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0006.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0009.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0009.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0010.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0010.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0011.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0011.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0012.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0012.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0013.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0013.rdf t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0014.nt t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0014.rdf t/data/rdfxml-w3c/rdfms-abouteach/error001.rdf t/data/rdfxml-w3c/rdfms-abouteach/error002.rdf t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/error1.rdf t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test1.nt t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test1.rdf t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test2.nt t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test2.rdf t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test3.nt t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test3.rdf t/data/rdfxml-w3c/rdfms-duplicate-member-props/test001.nt t/data/rdfxml-w3c/rdfms-duplicate-member-props/test001.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/error001.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/error002.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/error003.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test001.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test001.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test002.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test002.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test003.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test003.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test004.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test004.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test005.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test005.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test006.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test006.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test007.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test007.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test008.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test008.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test009.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test009.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test010.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test010.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test011.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test011.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test012.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test012.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test013.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test013.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test014.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test014.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test015.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test015.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test016.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test016.rdf t/data/rdfxml-w3c/rdfms-empty-property-elements/test017.nt t/data/rdfxml-w3c/rdfms-empty-property-elements/test017.rdf t/data/rdfxml-w3c/rdfms-identity-anon-resources/test001.nt t/data/rdfxml-w3c/rdfms-identity-anon-resources/test001.rdf t/data/rdfxml-w3c/rdfms-identity-anon-resources/test002.nt t/data/rdfxml-w3c/rdfms-identity-anon-resources/test002.rdf t/data/rdfxml-w3c/rdfms-identity-anon-resources/test003.nt t/data/rdfxml-w3c/rdfms-identity-anon-resources/test003.rdf t/data/rdfxml-w3c/rdfms-identity-anon-resources/test004.nt t/data/rdfxml-w3c/rdfms-identity-anon-resources/test004.rdf t/data/rdfxml-w3c/rdfms-identity-anon-resources/test005.nt t/data/rdfxml-w3c/rdfms-identity-anon-resources/test005.rdf t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test001.nt t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test001.rdf t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test002.nt t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test002.rdf t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test004.nt t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test004.rdf t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test005.nt t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test005.rdf t/data/rdfxml-w3c/rdfms-para196/test001.nt t/data/rdfxml-w3c/rdfms-para196/test001.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error001.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error002.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error003.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error004.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error005.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error006.rdf t/data/rdfxml-w3c/rdfms-rdf-id/error007.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-001.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-002.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-003.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-004.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-005.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-006.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-007.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-008.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-009.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-010.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-011.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-012.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-013.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-014.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-015.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-016.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-017.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-018.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-019.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/error-020.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-001.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-001.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-002.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-002.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-003.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-003.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-004.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-004.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-005.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-005.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-006.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-006.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-007.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-007.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-008.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-008.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-009.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-009.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-010.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-010.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-011.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-011.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-012.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-012.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-013.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-013.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-014.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-014.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-015.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-015.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-016.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-016.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-017.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-017.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-018.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-018.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-019.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-019.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-020.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-020.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-021.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-021.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-022.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-022.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-023.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-023.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-024.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-024.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-025.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-025.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-026.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-026.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-027.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-027.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-028.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-028.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-029.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-029.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-030.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-030.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-031.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-031.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-032.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-032.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-033.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-033.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-034.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-034.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-035.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-035.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-036.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-036.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/test-037.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/test-037.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-001.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-001.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-002.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-002.rdf t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-003.nt t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-003.rdf t/data/rdfxml-w3c/rdfms-reification-required/test001.nt t/data/rdfxml-w3c/rdfms-reification-required/test001.rdf t/data/rdfxml-w3c/rdfms-seq-representation/empty.nt t/data/rdfxml-w3c/rdfms-seq-representation/test001.nt t/data/rdfxml-w3c/rdfms-seq-representation/test001.rdf t/data/rdfxml-w3c/rdfms-seq-representation/test002.nt t/data/rdfxml-w3c/rdfms-seq-representation/test003a.nt t/data/rdfxml-w3c/rdfms-seq-representation/test003b.nt t/data/rdfxml-w3c/rdfms-seq-representation/test004.nt t/data/rdfxml-w3c/rdfms-syntax-incomplete/error001.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/error002.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/error003.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/error004.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/error005.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/error006.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/test001.nt t/data/rdfxml-w3c/rdfms-syntax-incomplete/test001.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/test002.nt t/data/rdfxml-w3c/rdfms-syntax-incomplete/test002.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/test003.nt t/data/rdfxml-w3c/rdfms-syntax-incomplete/test003.rdf t/data/rdfxml-w3c/rdfms-syntax-incomplete/test004.nt t/data/rdfxml-w3c/rdfms-syntax-incomplete/test004.rdf t/data/rdfxml-w3c/rdfms-uri-substructure/error001.nt t/data/rdfxml-w3c/rdfms-uri-substructure/test001.nt t/data/rdfxml-w3c/rdfms-uri-substructure/test001.rdf t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test001.nt t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test001.rdf t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test002.nt t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test002.rdf t/data/rdfxml-w3c/rdfms-xmllang/test001.nt t/data/rdfxml-w3c/rdfms-xmllang/test001.rdf t/data/rdfxml-w3c/rdfms-xmllang/test002.nt t/data/rdfxml-w3c/rdfms-xmllang/test002.rdf t/data/rdfxml-w3c/rdfms-xmllang/test003.nt t/data/rdfxml-w3c/rdfms-xmllang/test003.rdf t/data/rdfxml-w3c/rdfms-xmllang/test004.nt t/data/rdfxml-w3c/rdfms-xmllang/test004.rdf t/data/rdfxml-w3c/rdfms-xmllang/test005.nt t/data/rdfxml-w3c/rdfms-xmllang/test005.rdf t/data/rdfxml-w3c/rdfms-xmllang/test006.nt t/data/rdfxml-w3c/rdfms-xmllang/test006.rdf t/data/rdfxml-w3c/rdfms-xmllang/test007a.nt t/data/rdfxml-w3c/rdfms-xmllang/test007b.nt t/data/rdfxml-w3c/rdfms-xmllang/test007c.nt t/data/rdfxml-w3c/rdfs-container-membership-superProperty/not1C.rdf t/data/rdfxml-w3c/rdfs-container-membership-superProperty/not1P.rdf t/data/rdfxml-w3c/rdfs-domain-and-range/nonconclusions005.rdf t/data/rdfxml-w3c/rdfs-domain-and-range/nonconclusions006.rdf t/data/rdfxml-w3c/rdfs-domain-and-range/premises005.rdf t/data/rdfxml-w3c/rdfs-domain-and-range/premises006.rdf t/data/rdfxml-w3c/rdfs-domain-and-range/test001.nt t/data/rdfxml-w3c/rdfs-domain-and-range/test001.rdf t/data/rdfxml-w3c/rdfs-domain-and-range/test002.nt t/data/rdfxml-w3c/rdfs-domain-and-range/test002.rdf t/data/rdfxml-w3c/rdfs-entailment/test001.nt t/data/rdfxml-w3c/rdfs-entailment/test002.nt t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/test001.nt t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/test001.rdf t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/test001.nt t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/test001.rdf t/data/rdfxml-w3c/rdfs-subClassOf-a-Property/test001.nt t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/test001.nt t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/test002.nt t/data/rdfxml-w3c/statement-entailment/test001a.nt t/data/rdfxml-w3c/statement-entailment/test001b.nt t/data/rdfxml-w3c/statement-entailment/test002a.nt t/data/rdfxml-w3c/statement-entailment/test002b.nt t/data/rdfxml-w3c/tex-01/test001.rdf t/data/rdfxml-w3c/tex-01/test002.rdf t/data/rdfxml-w3c/unrecognised-xml-attributes/test001.nt t/data/rdfxml-w3c/unrecognised-xml-attributes/test001.rdf t/data/rdfxml-w3c/unrecognised-xml-attributes/test002.nt t/data/rdfxml-w3c/unrecognised-xml-attributes/test002.rdf t/data/rdfxml-w3c/xml-canon/test001.nt t/data/rdfxml-w3c/xml-canon/test001.rdf t/data/rdfxml-w3c/xmlbase/test001.nt t/data/rdfxml-w3c/xmlbase/test001.rdf t/data/rdfxml-w3c/xmlbase/test002.nt t/data/rdfxml-w3c/xmlbase/test002.rdf t/data/rdfxml-w3c/xmlbase/test003.nt t/data/rdfxml-w3c/xmlbase/test003.rdf t/data/rdfxml-w3c/xmlbase/test004.nt t/data/rdfxml-w3c/xmlbase/test004.rdf t/data/rdfxml-w3c/xmlbase/test006.nt t/data/rdfxml-w3c/xmlbase/test006.rdf t/data/rdfxml-w3c/xmlbase/test007.nt t/data/rdfxml-w3c/xmlbase/test007.rdf t/data/rdfxml-w3c/xmlbase/test008.nt t/data/rdfxml-w3c/xmlbase/test008.rdf t/data/rdfxml-w3c/xmlbase/test009.nt t/data/rdfxml-w3c/xmlbase/test009.rdf t/data/rdfxml-w3c/xmlbase/test010.nt t/data/rdfxml-w3c/xmlbase/test010.rdf t/data/rdfxml-w3c/xmlbase/test011.nt t/data/rdfxml-w3c/xmlbase/test011.rdf t/data/rdfxml-w3c/xmlbase/test013.nt t/data/rdfxml-w3c/xmlbase/test013.rdf t/data/rdfxml-w3c/xmlbase/test014.nt t/data/rdfxml-w3c/xmlbase/test014.rdf t/data/rdfxml-w3c/xmlsch-02/test001.rdf t/data/rdfxml-w3c/xmlsch-02/test002.rdf t/data/rdfxml-w3c/xmlsch-02/test003.rdf t/data/trig-2013/alternating_bnode_graphs.nq t/data/trig-2013/alternating_bnode_graphs.trig t/data/trig-2013/alternating_iri_graphs.nq t/data/trig-2013/alternating_iri_graphs.trig t/data/trig-2013/anonymous_blank_node_graph.trig t/data/trig-2013/anonymous_blank_node_object.nq t/data/trig-2013/anonymous_blank_node_object.trig t/data/trig-2013/anonymous_blank_node_subject.nq t/data/trig-2013/anonymous_blank_node_subject.trig t/data/trig-2013/bareword_a_predicate.nq t/data/trig-2013/bareword_a_predicate.trig t/data/trig-2013/bareword_decimal.nq t/data/trig-2013/bareword_decimal.trig t/data/trig-2013/bareword_double.nq t/data/trig-2013/bareword_double.trig t/data/trig-2013/bareword_integer.trig t/data/trig-2013/blankNodePropertyList_as_object.nq t/data/trig-2013/blankNodePropertyList_as_object.trig t/data/trig-2013/blankNodePropertyList_as_subject.nq t/data/trig-2013/blankNodePropertyList_as_subject.trig t/data/trig-2013/blankNodePropertyList_containing_collection.nq t/data/trig-2013/blankNodePropertyList_containing_collection.trig t/data/trig-2013/blankNodePropertyList_with_multiple_triples.nq t/data/trig-2013/blankNodePropertyList_with_multiple_triples.trig t/data/trig-2013/collection_object.nq t/data/trig-2013/collection_object.trig t/data/trig-2013/collection_subject.nq t/data/trig-2013/collection_subject.trig t/data/trig-2013/default_namespace_IRI.trig t/data/trig-2013/double_lower_case_e.nq t/data/trig-2013/double_lower_case_e.trig t/data/trig-2013/empty_collection.nq t/data/trig-2013/empty_collection.trig t/data/trig-2013/first.nq t/data/trig-2013/first.trig t/data/trig-2013/HYPHEN_MINUS_in_localName.nq t/data/trig-2013/HYPHEN_MINUS_in_localName.trig t/data/trig-2013/IRI_spo.nq t/data/trig-2013/IRI_subject.trig t/data/trig-2013/IRI_with_all_punctuation.nq t/data/trig-2013/IRI_with_all_punctuation.trig t/data/trig-2013/IRI_with_eight_digit_numeric_escape.trig t/data/trig-2013/IRI_with_four_digit_numeric_escape.trig t/data/trig-2013/IRIREF_datatype.nq t/data/trig-2013/IRIREF_datatype.trig t/data/trig-2013/labeled_blank_node_graph.nq t/data/trig-2013/labeled_blank_node_graph.trig t/data/trig-2013/labeled_blank_node_object.nq t/data/trig-2013/labeled_blank_node_object.trig t/data/trig-2013/labeled_blank_node_subject.nq t/data/trig-2013/labeled_blank_node_subject.trig t/data/trig-2013/labeled_blank_node_with_leading_digit.trig t/data/trig-2013/labeled_blank_node_with_leading_underscore.trig t/data/trig-2013/labeled_blank_node_with_non_leading_extras.trig t/data/trig-2013/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig t/data/trig-2013/langtagged_LONG_with_subtag.nq t/data/trig-2013/langtagged_LONG_with_subtag.trig t/data/trig-2013/langtagged_LONG.trig t/data/trig-2013/langtagged_non_LONG.nq t/data/trig-2013/langtagged_non_LONG.trig t/data/trig-2013/lantag_with_subtag.nq t/data/trig-2013/lantag_with_subtag.trig t/data/trig-2013/last.nq t/data/trig-2013/last.trig t/data/trig-2013/LICENSE t/data/trig-2013/literal_false.nq t/data/trig-2013/literal_false.trig t/data/trig-2013/LITERAL_LONG1_ascii_boundaries.nq t/data/trig-2013/LITERAL_LONG1_ascii_boundaries.trig t/data/trig-2013/LITERAL_LONG1_with_1_squote.nq t/data/trig-2013/LITERAL_LONG1_with_1_squote.trig t/data/trig-2013/LITERAL_LONG1_with_2_squotes.nq t/data/trig-2013/LITERAL_LONG1_with_2_squotes.trig t/data/trig-2013/LITERAL_LONG1.trig t/data/trig-2013/LITERAL_LONG2_ascii_boundaries.nq t/data/trig-2013/LITERAL_LONG2_ascii_boundaries.trig t/data/trig-2013/LITERAL_LONG2_with_1_squote.nq t/data/trig-2013/LITERAL_LONG2_with_1_squote.trig t/data/trig-2013/LITERAL_LONG2_with_2_squotes.nq t/data/trig-2013/LITERAL_LONG2_with_2_squotes.trig t/data/trig-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq t/data/trig-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig t/data/trig-2013/LITERAL_LONG2.trig t/data/trig-2013/literal_true.nq t/data/trig-2013/literal_true.trig t/data/trig-2013/literal_with_BACKSPACE.nq t/data/trig-2013/literal_with_BACKSPACE.trig t/data/trig-2013/literal_with_CARRIAGE_RETURN.nq t/data/trig-2013/literal_with_CARRIAGE_RETURN.trig t/data/trig-2013/literal_with_CHARACTER_TABULATION.nq t/data/trig-2013/literal_with_CHARACTER_TABULATION.trig t/data/trig-2013/literal_with_escaped_BACKSPACE.trig t/data/trig-2013/literal_with_escaped_CARRIAGE_RETURN.trig t/data/trig-2013/literal_with_escaped_CHARACTER_TABULATION.trig t/data/trig-2013/literal_with_escaped_FORM_FEED.trig t/data/trig-2013/literal_with_escaped_LINE_FEED.trig t/data/trig-2013/literal_with_FORM_FEED.nq t/data/trig-2013/literal_with_FORM_FEED.trig t/data/trig-2013/literal_with_LINE_FEED.nq t/data/trig-2013/literal_with_LINE_FEED.trig t/data/trig-2013/literal_with_numeric_escape4.nq t/data/trig-2013/literal_with_numeric_escape4.trig t/data/trig-2013/literal_with_numeric_escape8.trig t/data/trig-2013/literal_with_REVERSE_SOLIDUS.nq t/data/trig-2013/literal_with_REVERSE_SOLIDUS.trig t/data/trig-2013/LITERAL1_all_controls.nq t/data/trig-2013/LITERAL1_all_controls.trig t/data/trig-2013/LITERAL1_all_punctuation.nq t/data/trig-2013/LITERAL1_all_punctuation.trig t/data/trig-2013/LITERAL1_ascii_boundaries.nq t/data/trig-2013/LITERAL1_ascii_boundaries.trig t/data/trig-2013/LITERAL1.nq t/data/trig-2013/LITERAL1.trig t/data/trig-2013/LITERAL2_ascii_boundaries.nq t/data/trig-2013/LITERAL2_ascii_boundaries.trig t/data/trig-2013/LITERAL2.trig t/data/trig-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq t/data/trig-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig t/data/trig-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq t/data/trig-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig t/data/trig-2013/localname_with_COLON.nq t/data/trig-2013/localname_with_COLON.trig t/data/trig-2013/localName_with_leading_digit.nq t/data/trig-2013/localName_with_leading_digit.trig t/data/trig-2013/localName_with_leading_underscore.nq t/data/trig-2013/localName_with_leading_underscore.trig t/data/trig-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq t/data/trig-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig t/data/trig-2013/localName_with_non_leading_extras.nq t/data/trig-2013/localName_with_non_leading_extras.trig t/data/trig-2013/localName_with_PN_CHARS_BASE_character_boundaries.nq t/data/trig-2013/localName_with_PN_CHARS_BASE_character_boundaries.trig t/data/trig-2013/manifest.ttl t/data/trig-2013/negative_numeric.nq t/data/trig-2013/negative_numeric.trig t/data/trig-2013/nested_blankNodePropertyLists.nq t/data/trig-2013/nested_blankNodePropertyLists.trig t/data/trig-2013/nested_collection.nq t/data/trig-2013/nested_collection.trig t/data/trig-2013/numeric_with_leading_0.nq t/data/trig-2013/numeric_with_leading_0.trig t/data/trig-2013/objectList_with_two_objects.nq t/data/trig-2013/objectList_with_two_objects.trig t/data/trig-2013/old_style_base.trig t/data/trig-2013/old_style_prefix.trig t/data/trig-2013/percent_escaped_localName.nq t/data/trig-2013/percent_escaped_localName.trig t/data/trig-2013/positive_numeric.nq t/data/trig-2013/positive_numeric.trig t/data/trig-2013/predicateObjectList_with_two_objectLists.nq t/data/trig-2013/predicateObjectList_with_two_objectLists.trig t/data/trig-2013/prefix_only_IRI.trig t/data/trig-2013/prefix_reassigned_and_used.nq t/data/trig-2013/prefix_reassigned_and_used.trig t/data/trig-2013/prefix_with_non_leading_extras.trig t/data/trig-2013/prefix_with_PN_CHARS_BASE_character_boundaries.trig t/data/trig-2013/prefixed_IRI_object.trig t/data/trig-2013/prefixed_IRI_predicate.trig t/data/trig-2013/prefixed_name_datatype.trig t/data/trig-2013/README t/data/trig-2013/repeated_semis_at_end.trig t/data/trig-2013/repeated_semis_not_at_end.nq t/data/trig-2013/repeated_semis_not_at_end.trig t/data/trig-2013/reserved_escaped_localName.nq t/data/trig-2013/reserved_escaped_localName.trig t/data/trig-2013/sole_blankNodePropertyList.trig t/data/trig-2013/SPARQL_style_base.trig t/data/trig-2013/SPARQL_style_prefix.trig t/data/trig-2013/trig-eval-bad-01.trig t/data/trig-2013/trig-eval-bad-02.trig t/data/trig-2013/trig-eval-bad-03.trig t/data/trig-2013/trig-eval-bad-04.trig t/data/trig-2013/trig-eval-struct-01.nq t/data/trig-2013/trig-eval-struct-01.trig t/data/trig-2013/trig-eval-struct-02.nq t/data/trig-2013/trig-eval-struct-02.trig t/data/trig-2013/trig-subm-01.nq t/data/trig-2013/trig-subm-01.trig t/data/trig-2013/trig-subm-02.nq t/data/trig-2013/trig-subm-02.trig t/data/trig-2013/trig-subm-03.nq t/data/trig-2013/trig-subm-03.trig t/data/trig-2013/trig-subm-04.nq t/data/trig-2013/trig-subm-04.trig t/data/trig-2013/trig-subm-05.nq t/data/trig-2013/trig-subm-05.trig t/data/trig-2013/trig-subm-06.nq t/data/trig-2013/trig-subm-06.trig t/data/trig-2013/trig-subm-07.nq t/data/trig-2013/trig-subm-07.trig t/data/trig-2013/trig-subm-08.nq t/data/trig-2013/trig-subm-08.trig t/data/trig-2013/trig-subm-09.nq t/data/trig-2013/trig-subm-09.trig t/data/trig-2013/trig-subm-10.nq t/data/trig-2013/trig-subm-10.trig t/data/trig-2013/trig-subm-11.nq t/data/trig-2013/trig-subm-11.trig t/data/trig-2013/trig-subm-12.nq t/data/trig-2013/trig-subm-12.trig t/data/trig-2013/trig-subm-13.nq t/data/trig-2013/trig-subm-13.trig t/data/trig-2013/trig-subm-14.nq t/data/trig-2013/trig-subm-14.trig t/data/trig-2013/trig-subm-15.nq t/data/trig-2013/trig-subm-15.trig t/data/trig-2013/trig-subm-16.nq t/data/trig-2013/trig-subm-16.trig t/data/trig-2013/trig-subm-17.nq t/data/trig-2013/trig-subm-17.trig t/data/trig-2013/trig-subm-18.nq t/data/trig-2013/trig-subm-18.trig t/data/trig-2013/trig-subm-19.nq t/data/trig-2013/trig-subm-19.trig t/data/trig-2013/trig-subm-20.nq t/data/trig-2013/trig-subm-20.trig t/data/trig-2013/trig-subm-21.nq t/data/trig-2013/trig-subm-21.trig t/data/trig-2013/trig-subm-22.nq t/data/trig-2013/trig-subm-22.trig t/data/trig-2013/trig-subm-23.nq t/data/trig-2013/trig-subm-23.trig t/data/trig-2013/trig-subm-24.nq t/data/trig-2013/trig-subm-24.trig t/data/trig-2013/trig-subm-25.nq t/data/trig-2013/trig-subm-25.trig t/data/trig-2013/trig-subm-26.nq t/data/trig-2013/trig-subm-26.trig t/data/trig-2013/trig-subm-27.nq t/data/trig-2013/trig-subm-27.trig t/data/trig-2013/trig-syntax-bad-base-01.trig t/data/trig-2013/trig-syntax-bad-base-02.trig t/data/trig-2013/trig-syntax-bad-base-03.trig t/data/trig-2013/trig-syntax-bad-base-04.trig t/data/trig-2013/trig-syntax-bad-base-05.trig t/data/trig-2013/trig-syntax-bad-blank-label-dot-end.trig t/data/trig-2013/trig-syntax-bad-esc-01.trig t/data/trig-2013/trig-syntax-bad-esc-02.trig t/data/trig-2013/trig-syntax-bad-esc-03.trig t/data/trig-2013/trig-syntax-bad-esc-04.trig t/data/trig-2013/trig-syntax-bad-kw-01.trig t/data/trig-2013/trig-syntax-bad-kw-02.trig t/data/trig-2013/trig-syntax-bad-kw-03.trig t/data/trig-2013/trig-syntax-bad-kw-04.trig t/data/trig-2013/trig-syntax-bad-kw-05.trig t/data/trig-2013/trig-syntax-bad-lang-01.trig t/data/trig-2013/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig t/data/trig-2013/trig-syntax-bad-ln-dash-start.trig t/data/trig-2013/trig-syntax-bad-ln-escape-start.trig t/data/trig-2013/trig-syntax-bad-ln-escape.trig t/data/trig-2013/trig-syntax-bad-missing-ns-dot-end.trig t/data/trig-2013/trig-syntax-bad-missing-ns-dot-start.trig t/data/trig-2013/trig-syntax-bad-n3-extras-01.trig t/data/trig-2013/trig-syntax-bad-n3-extras-02.trig t/data/trig-2013/trig-syntax-bad-n3-extras-03.trig t/data/trig-2013/trig-syntax-bad-n3-extras-04.trig t/data/trig-2013/trig-syntax-bad-n3-extras-05.trig t/data/trig-2013/trig-syntax-bad-n3-extras-06.trig t/data/trig-2013/trig-syntax-bad-n3-extras-07.trig t/data/trig-2013/trig-syntax-bad-n3-extras-08.trig t/data/trig-2013/trig-syntax-bad-n3-extras-09.trig t/data/trig-2013/trig-syntax-bad-n3-extras-10.trig t/data/trig-2013/trig-syntax-bad-n3-extras-11.trig t/data/trig-2013/trig-syntax-bad-n3-extras-12.trig t/data/trig-2013/trig-syntax-bad-n3-extras-13.trig t/data/trig-2013/trig-syntax-bad-ns-dot-end.trig t/data/trig-2013/trig-syntax-bad-ns-dot-start.trig t/data/trig-2013/trig-syntax-bad-num-01.trig t/data/trig-2013/trig-syntax-bad-num-02.trig t/data/trig-2013/trig-syntax-bad-num-03.trig t/data/trig-2013/trig-syntax-bad-num-04.trig t/data/trig-2013/trig-syntax-bad-num-05.trig t/data/trig-2013/trig-syntax-bad-number-dot-in-anon.trig t/data/trig-2013/trig-syntax-bad-pname-01.trig t/data/trig-2013/trig-syntax-bad-pname-02.trig t/data/trig-2013/trig-syntax-bad-pname-03.trig t/data/trig-2013/trig-syntax-bad-prefix-01.trig t/data/trig-2013/trig-syntax-bad-prefix-02.trig t/data/trig-2013/trig-syntax-bad-prefix-03.trig t/data/trig-2013/trig-syntax-bad-prefix-04.trig t/data/trig-2013/trig-syntax-bad-prefix-05.trig t/data/trig-2013/trig-syntax-bad-prefix-06.trig t/data/trig-2013/trig-syntax-bad-prefix-07.trig t/data/trig-2013/trig-syntax-bad-string-01.trig t/data/trig-2013/trig-syntax-bad-string-02.trig t/data/trig-2013/trig-syntax-bad-string-03.trig t/data/trig-2013/trig-syntax-bad-string-04.trig t/data/trig-2013/trig-syntax-bad-string-05.trig t/data/trig-2013/trig-syntax-bad-string-06.trig t/data/trig-2013/trig-syntax-bad-string-07.trig t/data/trig-2013/trig-syntax-bad-struct-02.trig t/data/trig-2013/trig-syntax-bad-struct-03.trig t/data/trig-2013/trig-syntax-bad-struct-04.trig t/data/trig-2013/trig-syntax-bad-struct-05.trig t/data/trig-2013/trig-syntax-bad-struct-06.trig t/data/trig-2013/trig-syntax-bad-struct-07.trig t/data/trig-2013/trig-syntax-bad-struct-09.trig t/data/trig-2013/trig-syntax-bad-struct-10.trig t/data/trig-2013/trig-syntax-bad-struct-12.trig t/data/trig-2013/trig-syntax-bad-struct-13.trig t/data/trig-2013/trig-syntax-bad-struct-14.trig t/data/trig-2013/trig-syntax-bad-struct-15.trig t/data/trig-2013/trig-syntax-bad-struct-16.trig t/data/trig-2013/trig-syntax-bad-struct-17.trig t/data/trig-2013/trig-syntax-bad-turtle-01.trig t/data/trig-2013/trig-syntax-bad-uri-01.trig t/data/trig-2013/trig-syntax-bad-uri-02.trig t/data/trig-2013/trig-syntax-bad-uri-03.trig t/data/trig-2013/trig-syntax-bad-uri-04.trig t/data/trig-2013/trig-syntax-bad-uri-05.trig t/data/trig-2013/trig-syntax-base-01.trig t/data/trig-2013/trig-syntax-base-02.trig t/data/trig-2013/trig-syntax-base-03.trig t/data/trig-2013/trig-syntax-base-04.trig t/data/trig-2013/trig-syntax-blank-label.trig t/data/trig-2013/trig-syntax-bnode-01.trig t/data/trig-2013/trig-syntax-bnode-02.trig t/data/trig-2013/trig-syntax-bnode-03.trig t/data/trig-2013/trig-syntax-bnode-04.trig t/data/trig-2013/trig-syntax-bnode-05.trig t/data/trig-2013/trig-syntax-bnode-06.trig t/data/trig-2013/trig-syntax-bnode-07.trig t/data/trig-2013/trig-syntax-bnode-08.trig t/data/trig-2013/trig-syntax-bnode-09.trig t/data/trig-2013/trig-syntax-bnode-10.trig t/data/trig-2013/trig-syntax-datatypes-01.trig t/data/trig-2013/trig-syntax-datatypes-02.trig t/data/trig-2013/trig-syntax-file-01.trig t/data/trig-2013/trig-syntax-file-02.trig t/data/trig-2013/trig-syntax-file-03.trig t/data/trig-2013/trig-syntax-kw-01.trig t/data/trig-2013/trig-syntax-kw-02.trig t/data/trig-2013/trig-syntax-kw-03.trig t/data/trig-2013/trig-syntax-lists-01.trig t/data/trig-2013/trig-syntax-lists-02.trig t/data/trig-2013/trig-syntax-lists-03.trig t/data/trig-2013/trig-syntax-lists-04.trig t/data/trig-2013/trig-syntax-lists-05.trig t/data/trig-2013/trig-syntax-ln-colons.trig t/data/trig-2013/trig-syntax-ln-dots.trig t/data/trig-2013/trig-syntax-ns-dots.trig t/data/trig-2013/trig-syntax-number-01.trig t/data/trig-2013/trig-syntax-number-02.trig t/data/trig-2013/trig-syntax-number-03.trig t/data/trig-2013/trig-syntax-number-04.trig t/data/trig-2013/trig-syntax-number-05.trig t/data/trig-2013/trig-syntax-number-06.trig t/data/trig-2013/trig-syntax-number-07.trig t/data/trig-2013/trig-syntax-number-08.trig t/data/trig-2013/trig-syntax-number-09.trig t/data/trig-2013/trig-syntax-number-10.trig t/data/trig-2013/trig-syntax-number-11.trig t/data/trig-2013/trig-syntax-pname-esc-01.trig t/data/trig-2013/trig-syntax-pname-esc-02.trig t/data/trig-2013/trig-syntax-pname-esc-03.trig t/data/trig-2013/trig-syntax-prefix-01.trig t/data/trig-2013/trig-syntax-prefix-02.trig t/data/trig-2013/trig-syntax-prefix-03.trig t/data/trig-2013/trig-syntax-prefix-04.trig t/data/trig-2013/trig-syntax-prefix-05.trig t/data/trig-2013/trig-syntax-prefix-06.trig t/data/trig-2013/trig-syntax-prefix-07.trig t/data/trig-2013/trig-syntax-prefix-08.trig t/data/trig-2013/trig-syntax-prefix-09.trig t/data/trig-2013/trig-syntax-str-esc-01.trig t/data/trig-2013/trig-syntax-str-esc-02.trig t/data/trig-2013/trig-syntax-str-esc-03.trig t/data/trig-2013/trig-syntax-string-01.trig t/data/trig-2013/trig-syntax-string-02.trig t/data/trig-2013/trig-syntax-string-03.trig t/data/trig-2013/trig-syntax-string-04.trig t/data/trig-2013/trig-syntax-string-05.trig t/data/trig-2013/trig-syntax-string-06.trig t/data/trig-2013/trig-syntax-string-07.trig t/data/trig-2013/trig-syntax-string-08.trig t/data/trig-2013/trig-syntax-string-09.trig t/data/trig-2013/trig-syntax-string-10.trig t/data/trig-2013/trig-syntax-string-11.trig t/data/trig-2013/trig-syntax-struct-01.trig t/data/trig-2013/trig-syntax-struct-02.trig t/data/trig-2013/trig-syntax-struct-03.trig t/data/trig-2013/trig-syntax-struct-04.trig t/data/trig-2013/trig-syntax-struct-05.trig t/data/trig-2013/trig-syntax-struct-06.trig t/data/trig-2013/trig-syntax-struct-07.trig t/data/trig-2013/trig-syntax-uri-01.trig t/data/trig-2013/trig-syntax-uri-02.trig t/data/trig-2013/trig-syntax-uri-03.trig t/data/trig-2013/trig-syntax-uri-04.trig t/data/trig-2013/two_LITERAL_LONG2s.nq t/data/trig-2013/two_LITERAL_LONG2s.trig t/data/trig-2013/underscore_in_localName.nq t/data/trig-2013/underscore_in_localName.trig t/data/turtle-2013/anonymous_blank_node_object.ttl t/data/turtle-2013/anonymous_blank_node_subject.ttl t/data/turtle-2013/bareword_a_predicate.nt t/data/turtle-2013/bareword_a_predicate.ttl t/data/turtle-2013/bareword_decimal.nt t/data/turtle-2013/bareword_decimal.ttl t/data/turtle-2013/bareword_double.nt t/data/turtle-2013/bareword_double.ttl t/data/turtle-2013/bareword_integer.ttl t/data/turtle-2013/blankNodePropertyList_as_object.nt t/data/turtle-2013/blankNodePropertyList_as_object.ttl t/data/turtle-2013/blankNodePropertyList_as_subject.nt t/data/turtle-2013/blankNodePropertyList_as_subject.ttl t/data/turtle-2013/blankNodePropertyList_containing_collection.nt t/data/turtle-2013/blankNodePropertyList_containing_collection.ttl t/data/turtle-2013/blankNodePropertyList_with_multiple_triples.nt t/data/turtle-2013/blankNodePropertyList_with_multiple_triples.ttl t/data/turtle-2013/collection_object.nt t/data/turtle-2013/collection_object.ttl t/data/turtle-2013/collection_subject.nt t/data/turtle-2013/collection_subject.ttl t/data/turtle-2013/comment_following_localName.ttl t/data/turtle-2013/comment_following_PNAME_NS.nt t/data/turtle-2013/comment_following_PNAME_NS.ttl t/data/turtle-2013/default_namespace_IRI.ttl t/data/turtle-2013/double_lower_case_e.nt t/data/turtle-2013/double_lower_case_e.ttl t/data/turtle-2013/empty_collection.nt t/data/turtle-2013/empty_collection.ttl t/data/turtle-2013/first.nt t/data/turtle-2013/first.ttl t/data/turtle-2013/HYPHEN_MINUS_in_localName.nt t/data/turtle-2013/HYPHEN_MINUS_in_localName.ttl t/data/turtle-2013/IRI_spo.nt t/data/turtle-2013/IRI_subject.ttl t/data/turtle-2013/IRI_with_all_punctuation.nt t/data/turtle-2013/IRI_with_all_punctuation.ttl t/data/turtle-2013/IRI_with_eight_digit_numeric_escape.ttl t/data/turtle-2013/IRI_with_four_digit_numeric_escape.ttl t/data/turtle-2013/IRIREF_datatype.nt t/data/turtle-2013/IRIREF_datatype.ttl t/data/turtle-2013/labeled_blank_node_object.nt t/data/turtle-2013/labeled_blank_node_object.ttl t/data/turtle-2013/labeled_blank_node_subject.nt t/data/turtle-2013/labeled_blank_node_subject.ttl t/data/turtle-2013/labeled_blank_node_with_leading_digit.ttl t/data/turtle-2013/labeled_blank_node_with_leading_underscore.ttl t/data/turtle-2013/labeled_blank_node_with_non_leading_extras.ttl t/data/turtle-2013/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.ttl t/data/turtle-2013/langtagged_LONG_with_subtag.nt t/data/turtle-2013/langtagged_LONG_with_subtag.ttl t/data/turtle-2013/langtagged_LONG.ttl t/data/turtle-2013/langtagged_non_LONG.nt t/data/turtle-2013/langtagged_non_LONG.ttl t/data/turtle-2013/lantag_with_subtag.nt t/data/turtle-2013/lantag_with_subtag.ttl t/data/turtle-2013/last.nt t/data/turtle-2013/last.ttl t/data/turtle-2013/LICENSE t/data/turtle-2013/literal_false.nt t/data/turtle-2013/literal_false.ttl t/data/turtle-2013/LITERAL_LONG1_ascii_boundaries.nt t/data/turtle-2013/LITERAL_LONG1_ascii_boundaries.ttl t/data/turtle-2013/LITERAL_LONG1_with_1_squote.nt t/data/turtle-2013/LITERAL_LONG1_with_1_squote.ttl t/data/turtle-2013/LITERAL_LONG1_with_2_squotes.nt t/data/turtle-2013/LITERAL_LONG1_with_2_squotes.ttl t/data/turtle-2013/LITERAL_LONG1_with_UTF8_boundaries.ttl t/data/turtle-2013/LITERAL_LONG1.ttl t/data/turtle-2013/LITERAL_LONG2_ascii_boundaries.nt t/data/turtle-2013/LITERAL_LONG2_ascii_boundaries.ttl t/data/turtle-2013/LITERAL_LONG2_with_1_squote.nt t/data/turtle-2013/LITERAL_LONG2_with_1_squote.ttl t/data/turtle-2013/LITERAL_LONG2_with_2_squotes.nt t/data/turtle-2013/LITERAL_LONG2_with_2_squotes.ttl t/data/turtle-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.nt t/data/turtle-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.ttl t/data/turtle-2013/LITERAL_LONG2_with_UTF8_boundaries.ttl t/data/turtle-2013/LITERAL_LONG2.ttl t/data/turtle-2013/literal_true.nt t/data/turtle-2013/literal_true.ttl t/data/turtle-2013/literal_with_BACKSPACE.nt t/data/turtle-2013/literal_with_BACKSPACE.ttl t/data/turtle-2013/literal_with_CARRIAGE_RETURN.nt t/data/turtle-2013/literal_with_CARRIAGE_RETURN.ttl t/data/turtle-2013/literal_with_CHARACTER_TABULATION.nt t/data/turtle-2013/literal_with_CHARACTER_TABULATION.ttl t/data/turtle-2013/literal_with_escaped_BACKSPACE.ttl t/data/turtle-2013/literal_with_escaped_CARRIAGE_RETURN.ttl t/data/turtle-2013/literal_with_escaped_CHARACTER_TABULATION.ttl t/data/turtle-2013/literal_with_escaped_FORM_FEED.ttl t/data/turtle-2013/literal_with_escaped_LINE_FEED.ttl t/data/turtle-2013/literal_with_FORM_FEED.nt t/data/turtle-2013/literal_with_FORM_FEED.ttl t/data/turtle-2013/literal_with_LINE_FEED.nt t/data/turtle-2013/literal_with_LINE_FEED.ttl t/data/turtle-2013/literal_with_numeric_escape4.nt t/data/turtle-2013/literal_with_numeric_escape4.ttl t/data/turtle-2013/literal_with_numeric_escape8.ttl t/data/turtle-2013/literal_with_REVERSE_SOLIDUS.nt t/data/turtle-2013/literal_with_REVERSE_SOLIDUS.ttl t/data/turtle-2013/LITERAL_with_UTF8_boundaries.nt t/data/turtle-2013/LITERAL1_all_controls.nt t/data/turtle-2013/LITERAL1_all_controls.ttl t/data/turtle-2013/LITERAL1_all_punctuation.nt t/data/turtle-2013/LITERAL1_all_punctuation.ttl t/data/turtle-2013/LITERAL1_ascii_boundaries.nt t/data/turtle-2013/LITERAL1_ascii_boundaries.ttl t/data/turtle-2013/LITERAL1_with_UTF8_boundaries.ttl t/data/turtle-2013/LITERAL1_with_UTF8_boundaries.ttl.new t/data/turtle-2013/LITERAL1.nt t/data/turtle-2013/LITERAL1.ttl t/data/turtle-2013/LITERAL2_ascii_boundaries.nt t/data/turtle-2013/LITERAL2_ascii_boundaries.ttl t/data/turtle-2013/LITERAL2_with_UTF8_boundaries.ttl t/data/turtle-2013/LITERAL2.ttl t/data/turtle-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nt t/data/turtle-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.ttl t/data/turtle-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nt t/data/turtle-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.ttl t/data/turtle-2013/localname_with_COLON.nt t/data/turtle-2013/localname_with_COLON.ttl t/data/turtle-2013/localName_with_leading_digit.nt t/data/turtle-2013/localName_with_leading_digit.ttl t/data/turtle-2013/localName_with_leading_underscore.nt t/data/turtle-2013/localName_with_leading_underscore.ttl t/data/turtle-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nt t/data/turtle-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.ttl t/data/turtle-2013/localName_with_non_leading_extras.nt t/data/turtle-2013/localName_with_non_leading_extras.ttl t/data/turtle-2013/manifest.ttl t/data/turtle-2013/negative_numeric.nt t/data/turtle-2013/negative_numeric.ttl t/data/turtle-2013/nested_blankNodePropertyLists.nt t/data/turtle-2013/nested_blankNodePropertyLists.ttl t/data/turtle-2013/nested_collection.nt t/data/turtle-2013/nested_collection.ttl t/data/turtle-2013/number_sign_following_localName.nt t/data/turtle-2013/number_sign_following_localName.ttl t/data/turtle-2013/number_sign_following_PNAME_NS.nt t/data/turtle-2013/number_sign_following_PNAME_NS.ttl t/data/turtle-2013/numeric_with_leading_0.nt t/data/turtle-2013/numeric_with_leading_0.ttl t/data/turtle-2013/objectList_with_two_objects.nt t/data/turtle-2013/objectList_with_two_objects.ttl t/data/turtle-2013/old_style_base.ttl t/data/turtle-2013/old_style_prefix.ttl t/data/turtle-2013/percent_escaped_localName.nt t/data/turtle-2013/percent_escaped_localName.ttl t/data/turtle-2013/positive_numeric.nt t/data/turtle-2013/positive_numeric.ttl t/data/turtle-2013/predicateObjectList_with_two_objectLists.nt t/data/turtle-2013/predicateObjectList_with_two_objectLists.ttl t/data/turtle-2013/prefix_only_IRI.ttl t/data/turtle-2013/prefix_reassigned_and_used.nt t/data/turtle-2013/prefix_reassigned_and_used.ttl t/data/turtle-2013/prefix_with_non_leading_extras.ttl t/data/turtle-2013/prefix_with_PN_CHARS_BASE_character_boundaries.ttl t/data/turtle-2013/prefixed_IRI_object.ttl t/data/turtle-2013/prefixed_IRI_predicate.ttl t/data/turtle-2013/prefixed_name_datatype.ttl t/data/turtle-2013/README t/data/turtle-2013/repeated_semis_at_end.ttl t/data/turtle-2013/repeated_semis_not_at_end.nt t/data/turtle-2013/repeated_semis_not_at_end.ttl t/data/turtle-2013/reserved_escaped_localName.nt t/data/turtle-2013/reserved_escaped_localName.ttl t/data/turtle-2013/sole_blankNodePropertyList.ttl t/data/turtle-2013/SPARQL_style_base.ttl t/data/turtle-2013/SPARQL_style_prefix.ttl t/data/turtle-2013/turtle-eval-bad-01.ttl t/data/turtle-2013/turtle-eval-bad-02.ttl t/data/turtle-2013/turtle-eval-bad-03.ttl t/data/turtle-2013/turtle-eval-bad-04.ttl t/data/turtle-2013/turtle-eval-struct-01.nt t/data/turtle-2013/turtle-eval-struct-01.ttl t/data/turtle-2013/turtle-eval-struct-02.nt t/data/turtle-2013/turtle-eval-struct-02.ttl t/data/turtle-2013/turtle-subm-01.nt t/data/turtle-2013/turtle-subm-01.ttl t/data/turtle-2013/turtle-subm-02.nt t/data/turtle-2013/turtle-subm-02.ttl t/data/turtle-2013/turtle-subm-03.nt t/data/turtle-2013/turtle-subm-03.ttl t/data/turtle-2013/turtle-subm-04.nt t/data/turtle-2013/turtle-subm-04.ttl t/data/turtle-2013/turtle-subm-05.nt t/data/turtle-2013/turtle-subm-05.ttl t/data/turtle-2013/turtle-subm-06.nt t/data/turtle-2013/turtle-subm-06.ttl t/data/turtle-2013/turtle-subm-07.nt t/data/turtle-2013/turtle-subm-07.ttl t/data/turtle-2013/turtle-subm-08.nt t/data/turtle-2013/turtle-subm-08.ttl t/data/turtle-2013/turtle-subm-09.nt t/data/turtle-2013/turtle-subm-09.ttl t/data/turtle-2013/turtle-subm-10.nt t/data/turtle-2013/turtle-subm-10.ttl t/data/turtle-2013/turtle-subm-11.nt t/data/turtle-2013/turtle-subm-11.ttl t/data/turtle-2013/turtle-subm-12.nt t/data/turtle-2013/turtle-subm-12.ttl t/data/turtle-2013/turtle-subm-13.nt t/data/turtle-2013/turtle-subm-13.ttl t/data/turtle-2013/turtle-subm-14.nt t/data/turtle-2013/turtle-subm-14.ttl t/data/turtle-2013/turtle-subm-15.nt t/data/turtle-2013/turtle-subm-15.ttl t/data/turtle-2013/turtle-subm-16.nt t/data/turtle-2013/turtle-subm-16.ttl t/data/turtle-2013/turtle-subm-17.nt t/data/turtle-2013/turtle-subm-17.ttl t/data/turtle-2013/turtle-subm-18.nt t/data/turtle-2013/turtle-subm-18.ttl t/data/turtle-2013/turtle-subm-19.nt t/data/turtle-2013/turtle-subm-19.ttl t/data/turtle-2013/turtle-subm-20.nt t/data/turtle-2013/turtle-subm-20.ttl t/data/turtle-2013/turtle-subm-21.nt t/data/turtle-2013/turtle-subm-21.ttl t/data/turtle-2013/turtle-subm-22.nt t/data/turtle-2013/turtle-subm-22.ttl t/data/turtle-2013/turtle-subm-23.nt t/data/turtle-2013/turtle-subm-23.ttl t/data/turtle-2013/turtle-subm-24.nt t/data/turtle-2013/turtle-subm-24.ttl t/data/turtle-2013/turtle-subm-25.nt t/data/turtle-2013/turtle-subm-25.ttl t/data/turtle-2013/turtle-subm-26.nt t/data/turtle-2013/turtle-subm-26.ttl t/data/turtle-2013/turtle-subm-27.nt t/data/turtle-2013/turtle-subm-27.ttl t/data/turtle-2013/turtle-syntax-bad-base-01.ttl t/data/turtle-2013/turtle-syntax-bad-base-02.ttl t/data/turtle-2013/turtle-syntax-bad-base-03.ttl t/data/turtle-2013/turtle-syntax-bad-blank-label-dot-end.ttl t/data/turtle-2013/turtle-syntax-bad-esc-01.ttl t/data/turtle-2013/turtle-syntax-bad-esc-02.ttl t/data/turtle-2013/turtle-syntax-bad-esc-03.ttl t/data/turtle-2013/turtle-syntax-bad-esc-04.ttl t/data/turtle-2013/turtle-syntax-bad-kw-01.ttl t/data/turtle-2013/turtle-syntax-bad-kw-02.ttl t/data/turtle-2013/turtle-syntax-bad-kw-03.ttl t/data/turtle-2013/turtle-syntax-bad-kw-04.ttl t/data/turtle-2013/turtle-syntax-bad-kw-05.ttl t/data/turtle-2013/turtle-syntax-bad-lang-01.ttl t/data/turtle-2013/turtle-syntax-bad-LITERAL2_with_langtag_and_datatype.ttl t/data/turtle-2013/turtle-syntax-bad-ln-dash-start.ttl t/data/turtle-2013/turtle-syntax-bad-ln-escape-start.ttl t/data/turtle-2013/turtle-syntax-bad-ln-escape.ttl t/data/turtle-2013/turtle-syntax-bad-missing-ns-dot-end.ttl t/data/turtle-2013/turtle-syntax-bad-missing-ns-dot-start.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-01.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-02.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-03.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-04.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-05.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-06.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-07.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-08.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-09.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-10.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-11.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-12.ttl t/data/turtle-2013/turtle-syntax-bad-n3-extras-13.ttl t/data/turtle-2013/turtle-syntax-bad-ns-dot-end.ttl t/data/turtle-2013/turtle-syntax-bad-ns-dot-start.ttl t/data/turtle-2013/turtle-syntax-bad-num-01.ttl t/data/turtle-2013/turtle-syntax-bad-num-02.ttl t/data/turtle-2013/turtle-syntax-bad-num-03.ttl t/data/turtle-2013/turtle-syntax-bad-num-04.ttl t/data/turtle-2013/turtle-syntax-bad-num-05.ttl t/data/turtle-2013/turtle-syntax-bad-number-dot-in-anon.ttl t/data/turtle-2013/turtle-syntax-bad-pname-01.ttl t/data/turtle-2013/turtle-syntax-bad-pname-02.ttl t/data/turtle-2013/turtle-syntax-bad-pname-03.ttl t/data/turtle-2013/turtle-syntax-bad-prefix-01.ttl t/data/turtle-2013/turtle-syntax-bad-prefix-02.ttl t/data/turtle-2013/turtle-syntax-bad-prefix-03.ttl t/data/turtle-2013/turtle-syntax-bad-prefix-04.ttl t/data/turtle-2013/turtle-syntax-bad-prefix-05.ttl t/data/turtle-2013/turtle-syntax-bad-string-01.ttl t/data/turtle-2013/turtle-syntax-bad-string-02.ttl t/data/turtle-2013/turtle-syntax-bad-string-03.ttl t/data/turtle-2013/turtle-syntax-bad-string-04.ttl t/data/turtle-2013/turtle-syntax-bad-string-05.ttl t/data/turtle-2013/turtle-syntax-bad-string-06.ttl t/data/turtle-2013/turtle-syntax-bad-string-07.ttl t/data/turtle-2013/turtle-syntax-bad-struct-01.ttl t/data/turtle-2013/turtle-syntax-bad-struct-02.ttl t/data/turtle-2013/turtle-syntax-bad-struct-03.ttl t/data/turtle-2013/turtle-syntax-bad-struct-04.ttl t/data/turtle-2013/turtle-syntax-bad-struct-05.ttl t/data/turtle-2013/turtle-syntax-bad-struct-06.ttl t/data/turtle-2013/turtle-syntax-bad-struct-07.ttl t/data/turtle-2013/turtle-syntax-bad-struct-08.ttl t/data/turtle-2013/turtle-syntax-bad-struct-09.ttl t/data/turtle-2013/turtle-syntax-bad-struct-10.ttl t/data/turtle-2013/turtle-syntax-bad-struct-11.ttl t/data/turtle-2013/turtle-syntax-bad-struct-12.ttl t/data/turtle-2013/turtle-syntax-bad-struct-13.ttl t/data/turtle-2013/turtle-syntax-bad-struct-14.ttl t/data/turtle-2013/turtle-syntax-bad-struct-15.ttl t/data/turtle-2013/turtle-syntax-bad-struct-16.ttl t/data/turtle-2013/turtle-syntax-bad-struct-17.ttl t/data/turtle-2013/turtle-syntax-bad-uri-01.ttl t/data/turtle-2013/turtle-syntax-bad-uri-02.ttl t/data/turtle-2013/turtle-syntax-bad-uri-03.ttl t/data/turtle-2013/turtle-syntax-bad-uri-04.ttl t/data/turtle-2013/turtle-syntax-bad-uri-05.ttl t/data/turtle-2013/turtle-syntax-base-01.ttl t/data/turtle-2013/turtle-syntax-base-02.ttl t/data/turtle-2013/turtle-syntax-base-03.ttl t/data/turtle-2013/turtle-syntax-base-04.ttl t/data/turtle-2013/turtle-syntax-blank-label.ttl t/data/turtle-2013/turtle-syntax-bnode-01.ttl t/data/turtle-2013/turtle-syntax-bnode-02.ttl t/data/turtle-2013/turtle-syntax-bnode-03.ttl t/data/turtle-2013/turtle-syntax-bnode-04.ttl t/data/turtle-2013/turtle-syntax-bnode-05.ttl t/data/turtle-2013/turtle-syntax-bnode-06.ttl t/data/turtle-2013/turtle-syntax-bnode-07.ttl t/data/turtle-2013/turtle-syntax-bnode-08.ttl t/data/turtle-2013/turtle-syntax-bnode-09.ttl t/data/turtle-2013/turtle-syntax-bnode-10.ttl t/data/turtle-2013/turtle-syntax-datatypes-01.ttl t/data/turtle-2013/turtle-syntax-datatypes-02.ttl t/data/turtle-2013/turtle-syntax-file-01.ttl t/data/turtle-2013/turtle-syntax-file-02.ttl t/data/turtle-2013/turtle-syntax-file-03.ttl t/data/turtle-2013/turtle-syntax-kw-01.ttl t/data/turtle-2013/turtle-syntax-kw-02.ttl t/data/turtle-2013/turtle-syntax-kw-03.ttl t/data/turtle-2013/turtle-syntax-lists-01.ttl t/data/turtle-2013/turtle-syntax-lists-02.ttl t/data/turtle-2013/turtle-syntax-lists-03.ttl t/data/turtle-2013/turtle-syntax-lists-04.ttl t/data/turtle-2013/turtle-syntax-lists-05.ttl t/data/turtle-2013/turtle-syntax-ln-colons.ttl t/data/turtle-2013/turtle-syntax-ln-dots.ttl t/data/turtle-2013/turtle-syntax-ns-dots.ttl t/data/turtle-2013/turtle-syntax-number-01.ttl t/data/turtle-2013/turtle-syntax-number-02.ttl t/data/turtle-2013/turtle-syntax-number-03.ttl t/data/turtle-2013/turtle-syntax-number-04.ttl t/data/turtle-2013/turtle-syntax-number-05.ttl t/data/turtle-2013/turtle-syntax-number-06.ttl t/data/turtle-2013/turtle-syntax-number-07.ttl t/data/turtle-2013/turtle-syntax-number-08.ttl t/data/turtle-2013/turtle-syntax-number-09.ttl t/data/turtle-2013/turtle-syntax-number-10.ttl t/data/turtle-2013/turtle-syntax-number-11.ttl t/data/turtle-2013/turtle-syntax-pname-esc-01.ttl t/data/turtle-2013/turtle-syntax-pname-esc-02.ttl t/data/turtle-2013/turtle-syntax-pname-esc-03.ttl t/data/turtle-2013/turtle-syntax-prefix-01.ttl t/data/turtle-2013/turtle-syntax-prefix-02.ttl t/data/turtle-2013/turtle-syntax-prefix-03.ttl t/data/turtle-2013/turtle-syntax-prefix-04.ttl t/data/turtle-2013/turtle-syntax-prefix-05.ttl t/data/turtle-2013/turtle-syntax-prefix-06.ttl t/data/turtle-2013/turtle-syntax-prefix-07.ttl t/data/turtle-2013/turtle-syntax-prefix-08.ttl t/data/turtle-2013/turtle-syntax-prefix-09.ttl t/data/turtle-2013/turtle-syntax-str-esc-01.ttl t/data/turtle-2013/turtle-syntax-str-esc-02.ttl t/data/turtle-2013/turtle-syntax-str-esc-03.ttl t/data/turtle-2013/turtle-syntax-string-01.ttl t/data/turtle-2013/turtle-syntax-string-02.ttl t/data/turtle-2013/turtle-syntax-string-03.ttl t/data/turtle-2013/turtle-syntax-string-04.ttl t/data/turtle-2013/turtle-syntax-string-05.ttl t/data/turtle-2013/turtle-syntax-string-06.ttl t/data/turtle-2013/turtle-syntax-string-07.ttl t/data/turtle-2013/turtle-syntax-string-08.ttl t/data/turtle-2013/turtle-syntax-string-09.ttl t/data/turtle-2013/turtle-syntax-string-10.ttl t/data/turtle-2013/turtle-syntax-string-11.ttl t/data/turtle-2013/turtle-syntax-struct-01.ttl t/data/turtle-2013/turtle-syntax-struct-02.ttl t/data/turtle-2013/turtle-syntax-struct-03.ttl t/data/turtle-2013/turtle-syntax-struct-04.ttl t/data/turtle-2013/turtle-syntax-struct-05.ttl t/data/turtle-2013/turtle-syntax-uri-01.ttl t/data/turtle-2013/turtle-syntax-uri-02.ttl t/data/turtle-2013/turtle-syntax-uri-03.ttl t/data/turtle-2013/turtle-syntax-uri-04.ttl t/data/turtle-2013/two_LITERAL_LONG2s.nt t/data/turtle-2013/two_LITERAL_LONG2s.ttl t/data/turtle-2013/underscore_in_localName.nt t/data/turtle-2013/underscore_in_localName.ttl t/data/turtle/bad-00.ttl t/data/turtle/bad-01.ttl t/data/turtle/bad-02.ttl t/data/turtle/bad-03.ttl t/data/turtle/bad-04.ttl t/data/turtle/bad-05.ttl t/data/turtle/bad-06.ttl t/data/turtle/bad-07.ttl t/data/turtle/bad-08.ttl t/data/turtle/bad-09.ttl t/data/turtle/bad-10.ttl t/data/turtle/bad-11.ttl t/data/turtle/bad-12.ttl t/data/turtle/bad-13.ttl t/data/turtle/bad-14.ttl t/data/turtle/rdf-schema.out t/data/turtle/rdf-schema.ttl t/data/turtle/rdfq-results.out t/data/turtle/rdfq-results.ttl t/data/turtle/rdfs-namespace.out t/data/turtle/rdfs-namespace.ttl t/data/turtle/test-00.out t/data/turtle/test-00.ttl t/data/turtle/test-01.out t/data/turtle/test-01.ttl t/data/turtle/test-02.out t/data/turtle/test-02.ttl t/data/turtle/test-03.out t/data/turtle/test-03.ttl t/data/turtle/test-04.out t/data/turtle/test-04.ttl t/data/turtle/test-05.out t/data/turtle/test-05.ttl t/data/turtle/test-06.out t/data/turtle/test-06.ttl t/data/turtle/test-07.out t/data/turtle/test-07.ttl t/data/turtle/test-08.out t/data/turtle/test-08.ttl t/data/turtle/test-09.out t/data/turtle/test-09.ttl t/data/turtle/test-10.out t/data/turtle/test-10.ttl t/data/turtle/test-11.out t/data/turtle/test-11.ttl t/data/turtle/test-12.out t/data/turtle/test-12.ttl t/data/turtle/test-13.out t/data/turtle/test-13.ttl t/data/turtle/test-17.out t/data/turtle/test-17.ttl t/data/turtle/test-18.out t/data/turtle/test-18.ttl t/data/turtle/test-19.out t/data/turtle/test-19.ttl t/data/turtle/test-20.out t/data/turtle/test-20.ttl t/data/turtle/test-21.out t/data/turtle/test-21.ttl t/data/turtle/test-22.out t/data/turtle/test-22.ttl t/data/turtle/test-23.out t/data/turtle/test-23.ttl t/data/turtle/test-24.out t/data/turtle/test-24.ttl t/data/turtle/test-25.out t/data/turtle/test-25.ttl t/exporter-csv.t t/graph-subgraphs.t t/graph.t t/iterator-bindings-join.t t/iterator-bindings-materialize.t t/iterator-bindings.t t/iterator-boolean.t t/iterator-graph-materialize.t t/iterator-graph.t t/iterator-materialized.t t/iterator-thaw.t t/iterator.t t/model-boundeddescription.t t/model-dataset.t t/model-filter.t t/model-logger.t t/model-temporary.t t/model-union.t t/model.t t/namespace-export.t t/namespace-uri.t t/namespacemap.t t/node-literal.t t/node-resource-i18n.t t/node-serialization.t t/node.t t/parser-nquads.t t/parser-ntriples.t t/parser-rdfa.t t/parser-rdfjson.t t/parser-rdfxml-w3c.t t/parser-redland.t t/parser-trig.t t/parser-turtle-2013.t t/parser-turtle.t t/parser.t t/pattern.t t/remove-list.t t/serializer-nquads.t t/serializer-ntriples-canonical.t t/serializer-ntriples.t t/serializer-rdfjson.t t/serializer-rdfpatch.t t/serializer-rdfxml.t t/serializer-trig.t t/serializer-tsv.t t/serializer-turtle.t t/serializer.t t/statement-serialization.t t/statement.t t/store-config.t t/store-context.t t/store-dbi-mysql.t t/store-dbi-pg.t t/store-dbi.t t/store-hexastore-pattern.t t/store-hexastore-storable.t t/store-hexastore-triplestore.t t/store-hexastore.t t/store-memory.t t/store-redis.t t/store-triple_sql.t t/store.t t/syntax.t xt/00_compile.t xt/data/turtle/test-14.out xt/data/turtle/test-14.ttl xt/data/turtle/test-15.out xt/data/turtle/test-15.ttl xt/data/turtle/test-16.out xt/data/turtle/test-16.ttl xt/parser-trig-2013.t xt/pod-coverage.t xt/pod.t xt/store-dydra.t xt/store-redland.t xt/store-sparql.t RDF-Trine-1.007/META.yml000644 000765 000024 00000002533 12171744431 014562 0ustar00gregstaff000000 000000 --- abstract: 'An RDF Framework for Perl' author: - 'Gregory Todd Williams C<< >>' - 'Gregory Todd Williams ' build_requires: ExtUtils::MakeMaker: 6.59 Test::Exception: 0 Test::JSON: 0 Test::More: 0.88 TryCatch: 0 configure_requires: ExtUtils::MakeMaker: 6.59 distribution_type: module dynamic_config: 1 generated_by: 'Module::Install version 1.06' license: perl meta-spec: url: http://module-build.sourceforge.net/META-spec-v1.4.html version: 1.4 name: RDF-Trine no_index: directory: - examples - inc - t - xt recommends: Term::ANSIColor: 0 XML::LibXML: 1.7 requires: Algorithm::Combinatorics: 0 DBD::SQLite: 1.14 DBI: 0 DBIx::Connector: 0 Data::UUID: 0 Digest::MD5: 0 Digest::SHA: 0 Error: 0 HTTP::Negotiate: 0 JSON: 2 LWP::UserAgent: 0 List::Util: 0 Log::Log4perl: 0 Math::BigInt: 0 Module::Load::Conditional: 0.38 Moose: 2 MooseX::ArrayRef: 0 Scalar::Util: 1.24 Set::Scalar: 0 Storable: 0 Text::CSV: 0 Text::Table: 0 Time::HiRes: 0 URI: 1.52 XML::CommonNS: 0.04 XML::Namespace: 0 XML::SAX: 0.96 perl: 5.10.0 resources: bugtracker: https://github.com/kasei/perlrdf/issues homepage: http://search.cpan.org/dist/RDF-Trine/ license: http://dev.perl.org/licenses/ repository: http://github.com/kasei/perlrdf/ version: 1.007 RDF-Trine-1.007/README000644 000765 000024 00000146502 12171744363 014202 0ustar00gregstaff000000 000000 RDF::Trine - An RDF Framework for Perl. RDF::Trine provides an RDF framework with an emphasis on extensibility, API stability, and the presence of a test suite. The package consists of several components: * RDF::Trine::Model - RDF model providing access to a triple store. * RDF::Trine::Parser - Native RDF parsers (RDF/XML, RDFa, Turtle, RDF/JSON, TriG, N-Triples, and N-Quads). * RDF::Trine::Serializer, a set of native RDF serializers for RDF/XML, Turtle, RDF/JSON, N-Triples, Canonical N-Triples, and N-Quads. * RDF::Trine::Store::DBI - A triple store for MySQL and SQLite, based on the Redland schema. * RDF::Trine::Iterator - Iterator classes for variable bindings and RDF statements, used by RDF::Trine::Store, RDF::Trine::Model, and RDF::Query. * RDF::Trine::Namespace - A convenience class for easily constructing RDF node objects from URI namespaces. REQUIREMENTS To install RDF::Trine you'll need the following perl modules installed: * Algorithm::Combinatorics * Data::UUID * DBI * DBIx::Connector * DBD::SQLite * Digest::MD5 * Error * HTTP::Negotiate * JSON * LWP::UserAgent * List::Util * List::MoreUtils * Log::Log4perl * Math::BigInt * Scalar::Util * Set::Scalar * Text::CSV * Text::Table * Time::HiRes * Unicode::Escape * Unicode::String * URI * XML::CommonNS * XML::Namespace * XML::SAX * XML::LibXML * XML::LibXML::SAX The following additional modules are optional: * DBD::Pg * DBD::Mysql * Test::More * Test::Exception * RDF::RDFa::Parser INSTALLATION To install, run: perl Makefile.PL make make test make install VERSION HISTORY Version 1.007 (2013-07-18) * BUG FIXES Update Turtle lexer to look for whitespace (instead of a word break) after 'a' when looking for the A token. Work around a XML::Namespace bug in RDF::Trine::Namespace->uri. Fixed xt/pod-coverage.t to avoid checking modules which fail to load. * NEW FEATURES Added initial implementation of TriG serializer. Added implementation of the RDF Patch exporter and serializer, and ability to serialize model changes in RDF Patch format. * ENHANCEMENTS Added ability to configure the LWP::UserAgent used through the RDF::Trine framework. Updated Turtle and TriG parsers and test suites to track W3C standardization work. Update bin/turtle_parse.pl to output N-Quads when the input format contains quads. Update RDF::Trine::Parser->parse_url_into_model to accept a base argument. Allow lowercase hex codepoint values in N-Triples escapes in RDF::Trine::Parser::NTriples. * OTHER Use the :encoding(UTF-8) IO layer where previously just :utf8 was used. s/exists/defined/ in RDF::Trine::Parser->parse_url_into_model. Update the characters that may be used in blank node identifiers in RDF::Trine::Node::Blank->new. Added POD for RDF::Trine::Statement::Quad->graph (alias for ->context). Updated RDF::Trine::Store::Memory to generate SHA digests (for ETag use) based on bytes, not unicode strings. Add RDF::Trine::Statement::Quad->graph as an alias for RDF::Trine::Statement::Quad->context. Updated t/serializer-trig.t to load RDF::Trine before any sub-modules. Added Test::Compile developer test xt/00_compile.t. Version 1.006 (2013-07-01) * API CHANGES Punycode URIs are now left as-is (without decoding) in RDF::Trine::Node::Resource->new. * BUG FIXES Fix handling of IRIs with codepoints > 127 in RDF::Trine::Node::Resource (GitHub issue #85). Remove empty-string default in SQL schema of RDF::Trine::Store::DBI::mysql and update code to compensate. Remove bad calls to encode_utf8 in sse and as_ntriples methods of RDF::Trine::Node::Resource. * NEW FEATURES Split RDF::Trine::Iterator->from_string into from_string and from_bytes. * ENHANCEMENTS Normalize IRI values before serialization in RDF::Trine::Node::Resource->as_ntriples and RDF::Trine::Node::Resource->compare. * OTHER Update RDF::Trine::Serializer::NTriples::Canonical to use $node->as_ntriples instead of $node->sse. Add documentation noting that punycode will be decoded as a part of N-Triples serialization. Change use of utf8::all to utf8 in t/node.t. Mark TryCatch as a build_requires instead of a requires module in Makefile.PL. Version 1.005 (2013-05-27) * API CHANGES Throw exception in RDF::Trine::Node::Resource->new when IRI contains bad characters. * BUG FIXES Fix RDF::Trine::Parser::RDFXML to UTF-8 encode strings before calling into the SAX parser (related to github pull request #82). Fixed typo in exception throwing in RDF::Trine::Parser::TriG. Fixed mistaken use of 'otherwise' exception handler in turtle_tokenize.pl. * ENHANCEMENTS Updated Turtle parser to support the Turtle 2013 draft syntax. Improved error handling in RDF::Trine::Parser->parse_url_into_model. Implemented streaming version of RDF::Trine::Parser::RDFXML->parse_file using parse_file from XML::SAX. * OTHER Removed use of given/when statements to make perl 5.18 happy. Silence tracing code in RDF::Trine::Store::Hexastore. Added TryCatch to list of required modules. Changed key names and layout of nodemap data in Redis store. Version 1.004 (2013-03-02) * API CHANGES Changed RT:spog:* keys to be a hash with node ID data for each quad position in Redis store. * ENHANCEMENTS Treat data passed into parsers as characters (github pull request #82 from Tony Cook). Improve the error message when trying to parse an empty RDF/XML string (Kjetil Kjernsmo). Added get_graphs as an alias for get_contexts in RDF::Trine::Model and RDF:Trine::Model::Dataset. * OTHER Test to see if DBD::Pg is installed in test suite (github pull request #78 from Kjetil Kjernsmo). Added turtle command line tools turtle_parse.pl, turtle_benchmark.pl, and turtle_tokenize.pl. Version 1.003 (2012-12-22) * BUG FIXES Fixes to code that depended on hash key ordering. Fixed test of error conditions in RDF::Trine::Parser->parse_url_into_model. Fixed bug in RDF::Trine::Parser::RDFXML that caused fatal errors on malformed input instead of throwing RDF::Trine::Error exceptions. Fixed RDF::Trine::Parser::Turtle::Lexer->check_for_bom to handle zero-length input. * NEW FEATURES Added prefix_for and abbreviate methods to RDF::Trine::NamespaceMap (patch from Dorian Taylor) * OTHER Require Scalar::Util 1.24. Re-added RDF::Trine::Parser::Turtle->parse_node method. Version 1.002 (2012-10-20) * OTHER Require Scalar::Util version 1.23. Version 1.001 (2012-10-05) * BUG FIXES Fixed bareword bug in RDF::Trine::Parser when UUID::Tiny is not available. * ENHANCEMENTS Replaced old Turtle and TriG parsers with new streaming implementations. Added RDF::Trine::Node::Literal->canonicalize method. Updated RDF::Trine::Parser::Redland to construct a new parser object on each parse (avoiding a bug in redland). Applied partial patch to "fix interaction with HTML::Data::Parser" (from Dorian Taylor; commit 9b713b23b6). * OTHER Added Moose and MooseX::ArrayRef to prerequisites list. Updated code style to work with Perl::Critic core policies. Added POD to RDF::Trine and RDF::Trine::Store::DBI (based on patch from Evan Carew). Updated required version of perl to 5.10. Silenced undefined warnings in RDF::Trine::Parser::Turtle::Lexer. Silenced warning of cartesian joins in RDF::Trine::Store::Hexastore. Version 1.000 (2012-06-29) * API CHANGES Removed RDF::Trine methods count, add_extra_result_data, extra_result_data. Removed support for extra data serialized in SPARQL/XML result format link tags. Made Literal and Resource node constructors throw exception when passed undef lexical value. * BUG FIXES Fixed parsing of backslash escapes in Turtle quoted literals (from Toby Inkster via github pull request #63). Rolled back attempted optimization of bulk ops calls (which broke the code). Fixed etag bug in RDF::Trine::Store::Memory. * NEW FEATURES Added RDF::Trine::Model->add_iterator method. * OTHER Fixed miscellaneous typos (from Evan Carew). Updated bug reporting details in BUGS POD section. Updated documentation in several classes. Removed redundant documentation in RDF::Trine::Parser. Added Redland test for UTF8 (from Kjetil Kjernsmo). Added two tests for concat graph iterators (from Kjetil Kjernsmo). Fix usage of materialized iterators in t/iterator-graph.t (from Kjetil Kjernsmo). Document the extends option to negotiate in the serializer (from KjetilK). Document RDFTRINE_NO_REDLAND (from KjetilK). Version 0.140 (2012-05-08) * API CHANGES Removed default get_pattern implementation in RDF::Trine::Store. * BUG FIXES Added missing import of looks_like_number function in RDF::Trine::Node::Literal. * ENHANCEMENTS Added RDF::Trine::Pattern->sort_for_join_variables method to prevent unnecessary cartesian joins. Added optional content_cb callback argument to RDF::Trine::Parser->parse_url_into_model. Version 0.139 (2012-04-11) * API CHANGES Made server a required configuration key in RDF::Trine::Store::Redis. * BUG FIXES Fixed interaction of peek() and finished() in RDF::Trine::Iterator. Fixed use of iterator finished method in RDF::Trine::Iterator::Bindings->as_json. Fixed use of iterator finished method in RDF::Trine::Store::Hexastore->get_pattern. Fixed bug when RDF::Trine::Iterator->finished is called before an (empty) iterator is used. Fixed fallback parsing bug in RDF::Trine::Parser->parse_url_into_model. Fixed PostgreSQL capitalization bug (patch from https://rt.cpan.org/Ticket/Display.html?id=71890 applied by Kjetil Kjernsmo). * NEW FEATURES Added RDF::Trine::Serializer::NQuads->statement_as_string method. * ENHANCEMENTS Added 'scoped_namespaces' constructor argument to RDF::Trine::Serializer::RDFXML to serialize only necessary namespace declarations. (github issue 33). Initialize Log4perl only if it isn't initialized already (pull request 57 from kba). * OTHER Fixed expected result count in Test::RDF::Trine::Store->get_pattern_tests. Simplified code in t/store-hexastore-pattern.t. Added tests for RDF::Trine::Iterator->peek. Adding some get_pattern tests to the Store tests (Kjetil Kjernsmo). Replaced references to RDFQUERY_NO_REDLAND environment variable with proper RDFTRINE_NO_REDLAND. Allow suppressing RDF::Redland use if the RDFQUERY_NO_REDLAND environment variable is set. Removed erroneous copies of RDF::Trine::Store::DBI::Pg->init method. Add pg tests (Kjetil Kjernsmo). Version 0.138 (2012-01-25) * BUG FIXES Fixed error-handling syntax bug in RDF::Trine::Parser->parse_url_into_model. * NEW FEATURES Make Hexastore support etag. * ENHANCEMENTS Croak rather than die in some places and use logdie in one place. * OTHER Fix documentation typos from fschlich@zedat.fu-berlin.de. Improved performance of Redis store with use of variadic functions. Added store tests for literals including utf-8 handling and languages. Version 0.137 (2011-12-20) * API CHANGES Trying to instantiate a resource node with the Nil IRI results in the Nil node object. * BUG FIXES Fixed unicode escaping issues in RDF::Trine::Serializer::Turtle (bugreport from nichtich <4EB7B9BE.8000205@gbv.de>). Fixed RDF::Trine::Parser::Turtle to properly unescape percent-encoded URIs. Fixed RDF::Trine::Statement->from_redland to properly unescape percent-encoded URIs. Only set parser metadata if RDF::RDFa::Parser is available (github issue 32 from nichtich). Added PostgreSQL-specific init method to handle case sensitivity of table names (RT#71890 from John Nicholas Whitley). * NEW FEATURES Implement RDF::Trine::Store::Hexastore->nuke (KjetilK). Added initial code for a Redis-based store. Added serialize_node method to RDF::Trine::Serializer::NTriples and RDF::Trine::Serializer::Turtle. Added parse_node method to RDF::Trine::Parser::NTriples. * ENHANCEMENTS Create a fallback-implementation of remove_statements in Store.pm (KjetilK). Updated RDF::Trine::Graph to use Algorithm::Combinatorics for memory/speed improvements (instead of Math::Combinatorics). * OTHER Support triple-only stores in the test suite (patches from KjetilK). Added missing POD to RDF::Trine::Store::DBI::Pg and RDF::Trine::Store::Redis. Check the Perl version when running Tiny::UUID (KjetilK). RDF::Trine::Parser now attempts to use Data::UUID before UUID::Tiny in bnode ID generation (based on test failures). Version 0.136 (2011-10-19) * API CHANGES Removed RDF::Trine::Iterator::SAXHandler->rate method and dropped dependency on Time::HiRes. Consolidated bnode prefix handling in parser classes, adding support for UUID::Tiny. * BUG FIXES Fixed escaping of URIs in rdf:about attributes (patch from SADI Framework). Return an empty string instead of undef in RDF::Trine::Iterator->format_node_xml. Fixed RDF::Trine::Store::SPARQL->count_statements handling of variables. Fixed turtle serializer to check if numerics are in canonical form. Fixed mysql schema to quote index names that might contain reserved characters. Fix RDF::Trine::Model->get_statements to throw an error when called with arguments that aren't either undef or node objects. Fixed titlecase of table reference in RDF::Trine::Store::DBI::mysql->init. Fixed bug in use of UUID::Tiny::UUID_V1 bareword in RDF::Trine::Parser->new_bnode_prefix. * NEW FEATURES Initial support for using Dydra as a store. Added RDF::Trine::Parser::Turtle->parse_node method. Added RDF::Trine::Node::Literal->is_canonical_lexical_form. Made RDF::Trine::Serializer::NTriples->statement_as_string a public method. RDF::Trine::Parser->parse_url_into_model now fill properly fall back on guesswork when media-type parsing fails. Moved as_hashref functionality from RDF::Trine::Model to RDF::Trine::Iterator::Graph. Added TSV serializer. * ENHANCEMENTS Allow empty namespace prefix in RDF::Trine::NamespaceMap (patch from Jakob Voss). Added text/html media type, and added use of Module::Load::Conditional in RDF::Trine::Parser::RDFa. Added support of SPARQL endpoints with URL parameters like Virtuoso's 'http://example.org:8890/sparql?default-graph-uri=...' (patch from Jakob Voss). Updated RDF::Trine::Store::DBI to use DBIx::Connector. * OTHER Added option to sleep after each store update in Test::RDF::Trine::Store. Fixed code in RDF::Trine::Store::SPARQL that was causing a warning when a variable name was redefined. Updated RDF::Trine::Store::DBI::mysql->_add_node to return the node hash value. Stop RDF::Trine::Store::DBI->add_statement from unnecessarily hashing nodes multiple times (patch from tobyink). Moved redland store tests to developer xt directory. Updated t/serializer-turtle.t to be more accepting of stores returning data in varying orders. Removed 'or die' conditional from store tests. Changed test endpoint from kasei.us to myrdf.us. Added simple store tests for bulk_ops in Test::RDF::Trine::Store. Removed heavy dependency on DBI store in test cases. Require RDF::Redland 1.0.7.1 in xt/store-redland.t. Add missing use of RDF::Trine::Statement::Quad. Conditionally load DBI store, and return Memory store from temporary_store(). Removed dependency on Unicode::Escape. Made XML::LibXML an optional dependency (RDF/XML parser will not perform c14n if it is not installed) Updated RDF::Trine::Store::Memory to use Digest::SHA instead of Digest::MD5. Removed depedency on List::MoreUtils. Added POD for Test::RDF::Trine::Store->update_sleep. Added POD for RDF::Trine::Serializer::NTriples->statement_as_string. Removed depedency on Unicode::String and List::MoreUtils. Removed unnecessary use statements. Version 0.135 (2011-04-30) * API CHANGES Globally changed 'base' to 'base_uri' in Trine code and API. Changed name of redland rdfa parser to 'librdfa' and removed associated media type and file extensions (due to librdfa bugs). * BUG FIXES Fixed bug in RDF::Trine::Store::DBI::mysql that was causing init() to remove existing data. * NEW FEATURES Added RDF::Trine::Store::DBI->nuke method for removing store data. Added RDF::Trine::Model->remove_list method (patch from tobyink). Added RDF::Trine::Iterator->seen_count method. Added RDF::Trine::Model->get_sparql delegation method. * ENHANCEMENTS Updated RDF::Trine::Parser->parse_url_into_model to be better at guessing media types for file: URIs. Updated RDF::Trine::Parser::Redland to allow the $base argument to be a URI object. Updated RDF::Trine::Parser->parse_url_into_model to not catch and hide exceptions thrown from calls to parse_into_model. Updated bin/srx2csv to handle unbound variables in results. Added support for 'storeclass' key in RDF::Trine::Store->new_with_config. Added supports method to RDF::Trine::Model, RDF::Trine::Model::Dataset, and RDF::Trine::Store classes. RDF::Trine::Store->new_with_string now attempts to load store classes before using them. Renamed RDF::Trine::Store::SPARQL->_get_iterator to get_sparql. * OTHER Added SQL file for creating the mysql backend database. Remove the meaningless "All rights reserved" copyright text. Style changes to RDF::Trine::Iterator::Bindings->print_xml. Updated required version of XML::SAX to 0.96. Updated store tests (KjetilK). Removed Digest::SHA1 from list of prereq modules. Version 0.134 (2011-03-29) * API CHANGES Deprecated RDF::Trine::Iterator->count. * BUG FIXES Fixed bug in RDF::Trine::Iterator::SAXHandler on data with empty results. Fixed canonicalization bug in RDF::Trine::Node::Literal for xsd:decimals with no decimal point. * NEW FEATURES Added srx2csv and srx2table scripts. Added API for stream parsing of srx results to RDF::Trine::Iterator::SAXHandler. Added RDF::Trine::Model->get_sequence method for accessing rdf:Seq structures. Added 'value' method to RDF::Trine::Node subclasses for accessing the primary scalar value of a node. Added RDF::Trine::Graph->error method to explain failures in RDF::Trine::Graph->equal. Updated RDF::Trine::Graph to support: subgraph testing, access to injection map, delegation to RDF::Trine::Model (patch from tobyink). * ENHANCEMENTS Fixed RDF::Trine::Node::Resource->qname handling of unicode IRIs. Fixed RDF::Trine::Parser::NTriples->parse_file to accept filenames just like the superclass implementation. Fixed RDF::Trine::Parser->parse_file to open files as utf8. Fixed RDF::Trine::Parser->parse_url_into_model to pass through 'canonicalize' argument to actual parser method call. Allow 'canonicalize' argument to RDF::Trine::Iterator->from_json method. * OTHER Made diagnostic messages less noisy in t/store-hexastore-storable.t. Silenced an uninitialized warning in RDF::Trine::Parser::NTriples. Removed use of XML::SAX in RDF::Trine::Serializer subclasses. Added turtle parser test for file with BOM. Updated RDF::Trine::Store::DBI and RDF::Trine::Store::DBI::mysql to use DBI placeholders. Version 0.133 (2011-02-07) * BUG FIXES Fixed bug in Turtle parser that wouldn't allow a Unicode BOM in the input. Fixed bug in turtle serialization of blank nodes used in graph cycles (reported by tobyink). Fixed bug in RDF::Trine::Serializer::RDFXML that wasn't escaping XML entities in IRIs and bnode labels (github issue 3 from nichtich). Updated RDF::Trine::Store::Hexastore to use equal() method instead of op<==> for testing node equality. Updated t/parser-rdfjson.t to test bnode equality using identifier strings, not with op<==>. Fixed RDF/XML xmlns serialization bug when used with RDF::Trine::NamespaceMap objects. * NEW FEATURES Added RDF::Trine::NamespaceMap class. Added support to populate RDF::Trine::NamespaceMap objects during RDF parsing. Added RDF::Trine::Model get_list and add_list methods for managing rdf:List structures. Added support for parsing SPARQL JSON Results format in RDF::Trine::Iterator->from_json. RDF::Trine::Parser subclasses now allow parse_file_into_model and parse_file being called as class methods. Added 'restrict' and 'extend' options to RDF::Trine::Serializer->negotiate to allow more control over content negotiation. Added the ability to restrict the nodes returned from the RDF::Trine::Model->objects method by node type or by literal language/datatype. * ENHANCEMENTS Updated RDF::Trine::Store::SPARQL to allow bulk-update operations. Added string overloading to RDF::Trine::Node subclasses. Added text/rdf+n3 as a media type for RDF::Trine::Serializer::Turtle. * OTHER Updated conneg code setting default q-values in RDF::Trine::Serializer. Updated RDF::Trine::Iterator::Graph->print_xml to set utf8 binmode on the output filehandle. Changed required version of Module::Load::Conditional to 0.38 (based on version in debian). Version 0.132 (2010-12-23) * Added conditional loading of Redland parsers and stores when available using Module::Load::Conditional. * Added auto-initialization of DBI stores during object construction. * Added RDF::Trine::Store->new method to delegate to existing constructors. * Moved slow turtle parser tests into developer tests directory xt/. Version 0.131 (2010-12-07) * Fixed SPARQL XML Results serialization to omit unbound variables and properly declare literal languages and datatypes. * Copied implementations of is_numeric_type() and numeric_value() from RDF::Query::Node::Literal to RDF::Trine::Node::Literal. * Updated documentation to explicitly discuss inherited methods due to subclassing (RT 63153 comment from Ivan Shmakov). * Updated POD for RDF::Trine::Iterator subclasses (RT 63153 comment from Ivan Shmakov). * Fixed RDF::Trine::Parser->guess_parser_by_filename to get RDF/XML parser class from parser_by_media_type() instead of being hardcoded. * Fixed RDF::Trine::Serializer::Turtle::_node_concise_string to allow call as class method. * Added RDF::Trine::Parser::Redland subclasses to allow calling new() with no 'name' argument. * Added file extensions to parser registry for RDF::Trine::Parser::Redland. * Added RDF::Trine::Model->as_graphviz method. * Added checks to avoid undefined warnings in RDF::Trine::Serializer::NTriples::Canonical (suggestion from KjetilK). * Set :utf8 mode on string-backed filehandles in RDF::Trine::Serializer::Turtle. * Attempt at patching utf8 turtle/trig parsing bug submitted by KjetilK. * Updated required version of Test::More to 0.88 (bugreport from @danbri). Version 0.130 (2010-10-18) * Fixed bug in RDF::Trine::Node::Literal->is_valid_lexical_form check for xsd:double. * Updated RDF::Trine::Iterator::Bindings->as_string to use concise turtle syntax. * Added RDF::Trine::Parser methods media_type(), media_types(), parser_by_media_type(), and guess_parser_by_filename(). Version 0.129 (2010-10-04) * Updated Makefile.PL and RDF::Trine to require perl v5.8.3. * Fixed bug in promotion of temporary models from memory-backed to a SQLite-backed store. * Fixed RDF::Trine::Store::DBI->new to bless into backend-specific classes when passed a database handle (bug report from tobyink). * Updated RDF::Trine::Node::Literal to produce more accurate canonical lexical forms for xsd types. * Added RDF::Trine::Node::Literal->is_valid_lexical_form method. * Added support for special union-graph 'tag:gwilliams@cpan.org,2010-01-01:RT:ALL'. * Added exportable constants for UNION_GRAPH and NIL_GRAPH in RDF::Trine. Version 0.128 (2010-09-28) * Added .owl as a recognized RDF/XML file extension for the fallback parser guessing code. * Fixed bug in RDF::Trine::Store::SPARQL preventing access to the default graph. * Added new_with_config method to allow interactive configuration via rqsh.pl. * Updated RDF::Trine::Store::DBI->init to (partially) work if called for a new model (but the database has already been initialized). * Fixed call to RDF::Trine::Parser->parse_into_model in bin/rdf_store_add_file.pl. * Fixed call to RDF::Trine::Parser->parse_url_into_model in RDF::Trine::Store::Memory. * Removed RDF::Redland dependency in bin/rdf_store_add_file.pl. * Added introspective _config_meta method to RDF::Trine::Store subclasses to allow interactive configuration. * Added RDF::Trine::Store->class_by_name class method. * Added etag method to RDF::Trine::Model and RDF::Trine::Store::Memory to allow for HTTP caching. * Updated RDF::Trine::Node::Literal->canonicalize_literal_value coercion of xsd:decimal values. * Added optional flag to RDF::Trine::Node::Literal->new to attempt to canonicalize recognized XSD values. * Updated RDF::Trine::Exporter::CSV to accept a graph iterator (for serializing s,p,o as CSV). * Added RDF::Trine::Store::DBI->clear_restrictions method (suggestion and partial patch from tobyink). * Updated RDF::Trine::Store::Redland to improve efficiency (based on suggestions from Dorian Taylor). * Added native redland parser class and tests (patch from Dorian Taylor). * Added RDF::Trine::Iterator->each method (requested by tobyink). * Made code updates to improve performance based on profiling. * Updated to use URI 1.52 to allow direct usage of IRIs without unicode workarounds. * Added content-sniffing to fallback parser guessing code for RDF/XML and Turtle. * Lowered required version of redland in RDF::Trine::Parser::Redland to 1.0.7.1. * Added RDF::Trine::Serializer->serializer_names method for listing available serializers. * Added as_string method to RDF::Trine::Iterator::Boolean and RDF::Trine::Iterator::Graph. Version 0.127 (2010-08-30) * Removed redundant prerequisite for XML::LibXML::SAX from Makefile.PL. * RDF::Trine::Model->bounded_description now catches and ignores UnimplementedError exceptions. * Added heuristics support for TriG, RDF/JSON, and N-Quads to RDF::Trine::Parser->parse_url_into_model. * Added ability to specify the base URI for serializing RDF/XML and Turtle (patch from KjetilK). Version 0.126 (2010-08-16) * Fixed N-Triples serialization escaping bug for strings whose only escapable character is '\'. * Fixed typo in handling of RDF::Trine::Node::Formula extension. * RDF::Trine::Model->new will now return a temporary model when called with no arguments. * Updated get_pattern methods in Model and Store classes to return VariableBindings objects. * Updated DBI backend to allow no-op adding of the nil node. * Updated SPARQL backend to use SPARQL 1.1 Update and Aggregate operations. * Updated Memory and Hexastore backends to support 'graph' key in _new_with_config(). * Improved error messages in N-Triples and N-Quads parsers. * Fixed column naming bug in RDF::Trine::Store::DBI->get_contexts. * Added begin_bulk_ops() and end_bulk_ops() hint methods to RDF::Trine::Model. * Updated RDF::Trine::Parser to call begin_bulk_ops() and end_bulk_ops() on model object. * Updated DBI backend to use transactions when bulk_ops hints are used. * Added '==' and 'eq' overloading to RDF::Trine::Graph class. * Updated RDF::Trine::Model->bounded_description to traverse backwards links across blank nodes. Version 0.125 (2010-07-29) * Fixed hash collision bug in RDF::Trine::Store::DBI handling of literals with values '' and '0'. * Added RDF::Trine::VariableBindings class (ported from RDF::Query). * Iterators constructed from SPARQL XML Results format now return variable bindings objects. * Turtle serialization to strings now only declares prefixes that are used in the data. * Added media types and URIs for N-Quads parser and serializer. * Added RDF::Trine::Statement->rdf_compatible method (patch from tobyink). * Changed RDF::Trine::Model node methods (subjects, predicates, objects) to use quad semantics and accept a graph parameter. * Add documentation for new_with_object. * Add documentation for the hashref config. * Improved efficiency of counting quad patterns in RDF::Trine::Store::DBI. * Fixed bug in N-Triples serializer (was serializing quads). * Added %format_uris registry for parsers and serializers. * Added RDF::Trine::Model::as_string method. * Require XML::LibXML 1.70. * Removed unused variable in RDF::Trine::Parser::RDFXML. * Added character encoding declaration to RDF::Trine::Iterator::Bindings->print_xml. * Added character encoding declaration to RDF::Trine::Iterator::Boolean->print_xml. Version 0.124 (2010-06-21) * Updated quality value heuristics in RDF::Trine::Serializer::negotiate to prefer turtle if no accept headers are supplied. * Added ability for RDF::Trine::Store::Memory to load RDF files by URI in _new_with_string. * Added default implementation of RDF::Trine::Serializer::serialize_iterator_to_file. * RDF::Trine::Serializer::negotiate now slightly prefers turtle. * Added RDF::Trine::Iterator->count method. * Fixed RDF::Trine::Iterator::Bindings::as_string to respect $max_result_size argument. * RDF::Trine::Iterator::Bindings::as_string now returns unescaped strings. * Added ability to access the number of rows returned from RDF::Trine::Iterator::Bindings::as_string. * Updated RDF::Trine::Parser::parse_url_into_model to fall back on file extension heuristics if the media-type based parse fails. * Updated RDF::Trine::Parser::RDFJSON to throw an error if input isn't valid JSON. * Updated RDF::Trine::Model to throw an error if not passed a store object. * Added RDF::Trine::Model::Dataset for constructing views over a model, and RDF::Trine::Model->dataset_model constructor method. * Fixed bug in handling of quads in RDF::Trine::Model::get_pattern and RDF::Trine::Store::get_pattern. * Updated RDF::Trine::Store::DBI and RDF::Trine::Store::Memory to not return the default (nil) context from get_contexts. * Fixed bug in RDF::Trine::Store::Memory::_get_statements_quad that would infinite loop after removing statements. * RDF::Trine::Store doesn't load RDF::Redland (now only checks if it is already loaded). * Fixed bug in RDF::Trine::Store subclasses registering their class names in %STORE_CLASSES. * Added missing use of Encode to RDF::Trine::Store::Redland. * Made $RDF::Trine::Store::Redland::NIL_TAG globally accessible. * Added bin/rdf_transcode.pl for (streaming) conversion between RDF serialization formats. * Updated POD tests to not use taint mode (and synced between R::T and R::Q). * Changed test data in t/iterator-thaw.t. * Removed RDF::Core as a prerequisite in META.yml. * Added default implementation of RDF::Trine::Serializer::serialize_iterator_to_file. * RDF::Trine::Serializer::negotiate now slightly prefers turtle. Version 0.123 (2010-05-13) * Added turtle utf8 decoding for Turtle parser. * Added RDF::Trine::Serializer::media_types method. * Added RDF::Trine::Store::new_with_object method. * Fixed unicode encoding bug in RDF::Trine::Store::DBI. * RDF::Trine::Serializer::NTriples::Canonical.pm now inherits from RDF::Trine::Serializer::NTriples. * Cleaned up VERSION declarations. * Updated RDF::Trine::Parser::parse_url_into_model to fall back on file extension heuristics if the media-type based parse fails. * Updated RDF::Trine::Parser::RDFJSON to throw an error if input isn't valid JSON. * Added character decoding to RDF::Trine::Parser->parse_url_into_model. Version 0.122 (2010-05-05) * Added RDF::Trine::Model::bounded_description method. * Added initial implementation of a Redland-based storage class. * Fixed SPARQL store tests to align with recent coverage efforts. * Code cleanup and updates to improve test coverage. * Rearranged POD in RDF::Trine::Parser. * Fixed type in RDF::Trine::Node::Literal::_compare. Version 0.121 (2010-04-29) * Fixed URI qname code to disallow ':' in local name. * Added node-centric methods to RDF::Trine::Model: subjects, predicates, objects. * Improved POD for value canonicalization in RDF::Trine::Parser. * Added POD for RDF::Trine::Model::get_contexts. * Added POD details to RDF::Trine::Model::get_statements regarding triple and quad semantics. Version 0.120 (2010-04-20) * Added optional value canonicalization on parsing (xsd integer, decimal, and boolean). * RDF/XML parser now attempts to canonicalize XMLLiterals (doesn't yet canonicalize all XMLLiterals that it shold). * Added RDF::Trine::Node::Blank::_new constructor that doesn't validate bnode name for N-Triples conformance. * Performance improvements to RDF::Trine::Node::_unicode_escape. * Updated Turtle parser to throw error on undeclared namespace prefixes. * Updated Turtle serializer to produce QName literal datatypes. Version 0.119 (2010-04-15) * Fixed bug in NTriples parser handling of language literals (reported by tobyink). * Fixed another bug in turtle serializer that improperly serialized bnode objects 'belonging' to a parent triple (in-edge count of 1). Version 0.118 (2010-03-22) * Added RDF::Trine::Parser::TriG. * Added RDF::Trine::Parser::parse_file_into_model method. * Added RDF::Trine::Serializer::NQuads. * Added RDF::Trine::Serializer::negotiate constructor. * Added RDF::Trine::Serializer::new constructor based on requested serializer name. * Added RDF::Trine::Exporter::CSV for serializing variable bindings. * Added Text::CSV and HTTP::Negotiate to RDF::Trine prereq list. * Fixed exception thrown on unrecognized parser name. * Removed dependency list and added perlrdf link to POD in RDF::Trine and RDF::Query. * Updated RDF::Trine::Serializer::Turtle->new API to take %args instead of \%namespaces. * Updated RDF::Trine::Serializer::RDFXML to take %args and properly accept and serialize xmlns namespaces. * Updated RDF::Trine::Parser::RDFa to use streaming parsing (instead of materializing the graph first). * Updated RDF::Trine::Model::_debug to use quad semantics when getting statement iterator. * Updated t/parser-turtle.t to use File::Glob::bsd_glob for cases where the test directory's path contains whitespace. * Removed redundant parse_into_model methods from RDF::Trine::Parser subclasses. * Renamed examples/create_store.pl to examples/foaf_labels.pl. * Fixed bug in turtle serializer that improperly serialized bnode objects 'belonging' to a parent bnode. Version 0.117 (2010-02-04) * Fixed bug in RDF::Trine::Iterator::Bindings::as_json when using empty iterator. Version 0.116 (2010-01-31) * Fixed bug in RDF::Trine::Serializer::RDFXML when serializing empty models. Version 0.115 (2010-01-30) * Added N-Triples and N-Quads parsers. * Added RDF::Trine::Store::SPARQL::get_pattern implementation. * Changed RDF::Trine::Model::objects_for_predicate_list to return only a single node in scalar context. * Added table alias for COUNT(*) queries in RDF::Trine::Store::DBI (fix for mysql). * Added example of using parse_url_into_model to RDF::Trine::Parser SYNOPSIS. Version 0.114 (2010-01-27) * Added new Turtle serializer. * Updated RDF/XML serializer grouping of same-subject statements for bounded descriptions. * Updated parse_into_model parser methods to be both class and object methods. * Updated Parser parse_* methods to take extra %args with optional 'context' value. * Moved RDF::Trine::Store::Hexastore from alpha/ directory into RDF::Trine package. * Added Storable to list of prereq modules. * Added partial support for rdf:Lists to RDF::Trine::Serializer::Turtle. * Added RDF::Trine::Namespace::uri_value method. * Updated unicode encoding and escaping in ::Node, ::Node::Literal, and ::Store::DBI. * Added variable() shortcut function to RDF::Trine package. * Updated RDF::Trine::Graph to materialize statements when constructed with a graph iterator. * Moved get_pattern logic from ::Store to ::Model. * Updated ::Model::Union to work better with ::Model::get_pattern. * Updated Node and Statement from_sse methods to work with constant string arguments. * Updated code and tests for better coverage. * Removed unused RDF::Trine::Iterator::sfinally function. * Fixed bug in RDF::Trine::Graph::equals. * Added UnimplementedError exception class. Version 0.113 (2009-12-30) * Added RDF::Trine::Parser::RDFa implementation to connect with RDF::RDFa::Parser. * Added ability to pass RDF::Trine::Node::Resource values as the datatype argument to RDF::Trine::Node::Literal::new(). * Special-cased 'xsd' in RDF::Trine::Namespace to return the RDF-version of the namespace URI (with trailing '#'). * Added syntax shortcuts as exportable from RDF::Trine: iri(), blank(), and literal(). * Added RDF::Trine::Serializer base class. * Fixed syntax error in generated RDF/XML in RDF::Trine::Serializer::RDFXML. * Fixed bug in RDF::Trine::Serializer::RDFXML that was dropping triples. * Added RDF::Trine::Parser::parse_url_into_model class method. * Updated parser classes' registration of parser names and media types. * Added RDF::Trine::Model::size method. * Removed ::Parser::Error package. Replaced with use of RDF::Trine::Error. * Convert data to utf8 encoding before hashing in RDF::Trine::Store::DBI::_mysql_hash_pp. * Added RDF::Trine::Model::objects_for_predicate_list method. * Removed RDF::Trine::Serializer::RDFXML::_split_predicate and replaced with call to $pred->qname. * Added RDF::Trine::Node::Resource::qname method to split an IRI into namespace and local parts. * Added RDF::Trine::Serializer::NTriples::Canonical (from tobyink). * Added RDF::Trine::Iterator::Bindings::as_statements to return a graph iterator. * Updated POD for ::Model::get_pattern to mention 'orderby' argument. * Updated ::Model::as_stream to return a graph iterator sorted by (s,p,o). * Updated RDF/XML serializer to merge same-subject rdf:Descriptions. Version 0.112 (2009-12-12) * Skip some failing tests when RDF::Trine::Node::Literal::XML is loaded. * Added RDF/XML serializer. * Added serialize_iterator_to_file and serialize_iterator_to_string methods to NTriples serializer. * Added _serialize_bounded_description method to NTriples serializer. * Added RDF::Trine::Parser::RDFJSON package (patch from tobyink). * Added RDF::Trine::Serializer::RDFJSON package (patch from tobyink). * Added add_hashref and as_hashref methods to RDF::Trine::Model (patch from tobyink). * Added tests for RDF/JSON parsing/serializing (patch from tobyink). * Updated RDF::Trine docs to mention the RDF/XML parser (good catch by tobyink). * Added logging code to RDF::Trine::Store::DBI. * Changed ::Store::DBI::get_statements to skip (with warning) past ill-formed statements with IDs that don't appear in any of the value tables. * Updated RDF::Trine::Serializer::NTriples to call as_ntriples on node objects during serialization. * Added as_ntriples methods to RDF::Trine::Node and subclasses for proper NTriples formatting. * Updated bin/rdf_store_serialize.pl to print in NTriples format. Version 0.111 (2009-07-14) * Added RDF::Trine::Graph for testing graph equality. * Added node_names() method to ::Statement and ::Statement::Quad. * Added RDF::Trine::Statement::has_blanks method. * Fixed bug in RDF::Trine::Namespace to allow subclassing. * Removed dependency on Test::JSON, List::MoreUtils, and XML::Parser. * Added POD to RDF::Trine::Parser. * RDF::Trine::Store::temporary_store now delegates to RDF::Trine::Store::DBI. * Removed unnecessary call to blessed() in RDF::Trine::Statement. * Removed unused RDF::Trine::Promise class. * RDF::Trine now loads RDF::Trine::Store. * Removed TODO labeling of tests in t/model-filter.t. Version 0.110 (2009-03-14) * Added RDF::Trine::Store base class with default implementation of get_pattern(). * Updated bin/rdf_store_add_file.pl to use the RDF::Trine parser, not Redland's parser. * Added POD description to RDF::Trine package. * Updated VERSION variables to 0.109 (forgotten during the last release). * Updated ::Iterator::Bindings::as_string to join lines with empty string (had been returning a list). * Added debug tracing code to ::Store::DBI. * Updated schema in ::Store::DBI::mysql to use utf8 charset and collation, and use a pkey instead of a unique. * RDF::Trine::Store::get_pattern now passes through optional @args (used for order-by). * Fixed bug in ::Store::DBI::remove_statements causing bad SQL when all nodes are undef (remove all triples). * ::Node::Literal::new now calls ::Node::Literal::XML::new if available and applicable. Version 0.109 (2008-11-14) * Removed incremental parsing code from RDF-Trine package. * Added POD to from_sse methods in ::Node and ::Statement. * Added parsing of variables to RDF::Trine::Node::from_sse. * Small changes to ::Iterator and ::Trine::Node::Literal for efficiency. * Whitespace updates to ::Trine::Node. * Added SQLite-specific ::Store::DBI subclass so that indexes are created properly. * Fixed bug in RDF::Trine::Iterator::Bindings::print_xml that dropped every other row. * Updated RDF::Trine::Node::Resource to work with URI objects. * rdf_parse_turtle.pl now warns on any parser error. * RDF::Trine::Node::Resource now escapes unicode in base URIs (now just relative URI part) before calling URI->new_abs. * Turtle parser now makes universal IDs for all blank node (even those with given IDs like _:xyz). * Fixed Unicode unescaping in Turtle parser's handling of string literals. * Turtle parser now doesn't modify the lexical value of numeric typed literals. * Fixed ::Store::DBI handling of Quads in get_statements (had been broken because RDF::Query bypasses it by using get_pattern). * Fixed bug in ::Iterator::Bindings::print_xml that would drop every other result. * Updated VERSION numbers and docs for RDF::Trine for 0.109_01 candidate release. * ::Store::DBI now throws an error if call to DBI->connect doesn't return a database handle. * ::Iterator::Bindings::as_string now returns '' when there are no rows (instead of dying). * Added $IGNORE_CLEANUP to ::Store::DBI to allow preventing DBI cleanup. * ::Store::DBI now throws an error if call to DBI->connect doesn't return a database handle. * ::Iterator::Bindings::as_string now returns '' when there are no rows (instead of dying). * Moved all debugging over to use Log::Log4perl. * Updated prerequisite list (removed Digest::SHA1 and XML::Parser, and added missing modules). Version 0.108 (2008-07-14) * Added NTriples serializer module. * Added POD to RDF::Trine::Promise. * Added XML::Parser to list of required modules. * Added a peek method to ::Iterator to support execution deferment like in ::Algebra::Service. * Added RDF::Trine::Promise for general computation deferment. * Added print_xml method to RDF::Trine::Iterator classes. * Added support for Postgres storage. * Added XML::LibXML::SAX as a prerequisite (because XML::SAX::PurePerl can't handle some RDF/XML that uses unicode). * Replaced RDF::Core-based RDF/XML parser with a new XML::SAX based parser. * Removed now unused redland-based RDF/XML test data. * Removed unused redland fallback code from RDF::Query::Model::RDFTrine. * Removed redland-based RDF/XML parser tests. * Updated Turtle grammar to accept uppercase language tags. * Fixed COLLECTION support in RDF/XML parser. * Fixed RDF/XML parser for nodeID, sequence, reification, and base URI handling. * Fixed POD in NTriples serializer. * Fixed RDF/XML parser to handle nodeID, arbitrary xml attributes, parseType="Literal" serialization, and base URI handling. * Normlized expected NTriples data in W3C RDF/XML test files. * Added unicode escaping to Literal and Resource sse serialization. * Added W3C RDF/XML data and test script. * Fixes to deferring XML serialization for SPARQL bindings. * Fixed bug in delaying XML serialization for identity hints header computation. * Fixed extra data following xml query results. * Fixed strict refs bug in print_xml in iterator classes. * Updated tests that started failing after the previous commit (affecting SQL-compilation). * Allow equality test and disjunction filters in patterns that can be compiled to SQL. * Fix bug in SQL compilation when restricting left-joins to specific node types (based on functions like isIRI). * Added support to the DBI store for filters for equality tests. * Mysql store schema now adds indexes. * Improved use of temporary RDF::Trine stores in RDF::Query tests. * DBI temporary stores now use an in-memory SQLite database. * Fixed bug in RDF::Trine::Store::DBI::mysql (calling _mysql_hash() without qualifying it in the superclass). * Fixed variable ordering bug in UNION to SQL handling by forcing a sorted projection order. * Added support to compile normalized UNION (can only be the top-level node or a child of another UNION) patterns to SQL. * Made SQL more standards compliant. * RDF::Trine::Store::DBI now auto-upgrades to mysql and postgres classes. * Fixed unicode escaping by replacing Unicode::Escape calls to hand-rolled code in RDF::Trine::Node. * RDF/XML parser now accept more than one top-level resource. * RDF/XML parser now accepts URI objects as base uri (not just RDF::Trine::Node::Resource objects). * Added tabular as_string serialization of ::Iterator::Bindings objects. * Added Text::Table as a prerequisite. * Fixed RDF/XML parser handling of strings (versus file handles). * Fixed Turtle parser to properly keep '+' on integer literals. * Fixed bindings_count so it doesn't pull a result from the stream (basing the count on binding_names). * Fixed bindings xml serialization whitespace formatting. * Cleaned up ::Iterator::Bindings::as_string serialization code. * Replaced use of splice() with shift() in ::Iterator::SAXHandler::pull_result. Version 0.107 (2008-04-25) * Added Digest::SHA1 as a requirement for RDF::Trine. * Fixed base URI use in Turtle parser. * Fixed SQLite DSN in example scripts. * Fixed XML whitespace error in iterator-thaw.t Version 0.106 (2008-04-19) * Added a mysql-specific RDF::Trine::Store class (now uses INSERT IGNORE for efficiency). * SQL compiler now doesn't select statement contexts unless called via get_statements (not get_pattern). * RDF::Trine::Iterator::Graph::as_bindings now can be called with no arguments (uses default names). * Moved the nested hash join from ::Iterator to ::Iterator::Bindings. * Added new tests to improve coverage of node and iterator classes. * Added tests for binding iterator cartesian product join. * Pipelined the code for nested loop joins on binding iterators. * Added SPARQL XML Results test for identity hints in element. * Fixed bug in ::Model::StatementFilter to call join_steams in ::Iterator::Bindings. * Fixed bug in ::Iterator::Graph::as_bindings where not all arguments are ::Node::Variable objects. * Updated SPARQL XML Results namespace for boolean iterators. * Replaced XML::Twig code with new XML::SAX parser (allowing streaming parsing). * Moved as_sparql methods from RDF::Trine:: to RDF::Query:: classes. * RDF::Trine::Iterator::smap now allows overriding default construct_args (e.g. binding names). * Fixed RDF::Trine::Model::StatementFilter::get_pattern to project away unused variables (fixing a bug that caused joining to always fail). * Updated example turtle parser to accept URLs as command line arguments. * Turtle parser now removes dashes from the UUIDs used for blank node IDs. * Added support to incrementally thaw an Iterator from an IO::Socket. * Added RDF::Trine::Iterator::SAXHandler::rate method. * Added Time::HiRes as prerequisite to META.yml and Makefile.PL. * Updated all RDF::Trine modules to use consistent VERSION number for 0.106 release. * Added examples directory (and an example script) to the RDF-Trine package. * Removed Bloom::Filtere from the list of prerequisites (functionality has moved to RDF::Query). Version 0.105 (2008-03-19) * Removed use of File::Slurp in parser tests. Version 0.104 (2008-03-14) * Updated SPARQL XML Results namespace declaration in RDF::Trine::Iterator serialization methods. * Added extra_result_data methods to add data to the XML Results header tag. * RDF::Trine::Node::Resource now serializes to QName when passed valid namespace data. * Fixed xml results serialization for style. Version 0.103 (2008-03-10) * Updated to recognize (renamed) RDF::Query::Expression class. Version 0.102 (2008-03-07) * Added length() method to Materialized bindings iterator class. * Removed bloom filter construction from bindings iterator (RDF::Query code now does this itself). * Fixed escaping of backslashes in Literal node serialization. Version 0.101 (2008-03-04) * Added an RDF/XML parser based on RDF::Core::Parser. * Added Bloom filter support for Materialized bindings iterators. * Fixed IRI workaround using the URI module. * Turtle parser now uses Data::UUID for unique names. * Fixed turtle parser bug for Verb testing. * Added RDF::Trine::Statement::Quad::from_redland method. * DBI store now constrains variable node types based on position in a statement. * Added support for BOUND(), ISLITERAL(), ISURI() and ISIRI() functions in DBI store. Version 0.100 (2008-02-18) * Initial public release. COPYRIGHT Copyright (C) 2008-2010 Gregory Williams. All rights reserved. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. AUTHOR Gregory Williams RDF-Trine-1.007/SIGNATURE000644 000765 000024 00000362463 12171744446 014616 0ustar00gregstaff000000 000000 This file contains message digests of all files listed in MANIFEST, signed via the Module::Signature module, version 0.70. To verify the content in this distribution, first make sure you have Module::Signature installed, then type: % cpansign -v It will check each file's integrity, as well as the signature's validity. If "==> Signature verified OK! <==" is not displayed, the distribution may already have been compromised, and you should not run its Makefile.PL or Build.PL. -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 SHA1 82c08a2f038f7bfc98393f64e107abcb30dccd4b Changes.ttl SHA1 6375d9bdc391e5baa1b1e05d25e18f9cedf820e4 MANIFEST SHA1 9ae6eb60879b8e4e90a784918e816c2be0bfdffa META.yml SHA1 436d1d4da25a99b21fc67b3203bf4f6043616aaf Makefile.PL SHA1 8ab7db5b07d04a4d32118c169ca8cee2c13cb02f README SHA1 6b887e866f74e6f823724001c49146ee906c558a bin/graph.pl SHA1 6b250506c12423fc465c493af38c65ef5b310274 bin/rdf_init_store.pl SHA1 6f51b8a8a85093152324924060f4c57094d0aa07 bin/rdf_parse_turtle.pl SHA1 ae37084310e86b4c2dec48c103b7aba8d40e3d96 bin/rdf_parse_xml.pl SHA1 deb158d87d0b8fe738f6ba5b178be65dd64e2848 bin/rdf_store_add_file.pl SHA1 d510c894ba7acd336ff9b69911298ca7e71fc431 bin/rdf_store_makeprivate.pl SHA1 33e85e461d5efd5565ed08b140b93638de574d1a bin/rdf_store_serialize.pl SHA1 75e6e2b71236542c478a99dce46a6caafec6041e bin/rdf_transcode.pl SHA1 3ba939effa36e4432149adab1313797dee72a64b bin/srx2csv SHA1 ac24234d31d1f1a3ebd1d7b9c108d19aa481ec49 bin/srx2table SHA1 54c909523bd47ad798dfc9bc97a64ecd768a51fb examples/foaf_labels.pl SHA1 e25f036a2f1cb94b03dd008032109b0bbfbd53f8 extra/mysql.sql SHA1 8a924add836b60fb23b25c8506d45945e02f42f4 inc/Module/Install.pm SHA1 d001b4b9a48395a8c4134b234a0e1789138427c5 inc/Module/Install/AuthorTests.pm SHA1 2d0fad3bf255f8c1e7e1e34eafccc4f595603ddc inc/Module/Install/Base.pm SHA1 f0e01fff7d73cd145fbf22331579918d4628ddb0 inc/Module/Install/Can.pm SHA1 7328966e4fda0c8451a6d3850704da0b84ac1540 inc/Module/Install/Fetch.pm SHA1 b62ca5e2d58fa66766ccf4d64574f9e1a2250b34 inc/Module/Install/Makefile.pm SHA1 1aa925be410bb3bfcd84a16985921f66073cc1d2 inc/Module/Install/Metadata.pm SHA1 4d793c044726e06fe35d8d129b76da2803377f92 inc/Module/Install/Scripts.pm SHA1 e4196994fa75e98bdfa2be0bdeeffef66de88171 inc/Module/Install/Win32.pm SHA1 c3a6d0d5b84feb3280622e9599e86247d58b0d18 inc/Module/Install/WriteAll.pm SHA1 6d02d541a0d509a77bcab753d8ea2bb67c9a946d lib/RDF/Trine.pm SHA1 71908fc13ef335193847a856ad4edb3364750f8e lib/RDF/Trine/Error.pm SHA1 9d69d86217460d7f4f1d4c9a2f14d5b263e1c9ae lib/RDF/Trine/Exporter/CSV.pm SHA1 aa8f402c303409805626c20574b8ceec9e2f98f8 lib/RDF/Trine/Exporter/RDFPatch.pm SHA1 4ba324339b91ef330954a34ee59b542aa78fdf86 lib/RDF/Trine/Graph.pm SHA1 d6dc3be761060ffdd546a957fd902726b8eb6b61 lib/RDF/Trine/Iterator.pm SHA1 6e6177388375db76eb75f2b0632a136b88a761cd lib/RDF/Trine/Iterator/Bindings.pm SHA1 3a3f42ea58fdc399e2515dfec6e2071a70a2f03d lib/RDF/Trine/Iterator/Bindings/Materialized.pm SHA1 bfb22ff92d8e0526fc51f5f66172145cdfd79ea0 lib/RDF/Trine/Iterator/Boolean.pm SHA1 83c145d00b6b1e0809247b8a21bbb952b9de7481 lib/RDF/Trine/Iterator/Graph.pm SHA1 9fe35dbe8cf23eaec9ebac16614f21c0edf526eb lib/RDF/Trine/Iterator/Graph/Materialized.pm SHA1 1b98cd1b87e551ea88bd8de9a47085ff9ae011c2 lib/RDF/Trine/Iterator/JSONHandler.pm SHA1 e55946d7f776523488c87d5a34fe39b5c3c05245 lib/RDF/Trine/Iterator/SAXHandler.pm SHA1 2533833c38628ecec5c5b5d9701604bb098fbb94 lib/RDF/Trine/Model.pm SHA1 45582ee7306391e5a73b1b801f0137825d5b7b6f lib/RDF/Trine/Model/Dataset.pm SHA1 17b0a5fa9934e42a2c1b1b237717158f94707b13 lib/RDF/Trine/Model/StatementFilter.pm SHA1 e9c1e57ad0292816342028b03cdb9d547671c3d6 lib/RDF/Trine/Model/Union.pm SHA1 555b73b4f3e7023abacd385f78ffe1d3f10049ed lib/RDF/Trine/Namespace.pm SHA1 e840ac16d1711a78a1bda84a69c029930e5b7a2f lib/RDF/Trine/NamespaceMap.pm SHA1 9919f4800ea99472613a8f9ce9e808f026669d74 lib/RDF/Trine/Node.pm SHA1 c1ba0dba7a299172f56ba4f7196fe98bd5a74693 lib/RDF/Trine/Node/Blank.pm SHA1 a291e86d92ec90ffda1b5d6d2ca1e76959f39189 lib/RDF/Trine/Node/Literal.pm SHA1 3d70ccea1d393b44a668604f861f339456e95b22 lib/RDF/Trine/Node/Nil.pm SHA1 db8a259d4ae1a49f1de9300f42a83a51625f0cd0 lib/RDF/Trine/Node/Resource.pm SHA1 e6e7ef6b1add1e6471f6ec344dfa0e84e1933ffa lib/RDF/Trine/Node/Variable.pm SHA1 e89cf05412f5ad7c97d7112fedc4d129cc9ddb0b lib/RDF/Trine/Parser.pm SHA1 100461d1c4a3431477b8e853c914a97fd910ddea lib/RDF/Trine/Parser/NQuads.pm SHA1 8eda7f52485638053547286c114d14826f9c08fa lib/RDF/Trine/Parser/NTriples.pm SHA1 0baa95531b6f758d2c4baf18085059cdd826f61b lib/RDF/Trine/Parser/RDFJSON.pm SHA1 65a45b286df26edf2f19f64c6e5cde39ab14910d lib/RDF/Trine/Parser/RDFXML.pm SHA1 cd0934d37a20be615030ff478ec19391e1ec356b lib/RDF/Trine/Parser/RDFa.pm SHA1 86df431e8b1fbf98a28651465ef5e3c0e95ffdae lib/RDF/Trine/Parser/Redland.pm SHA1 8eaf19783786ecae9c8fec15e9898c95d079e8b3 lib/RDF/Trine/Parser/TriG.pm SHA1 06b34d5fb46c3c401500ebf41424b3e5ff911df2 lib/RDF/Trine/Parser/Turtle.pm SHA1 b400f3bb3ef5e1ad4c954a00ef77e19d514363ae lib/RDF/Trine/Parser/Turtle/Constants.pm SHA1 788ec38093a8400d00b63e4131ee437dab8d753a lib/RDF/Trine/Parser/Turtle/Lexer.pm SHA1 c210d2369f1be2469fb59ec14dc2749de1e88ff3 lib/RDF/Trine/Parser/Turtle/Token.pm SHA1 f5d7cd3cc5ce3ae8929d18caf5e94163794f7ee7 lib/RDF/Trine/Pattern.pm SHA1 44751675fce4cfd7f08f1fbe81524724daee8ca1 lib/RDF/Trine/Serializer.pm SHA1 9b2ed37bad2255336262e42ce19addd3699469a5 lib/RDF/Trine/Serializer/NQuads.pm SHA1 5f04749d2036c1b5a82e844c66759bd000574ed0 lib/RDF/Trine/Serializer/NTriples.pm SHA1 5b0a4d401cea56d723a950fca07b4559febc560b lib/RDF/Trine/Serializer/NTriples/Canonical.pm SHA1 b85d0b13c87658d39183c8931231aea57b6972bf lib/RDF/Trine/Serializer/RDFJSON.pm SHA1 02facafc0609d012d06fa974858a8bd706bb6a61 lib/RDF/Trine/Serializer/RDFPatch.pm SHA1 9ab33c581eef7eb504486258feb70e077ab195b4 lib/RDF/Trine/Serializer/RDFXML.pm SHA1 39a0c4240ebb32ecba7e443e70cec6323a76cfaa lib/RDF/Trine/Serializer/TSV.pm SHA1 5927374b73cd92d9a238442aabb64207c6b4b590 lib/RDF/Trine/Serializer/TriG.pm SHA1 45ddc396bc986bc7f189c35028d175fd8540d25f lib/RDF/Trine/Serializer/Turtle.pm SHA1 73fb549cc95a1dff2250f4b4a260c1cd2a891c45 lib/RDF/Trine/Statement.pm SHA1 fb7db4963394af99c3bebaa95591c7d41628f5b0 lib/RDF/Trine/Statement/Quad.pm SHA1 e31c32c004309bf0bfb58bf63bfcc7ac46d4b026 lib/RDF/Trine/Store.pm SHA1 e9dceea6ba5944f758815f6ecc5bd599e2657094 lib/RDF/Trine/Store/DBI.pm SHA1 8430cf64d2bbc09e3f1b5a964e9d6fd5db577909 lib/RDF/Trine/Store/DBI/Pg.pm SHA1 af6449da5376044d8bd66f70309e68de79251850 lib/RDF/Trine/Store/DBI/SQLite.pm SHA1 f6135858228f3e73eb0cc5eeb6ce7670a9b80b49 lib/RDF/Trine/Store/DBI/mysql.pm SHA1 5f6f90f497c89bd93454b556770736df7844a9ee lib/RDF/Trine/Store/Dydra.pm SHA1 6d93ac07d600c77cf93210ba8d36496b40bac6de lib/RDF/Trine/Store/Hexastore.pm SHA1 d8d80d6eeb64cd4beed36b7b10240c7834bc6066 lib/RDF/Trine/Store/Memory.pm SHA1 b1fb9a1748c0fdbcfa0b5dda68171419bd221931 lib/RDF/Trine/Store/Redis.pm SHA1 fb050e1a4300cad2f2c752e1111d65976e49b370 lib/RDF/Trine/Store/Redland.pm SHA1 ff750e4dd1d3877a2798d3f77925831b50bf814c lib/RDF/Trine/Store/SPARQL.pm SHA1 fdab6b72bbbb336cde34e56a6c8ffc62dca100c1 lib/RDF/Trine/VariableBindings.pm SHA1 8d8f34ddddf5b980166290c1b324d053d8446dec lib/Test/RDF/Trine/Store.pm SHA1 3d6f8b1b1edbb40c4bae20dfc977fcf67d97ff28 t/00.load.t SHA1 403973466abf1be3a25ac53e0e4eeaee06e1a669 t/data/bugs/ttl-with-bom.ttl SHA1 171b51b6ee76df5df278cd9b8946edbc2dade2b4 t/data/rdfa/test-sd.nt SHA1 78a21a7b9191bd72342020705ed7a6d1a3e06976 t/data/rdfa/test-sd.xhtml SHA1 13114d2054fcb5ffca5f9af1834388f80bb2fa33 t/data/rdfxml-w3c/Manifest.rdf SHA1 a2bf4493cebc28f0b1cf3d40bc090490e3c738b2 t/data/rdfxml-w3c/amp-in-url/test001.nt SHA1 9bd01ae1310b3bc7535fed1c8dd7ccd604a87d62 t/data/rdfxml-w3c/amp-in-url/test001.rdf SHA1 a34d08860aac8da6798ef039784dd74e54f0a531 t/data/rdfxml-w3c/datatypes-intensional/test001.nt SHA1 7f6f0d74eb5efb674a8053d84b703a609995978a t/data/rdfxml-w3c/datatypes-intensional/test002.nt SHA1 a90312140b1481c1797acab37902be6c09af73c1 t/data/rdfxml-w3c/datatypes/test001.nt SHA1 4a8f296f69a0a24cf7b42c62869bd4668e2b2075 t/data/rdfxml-w3c/datatypes/test001.rdf SHA1 dfdbbea600870cd3b3fe6d98a93fedb63968b0c2 t/data/rdfxml-w3c/datatypes/test002.nt SHA1 df0ab500f2803cce0a3d2e9cd9b1c657db72ff3b t/data/rdfxml-w3c/datatypes/test002.rdf SHA1 e7033e6e26fb4d212f94a4f0a0b98f093211d397 t/data/rdfxml-w3c/datatypes/test002b.nt SHA1 a0fabdb93b776890cc8faf1a4cb902506081b8b0 t/data/rdfxml-w3c/datatypes/test003a.nt SHA1 ffd5871d4e92add13497707b8e2cab505ed36a41 t/data/rdfxml-w3c/datatypes/test003b.nt SHA1 5f70b9d4c56bb4fca23d97128ee7a11f9c949930 t/data/rdfxml-w3c/datatypes/test005a.nt SHA1 5aed8c8845f39b24eb569948bb8af6c92363a2ff t/data/rdfxml-w3c/datatypes/test005b.nt SHA1 cd75855a842840e4e3cf1e66b3e9823320004e8b t/data/rdfxml-w3c/datatypes/test006.nt SHA1 01094c13fe3fe5c0389386ca004fa418dbf177e0 t/data/rdfxml-w3c/datatypes/test008a.nt SHA1 6503a113f97de57e256e53b1b0b9ebc313fb38c2 t/data/rdfxml-w3c/datatypes/test008b.nt SHA1 52c0ceff94f2ebad9f8b6103fc683b00b12c5c38 t/data/rdfxml-w3c/datatypes/test009a.nt SHA1 5b80b5a3dedd18b175e19a139fa5732e2385286f t/data/rdfxml-w3c/datatypes/test009b.nt SHA1 08298fe6e3148b5e4598258d59ecf5239d2b9c43 t/data/rdfxml-w3c/datatypes/test010.nt SHA1 952b9dcc30cb330ebb5ec866c60e1dad9be8484c t/data/rdfxml-w3c/datatypes/test011a.nt SHA1 568b13473c2524fd8de32fab4c18a9d6c56578df t/data/rdfxml-w3c/datatypes/test011b.nt SHA1 3deada41565417b54faa28929a59efa880f458a8 t/data/rdfxml-w3c/horst-01/test001.rdf SHA1 a46caea488511a8d41a201fab8c01117ea109826 t/data/rdfxml-w3c/horst-01/test002.rdf SHA1 5e3e1c372999ed773b2917db112359a6c9b4d7e9 t/data/rdfxml-w3c/horst-01/test003.rdf SHA1 08334bb5c2b83c00673509d254ad411ef6e2eb6e t/data/rdfxml-w3c/horst-01/test004.rdf SHA1 93d0d1acd76b335fe2001ac967b5ae5582f83ebf t/data/rdfxml-w3c/pfps-10/test001a.nt SHA1 afaaf03ec4417622c932d6ac81edf42e1e207d73 t/data/rdfxml-w3c/pfps-10/test001b.nt SHA1 ac35a32c26de53b8375c5d46759b8b1bacd858fa t/data/rdfxml-w3c/rdf-charmod-literals/test001.nt SHA1 a9c7bb4f2d8ffdf28ffcef24155aefbe0ebad288 t/data/rdfxml-w3c/rdf-charmod-literals/test001.rdf SHA1 532e54d05343c20a9da1cef6681bfa85165c2fe7 t/data/rdfxml-w3c/rdf-charmod-uris/test001.nt SHA1 2721beb5c57cc3fb290377cb56ba1537799a78f3 t/data/rdfxml-w3c/rdf-charmod-uris/test001.rdf SHA1 56eff7782220ad8c41e9386b840e91b9c2adedf4 t/data/rdfxml-w3c/rdf-charmod-uris/test002.nt SHA1 936c658378ba9a0f43f4c76b9b6ab61085253b45 t/data/rdfxml-w3c/rdf-charmod-uris/test002.rdf SHA1 26d9be3734141ca837b23287fb97f90d07e81dab t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/error001.rdf SHA1 564e34b9cd799b591787e6360bccc75e57ebeafa t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/error002.rdf SHA1 7b0b5502f2532f7f9754c7417762f2470c0a39e7 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test001.nt SHA1 3fc430a158bd8fbd0fda0380eb7f81aa07917575 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test001.rdf SHA1 8fed0ae6b4c60c27acacc87174a3425f85af5979 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test002.nt SHA1 c7f7b167ad871150b7a4e65f61758cffd89a8609 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test002.rdf SHA1 aed63b0faa4a95b3a7a68a8fa3955fee50d63f0c t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test003.nt SHA1 719f28741e9f0390789b949df2229b462b7c4c42 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test003.rdf SHA1 4bed4d2c86d3b4da6bd443e9238e1f552509a043 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test004.nt SHA1 5b406d666abd038ba26500b453b7a931e04ea758 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test004.rdf SHA1 c78e30cb217c1a8ac77795627cd645775281dcb4 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test006.nt SHA1 29fe6301af03ff895f848c45a057e0eebaa76f86 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test006.rdf SHA1 93fb0675ba43054e06e2e0fe2659cec9e5a37180 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test007.nt SHA1 c2eb594e5fd7f3acf49b29a9ffbefc19f8d31567 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test007.rdf SHA1 e900c4bd926ab8706c9b91928a898f28d67d1f2c t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test008.nt SHA1 83eea8af713adade1bca139d6099527b721c6a52 t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test008.rdf SHA1 dc665052759a37d6c72149641fa2b41bc675b8c7 t/data/rdfxml-w3c/rdf-element-not-mandatory/test001.nt SHA1 3285163f56dfe98ba33a901d41c424802c6229cd t/data/rdfxml-w3c/rdf-element-not-mandatory/test001.rdf SHA1 0954f5e2aab8596fe9012f8fabb4f3bc60c42c0b t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0001.nt SHA1 9cf6d911901a73de85982a95967e91770fd4a755 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0001.rdf SHA1 9c6acd5e897dae085ef82332c8e27965fc31fa31 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0003.nt SHA1 ab82331a4b3797385b77e0c87e28833ac134a7f3 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0003.rdf SHA1 30035ed2530fab0fc7445ee40b64d9cf54bd18a9 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0004.nt SHA1 89a27958a53c73aa1401f01c080b61deb7aeeed0 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0004.rdf SHA1 783628259da79241bc7fed719a3fb2568c8b0c6f t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0005.nt SHA1 3976a3045f3e9047b289879adc4090eb25d1c58b t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0005.rdf SHA1 6c96117169f68905ebfda1f4e4958a9659119edc t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0006.nt SHA1 75b671fe9ceacd4a7fa1437b9b8348dd9b5b2615 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0006.rdf SHA1 702a19fda502959c5ebda1ea146d7f0659d630bb t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0009.nt SHA1 39ff95ce22d8118edcd1a1c63162586cc9df6a5c t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0009.rdf SHA1 415aedf6a65ce45a04f36750594ce5bd62701880 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0010.nt SHA1 e3d6a77c8ff7704f17d89648bae97241f27b6c82 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0010.rdf SHA1 42765c0b4f844913821a06d3b39249cf086da95d t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0011.nt SHA1 37fd3a3836b0370bd4838e03d7da150df160c688 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0011.rdf SHA1 f139ffc6157a48a7651c3b9eaebd4efb87658bc2 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0012.nt SHA1 ae803f97bc17f37abc9085813642cc348d5a6369 t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0012.rdf SHA1 0ad1d52874f0576580a86f5b12dec7b2ba9be64d t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0013.nt SHA1 92338068a8813ca76711f714c4cf45b284b9621a t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0013.rdf SHA1 539954acf0100de49ec17142e03f7112b6c4d9ba t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0014.nt SHA1 010df9dd077be146698dae15ce8a822b4db3f1aa t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0014.rdf SHA1 01ea72b0b97f0545332fc8a152a9fff1425551c9 t/data/rdfxml-w3c/rdfms-abouteach/error001.rdf SHA1 0710165f8d6bac05649ba3bec104e00281e70c2b t/data/rdfxml-w3c/rdfms-abouteach/error002.rdf SHA1 dd39f2d49e30861f2a9e7588ad1a04ce846d9e44 t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/error1.rdf SHA1 b7d9d338de08c5fadedfd60d7b5d383b80661a81 t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test1.nt SHA1 c75b12ace14c67fba134012a2426fade01152e26 t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test1.rdf SHA1 6f87c238c90964ca128514fd7a2b78ad7045a730 t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test2.nt SHA1 0a08c1e3c59b7de4c348e4eeced479c1511d91ba t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test2.rdf SHA1 9a73b4fadd7d9a44513b9d64684110bae8648470 t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test3.nt SHA1 12a5e7af9792d11b17480e38580c68d969ac0fec t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test3.rdf SHA1 b9a1117a262cb1d671763a84c4ee5ddba872aa82 t/data/rdfxml-w3c/rdfms-duplicate-member-props/test001.nt SHA1 01250108ddeec07e98deb855b420f2311a07cf48 t/data/rdfxml-w3c/rdfms-duplicate-member-props/test001.rdf SHA1 8af900d8db0585d954da6f0ee0e332f631500d8b t/data/rdfxml-w3c/rdfms-empty-property-elements/error001.rdf SHA1 13c9ad6e1b238366057ebc5f9fd8194f73afefec t/data/rdfxml-w3c/rdfms-empty-property-elements/error002.rdf SHA1 828773cdb0ca9e5df5d064ca33d3b5d8bcc98af9 t/data/rdfxml-w3c/rdfms-empty-property-elements/error003.rdf SHA1 f31bd1085ff237e510dc5179c9760b362ac27e65 t/data/rdfxml-w3c/rdfms-empty-property-elements/test001.nt SHA1 6ba761b3d7102e480106cc70525772842d8c8c2e t/data/rdfxml-w3c/rdfms-empty-property-elements/test001.rdf SHA1 fe159d7484f14ec021fb5f17c9dbe0e061d122c5 t/data/rdfxml-w3c/rdfms-empty-property-elements/test002.nt SHA1 987985acfbace34d096e71a147c64f698684d095 t/data/rdfxml-w3c/rdfms-empty-property-elements/test002.rdf SHA1 861f1afd491a0bd03ab21a5cd23c9faecdf35e33 t/data/rdfxml-w3c/rdfms-empty-property-elements/test003.nt SHA1 361b91ace81ee525a336ab5700517c0af389f487 t/data/rdfxml-w3c/rdfms-empty-property-elements/test003.rdf SHA1 1b1849cd222d6db13f275292d0ad6655b6ee11ae t/data/rdfxml-w3c/rdfms-empty-property-elements/test004.nt SHA1 3afabed1f1e0f2554dc2903c3d3312cee51279c5 t/data/rdfxml-w3c/rdfms-empty-property-elements/test004.rdf SHA1 d805aa94a7e96581ca493991e31bc6b66601d4d1 t/data/rdfxml-w3c/rdfms-empty-property-elements/test005.nt SHA1 1052985ecdec32f8729698a26588f418f8b7cacd t/data/rdfxml-w3c/rdfms-empty-property-elements/test005.rdf SHA1 dc2d99c38c8dbb0711720e004425a36e48afde9a t/data/rdfxml-w3c/rdfms-empty-property-elements/test006.nt SHA1 b8c4974664130ab6ede51700a1069edd43eb803b t/data/rdfxml-w3c/rdfms-empty-property-elements/test006.rdf SHA1 f31bd1085ff237e510dc5179c9760b362ac27e65 t/data/rdfxml-w3c/rdfms-empty-property-elements/test007.nt SHA1 201fab5a5f76c080cdc06bef075fa483299ab545 t/data/rdfxml-w3c/rdfms-empty-property-elements/test007.rdf SHA1 fe159d7484f14ec021fb5f17c9dbe0e061d122c5 t/data/rdfxml-w3c/rdfms-empty-property-elements/test008.nt SHA1 f540296fa2b9c787fd216e2b1ac647dd3463f72a t/data/rdfxml-w3c/rdfms-empty-property-elements/test008.rdf SHA1 861f1afd491a0bd03ab21a5cd23c9faecdf35e33 t/data/rdfxml-w3c/rdfms-empty-property-elements/test009.nt SHA1 68e0030b4b455cb1222f0ecdb28a6ed562071a6c t/data/rdfxml-w3c/rdfms-empty-property-elements/test009.rdf SHA1 1b1849cd222d6db13f275292d0ad6655b6ee11ae t/data/rdfxml-w3c/rdfms-empty-property-elements/test010.nt SHA1 8db78afbc5d098c07abaeda30c1498462e5d1b2a t/data/rdfxml-w3c/rdfms-empty-property-elements/test010.rdf SHA1 66f31ae0a7453d4554cd233b870037f64e02ee85 t/data/rdfxml-w3c/rdfms-empty-property-elements/test011.nt SHA1 9d05f8aabd539ea5ab1ac740eed73a6977c9d65b t/data/rdfxml-w3c/rdfms-empty-property-elements/test011.rdf SHA1 00664e83943ea290176ba8c242630fec6e6b39cf t/data/rdfxml-w3c/rdfms-empty-property-elements/test012.nt SHA1 fe7b99e603ba1bb484421448fbddd85b4e67505b t/data/rdfxml-w3c/rdfms-empty-property-elements/test012.rdf SHA1 85972bafa75b4f736d1c1c06c9e047b2c8df8993 t/data/rdfxml-w3c/rdfms-empty-property-elements/test013.nt SHA1 bb55a0f6b6ed55c7f474462fd5377aa3c63642cd t/data/rdfxml-w3c/rdfms-empty-property-elements/test013.rdf SHA1 8587a03529355d0405696ad75f897d3b83201582 t/data/rdfxml-w3c/rdfms-empty-property-elements/test014.nt SHA1 dd019126532f3a9f487e8f347219d329e686fd81 t/data/rdfxml-w3c/rdfms-empty-property-elements/test014.rdf SHA1 8587a03529355d0405696ad75f897d3b83201582 t/data/rdfxml-w3c/rdfms-empty-property-elements/test015.nt SHA1 5b07be269c28873721677e5971638068ebada9be t/data/rdfxml-w3c/rdfms-empty-property-elements/test015.rdf SHA1 f06f748f6bac46861f53320cdf1c8d439ccee5b4 t/data/rdfxml-w3c/rdfms-empty-property-elements/test016.nt SHA1 c0ded43a5cac91547fd37594eb82f976c852460e t/data/rdfxml-w3c/rdfms-empty-property-elements/test016.rdf SHA1 84050cd5876881e967dcd4fddeac205305d23794 t/data/rdfxml-w3c/rdfms-empty-property-elements/test017.nt SHA1 6c66f87d8af1002a7692eed8321fb0cf0524fd5e t/data/rdfxml-w3c/rdfms-empty-property-elements/test017.rdf SHA1 e89d3fe5e2f4308cbdccbcd142abbd67faeb8419 t/data/rdfxml-w3c/rdfms-identity-anon-resources/test001.nt SHA1 239a738e8ce617e978b8e53fd9a94bb1ca612419 t/data/rdfxml-w3c/rdfms-identity-anon-resources/test001.rdf SHA1 ac655704c09a724f249f0e71f672a3aa2f94b684 t/data/rdfxml-w3c/rdfms-identity-anon-resources/test002.nt SHA1 cfc5e3eec6c61f9ef067aca14219f9e9f91accbf t/data/rdfxml-w3c/rdfms-identity-anon-resources/test002.rdf SHA1 d60077bb68402615e4d732883f5583ff465cde95 t/data/rdfxml-w3c/rdfms-identity-anon-resources/test003.nt SHA1 b535ad9a290837f9d8b5c9d956486a7395a9f62a t/data/rdfxml-w3c/rdfms-identity-anon-resources/test003.rdf SHA1 a2334f998395cc10c913095ac4cbd1a33d97d1bd t/data/rdfxml-w3c/rdfms-identity-anon-resources/test004.nt SHA1 5d300ac2f479d2c65f50e7b1b5c9dcf0be6a2243 t/data/rdfxml-w3c/rdfms-identity-anon-resources/test004.rdf SHA1 a77e46a1ac6cac8b27cd2304821a7806c971fa0d t/data/rdfxml-w3c/rdfms-identity-anon-resources/test005.nt SHA1 6bc9442b5a0031cc5810c6fdc4710bbe607d9970 t/data/rdfxml-w3c/rdfms-identity-anon-resources/test005.rdf SHA1 5608b73ef081a65924c124ba374b8aa9ea1c3676 t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test001.nt SHA1 674632e1b4c50a264e87a74c685db8e28eca4cd9 t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test001.rdf SHA1 37d36d77d5c74bab73c888f03cc7503b76c11e2d t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test002.nt SHA1 ff86f13b3de73179ff4c49c7fa4114ea0f635b76 t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test002.rdf SHA1 82a8adf0b62a8ab7ed0e0e06d4b9905d888db46e t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test004.nt SHA1 163b958f793b59565e37b5048140971edd84ae8c t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test004.rdf SHA1 676aaee43cdc652bbb6d3b6d6475400a7cbfb92b t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test005.nt SHA1 97b2ae1ed7f2343729cb81b73d2c8ae635a938af t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test005.rdf SHA1 97c59f70d193d147b41ec39a78edbf8d457f3c7a t/data/rdfxml-w3c/rdfms-para196/test001.nt SHA1 6690511b88ab65855df9ebc156f054a0b41228af t/data/rdfxml-w3c/rdfms-para196/test001.rdf SHA1 4889b3ede242550ba716054e1ce61cba9c169750 t/data/rdfxml-w3c/rdfms-rdf-id/error001.rdf SHA1 0632f58bf6e3c86bd4c0d0b410f01a185119542e t/data/rdfxml-w3c/rdfms-rdf-id/error002.rdf SHA1 8c32d3e5de4c8fa0d524b7d6bda122a3563120f8 t/data/rdfxml-w3c/rdfms-rdf-id/error003.rdf SHA1 088f3cdd91a0733b37671408acf8c83564c600d8 t/data/rdfxml-w3c/rdfms-rdf-id/error004.rdf SHA1 5620ab221408968bbc13fd494caa9062fd3c403b t/data/rdfxml-w3c/rdfms-rdf-id/error005.rdf SHA1 1d05f00e38e94af613d3c0e1d846fb1b0b96af45 t/data/rdfxml-w3c/rdfms-rdf-id/error006.rdf SHA1 f80709c51bb9cccb2ade455b787307588307c680 t/data/rdfxml-w3c/rdfms-rdf-id/error007.rdf SHA1 2ee9e769956aafd5be756e9411cf045039d3a70d t/data/rdfxml-w3c/rdfms-rdf-names-use/error-001.rdf SHA1 19bee0f2d366fa12270bd9f79ab86049e780c8e7 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-002.rdf SHA1 3e15f6455cb486a7386f15bda5dabab923966c2b t/data/rdfxml-w3c/rdfms-rdf-names-use/error-003.rdf SHA1 a61ea1eca3446fa87d38da00f80a824eb36bc9cb t/data/rdfxml-w3c/rdfms-rdf-names-use/error-004.rdf SHA1 20885203facbd2ed8c15f9744d381d0f18186cfe t/data/rdfxml-w3c/rdfms-rdf-names-use/error-005.rdf SHA1 2a0aa74d0afe87a55fc5c83a2d32aeb9f9aa0663 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-006.rdf SHA1 fe77db983f5d842bc14a09468a1d86a3ea0eec0a t/data/rdfxml-w3c/rdfms-rdf-names-use/error-007.rdf SHA1 cdb0244be3800ac01b7228119be4c5d7124607fd t/data/rdfxml-w3c/rdfms-rdf-names-use/error-008.rdf SHA1 fd253c0bf2343753ca22a4be4538c933ef51f573 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-009.rdf SHA1 5567e3d58fc1a1a3b0471be98546a5ad4a30220d t/data/rdfxml-w3c/rdfms-rdf-names-use/error-010.rdf SHA1 6a177f58d2a75d779069575279fd4b4b8e536c78 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-011.rdf SHA1 b99122bd411a74656198325d88619da01e4eeba3 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-012.rdf SHA1 769eb1556e375fd4edc9e0e341f3005594fd0950 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-013.rdf SHA1 6a18695968cc78d6cbdec76b87298bce702de695 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-014.rdf SHA1 91657c21823d89f5f88dfda0469a9b62ee52573d t/data/rdfxml-w3c/rdfms-rdf-names-use/error-015.rdf SHA1 8d862f38dca7c5842cf3206361dc2dd5a0809361 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-016.rdf SHA1 f28bb15da96634a9133b9c18fd6a84e1b4225299 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-017.rdf SHA1 56f985abd4be1605adbd5fea6d1764e7420e835e t/data/rdfxml-w3c/rdfms-rdf-names-use/error-018.rdf SHA1 1c32d602ecda187d923b097b5ae125c697d7d671 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-019.rdf SHA1 8a54c5536a8ea3fd898554a7049214dcdabbac17 t/data/rdfxml-w3c/rdfms-rdf-names-use/error-020.rdf SHA1 feb8a9efa96ad70b95b9ac4274b84fbc11243673 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-001.nt SHA1 72df55757e6c9ee682586828352ffb9670dc4f07 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-001.rdf SHA1 781baa7d83befe2026e5a28aab5c83debf843763 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-002.nt SHA1 b1330aa6b604053df2c978c4831f08e319f0914b t/data/rdfxml-w3c/rdfms-rdf-names-use/test-002.rdf SHA1 a8d1054b2b24afbf21ab4530851c828a13d92061 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-003.nt SHA1 4d11b1503d58697893889e2f001e6a7003ee4f9f t/data/rdfxml-w3c/rdfms-rdf-names-use/test-003.rdf SHA1 1ff731661905c9e6c6bf144fe63d3e3a088d0ef1 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-004.nt SHA1 8ac7006d7b68c698307f7514ff1ddd772001bdf6 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-004.rdf SHA1 e0901f16077b97ce8728e5b7231b39d89e657e7a t/data/rdfxml-w3c/rdfms-rdf-names-use/test-005.nt SHA1 bc85dc1eceafd077c1766a19c181ec8f9de15930 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-005.rdf SHA1 13943f1c27229bbbd5dfe1c846f24b09c462fb0f t/data/rdfxml-w3c/rdfms-rdf-names-use/test-006.nt SHA1 b4d647a6a20dc2e9611cf8cfaa57213f8376ffd6 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-006.rdf SHA1 4a3130f6deaec0f1be46fb47697b6d9eb992b7ac t/data/rdfxml-w3c/rdfms-rdf-names-use/test-007.nt SHA1 7e1f965e1f4b9d76c0d6103f1b9207728b573d13 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-007.rdf SHA1 ddeca4745515e27c8973366347aec6f3a0859b3e t/data/rdfxml-w3c/rdfms-rdf-names-use/test-008.nt SHA1 ff92592965869f88db82c71fed4e51698fe1d6e0 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-008.rdf SHA1 3c12d63eb2cf6ff3bef721ec621f3492a7078172 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-009.nt SHA1 d68a19c2d12b4443244b3a56b88c4bed3e0a6251 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-009.rdf SHA1 41e2e54d8cf61a33902b452c75e4d66f4c9e29b7 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-010.nt SHA1 6ce34d43a852cb3585092e7520e634af8d1c88c5 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-010.rdf SHA1 b1c4e9201b8e2bc4e8a93720d644f7f941548910 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-011.nt SHA1 5c52cfdb7157ecf62e19ccb2df6fb39a9856eddb t/data/rdfxml-w3c/rdfms-rdf-names-use/test-011.rdf SHA1 afd7e28fc18b37fd4bbb611f8331747b1e946b4c t/data/rdfxml-w3c/rdfms-rdf-names-use/test-012.nt SHA1 7ca12d7092cf1a41b6cb886dae855c7117013a28 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-012.rdf SHA1 0e46ba4339f4bae7fd18a86dd77e13b055f066ac t/data/rdfxml-w3c/rdfms-rdf-names-use/test-013.nt SHA1 7f96a9797126546fafdc3c28da3176b079215d0a t/data/rdfxml-w3c/rdfms-rdf-names-use/test-013.rdf SHA1 8036d781d7095f05b56abbe796003c182245caf6 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-014.nt SHA1 8d5b6e9e1ab3c61909b20abf527c4c10c4011bbe t/data/rdfxml-w3c/rdfms-rdf-names-use/test-014.rdf SHA1 259e297eded90add58f5feeda6cbc0b9660b6b44 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-015.nt SHA1 8a07a265fcb06238fc138d62b1d1134f38fa04e2 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-015.rdf SHA1 9a3b6483702aee5d44b8f42072caa6b3fccd4d84 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-016.nt SHA1 2eb1134b15a967630a0b68ba8880b84e2abca0ed t/data/rdfxml-w3c/rdfms-rdf-names-use/test-016.rdf SHA1 0dac56ada2ca01c55e00bc4db84d7f8096a08d5d t/data/rdfxml-w3c/rdfms-rdf-names-use/test-017.nt SHA1 f4b88d30b19a00c0465e076bafba232cb1d6941f t/data/rdfxml-w3c/rdfms-rdf-names-use/test-017.rdf SHA1 1b8f74bc674d450d8223332ca3bd090cb23bc531 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-018.nt SHA1 42b676754bb90081054b9de591b606f380552e5b t/data/rdfxml-w3c/rdfms-rdf-names-use/test-018.rdf SHA1 2ef10e467099ff4c823a00ea3493569c95da8967 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-019.nt SHA1 ff54edb1132ff505b49f591fc853ee0e2f4ba916 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-019.rdf SHA1 bc27007e36ade5cdb6fd169e36db0c00a889980b t/data/rdfxml-w3c/rdfms-rdf-names-use/test-020.nt SHA1 bb380dc79f13d294894436a4781a4c3d9d71450c t/data/rdfxml-w3c/rdfms-rdf-names-use/test-020.rdf SHA1 4cef737e91e370fab8ae2ee2a2ea402247b40838 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-021.nt SHA1 6fbd4fbf8db879df2723cfd39a73136ab8a2320e t/data/rdfxml-w3c/rdfms-rdf-names-use/test-021.rdf SHA1 be3e793856185e96b0360273ea01201484545527 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-022.nt SHA1 2bfbc5bdbce27c6d668451d77ab8a7ecf9e7933b t/data/rdfxml-w3c/rdfms-rdf-names-use/test-022.rdf SHA1 b723ff76b7010541155a3672419d25400bb6fb82 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-023.nt SHA1 60a72e97c9fdd2d6e35d9c96ae4cf9fe106043d2 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-023.rdf SHA1 a2a594c0461aa683fb5b37db439544132b61177d t/data/rdfxml-w3c/rdfms-rdf-names-use/test-024.nt SHA1 154da445b42a2231d9628d55258a7ea671657e86 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-024.rdf SHA1 555fc309e07bfcb471a476312c979af9c91e8e8c t/data/rdfxml-w3c/rdfms-rdf-names-use/test-025.nt SHA1 9778a147c695df82ea08c717c089a589f394171a t/data/rdfxml-w3c/rdfms-rdf-names-use/test-025.rdf SHA1 59ce2d0ebb2740bfded73bdee4e80bf1aaea28ec t/data/rdfxml-w3c/rdfms-rdf-names-use/test-026.nt SHA1 2940788de9c41e58c7aaf2f43beb9bf0e3b2ff54 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-026.rdf SHA1 a3a037320b087a1faffc8199eba7ca4401bdf790 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-027.nt SHA1 accc226cf9540dca417104301f84f1d73002ce34 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-027.rdf SHA1 d4002d72a90af9c40ac6cf102bdbac3c3b34ea96 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-028.nt SHA1 6a47421fd1ef009a6d6cdb2d4a6a7bcf9f290e84 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-028.rdf SHA1 33f8ca34219b149a12b0731d8405487d1b00451c t/data/rdfxml-w3c/rdfms-rdf-names-use/test-029.nt SHA1 9a4755b8dcb7a301f1c3ad89dc2e688258b67cc6 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-029.rdf SHA1 09feb1a885115c8a532a12ea20bbef18b757fc50 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-030.nt SHA1 8214eb538b5fa0969372736b1b557e4ee3e1a0dd t/data/rdfxml-w3c/rdfms-rdf-names-use/test-030.rdf SHA1 09feb1a885115c8a532a12ea20bbef18b757fc50 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-031.nt SHA1 19540ebabcf1786aabab796e209e1361e1cd47ee t/data/rdfxml-w3c/rdfms-rdf-names-use/test-031.rdf SHA1 c02baacb71936c7145691d422a4ea00da7fecd4f t/data/rdfxml-w3c/rdfms-rdf-names-use/test-032.nt SHA1 7cfe674db22347dcf07391c9f0c57c151e65740a t/data/rdfxml-w3c/rdfms-rdf-names-use/test-032.rdf SHA1 699e0a5ad1593783556cddc5a235dd55213f73ff t/data/rdfxml-w3c/rdfms-rdf-names-use/test-033.nt SHA1 0f8dbcec0e4ba35877c7fb3e9883bfeb34b5a210 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-033.rdf SHA1 4796859180b246e647283f579645ee73da369342 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-034.nt SHA1 d66600a50977de47f476aef4b02a6165b11de0ad t/data/rdfxml-w3c/rdfms-rdf-names-use/test-034.rdf SHA1 3abac2590aed4794ee19bf04f6653388d6420f34 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-035.nt SHA1 67626b7c89a606e3f0bae5d53a1e2c762cabdc45 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-035.rdf SHA1 7bcc25c572da53859b8be1f70e9924edbc628e5a t/data/rdfxml-w3c/rdfms-rdf-names-use/test-036.nt SHA1 71e1a948fdee8468aad57b2e2b4cccd6d3a028bd t/data/rdfxml-w3c/rdfms-rdf-names-use/test-036.rdf SHA1 9fbc5a77cd0af42b2e14c2ed82fbcc84c02db5a0 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-037.nt SHA1 ab12deafb6053e3b87b9473b6ed485991598b1d8 t/data/rdfxml-w3c/rdfms-rdf-names-use/test-037.rdf SHA1 82df3ec8a94e3d12d6dea05984c113df93eabeea t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-001.nt SHA1 780e805788b1cffe691ce7225baa2854ea68ac44 t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-001.rdf SHA1 bccad3cb2a94f28f58d05435003ac0f2dcffea49 t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-002.nt SHA1 0d629c9814e3204ba5477bba5bec4953892d3e86 t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-002.rdf SHA1 b400af215987042a972d85a32e59ecad2a783c97 t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-003.nt SHA1 02cf3f0a7778904a66736c604b18ee5cb2d004d0 t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-003.rdf SHA1 3d98e49b0c6aa8ed5258b27cfe842ce41898a337 t/data/rdfxml-w3c/rdfms-reification-required/test001.nt SHA1 0cac5f7ac22fcf27faaf264282719803d3095d39 t/data/rdfxml-w3c/rdfms-reification-required/test001.rdf SHA1 031bf032e4fc082da20234740dba7d8ed76273c2 t/data/rdfxml-w3c/rdfms-seq-representation/empty.nt SHA1 c9f9acd99ffa06aeacfb99e263eaf9e17e334692 t/data/rdfxml-w3c/rdfms-seq-representation/test001.nt SHA1 97f77ee22ec0d258f085422c4d25c9cbca71efc3 t/data/rdfxml-w3c/rdfms-seq-representation/test001.rdf SHA1 64b1e938aa0d4d086c5dbc9a782c6dc4a01861ca t/data/rdfxml-w3c/rdfms-seq-representation/test002.nt SHA1 4c3d43e4c66b3bcfb2e81b6e1564d6861002ca0a t/data/rdfxml-w3c/rdfms-seq-representation/test003a.nt SHA1 5f7f3ef74c17ee19b2d75460306a3ce11677fa36 t/data/rdfxml-w3c/rdfms-seq-representation/test003b.nt SHA1 b9f42bc5e981fce24d714e4c1f650fc26a9a859b t/data/rdfxml-w3c/rdfms-seq-representation/test004.nt SHA1 2dc784e374b8bb3230bd6a6a8c449f88dfcffae6 t/data/rdfxml-w3c/rdfms-syntax-incomplete/error001.rdf SHA1 cbb755f1c41340300d3d51404fcbad5e51e7cda2 t/data/rdfxml-w3c/rdfms-syntax-incomplete/error002.rdf SHA1 e98e9e73bc66bff77e56ae7ee27c3104f9d60c58 t/data/rdfxml-w3c/rdfms-syntax-incomplete/error003.rdf SHA1 cb82ea1ecbc0eb3ac106d2a30538aada7dcda076 t/data/rdfxml-w3c/rdfms-syntax-incomplete/error004.rdf SHA1 0a2d6f9a0db6f9503fe4d97fb9d9969292dfa189 t/data/rdfxml-w3c/rdfms-syntax-incomplete/error005.rdf SHA1 458a4c46a3a020facbabdfdc89404073079758f4 t/data/rdfxml-w3c/rdfms-syntax-incomplete/error006.rdf SHA1 2a11b7330c1e9887b4445aea37089bd9fb64c652 t/data/rdfxml-w3c/rdfms-syntax-incomplete/test001.nt SHA1 3d9bbad1776bde801b209dc6162f951d0ac2b247 t/data/rdfxml-w3c/rdfms-syntax-incomplete/test001.rdf SHA1 05f245b33f2d64682345584c9b93473713cf6409 t/data/rdfxml-w3c/rdfms-syntax-incomplete/test002.nt SHA1 f36eb8b6e165cca2461ea3c9d1e062884af73c41 t/data/rdfxml-w3c/rdfms-syntax-incomplete/test002.rdf SHA1 b7713bf1bbe5b7227ca68de5aad0d274d341370d t/data/rdfxml-w3c/rdfms-syntax-incomplete/test003.nt SHA1 5952e383c82e14eb82f4e660d44edcde6b01c74c t/data/rdfxml-w3c/rdfms-syntax-incomplete/test003.rdf SHA1 f8659c7f6d74c7dfe312a66c6aab92d2ab326865 t/data/rdfxml-w3c/rdfms-syntax-incomplete/test004.nt SHA1 a7b86ed116a6e4b9c69e08c656f6ebc0c36d198c t/data/rdfxml-w3c/rdfms-syntax-incomplete/test004.rdf SHA1 06396348de1f058f20076d97ea8437e5ce639ef6 t/data/rdfxml-w3c/rdfms-uri-substructure/error001.nt SHA1 34bf94ab268fa1a2218ff2608746a2bc053c1fb2 t/data/rdfxml-w3c/rdfms-uri-substructure/test001.nt SHA1 c7f819b00740d354ea75a9e356cbe98bfaed9db2 t/data/rdfxml-w3c/rdfms-uri-substructure/test001.rdf SHA1 1afefe6aaa7f01a64fac1573889c23260dd6d046 t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test001.nt SHA1 cfc6cf63d1228ab3a75fc15457b203db6dd52c6a t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test001.rdf SHA1 cf57e49bb7951dedb63648255904aedef9196ced t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test002.nt SHA1 87b9d20b28ff7d30585200bd590c6c647846822a t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test002.rdf SHA1 7c86e134f8d9649d7545758d211b4661724ccfa8 t/data/rdfxml-w3c/rdfms-xmllang/test001.nt SHA1 8fc6c960be3544f150578cd17a27b5cd18b147ca t/data/rdfxml-w3c/rdfms-xmllang/test001.rdf SHA1 db4f9014eaf61581b48fc3cc4066ac2560fe4fae t/data/rdfxml-w3c/rdfms-xmllang/test002.nt SHA1 0cafdfb53084a180a749e0854015995db1dc06ff t/data/rdfxml-w3c/rdfms-xmllang/test002.rdf SHA1 9f693d9a21d9ef8b52b0799f7c900d1af63c14f3 t/data/rdfxml-w3c/rdfms-xmllang/test003.nt SHA1 9f922020f797821052a65481ebc76e6805f5bbd4 t/data/rdfxml-w3c/rdfms-xmllang/test003.rdf SHA1 5364e2f709fb7994d65bdcd496ba3ef5579c64c9 t/data/rdfxml-w3c/rdfms-xmllang/test004.nt SHA1 2ca060214cef5921185949584a6bfbb4642c0b37 t/data/rdfxml-w3c/rdfms-xmllang/test004.rdf SHA1 57a6b3fae4b4f9291044df55dde69507c592be2f t/data/rdfxml-w3c/rdfms-xmllang/test005.nt SHA1 a339b027e896a86d4a303df354adc69ca34c32ff t/data/rdfxml-w3c/rdfms-xmllang/test005.rdf SHA1 2a96fc24949f14039e6bf25fbe820cb43fc0dfcf t/data/rdfxml-w3c/rdfms-xmllang/test006.nt SHA1 b98cc5752f86feb22e122abfc48a15d76126d5fb t/data/rdfxml-w3c/rdfms-xmllang/test006.rdf SHA1 08be00731bbe159100641e2eab1957cd796f7afa t/data/rdfxml-w3c/rdfms-xmllang/test007a.nt SHA1 1a4c06b18a5dfff03821e881eeb33f89f8f33aca t/data/rdfxml-w3c/rdfms-xmllang/test007b.nt SHA1 b02c3514c8753ee0df342a324fe6fe270d88d866 t/data/rdfxml-w3c/rdfms-xmllang/test007c.nt SHA1 423093a19f630378aa1a2d2c0596aca580cd1cb1 t/data/rdfxml-w3c/rdfs-container-membership-superProperty/not1C.rdf SHA1 d0e55ee39d76767529109d2dbcad3dd4812be81d t/data/rdfxml-w3c/rdfs-container-membership-superProperty/not1P.rdf SHA1 4b0cd463aab481aa550157909cb9c69b7d71b52b t/data/rdfxml-w3c/rdfs-domain-and-range/nonconclusions005.rdf SHA1 455482885a1007ed001a591217942546ed1f5499 t/data/rdfxml-w3c/rdfs-domain-and-range/nonconclusions006.rdf SHA1 fc169d5637735ed072c990c61c129d5215f39b94 t/data/rdfxml-w3c/rdfs-domain-and-range/premises005.rdf SHA1 f6ed2f04998c5ab1daf4cdea24d7ad48604de7a1 t/data/rdfxml-w3c/rdfs-domain-and-range/premises006.rdf SHA1 d9d350a8f395effb7057117f1cda37e2531bbedd t/data/rdfxml-w3c/rdfs-domain-and-range/test001.nt SHA1 01f634282a5c9db205081468fc753e9b9e59f063 t/data/rdfxml-w3c/rdfs-domain-and-range/test001.rdf SHA1 f666f7957a2d9ade8a48198629cc2df269cae8bf t/data/rdfxml-w3c/rdfs-domain-and-range/test002.nt SHA1 a6892e5856c1161fcbf12d6013698d6b2d3c9ebc t/data/rdfxml-w3c/rdfs-domain-and-range/test002.rdf SHA1 2a63d859e7f930ee7e4b3916b5f7250217e16c94 t/data/rdfxml-w3c/rdfs-entailment/test001.nt SHA1 a6a0141e8c99b8b5c5ee49263dde6e041a052541 t/data/rdfxml-w3c/rdfs-entailment/test002.nt SHA1 7ed60f2588bb7462c5bd79e3ac4487b9e768de22 t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/test001.nt SHA1 6a2799a716d7bb3e434e058b8ade9d65c7a3bc6a t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/test001.rdf SHA1 8e79aac5835445bf14c55c34a57d837528f80c2f t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/test001.nt SHA1 4d652821b2126f7b737b6152c022f6e4c7f1c7a7 t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/test001.rdf SHA1 6f3e038a63ac2af8fabd7e40833fe32998209bb2 t/data/rdfxml-w3c/rdfs-subClassOf-a-Property/test001.nt SHA1 ada6390a7ae8ef0dcada7a2b1c35d7e77fea7ce8 t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/test001.nt SHA1 0b6d9ef13876a564c2b517bcc9c26f9bbbf614a5 t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/test002.nt SHA1 ed08dbb10587c156b1d594e33c5fe080261522a4 t/data/rdfxml-w3c/statement-entailment/test001a.nt SHA1 37ef78eb599ef688f194bcea4881c3432df4597a t/data/rdfxml-w3c/statement-entailment/test001b.nt SHA1 2526581be272bf28b4ba13d3919871847506b86a t/data/rdfxml-w3c/statement-entailment/test002a.nt SHA1 256a0e31d22bd45225ecb24f19d84aab28c620ed t/data/rdfxml-w3c/statement-entailment/test002b.nt SHA1 194e3236db2ed52f78fee5fafd658e5c6df342f2 t/data/rdfxml-w3c/tex-01/test001.rdf SHA1 bb5ec8a49a53515c8600e74618ab7bb0006a7ad0 t/data/rdfxml-w3c/tex-01/test002.rdf SHA1 cc047f847df2dcff66dbb698e0d199f99f1017a4 t/data/rdfxml-w3c/unrecognised-xml-attributes/test001.nt SHA1 ee846d63077d6c2b770e6690a0633847a1055d90 t/data/rdfxml-w3c/unrecognised-xml-attributes/test001.rdf SHA1 1b08573c848505f270765d5093b75f71b9a4ce4d t/data/rdfxml-w3c/unrecognised-xml-attributes/test002.nt SHA1 4abd171d9ace15eae548cbd3c3c44eacc1e18b24 t/data/rdfxml-w3c/unrecognised-xml-attributes/test002.rdf SHA1 4d50d9e048950e8c38babfe95e55cfeb6d6fdb1f t/data/rdfxml-w3c/xml-canon/test001.nt SHA1 c859978e25b46384668cd9324ba2668039ac5861 t/data/rdfxml-w3c/xml-canon/test001.rdf SHA1 7b4996bea259f5d8b0b957c97307a7395cad18c7 t/data/rdfxml-w3c/xmlbase/test001.nt SHA1 576c7a817764f0ac9a120d47e9af4dc86548f01a t/data/rdfxml-w3c/xmlbase/test001.rdf SHA1 22ab8348bf4810dd555149dd9faec4c5712adb0e t/data/rdfxml-w3c/xmlbase/test002.nt SHA1 3e4e8ccfd1df236f87f085d60156780d0c56dfc1 t/data/rdfxml-w3c/xmlbase/test002.rdf SHA1 0e5b37565a99ad4424bae2e68ee53ad5a5d76a22 t/data/rdfxml-w3c/xmlbase/test003.nt SHA1 7f05172aba698ee0421d6b4b1677a32311cdb663 t/data/rdfxml-w3c/xmlbase/test003.rdf SHA1 84eb865391fe5cc38f86d3399766e27a4cdf1720 t/data/rdfxml-w3c/xmlbase/test004.nt SHA1 6a1114224999014b57ca07cc14cc914e048c49a6 t/data/rdfxml-w3c/xmlbase/test004.rdf SHA1 7e2df7dbf2b4c61d0d2084e955585bb3397dc5bb t/data/rdfxml-w3c/xmlbase/test006.nt SHA1 e965d65862030f5d8bef2bdebfd38febb6174a60 t/data/rdfxml-w3c/xmlbase/test006.rdf SHA1 41b7bcb7b306c8f0c0305c3b8875e435a5bee8ad t/data/rdfxml-w3c/xmlbase/test007.nt SHA1 bec4b30092eaa28dc22c57baa776d6573f95d4eb t/data/rdfxml-w3c/xmlbase/test007.rdf SHA1 7f541cf02e962bf5c3dbe7adf6fa4ad4e5b51da5 t/data/rdfxml-w3c/xmlbase/test008.nt SHA1 245a141c43558df5517e35ae468a154e01066196 t/data/rdfxml-w3c/xmlbase/test008.rdf SHA1 d2dfe4c3fba9c11b2f7facb59661ab29343baad1 t/data/rdfxml-w3c/xmlbase/test009.nt SHA1 9016ac5e95e6dd6b4d5e710fd15ac290dbe03408 t/data/rdfxml-w3c/xmlbase/test009.rdf SHA1 2315db0f2f15c4fa152365952b3f81ae908b2db3 t/data/rdfxml-w3c/xmlbase/test010.nt SHA1 b7ce73513d9f2bdc78cc3f288f7d46eee5e6ed69 t/data/rdfxml-w3c/xmlbase/test010.rdf SHA1 d7c7a4096044d9c71762c0ea343dade0ea0cfe10 t/data/rdfxml-w3c/xmlbase/test011.nt SHA1 ee8ccb0bd072f1e271d5a922d2065d36c4f17feb t/data/rdfxml-w3c/xmlbase/test011.rdf SHA1 0dbc10ed4e033668d30e477b7c37311d20356f77 t/data/rdfxml-w3c/xmlbase/test013.nt SHA1 65265682e89a3a9ea6a54889ea3023a99d853cd7 t/data/rdfxml-w3c/xmlbase/test013.rdf SHA1 267b11356105a1da69bc2fa79064fce2e9849919 t/data/rdfxml-w3c/xmlbase/test014.nt SHA1 028ef094b9e633be40329e4cd47bc8ad321f4430 t/data/rdfxml-w3c/xmlbase/test014.rdf SHA1 9c5090f58213a1dde1f7fc640eccfab58a8b176d t/data/rdfxml-w3c/xmlsch-02/test001.rdf SHA1 a6f933f6eefb6fef0fe369d0bcb96917ac031869 t/data/rdfxml-w3c/xmlsch-02/test002.rdf SHA1 992a730c165cda3af55cda7dbec594d95d42c2d7 t/data/rdfxml-w3c/xmlsch-02/test003.rdf SHA1 1c46ce1a05e461e12e462b319a89eb0fa8c351d9 t/data/trig-2013/HYPHEN_MINUS_in_localName.nq SHA1 60e00c909452995a2eeb7119963b1f3fba08ea99 t/data/trig-2013/HYPHEN_MINUS_in_localName.trig SHA1 cde2d88a1e16ab712faff59c79631acfe3203f2d t/data/trig-2013/IRIREF_datatype.nq SHA1 6b12c8cab173cbcb33872b054b3e07ccfb080cf6 t/data/trig-2013/IRIREF_datatype.trig SHA1 f53b515dfde3c4f784f0d24c6001ff0a4749d16f t/data/trig-2013/IRI_spo.nq SHA1 fbb42f2b7d2acf301fab63890e378068c4b96494 t/data/trig-2013/IRI_subject.trig SHA1 30720b14727cdce95b554dad89de7339c778aced t/data/trig-2013/IRI_with_all_punctuation.nq SHA1 a51aac58f3a1deb5fb15f15652bf84df7d226453 t/data/trig-2013/IRI_with_all_punctuation.trig SHA1 e94c3d1cb0ddd517b05a906d691c27da0db55390 t/data/trig-2013/IRI_with_eight_digit_numeric_escape.trig SHA1 1525a1ec55c6afb1de495d304c73d16c1cfc258d t/data/trig-2013/IRI_with_four_digit_numeric_escape.trig SHA1 fd90867a4b762b3b1d72ab55ff74ca10639189e2 t/data/trig-2013/LICENSE SHA1 0728ca8a85796e43acad4643550dfed736de4987 t/data/trig-2013/LITERAL1.nq SHA1 002ce25cdfca98d4021f16c4f81371e9d05a2147 t/data/trig-2013/LITERAL1.trig SHA1 42d563ff8b95d0ad973fbd7ce0b439ba3c6cd7fe t/data/trig-2013/LITERAL1_all_controls.nq SHA1 7abf5b3f047c03a4154663c90b00cfc306138c71 t/data/trig-2013/LITERAL1_all_controls.trig SHA1 addee996be5834ec20bc07f6fb16e98a2a319206 t/data/trig-2013/LITERAL1_all_punctuation.nq SHA1 ec23633b6f183c2cad7df1c2bfdefbc1c25ea190 t/data/trig-2013/LITERAL1_all_punctuation.trig SHA1 0d571e3023f2d8969da8798ed1b033a5bbc4f007 t/data/trig-2013/LITERAL1_ascii_boundaries.nq SHA1 4a5e87f8d4871b41d9ff7338c6cd6efe6ea43b23 t/data/trig-2013/LITERAL1_ascii_boundaries.trig SHA1 a68d20087e5cccfa6a95c5530b11bf834b27de3b t/data/trig-2013/LITERAL2.trig SHA1 63273eb7146bc91b8c947cd2b19eecac73cacd5e t/data/trig-2013/LITERAL2_ascii_boundaries.nq SHA1 94749a070ff9120de8784dfaa3e70b1e1cfc0f60 t/data/trig-2013/LITERAL2_ascii_boundaries.trig SHA1 6badba245eb5ae6c614aac741c17d1228dd2b3ed t/data/trig-2013/LITERAL_LONG1.trig SHA1 ddd783b0565a768bd99fb89f155b1b17af05c3e5 t/data/trig-2013/LITERAL_LONG1_ascii_boundaries.nq SHA1 7f898d326f500f8ad9c3f2839bdabca44c47464c t/data/trig-2013/LITERAL_LONG1_ascii_boundaries.trig SHA1 2a5ee2f171775d7b62ba52dd6646d3c74079d60d t/data/trig-2013/LITERAL_LONG1_with_1_squote.nq SHA1 6c232302ca24c11c12a1cc2274b0409cbac71794 t/data/trig-2013/LITERAL_LONG1_with_1_squote.trig SHA1 84937a1b2beb26e8cd464fc490d66ff6de077d31 t/data/trig-2013/LITERAL_LONG1_with_2_squotes.nq SHA1 e9feb56929ccb9a5a5ca61b36d88d68751b7b8b9 t/data/trig-2013/LITERAL_LONG1_with_2_squotes.trig SHA1 6c5acba1bbd20cdc07be5865e4059a7fb4dacce4 t/data/trig-2013/LITERAL_LONG2.trig SHA1 12b37697c44b22dbb571e7eac89fd977a02f5416 t/data/trig-2013/LITERAL_LONG2_ascii_boundaries.nq SHA1 69ab1af4f5742229b661a989eaa9888cb2900f78 t/data/trig-2013/LITERAL_LONG2_ascii_boundaries.trig SHA1 f3e182351d79664dbb0cea75c6ed206dae3416e3 t/data/trig-2013/LITERAL_LONG2_with_1_squote.nq SHA1 4a2fc51b4134ad4b0697d8f107fed45ffcd109ed t/data/trig-2013/LITERAL_LONG2_with_1_squote.trig SHA1 15d3fde2f718bb5ea3cef04e5e20bf196707b64b t/data/trig-2013/LITERAL_LONG2_with_2_squotes.nq SHA1 70e0a78de2e46dd236b42386f630e10e28046519 t/data/trig-2013/LITERAL_LONG2_with_2_squotes.trig SHA1 1025ec1b58fef13ca82bddf3269fc31f7e20bb1a t/data/trig-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq SHA1 c6bc26b570fe0d572ddab1f632dacc6c42451ced t/data/trig-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig SHA1 204d7885ac548d012287c2a27b48f20079fef0b8 t/data/trig-2013/README SHA1 0d119a92e75be5f51307d0891407a935ba4b8029 t/data/trig-2013/SPARQL_style_base.trig SHA1 e6ccc71fcc25803b71663b8d2a1e3ec1c1e27bea t/data/trig-2013/SPARQL_style_prefix.trig SHA1 b2cad39930e1ef3969e65a93d3d0e4f635fed243 t/data/trig-2013/alternating_bnode_graphs.nq SHA1 6ab20bf03227e84af4fdbdf3967ce52b05489b35 t/data/trig-2013/alternating_bnode_graphs.trig SHA1 65fe3c6aa2d22c688666a7ba07886350131acb46 t/data/trig-2013/alternating_iri_graphs.nq SHA1 a35c3ff4b841d60eb98540f200359cb8adf8f2f0 t/data/trig-2013/alternating_iri_graphs.trig SHA1 dae909de7b9733ff67c8133fd4d093ced01fe598 t/data/trig-2013/anonymous_blank_node_graph.trig SHA1 c3423d68a163ad9a1ab6a99658f83af7e11a6d54 t/data/trig-2013/anonymous_blank_node_object.nq SHA1 66b00f328ebeceb2c5fc1c716242cd50c329699d t/data/trig-2013/anonymous_blank_node_object.trig SHA1 c2c3fa97f5403efc3cb6724b142e0c0c612d354e t/data/trig-2013/anonymous_blank_node_subject.nq SHA1 3617a3d2035c907073f1321f6b4be3cc9aca8f31 t/data/trig-2013/anonymous_blank_node_subject.trig SHA1 79c69e5d8d0be2dee9392801102e07e5435e2e25 t/data/trig-2013/bareword_a_predicate.nq SHA1 0c780fceb352bc8bce8966efd26fc049a7d0f864 t/data/trig-2013/bareword_a_predicate.trig SHA1 5d925ba08a497d1df250e2adac6ddf3b323f8209 t/data/trig-2013/bareword_decimal.nq SHA1 1995e7e8458fb0c5a2944878861e75c1e459707a t/data/trig-2013/bareword_decimal.trig SHA1 f15f641ce018c8f04c47b8124e1acca69aeed11f t/data/trig-2013/bareword_double.nq SHA1 e585b8c839cbf7d5183cde11c827c58828047f48 t/data/trig-2013/bareword_double.trig SHA1 f2d640482642158d1438d82d49315056e7c3f83f t/data/trig-2013/bareword_integer.trig SHA1 e45ccd6c19f897d42aea6de07542719af3042ed8 t/data/trig-2013/blankNodePropertyList_as_object.nq SHA1 e7babd7633b6cf07a35f8a340e4bbbc85ba9bf0e t/data/trig-2013/blankNodePropertyList_as_object.trig SHA1 ab28d406b53091bd38cd1f81794472922a14d2f3 t/data/trig-2013/blankNodePropertyList_as_subject.nq SHA1 83108feac772902db33464bf9edea2911f95e4bc t/data/trig-2013/blankNodePropertyList_as_subject.trig SHA1 97713886422143b95d53414e25fea0b3debfdd0b t/data/trig-2013/blankNodePropertyList_containing_collection.nq SHA1 54a755e46a5ebdf2d35aac49053b9115b0cd7b45 t/data/trig-2013/blankNodePropertyList_containing_collection.trig SHA1 5d5691227c86390fa5b94c74596467c0d78cdf2a t/data/trig-2013/blankNodePropertyList_with_multiple_triples.nq SHA1 c27cbfac63dbff612458edd44b988bccca15131f t/data/trig-2013/blankNodePropertyList_with_multiple_triples.trig SHA1 205307dcbd0c0acad741d4313800c1742a183457 t/data/trig-2013/collection_object.nq SHA1 cba816d7204e3c87230d7e976e5af93683460b4e t/data/trig-2013/collection_object.trig SHA1 14b36fbe5cafdb8e39f58549b8d794001f1ed99c t/data/trig-2013/collection_subject.nq SHA1 4742a443211fbe2ab629162ec5dd8a4ac8d10ba1 t/data/trig-2013/collection_subject.trig SHA1 38c5b531b3856a2623e84735a99141dab3869f29 t/data/trig-2013/default_namespace_IRI.trig SHA1 f375e1233633d64fa018aae10ff3212ba68a02e7 t/data/trig-2013/double_lower_case_e.nq SHA1 e302fc45e994fe5387ed551f6f7e9b147a6d57a8 t/data/trig-2013/double_lower_case_e.trig SHA1 bf0f908850a4afc5ede51957ba412c9b1289cdbd t/data/trig-2013/empty_collection.nq SHA1 d705483721d6accff0a7f849a976d23cacf6fb65 t/data/trig-2013/empty_collection.trig SHA1 37401d1eed43d051701d449298c10bc25a1b02cb t/data/trig-2013/first.nq SHA1 54b89885df2d7f731d3bec413335faf07e34d476 t/data/trig-2013/first.trig SHA1 4dc4805fc3dad1016383f1185f9a3cad20457148 t/data/trig-2013/labeled_blank_node_graph.nq SHA1 24442979d67adaed9cb6282c78b1284f06966856 t/data/trig-2013/labeled_blank_node_graph.trig SHA1 14121b65d3530b5d3186d80664d4d99d33735ccd t/data/trig-2013/labeled_blank_node_object.nq SHA1 7c1b24fe85043adea75e656bc0d24713894782a2 t/data/trig-2013/labeled_blank_node_object.trig SHA1 b1edac56563f10451111deb9acb99d7cce95c06c t/data/trig-2013/labeled_blank_node_subject.nq SHA1 7902ce5ee8fb4193a5c239f9d40b5c02d8bd951d t/data/trig-2013/labeled_blank_node_subject.trig SHA1 613edef6bec761352c855ea8aa0fc94c14d0205e t/data/trig-2013/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig SHA1 66d0066fb4f1f667b7dd1897a96ef8ec1dfa8092 t/data/trig-2013/labeled_blank_node_with_leading_digit.trig SHA1 74f4149b1f588aa71d78eac1ed00605d3f7854e1 t/data/trig-2013/labeled_blank_node_with_leading_underscore.trig SHA1 57853db11749d2314ba42f0be4dd9628bf8f1b70 t/data/trig-2013/labeled_blank_node_with_non_leading_extras.trig SHA1 e489cb35926a336b8cd7af27be3c0261c0627ead t/data/trig-2013/langtagged_LONG.trig SHA1 11e918ef43808bd44a03dbf46af30035cfd5073a t/data/trig-2013/langtagged_LONG_with_subtag.nq SHA1 7935ee70ad0c2d64728861232a2939497373d983 t/data/trig-2013/langtagged_LONG_with_subtag.trig SHA1 762caecb33fa68860217b4beca4821f6680ac94b t/data/trig-2013/langtagged_non_LONG.nq SHA1 96cd9287dec56d6ef64ff19264066371fc5a61a9 t/data/trig-2013/langtagged_non_LONG.trig SHA1 d044d11888f8e697a87ea2e9cb40241c9f74d339 t/data/trig-2013/lantag_with_subtag.nq SHA1 b3bcc9f0c2f93a1d6dc4b9dd3dc09fbc85fa2f29 t/data/trig-2013/lantag_with_subtag.trig SHA1 ccd97248302c73958015e4a64eccad89af4ab4df t/data/trig-2013/last.nq SHA1 0cb6f2abffd38a6890528697bbe88305921344fe t/data/trig-2013/last.trig SHA1 41a2772136036f30afcc7f6ad97e30a3ac5449a4 t/data/trig-2013/literal_false.nq SHA1 bfca1650524a7b667741ba6d03943a32f9424280 t/data/trig-2013/literal_false.trig SHA1 2b5800a4a41832da04892d1d47da3008bc2451d0 t/data/trig-2013/literal_true.nq SHA1 d4b779ffb288ad9a7787f284fd48d228818b7965 t/data/trig-2013/literal_true.trig SHA1 11bc3a470e1543c30ad8a8d8f1a7e3f46f2739df t/data/trig-2013/literal_with_BACKSPACE.nq SHA1 b6f16dd0c5a8de88e6a6b6a3c2d535915d9a7fba t/data/trig-2013/literal_with_BACKSPACE.trig SHA1 f7304f44dfeacf073386cf573b91bdc693cc60e4 t/data/trig-2013/literal_with_CARRIAGE_RETURN.nq SHA1 203fed388696e12a0dac6bd9afd7c38017be4e4a t/data/trig-2013/literal_with_CARRIAGE_RETURN.trig SHA1 10cd04cd679d12ff0d1c984e4a6edd4bd35187c9 t/data/trig-2013/literal_with_CHARACTER_TABULATION.nq SHA1 90fcd1ba7b53cc9ca42d4add225f3e086847e873 t/data/trig-2013/literal_with_CHARACTER_TABULATION.trig SHA1 0832dc23d03c30c2c788575c668e3ddad89df969 t/data/trig-2013/literal_with_FORM_FEED.nq SHA1 0b893268e662fd763950e0fa6d5f58f7fe75e2ce t/data/trig-2013/literal_with_FORM_FEED.trig SHA1 ddb643126f70bb3e527fcf4cde417b6f90061d35 t/data/trig-2013/literal_with_LINE_FEED.nq SHA1 65a75b07544da5240bc052d531f678cf3e60a2c5 t/data/trig-2013/literal_with_LINE_FEED.trig SHA1 dd45cb32b293078c5b423100fb0675220ca9c69b t/data/trig-2013/literal_with_REVERSE_SOLIDUS.nq SHA1 05f216fa176454fcda893e1c51ebeaa481e830d6 t/data/trig-2013/literal_with_REVERSE_SOLIDUS.trig SHA1 af8422b9f36f61be9e241cac5af1dac307c5cdde t/data/trig-2013/literal_with_escaped_BACKSPACE.trig SHA1 5e62329f022c046a953cc89ca774aafdbb03e146 t/data/trig-2013/literal_with_escaped_CARRIAGE_RETURN.trig SHA1 16c93370a9ab70f150134036e59dc5912b461521 t/data/trig-2013/literal_with_escaped_CHARACTER_TABULATION.trig SHA1 4fd7b96f8ed747baeae27ae921a211f98bcebc27 t/data/trig-2013/literal_with_escaped_FORM_FEED.trig SHA1 2405a5155f98ede09de591be4b52ce2d00860845 t/data/trig-2013/literal_with_escaped_LINE_FEED.trig SHA1 7371472ae1e7174f4a0b9b0970887f0c0d130c96 t/data/trig-2013/literal_with_numeric_escape4.nq SHA1 21bb459f4067bb9eff3b563f84754af5b085818b t/data/trig-2013/literal_with_numeric_escape4.trig SHA1 810b82fa38c3038c089ff2002f156b1767739ddf t/data/trig-2013/literal_with_numeric_escape8.trig SHA1 df35b1a38a6cab2158c435e9549619d7acc557ff t/data/trig-2013/localName_with_PN_CHARS_BASE_character_boundaries.nq SHA1 8bd2aac0ca910a6d66ecd620ad9b2b65f777df61 t/data/trig-2013/localName_with_PN_CHARS_BASE_character_boundaries.trig SHA1 cd0982739bbf48c9e08f4025197dba0643aecc51 t/data/trig-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq SHA1 4090b1830b7758c7aeacdb804ddc0aa972e779a7 t/data/trig-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig SHA1 543d45c64ec4c4b12c18fcbbfc6b5d3823f7e95e t/data/trig-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq SHA1 ee7281e516a16f2c8d1082711de026704eb955e4 t/data/trig-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig SHA1 0db5ff04c211061b2f732310cbd14ddfd22d3c3c t/data/trig-2013/localName_with_leading_digit.nq SHA1 0a50677d0d7d7601b367b7a86d005ec34cc8194a t/data/trig-2013/localName_with_leading_digit.trig SHA1 486d1e4da51222ac43697ec6b02c49bd2699b1e1 t/data/trig-2013/localName_with_leading_underscore.nq SHA1 3ee6b5ed2b87559244212c47668b846901de7bb0 t/data/trig-2013/localName_with_leading_underscore.trig SHA1 7ef3757a356c35776da1979eb52b35e6ac8e1199 t/data/trig-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq SHA1 9455474153ceff6b5068583f18a88aed9fcf6316 t/data/trig-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig SHA1 cc64793fc49acf1833fef2e050ebc359694d7de2 t/data/trig-2013/localName_with_non_leading_extras.nq SHA1 9fcc8f151f112ee55cc73f1aa4e6be68870f17d8 t/data/trig-2013/localName_with_non_leading_extras.trig SHA1 b95a05125ad7a8f8e0682cafb8eb71aedd16210a t/data/trig-2013/localname_with_COLON.nq SHA1 64d26707c53be6aca0c3914103f41df90c3214e2 t/data/trig-2013/localname_with_COLON.trig SHA1 bf44af0920f272761df5b6856ed90a664bf67ba8 t/data/trig-2013/manifest.ttl SHA1 ec4d4c406901ef55848466efece01c122e1886eb t/data/trig-2013/negative_numeric.nq SHA1 7d9dc55f2a9b49f454a0003c67eb31e56b4ab86e t/data/trig-2013/negative_numeric.trig SHA1 80a410a347aac8a9a2c6c1f78786571fabfc5662 t/data/trig-2013/nested_blankNodePropertyLists.nq SHA1 839df830481b5c29a8e1c0c8b299b1ba1d6a68e8 t/data/trig-2013/nested_blankNodePropertyLists.trig SHA1 6e295ce42bef8abb47effdd3ad2fab85d2ff88e4 t/data/trig-2013/nested_collection.nq SHA1 3ed790cfcc4b4b0381a842ee52b602aa76f3b64b t/data/trig-2013/nested_collection.trig SHA1 69e27cc27d21cc9c55e95cbf6d797aa8a1f955cf t/data/trig-2013/numeric_with_leading_0.nq SHA1 2915118385f4ea207979c37a2d9d3c8ab30cff51 t/data/trig-2013/numeric_with_leading_0.trig SHA1 616b044cf2b283bd8daec810ee79626846be1c6f t/data/trig-2013/objectList_with_two_objects.nq SHA1 812cb708a72a0c8065f7abedd2c8285738b80d8a t/data/trig-2013/objectList_with_two_objects.trig SHA1 61eed5d5395e3fe5d1e1a27f64793e4d278b79d8 t/data/trig-2013/old_style_base.trig SHA1 5ad36f704da417d8174f0cf62e911b8418158ca6 t/data/trig-2013/old_style_prefix.trig SHA1 104ca283223c4ad09b2aae022e6e334eb81b0512 t/data/trig-2013/percent_escaped_localName.nq SHA1 c8ad1b1f442c246c033ef134155259ce04005f2e t/data/trig-2013/percent_escaped_localName.trig SHA1 d3bd0a321cb50cc7346766904784fadda7437f33 t/data/trig-2013/positive_numeric.nq SHA1 40602d752045659185a0da0f4052f931ce801a65 t/data/trig-2013/positive_numeric.trig SHA1 506784c2aa17a324cb150223a455d58295810e78 t/data/trig-2013/predicateObjectList_with_two_objectLists.nq SHA1 7d70b482a52310bb2d51708af46afb2d0824800d t/data/trig-2013/predicateObjectList_with_two_objectLists.trig SHA1 68beeed5aae12593725cd50b616e9d2155a6e319 t/data/trig-2013/prefix_only_IRI.trig SHA1 7a452a66e599ba8430efc842d28a682d5478e24d t/data/trig-2013/prefix_reassigned_and_used.nq SHA1 5c55618556ef4de00cca29300831558ca5bbc856 t/data/trig-2013/prefix_reassigned_and_used.trig SHA1 9b2352d601c0a6535951bf5ce5a9e16683f1bd94 t/data/trig-2013/prefix_with_PN_CHARS_BASE_character_boundaries.trig SHA1 2c98bbaed9cd45593955a866796df180dbd1c266 t/data/trig-2013/prefix_with_non_leading_extras.trig SHA1 749fd577c7cdb406ab5218e68497de188976b515 t/data/trig-2013/prefixed_IRI_object.trig SHA1 c209e4ae0bc713489b95b9494a86ee8ce588b309 t/data/trig-2013/prefixed_IRI_predicate.trig SHA1 4ad09567b625d2930a25811eeab205e258d17332 t/data/trig-2013/prefixed_name_datatype.trig SHA1 c1737a2a6e6d919e90b2a27e67b8b81f0cbd29f4 t/data/trig-2013/repeated_semis_at_end.trig SHA1 c345a41358680a9ea6b920735002d9ecf993a668 t/data/trig-2013/repeated_semis_not_at_end.nq SHA1 983c601ee5d4ac5d6125bb94f211136a92a83115 t/data/trig-2013/repeated_semis_not_at_end.trig SHA1 3a62fd7f574d71e22bc0113c1f63539cfdaad915 t/data/trig-2013/reserved_escaped_localName.nq SHA1 ddfeb79e02c9b6cc540b81cfb0a6ece5fd427023 t/data/trig-2013/reserved_escaped_localName.trig SHA1 f60b53201ae77e4a45317d99fe17ad013e6e0058 t/data/trig-2013/sole_blankNodePropertyList.trig SHA1 84052562c3050798d97c87f07f1e93ce64b24da2 t/data/trig-2013/trig-eval-bad-01.trig SHA1 6400014c5907df204c5c3916c799dbd57f47f49d t/data/trig-2013/trig-eval-bad-02.trig SHA1 2e50cfc759ada9d565812d3fc15b93e58151ae9a t/data/trig-2013/trig-eval-bad-03.trig SHA1 5b3c4d8f74d99e63939fc58924502446ebcfb535 t/data/trig-2013/trig-eval-bad-04.trig SHA1 50b66b257367be25c03ac87416fd1792950baf2a t/data/trig-2013/trig-eval-struct-01.nq SHA1 6225b4116d5f57329ab915860d6a113391f811e7 t/data/trig-2013/trig-eval-struct-01.trig SHA1 5c8c5e0c76e9c67731ac42ed0725e1c2ffc4cff6 t/data/trig-2013/trig-eval-struct-02.nq SHA1 c04a913f8a618185108efcf5f18e7f6a2e66f7ef t/data/trig-2013/trig-eval-struct-02.trig SHA1 4d440870a791991b2d0d7cdd2cc621d6ea2d47b6 t/data/trig-2013/trig-subm-01.nq SHA1 acc75850e7a3420ef0fa4f5770b373529025f9f3 t/data/trig-2013/trig-subm-01.trig SHA1 4668e6f9c176c295fa2cf78560068022708e2438 t/data/trig-2013/trig-subm-02.nq SHA1 6e96a66d7aa71644499809ae9d8923bd4cdacb9e t/data/trig-2013/trig-subm-02.trig SHA1 eb87815d03d493632525fa98268545f4ff6e9535 t/data/trig-2013/trig-subm-03.nq SHA1 83f1d5019a2cf2132e46698ec3333c54ac8c0088 t/data/trig-2013/trig-subm-03.trig SHA1 6d74519c2e616d301c39226bc12b510a18312870 t/data/trig-2013/trig-subm-04.nq SHA1 7328b80575f9ac443c7bd4f82000d4d6f8231e13 t/data/trig-2013/trig-subm-04.trig SHA1 91c6596b0818884123de013698a935f59721e30b t/data/trig-2013/trig-subm-05.nq SHA1 bf9d580aafef0d59c881a95484a0ad2f315d4712 t/data/trig-2013/trig-subm-05.trig SHA1 44d7dccdae84b3a42766aafdda552bc9df62f36a t/data/trig-2013/trig-subm-06.nq SHA1 d3764dc1fac3bdd7062957f642d04fe3c46c05fd t/data/trig-2013/trig-subm-06.trig SHA1 4b3e6533645fcdc665ec418f78bf840cc4926be4 t/data/trig-2013/trig-subm-07.nq SHA1 91469c540fe909430f2286210fb1753505dae468 t/data/trig-2013/trig-subm-07.trig SHA1 ab0e1b607b6cf5e33de2d1062d2d6a8c534aea7e t/data/trig-2013/trig-subm-08.nq SHA1 3e44a57d9a4ce433fb98c06d6ef80748ef45f83c t/data/trig-2013/trig-subm-08.trig SHA1 20f8b37fbb5b86894d890cea3df5428aa2c6b385 t/data/trig-2013/trig-subm-09.nq SHA1 d654797351aec78466b2916d3457439d2e9150e4 t/data/trig-2013/trig-subm-09.trig SHA1 0868de5100bf1cbb8ef70e1ef08f7e42d3419190 t/data/trig-2013/trig-subm-10.nq SHA1 593d569eff6db2a1c9a6c63c9a513d79b3db9fbd t/data/trig-2013/trig-subm-10.trig SHA1 357df3b28b1bb65b0f32b55b95d243dee2deaf8d t/data/trig-2013/trig-subm-11.nq SHA1 caeb54dbf84c313e0fc88157b14238f20cd6a1db t/data/trig-2013/trig-subm-11.trig SHA1 c2db720c6205aa2a4e0507a3cf653a6c43bce014 t/data/trig-2013/trig-subm-12.nq SHA1 c76d4f7f680b7af018a3af6e599cd51b54d15800 t/data/trig-2013/trig-subm-12.trig SHA1 0a9d47a2facb0e4418ff835a5020c6643051f03f t/data/trig-2013/trig-subm-13.nq SHA1 608fe6e49e209e941626f0ddfdd5e4ec0de5c71f t/data/trig-2013/trig-subm-13.trig SHA1 c947ba440ce8ae46c5764ac65d088583acdaf50c t/data/trig-2013/trig-subm-14.nq SHA1 ba04480bc23169d34224c8027d7b134e37f0e49c t/data/trig-2013/trig-subm-14.trig SHA1 e9e23f8b5ad3560868f019a8ac1b171cef1308ed t/data/trig-2013/trig-subm-15.nq SHA1 11d6484718736543a3c52d6fc076dc38bcf9dd47 t/data/trig-2013/trig-subm-15.trig SHA1 87b98f93bc35b9d9cd53e13a47e1ae48834cd271 t/data/trig-2013/trig-subm-16.nq SHA1 0b03111efbb72f1227591dede3b93c2a82c017b2 t/data/trig-2013/trig-subm-16.trig SHA1 fdd08e8ac2cf7cbd3fe16ac5f19f8ce1beae09cd t/data/trig-2013/trig-subm-17.nq SHA1 0e8018aa2c874a84dd0e97680e03ea6fffa9972e t/data/trig-2013/trig-subm-17.trig SHA1 0cdb11643c662b7d7fd98bfb51df45d7d8516270 t/data/trig-2013/trig-subm-18.nq SHA1 7140cd88fb04570433c6324c240f32afd014b890 t/data/trig-2013/trig-subm-18.trig SHA1 fcd64f8a0da921a94ab4d6c45916479c1d08b94f t/data/trig-2013/trig-subm-19.nq SHA1 38f5b7938a3c88b98f745cc3b6b467c5c7cb9b33 t/data/trig-2013/trig-subm-19.trig SHA1 832ee2801713842aea54ed5bc25466be7ef34c94 t/data/trig-2013/trig-subm-20.nq SHA1 0ae0d7515c93a973ab7109b1ecbcc7467c89b87f t/data/trig-2013/trig-subm-20.trig SHA1 e89d0e7e36daad7ff55e00fc4b24beeb3af60c16 t/data/trig-2013/trig-subm-21.nq SHA1 1c090e2fb492e71b297cb25980f8e73a9a2c58af t/data/trig-2013/trig-subm-21.trig SHA1 998890198a687ea2ad57634c057d9aa5b80eec05 t/data/trig-2013/trig-subm-22.nq SHA1 b136d8b8af8930643efa265c7a4a8494ff90238c t/data/trig-2013/trig-subm-22.trig SHA1 a3d519f3917803e9b9b1f390b977918561333b18 t/data/trig-2013/trig-subm-23.nq SHA1 bda04a2491aad15ab0f3b08aa1eee6a4a4c5403b t/data/trig-2013/trig-subm-23.trig SHA1 fff9307a9de7041eb71aab47a840c18dfd61f566 t/data/trig-2013/trig-subm-24.nq SHA1 4a445dc9e29f602a2b89e1ad30457d3035befd5b t/data/trig-2013/trig-subm-24.trig SHA1 69037a14fcf66a1f07bba6a969e3f99254936fdc t/data/trig-2013/trig-subm-25.nq SHA1 c6f593ec5a6ecd80b56101050b680808bb4d5e73 t/data/trig-2013/trig-subm-25.trig SHA1 b1de4e68c9a9909cb86e65927215e11bb52aeb6b t/data/trig-2013/trig-subm-26.nq SHA1 de5c929c2a251fe85f2adce3ab0b893ea4b434c3 t/data/trig-2013/trig-subm-26.trig SHA1 f5bef4077776530f1cc23076ef4304a768e1981e t/data/trig-2013/trig-subm-27.nq SHA1 763a5b523b3c83a106f1be01711204a028e7e029 t/data/trig-2013/trig-subm-27.trig SHA1 e8f41c57bfb276eeac85123b005dad9bda575b04 t/data/trig-2013/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig SHA1 b181d677fc6d2615f8bd0a198e77aecb49e12a64 t/data/trig-2013/trig-syntax-bad-base-01.trig SHA1 388782d45ccb4740b120b2e6a0049dec6dfebd5a t/data/trig-2013/trig-syntax-bad-base-02.trig SHA1 0e817b7333d33da1d307e6ffaf7e94e831fbf18f t/data/trig-2013/trig-syntax-bad-base-03.trig SHA1 7433acc413c2ef91c090622d058f0f99f3cd2b71 t/data/trig-2013/trig-syntax-bad-base-04.trig SHA1 f7c9c29cf1536012101e1917a461e7db013b05b3 t/data/trig-2013/trig-syntax-bad-base-05.trig SHA1 5107095dab0ab25c5fcb0e901a04c4bdf5605edf t/data/trig-2013/trig-syntax-bad-blank-label-dot-end.trig SHA1 a9d855ba1eea876ea1aa69520baa44b5873e7c00 t/data/trig-2013/trig-syntax-bad-esc-01.trig SHA1 68df53b07aa63328a90b64d98b5a3eb2aa6e295f t/data/trig-2013/trig-syntax-bad-esc-02.trig SHA1 a28990938df4e46b767acb274e994b30c33b8232 t/data/trig-2013/trig-syntax-bad-esc-03.trig SHA1 a28990938df4e46b767acb274e994b30c33b8232 t/data/trig-2013/trig-syntax-bad-esc-04.trig SHA1 bd9eb0919268e66e4ed057dc4314ce8ab04648b8 t/data/trig-2013/trig-syntax-bad-kw-01.trig SHA1 7c9c0207ded7acefef9ff2561e64c545601322f3 t/data/trig-2013/trig-syntax-bad-kw-02.trig SHA1 f8668e6a945784d2c08647f5318055ebecb026b7 t/data/trig-2013/trig-syntax-bad-kw-03.trig SHA1 b3f58843bb547900210b9a0684d49ede35fb05bb t/data/trig-2013/trig-syntax-bad-kw-04.trig SHA1 e9c842dbf67400c5e77dedac64414a9e0754d097 t/data/trig-2013/trig-syntax-bad-kw-05.trig SHA1 ea2d7f8fd536170cb14fe50ab20ac9cc81798796 t/data/trig-2013/trig-syntax-bad-lang-01.trig SHA1 81dc72edda925028b2d5fc6f45671ca634f92afb t/data/trig-2013/trig-syntax-bad-ln-dash-start.trig SHA1 a43ae7689671966bee9c8d480c6c9c37a7e50bfe t/data/trig-2013/trig-syntax-bad-ln-escape-start.trig SHA1 d0c8b1c534c4c13158cea0242e9f8bb02584a93a t/data/trig-2013/trig-syntax-bad-ln-escape.trig SHA1 f4f5dff90b0b5f1037a8ccefb06a77564991d014 t/data/trig-2013/trig-syntax-bad-missing-ns-dot-end.trig SHA1 db10af8fffa0b936bf31e1a660228ec640494f57 t/data/trig-2013/trig-syntax-bad-missing-ns-dot-start.trig SHA1 ebec43087dcd50bcd210937fbeef381b0e08a0bc t/data/trig-2013/trig-syntax-bad-n3-extras-01.trig SHA1 f9c7759181322dd21b5ef845d822d870e8120126 t/data/trig-2013/trig-syntax-bad-n3-extras-02.trig SHA1 1621d46f13eff280717f77c54920a534d401754e t/data/trig-2013/trig-syntax-bad-n3-extras-03.trig SHA1 d388ec8c6619791e1ba7c0880a2898d36c0252b8 t/data/trig-2013/trig-syntax-bad-n3-extras-04.trig SHA1 78311336b4e814ee6da968f9906f544ea8e423ff t/data/trig-2013/trig-syntax-bad-n3-extras-05.trig SHA1 aafe700f2ed0922f979a143f5cd62c0e2f49ae62 t/data/trig-2013/trig-syntax-bad-n3-extras-06.trig SHA1 aedb38f13919a5be93af8a6720aa66fe0876a9e3 t/data/trig-2013/trig-syntax-bad-n3-extras-07.trig SHA1 aedb38f13919a5be93af8a6720aa66fe0876a9e3 t/data/trig-2013/trig-syntax-bad-n3-extras-08.trig SHA1 8b7171af38935663dd43488c0fd61013f5b73388 t/data/trig-2013/trig-syntax-bad-n3-extras-09.trig SHA1 7f5fcbd56ff4f0906647b71c6b8a12fa5e0755b9 t/data/trig-2013/trig-syntax-bad-n3-extras-10.trig SHA1 b26891eef95d607f28f2e43db445ed162b1e5c62 t/data/trig-2013/trig-syntax-bad-n3-extras-11.trig SHA1 1a44f948b28dc45af8ed869b26987a7d38ec0d71 t/data/trig-2013/trig-syntax-bad-n3-extras-12.trig SHA1 22107312ff2aa723c5d84193cc22d9732dd3cc1a t/data/trig-2013/trig-syntax-bad-n3-extras-13.trig SHA1 cbb8fc4f669970a9230f9f80c3acd86a7bf0f261 t/data/trig-2013/trig-syntax-bad-ns-dot-end.trig SHA1 8469049708e48e558c5d5ed62a46c7ac057e4dfc t/data/trig-2013/trig-syntax-bad-ns-dot-start.trig SHA1 68eb444f70c3fe866e15ad6c803b7d24dc3edbc1 t/data/trig-2013/trig-syntax-bad-num-01.trig SHA1 ee5469fa98a2d49ac6fda6e9680cd3927c17e43d t/data/trig-2013/trig-syntax-bad-num-02.trig SHA1 8ba9abb2dce4c3b99955b5662dd84c6e1e8218e8 t/data/trig-2013/trig-syntax-bad-num-03.trig SHA1 f975f5a6666e1590ccc31dbd10c93931829e4112 t/data/trig-2013/trig-syntax-bad-num-04.trig SHA1 8e477fd0f0b28424351f0af96a2ec323c6de0fa6 t/data/trig-2013/trig-syntax-bad-num-05.trig SHA1 df062714e543520cd5e7aeaec6a9493a9b76af29 t/data/trig-2013/trig-syntax-bad-number-dot-in-anon.trig SHA1 1a8d926bc5cfafd49b8738e83086b6877832624b t/data/trig-2013/trig-syntax-bad-pname-01.trig SHA1 1ee0515381109cccbea93f22bb0146a39a7fe17a t/data/trig-2013/trig-syntax-bad-pname-02.trig SHA1 5b9613f8b3ffc6a0c7c9c4953c908dae34b77967 t/data/trig-2013/trig-syntax-bad-pname-03.trig SHA1 3b8ba6b45c5520065a979635d7481772bea891b9 t/data/trig-2013/trig-syntax-bad-prefix-01.trig SHA1 9efbadcf54ac5edae4d7bfb5b98f84dee3acb256 t/data/trig-2013/trig-syntax-bad-prefix-02.trig SHA1 65c8de7f74d212c908bbbfd24982075870edaebd t/data/trig-2013/trig-syntax-bad-prefix-03.trig SHA1 ccc1c7be213ac0da83e16f32bd15b8b9db178b33 t/data/trig-2013/trig-syntax-bad-prefix-04.trig SHA1 4546fed714b4c1a89f7b916fe3222fdab90d3efa t/data/trig-2013/trig-syntax-bad-prefix-05.trig SHA1 e96cb93904f6c33ab753a291fe3f3ca1b1f52b77 t/data/trig-2013/trig-syntax-bad-prefix-06.trig SHA1 cfa9780059f56dda94c2ea25495d2811a1c1b30b t/data/trig-2013/trig-syntax-bad-prefix-07.trig SHA1 eb66ba0433463282d860608ee97a6cfdc67092d8 t/data/trig-2013/trig-syntax-bad-string-01.trig SHA1 92578c83090e9034481a66e70b34680a6a4f369b t/data/trig-2013/trig-syntax-bad-string-02.trig SHA1 6d11095623d7780c64cc1d0135c43a334e6e3640 t/data/trig-2013/trig-syntax-bad-string-03.trig SHA1 04b86e0df230aab66be0c62e6e6835fcef4e17c0 t/data/trig-2013/trig-syntax-bad-string-04.trig SHA1 9b7271bb5a96dfe436810f4fe3ae3af374ab0658 t/data/trig-2013/trig-syntax-bad-string-05.trig SHA1 05ab81e1febbdc6c2fef1360c9741b897be077e6 t/data/trig-2013/trig-syntax-bad-string-06.trig SHA1 afb484eac5de870912f2e85778ca5e9bfe087d0a t/data/trig-2013/trig-syntax-bad-string-07.trig SHA1 eb9e3ab477ab1072f49514cb023a6a762b7be84f t/data/trig-2013/trig-syntax-bad-struct-02.trig SHA1 def7978d084b1a78bf36b7a8c3cfaa1868036cd1 t/data/trig-2013/trig-syntax-bad-struct-03.trig SHA1 3fac324b70b7f224c4b46c2734817d38d8712602 t/data/trig-2013/trig-syntax-bad-struct-04.trig SHA1 acbd4d9570ee1caded2f1766f9a86b7b166271f1 t/data/trig-2013/trig-syntax-bad-struct-05.trig SHA1 c5bce46285f6241e07ed35555c630dcc90a9e0fd t/data/trig-2013/trig-syntax-bad-struct-06.trig SHA1 95e3abeb3a1b5ee0ff4e6788c6490f5711589093 t/data/trig-2013/trig-syntax-bad-struct-07.trig SHA1 3a40358d9d7da1937ba24eca1a44fd837b5bc369 t/data/trig-2013/trig-syntax-bad-struct-09.trig SHA1 6b4366949a451334bcab528c0eeac7e19da0db14 t/data/trig-2013/trig-syntax-bad-struct-10.trig SHA1 65293e674a51be500f067db09ecdf5b4147804b9 t/data/trig-2013/trig-syntax-bad-struct-12.trig SHA1 65293e674a51be500f067db09ecdf5b4147804b9 t/data/trig-2013/trig-syntax-bad-struct-13.trig SHA1 040292c7fd4386e3d5451ba739b4ea654b2f3ece t/data/trig-2013/trig-syntax-bad-struct-14.trig SHA1 5f9870f2996d332eb78b65b0102b5c02ce1b75f2 t/data/trig-2013/trig-syntax-bad-struct-15.trig SHA1 1fcf8d55fe65b3791d32b53ae9260f50ea5e004b t/data/trig-2013/trig-syntax-bad-struct-16.trig SHA1 b9c289e0c3268383c93cf98b42b6e65ed8d573e2 t/data/trig-2013/trig-syntax-bad-struct-17.trig SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 t/data/trig-2013/trig-syntax-bad-turtle-01.trig SHA1 2b54bbfc82fcda3db80272fc5daa4803a698c49a t/data/trig-2013/trig-syntax-bad-uri-01.trig SHA1 6fda18fbbd17ef9302f5a7cbd1a5d1cc35372a50 t/data/trig-2013/trig-syntax-bad-uri-02.trig SHA1 dcb8fd09158c4a8465860b669278547708a67a39 t/data/trig-2013/trig-syntax-bad-uri-03.trig SHA1 ace5c304e7da9f00a100e878241ea95e413dbb4f t/data/trig-2013/trig-syntax-bad-uri-04.trig SHA1 4062165d2539f060e69e8ec23241ae0eab5824c8 t/data/trig-2013/trig-syntax-bad-uri-05.trig SHA1 8e0c2d8e0f23a436d838464ff0ab8a66343bc32f t/data/trig-2013/trig-syntax-base-01.trig SHA1 61f625d4f8382b3b92f6fce8f2a52bc0b711afd9 t/data/trig-2013/trig-syntax-base-02.trig SHA1 6665fa1810b8b8f686bf0f18b95b39445868d3a8 t/data/trig-2013/trig-syntax-base-03.trig SHA1 133ca133dd2cd54e46c56976107b4dbc9f52de7b t/data/trig-2013/trig-syntax-base-04.trig SHA1 266d991d777467488ff1097a8087637648112ea5 t/data/trig-2013/trig-syntax-blank-label.trig SHA1 b12386a6b270f41bb58ad7bd52caf1b4c3ada4ae t/data/trig-2013/trig-syntax-bnode-01.trig SHA1 bdb404a0a946749e2d49cfe022f6f0c6be31dcd4 t/data/trig-2013/trig-syntax-bnode-02.trig SHA1 5dd53e1fc7432602fb2851848f9d501079bbbbc7 t/data/trig-2013/trig-syntax-bnode-03.trig SHA1 b0d7f302e713439c60a8893c0fd2ac5b6e313045 t/data/trig-2013/trig-syntax-bnode-04.trig SHA1 fbc77f46d961764892129e4f712e43ad8f0eeb63 t/data/trig-2013/trig-syntax-bnode-05.trig SHA1 5ec9b4836a010ee92d7ddc07b175aca44e768583 t/data/trig-2013/trig-syntax-bnode-06.trig SHA1 9d1bb81c33d974913bb7da04187301a30714230b t/data/trig-2013/trig-syntax-bnode-07.trig SHA1 9c93f00ac93facfb961d2f6c9ff5e4a9a512398b t/data/trig-2013/trig-syntax-bnode-08.trig SHA1 f010255deac2428e5e666669639fbdfe35b20edc t/data/trig-2013/trig-syntax-bnode-09.trig SHA1 26222eb89dfc3eed1ca528277ba24afd45717bcd t/data/trig-2013/trig-syntax-bnode-10.trig SHA1 8b4567aa8010bee5349b73dc1a6bd399593461d1 t/data/trig-2013/trig-syntax-datatypes-01.trig SHA1 54bf691e47b276026b65c34d07274f1592aa461d t/data/trig-2013/trig-syntax-datatypes-02.trig SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 t/data/trig-2013/trig-syntax-file-01.trig SHA1 286ce15d32430d10a688b26d578a73098fa4ce99 t/data/trig-2013/trig-syntax-file-02.trig SHA1 fb49efc00b3a08add143156f08929ae2e9e65627 t/data/trig-2013/trig-syntax-file-03.trig SHA1 24c86ff9366ceae98e62775b20f1d288318d5f29 t/data/trig-2013/trig-syntax-kw-01.trig SHA1 72d097b142e97adcb7283635dfda146cdfe5a6a3 t/data/trig-2013/trig-syntax-kw-02.trig SHA1 f93f4b865dc808b09d5215dabc12870082265e00 t/data/trig-2013/trig-syntax-kw-03.trig SHA1 c182c56d16418c07e68ce5c7dd9c09b87ea7978f t/data/trig-2013/trig-syntax-lists-01.trig SHA1 4c621f91ccacfd34721df87f8860d26f26579354 t/data/trig-2013/trig-syntax-lists-02.trig SHA1 b25648b23c039cf21e8f282704344c2072ee1599 t/data/trig-2013/trig-syntax-lists-03.trig SHA1 a5abeda0c7b987aba6f89bb430c35507896823bc t/data/trig-2013/trig-syntax-lists-04.trig SHA1 cfbd31f3a43b105685455fc16f103f0aaa20e267 t/data/trig-2013/trig-syntax-lists-05.trig SHA1 a978ee3b260aaa892f21ba6409626c4cd1e5ea7d t/data/trig-2013/trig-syntax-ln-colons.trig SHA1 426c3e740c11b81770f710e3a327aff9be49e3b2 t/data/trig-2013/trig-syntax-ln-dots.trig SHA1 d10249762a76638f460f6c2b5ce4005f005e143e t/data/trig-2013/trig-syntax-ns-dots.trig SHA1 43b7070b23390c5ab87ff122f6067a085f7c818c t/data/trig-2013/trig-syntax-number-01.trig SHA1 9357b793630f63d0b3dd60cdaf08424dae50dc97 t/data/trig-2013/trig-syntax-number-02.trig SHA1 96d6c588099a8df3a77e47dba65ede48bbf06c94 t/data/trig-2013/trig-syntax-number-03.trig SHA1 7ce733c465b22edf74c6e53c27e0e4be7bd8d96a t/data/trig-2013/trig-syntax-number-04.trig SHA1 89713bb4148cae0b6e9a209284a6f91fc66bed3c t/data/trig-2013/trig-syntax-number-05.trig SHA1 a2624f1991f3351cd4d4c5a4371bd3fdfc2463e5 t/data/trig-2013/trig-syntax-number-06.trig SHA1 dc2e998bddf8030e2ddb74f96a1397a25cd81c73 t/data/trig-2013/trig-syntax-number-07.trig SHA1 e493c7f1b9e4310641c8f885c70ce857e6080b5f t/data/trig-2013/trig-syntax-number-08.trig SHA1 fa70616be704ed5a03af5d9339d922e8d358664f t/data/trig-2013/trig-syntax-number-09.trig SHA1 084d5bde008234cc08e54b0b10e62fd7d9651818 t/data/trig-2013/trig-syntax-number-10.trig SHA1 c45f04f3693d9d461cd1be775554c289a586646e t/data/trig-2013/trig-syntax-number-11.trig SHA1 96892a062880f2c92e9a8b63bb9dacccbe0b0c40 t/data/trig-2013/trig-syntax-pname-esc-01.trig SHA1 2db9d961b43892d5b661d7380a0d0f1074509e8e t/data/trig-2013/trig-syntax-pname-esc-02.trig SHA1 f63a9bfbb7d88380c2f91d7e16830aeae6e69ca3 t/data/trig-2013/trig-syntax-pname-esc-03.trig SHA1 611277677c7cf3cce31bc10bf93438756357c3ca t/data/trig-2013/trig-syntax-prefix-01.trig SHA1 bfcab57a84b174299b62ccc028b383841a583437 t/data/trig-2013/trig-syntax-prefix-02.trig SHA1 d44d39f9a57ee7246f596dbe977882269ee33bd8 t/data/trig-2013/trig-syntax-prefix-03.trig SHA1 5ac168d8a04f4c4aed4f0dcd40046723f5918215 t/data/trig-2013/trig-syntax-prefix-04.trig SHA1 ea650cfec49a61cd619c620998324c02c1990297 t/data/trig-2013/trig-syntax-prefix-05.trig SHA1 3395b27ae8f6b92b2c763b1fefc2d3cc284f2278 t/data/trig-2013/trig-syntax-prefix-06.trig SHA1 316b68a717e040e9ff5c0cd85536e2b763ac08c6 t/data/trig-2013/trig-syntax-prefix-07.trig SHA1 43c31444781724bf6c1d583c58acf80fd014efc1 t/data/trig-2013/trig-syntax-prefix-08.trig SHA1 4a93ddd341e95fa95b17b63b52642195f142e688 t/data/trig-2013/trig-syntax-prefix-09.trig SHA1 ff21946a9c6eb55fe080ff59074e33fdae68982d t/data/trig-2013/trig-syntax-str-esc-01.trig SHA1 15b3edc2a8910f54e4c32006ad90fcbd684d3f48 t/data/trig-2013/trig-syntax-str-esc-02.trig SHA1 4103bf795fabd42e3ce8bdd829497616963265b6 t/data/trig-2013/trig-syntax-str-esc-03.trig SHA1 89888e7dba927e978fd69767f586162f8fe36607 t/data/trig-2013/trig-syntax-string-01.trig SHA1 19b92c78e31f6efa283973ee56a18f631fc12bc1 t/data/trig-2013/trig-syntax-string-02.trig SHA1 33384af7fc3709b1cdbe7323886f1910a790342a t/data/trig-2013/trig-syntax-string-03.trig SHA1 95126a2d0dc2a534c19bb6cee4d6f2ba1a41cfd4 t/data/trig-2013/trig-syntax-string-04.trig SHA1 ba44cccd37b8dc7cc7b4f5a15a07d5c5f9f73e0d t/data/trig-2013/trig-syntax-string-05.trig SHA1 4073eb4cbea4ac6c12084c98f9951e23e3bf19a1 t/data/trig-2013/trig-syntax-string-06.trig SHA1 c4414b58fd7c53654db01edcf7cf95556f7f31fd t/data/trig-2013/trig-syntax-string-07.trig SHA1 9ff6c3135e1ce2391621fe36ea7f05d4f87563df t/data/trig-2013/trig-syntax-string-08.trig SHA1 5bbb5e444113144e75fa0f390c48b30468e93238 t/data/trig-2013/trig-syntax-string-09.trig SHA1 8c39d14ce11dda633d2ff866af42c194a179fe36 t/data/trig-2013/trig-syntax-string-10.trig SHA1 af3b253409af76408200b7600578604678e8ff0b t/data/trig-2013/trig-syntax-string-11.trig SHA1 43e138c36ca329c5897eda672f5f8069f89f0199 t/data/trig-2013/trig-syntax-struct-01.trig SHA1 461983e32468a897cc3dc17cde844b9abb0cdc13 t/data/trig-2013/trig-syntax-struct-02.trig SHA1 65563b279e2ce1f9d4cfcb76778a709f1c467d9f t/data/trig-2013/trig-syntax-struct-03.trig SHA1 1555cf99d9c1bc55e3446e8cb7d9c61517dbeebd t/data/trig-2013/trig-syntax-struct-04.trig SHA1 bfe780cd2ef8a042fe1676a674bf82abf9d4cc8f t/data/trig-2013/trig-syntax-struct-05.trig SHA1 242d257bbf405c1b26e42f4662e825fe40977fe3 t/data/trig-2013/trig-syntax-struct-06.trig SHA1 edbda031afad0a7d6c8d11091a33fe8b16f3a530 t/data/trig-2013/trig-syntax-struct-07.trig SHA1 3caf21316478c031bbb7d3ce384264f54ba3e1e4 t/data/trig-2013/trig-syntax-uri-01.trig SHA1 4a6bcb1dd6db44e6dbbcc8c8b3cc103876360b01 t/data/trig-2013/trig-syntax-uri-02.trig SHA1 0782ebd0c1c85063f5d1d1cb4a9a08cc45e905bf t/data/trig-2013/trig-syntax-uri-03.trig SHA1 4f332861e8f97c80e964019a7205570f2ee450c7 t/data/trig-2013/trig-syntax-uri-04.trig SHA1 801e8c6dd214106c52958550b3d31cb6943a1005 t/data/trig-2013/two_LITERAL_LONG2s.nq SHA1 c04ef45922e3caedb3083408ff5bdf67078bb2fa t/data/trig-2013/two_LITERAL_LONG2s.trig SHA1 e8390eeaea0da3830e936a8b954d38c5665383bf t/data/trig-2013/underscore_in_localName.nq SHA1 f37f4c29df10ab7e80ed912d0c9ab3b19bf29ace t/data/trig-2013/underscore_in_localName.trig SHA1 a31cb8345d5232930af0e2f807288a32f1712bc0 t/data/turtle-2013/HYPHEN_MINUS_in_localName.nt SHA1 7822e6612fea34eaafcfc1bc32a4a8b8fb089f62 t/data/turtle-2013/HYPHEN_MINUS_in_localName.ttl SHA1 4cf2746a20212d35a0bf193c3c1e40d7e788d8e7 t/data/turtle-2013/IRIREF_datatype.nt SHA1 4cf2746a20212d35a0bf193c3c1e40d7e788d8e7 t/data/turtle-2013/IRIREF_datatype.ttl SHA1 e7694a52cf393e8e9056fbb8e15fc58df75836c4 t/data/turtle-2013/IRI_spo.nt SHA1 e7694a52cf393e8e9056fbb8e15fc58df75836c4 t/data/turtle-2013/IRI_subject.ttl SHA1 e6ab698ca8f920824b09aea6255b424badc71f49 t/data/turtle-2013/IRI_with_all_punctuation.nt SHA1 e6ab698ca8f920824b09aea6255b424badc71f49 t/data/turtle-2013/IRI_with_all_punctuation.ttl SHA1 250ff6b5ec8c1649bce3db9be423fa3f1c65e51c t/data/turtle-2013/IRI_with_eight_digit_numeric_escape.ttl SHA1 35bf9f3e4a6f715037e19d531e8cdc7f1daebf67 t/data/turtle-2013/IRI_with_four_digit_numeric_escape.ttl SHA1 a88f037134ac8b4cb7cc897173f19368a6822c4a t/data/turtle-2013/LICENSE SHA1 2617507cac0c80b963c0e392bfb06dfb97bfb2b9 t/data/turtle-2013/LITERAL1.nt SHA1 09b1bffffa0b862ec0230ff92a1b49424eb5d3bb t/data/turtle-2013/LITERAL1.ttl SHA1 44d34e69e4105ef536eb921f45123a82c5cfd1fa t/data/turtle-2013/LITERAL1_all_controls.nt SHA1 0966e0b0cc44fd74bcbc6514dbe645d9187b99f7 t/data/turtle-2013/LITERAL1_all_controls.ttl SHA1 4bb0eb49b507c7ec2ca10013195112548ef75724 t/data/turtle-2013/LITERAL1_all_punctuation.nt SHA1 7e7bacb20f2a019c9dc8db73a2a57a4fc36daebe t/data/turtle-2013/LITERAL1_all_punctuation.ttl SHA1 e58e732912a8ca331ab0e811995257a0ffdf5259 t/data/turtle-2013/LITERAL1_ascii_boundaries.nt SHA1 49e5e94294dee93d2a142591b74d907436228fd3 t/data/turtle-2013/LITERAL1_ascii_boundaries.ttl SHA1 925f6ad6cd65419938da61a26e494e673c5299a6 t/data/turtle-2013/LITERAL1_with_UTF8_boundaries.ttl SHA1 14ded326360c8d49b5d7d74c7974d591dde6b2b0 t/data/turtle-2013/LITERAL1_with_UTF8_boundaries.ttl.new SHA1 2617507cac0c80b963c0e392bfb06dfb97bfb2b9 t/data/turtle-2013/LITERAL2.ttl SHA1 f7cd56beb1908c3c04e6f90557be4dec8153bec4 t/data/turtle-2013/LITERAL2_ascii_boundaries.nt SHA1 523c3b209fdf5d2a8765cfad685611cbb1aea5ef t/data/turtle-2013/LITERAL2_ascii_boundaries.ttl SHA1 aacffd15bca29b431ded3b3c2668824aa9ed9601 t/data/turtle-2013/LITERAL2_with_UTF8_boundaries.ttl SHA1 9e36fdf720f387fc25edee5f225052e17e3183ab t/data/turtle-2013/LITERAL_LONG1.ttl SHA1 797fe4088118247fe416449e3dfe79a21e3b2cf4 t/data/turtle-2013/LITERAL_LONG1_ascii_boundaries.nt SHA1 5b4590f608d179d5dd65e51c2d9119d27905ef60 t/data/turtle-2013/LITERAL_LONG1_ascii_boundaries.ttl SHA1 0ba9545de25d9538e8eb9204a215d7b82bb27ae2 t/data/turtle-2013/LITERAL_LONG1_with_1_squote.nt SHA1 eb43ce8fc00d5952c98c725511caa6593e47e3e7 t/data/turtle-2013/LITERAL_LONG1_with_1_squote.ttl SHA1 25283372bdc408df717750a08b17d48adef3dd3a t/data/turtle-2013/LITERAL_LONG1_with_2_squotes.nt SHA1 59b89ec08f154086f9cf0979f0c4bef675eac57f t/data/turtle-2013/LITERAL_LONG1_with_2_squotes.ttl SHA1 9f93169e41799422234760747a23976cd21fa62a t/data/turtle-2013/LITERAL_LONG1_with_UTF8_boundaries.ttl SHA1 75b4a1b93878129092b9b25ee87379856b0b35c8 t/data/turtle-2013/LITERAL_LONG2.ttl SHA1 c4bbd7125b1973d350401674487fa7d2347a2c2f t/data/turtle-2013/LITERAL_LONG2_ascii_boundaries.nt SHA1 e3376bfdbd3a82b35b8d9acbad71371db8484524 t/data/turtle-2013/LITERAL_LONG2_ascii_boundaries.ttl SHA1 c43f1bdb297e8b48e06876df1ba739f3a4430fd1 t/data/turtle-2013/LITERAL_LONG2_with_1_squote.nt SHA1 a3cd6238ce77448b54ad470927b2c73c5f6dd235 t/data/turtle-2013/LITERAL_LONG2_with_1_squote.ttl SHA1 2d703930352a01087c06d56ff086ec48d996dd81 t/data/turtle-2013/LITERAL_LONG2_with_2_squotes.nt SHA1 2fb08db49dc44e6db35487492cd5d2d38f8b900b t/data/turtle-2013/LITERAL_LONG2_with_2_squotes.ttl SHA1 e2f1d7fe53660161209022aa9c01485084e2427d t/data/turtle-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.nt SHA1 89fcbfc5821154dc2bb05a1d88148f983e77290f t/data/turtle-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.ttl SHA1 0f305c0a5ab2631909faed24977ac102ad328537 t/data/turtle-2013/LITERAL_LONG2_with_UTF8_boundaries.ttl SHA1 f29927ee5fe8739a47e176bf85cd74a0132cbeaa t/data/turtle-2013/LITERAL_with_UTF8_boundaries.nt SHA1 95dd623f88157539fea120fe78c93e51f93a8704 t/data/turtle-2013/README SHA1 7b6fdf8f6df3a2f5f2813b5b3b80af2420e388be t/data/turtle-2013/SPARQL_style_base.ttl SHA1 772f92b5ac055cb96267e4e4caa0932c2ee911cf t/data/turtle-2013/SPARQL_style_prefix.ttl SHA1 9f8e695dcb90f55314512c22cb53c2947cef2132 t/data/turtle-2013/anonymous_blank_node_object.ttl SHA1 39c28e79b04584ab647e61f33e3921a085df3722 t/data/turtle-2013/anonymous_blank_node_subject.ttl SHA1 14c29995ad9a6fe6ebe1ca9cce0fc8c0ee7b519f t/data/turtle-2013/bareword_a_predicate.nt SHA1 63df83cb950e71c76b2b1e950fd4bf7bf1992b4e t/data/turtle-2013/bareword_a_predicate.ttl SHA1 9ffb0d0880c4d9add6f843419831152ce0ff2f34 t/data/turtle-2013/bareword_decimal.nt SHA1 73fad953a74f3aed2beba827b7ad87a75136ca05 t/data/turtle-2013/bareword_decimal.ttl SHA1 23f1c9c903a6109c09a6b31d48606f9f0b526aa4 t/data/turtle-2013/bareword_double.nt SHA1 a3b69fd58082f56d2cb9b99ce78f64e99d92a3f9 t/data/turtle-2013/bareword_double.ttl SHA1 b76b19ff1fa535f6fbba78852ac45b6093aec08d t/data/turtle-2013/bareword_integer.ttl SHA1 766f63d7a40a34f348a1b3f0b647df5bcf57312c t/data/turtle-2013/blankNodePropertyList_as_object.nt SHA1 b32085a12f3f5f808e5aa874471869edd116b59e t/data/turtle-2013/blankNodePropertyList_as_object.ttl SHA1 946e23cc46b1a5ae98a314ca631be2c7fd20c6d2 t/data/turtle-2013/blankNodePropertyList_as_subject.nt SHA1 7003eb46804fd4041fd9bfa640c161244ceb875d t/data/turtle-2013/blankNodePropertyList_as_subject.ttl SHA1 4da081c60d8b4bfe9c7b32bc9d0f1c53f3564fe3 t/data/turtle-2013/blankNodePropertyList_containing_collection.nt SHA1 e10a2102c8be3b28a37a8b96140eb2c04fab0ccf t/data/turtle-2013/blankNodePropertyList_containing_collection.ttl SHA1 9b4bf2eebd9900b26c1927b10fb00dbaaba367d4 t/data/turtle-2013/blankNodePropertyList_with_multiple_triples.nt SHA1 b6e14bc12424805537f330612b2ff0889b2db32b t/data/turtle-2013/blankNodePropertyList_with_multiple_triples.ttl SHA1 0757ad4558f3d77756b6569346443dfffb1fe232 t/data/turtle-2013/collection_object.nt SHA1 0de0b86d783977634c35b1793bbf4fa79ec1e6c3 t/data/turtle-2013/collection_object.ttl SHA1 e92f8bbbaf7a42952add0b0793b3db5f4441b8bf t/data/turtle-2013/collection_subject.nt SHA1 a26d0bd30ea3c95eb3b13f2c848deadb984a7c5c t/data/turtle-2013/collection_subject.ttl SHA1 0abec1b3eabcdca364f9abf7c3fd8ef4e3d8c4c9 t/data/turtle-2013/comment_following_PNAME_NS.nt SHA1 d6248911611949bb807f24a02f7b5fbc4d3c703c t/data/turtle-2013/comment_following_PNAME_NS.ttl SHA1 42f4081f22a7be67051c0ef547c81815380298e0 t/data/turtle-2013/comment_following_localName.ttl SHA1 c88bcd814fe934c85bd7a1d43c0d623c28c481e0 t/data/turtle-2013/default_namespace_IRI.ttl SHA1 03f1c9d6ab96800a3ce1326eddbc5f1398d328a0 t/data/turtle-2013/double_lower_case_e.nt SHA1 2d0cc4ceb1227cbcd4008bebe9a8577d5afd4706 t/data/turtle-2013/double_lower_case_e.ttl SHA1 b29be1ab937bebee7df2069206faa1fe24d1372c t/data/turtle-2013/empty_collection.nt SHA1 22a983d6d0dc6bb46d726046cdedb3e5cf0d07d2 t/data/turtle-2013/empty_collection.ttl SHA1 c97be9c69e743dd3084f64400e905533c7a79b0a t/data/turtle-2013/first.nt SHA1 ead42ac0e7b2783ac0ca9b7aae6c21f071e5ae0f t/data/turtle-2013/first.ttl SHA1 ccfc91ea8fa5617fea02ccdf4c069f63c5f259ad t/data/turtle-2013/labeled_blank_node_object.nt SHA1 2681b2fa75b088cfd4c89fd56a138fb6d58c9e5b t/data/turtle-2013/labeled_blank_node_object.ttl SHA1 f6c9b364f3ed3bcc264f200a413198666094d7ca t/data/turtle-2013/labeled_blank_node_subject.nt SHA1 337f713c673934e84068cbc06d8b6aa2c66905c6 t/data/turtle-2013/labeled_blank_node_subject.ttl SHA1 9d1c90cff5f0988f2680bd83ed6b1603fe7c4118 t/data/turtle-2013/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.ttl SHA1 68c1488b0166c8788568ecf586aa85799fd59a6b t/data/turtle-2013/labeled_blank_node_with_leading_digit.ttl SHA1 7b236641cd155d1412918dd0062f0653c06ba2b1 t/data/turtle-2013/labeled_blank_node_with_leading_underscore.ttl SHA1 5e0de54ca88796ccd118c278be64adf1551b7a59 t/data/turtle-2013/labeled_blank_node_with_non_leading_extras.ttl SHA1 287e1b3acd3234a924f99a2cf74c33548b08c90d t/data/turtle-2013/langtagged_LONG.ttl SHA1 7b46c6ee4b73f83ffcaeec26b1e58da0beaf46de t/data/turtle-2013/langtagged_LONG_with_subtag.nt SHA1 503fed6d94b31538c6e010e5a0fcb0f413f94aae t/data/turtle-2013/langtagged_LONG_with_subtag.ttl SHA1 bbafa594602d9a42eb3bd4caaed54bae9d186f38 t/data/turtle-2013/langtagged_non_LONG.nt SHA1 bbafa594602d9a42eb3bd4caaed54bae9d186f38 t/data/turtle-2013/langtagged_non_LONG.ttl SHA1 0dc475bbae9defdcd49e1493e981e3c2a3877ee8 t/data/turtle-2013/lantag_with_subtag.nt SHA1 0dc475bbae9defdcd49e1493e981e3c2a3877ee8 t/data/turtle-2013/lantag_with_subtag.ttl SHA1 e06a1c74f72925de2047afa8e3e9c36b54507107 t/data/turtle-2013/last.nt SHA1 47272c6d782ffea8c64725dada0e3ea4129b6d71 t/data/turtle-2013/last.ttl SHA1 9497aa0b8373a1fa1a441ce9ddccc42bd9aaeadc t/data/turtle-2013/literal_false.nt SHA1 2adec463234ca953f7399e8ba123334f2269fd9e t/data/turtle-2013/literal_false.ttl SHA1 904fb171ad28fb07fba18ea997a118e4622e90f4 t/data/turtle-2013/literal_true.nt SHA1 6a3994f0ee6abb44c43effc589110b187a406d8f t/data/turtle-2013/literal_true.ttl SHA1 2a07361557088cc699f36a5f718eac78827b3271 t/data/turtle-2013/literal_with_BACKSPACE.nt SHA1 df08830bde82f2d07fa80283a76d205e204c74c1 t/data/turtle-2013/literal_with_BACKSPACE.ttl SHA1 82cf6b4385d0df4081e112b68356934557d33e2b t/data/turtle-2013/literal_with_CARRIAGE_RETURN.nt SHA1 c67cacc34c0d3a97cfc82058751cbf8bb330947c t/data/turtle-2013/literal_with_CARRIAGE_RETURN.ttl SHA1 043a67500eef188a16776298728988ef879a022e t/data/turtle-2013/literal_with_CHARACTER_TABULATION.nt SHA1 23d2f62066381e5ce30548ed83abace6d9bff032 t/data/turtle-2013/literal_with_CHARACTER_TABULATION.ttl SHA1 79dd71bfd1ccedae87bb6ba8b799276fe89f5356 t/data/turtle-2013/literal_with_FORM_FEED.nt SHA1 57a6601d7c23b7ce645a1af8f4271a25234d2376 t/data/turtle-2013/literal_with_FORM_FEED.ttl SHA1 343a9490afb11d5b04debbec58d99f454e509435 t/data/turtle-2013/literal_with_LINE_FEED.nt SHA1 43d7c172b940e663d3321158f8bf9bd06b57fbfb t/data/turtle-2013/literal_with_LINE_FEED.ttl SHA1 19d7772db1ac29f1f4324849c7175f0e33f96b1c t/data/turtle-2013/literal_with_REVERSE_SOLIDUS.nt SHA1 30945684e58cb0fff6f7d435bf492f1bbae5cbae t/data/turtle-2013/literal_with_REVERSE_SOLIDUS.ttl SHA1 c615f8e43914e706bb272d11fb9af2d6e68ac68b t/data/turtle-2013/literal_with_escaped_BACKSPACE.ttl SHA1 86bc1320914b8f9e2bf26a4824db7674cae859b7 t/data/turtle-2013/literal_with_escaped_CARRIAGE_RETURN.ttl SHA1 f95b4855f9e8a16b2185e9949cf6cd3ae824019e t/data/turtle-2013/literal_with_escaped_CHARACTER_TABULATION.ttl SHA1 cd68ddf7884ddcba1be278c026ebde14f8d02760 t/data/turtle-2013/literal_with_escaped_FORM_FEED.ttl SHA1 5ac34c77b2b6f09fcc8a0a403fa9abcc5ba75a02 t/data/turtle-2013/literal_with_escaped_LINE_FEED.ttl SHA1 8b9751a6c0b5c9b27cd6e078edde65a7770b2900 t/data/turtle-2013/literal_with_numeric_escape4.nt SHA1 bb52d3964d8ede60b507077141f3dcb5ef04d76e t/data/turtle-2013/literal_with_numeric_escape4.ttl SHA1 f5a00224f35b78c92df528e54c32417aa9f741b5 t/data/turtle-2013/literal_with_numeric_escape8.ttl SHA1 df4ef960d48972239d27e88b8b2b6cc7a0cccd46 t/data/turtle-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nt SHA1 90a1a7dd0a8607b23dc35a30a54b81ae8bf18374 t/data/turtle-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.ttl SHA1 da05ef724b01c76e96e52d4d9a3a95f8d14c1147 t/data/turtle-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nt SHA1 955f02af97d6a783347402ac8d7eadfbe614700e t/data/turtle-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.ttl SHA1 2331774f136a8a49a7f0ccd6761993dab35902e9 t/data/turtle-2013/localName_with_leading_digit.nt SHA1 4655e4381b789dc152741f9213964079b8df91e8 t/data/turtle-2013/localName_with_leading_digit.ttl SHA1 a19db2f1d8f8d2f09e6da735a0c3ee9a28ee8e1e t/data/turtle-2013/localName_with_leading_underscore.nt SHA1 e6c174481553a250a11cf18e9663b7b4283e6584 t/data/turtle-2013/localName_with_leading_underscore.ttl SHA1 526548fc580d408c907488cc0695ead05789f861 t/data/turtle-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nt SHA1 4fe5d2a4c1e3bf01b3cbb6a586ae9268f7140a2f t/data/turtle-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.ttl SHA1 7bd676b726087ebeddf1474dafbee2f7a679d243 t/data/turtle-2013/localName_with_non_leading_extras.nt SHA1 da10172fbe53ce073e8d07a197ebc63c40343295 t/data/turtle-2013/localName_with_non_leading_extras.ttl SHA1 c8618e938ce7fa5bee45bdfc138e48e41c0c1ce9 t/data/turtle-2013/localname_with_COLON.nt SHA1 57c7ac60f35959e803f43b5bd6daa1708456c81b t/data/turtle-2013/localname_with_COLON.ttl SHA1 814e978cf6b3a22ea2c32a36db140cce801574f9 t/data/turtle-2013/manifest.ttl SHA1 354ecd885c0c7535c048d020892394497e316d1b t/data/turtle-2013/negative_numeric.nt SHA1 3f982aabb39bc51a183a1d1debc771bba9ad12ae t/data/turtle-2013/negative_numeric.ttl SHA1 f684e23db65800a8ff0d72ca04954eb89871afab t/data/turtle-2013/nested_blankNodePropertyLists.nt SHA1 ff975a47e7e1170bdf08a2076783c1cfcbe751d8 t/data/turtle-2013/nested_blankNodePropertyLists.ttl SHA1 24db0883182088db39bfa4857a87276a22b63e09 t/data/turtle-2013/nested_collection.nt SHA1 aef70d809d562d14952fcb8ee7637d9a5a034ab7 t/data/turtle-2013/nested_collection.ttl SHA1 fefbadca4522d0e98c185e6f70c69b6e9bc07b15 t/data/turtle-2013/number_sign_following_PNAME_NS.nt SHA1 eef9be6b60b5df2bce09cae520a3d9266d78194b t/data/turtle-2013/number_sign_following_PNAME_NS.ttl SHA1 fd1997186035779e45019ad7da30ce2d488ea2cd t/data/turtle-2013/number_sign_following_localName.nt SHA1 122fe3f9a71b5a0e2ad770680edf86eae02d8d0e t/data/turtle-2013/number_sign_following_localName.ttl SHA1 529ecfac6754c8e01abc0ec18de2cb2367c74835 t/data/turtle-2013/numeric_with_leading_0.nt SHA1 4ca0b8153edfd6de092727a28e3a354e80a82b16 t/data/turtle-2013/numeric_with_leading_0.ttl SHA1 c773ac6299a7299666029009e233f0a256ab36fd t/data/turtle-2013/objectList_with_two_objects.nt SHA1 5b55e50be8e9bc8bbff096f48a0b699537f9dd03 t/data/turtle-2013/objectList_with_two_objects.ttl SHA1 a39c878b730837631e219298bc8009b1ecbb065d t/data/turtle-2013/old_style_base.ttl SHA1 e521432e4ee17ce8311d8097fcfd0217ab2fe604 t/data/turtle-2013/old_style_prefix.ttl SHA1 fcdbc3a3047d095caddf71664233b4f58d1130a0 t/data/turtle-2013/percent_escaped_localName.nt SHA1 e6008bbe1dc2d0035d8a4ca82bf9b75baa09f222 t/data/turtle-2013/percent_escaped_localName.ttl SHA1 84bc3b7daa55bba7a65d4df3e18f0bb45b6e6c14 t/data/turtle-2013/positive_numeric.nt SHA1 605a813f096ce0f102457848935872a3ce2998ca t/data/turtle-2013/positive_numeric.ttl SHA1 e42b34d4b589ab645621eae016579b0c2b86bc1c t/data/turtle-2013/predicateObjectList_with_two_objectLists.nt SHA1 b0479442b00b5e4577af3519712e2f452b471aeb t/data/turtle-2013/predicateObjectList_with_two_objectLists.ttl SHA1 52cbaf16ab84e03a23386cd7d5ba17c26f6569cb t/data/turtle-2013/prefix_only_IRI.ttl SHA1 7f9525730d35c070f0a6267453f66aabd71adf89 t/data/turtle-2013/prefix_reassigned_and_used.nt SHA1 e6210414f0d2324e1d57028096cbfa0b7c9c2bbb t/data/turtle-2013/prefix_reassigned_and_used.ttl SHA1 a8eb1c6e1697763bdfa7c2536a6302efbc6eabc3 t/data/turtle-2013/prefix_with_PN_CHARS_BASE_character_boundaries.ttl SHA1 75f96c58f375168d1fa09a88388ae29411e5b16a t/data/turtle-2013/prefix_with_non_leading_extras.ttl SHA1 a52cd048ae26adc9553b14f0d59aeea4e94a9d62 t/data/turtle-2013/prefixed_IRI_object.ttl SHA1 8312ee66ca596ea2bfb6a602400744d3281e0625 t/data/turtle-2013/prefixed_IRI_predicate.ttl SHA1 5821185e5c081a10e7acfeb77631157847cfdd69 t/data/turtle-2013/prefixed_name_datatype.ttl SHA1 13c967af3e1057f710d3944d8ae9d0fc2dd88374 t/data/turtle-2013/repeated_semis_at_end.ttl SHA1 988c755c43eca7233a0eb9df1abf93c13b4a2171 t/data/turtle-2013/repeated_semis_not_at_end.nt SHA1 ab0afc61120eb2b350e1e98372cfd43ae0940dfd t/data/turtle-2013/repeated_semis_not_at_end.ttl SHA1 7801b769c0a6ccaf3ce7fc8f131d4d17276d6475 t/data/turtle-2013/reserved_escaped_localName.nt SHA1 7d5bc2e5a64f18203058bee16df247e25dc44a33 t/data/turtle-2013/reserved_escaped_localName.ttl SHA1 0792fad84f841bfb0ab572eff21fafe5f52df159 t/data/turtle-2013/sole_blankNodePropertyList.ttl SHA1 c3adb540c802c5c46fcb83531fc08993618ef64e t/data/turtle-2013/turtle-eval-bad-01.ttl SHA1 604715954e90bf6dcf96bc3776600f2d4536bd93 t/data/turtle-2013/turtle-eval-bad-02.ttl SHA1 131995f20e5a78f4b8b2a2924bc4eed6dae30725 t/data/turtle-2013/turtle-eval-bad-03.ttl SHA1 dd0069137af1405f06f0cbda616876234ca08408 t/data/turtle-2013/turtle-eval-bad-04.ttl SHA1 b9a531bc1e56f3c32adb30300a062d8a3dd86be9 t/data/turtle-2013/turtle-eval-struct-01.nt SHA1 b9a531bc1e56f3c32adb30300a062d8a3dd86be9 t/data/turtle-2013/turtle-eval-struct-01.ttl SHA1 78e091e5dbc5cca58a55749f3b19982dae8ad9c0 t/data/turtle-2013/turtle-eval-struct-02.nt SHA1 9958c2e769d74529e90fb0edf20a657f29cdbed7 t/data/turtle-2013/turtle-eval-struct-02.ttl SHA1 cf58a81256eb9baccb37be4e640a57b490cbbae4 t/data/turtle-2013/turtle-subm-01.nt SHA1 772f7667ebfdf1abc15d97cf1b48e75222e6e93b t/data/turtle-2013/turtle-subm-01.ttl SHA1 cdb4cbb82ffcc77ee2a40e18a0655b23250b7206 t/data/turtle-2013/turtle-subm-02.nt SHA1 d6467790c29516cdc514dedc21cb8c4bc4dcaf23 t/data/turtle-2013/turtle-subm-02.ttl SHA1 9c0ab53f13594152d35a1e7d2048de753513f54e t/data/turtle-2013/turtle-subm-03.nt SHA1 5c0bda0a03e1f24ec156e5853c6046bf4a3e3843 t/data/turtle-2013/turtle-subm-03.ttl SHA1 b8eab2b1e165606de045ccf6ecd334924a667b77 t/data/turtle-2013/turtle-subm-04.nt SHA1 ef853f76edefc71e871c7058cdf45d4a74b6701d t/data/turtle-2013/turtle-subm-04.ttl SHA1 9e11ad6568c77570faac5f8de74312109cf74415 t/data/turtle-2013/turtle-subm-05.nt SHA1 470ee0ef3ac80e29802e2df2cdac39281731b8af t/data/turtle-2013/turtle-subm-05.ttl SHA1 6b2546df454087509e79c5925546eb0dde30ae07 t/data/turtle-2013/turtle-subm-06.nt SHA1 77cc8b8b31938a217ddab84aad01ec187146dfef t/data/turtle-2013/turtle-subm-06.ttl SHA1 96ce55350cb0f8160a265bd796dc973e9bc7d57f t/data/turtle-2013/turtle-subm-07.nt SHA1 15a0e4ab3fee06fc6f025aad237072973f85f2ac t/data/turtle-2013/turtle-subm-07.ttl SHA1 f251d2e928651b830feae876a7e8d9f013753851 t/data/turtle-2013/turtle-subm-08.nt SHA1 74e65a32eaacd7e1f14c080e66ef0bb8a5d00449 t/data/turtle-2013/turtle-subm-08.ttl SHA1 72f6b011ef13535bc274ebe89a043f0ab3d11251 t/data/turtle-2013/turtle-subm-09.nt SHA1 d6b6ad5aa3ce3e27f7a3db5ee906e988852d145f t/data/turtle-2013/turtle-subm-09.ttl SHA1 10a47a27e7303ace3d1c9f9a4102ed19d06a739f t/data/turtle-2013/turtle-subm-10.nt SHA1 17f0b6972a77713361f12df38ceea3310623ffbe t/data/turtle-2013/turtle-subm-10.ttl SHA1 2ef0998e0e0eb49c3f10e5562a928e5f0cb37ace t/data/turtle-2013/turtle-subm-11.nt SHA1 b4f16d672a4ab77d7e4c3092d3067afd3aea3196 t/data/turtle-2013/turtle-subm-11.ttl SHA1 02fe5b354c628c6ed40f804afd3f39fd0a07ca79 t/data/turtle-2013/turtle-subm-12.nt SHA1 380cff16ec65aa6645bc3505a6f68d44f06370ea t/data/turtle-2013/turtle-subm-12.ttl SHA1 1200e45eed3f6639742779ed9b8440918e14d11d t/data/turtle-2013/turtle-subm-13.nt SHA1 972c7247a7c9ea5cdef8cc4279cf74ed104a7ef8 t/data/turtle-2013/turtle-subm-13.ttl SHA1 03719e1a5696b304a4eee5a76ee19a75892afacd t/data/turtle-2013/turtle-subm-14.nt SHA1 1c1f4084b35d0f11b46b76c18ddc176bbb4164a8 t/data/turtle-2013/turtle-subm-14.ttl SHA1 b8329fdf1dbae64a0148d11970c1a352804a3564 t/data/turtle-2013/turtle-subm-15.nt SHA1 c710f8ebf9700e198e8ad8340bd22e97dab70ff5 t/data/turtle-2013/turtle-subm-15.ttl SHA1 5de4d860b0806d866bbf3d5c512829d4a76a1c37 t/data/turtle-2013/turtle-subm-16.nt SHA1 63d70a2496d54c758c3966ddedc6c1ffd65fff68 t/data/turtle-2013/turtle-subm-16.ttl SHA1 bf8f4966a8e5c4e6d577ab166f9b3a06679fcd23 t/data/turtle-2013/turtle-subm-17.nt SHA1 4e4f4b9b7cc0901dc571779e03592808ccedd479 t/data/turtle-2013/turtle-subm-17.ttl SHA1 c0efe8db5e5e89f22240846b8de2c5c76dcefa01 t/data/turtle-2013/turtle-subm-18.nt SHA1 6ea36ef5813da6ada5bcf1d2b42c6b9b3f9c3627 t/data/turtle-2013/turtle-subm-18.ttl SHA1 f405537d4b08df9418a5ae38ce5389e4a88e1571 t/data/turtle-2013/turtle-subm-19.nt SHA1 4693156d5f9197a18fa38193bc9e094721bc330a t/data/turtle-2013/turtle-subm-19.ttl SHA1 046cda8caf6ba481a3f7db0110a135e2c8e4dd2a t/data/turtle-2013/turtle-subm-20.nt SHA1 526f55124f7c0040b71b92f22a9dc7a70b26f009 t/data/turtle-2013/turtle-subm-20.ttl SHA1 4247adb7c6586fe9ad7cc528a25a548c163d8aa2 t/data/turtle-2013/turtle-subm-21.nt SHA1 ccd0e04a0b04dc378fa33111889ea02785682c60 t/data/turtle-2013/turtle-subm-21.ttl SHA1 295342abee33b92912a11a6ba4d7b0f3e2f8fc49 t/data/turtle-2013/turtle-subm-22.nt SHA1 445ee20d387fc1b3f0e16b4e19cf40644325601f t/data/turtle-2013/turtle-subm-22.ttl SHA1 084b67277a1e3f8d19a75506d62894d78ad78f77 t/data/turtle-2013/turtle-subm-23.nt SHA1 da1c9ab6b7731a9dbfcf96ddee77c63c54838a48 t/data/turtle-2013/turtle-subm-23.ttl SHA1 ca41efeffab1ed343c8bc6e2676e1b3768cb7d64 t/data/turtle-2013/turtle-subm-24.nt SHA1 fbb6f8763b4b8d842676cf74f223c539ba94b0ae t/data/turtle-2013/turtle-subm-24.ttl SHA1 67a437427388956fdc9a245d720606b339cfef7c t/data/turtle-2013/turtle-subm-25.nt SHA1 c7ea2691b335336a289025657b26667222be61fc t/data/turtle-2013/turtle-subm-25.ttl SHA1 b1de4e68c9a9909cb86e65927215e11bb52aeb6b t/data/turtle-2013/turtle-subm-26.nt SHA1 b1de4e68c9a9909cb86e65927215e11bb52aeb6b t/data/turtle-2013/turtle-subm-26.ttl SHA1 835954090634c0fd6e27618fee2c39664a7d9618 t/data/turtle-2013/turtle-subm-27.nt SHA1 40b4a0ce9e611ecf93473bcf70cd73b282adbf9f t/data/turtle-2013/turtle-subm-27.ttl SHA1 f5d08d1a63ba69e4a75d3e22729cf998565dd6ee t/data/turtle-2013/turtle-syntax-bad-LITERAL2_with_langtag_and_datatype.ttl SHA1 b181d677fc6d2615f8bd0a198e77aecb49e12a64 t/data/turtle-2013/turtle-syntax-bad-base-01.ttl SHA1 2ac556f28fa61e74a840ba57343809f3c0431a1e t/data/turtle-2013/turtle-syntax-bad-base-02.ttl SHA1 6578274742d47ba3a76fc6bde3c190d6cf746364 t/data/turtle-2013/turtle-syntax-bad-base-03.ttl SHA1 eea10f6a9d6378910ae65543a008f9db42ce93df t/data/turtle-2013/turtle-syntax-bad-blank-label-dot-end.ttl SHA1 d2834599b97e40652ed7488978c953a944f257da t/data/turtle-2013/turtle-syntax-bad-esc-01.ttl SHA1 7d26bdde1c719371023020a5c2e06be2e3de5e57 t/data/turtle-2013/turtle-syntax-bad-esc-02.ttl SHA1 bf53e2e378679b3afb7741447428e547472c434f t/data/turtle-2013/turtle-syntax-bad-esc-03.ttl SHA1 bf53e2e378679b3afb7741447428e547472c434f t/data/turtle-2013/turtle-syntax-bad-esc-04.ttl SHA1 f8bda4b2ec1c143bfb0b07c3b21f2406d431cf61 t/data/turtle-2013/turtle-syntax-bad-kw-01.ttl SHA1 8acef6299a28b319b0686b2f8103457b1a6c1ec6 t/data/turtle-2013/turtle-syntax-bad-kw-02.ttl SHA1 9a977eb0fd2c986f2aff1a60e055bbc277cbc18b t/data/turtle-2013/turtle-syntax-bad-kw-03.ttl SHA1 fa6f1fc07268edfe497224cbc9b789f57de73a19 t/data/turtle-2013/turtle-syntax-bad-kw-04.ttl SHA1 697a8647cf844f8e06c83ccce636dc680cca0635 t/data/turtle-2013/turtle-syntax-bad-kw-05.ttl SHA1 cc61a973fc0356e259edf2896321d82ff0248506 t/data/turtle-2013/turtle-syntax-bad-lang-01.ttl SHA1 b33730b5b201c4e17bb81584fa1b9b8024363373 t/data/turtle-2013/turtle-syntax-bad-ln-dash-start.ttl SHA1 8422c27ca567f444e7bf47df183f6543f710cb1c t/data/turtle-2013/turtle-syntax-bad-ln-escape-start.ttl SHA1 d220602a35a8114e0cd690e559ea37c2ae033792 t/data/turtle-2013/turtle-syntax-bad-ln-escape.ttl SHA1 c73a7692f2b52c1934464c41ebbe1a071d6c7d43 t/data/turtle-2013/turtle-syntax-bad-missing-ns-dot-end.ttl SHA1 36213c23780eaa3bb73f4a42c6e2db0b56dafb00 t/data/turtle-2013/turtle-syntax-bad-missing-ns-dot-start.ttl SHA1 add7717ec9484edf1688012a94ca9469597cb04b t/data/turtle-2013/turtle-syntax-bad-n3-extras-01.ttl SHA1 4dc018699851063d91ee02083bc0229955ce0575 t/data/turtle-2013/turtle-syntax-bad-n3-extras-02.ttl SHA1 a413a3daaade3195749da63f0474594067ef4678 t/data/turtle-2013/turtle-syntax-bad-n3-extras-03.ttl SHA1 4cc04e615a763d72916e10fcefa66fccb59122ac t/data/turtle-2013/turtle-syntax-bad-n3-extras-04.ttl SHA1 8b4e3b0d2b977adc0bb6cf77228def11a17ef1a6 t/data/turtle-2013/turtle-syntax-bad-n3-extras-05.ttl SHA1 41c779a4a3c1624d4e6ae421152b347e61a866aa t/data/turtle-2013/turtle-syntax-bad-n3-extras-06.ttl SHA1 a82aeb530a0d0541befd39596b2dd50f5c6f0a8b t/data/turtle-2013/turtle-syntax-bad-n3-extras-07.ttl SHA1 a82aeb530a0d0541befd39596b2dd50f5c6f0a8b t/data/turtle-2013/turtle-syntax-bad-n3-extras-08.ttl SHA1 b82af8021f2d605c78af5e85814e471176180776 t/data/turtle-2013/turtle-syntax-bad-n3-extras-09.ttl SHA1 84274dd7ccbb2dde1e0c674744655608d3cbe5af t/data/turtle-2013/turtle-syntax-bad-n3-extras-10.ttl SHA1 8822dacc1c4dae66d6f9dd053959e2860fed303f t/data/turtle-2013/turtle-syntax-bad-n3-extras-11.ttl SHA1 b5e0fee2f8bc17188aab2b306a3f77254b5b72d7 t/data/turtle-2013/turtle-syntax-bad-n3-extras-12.ttl SHA1 94c3bc91e1c4c3ce2481590d4aad345ad92fe36c t/data/turtle-2013/turtle-syntax-bad-n3-extras-13.ttl SHA1 902a0048c57eefa9f3671c357ac801e6880d4212 t/data/turtle-2013/turtle-syntax-bad-ns-dot-end.ttl SHA1 413b936a5d0362d97fb4a8c6b08cafee021b2be4 t/data/turtle-2013/turtle-syntax-bad-ns-dot-start.ttl SHA1 cb0a6ec19575ce371d323ac3f2b8ba5fad8668e1 t/data/turtle-2013/turtle-syntax-bad-num-01.ttl SHA1 364f491701e2dcb0e8d1a83f1cb936f3be30a5a1 t/data/turtle-2013/turtle-syntax-bad-num-02.ttl SHA1 c46c67b5119ed4d25095e0c13e0952ff3ad2c59c t/data/turtle-2013/turtle-syntax-bad-num-03.ttl SHA1 14d12490914bbfa55142ae72ca450843866646ed t/data/turtle-2013/turtle-syntax-bad-num-04.ttl SHA1 cee320a6efcda185ab9979e21b0a3ffd0a7e9cc5 t/data/turtle-2013/turtle-syntax-bad-num-05.ttl SHA1 90e81d92d9dc4e005401adafa05aed46888aae21 t/data/turtle-2013/turtle-syntax-bad-number-dot-in-anon.ttl SHA1 340e12d93003dba2d316c16d5aa022f54f515dde t/data/turtle-2013/turtle-syntax-bad-pname-01.ttl SHA1 3636383006f303e8e83171c9bb2c093056ae7934 t/data/turtle-2013/turtle-syntax-bad-pname-02.ttl SHA1 ffd3676895f3274bfd7098eb5d034007d72f40d9 t/data/turtle-2013/turtle-syntax-bad-pname-03.ttl SHA1 6ce4f89ba71cdb327a7b301c7da385e87bc6096e t/data/turtle-2013/turtle-syntax-bad-prefix-01.ttl SHA1 7c5089cd696bc4ffb5e11b73f433145ed505d853 t/data/turtle-2013/turtle-syntax-bad-prefix-02.ttl SHA1 65c8de7f74d212c908bbbfd24982075870edaebd t/data/turtle-2013/turtle-syntax-bad-prefix-03.ttl SHA1 a9fb2ba58489d2c64fed70438d58de49cb9414a0 t/data/turtle-2013/turtle-syntax-bad-prefix-04.ttl SHA1 8a110cfef70cf7b1b4bab19ea1d95bbdc73281ee t/data/turtle-2013/turtle-syntax-bad-prefix-05.ttl SHA1 2a91a0f07c809ecd9a0d989a006c92aed06b75e8 t/data/turtle-2013/turtle-syntax-bad-string-01.ttl SHA1 76a43b335a23f90e5c8ca253352e3fdbd5cde572 t/data/turtle-2013/turtle-syntax-bad-string-02.ttl SHA1 c5852942ea78d62fc4feecd1e839d9c226163b76 t/data/turtle-2013/turtle-syntax-bad-string-03.ttl SHA1 7e1abf1e107eb926d2cd00c45f58dcc3d208e644 t/data/turtle-2013/turtle-syntax-bad-string-04.ttl SHA1 eae46b52e43769be50a6512b2e7e76279352eeaa t/data/turtle-2013/turtle-syntax-bad-string-05.ttl SHA1 6f5b58a3ded0ff7a275e2927cc4b3e2c3e64f6c7 t/data/turtle-2013/turtle-syntax-bad-string-06.ttl SHA1 6751d1a6a509a33a12f49bbcabf98bb98fca7473 t/data/turtle-2013/turtle-syntax-bad-string-07.ttl SHA1 f0835d29a9a2309cb93f4f2df33c7128fe90c08c t/data/turtle-2013/turtle-syntax-bad-struct-01.ttl SHA1 78c29208dee3fd4bab1d90e043eda08048f616de t/data/turtle-2013/turtle-syntax-bad-struct-02.ttl SHA1 eab54ac6fc0111219c94ccf7a4973e293b054e16 t/data/turtle-2013/turtle-syntax-bad-struct-03.ttl SHA1 0d6afeeed2facadc6e05e2e9096133c1484da2cc t/data/turtle-2013/turtle-syntax-bad-struct-04.ttl SHA1 ee7f068399816a58e56962dbf07d1bd0fded7f43 t/data/turtle-2013/turtle-syntax-bad-struct-05.ttl SHA1 b01b78a38f4a77c6b2957258a39f2c1bec7806d6 t/data/turtle-2013/turtle-syntax-bad-struct-06.ttl SHA1 b5c3200518dc8dc79a3e9d3abc56d58f9a05186f t/data/turtle-2013/turtle-syntax-bad-struct-07.ttl SHA1 f8c640c2ea385c94d9c2d4e05e3da3b4154d76fb t/data/turtle-2013/turtle-syntax-bad-struct-08.ttl SHA1 e212ab038a952f2706be5d26e9936f4475797b97 t/data/turtle-2013/turtle-syntax-bad-struct-09.ttl SHA1 aba76a675da1be30c8ed65b4536269f854b0fde5 t/data/turtle-2013/turtle-syntax-bad-struct-10.ttl SHA1 291d51f09296c2c2038f210f934e0c1ed8259f97 t/data/turtle-2013/turtle-syntax-bad-struct-11.ttl SHA1 d3842385883e0e91df43c53a156d85756599b478 t/data/turtle-2013/turtle-syntax-bad-struct-12.ttl SHA1 d3842385883e0e91df43c53a156d85756599b478 t/data/turtle-2013/turtle-syntax-bad-struct-13.ttl SHA1 15b1444ad8bea3121dd0aa45c31e001ba4fd7722 t/data/turtle-2013/turtle-syntax-bad-struct-14.ttl SHA1 d72d160e4e148a529371a20ffef359ccf3af881b t/data/turtle-2013/turtle-syntax-bad-struct-15.ttl SHA1 3dcef8f463ecf8b5fb8e55431542be2dabeaa3b6 t/data/turtle-2013/turtle-syntax-bad-struct-16.ttl SHA1 054e5dfaf6ade37f27c7c827f916d48d5dfd876b t/data/turtle-2013/turtle-syntax-bad-struct-17.ttl SHA1 ad91b8ca45fbf84919bc5deb9c308f5f3c9dcfce t/data/turtle-2013/turtle-syntax-bad-uri-01.ttl SHA1 c0d44d0a16359b11c5f9201b7cb92228f2b73eaa t/data/turtle-2013/turtle-syntax-bad-uri-02.ttl SHA1 cac0459dc2f4757ec43d70a1834dc2908fde18f2 t/data/turtle-2013/turtle-syntax-bad-uri-03.ttl SHA1 fb97e52c83dc5252225a1083a4c84920218466e6 t/data/turtle-2013/turtle-syntax-bad-uri-04.ttl SHA1 f1e9590c1eb0cb7741281a40bf88c2f7618c2c07 t/data/turtle-2013/turtle-syntax-bad-uri-05.ttl SHA1 340b85508377f9cde4f331b6cee10c8c89e46607 t/data/turtle-2013/turtle-syntax-base-01.ttl SHA1 8881b8208d3a564e1f700e3d253cf6f242299457 t/data/turtle-2013/turtle-syntax-base-02.ttl SHA1 5fabb5a6a1f849edca851454b9d2893a5201e66d t/data/turtle-2013/turtle-syntax-base-03.ttl SHA1 015299401e1463f64638ef4aa54b1f402fc17216 t/data/turtle-2013/turtle-syntax-base-04.ttl SHA1 bf0d005c49f692caff4cf37b9f01f8f3619cb589 t/data/turtle-2013/turtle-syntax-blank-label.ttl SHA1 ae2f1b918154327662ccbbd77ec857d0e9e18408 t/data/turtle-2013/turtle-syntax-bnode-01.ttl SHA1 e58452e9ad3f2d3dab8b7ebb797bd2eb0ab166e6 t/data/turtle-2013/turtle-syntax-bnode-02.ttl SHA1 15a1e12d6a02c801ff99176380704499fb867022 t/data/turtle-2013/turtle-syntax-bnode-03.ttl SHA1 172cb61429d1e86f3e5ee300fd17daf2ddbee1ed t/data/turtle-2013/turtle-syntax-bnode-04.ttl SHA1 315398a84565e44fdbdb3243df925f7c265afa85 t/data/turtle-2013/turtle-syntax-bnode-05.ttl SHA1 746fc36d1c0d081c4c68cb920127cdecdfbc1682 t/data/turtle-2013/turtle-syntax-bnode-06.ttl SHA1 37cf5e6c4e33c24c236d02b647cfdabe7559cbe3 t/data/turtle-2013/turtle-syntax-bnode-07.ttl SHA1 54c8f90938b6dd2eb14c74976c3e6d4da510600c t/data/turtle-2013/turtle-syntax-bnode-08.ttl SHA1 53e39add9ce00231d9d982ff2fe66fcc0ad533b4 t/data/turtle-2013/turtle-syntax-bnode-09.ttl SHA1 909511139c803141b6fcf8679471761940c1d707 t/data/turtle-2013/turtle-syntax-bnode-10.ttl SHA1 b8c57192a8fadf64a35614804a0eddabd9067935 t/data/turtle-2013/turtle-syntax-datatypes-01.ttl SHA1 7bdc3cc651881d15ed50f4e764a6835cf5029159 t/data/turtle-2013/turtle-syntax-datatypes-02.ttl SHA1 da39a3ee5e6b4b0d3255bfef95601890afd80709 t/data/turtle-2013/turtle-syntax-file-01.ttl SHA1 286ce15d32430d10a688b26d578a73098fa4ce99 t/data/turtle-2013/turtle-syntax-file-02.ttl SHA1 fb49efc00b3a08add143156f08929ae2e9e65627 t/data/turtle-2013/turtle-syntax-file-03.ttl SHA1 542ce1128c605c62ec7dd669859ffaa2e483d495 t/data/turtle-2013/turtle-syntax-kw-01.ttl SHA1 60142ddfa840dc273241e1310a931386fbb1b331 t/data/turtle-2013/turtle-syntax-kw-02.ttl SHA1 d7e991405507e51fb418f29891c0be8f810f575e t/data/turtle-2013/turtle-syntax-kw-03.ttl SHA1 0e57d950628237b42e0c5f0a9f7d78c8b6045646 t/data/turtle-2013/turtle-syntax-lists-01.ttl SHA1 feda87ec70469d03c054eaf3cbcde2d049dcc66f t/data/turtle-2013/turtle-syntax-lists-02.ttl SHA1 f3be59b7ca9c69e47a4e76b731307f51e4a434f5 t/data/turtle-2013/turtle-syntax-lists-03.ttl SHA1 50da41af18c4d0f50e274b1941b01ebcf9a3cc65 t/data/turtle-2013/turtle-syntax-lists-04.ttl SHA1 8542846df2c453d9fc4a58b749bfbe5909aa4c9c t/data/turtle-2013/turtle-syntax-lists-05.ttl SHA1 7a58bae17b488123bb086fd7256ea767379f60ee t/data/turtle-2013/turtle-syntax-ln-colons.ttl SHA1 892311f1dfe9ea045ca31a6abe0a2b45bb0bb45a t/data/turtle-2013/turtle-syntax-ln-dots.ttl SHA1 10a4b310cc5962babc7d569a9031f5cec43e057e t/data/turtle-2013/turtle-syntax-ns-dots.ttl SHA1 97b45d8b29952c7a51983d8a0ec45dad8accaab4 t/data/turtle-2013/turtle-syntax-number-01.ttl SHA1 cb43094efe76b71538992c146fafc10c397bf070 t/data/turtle-2013/turtle-syntax-number-02.ttl SHA1 4e80509f6676821490269ed33ffc2a784350e9c3 t/data/turtle-2013/turtle-syntax-number-03.ttl SHA1 347b1fd6cec5418bd67edc993c08477fc066f344 t/data/turtle-2013/turtle-syntax-number-04.ttl SHA1 5e1c9ec92709165683d0bd4ed2f17429cec6649b t/data/turtle-2013/turtle-syntax-number-05.ttl SHA1 df2436147b6201d642dd8eaac1a9c9a0b885d366 t/data/turtle-2013/turtle-syntax-number-06.ttl SHA1 d075594d555e73ce3b0b640ebb74eedc98649188 t/data/turtle-2013/turtle-syntax-number-07.ttl SHA1 d75f8169070b6df6fd1c4b7e9ca87c1bc8360683 t/data/turtle-2013/turtle-syntax-number-08.ttl SHA1 e8159185fed0bd72b2b5e300e892a376e4db6962 t/data/turtle-2013/turtle-syntax-number-09.ttl SHA1 156de62ea62e050d3005c90d863ad83e80e26a61 t/data/turtle-2013/turtle-syntax-number-10.ttl SHA1 4d6703afa58c5353842ecc1da00eb28e293f9700 t/data/turtle-2013/turtle-syntax-number-11.ttl SHA1 5af58fdfeea762d1cf4a8dfb53a379f74408d783 t/data/turtle-2013/turtle-syntax-pname-esc-01.ttl SHA1 9f5cd16f4cb6f13f6b8ed387275649e052e7f404 t/data/turtle-2013/turtle-syntax-pname-esc-02.ttl SHA1 835c38b7c2800d2571b453971bc8ea4836491162 t/data/turtle-2013/turtle-syntax-pname-esc-03.ttl SHA1 24fe985da6000ffe2b669b914e5c86d54342cab6 t/data/turtle-2013/turtle-syntax-prefix-01.ttl SHA1 08faf6e7cecc66cec8e6232f6c884dcefea27ce6 t/data/turtle-2013/turtle-syntax-prefix-02.ttl SHA1 224ee697c28c9f05ccacb95ff066a70e56cc1121 t/data/turtle-2013/turtle-syntax-prefix-03.ttl SHA1 067d4746a19104069bdb597c1fe58bbd42f52da5 t/data/turtle-2013/turtle-syntax-prefix-04.ttl SHA1 1a64666be673577f337dd296f04e9ce3a5a837cf t/data/turtle-2013/turtle-syntax-prefix-05.ttl SHA1 a483c571eb42cb22efc77346ec56b00e61f74cb5 t/data/turtle-2013/turtle-syntax-prefix-06.ttl SHA1 1748de1ba60d5fe398e7ce2ddb36aee6260a6cd7 t/data/turtle-2013/turtle-syntax-prefix-07.ttl SHA1 23dc28711e884ec8a8aae6eebcf1513ae8080a68 t/data/turtle-2013/turtle-syntax-prefix-08.ttl SHA1 9d4ebebbdbcab786eb5403e177553ad21020a871 t/data/turtle-2013/turtle-syntax-prefix-09.ttl SHA1 6398fbd02491c8bac8e7caaf480627accafd64d8 t/data/turtle-2013/turtle-syntax-str-esc-01.ttl SHA1 4418ca81026ce1015722ef80d37df71033cfdeeb t/data/turtle-2013/turtle-syntax-str-esc-02.ttl SHA1 0e341103445041658ab1c63ec84c55dada5370d5 t/data/turtle-2013/turtle-syntax-str-esc-03.ttl SHA1 5f7c6319468d7be4ef3e86a76215ace9f0182caa t/data/turtle-2013/turtle-syntax-string-01.ttl SHA1 425450c3e6a288d975fae94c1f840b26e0e87ef5 t/data/turtle-2013/turtle-syntax-string-02.ttl SHA1 074fe4e508f18cf942d5b3efd7ca99bd5842b5ab t/data/turtle-2013/turtle-syntax-string-03.ttl SHA1 f2db718cc301770b87f33bc84d974b8ac6d2cb21 t/data/turtle-2013/turtle-syntax-string-04.ttl SHA1 197eadd08c73a12221f231849a93877cae43c042 t/data/turtle-2013/turtle-syntax-string-05.ttl SHA1 99075f216d3358b7eb2096f5373e2468ffc06c15 t/data/turtle-2013/turtle-syntax-string-06.ttl SHA1 15762992c0990d4ac45013f01eb26f96db03c8b6 t/data/turtle-2013/turtle-syntax-string-07.ttl SHA1 dba1befacbc1ea5b890dd03e1b0e0f424ea185f5 t/data/turtle-2013/turtle-syntax-string-08.ttl SHA1 d12d984b18e9eca8664a3d818a67caea3331503b t/data/turtle-2013/turtle-syntax-string-09.ttl SHA1 4874d357ca032e74402c65460d9f4abb1232b8d7 t/data/turtle-2013/turtle-syntax-string-10.ttl SHA1 7627045fd407fe2a0994f2417897ece828b707f2 t/data/turtle-2013/turtle-syntax-string-11.ttl SHA1 94bdd344279a1c951a7c2572764df4e78ba22bc2 t/data/turtle-2013/turtle-syntax-struct-01.ttl SHA1 21c0c34880d20a8a27df45154f83a2f16d7f3c14 t/data/turtle-2013/turtle-syntax-struct-02.ttl SHA1 81ce8bbc5bd08efba4b41b55b03b922cd4069a0f t/data/turtle-2013/turtle-syntax-struct-03.ttl SHA1 c71c9b70dc6701cc2fe077609319542a4d788994 t/data/turtle-2013/turtle-syntax-struct-04.ttl SHA1 1aaa428a94fe703fc512ce4f290c0171e611a3cc t/data/turtle-2013/turtle-syntax-struct-05.ttl SHA1 b9a531bc1e56f3c32adb30300a062d8a3dd86be9 t/data/turtle-2013/turtle-syntax-uri-01.ttl SHA1 72c3e14ad8d6e52f231a344077648710d7222f8c t/data/turtle-2013/turtle-syntax-uri-02.ttl SHA1 ddf38440540914eb77a56291116112665d7008c0 t/data/turtle-2013/turtle-syntax-uri-03.ttl SHA1 a68067a01ffb1ff17500188491494f60697e0b95 t/data/turtle-2013/turtle-syntax-uri-04.ttl SHA1 801e8c6dd214106c52958550b3d31cb6943a1005 t/data/turtle-2013/two_LITERAL_LONG2s.nt SHA1 59b2b8bf81509438ccc3c8cc7fb90b8b7babe28c t/data/turtle-2013/two_LITERAL_LONG2s.ttl SHA1 e8390eeaea0da3830e936a8b954d38c5665383bf t/data/turtle-2013/underscore_in_localName.nt SHA1 ddc3ea019cf67d2ff127a66abc9fd684743cb75e t/data/turtle-2013/underscore_in_localName.ttl SHA1 297ec58e16e6510dbd692d7e39adacc4a10c25ce t/data/turtle/bad-00.ttl SHA1 fdb25bfdf60a902e812a131242d9433032d02093 t/data/turtle/bad-01.ttl SHA1 6a01793cdd40761b88c3465146d008fac2cb963a t/data/turtle/bad-02.ttl SHA1 670d1fa7e71bea54d37bd32257e417216b691f3d t/data/turtle/bad-03.ttl SHA1 690d318f63b019bc02571ac9ce0162403db067f8 t/data/turtle/bad-04.ttl SHA1 e3c35def56a9d08fea5efb83a09fa6f28c6c9ec2 t/data/turtle/bad-05.ttl SHA1 b59609bca0aaa7ec32077a50c09377359d19c725 t/data/turtle/bad-06.ttl SHA1 6be8b06c58d59d1f0ab65def30a280be37c82eb0 t/data/turtle/bad-07.ttl SHA1 8fcc794a0d1e4c3c220d5323c273a5fa5b07c502 t/data/turtle/bad-08.ttl SHA1 5ade642f289a4d7da80bbc7e279a87920baf4dcb t/data/turtle/bad-09.ttl SHA1 e69ef91e024ae3c9ea0debe4018fd138a342c1c0 t/data/turtle/bad-10.ttl SHA1 ad85fb7efc868494f93eb540fef68e5c145e8a5e t/data/turtle/bad-11.ttl SHA1 f1c8b1ca82d4306c0b75e720197182ccc08c72a3 t/data/turtle/bad-12.ttl SHA1 91f57a8c6338cb1d308a39bcf734ab4e85a63e41 t/data/turtle/bad-13.ttl SHA1 46df0b28dce2a9c25539d4680d12c6caaa6c092f t/data/turtle/bad-14.ttl SHA1 35b63346d5e1192aac9634c99918cf99d49661b1 t/data/turtle/rdf-schema.out SHA1 0cebaed89bdd8bc13d35d59c5f3ff468468a1e11 t/data/turtle/rdf-schema.ttl SHA1 151737d7fe44541a7f1fbd63d3f8c63b1831c868 t/data/turtle/rdfq-results.out SHA1 fb45a9f5e9532e294255f37875bf7bb6792897d6 t/data/turtle/rdfq-results.ttl SHA1 b05806c3ec54e62ecd0ccc42a8008e60ed4f7d99 t/data/turtle/rdfs-namespace.out SHA1 ce27649f2a9445c32ee1047b726204116b5c9aa4 t/data/turtle/rdfs-namespace.ttl SHA1 b5f86dded5b9293d2af7d85a3af777a7b7c5a204 t/data/turtle/test-00.out SHA1 772f7667ebfdf1abc15d97cf1b48e75222e6e93b t/data/turtle/test-00.ttl SHA1 cdb4cbb82ffcc77ee2a40e18a0655b23250b7206 t/data/turtle/test-01.out SHA1 d6467790c29516cdc514dedc21cb8c4bc4dcaf23 t/data/turtle/test-01.ttl SHA1 9c0ab53f13594152d35a1e7d2048de753513f54e t/data/turtle/test-02.out SHA1 5c0bda0a03e1f24ec156e5853c6046bf4a3e3843 t/data/turtle/test-02.ttl SHA1 b8eab2b1e165606de045ccf6ecd334924a667b77 t/data/turtle/test-03.out SHA1 ef853f76edefc71e871c7058cdf45d4a74b6701d t/data/turtle/test-03.ttl SHA1 9e11ad6568c77570faac5f8de74312109cf74415 t/data/turtle/test-04.out SHA1 470ee0ef3ac80e29802e2df2cdac39281731b8af t/data/turtle/test-04.ttl SHA1 6b2546df454087509e79c5925546eb0dde30ae07 t/data/turtle/test-05.out SHA1 77cc8b8b31938a217ddab84aad01ec187146dfef t/data/turtle/test-05.ttl SHA1 96ce55350cb0f8160a265bd796dc973e9bc7d57f t/data/turtle/test-06.out SHA1 15a0e4ab3fee06fc6f025aad237072973f85f2ac t/data/turtle/test-06.ttl SHA1 f251d2e928651b830feae876a7e8d9f013753851 t/data/turtle/test-07.out SHA1 74e65a32eaacd7e1f14c080e66ef0bb8a5d00449 t/data/turtle/test-07.ttl SHA1 72f6b011ef13535bc274ebe89a043f0ab3d11251 t/data/turtle/test-08.out SHA1 d6b6ad5aa3ce3e27f7a3db5ee906e988852d145f t/data/turtle/test-08.ttl SHA1 10a47a27e7303ace3d1c9f9a4102ed19d06a739f t/data/turtle/test-09.out SHA1 17f0b6972a77713361f12df38ceea3310623ffbe t/data/turtle/test-09.ttl SHA1 9275ecde839cf678f9a6ce0095efe3c9f354c498 t/data/turtle/test-10.out SHA1 b4f16d672a4ab77d7e4c3092d3067afd3aea3196 t/data/turtle/test-10.ttl SHA1 02fe5b354c628c6ed40f804afd3f39fd0a07ca79 t/data/turtle/test-11.out SHA1 380cff16ec65aa6645bc3505a6f68d44f06370ea t/data/turtle/test-11.ttl SHA1 1200e45eed3f6639742779ed9b8440918e14d11d t/data/turtle/test-12.out SHA1 972c7247a7c9ea5cdef8cc4279cf74ed104a7ef8 t/data/turtle/test-12.ttl SHA1 03719e1a5696b304a4eee5a76ee19a75892afacd t/data/turtle/test-13.out SHA1 1c1f4084b35d0f11b46b76c18ddc176bbb4164a8 t/data/turtle/test-13.ttl SHA1 b8329fdf1dbae64a0148d11970c1a352804a3564 t/data/turtle/test-17.out SHA1 c710f8ebf9700e198e8ad8340bd22e97dab70ff5 t/data/turtle/test-17.ttl SHA1 a85d120f778e10b5887412d188dc818047225797 t/data/turtle/test-18.out SHA1 637ae90ceb65192c0f9edcdf844a75f8e691c5f7 t/data/turtle/test-18.ttl SHA1 bf8f4966a8e5c4e6d577ab166f9b3a06679fcd23 t/data/turtle/test-19.out SHA1 4e4f4b9b7cc0901dc571779e03592808ccedd479 t/data/turtle/test-19.ttl SHA1 c0efe8db5e5e89f22240846b8de2c5c76dcefa01 t/data/turtle/test-20.out SHA1 6ea36ef5813da6ada5bcf1d2b42c6b9b3f9c3627 t/data/turtle/test-20.ttl SHA1 9be7dc098a63fb606e84ff903c56955606b22d11 t/data/turtle/test-21.out SHA1 4693156d5f9197a18fa38193bc9e094721bc330a t/data/turtle/test-21.ttl SHA1 ff9207af8f8c5c3c350707bd52582da46fa97726 t/data/turtle/test-22.out SHA1 526f55124f7c0040b71b92f22a9dc7a70b26f009 t/data/turtle/test-22.ttl SHA1 4247adb7c6586fe9ad7cc528a25a548c163d8aa2 t/data/turtle/test-23.out SHA1 ccd0e04a0b04dc378fa33111889ea02785682c60 t/data/turtle/test-23.ttl SHA1 295342abee33b92912a11a6ba4d7b0f3e2f8fc49 t/data/turtle/test-24.out SHA1 445ee20d387fc1b3f0e16b4e19cf40644325601f t/data/turtle/test-24.ttl SHA1 084b67277a1e3f8d19a75506d62894d78ad78f77 t/data/turtle/test-25.out SHA1 da1c9ab6b7731a9dbfcf96ddee77c63c54838a48 t/data/turtle/test-25.ttl SHA1 cef80d478759fb2c86705210f66462c277571a0e t/exporter-csv.t SHA1 77d3ecc040080e5dc649bd56090b0aeedeceff90 t/graph-subgraphs.t SHA1 0155808c901e925f4dd0af99a62ce4988dac6c33 t/graph.t SHA1 eeb60d81a3ba5aed1c7bbdfb865e8606a0803c4f t/iterator-bindings-join.t SHA1 0434eb1940161be055f80b36976266761db4b1e3 t/iterator-bindings-materialize.t SHA1 63c4eeeaca8fda906a89b1ca02faa7a20b27db7b t/iterator-bindings.t SHA1 6d40cb41c4ba2c1c1fe15e96b6bcf3f54b79cbc7 t/iterator-boolean.t SHA1 3c27b9c168a8f53d3339b9f271702cfbe9bec15f t/iterator-graph-materialize.t SHA1 29608bb2ceeac144565bd392958962c935ff12d4 t/iterator-graph.t SHA1 a6586ac8ecf176e06f5e185d6430343ea6df0bbc t/iterator-materialized.t SHA1 b44d52abaf91977903b7607acc244599dadec3b8 t/iterator-thaw.t SHA1 da84f8d654dc293cf154f3e545dc0a228789e07a t/iterator.t SHA1 d690df1f3a87c4b281436c5b5365642f4480aaf8 t/model-boundeddescription.t SHA1 e7d9a317ade810b55038c0fc696409cd34c858a6 t/model-dataset.t SHA1 cd13133694351e6d4fdff1b0843e6a9769653020 t/model-filter.t SHA1 762bdace13ea4415ef7d1c1b1bdce17051103763 t/model-logger.t SHA1 7696a3c91ca35e7573e056b664df764f644ba3a1 t/model-temporary.t SHA1 19fd7e263d6dfba46c9aff7508268f50081a2587 t/model-union.t SHA1 3bec4002aa4d618b7af03e900637c8677142ed50 t/model.t SHA1 6839e8e2bf57cd5bacbd6e177eb7f1f41b48a4e2 t/namespace-export.t SHA1 ce1cc8d69a183e4f3aa3904f2e150d55a25838e7 t/namespace-uri.t SHA1 65382025be67248c6dd4560ed420b390454da11e t/namespacemap.t SHA1 abfc6f05c46b6b1b145dfaf7d738d01b814fe462 t/node-literal.t SHA1 5cbe0ce00dfba2a678288a8480e56f431bb13d09 t/node-resource-i18n.t SHA1 ec56a7a2199780e9c597f2ec1c744fd85e34bfd7 t/node-serialization.t SHA1 7507f440042de79a54a1d930364c1df08bfd2e0c t/node.t SHA1 4dbc6c30f374dcd229c6be60004bf5737664c455 t/parser-nquads.t SHA1 727a9544c3ba67e528e5156a2c7a50b0cd938086 t/parser-ntriples.t SHA1 8ae7768a0341d4d97d5cd7874e793b86cb96b2b3 t/parser-rdfa.t SHA1 d46c0650fdfd974b5e10de07080c60622ad6b1f1 t/parser-rdfjson.t SHA1 fa32fdde16122d4c7380e536382c63f5b72f4aaf t/parser-rdfxml-w3c.t SHA1 0c9175c7a2d9a48d5fe70cf74cf34c1c97e7a76a t/parser-redland.t SHA1 2967c3dd818866c4595bc245cc15555f32293090 t/parser-trig.t SHA1 b83e56b4d118a755cac17b1737b144ef3203a402 t/parser-turtle-2013.t SHA1 00529b3c8450bc0533671503295c1db835342a24 t/parser-turtle.t SHA1 3503fcbb170c4ea4fdf1f4d46eb109d900c806c1 t/parser.t SHA1 12f11f0dcfe7b3d9be76c29114854b71d0759247 t/pattern.t SHA1 d06dfdb62eb23fe7ae6d69aabda46c07213137a3 t/remove-list.t SHA1 4339b806b1686e85df3d0d33ef37c977e6fe7bcd t/serializer-nquads.t SHA1 d0e02f2fd6c8e52b3ee15c44f4074a1faf01f997 t/serializer-ntriples-canonical.t SHA1 d3fdd152ae873dbd80e4fed82971ea472a0ea16d t/serializer-ntriples.t SHA1 da719377765c5d5da85c54051c8a4724baa3af36 t/serializer-rdfjson.t SHA1 931d1d69f186fe25cd8aee6feb1c8dbc62b22888 t/serializer-rdfpatch.t SHA1 ff8bc68810176b019e4589665d3db743284c2f2a t/serializer-rdfxml.t SHA1 c0eeefbf82c0b5c25a99fcb83f78e1928ab83b08 t/serializer-trig.t SHA1 31df4e401a52e37eb71108760fc2ebb839ba2d65 t/serializer-tsv.t SHA1 98a72d868447f24a74d73f866b71bd0ecdf2d399 t/serializer-turtle.t SHA1 db8dfad4c0646356bcc5e18ca8a89304e8dde6dd t/serializer.t SHA1 8351cb945f244de6a2edb473a295cb27ee5008fc t/statement-serialization.t SHA1 328af6f1f43457421d0780027c77dd074c942a1f t/statement.t SHA1 6128f496b1df9914bf42215d01137ed9257feb71 t/store-config.t SHA1 aa00053d2db196cf49db8ccfe0e06cd0ac376ef9 t/store-context.t SHA1 533cced80f06d0d29e00c99b4e24d9f5bc612b87 t/store-dbi-mysql.t SHA1 9e6e34e51fa7c7a6bf7c81a2ee0752201b430876 t/store-dbi-pg.t SHA1 ed010d66b5ab7bd9d36f0d5211a52d0a4306143c t/store-dbi.t SHA1 8cb9666120c08881e3ce3def588488fe81852420 t/store-hexastore-pattern.t SHA1 3ad3f71d59ae8dd4dd5ef893130d4afdc6211a83 t/store-hexastore-storable.t SHA1 33c8e3f131ebb14a1fece0f5848ffa50d29da62e t/store-hexastore-triplestore.t SHA1 546bfe6e7a45a8eb24024a2af8f91b7f507d0508 t/store-hexastore.t SHA1 5dc3f12174c68a5a067b088b14b9f4e2eb41e8b8 t/store-memory.t SHA1 227583a3b48495bf9c2484654bc0872d0f5b35b5 t/store-redis.t SHA1 0a6b72ed37ea6ffae0bbe99d369627dcc5fd9642 t/store-triple_sql.t SHA1 7f06b4f8be645e127a9d0140ea6ff2b069185ef9 t/store.t SHA1 15ed1be16bafbae50d80842e1bcbfadc69d85bf3 t/syntax.t SHA1 f50d74b887afb186b098fd9da7cfbd8c4daaf41c xt/00_compile.t SHA1 45ea894790a41a42de02e3bd2bc1076b3472ac23 xt/data/turtle/test-14.out SHA1 46bbbf8a8928c49f9b98d71c8e7992c69ee8b8e0 xt/data/turtle/test-14.ttl SHA1 88f8210eba5db02ee5c6f761f0ef9f2b221676a1 xt/data/turtle/test-15.out SHA1 fdfe2bb7cae4e2849166d19738c49b85aa381d2c xt/data/turtle/test-15.ttl SHA1 88f8210eba5db02ee5c6f761f0ef9f2b221676a1 xt/data/turtle/test-16.out SHA1 e1334fcb18efc0b4b966cf8e3092b67327fccfb5 xt/data/turtle/test-16.ttl SHA1 0a73829477a0289c5786b683879fa28def2c4da0 xt/parser-trig-2013.t SHA1 8fce98e8ce4b5ef5ea5e50e366e4014a8b659e27 xt/pod-coverage.t SHA1 6387af7a5fde0747be5bc9ad2ec15ca9759bd95a xt/pod.t SHA1 4c425c38576ccc8c456193c4042e47717354bbe8 xt/store-dydra.t SHA1 2646eda043e501aa78e16abbe3124d64fd44fefa xt/store-redland.t SHA1 0d59038cf8ba6efd00638de2bcf3c56bbd3e7da1 xt/store-sparql.t -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.12 (Darwin) Comment: GPGTools - http://gpgtools.org iEYEARECAAYFAlHnySQACgkQhPK6VMqoyC39zACfX6fv1b4LK2ghyh/4TPeM4fx/ /80AnRKnLPSOQRGcbKRHq8RVWDcM/3aO =g0h+ -----END PGP SIGNATURE----- RDF-Trine-1.007/t/000755 000765 000024 00000000000 12171744443 013554 5ustar00gregstaff000000 000000 RDF-Trine-1.007/xt/000755 000765 000024 00000000000 12171744443 013744 5ustar00gregstaff000000 000000 RDF-Trine-1.007/xt/00_compile.t000755 000765 000024 00000000515 12171052121 016045 0ustar00gregstaff000000 000000 use strict; use warnings; use Test::More; use Module::Load::Conditional qw[can_load]; unless (can_load( modules => { 'Test::Compile' => 0 })) { plan skip_all => "Test::Compile must be installed for compilation tests"; } Test::Compile->import; pm_file_ok($_) for grep { !m/Redland|mysql|Pg|Redis/ } all_pm_files(); done_testing(); RDF-Trine-1.007/xt/data/000755 000765 000024 00000000000 12171744442 014654 5ustar00gregstaff000000 000000 RDF-Trine-1.007/xt/parser-trig-2013.t000644 000765 000024 00000012404 12164234713 016750 0ustar00gregstaff000000 000000 use utf8; use strict; use Test::More; use Test::Exception; use FindBin qw($Bin); use File::Glob qw(bsd_glob); use File::Spec; use Data::Dumper; use RDF::Trine qw(iri literal); use RDF::Trine::Namespace qw(rdf); use URI::file; use TryCatch; my $mf = RDF::Trine::Namespace->new('http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#'); my $rdft = RDF::Trine::Namespace->new('http://www.w3.org/ns/rdftest#'); my $base = iri('http://www.w3.org/2013/TriGTests/'); my $model = RDF::Trine::Model->temporary_model; my $path = File::Spec->catfile( $Bin, '..', 't', 'data', 'trig-2013' ); my $file = URI::file->new_abs( File::Spec->catfile($path, 'manifest.ttl') )->as_string; RDF::Trine::Parser->parse_url_into_model( $file, $model, canonicalize => 1 ); TODO: { local($TODO) = 'TriG support in-progress'; my @manifests = $model->subjects($rdf->type, $mf->Manifest); foreach my $manifest (@manifests) { my ($list) = $model->objects($manifest, $mf->entries); my @list = $model->get_list($list); my @syntax_good; my @syntax_bad; my @eval_good; my @eval_bad; foreach my $test (@list) { my ($type) = $model->objects($test, $rdf->type); if ($type->equal($rdft->TestTrigPositiveSyntax)) { push(@syntax_good, $test); } elsif ($type->equal($rdft->TestTrigNegativeSyntax)) { push(@syntax_bad, $test); } elsif ($type->equal($rdft->TestTrigEval)) { push(@eval_good, $test); } elsif ($type->equal($rdft->TestTrigNegativeEval)) { push(@eval_bad, $test); } else { warn "unrecognized test type $type\n"; } } note("Positive Syntax Tests"); foreach my $test (@syntax_good) { my ($test_file) = $model->objects($test, $mf->action); my $file = URI->new($test_file->uri)->file; open( my $fh, '<', $file ); my $data = do { local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); my $parsed = 0; my $error; my $url = 'file://' . $file; my $parser = RDF::Trine::Parser::TriG->new(); try { $parser->parse( $url, $data ); $parsed = 1; } catch (RDF::Trine::Error::ParserError::Explainable $e) { $e->explain( $fh ); $error = $e; } catch ($e) { $error = $e; } ok($parsed, $test); if ($error) { diag("died: $error"); } } note("Negative Syntax Tests"); foreach my $test (@syntax_bad) { my ($test_file) = $model->objects($test, $mf->action); my $url = URI->new($test_file->uri); my $file = $url->file; my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); throws_ok { my $parser = RDF::Trine::Parser::TriG->new(); $parser->parse( $url, $data ); } 'RDF::Trine::Error::ParserError', $test; } note("Positive Evaluation Tests"); foreach my $test (@eval_good) { my ($test_file) = $model->objects($test, $mf->action); my ($res_file) = $model->objects($test, $mf->result); my $url = URI->new($test_file->uri); my $file = $url->file; open( my $fh, '<:encoding(UTF-8)', $file ) or die "$!: $file"; my $nt = URI->new($res_file->uri)->file; my (undef, undef, $test) = File::Spec->splitpath( $file ); my $parser = RDF::Trine::Parser::TriG->new(); my $model = RDF::Trine::Model->temporary_model; my $tbase = URI->new_abs( $test, $base->uri_value )->as_string; my $parsed = 1; try { $parser->parse_file_into_model( $tbase, $fh, $model ); } catch (RDF::Trine::Error::ParserError::Explainable $e) { $parsed = 0; $e->explain( $fh ); } catch (RDF::Trine::Error $e) { $parsed = 0; warn "Failed to parse $file: " . $e->text; } catch ($err) { warn $err; $parsed = 0; } if ($parsed) { compare($model, URI->new($res_file->uri), $base, $test); } else { fail($test); } } note("Negative Evaluation Tests"); foreach my $test (@eval_bad) { my ($test_file) = $model->objects($test, $mf->action); my $file = URI->new($test_file->uri)->file; my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); throws_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser::TriG->new(); $parser->parse( $url, $data ); } 'RDF::Trine::Error::ParserError', $test; } } } done_testing(); # sub _SILENCE { # Log::Log4perl->init( { # "log4perl.rootLogger" => "FATAL, screen", # "log4perl.appender.screen" => "Log::Log4perl::Appender::Screen", # "log4perl.appender.screen.stderr" => 1, # "log4perl.appender.screen.layout" => 'Log::Log4perl::Layout::SimpleLayout', # } ); # } sub compare { my $model = shift; my $url = shift; my $base = shift; my $name = shift; my $parser = RDF::Trine::Parser::NQuads->new(); my $emodel = RDF::Trine::Model->temporary_model; my $tbase = URI->new_abs( $name, $base->uri_value )->as_string; my $file = $url->file; open( my $fh, '<:encoding(UTF-8)', $file ); try { $parser->parse_file_into_model( $tbase, $fh, $emodel ); }; # TODO: compare datasets, not graphs (the nt serializer is ignoring the graph slot in the quads) my $got = RDF::Trine::Serializer::NTriples::Canonical->new->serialize_model_to_string( $model ); my $expect = RDF::Trine::Serializer::NTriples::Canonical->new->serialize_model_to_string( $emodel ); is( $got, $expect, "expected triples: $name" ); } RDF-Trine-1.007/xt/pod-coverage.t000644 000765 000024 00000000741 12164234713 016502 0ustar00gregstaff000000 000000 use strict; use warnings; use Test::More; eval "use Test::Pod::Coverage 1.04"; plan skip_all => "Test::Pod::Coverage 1.04 required for testing POD coverage" if $@; use Module::Load::Conditional qw[can_load]; my @modules = all_modules(); foreach my $mod (@modules) { if (can_load( modules => { $mod => 0 } )) { pod_coverage_ok($mod, { also_private => [ qr{^[A-Z][A-Z0-9_]*$} ] }); } else { note("Ignoring $mod for POD coverage tests (failed to load)"); } } done_testing(); RDF-Trine-1.007/xt/pod.t000644 000765 000024 00000000233 11760736733 014717 0ustar00gregstaff000000 000000 use strict; use warnings; use Test::More; eval "use Test::Pod 1.14"; plan skip_all => "Test::Pod 1.14 required for testing POD" if $@; all_pod_files_ok(); RDF-Trine-1.007/xt/store-dydra.t000644 000765 000024 00000001707 12017675455 016400 0ustar00gregstaff000000 000000 use Test::More; use FindBin '$Bin'; use lib "$Bin/lib"; use RDF::Trine::Store::Dydra; use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $user = $ENV{DYDRA_USER}; my $repo = $ENV{DYDRA_REPO}; my $token = $ENV{DYDRA_TOKEN}; if (not($ENV{RDFTRINE_NETWORK_TESTS})) { plan skip_all => "No network. Set RDFTRINE_NETWORK_TESTS to run these tests."; } elsif (defined($user) and defined($repo) and defined($token)) { plan tests => 3 + Test::RDF::Trine::Store::number_of_tests; } else { plan skip_all => 'Dydra ENV variables were not found'; } use strict; use warnings; no warnings 'redefine'; my $data = Test::RDF::Trine::Store::create_data; my $store = RDF::Trine::Store::Dydra->new($user, $repo, $token); isa_ok( $store, 'RDF::Trine::Store::Dydra' ); my %args; $args{ update_sleep } = 5; Test::RDF::Trine::Store::all_store_tests($store, $data, 0, \%args); done_testing; RDF-Trine-1.007/xt/store-redland.t000644 000765 000024 00000001454 12147055171 016674 0ustar00gregstaff000000 000000 use Test::More; use FindBin '$Bin'; use lib "$Bin/lib"; use Module::Load::Conditional qw[can_load]; BEGIN { can_load(modules => {'RDF::Redland' => 1.000701}) || plan skip_all => 'Test needs RDF::Redland'; } use RDF::Redland; use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; if ($RDF::Trine::Store::HAVE_REDLAND) { plan tests => 3 + Test::RDF::Trine::Store::number_of_tests; } else { plan skip_all => 'Redland was not found'; } use strict; use warnings; no warnings 'redefine'; my $data = Test::RDF::Trine::Store::create_data; my $store = RDF::Trine::Store::Redland->temporary_store(); isa_ok( $store, 'RDF::Trine::Store::Redland' ); Test::RDF::Trine::Store::all_store_tests($store, $data, 1); done_testing; RDF-Trine-1.007/xt/store-sparql.t000644 000765 000024 00000003676 12147055171 016575 0ustar00gregstaff000000 000000 use Test::More tests => 13; use Test::Exception; use strict; use warnings; use File::Spec; use Data::Dumper; use RDF::Trine qw(iri variable statement); use RDF::Trine::Namespace qw(rdf foaf); use RDF::Trine::Error qw(:try); use RDF::Trine::Parser; my $store = RDF::Trine::Store::SPARQL->new('http://myrdf.us/sparql11'); my $model = RDF::Trine::Model->new( $store ); throws_ok { $store->add_statement() } 'RDF::Trine::Error::MethodInvocationError', 'add_statement throws error with no statement'; throws_ok { $store->remove_statement() } 'RDF::Trine::Error::MethodInvocationError', 'remove_statement throws error with no statement'; # throws_ok { $store->remove_statements(iri('asdfkj')) } 'RDF::Trine::Error::UnimplementedError', 'remove_statements throws unimplemented error'; SKIP: { unless ($ENV{RDFTRINE_NETWORK_TESTS}) { skip( "No network. Set RDFTRINE_NETWORK_TESTS to run these tests.", 11 ); } { my $iter = $model->get_statements( undef, $rdf->type, $foaf->Person ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $st = $iter->next; isa_ok( $st, 'RDF::Trine::Statement' ); my $p = $st->subject; isa_ok( $p, 'RDF::Trine::Node' ); } { my $iter = $model->get_statements( variable('s'), $rdf->type, $foaf->Person ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $st = $iter->next; isa_ok( $st, 'RDF::Trine::Statement' ); my $p = $st->subject; isa_ok( $p, 'RDF::Trine::Node' ); } { my $count = $model->size; cmp_ok( $count, '>', 0, 'size' ); } { my $count = $model->count_statements( undef, $rdf->type, $foaf->Person ); cmp_ok( $count, '>', 0, 'count_statements' ); } { my $pattern = statement( variable('p'), $rdf->type, $foaf->Person ); my $iter = $model->get_pattern( $pattern ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $b = $iter->next; isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node' ); } if (0) { my @ctx = $model->get_contexts; is_deeply( \@ctx, [], 'empty get_contexts' ); } } RDF-Trine-1.007/xt/data/turtle/000755 000765 000024 00000000000 12171744443 016174 5ustar00gregstaff000000 000000 RDF-Trine-1.007/xt/data/turtle/test-14.out000644 000765 000024 00003376312 11552456156 020150 0ustar00gregstaff000000 000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RDF-Trine-1.007/xt/data/turtle/test-14.ttl000644 000765 000024 00000647307 11552456156 020146 0ustar00gregstaff000000 000000 # 10000 triples, more than the default Bison stack size @prefix : . :a1 :a1 :a1. :a2 :a2 :a2. :a3 :a3 :a3. :a4 :a4 :a4. :a5 :a5 :a5. :a6 :a6 :a6. :a7 :a7 :a7. :a8 :a8 :a8. :a9 :a9 :a9. :a10 :a10 :a10. :a11 :a11 :a11. :a12 :a12 :a12. :a13 :a13 :a13. :a14 :a14 :a14. :a15 :a15 :a15. :a16 :a16 :a16. :a17 :a17 :a17. :a18 :a18 :a18. :a19 :a19 :a19. :a20 :a20 :a20. :a21 :a21 :a21. :a22 :a22 :a22. :a23 :a23 :a23. :a24 :a24 :a24. :a25 :a25 :a25. :a26 :a26 :a26. :a27 :a27 :a27. :a28 :a28 :a28. :a29 :a29 :a29. :a30 :a30 :a30. :a31 :a31 :a31. :a32 :a32 :a32. :a33 :a33 :a33. :a34 :a34 :a34. :a35 :a35 :a35. :a36 :a36 :a36. :a37 :a37 :a37. :a38 :a38 :a38. :a39 :a39 :a39. :a40 :a40 :a40. :a41 :a41 :a41. :a42 :a42 :a42. :a43 :a43 :a43. :a44 :a44 :a44. :a45 :a45 :a45. :a46 :a46 :a46. :a47 :a47 :a47. :a48 :a48 :a48. :a49 :a49 :a49. :a50 :a50 :a50. :a51 :a51 :a51. :a52 :a52 :a52. :a53 :a53 :a53. :a54 :a54 :a54. :a55 :a55 :a55. :a56 :a56 :a56. :a57 :a57 :a57. :a58 :a58 :a58. :a59 :a59 :a59. :a60 :a60 :a60. :a61 :a61 :a61. :a62 :a62 :a62. :a63 :a63 :a63. :a64 :a64 :a64. :a65 :a65 :a65. :a66 :a66 :a66. :a67 :a67 :a67. :a68 :a68 :a68. :a69 :a69 :a69. :a70 :a70 :a70. :a71 :a71 :a71. :a72 :a72 :a72. :a73 :a73 :a73. :a74 :a74 :a74. :a75 :a75 :a75. :a76 :a76 :a76. :a77 :a77 :a77. :a78 :a78 :a78. :a79 :a79 :a79. :a80 :a80 :a80. :a81 :a81 :a81. :a82 :a82 :a82. :a83 :a83 :a83. :a84 :a84 :a84. :a85 :a85 :a85. :a86 :a86 :a86. :a87 :a87 :a87. :a88 :a88 :a88. :a89 :a89 :a89. :a90 :a90 :a90. :a91 :a91 :a91. :a92 :a92 :a92. :a93 :a93 :a93. :a94 :a94 :a94. :a95 :a95 :a95. :a96 :a96 :a96. :a97 :a97 :a97. :a98 :a98 :a98. :a99 :a99 :a99. :a100 :a100 :a100. :a101 :a101 :a101. :a102 :a102 :a102. :a103 :a103 :a103. :a104 :a104 :a104. :a105 :a105 :a105. :a106 :a106 :a106. :a107 :a107 :a107. :a108 :a108 :a108. :a109 :a109 :a109. :a110 :a110 :a110. :a111 :a111 :a111. :a112 :a112 :a112. :a113 :a113 :a113. :a114 :a114 :a114. :a115 :a115 :a115. :a116 :a116 :a116. :a117 :a117 :a117. :a118 :a118 :a118. :a119 :a119 :a119. :a120 :a120 :a120. :a121 :a121 :a121. :a122 :a122 :a122. :a123 :a123 :a123. :a124 :a124 :a124. :a125 :a125 :a125. :a126 :a126 :a126. :a127 :a127 :a127. :a128 :a128 :a128. :a129 :a129 :a129. :a130 :a130 :a130. :a131 :a131 :a131. :a132 :a132 :a132. :a133 :a133 :a133. :a134 :a134 :a134. :a135 :a135 :a135. :a136 :a136 :a136. :a137 :a137 :a137. :a138 :a138 :a138. :a139 :a139 :a139. :a140 :a140 :a140. :a141 :a141 :a141. :a142 :a142 :a142. :a143 :a143 :a143. :a144 :a144 :a144. :a145 :a145 :a145. :a146 :a146 :a146. :a147 :a147 :a147. :a148 :a148 :a148. :a149 :a149 :a149. :a150 :a150 :a150. :a151 :a151 :a151. :a152 :a152 :a152. :a153 :a153 :a153. :a154 :a154 :a154. :a155 :a155 :a155. :a156 :a156 :a156. :a157 :a157 :a157. :a158 :a158 :a158. :a159 :a159 :a159. :a160 :a160 :a160. :a161 :a161 :a161. :a162 :a162 :a162. :a163 :a163 :a163. :a164 :a164 :a164. :a165 :a165 :a165. :a166 :a166 :a166. :a167 :a167 :a167. :a168 :a168 :a168. :a169 :a169 :a169. :a170 :a170 :a170. :a171 :a171 :a171. :a172 :a172 :a172. :a173 :a173 :a173. :a174 :a174 :a174. :a175 :a175 :a175. :a176 :a176 :a176. :a177 :a177 :a177. :a178 :a178 :a178. :a179 :a179 :a179. :a180 :a180 :a180. :a181 :a181 :a181. :a182 :a182 :a182. :a183 :a183 :a183. :a184 :a184 :a184. :a185 :a185 :a185. :a186 :a186 :a186. :a187 :a187 :a187. :a188 :a188 :a188. :a189 :a189 :a189. :a190 :a190 :a190. :a191 :a191 :a191. :a192 :a192 :a192. :a193 :a193 :a193. :a194 :a194 :a194. :a195 :a195 :a195. :a196 :a196 :a196. :a197 :a197 :a197. :a198 :a198 :a198. :a199 :a199 :a199. :a200 :a200 :a200. :a201 :a201 :a201. :a202 :a202 :a202. :a203 :a203 :a203. :a204 :a204 :a204. :a205 :a205 :a205. :a206 :a206 :a206. :a207 :a207 :a207. :a208 :a208 :a208. :a209 :a209 :a209. :a210 :a210 :a210. :a211 :a211 :a211. :a212 :a212 :a212. :a213 :a213 :a213. :a214 :a214 :a214. :a215 :a215 :a215. :a216 :a216 :a216. :a217 :a217 :a217. :a218 :a218 :a218. :a219 :a219 :a219. :a220 :a220 :a220. :a221 :a221 :a221. :a222 :a222 :a222. :a223 :a223 :a223. :a224 :a224 :a224. :a225 :a225 :a225. :a226 :a226 :a226. :a227 :a227 :a227. :a228 :a228 :a228. :a229 :a229 :a229. :a230 :a230 :a230. :a231 :a231 :a231. :a232 :a232 :a232. :a233 :a233 :a233. :a234 :a234 :a234. :a235 :a235 :a235. :a236 :a236 :a236. :a237 :a237 :a237. :a238 :a238 :a238. :a239 :a239 :a239. :a240 :a240 :a240. :a241 :a241 :a241. :a242 :a242 :a242. :a243 :a243 :a243. :a244 :a244 :a244. :a245 :a245 :a245. :a246 :a246 :a246. :a247 :a247 :a247. :a248 :a248 :a248. :a249 :a249 :a249. :a250 :a250 :a250. :a251 :a251 :a251. :a252 :a252 :a252. :a253 :a253 :a253. :a254 :a254 :a254. :a255 :a255 :a255. :a256 :a256 :a256. :a257 :a257 :a257. :a258 :a258 :a258. :a259 :a259 :a259. :a260 :a260 :a260. :a261 :a261 :a261. :a262 :a262 :a262. :a263 :a263 :a263. :a264 :a264 :a264. :a265 :a265 :a265. :a266 :a266 :a266. :a267 :a267 :a267. :a268 :a268 :a268. :a269 :a269 :a269. :a270 :a270 :a270. :a271 :a271 :a271. :a272 :a272 :a272. :a273 :a273 :a273. :a274 :a274 :a274. :a275 :a275 :a275. :a276 :a276 :a276. :a277 :a277 :a277. :a278 :a278 :a278. :a279 :a279 :a279. :a280 :a280 :a280. :a281 :a281 :a281. :a282 :a282 :a282. :a283 :a283 :a283. :a284 :a284 :a284. :a285 :a285 :a285. :a286 :a286 :a286. :a287 :a287 :a287. :a288 :a288 :a288. :a289 :a289 :a289. :a290 :a290 :a290. :a291 :a291 :a291. :a292 :a292 :a292. :a293 :a293 :a293. :a294 :a294 :a294. :a295 :a295 :a295. :a296 :a296 :a296. :a297 :a297 :a297. :a298 :a298 :a298. :a299 :a299 :a299. :a300 :a300 :a300. :a301 :a301 :a301. :a302 :a302 :a302. :a303 :a303 :a303. :a304 :a304 :a304. :a305 :a305 :a305. :a306 :a306 :a306. :a307 :a307 :a307. :a308 :a308 :a308. :a309 :a309 :a309. :a310 :a310 :a310. :a311 :a311 :a311. :a312 :a312 :a312. :a313 :a313 :a313. :a314 :a314 :a314. :a315 :a315 :a315. :a316 :a316 :a316. :a317 :a317 :a317. :a318 :a318 :a318. :a319 :a319 :a319. :a320 :a320 :a320. :a321 :a321 :a321. :a322 :a322 :a322. :a323 :a323 :a323. :a324 :a324 :a324. :a325 :a325 :a325. :a326 :a326 :a326. :a327 :a327 :a327. :a328 :a328 :a328. :a329 :a329 :a329. :a330 :a330 :a330. :a331 :a331 :a331. :a332 :a332 :a332. :a333 :a333 :a333. :a334 :a334 :a334. :a335 :a335 :a335. :a336 :a336 :a336. :a337 :a337 :a337. :a338 :a338 :a338. :a339 :a339 :a339. :a340 :a340 :a340. :a341 :a341 :a341. :a342 :a342 :a342. :a343 :a343 :a343. :a344 :a344 :a344. :a345 :a345 :a345. :a346 :a346 :a346. :a347 :a347 :a347. :a348 :a348 :a348. :a349 :a349 :a349. :a350 :a350 :a350. :a351 :a351 :a351. :a352 :a352 :a352. :a353 :a353 :a353. :a354 :a354 :a354. :a355 :a355 :a355. :a356 :a356 :a356. :a357 :a357 :a357. :a358 :a358 :a358. :a359 :a359 :a359. :a360 :a360 :a360. :a361 :a361 :a361. :a362 :a362 :a362. :a363 :a363 :a363. :a364 :a364 :a364. :a365 :a365 :a365. :a366 :a366 :a366. :a367 :a367 :a367. :a368 :a368 :a368. :a369 :a369 :a369. :a370 :a370 :a370. :a371 :a371 :a371. :a372 :a372 :a372. :a373 :a373 :a373. :a374 :a374 :a374. :a375 :a375 :a375. :a376 :a376 :a376. :a377 :a377 :a377. :a378 :a378 :a378. :a379 :a379 :a379. :a380 :a380 :a380. :a381 :a381 :a381. :a382 :a382 :a382. :a383 :a383 :a383. :a384 :a384 :a384. :a385 :a385 :a385. :a386 :a386 :a386. :a387 :a387 :a387. :a388 :a388 :a388. :a389 :a389 :a389. :a390 :a390 :a390. :a391 :a391 :a391. :a392 :a392 :a392. :a393 :a393 :a393. :a394 :a394 :a394. :a395 :a395 :a395. :a396 :a396 :a396. :a397 :a397 :a397. :a398 :a398 :a398. :a399 :a399 :a399. :a400 :a400 :a400. :a401 :a401 :a401. :a402 :a402 :a402. :a403 :a403 :a403. :a404 :a404 :a404. :a405 :a405 :a405. :a406 :a406 :a406. :a407 :a407 :a407. :a408 :a408 :a408. :a409 :a409 :a409. :a410 :a410 :a410. :a411 :a411 :a411. :a412 :a412 :a412. :a413 :a413 :a413. :a414 :a414 :a414. :a415 :a415 :a415. :a416 :a416 :a416. :a417 :a417 :a417. :a418 :a418 :a418. :a419 :a419 :a419. :a420 :a420 :a420. :a421 :a421 :a421. :a422 :a422 :a422. :a423 :a423 :a423. :a424 :a424 :a424. :a425 :a425 :a425. :a426 :a426 :a426. :a427 :a427 :a427. :a428 :a428 :a428. :a429 :a429 :a429. :a430 :a430 :a430. :a431 :a431 :a431. :a432 :a432 :a432. :a433 :a433 :a433. :a434 :a434 :a434. :a435 :a435 :a435. :a436 :a436 :a436. :a437 :a437 :a437. :a438 :a438 :a438. :a439 :a439 :a439. :a440 :a440 :a440. :a441 :a441 :a441. :a442 :a442 :a442. :a443 :a443 :a443. :a444 :a444 :a444. :a445 :a445 :a445. :a446 :a446 :a446. :a447 :a447 :a447. :a448 :a448 :a448. :a449 :a449 :a449. :a450 :a450 :a450. :a451 :a451 :a451. :a452 :a452 :a452. :a453 :a453 :a453. :a454 :a454 :a454. :a455 :a455 :a455. :a456 :a456 :a456. :a457 :a457 :a457. :a458 :a458 :a458. :a459 :a459 :a459. :a460 :a460 :a460. :a461 :a461 :a461. :a462 :a462 :a462. :a463 :a463 :a463. :a464 :a464 :a464. :a465 :a465 :a465. :a466 :a466 :a466. :a467 :a467 :a467. :a468 :a468 :a468. :a469 :a469 :a469. :a470 :a470 :a470. :a471 :a471 :a471. :a472 :a472 :a472. :a473 :a473 :a473. :a474 :a474 :a474. :a475 :a475 :a475. :a476 :a476 :a476. :a477 :a477 :a477. :a478 :a478 :a478. :a479 :a479 :a479. :a480 :a480 :a480. :a481 :a481 :a481. :a482 :a482 :a482. :a483 :a483 :a483. :a484 :a484 :a484. :a485 :a485 :a485. :a486 :a486 :a486. :a487 :a487 :a487. :a488 :a488 :a488. :a489 :a489 :a489. :a490 :a490 :a490. :a491 :a491 :a491. :a492 :a492 :a492. :a493 :a493 :a493. :a494 :a494 :a494. :a495 :a495 :a495. :a496 :a496 :a496. :a497 :a497 :a497. :a498 :a498 :a498. :a499 :a499 :a499. :a500 :a500 :a500. :a501 :a501 :a501. :a502 :a502 :a502. :a503 :a503 :a503. :a504 :a504 :a504. :a505 :a505 :a505. :a506 :a506 :a506. :a507 :a507 :a507. :a508 :a508 :a508. :a509 :a509 :a509. :a510 :a510 :a510. :a511 :a511 :a511. :a512 :a512 :a512. :a513 :a513 :a513. :a514 :a514 :a514. :a515 :a515 :a515. :a516 :a516 :a516. :a517 :a517 :a517. :a518 :a518 :a518. :a519 :a519 :a519. :a520 :a520 :a520. :a521 :a521 :a521. :a522 :a522 :a522. :a523 :a523 :a523. :a524 :a524 :a524. :a525 :a525 :a525. :a526 :a526 :a526. :a527 :a527 :a527. :a528 :a528 :a528. :a529 :a529 :a529. :a530 :a530 :a530. :a531 :a531 :a531. :a532 :a532 :a532. :a533 :a533 :a533. :a534 :a534 :a534. :a535 :a535 :a535. :a536 :a536 :a536. :a537 :a537 :a537. :a538 :a538 :a538. :a539 :a539 :a539. :a540 :a540 :a540. :a541 :a541 :a541. :a542 :a542 :a542. :a543 :a543 :a543. :a544 :a544 :a544. :a545 :a545 :a545. :a546 :a546 :a546. :a547 :a547 :a547. :a548 :a548 :a548. :a549 :a549 :a549. :a550 :a550 :a550. :a551 :a551 :a551. :a552 :a552 :a552. :a553 :a553 :a553. :a554 :a554 :a554. :a555 :a555 :a555. :a556 :a556 :a556. :a557 :a557 :a557. :a558 :a558 :a558. :a559 :a559 :a559. :a560 :a560 :a560. :a561 :a561 :a561. :a562 :a562 :a562. :a563 :a563 :a563. :a564 :a564 :a564. :a565 :a565 :a565. :a566 :a566 :a566. :a567 :a567 :a567. :a568 :a568 :a568. :a569 :a569 :a569. :a570 :a570 :a570. :a571 :a571 :a571. :a572 :a572 :a572. :a573 :a573 :a573. :a574 :a574 :a574. :a575 :a575 :a575. :a576 :a576 :a576. :a577 :a577 :a577. :a578 :a578 :a578. :a579 :a579 :a579. :a580 :a580 :a580. :a581 :a581 :a581. :a582 :a582 :a582. :a583 :a583 :a583. :a584 :a584 :a584. :a585 :a585 :a585. :a586 :a586 :a586. :a587 :a587 :a587. :a588 :a588 :a588. :a589 :a589 :a589. :a590 :a590 :a590. :a591 :a591 :a591. :a592 :a592 :a592. :a593 :a593 :a593. :a594 :a594 :a594. :a595 :a595 :a595. :a596 :a596 :a596. :a597 :a597 :a597. :a598 :a598 :a598. :a599 :a599 :a599. :a600 :a600 :a600. :a601 :a601 :a601. :a602 :a602 :a602. :a603 :a603 :a603. :a604 :a604 :a604. :a605 :a605 :a605. :a606 :a606 :a606. :a607 :a607 :a607. :a608 :a608 :a608. :a609 :a609 :a609. :a610 :a610 :a610. :a611 :a611 :a611. :a612 :a612 :a612. :a613 :a613 :a613. :a614 :a614 :a614. :a615 :a615 :a615. :a616 :a616 :a616. :a617 :a617 :a617. :a618 :a618 :a618. :a619 :a619 :a619. :a620 :a620 :a620. :a621 :a621 :a621. :a622 :a622 :a622. :a623 :a623 :a623. :a624 :a624 :a624. :a625 :a625 :a625. :a626 :a626 :a626. :a627 :a627 :a627. :a628 :a628 :a628. :a629 :a629 :a629. :a630 :a630 :a630. :a631 :a631 :a631. :a632 :a632 :a632. :a633 :a633 :a633. :a634 :a634 :a634. :a635 :a635 :a635. :a636 :a636 :a636. :a637 :a637 :a637. :a638 :a638 :a638. :a639 :a639 :a639. :a640 :a640 :a640. :a641 :a641 :a641. :a642 :a642 :a642. :a643 :a643 :a643. :a644 :a644 :a644. :a645 :a645 :a645. :a646 :a646 :a646. :a647 :a647 :a647. :a648 :a648 :a648. :a649 :a649 :a649. :a650 :a650 :a650. :a651 :a651 :a651. :a652 :a652 :a652. :a653 :a653 :a653. :a654 :a654 :a654. :a655 :a655 :a655. :a656 :a656 :a656. :a657 :a657 :a657. :a658 :a658 :a658. :a659 :a659 :a659. :a660 :a660 :a660. :a661 :a661 :a661. :a662 :a662 :a662. :a663 :a663 :a663. :a664 :a664 :a664. :a665 :a665 :a665. :a666 :a666 :a666. :a667 :a667 :a667. :a668 :a668 :a668. :a669 :a669 :a669. :a670 :a670 :a670. :a671 :a671 :a671. :a672 :a672 :a672. :a673 :a673 :a673. :a674 :a674 :a674. :a675 :a675 :a675. :a676 :a676 :a676. :a677 :a677 :a677. :a678 :a678 :a678. :a679 :a679 :a679. :a680 :a680 :a680. :a681 :a681 :a681. :a682 :a682 :a682. :a683 :a683 :a683. :a684 :a684 :a684. :a685 :a685 :a685. :a686 :a686 :a686. :a687 :a687 :a687. :a688 :a688 :a688. :a689 :a689 :a689. :a690 :a690 :a690. :a691 :a691 :a691. :a692 :a692 :a692. :a693 :a693 :a693. :a694 :a694 :a694. :a695 :a695 :a695. :a696 :a696 :a696. :a697 :a697 :a697. :a698 :a698 :a698. :a699 :a699 :a699. :a700 :a700 :a700. :a701 :a701 :a701. :a702 :a702 :a702. :a703 :a703 :a703. :a704 :a704 :a704. :a705 :a705 :a705. :a706 :a706 :a706. :a707 :a707 :a707. :a708 :a708 :a708. :a709 :a709 :a709. :a710 :a710 :a710. :a711 :a711 :a711. :a712 :a712 :a712. :a713 :a713 :a713. :a714 :a714 :a714. :a715 :a715 :a715. :a716 :a716 :a716. :a717 :a717 :a717. :a718 :a718 :a718. :a719 :a719 :a719. :a720 :a720 :a720. :a721 :a721 :a721. :a722 :a722 :a722. :a723 :a723 :a723. :a724 :a724 :a724. :a725 :a725 :a725. :a726 :a726 :a726. :a727 :a727 :a727. :a728 :a728 :a728. :a729 :a729 :a729. :a730 :a730 :a730. :a731 :a731 :a731. :a732 :a732 :a732. :a733 :a733 :a733. :a734 :a734 :a734. :a735 :a735 :a735. :a736 :a736 :a736. :a737 :a737 :a737. :a738 :a738 :a738. :a739 :a739 :a739. :a740 :a740 :a740. :a741 :a741 :a741. :a742 :a742 :a742. :a743 :a743 :a743. :a744 :a744 :a744. :a745 :a745 :a745. :a746 :a746 :a746. :a747 :a747 :a747. :a748 :a748 :a748. :a749 :a749 :a749. :a750 :a750 :a750. :a751 :a751 :a751. :a752 :a752 :a752. :a753 :a753 :a753. :a754 :a754 :a754. :a755 :a755 :a755. :a756 :a756 :a756. :a757 :a757 :a757. :a758 :a758 :a758. :a759 :a759 :a759. :a760 :a760 :a760. :a761 :a761 :a761. :a762 :a762 :a762. :a763 :a763 :a763. :a764 :a764 :a764. :a765 :a765 :a765. :a766 :a766 :a766. :a767 :a767 :a767. :a768 :a768 :a768. :a769 :a769 :a769. :a770 :a770 :a770. :a771 :a771 :a771. :a772 :a772 :a772. :a773 :a773 :a773. :a774 :a774 :a774. :a775 :a775 :a775. :a776 :a776 :a776. :a777 :a777 :a777. :a778 :a778 :a778. :a779 :a779 :a779. :a780 :a780 :a780. :a781 :a781 :a781. :a782 :a782 :a782. :a783 :a783 :a783. :a784 :a784 :a784. :a785 :a785 :a785. :a786 :a786 :a786. :a787 :a787 :a787. :a788 :a788 :a788. :a789 :a789 :a789. :a790 :a790 :a790. :a791 :a791 :a791. :a792 :a792 :a792. :a793 :a793 :a793. :a794 :a794 :a794. :a795 :a795 :a795. :a796 :a796 :a796. :a797 :a797 :a797. :a798 :a798 :a798. :a799 :a799 :a799. :a800 :a800 :a800. :a801 :a801 :a801. :a802 :a802 :a802. :a803 :a803 :a803. :a804 :a804 :a804. :a805 :a805 :a805. :a806 :a806 :a806. :a807 :a807 :a807. :a808 :a808 :a808. :a809 :a809 :a809. :a810 :a810 :a810. :a811 :a811 :a811. :a812 :a812 :a812. :a813 :a813 :a813. :a814 :a814 :a814. :a815 :a815 :a815. :a816 :a816 :a816. :a817 :a817 :a817. :a818 :a818 :a818. :a819 :a819 :a819. :a820 :a820 :a820. :a821 :a821 :a821. :a822 :a822 :a822. :a823 :a823 :a823. :a824 :a824 :a824. :a825 :a825 :a825. :a826 :a826 :a826. :a827 :a827 :a827. :a828 :a828 :a828. :a829 :a829 :a829. :a830 :a830 :a830. :a831 :a831 :a831. :a832 :a832 :a832. :a833 :a833 :a833. :a834 :a834 :a834. :a835 :a835 :a835. :a836 :a836 :a836. :a837 :a837 :a837. :a838 :a838 :a838. :a839 :a839 :a839. :a840 :a840 :a840. :a841 :a841 :a841. :a842 :a842 :a842. :a843 :a843 :a843. :a844 :a844 :a844. :a845 :a845 :a845. :a846 :a846 :a846. :a847 :a847 :a847. :a848 :a848 :a848. :a849 :a849 :a849. :a850 :a850 :a850. :a851 :a851 :a851. :a852 :a852 :a852. :a853 :a853 :a853. :a854 :a854 :a854. :a855 :a855 :a855. :a856 :a856 :a856. :a857 :a857 :a857. :a858 :a858 :a858. :a859 :a859 :a859. :a860 :a860 :a860. :a861 :a861 :a861. :a862 :a862 :a862. :a863 :a863 :a863. :a864 :a864 :a864. :a865 :a865 :a865. :a866 :a866 :a866. :a867 :a867 :a867. :a868 :a868 :a868. :a869 :a869 :a869. :a870 :a870 :a870. :a871 :a871 :a871. :a872 :a872 :a872. :a873 :a873 :a873. :a874 :a874 :a874. :a875 :a875 :a875. :a876 :a876 :a876. :a877 :a877 :a877. :a878 :a878 :a878. :a879 :a879 :a879. :a880 :a880 :a880. :a881 :a881 :a881. :a882 :a882 :a882. :a883 :a883 :a883. :a884 :a884 :a884. :a885 :a885 :a885. :a886 :a886 :a886. :a887 :a887 :a887. :a888 :a888 :a888. :a889 :a889 :a889. :a890 :a890 :a890. :a891 :a891 :a891. :a892 :a892 :a892. :a893 :a893 :a893. :a894 :a894 :a894. :a895 :a895 :a895. :a896 :a896 :a896. :a897 :a897 :a897. :a898 :a898 :a898. :a899 :a899 :a899. :a900 :a900 :a900. :a901 :a901 :a901. :a902 :a902 :a902. :a903 :a903 :a903. :a904 :a904 :a904. :a905 :a905 :a905. :a906 :a906 :a906. :a907 :a907 :a907. :a908 :a908 :a908. :a909 :a909 :a909. :a910 :a910 :a910. :a911 :a911 :a911. :a912 :a912 :a912. :a913 :a913 :a913. :a914 :a914 :a914. :a915 :a915 :a915. :a916 :a916 :a916. :a917 :a917 :a917. :a918 :a918 :a918. :a919 :a919 :a919. :a920 :a920 :a920. :a921 :a921 :a921. :a922 :a922 :a922. :a923 :a923 :a923. :a924 :a924 :a924. :a925 :a925 :a925. :a926 :a926 :a926. :a927 :a927 :a927. :a928 :a928 :a928. :a929 :a929 :a929. :a930 :a930 :a930. :a931 :a931 :a931. :a932 :a932 :a932. :a933 :a933 :a933. :a934 :a934 :a934. :a935 :a935 :a935. :a936 :a936 :a936. :a937 :a937 :a937. :a938 :a938 :a938. :a939 :a939 :a939. :a940 :a940 :a940. :a941 :a941 :a941. :a942 :a942 :a942. :a943 :a943 :a943. :a944 :a944 :a944. :a945 :a945 :a945. :a946 :a946 :a946. :a947 :a947 :a947. :a948 :a948 :a948. :a949 :a949 :a949. :a950 :a950 :a950. :a951 :a951 :a951. :a952 :a952 :a952. :a953 :a953 :a953. :a954 :a954 :a954. :a955 :a955 :a955. :a956 :a956 :a956. :a957 :a957 :a957. :a958 :a958 :a958. :a959 :a959 :a959. :a960 :a960 :a960. :a961 :a961 :a961. :a962 :a962 :a962. :a963 :a963 :a963. :a964 :a964 :a964. :a965 :a965 :a965. :a966 :a966 :a966. :a967 :a967 :a967. :a968 :a968 :a968. :a969 :a969 :a969. :a970 :a970 :a970. :a971 :a971 :a971. :a972 :a972 :a972. :a973 :a973 :a973. :a974 :a974 :a974. :a975 :a975 :a975. :a976 :a976 :a976. :a977 :a977 :a977. :a978 :a978 :a978. :a979 :a979 :a979. :a980 :a980 :a980. :a981 :a981 :a981. :a982 :a982 :a982. :a983 :a983 :a983. :a984 :a984 :a984. :a985 :a985 :a985. :a986 :a986 :a986. :a987 :a987 :a987. :a988 :a988 :a988. :a989 :a989 :a989. :a990 :a990 :a990. :a991 :a991 :a991. :a992 :a992 :a992. :a993 :a993 :a993. :a994 :a994 :a994. :a995 :a995 :a995. :a996 :a996 :a996. :a997 :a997 :a997. :a998 :a998 :a998. :a999 :a999 :a999. :a1000 :a1000 :a1000. :a1001 :a1001 :a1001. :a1002 :a1002 :a1002. :a1003 :a1003 :a1003. :a1004 :a1004 :a1004. :a1005 :a1005 :a1005. :a1006 :a1006 :a1006. :a1007 :a1007 :a1007. :a1008 :a1008 :a1008. :a1009 :a1009 :a1009. :a1010 :a1010 :a1010. :a1011 :a1011 :a1011. :a1012 :a1012 :a1012. :a1013 :a1013 :a1013. :a1014 :a1014 :a1014. :a1015 :a1015 :a1015. :a1016 :a1016 :a1016. :a1017 :a1017 :a1017. :a1018 :a1018 :a1018. :a1019 :a1019 :a1019. :a1020 :a1020 :a1020. :a1021 :a1021 :a1021. :a1022 :a1022 :a1022. :a1023 :a1023 :a1023. :a1024 :a1024 :a1024. :a1025 :a1025 :a1025. :a1026 :a1026 :a1026. :a1027 :a1027 :a1027. :a1028 :a1028 :a1028. :a1029 :a1029 :a1029. :a1030 :a1030 :a1030. :a1031 :a1031 :a1031. :a1032 :a1032 :a1032. :a1033 :a1033 :a1033. :a1034 :a1034 :a1034. :a1035 :a1035 :a1035. :a1036 :a1036 :a1036. :a1037 :a1037 :a1037. :a1038 :a1038 :a1038. :a1039 :a1039 :a1039. :a1040 :a1040 :a1040. :a1041 :a1041 :a1041. :a1042 :a1042 :a1042. :a1043 :a1043 :a1043. :a1044 :a1044 :a1044. :a1045 :a1045 :a1045. :a1046 :a1046 :a1046. :a1047 :a1047 :a1047. :a1048 :a1048 :a1048. :a1049 :a1049 :a1049. :a1050 :a1050 :a1050. :a1051 :a1051 :a1051. :a1052 :a1052 :a1052. :a1053 :a1053 :a1053. :a1054 :a1054 :a1054. :a1055 :a1055 :a1055. :a1056 :a1056 :a1056. :a1057 :a1057 :a1057. :a1058 :a1058 :a1058. :a1059 :a1059 :a1059. :a1060 :a1060 :a1060. :a1061 :a1061 :a1061. :a1062 :a1062 :a1062. :a1063 :a1063 :a1063. :a1064 :a1064 :a1064. :a1065 :a1065 :a1065. :a1066 :a1066 :a1066. :a1067 :a1067 :a1067. :a1068 :a1068 :a1068. :a1069 :a1069 :a1069. :a1070 :a1070 :a1070. :a1071 :a1071 :a1071. :a1072 :a1072 :a1072. :a1073 :a1073 :a1073. :a1074 :a1074 :a1074. :a1075 :a1075 :a1075. :a1076 :a1076 :a1076. :a1077 :a1077 :a1077. :a1078 :a1078 :a1078. :a1079 :a1079 :a1079. :a1080 :a1080 :a1080. :a1081 :a1081 :a1081. :a1082 :a1082 :a1082. :a1083 :a1083 :a1083. :a1084 :a1084 :a1084. :a1085 :a1085 :a1085. :a1086 :a1086 :a1086. :a1087 :a1087 :a1087. :a1088 :a1088 :a1088. :a1089 :a1089 :a1089. :a1090 :a1090 :a1090. :a1091 :a1091 :a1091. :a1092 :a1092 :a1092. :a1093 :a1093 :a1093. :a1094 :a1094 :a1094. :a1095 :a1095 :a1095. :a1096 :a1096 :a1096. :a1097 :a1097 :a1097. :a1098 :a1098 :a1098. :a1099 :a1099 :a1099. :a1100 :a1100 :a1100. :a1101 :a1101 :a1101. :a1102 :a1102 :a1102. :a1103 :a1103 :a1103. :a1104 :a1104 :a1104. :a1105 :a1105 :a1105. :a1106 :a1106 :a1106. :a1107 :a1107 :a1107. :a1108 :a1108 :a1108. :a1109 :a1109 :a1109. :a1110 :a1110 :a1110. :a1111 :a1111 :a1111. :a1112 :a1112 :a1112. :a1113 :a1113 :a1113. :a1114 :a1114 :a1114. :a1115 :a1115 :a1115. :a1116 :a1116 :a1116. :a1117 :a1117 :a1117. :a1118 :a1118 :a1118. :a1119 :a1119 :a1119. :a1120 :a1120 :a1120. :a1121 :a1121 :a1121. :a1122 :a1122 :a1122. :a1123 :a1123 :a1123. :a1124 :a1124 :a1124. :a1125 :a1125 :a1125. :a1126 :a1126 :a1126. :a1127 :a1127 :a1127. :a1128 :a1128 :a1128. :a1129 :a1129 :a1129. :a1130 :a1130 :a1130. :a1131 :a1131 :a1131. :a1132 :a1132 :a1132. :a1133 :a1133 :a1133. :a1134 :a1134 :a1134. :a1135 :a1135 :a1135. :a1136 :a1136 :a1136. :a1137 :a1137 :a1137. :a1138 :a1138 :a1138. :a1139 :a1139 :a1139. :a1140 :a1140 :a1140. :a1141 :a1141 :a1141. :a1142 :a1142 :a1142. :a1143 :a1143 :a1143. :a1144 :a1144 :a1144. :a1145 :a1145 :a1145. :a1146 :a1146 :a1146. :a1147 :a1147 :a1147. :a1148 :a1148 :a1148. :a1149 :a1149 :a1149. :a1150 :a1150 :a1150. :a1151 :a1151 :a1151. :a1152 :a1152 :a1152. :a1153 :a1153 :a1153. :a1154 :a1154 :a1154. :a1155 :a1155 :a1155. :a1156 :a1156 :a1156. :a1157 :a1157 :a1157. :a1158 :a1158 :a1158. :a1159 :a1159 :a1159. :a1160 :a1160 :a1160. :a1161 :a1161 :a1161. :a1162 :a1162 :a1162. :a1163 :a1163 :a1163. :a1164 :a1164 :a1164. :a1165 :a1165 :a1165. :a1166 :a1166 :a1166. :a1167 :a1167 :a1167. :a1168 :a1168 :a1168. :a1169 :a1169 :a1169. :a1170 :a1170 :a1170. :a1171 :a1171 :a1171. :a1172 :a1172 :a1172. :a1173 :a1173 :a1173. :a1174 :a1174 :a1174. :a1175 :a1175 :a1175. :a1176 :a1176 :a1176. :a1177 :a1177 :a1177. :a1178 :a1178 :a1178. :a1179 :a1179 :a1179. :a1180 :a1180 :a1180. :a1181 :a1181 :a1181. :a1182 :a1182 :a1182. :a1183 :a1183 :a1183. :a1184 :a1184 :a1184. :a1185 :a1185 :a1185. :a1186 :a1186 :a1186. :a1187 :a1187 :a1187. :a1188 :a1188 :a1188. :a1189 :a1189 :a1189. :a1190 :a1190 :a1190. :a1191 :a1191 :a1191. :a1192 :a1192 :a1192. :a1193 :a1193 :a1193. :a1194 :a1194 :a1194. :a1195 :a1195 :a1195. :a1196 :a1196 :a1196. :a1197 :a1197 :a1197. :a1198 :a1198 :a1198. :a1199 :a1199 :a1199. :a1200 :a1200 :a1200. :a1201 :a1201 :a1201. :a1202 :a1202 :a1202. :a1203 :a1203 :a1203. :a1204 :a1204 :a1204. :a1205 :a1205 :a1205. :a1206 :a1206 :a1206. :a1207 :a1207 :a1207. :a1208 :a1208 :a1208. :a1209 :a1209 :a1209. :a1210 :a1210 :a1210. :a1211 :a1211 :a1211. :a1212 :a1212 :a1212. :a1213 :a1213 :a1213. :a1214 :a1214 :a1214. :a1215 :a1215 :a1215. :a1216 :a1216 :a1216. :a1217 :a1217 :a1217. :a1218 :a1218 :a1218. :a1219 :a1219 :a1219. :a1220 :a1220 :a1220. :a1221 :a1221 :a1221. :a1222 :a1222 :a1222. :a1223 :a1223 :a1223. :a1224 :a1224 :a1224. :a1225 :a1225 :a1225. :a1226 :a1226 :a1226. :a1227 :a1227 :a1227. :a1228 :a1228 :a1228. :a1229 :a1229 :a1229. :a1230 :a1230 :a1230. :a1231 :a1231 :a1231. :a1232 :a1232 :a1232. :a1233 :a1233 :a1233. :a1234 :a1234 :a1234. :a1235 :a1235 :a1235. :a1236 :a1236 :a1236. :a1237 :a1237 :a1237. :a1238 :a1238 :a1238. :a1239 :a1239 :a1239. :a1240 :a1240 :a1240. :a1241 :a1241 :a1241. :a1242 :a1242 :a1242. :a1243 :a1243 :a1243. :a1244 :a1244 :a1244. :a1245 :a1245 :a1245. :a1246 :a1246 :a1246. :a1247 :a1247 :a1247. :a1248 :a1248 :a1248. :a1249 :a1249 :a1249. :a1250 :a1250 :a1250. :a1251 :a1251 :a1251. :a1252 :a1252 :a1252. :a1253 :a1253 :a1253. :a1254 :a1254 :a1254. :a1255 :a1255 :a1255. :a1256 :a1256 :a1256. :a1257 :a1257 :a1257. :a1258 :a1258 :a1258. :a1259 :a1259 :a1259. :a1260 :a1260 :a1260. :a1261 :a1261 :a1261. :a1262 :a1262 :a1262. :a1263 :a1263 :a1263. :a1264 :a1264 :a1264. :a1265 :a1265 :a1265. :a1266 :a1266 :a1266. :a1267 :a1267 :a1267. :a1268 :a1268 :a1268. :a1269 :a1269 :a1269. :a1270 :a1270 :a1270. :a1271 :a1271 :a1271. :a1272 :a1272 :a1272. :a1273 :a1273 :a1273. :a1274 :a1274 :a1274. :a1275 :a1275 :a1275. :a1276 :a1276 :a1276. :a1277 :a1277 :a1277. :a1278 :a1278 :a1278. :a1279 :a1279 :a1279. :a1280 :a1280 :a1280. :a1281 :a1281 :a1281. :a1282 :a1282 :a1282. :a1283 :a1283 :a1283. :a1284 :a1284 :a1284. :a1285 :a1285 :a1285. :a1286 :a1286 :a1286. :a1287 :a1287 :a1287. :a1288 :a1288 :a1288. :a1289 :a1289 :a1289. :a1290 :a1290 :a1290. :a1291 :a1291 :a1291. :a1292 :a1292 :a1292. :a1293 :a1293 :a1293. :a1294 :a1294 :a1294. :a1295 :a1295 :a1295. :a1296 :a1296 :a1296. :a1297 :a1297 :a1297. :a1298 :a1298 :a1298. :a1299 :a1299 :a1299. :a1300 :a1300 :a1300. :a1301 :a1301 :a1301. :a1302 :a1302 :a1302. :a1303 :a1303 :a1303. :a1304 :a1304 :a1304. :a1305 :a1305 :a1305. :a1306 :a1306 :a1306. :a1307 :a1307 :a1307. :a1308 :a1308 :a1308. :a1309 :a1309 :a1309. :a1310 :a1310 :a1310. :a1311 :a1311 :a1311. :a1312 :a1312 :a1312. :a1313 :a1313 :a1313. :a1314 :a1314 :a1314. :a1315 :a1315 :a1315. :a1316 :a1316 :a1316. :a1317 :a1317 :a1317. :a1318 :a1318 :a1318. :a1319 :a1319 :a1319. :a1320 :a1320 :a1320. :a1321 :a1321 :a1321. :a1322 :a1322 :a1322. :a1323 :a1323 :a1323. :a1324 :a1324 :a1324. :a1325 :a1325 :a1325. :a1326 :a1326 :a1326. :a1327 :a1327 :a1327. :a1328 :a1328 :a1328. :a1329 :a1329 :a1329. :a1330 :a1330 :a1330. :a1331 :a1331 :a1331. :a1332 :a1332 :a1332. :a1333 :a1333 :a1333. :a1334 :a1334 :a1334. :a1335 :a1335 :a1335. :a1336 :a1336 :a1336. :a1337 :a1337 :a1337. :a1338 :a1338 :a1338. :a1339 :a1339 :a1339. :a1340 :a1340 :a1340. :a1341 :a1341 :a1341. :a1342 :a1342 :a1342. :a1343 :a1343 :a1343. :a1344 :a1344 :a1344. :a1345 :a1345 :a1345. :a1346 :a1346 :a1346. :a1347 :a1347 :a1347. :a1348 :a1348 :a1348. :a1349 :a1349 :a1349. :a1350 :a1350 :a1350. :a1351 :a1351 :a1351. :a1352 :a1352 :a1352. :a1353 :a1353 :a1353. :a1354 :a1354 :a1354. :a1355 :a1355 :a1355. :a1356 :a1356 :a1356. :a1357 :a1357 :a1357. :a1358 :a1358 :a1358. :a1359 :a1359 :a1359. :a1360 :a1360 :a1360. :a1361 :a1361 :a1361. :a1362 :a1362 :a1362. :a1363 :a1363 :a1363. :a1364 :a1364 :a1364. :a1365 :a1365 :a1365. :a1366 :a1366 :a1366. :a1367 :a1367 :a1367. :a1368 :a1368 :a1368. :a1369 :a1369 :a1369. :a1370 :a1370 :a1370. :a1371 :a1371 :a1371. :a1372 :a1372 :a1372. :a1373 :a1373 :a1373. :a1374 :a1374 :a1374. :a1375 :a1375 :a1375. :a1376 :a1376 :a1376. :a1377 :a1377 :a1377. :a1378 :a1378 :a1378. :a1379 :a1379 :a1379. :a1380 :a1380 :a1380. :a1381 :a1381 :a1381. :a1382 :a1382 :a1382. :a1383 :a1383 :a1383. :a1384 :a1384 :a1384. :a1385 :a1385 :a1385. :a1386 :a1386 :a1386. :a1387 :a1387 :a1387. :a1388 :a1388 :a1388. :a1389 :a1389 :a1389. :a1390 :a1390 :a1390. :a1391 :a1391 :a1391. :a1392 :a1392 :a1392. :a1393 :a1393 :a1393. :a1394 :a1394 :a1394. :a1395 :a1395 :a1395. :a1396 :a1396 :a1396. :a1397 :a1397 :a1397. :a1398 :a1398 :a1398. :a1399 :a1399 :a1399. :a1400 :a1400 :a1400. :a1401 :a1401 :a1401. :a1402 :a1402 :a1402. :a1403 :a1403 :a1403. :a1404 :a1404 :a1404. :a1405 :a1405 :a1405. :a1406 :a1406 :a1406. :a1407 :a1407 :a1407. :a1408 :a1408 :a1408. :a1409 :a1409 :a1409. :a1410 :a1410 :a1410. :a1411 :a1411 :a1411. :a1412 :a1412 :a1412. :a1413 :a1413 :a1413. :a1414 :a1414 :a1414. :a1415 :a1415 :a1415. :a1416 :a1416 :a1416. :a1417 :a1417 :a1417. :a1418 :a1418 :a1418. :a1419 :a1419 :a1419. :a1420 :a1420 :a1420. :a1421 :a1421 :a1421. :a1422 :a1422 :a1422. :a1423 :a1423 :a1423. :a1424 :a1424 :a1424. :a1425 :a1425 :a1425. :a1426 :a1426 :a1426. :a1427 :a1427 :a1427. :a1428 :a1428 :a1428. :a1429 :a1429 :a1429. :a1430 :a1430 :a1430. :a1431 :a1431 :a1431. :a1432 :a1432 :a1432. :a1433 :a1433 :a1433. :a1434 :a1434 :a1434. :a1435 :a1435 :a1435. :a1436 :a1436 :a1436. :a1437 :a1437 :a1437. :a1438 :a1438 :a1438. :a1439 :a1439 :a1439. :a1440 :a1440 :a1440. :a1441 :a1441 :a1441. :a1442 :a1442 :a1442. :a1443 :a1443 :a1443. :a1444 :a1444 :a1444. :a1445 :a1445 :a1445. :a1446 :a1446 :a1446. :a1447 :a1447 :a1447. :a1448 :a1448 :a1448. :a1449 :a1449 :a1449. :a1450 :a1450 :a1450. :a1451 :a1451 :a1451. :a1452 :a1452 :a1452. :a1453 :a1453 :a1453. :a1454 :a1454 :a1454. :a1455 :a1455 :a1455. :a1456 :a1456 :a1456. :a1457 :a1457 :a1457. :a1458 :a1458 :a1458. :a1459 :a1459 :a1459. :a1460 :a1460 :a1460. :a1461 :a1461 :a1461. :a1462 :a1462 :a1462. :a1463 :a1463 :a1463. :a1464 :a1464 :a1464. :a1465 :a1465 :a1465. :a1466 :a1466 :a1466. :a1467 :a1467 :a1467. :a1468 :a1468 :a1468. :a1469 :a1469 :a1469. :a1470 :a1470 :a1470. :a1471 :a1471 :a1471. :a1472 :a1472 :a1472. :a1473 :a1473 :a1473. :a1474 :a1474 :a1474. :a1475 :a1475 :a1475. :a1476 :a1476 :a1476. :a1477 :a1477 :a1477. :a1478 :a1478 :a1478. :a1479 :a1479 :a1479. :a1480 :a1480 :a1480. :a1481 :a1481 :a1481. :a1482 :a1482 :a1482. :a1483 :a1483 :a1483. :a1484 :a1484 :a1484. :a1485 :a1485 :a1485. :a1486 :a1486 :a1486. :a1487 :a1487 :a1487. :a1488 :a1488 :a1488. :a1489 :a1489 :a1489. :a1490 :a1490 :a1490. :a1491 :a1491 :a1491. :a1492 :a1492 :a1492. :a1493 :a1493 :a1493. :a1494 :a1494 :a1494. :a1495 :a1495 :a1495. :a1496 :a1496 :a1496. :a1497 :a1497 :a1497. :a1498 :a1498 :a1498. :a1499 :a1499 :a1499. :a1500 :a1500 :a1500. :a1501 :a1501 :a1501. :a1502 :a1502 :a1502. :a1503 :a1503 :a1503. :a1504 :a1504 :a1504. :a1505 :a1505 :a1505. :a1506 :a1506 :a1506. :a1507 :a1507 :a1507. :a1508 :a1508 :a1508. :a1509 :a1509 :a1509. :a1510 :a1510 :a1510. :a1511 :a1511 :a1511. :a1512 :a1512 :a1512. :a1513 :a1513 :a1513. :a1514 :a1514 :a1514. :a1515 :a1515 :a1515. :a1516 :a1516 :a1516. :a1517 :a1517 :a1517. :a1518 :a1518 :a1518. :a1519 :a1519 :a1519. :a1520 :a1520 :a1520. :a1521 :a1521 :a1521. :a1522 :a1522 :a1522. :a1523 :a1523 :a1523. :a1524 :a1524 :a1524. :a1525 :a1525 :a1525. :a1526 :a1526 :a1526. :a1527 :a1527 :a1527. :a1528 :a1528 :a1528. :a1529 :a1529 :a1529. :a1530 :a1530 :a1530. :a1531 :a1531 :a1531. :a1532 :a1532 :a1532. :a1533 :a1533 :a1533. :a1534 :a1534 :a1534. :a1535 :a1535 :a1535. :a1536 :a1536 :a1536. :a1537 :a1537 :a1537. :a1538 :a1538 :a1538. :a1539 :a1539 :a1539. :a1540 :a1540 :a1540. :a1541 :a1541 :a1541. :a1542 :a1542 :a1542. :a1543 :a1543 :a1543. :a1544 :a1544 :a1544. :a1545 :a1545 :a1545. :a1546 :a1546 :a1546. :a1547 :a1547 :a1547. :a1548 :a1548 :a1548. :a1549 :a1549 :a1549. :a1550 :a1550 :a1550. :a1551 :a1551 :a1551. :a1552 :a1552 :a1552. :a1553 :a1553 :a1553. :a1554 :a1554 :a1554. :a1555 :a1555 :a1555. :a1556 :a1556 :a1556. :a1557 :a1557 :a1557. :a1558 :a1558 :a1558. :a1559 :a1559 :a1559. :a1560 :a1560 :a1560. :a1561 :a1561 :a1561. :a1562 :a1562 :a1562. :a1563 :a1563 :a1563. :a1564 :a1564 :a1564. :a1565 :a1565 :a1565. :a1566 :a1566 :a1566. :a1567 :a1567 :a1567. :a1568 :a1568 :a1568. :a1569 :a1569 :a1569. :a1570 :a1570 :a1570. :a1571 :a1571 :a1571. :a1572 :a1572 :a1572. :a1573 :a1573 :a1573. :a1574 :a1574 :a1574. :a1575 :a1575 :a1575. :a1576 :a1576 :a1576. :a1577 :a1577 :a1577. :a1578 :a1578 :a1578. :a1579 :a1579 :a1579. :a1580 :a1580 :a1580. :a1581 :a1581 :a1581. :a1582 :a1582 :a1582. :a1583 :a1583 :a1583. :a1584 :a1584 :a1584. :a1585 :a1585 :a1585. :a1586 :a1586 :a1586. :a1587 :a1587 :a1587. :a1588 :a1588 :a1588. :a1589 :a1589 :a1589. :a1590 :a1590 :a1590. :a1591 :a1591 :a1591. :a1592 :a1592 :a1592. :a1593 :a1593 :a1593. :a1594 :a1594 :a1594. :a1595 :a1595 :a1595. :a1596 :a1596 :a1596. :a1597 :a1597 :a1597. :a1598 :a1598 :a1598. :a1599 :a1599 :a1599. :a1600 :a1600 :a1600. :a1601 :a1601 :a1601. :a1602 :a1602 :a1602. :a1603 :a1603 :a1603. :a1604 :a1604 :a1604. :a1605 :a1605 :a1605. :a1606 :a1606 :a1606. :a1607 :a1607 :a1607. :a1608 :a1608 :a1608. :a1609 :a1609 :a1609. :a1610 :a1610 :a1610. :a1611 :a1611 :a1611. :a1612 :a1612 :a1612. :a1613 :a1613 :a1613. :a1614 :a1614 :a1614. :a1615 :a1615 :a1615. :a1616 :a1616 :a1616. :a1617 :a1617 :a1617. :a1618 :a1618 :a1618. :a1619 :a1619 :a1619. :a1620 :a1620 :a1620. :a1621 :a1621 :a1621. :a1622 :a1622 :a1622. :a1623 :a1623 :a1623. :a1624 :a1624 :a1624. :a1625 :a1625 :a1625. :a1626 :a1626 :a1626. :a1627 :a1627 :a1627. :a1628 :a1628 :a1628. :a1629 :a1629 :a1629. :a1630 :a1630 :a1630. :a1631 :a1631 :a1631. :a1632 :a1632 :a1632. :a1633 :a1633 :a1633. :a1634 :a1634 :a1634. :a1635 :a1635 :a1635. :a1636 :a1636 :a1636. :a1637 :a1637 :a1637. :a1638 :a1638 :a1638. :a1639 :a1639 :a1639. :a1640 :a1640 :a1640. :a1641 :a1641 :a1641. :a1642 :a1642 :a1642. :a1643 :a1643 :a1643. :a1644 :a1644 :a1644. :a1645 :a1645 :a1645. :a1646 :a1646 :a1646. :a1647 :a1647 :a1647. :a1648 :a1648 :a1648. :a1649 :a1649 :a1649. :a1650 :a1650 :a1650. :a1651 :a1651 :a1651. :a1652 :a1652 :a1652. :a1653 :a1653 :a1653. :a1654 :a1654 :a1654. :a1655 :a1655 :a1655. :a1656 :a1656 :a1656. :a1657 :a1657 :a1657. :a1658 :a1658 :a1658. :a1659 :a1659 :a1659. :a1660 :a1660 :a1660. :a1661 :a1661 :a1661. :a1662 :a1662 :a1662. :a1663 :a1663 :a1663. :a1664 :a1664 :a1664. :a1665 :a1665 :a1665. :a1666 :a1666 :a1666. :a1667 :a1667 :a1667. :a1668 :a1668 :a1668. :a1669 :a1669 :a1669. :a1670 :a1670 :a1670. :a1671 :a1671 :a1671. :a1672 :a1672 :a1672. :a1673 :a1673 :a1673. :a1674 :a1674 :a1674. :a1675 :a1675 :a1675. :a1676 :a1676 :a1676. :a1677 :a1677 :a1677. :a1678 :a1678 :a1678. :a1679 :a1679 :a1679. :a1680 :a1680 :a1680. :a1681 :a1681 :a1681. :a1682 :a1682 :a1682. :a1683 :a1683 :a1683. :a1684 :a1684 :a1684. :a1685 :a1685 :a1685. :a1686 :a1686 :a1686. :a1687 :a1687 :a1687. :a1688 :a1688 :a1688. :a1689 :a1689 :a1689. :a1690 :a1690 :a1690. :a1691 :a1691 :a1691. :a1692 :a1692 :a1692. :a1693 :a1693 :a1693. :a1694 :a1694 :a1694. :a1695 :a1695 :a1695. :a1696 :a1696 :a1696. :a1697 :a1697 :a1697. :a1698 :a1698 :a1698. :a1699 :a1699 :a1699. :a1700 :a1700 :a1700. :a1701 :a1701 :a1701. :a1702 :a1702 :a1702. :a1703 :a1703 :a1703. :a1704 :a1704 :a1704. :a1705 :a1705 :a1705. :a1706 :a1706 :a1706. :a1707 :a1707 :a1707. :a1708 :a1708 :a1708. :a1709 :a1709 :a1709. :a1710 :a1710 :a1710. :a1711 :a1711 :a1711. :a1712 :a1712 :a1712. :a1713 :a1713 :a1713. :a1714 :a1714 :a1714. :a1715 :a1715 :a1715. :a1716 :a1716 :a1716. :a1717 :a1717 :a1717. :a1718 :a1718 :a1718. :a1719 :a1719 :a1719. :a1720 :a1720 :a1720. :a1721 :a1721 :a1721. :a1722 :a1722 :a1722. :a1723 :a1723 :a1723. :a1724 :a1724 :a1724. :a1725 :a1725 :a1725. :a1726 :a1726 :a1726. :a1727 :a1727 :a1727. :a1728 :a1728 :a1728. :a1729 :a1729 :a1729. :a1730 :a1730 :a1730. :a1731 :a1731 :a1731. :a1732 :a1732 :a1732. :a1733 :a1733 :a1733. :a1734 :a1734 :a1734. :a1735 :a1735 :a1735. :a1736 :a1736 :a1736. :a1737 :a1737 :a1737. :a1738 :a1738 :a1738. :a1739 :a1739 :a1739. :a1740 :a1740 :a1740. :a1741 :a1741 :a1741. :a1742 :a1742 :a1742. :a1743 :a1743 :a1743. :a1744 :a1744 :a1744. :a1745 :a1745 :a1745. :a1746 :a1746 :a1746. :a1747 :a1747 :a1747. :a1748 :a1748 :a1748. :a1749 :a1749 :a1749. :a1750 :a1750 :a1750. :a1751 :a1751 :a1751. :a1752 :a1752 :a1752. :a1753 :a1753 :a1753. :a1754 :a1754 :a1754. :a1755 :a1755 :a1755. :a1756 :a1756 :a1756. :a1757 :a1757 :a1757. :a1758 :a1758 :a1758. :a1759 :a1759 :a1759. :a1760 :a1760 :a1760. :a1761 :a1761 :a1761. :a1762 :a1762 :a1762. :a1763 :a1763 :a1763. :a1764 :a1764 :a1764. :a1765 :a1765 :a1765. :a1766 :a1766 :a1766. :a1767 :a1767 :a1767. :a1768 :a1768 :a1768. :a1769 :a1769 :a1769. :a1770 :a1770 :a1770. :a1771 :a1771 :a1771. :a1772 :a1772 :a1772. :a1773 :a1773 :a1773. :a1774 :a1774 :a1774. :a1775 :a1775 :a1775. :a1776 :a1776 :a1776. :a1777 :a1777 :a1777. :a1778 :a1778 :a1778. :a1779 :a1779 :a1779. :a1780 :a1780 :a1780. :a1781 :a1781 :a1781. :a1782 :a1782 :a1782. :a1783 :a1783 :a1783. :a1784 :a1784 :a1784. :a1785 :a1785 :a1785. :a1786 :a1786 :a1786. :a1787 :a1787 :a1787. :a1788 :a1788 :a1788. :a1789 :a1789 :a1789. :a1790 :a1790 :a1790. :a1791 :a1791 :a1791. :a1792 :a1792 :a1792. :a1793 :a1793 :a1793. :a1794 :a1794 :a1794. :a1795 :a1795 :a1795. :a1796 :a1796 :a1796. :a1797 :a1797 :a1797. :a1798 :a1798 :a1798. :a1799 :a1799 :a1799. :a1800 :a1800 :a1800. :a1801 :a1801 :a1801. :a1802 :a1802 :a1802. :a1803 :a1803 :a1803. :a1804 :a1804 :a1804. :a1805 :a1805 :a1805. :a1806 :a1806 :a1806. :a1807 :a1807 :a1807. :a1808 :a1808 :a1808. :a1809 :a1809 :a1809. :a1810 :a1810 :a1810. :a1811 :a1811 :a1811. :a1812 :a1812 :a1812. :a1813 :a1813 :a1813. :a1814 :a1814 :a1814. :a1815 :a1815 :a1815. :a1816 :a1816 :a1816. :a1817 :a1817 :a1817. :a1818 :a1818 :a1818. :a1819 :a1819 :a1819. :a1820 :a1820 :a1820. :a1821 :a1821 :a1821. :a1822 :a1822 :a1822. :a1823 :a1823 :a1823. :a1824 :a1824 :a1824. :a1825 :a1825 :a1825. :a1826 :a1826 :a1826. :a1827 :a1827 :a1827. :a1828 :a1828 :a1828. :a1829 :a1829 :a1829. :a1830 :a1830 :a1830. :a1831 :a1831 :a1831. :a1832 :a1832 :a1832. :a1833 :a1833 :a1833. :a1834 :a1834 :a1834. :a1835 :a1835 :a1835. :a1836 :a1836 :a1836. :a1837 :a1837 :a1837. :a1838 :a1838 :a1838. :a1839 :a1839 :a1839. :a1840 :a1840 :a1840. :a1841 :a1841 :a1841. :a1842 :a1842 :a1842. :a1843 :a1843 :a1843. :a1844 :a1844 :a1844. :a1845 :a1845 :a1845. :a1846 :a1846 :a1846. :a1847 :a1847 :a1847. :a1848 :a1848 :a1848. :a1849 :a1849 :a1849. :a1850 :a1850 :a1850. :a1851 :a1851 :a1851. :a1852 :a1852 :a1852. :a1853 :a1853 :a1853. :a1854 :a1854 :a1854. :a1855 :a1855 :a1855. :a1856 :a1856 :a1856. :a1857 :a1857 :a1857. :a1858 :a1858 :a1858. :a1859 :a1859 :a1859. :a1860 :a1860 :a1860. :a1861 :a1861 :a1861. :a1862 :a1862 :a1862. :a1863 :a1863 :a1863. :a1864 :a1864 :a1864. :a1865 :a1865 :a1865. :a1866 :a1866 :a1866. :a1867 :a1867 :a1867. :a1868 :a1868 :a1868. :a1869 :a1869 :a1869. :a1870 :a1870 :a1870. :a1871 :a1871 :a1871. :a1872 :a1872 :a1872. :a1873 :a1873 :a1873. :a1874 :a1874 :a1874. :a1875 :a1875 :a1875. :a1876 :a1876 :a1876. :a1877 :a1877 :a1877. :a1878 :a1878 :a1878. :a1879 :a1879 :a1879. :a1880 :a1880 :a1880. :a1881 :a1881 :a1881. :a1882 :a1882 :a1882. :a1883 :a1883 :a1883. :a1884 :a1884 :a1884. :a1885 :a1885 :a1885. :a1886 :a1886 :a1886. :a1887 :a1887 :a1887. :a1888 :a1888 :a1888. :a1889 :a1889 :a1889. :a1890 :a1890 :a1890. :a1891 :a1891 :a1891. :a1892 :a1892 :a1892. :a1893 :a1893 :a1893. :a1894 :a1894 :a1894. :a1895 :a1895 :a1895. :a1896 :a1896 :a1896. :a1897 :a1897 :a1897. :a1898 :a1898 :a1898. :a1899 :a1899 :a1899. :a1900 :a1900 :a1900. :a1901 :a1901 :a1901. :a1902 :a1902 :a1902. :a1903 :a1903 :a1903. :a1904 :a1904 :a1904. :a1905 :a1905 :a1905. :a1906 :a1906 :a1906. :a1907 :a1907 :a1907. :a1908 :a1908 :a1908. :a1909 :a1909 :a1909. :a1910 :a1910 :a1910. :a1911 :a1911 :a1911. :a1912 :a1912 :a1912. :a1913 :a1913 :a1913. :a1914 :a1914 :a1914. :a1915 :a1915 :a1915. :a1916 :a1916 :a1916. :a1917 :a1917 :a1917. :a1918 :a1918 :a1918. :a1919 :a1919 :a1919. :a1920 :a1920 :a1920. :a1921 :a1921 :a1921. :a1922 :a1922 :a1922. :a1923 :a1923 :a1923. :a1924 :a1924 :a1924. :a1925 :a1925 :a1925. :a1926 :a1926 :a1926. :a1927 :a1927 :a1927. :a1928 :a1928 :a1928. :a1929 :a1929 :a1929. :a1930 :a1930 :a1930. :a1931 :a1931 :a1931. :a1932 :a1932 :a1932. :a1933 :a1933 :a1933. :a1934 :a1934 :a1934. :a1935 :a1935 :a1935. :a1936 :a1936 :a1936. :a1937 :a1937 :a1937. :a1938 :a1938 :a1938. :a1939 :a1939 :a1939. :a1940 :a1940 :a1940. :a1941 :a1941 :a1941. :a1942 :a1942 :a1942. :a1943 :a1943 :a1943. :a1944 :a1944 :a1944. :a1945 :a1945 :a1945. :a1946 :a1946 :a1946. :a1947 :a1947 :a1947. :a1948 :a1948 :a1948. :a1949 :a1949 :a1949. :a1950 :a1950 :a1950. :a1951 :a1951 :a1951. :a1952 :a1952 :a1952. :a1953 :a1953 :a1953. :a1954 :a1954 :a1954. :a1955 :a1955 :a1955. :a1956 :a1956 :a1956. :a1957 :a1957 :a1957. :a1958 :a1958 :a1958. :a1959 :a1959 :a1959. :a1960 :a1960 :a1960. :a1961 :a1961 :a1961. :a1962 :a1962 :a1962. :a1963 :a1963 :a1963. :a1964 :a1964 :a1964. :a1965 :a1965 :a1965. :a1966 :a1966 :a1966. :a1967 :a1967 :a1967. :a1968 :a1968 :a1968. :a1969 :a1969 :a1969. :a1970 :a1970 :a1970. :a1971 :a1971 :a1971. :a1972 :a1972 :a1972. :a1973 :a1973 :a1973. :a1974 :a1974 :a1974. :a1975 :a1975 :a1975. :a1976 :a1976 :a1976. :a1977 :a1977 :a1977. :a1978 :a1978 :a1978. :a1979 :a1979 :a1979. :a1980 :a1980 :a1980. :a1981 :a1981 :a1981. :a1982 :a1982 :a1982. :a1983 :a1983 :a1983. :a1984 :a1984 :a1984. :a1985 :a1985 :a1985. :a1986 :a1986 :a1986. :a1987 :a1987 :a1987. :a1988 :a1988 :a1988. :a1989 :a1989 :a1989. :a1990 :a1990 :a1990. :a1991 :a1991 :a1991. :a1992 :a1992 :a1992. :a1993 :a1993 :a1993. :a1994 :a1994 :a1994. :a1995 :a1995 :a1995. :a1996 :a1996 :a1996. :a1997 :a1997 :a1997. :a1998 :a1998 :a1998. :a1999 :a1999 :a1999. :a2000 :a2000 :a2000. :a2001 :a2001 :a2001. :a2002 :a2002 :a2002. :a2003 :a2003 :a2003. :a2004 :a2004 :a2004. :a2005 :a2005 :a2005. :a2006 :a2006 :a2006. :a2007 :a2007 :a2007. :a2008 :a2008 :a2008. :a2009 :a2009 :a2009. :a2010 :a2010 :a2010. :a2011 :a2011 :a2011. :a2012 :a2012 :a2012. :a2013 :a2013 :a2013. :a2014 :a2014 :a2014. :a2015 :a2015 :a2015. :a2016 :a2016 :a2016. :a2017 :a2017 :a2017. :a2018 :a2018 :a2018. :a2019 :a2019 :a2019. :a2020 :a2020 :a2020. :a2021 :a2021 :a2021. :a2022 :a2022 :a2022. :a2023 :a2023 :a2023. :a2024 :a2024 :a2024. :a2025 :a2025 :a2025. :a2026 :a2026 :a2026. :a2027 :a2027 :a2027. :a2028 :a2028 :a2028. :a2029 :a2029 :a2029. :a2030 :a2030 :a2030. :a2031 :a2031 :a2031. :a2032 :a2032 :a2032. :a2033 :a2033 :a2033. :a2034 :a2034 :a2034. :a2035 :a2035 :a2035. :a2036 :a2036 :a2036. :a2037 :a2037 :a2037. :a2038 :a2038 :a2038. :a2039 :a2039 :a2039. :a2040 :a2040 :a2040. :a2041 :a2041 :a2041. :a2042 :a2042 :a2042. :a2043 :a2043 :a2043. :a2044 :a2044 :a2044. :a2045 :a2045 :a2045. :a2046 :a2046 :a2046. :a2047 :a2047 :a2047. :a2048 :a2048 :a2048. :a2049 :a2049 :a2049. :a2050 :a2050 :a2050. :a2051 :a2051 :a2051. :a2052 :a2052 :a2052. :a2053 :a2053 :a2053. :a2054 :a2054 :a2054. :a2055 :a2055 :a2055. :a2056 :a2056 :a2056. :a2057 :a2057 :a2057. :a2058 :a2058 :a2058. :a2059 :a2059 :a2059. :a2060 :a2060 :a2060. :a2061 :a2061 :a2061. :a2062 :a2062 :a2062. :a2063 :a2063 :a2063. :a2064 :a2064 :a2064. :a2065 :a2065 :a2065. :a2066 :a2066 :a2066. :a2067 :a2067 :a2067. :a2068 :a2068 :a2068. :a2069 :a2069 :a2069. :a2070 :a2070 :a2070. :a2071 :a2071 :a2071. :a2072 :a2072 :a2072. :a2073 :a2073 :a2073. :a2074 :a2074 :a2074. :a2075 :a2075 :a2075. :a2076 :a2076 :a2076. :a2077 :a2077 :a2077. :a2078 :a2078 :a2078. :a2079 :a2079 :a2079. :a2080 :a2080 :a2080. :a2081 :a2081 :a2081. :a2082 :a2082 :a2082. :a2083 :a2083 :a2083. :a2084 :a2084 :a2084. :a2085 :a2085 :a2085. :a2086 :a2086 :a2086. :a2087 :a2087 :a2087. :a2088 :a2088 :a2088. :a2089 :a2089 :a2089. :a2090 :a2090 :a2090. :a2091 :a2091 :a2091. :a2092 :a2092 :a2092. :a2093 :a2093 :a2093. :a2094 :a2094 :a2094. :a2095 :a2095 :a2095. :a2096 :a2096 :a2096. :a2097 :a2097 :a2097. :a2098 :a2098 :a2098. :a2099 :a2099 :a2099. :a2100 :a2100 :a2100. :a2101 :a2101 :a2101. :a2102 :a2102 :a2102. :a2103 :a2103 :a2103. :a2104 :a2104 :a2104. :a2105 :a2105 :a2105. :a2106 :a2106 :a2106. :a2107 :a2107 :a2107. :a2108 :a2108 :a2108. :a2109 :a2109 :a2109. :a2110 :a2110 :a2110. :a2111 :a2111 :a2111. :a2112 :a2112 :a2112. :a2113 :a2113 :a2113. :a2114 :a2114 :a2114. :a2115 :a2115 :a2115. :a2116 :a2116 :a2116. :a2117 :a2117 :a2117. :a2118 :a2118 :a2118. :a2119 :a2119 :a2119. :a2120 :a2120 :a2120. :a2121 :a2121 :a2121. :a2122 :a2122 :a2122. :a2123 :a2123 :a2123. :a2124 :a2124 :a2124. :a2125 :a2125 :a2125. :a2126 :a2126 :a2126. :a2127 :a2127 :a2127. :a2128 :a2128 :a2128. :a2129 :a2129 :a2129. :a2130 :a2130 :a2130. :a2131 :a2131 :a2131. :a2132 :a2132 :a2132. :a2133 :a2133 :a2133. :a2134 :a2134 :a2134. :a2135 :a2135 :a2135. :a2136 :a2136 :a2136. :a2137 :a2137 :a2137. :a2138 :a2138 :a2138. :a2139 :a2139 :a2139. :a2140 :a2140 :a2140. :a2141 :a2141 :a2141. :a2142 :a2142 :a2142. :a2143 :a2143 :a2143. :a2144 :a2144 :a2144. :a2145 :a2145 :a2145. :a2146 :a2146 :a2146. :a2147 :a2147 :a2147. :a2148 :a2148 :a2148. :a2149 :a2149 :a2149. :a2150 :a2150 :a2150. :a2151 :a2151 :a2151. :a2152 :a2152 :a2152. :a2153 :a2153 :a2153. :a2154 :a2154 :a2154. :a2155 :a2155 :a2155. :a2156 :a2156 :a2156. :a2157 :a2157 :a2157. :a2158 :a2158 :a2158. :a2159 :a2159 :a2159. :a2160 :a2160 :a2160. :a2161 :a2161 :a2161. :a2162 :a2162 :a2162. :a2163 :a2163 :a2163. :a2164 :a2164 :a2164. :a2165 :a2165 :a2165. :a2166 :a2166 :a2166. :a2167 :a2167 :a2167. :a2168 :a2168 :a2168. :a2169 :a2169 :a2169. :a2170 :a2170 :a2170. :a2171 :a2171 :a2171. :a2172 :a2172 :a2172. :a2173 :a2173 :a2173. :a2174 :a2174 :a2174. :a2175 :a2175 :a2175. :a2176 :a2176 :a2176. :a2177 :a2177 :a2177. :a2178 :a2178 :a2178. :a2179 :a2179 :a2179. :a2180 :a2180 :a2180. :a2181 :a2181 :a2181. :a2182 :a2182 :a2182. :a2183 :a2183 :a2183. :a2184 :a2184 :a2184. :a2185 :a2185 :a2185. :a2186 :a2186 :a2186. :a2187 :a2187 :a2187. :a2188 :a2188 :a2188. :a2189 :a2189 :a2189. :a2190 :a2190 :a2190. :a2191 :a2191 :a2191. :a2192 :a2192 :a2192. :a2193 :a2193 :a2193. :a2194 :a2194 :a2194. :a2195 :a2195 :a2195. :a2196 :a2196 :a2196. :a2197 :a2197 :a2197. :a2198 :a2198 :a2198. :a2199 :a2199 :a2199. :a2200 :a2200 :a2200. :a2201 :a2201 :a2201. :a2202 :a2202 :a2202. :a2203 :a2203 :a2203. :a2204 :a2204 :a2204. :a2205 :a2205 :a2205. :a2206 :a2206 :a2206. :a2207 :a2207 :a2207. :a2208 :a2208 :a2208. :a2209 :a2209 :a2209. :a2210 :a2210 :a2210. :a2211 :a2211 :a2211. :a2212 :a2212 :a2212. :a2213 :a2213 :a2213. :a2214 :a2214 :a2214. :a2215 :a2215 :a2215. :a2216 :a2216 :a2216. :a2217 :a2217 :a2217. :a2218 :a2218 :a2218. :a2219 :a2219 :a2219. :a2220 :a2220 :a2220. :a2221 :a2221 :a2221. :a2222 :a2222 :a2222. :a2223 :a2223 :a2223. :a2224 :a2224 :a2224. :a2225 :a2225 :a2225. :a2226 :a2226 :a2226. :a2227 :a2227 :a2227. :a2228 :a2228 :a2228. :a2229 :a2229 :a2229. :a2230 :a2230 :a2230. :a2231 :a2231 :a2231. :a2232 :a2232 :a2232. :a2233 :a2233 :a2233. :a2234 :a2234 :a2234. :a2235 :a2235 :a2235. :a2236 :a2236 :a2236. :a2237 :a2237 :a2237. :a2238 :a2238 :a2238. :a2239 :a2239 :a2239. :a2240 :a2240 :a2240. :a2241 :a2241 :a2241. :a2242 :a2242 :a2242. :a2243 :a2243 :a2243. :a2244 :a2244 :a2244. :a2245 :a2245 :a2245. :a2246 :a2246 :a2246. :a2247 :a2247 :a2247. :a2248 :a2248 :a2248. :a2249 :a2249 :a2249. :a2250 :a2250 :a2250. :a2251 :a2251 :a2251. :a2252 :a2252 :a2252. :a2253 :a2253 :a2253. :a2254 :a2254 :a2254. :a2255 :a2255 :a2255. :a2256 :a2256 :a2256. :a2257 :a2257 :a2257. :a2258 :a2258 :a2258. :a2259 :a2259 :a2259. :a2260 :a2260 :a2260. :a2261 :a2261 :a2261. :a2262 :a2262 :a2262. :a2263 :a2263 :a2263. :a2264 :a2264 :a2264. :a2265 :a2265 :a2265. :a2266 :a2266 :a2266. :a2267 :a2267 :a2267. :a2268 :a2268 :a2268. :a2269 :a2269 :a2269. :a2270 :a2270 :a2270. :a2271 :a2271 :a2271. :a2272 :a2272 :a2272. :a2273 :a2273 :a2273. :a2274 :a2274 :a2274. :a2275 :a2275 :a2275. :a2276 :a2276 :a2276. :a2277 :a2277 :a2277. :a2278 :a2278 :a2278. :a2279 :a2279 :a2279. :a2280 :a2280 :a2280. :a2281 :a2281 :a2281. :a2282 :a2282 :a2282. :a2283 :a2283 :a2283. :a2284 :a2284 :a2284. :a2285 :a2285 :a2285. :a2286 :a2286 :a2286. :a2287 :a2287 :a2287. :a2288 :a2288 :a2288. :a2289 :a2289 :a2289. :a2290 :a2290 :a2290. :a2291 :a2291 :a2291. :a2292 :a2292 :a2292. :a2293 :a2293 :a2293. :a2294 :a2294 :a2294. :a2295 :a2295 :a2295. :a2296 :a2296 :a2296. :a2297 :a2297 :a2297. :a2298 :a2298 :a2298. :a2299 :a2299 :a2299. :a2300 :a2300 :a2300. :a2301 :a2301 :a2301. :a2302 :a2302 :a2302. :a2303 :a2303 :a2303. :a2304 :a2304 :a2304. :a2305 :a2305 :a2305. :a2306 :a2306 :a2306. :a2307 :a2307 :a2307. :a2308 :a2308 :a2308. :a2309 :a2309 :a2309. :a2310 :a2310 :a2310. :a2311 :a2311 :a2311. :a2312 :a2312 :a2312. :a2313 :a2313 :a2313. :a2314 :a2314 :a2314. :a2315 :a2315 :a2315. :a2316 :a2316 :a2316. :a2317 :a2317 :a2317. :a2318 :a2318 :a2318. :a2319 :a2319 :a2319. :a2320 :a2320 :a2320. :a2321 :a2321 :a2321. :a2322 :a2322 :a2322. :a2323 :a2323 :a2323. :a2324 :a2324 :a2324. :a2325 :a2325 :a2325. :a2326 :a2326 :a2326. :a2327 :a2327 :a2327. :a2328 :a2328 :a2328. :a2329 :a2329 :a2329. :a2330 :a2330 :a2330. :a2331 :a2331 :a2331. :a2332 :a2332 :a2332. :a2333 :a2333 :a2333. :a2334 :a2334 :a2334. :a2335 :a2335 :a2335. :a2336 :a2336 :a2336. :a2337 :a2337 :a2337. :a2338 :a2338 :a2338. :a2339 :a2339 :a2339. :a2340 :a2340 :a2340. :a2341 :a2341 :a2341. :a2342 :a2342 :a2342. :a2343 :a2343 :a2343. :a2344 :a2344 :a2344. :a2345 :a2345 :a2345. :a2346 :a2346 :a2346. :a2347 :a2347 :a2347. :a2348 :a2348 :a2348. :a2349 :a2349 :a2349. :a2350 :a2350 :a2350. :a2351 :a2351 :a2351. :a2352 :a2352 :a2352. :a2353 :a2353 :a2353. :a2354 :a2354 :a2354. :a2355 :a2355 :a2355. :a2356 :a2356 :a2356. :a2357 :a2357 :a2357. :a2358 :a2358 :a2358. :a2359 :a2359 :a2359. :a2360 :a2360 :a2360. :a2361 :a2361 :a2361. :a2362 :a2362 :a2362. :a2363 :a2363 :a2363. :a2364 :a2364 :a2364. :a2365 :a2365 :a2365. :a2366 :a2366 :a2366. :a2367 :a2367 :a2367. :a2368 :a2368 :a2368. :a2369 :a2369 :a2369. :a2370 :a2370 :a2370. :a2371 :a2371 :a2371. :a2372 :a2372 :a2372. :a2373 :a2373 :a2373. :a2374 :a2374 :a2374. :a2375 :a2375 :a2375. :a2376 :a2376 :a2376. :a2377 :a2377 :a2377. :a2378 :a2378 :a2378. :a2379 :a2379 :a2379. :a2380 :a2380 :a2380. :a2381 :a2381 :a2381. :a2382 :a2382 :a2382. :a2383 :a2383 :a2383. :a2384 :a2384 :a2384. :a2385 :a2385 :a2385. :a2386 :a2386 :a2386. :a2387 :a2387 :a2387. :a2388 :a2388 :a2388. :a2389 :a2389 :a2389. :a2390 :a2390 :a2390. :a2391 :a2391 :a2391. :a2392 :a2392 :a2392. :a2393 :a2393 :a2393. :a2394 :a2394 :a2394. :a2395 :a2395 :a2395. :a2396 :a2396 :a2396. :a2397 :a2397 :a2397. :a2398 :a2398 :a2398. :a2399 :a2399 :a2399. :a2400 :a2400 :a2400. :a2401 :a2401 :a2401. :a2402 :a2402 :a2402. :a2403 :a2403 :a2403. :a2404 :a2404 :a2404. :a2405 :a2405 :a2405. :a2406 :a2406 :a2406. :a2407 :a2407 :a2407. :a2408 :a2408 :a2408. :a2409 :a2409 :a2409. :a2410 :a2410 :a2410. :a2411 :a2411 :a2411. :a2412 :a2412 :a2412. :a2413 :a2413 :a2413. :a2414 :a2414 :a2414. :a2415 :a2415 :a2415. :a2416 :a2416 :a2416. :a2417 :a2417 :a2417. :a2418 :a2418 :a2418. :a2419 :a2419 :a2419. :a2420 :a2420 :a2420. :a2421 :a2421 :a2421. :a2422 :a2422 :a2422. :a2423 :a2423 :a2423. :a2424 :a2424 :a2424. :a2425 :a2425 :a2425. :a2426 :a2426 :a2426. :a2427 :a2427 :a2427. :a2428 :a2428 :a2428. :a2429 :a2429 :a2429. :a2430 :a2430 :a2430. :a2431 :a2431 :a2431. :a2432 :a2432 :a2432. :a2433 :a2433 :a2433. :a2434 :a2434 :a2434. :a2435 :a2435 :a2435. :a2436 :a2436 :a2436. :a2437 :a2437 :a2437. :a2438 :a2438 :a2438. :a2439 :a2439 :a2439. :a2440 :a2440 :a2440. :a2441 :a2441 :a2441. :a2442 :a2442 :a2442. :a2443 :a2443 :a2443. :a2444 :a2444 :a2444. :a2445 :a2445 :a2445. :a2446 :a2446 :a2446. :a2447 :a2447 :a2447. :a2448 :a2448 :a2448. :a2449 :a2449 :a2449. :a2450 :a2450 :a2450. :a2451 :a2451 :a2451. :a2452 :a2452 :a2452. :a2453 :a2453 :a2453. :a2454 :a2454 :a2454. :a2455 :a2455 :a2455. :a2456 :a2456 :a2456. :a2457 :a2457 :a2457. :a2458 :a2458 :a2458. :a2459 :a2459 :a2459. :a2460 :a2460 :a2460. :a2461 :a2461 :a2461. :a2462 :a2462 :a2462. :a2463 :a2463 :a2463. :a2464 :a2464 :a2464. :a2465 :a2465 :a2465. :a2466 :a2466 :a2466. :a2467 :a2467 :a2467. :a2468 :a2468 :a2468. :a2469 :a2469 :a2469. :a2470 :a2470 :a2470. :a2471 :a2471 :a2471. :a2472 :a2472 :a2472. :a2473 :a2473 :a2473. :a2474 :a2474 :a2474. :a2475 :a2475 :a2475. :a2476 :a2476 :a2476. :a2477 :a2477 :a2477. :a2478 :a2478 :a2478. :a2479 :a2479 :a2479. :a2480 :a2480 :a2480. :a2481 :a2481 :a2481. :a2482 :a2482 :a2482. :a2483 :a2483 :a2483. :a2484 :a2484 :a2484. :a2485 :a2485 :a2485. :a2486 :a2486 :a2486. :a2487 :a2487 :a2487. :a2488 :a2488 :a2488. :a2489 :a2489 :a2489. :a2490 :a2490 :a2490. :a2491 :a2491 :a2491. :a2492 :a2492 :a2492. :a2493 :a2493 :a2493. :a2494 :a2494 :a2494. :a2495 :a2495 :a2495. :a2496 :a2496 :a2496. :a2497 :a2497 :a2497. :a2498 :a2498 :a2498. :a2499 :a2499 :a2499. :a2500 :a2500 :a2500. :a2501 :a2501 :a2501. :a2502 :a2502 :a2502. :a2503 :a2503 :a2503. :a2504 :a2504 :a2504. :a2505 :a2505 :a2505. :a2506 :a2506 :a2506. :a2507 :a2507 :a2507. :a2508 :a2508 :a2508. :a2509 :a2509 :a2509. :a2510 :a2510 :a2510. :a2511 :a2511 :a2511. :a2512 :a2512 :a2512. :a2513 :a2513 :a2513. :a2514 :a2514 :a2514. :a2515 :a2515 :a2515. :a2516 :a2516 :a2516. :a2517 :a2517 :a2517. :a2518 :a2518 :a2518. :a2519 :a2519 :a2519. :a2520 :a2520 :a2520. :a2521 :a2521 :a2521. :a2522 :a2522 :a2522. :a2523 :a2523 :a2523. :a2524 :a2524 :a2524. :a2525 :a2525 :a2525. :a2526 :a2526 :a2526. :a2527 :a2527 :a2527. :a2528 :a2528 :a2528. :a2529 :a2529 :a2529. :a2530 :a2530 :a2530. :a2531 :a2531 :a2531. :a2532 :a2532 :a2532. :a2533 :a2533 :a2533. :a2534 :a2534 :a2534. :a2535 :a2535 :a2535. :a2536 :a2536 :a2536. :a2537 :a2537 :a2537. :a2538 :a2538 :a2538. :a2539 :a2539 :a2539. :a2540 :a2540 :a2540. :a2541 :a2541 :a2541. :a2542 :a2542 :a2542. :a2543 :a2543 :a2543. :a2544 :a2544 :a2544. :a2545 :a2545 :a2545. :a2546 :a2546 :a2546. :a2547 :a2547 :a2547. :a2548 :a2548 :a2548. :a2549 :a2549 :a2549. :a2550 :a2550 :a2550. :a2551 :a2551 :a2551. :a2552 :a2552 :a2552. :a2553 :a2553 :a2553. :a2554 :a2554 :a2554. :a2555 :a2555 :a2555. :a2556 :a2556 :a2556. :a2557 :a2557 :a2557. :a2558 :a2558 :a2558. :a2559 :a2559 :a2559. :a2560 :a2560 :a2560. :a2561 :a2561 :a2561. :a2562 :a2562 :a2562. :a2563 :a2563 :a2563. :a2564 :a2564 :a2564. :a2565 :a2565 :a2565. :a2566 :a2566 :a2566. :a2567 :a2567 :a2567. :a2568 :a2568 :a2568. :a2569 :a2569 :a2569. :a2570 :a2570 :a2570. :a2571 :a2571 :a2571. :a2572 :a2572 :a2572. :a2573 :a2573 :a2573. :a2574 :a2574 :a2574. :a2575 :a2575 :a2575. :a2576 :a2576 :a2576. :a2577 :a2577 :a2577. :a2578 :a2578 :a2578. :a2579 :a2579 :a2579. :a2580 :a2580 :a2580. :a2581 :a2581 :a2581. :a2582 :a2582 :a2582. :a2583 :a2583 :a2583. :a2584 :a2584 :a2584. :a2585 :a2585 :a2585. :a2586 :a2586 :a2586. :a2587 :a2587 :a2587. :a2588 :a2588 :a2588. :a2589 :a2589 :a2589. :a2590 :a2590 :a2590. :a2591 :a2591 :a2591. :a2592 :a2592 :a2592. :a2593 :a2593 :a2593. :a2594 :a2594 :a2594. :a2595 :a2595 :a2595. :a2596 :a2596 :a2596. :a2597 :a2597 :a2597. :a2598 :a2598 :a2598. :a2599 :a2599 :a2599. :a2600 :a2600 :a2600. :a2601 :a2601 :a2601. :a2602 :a2602 :a2602. :a2603 :a2603 :a2603. :a2604 :a2604 :a2604. :a2605 :a2605 :a2605. :a2606 :a2606 :a2606. :a2607 :a2607 :a2607. :a2608 :a2608 :a2608. :a2609 :a2609 :a2609. :a2610 :a2610 :a2610. :a2611 :a2611 :a2611. :a2612 :a2612 :a2612. :a2613 :a2613 :a2613. :a2614 :a2614 :a2614. :a2615 :a2615 :a2615. :a2616 :a2616 :a2616. :a2617 :a2617 :a2617. :a2618 :a2618 :a2618. :a2619 :a2619 :a2619. :a2620 :a2620 :a2620. :a2621 :a2621 :a2621. :a2622 :a2622 :a2622. :a2623 :a2623 :a2623. :a2624 :a2624 :a2624. :a2625 :a2625 :a2625. :a2626 :a2626 :a2626. :a2627 :a2627 :a2627. :a2628 :a2628 :a2628. :a2629 :a2629 :a2629. :a2630 :a2630 :a2630. :a2631 :a2631 :a2631. :a2632 :a2632 :a2632. :a2633 :a2633 :a2633. :a2634 :a2634 :a2634. :a2635 :a2635 :a2635. :a2636 :a2636 :a2636. :a2637 :a2637 :a2637. :a2638 :a2638 :a2638. :a2639 :a2639 :a2639. :a2640 :a2640 :a2640. :a2641 :a2641 :a2641. :a2642 :a2642 :a2642. :a2643 :a2643 :a2643. :a2644 :a2644 :a2644. :a2645 :a2645 :a2645. :a2646 :a2646 :a2646. :a2647 :a2647 :a2647. :a2648 :a2648 :a2648. :a2649 :a2649 :a2649. :a2650 :a2650 :a2650. :a2651 :a2651 :a2651. :a2652 :a2652 :a2652. :a2653 :a2653 :a2653. :a2654 :a2654 :a2654. :a2655 :a2655 :a2655. :a2656 :a2656 :a2656. :a2657 :a2657 :a2657. :a2658 :a2658 :a2658. :a2659 :a2659 :a2659. :a2660 :a2660 :a2660. :a2661 :a2661 :a2661. :a2662 :a2662 :a2662. :a2663 :a2663 :a2663. :a2664 :a2664 :a2664. :a2665 :a2665 :a2665. :a2666 :a2666 :a2666. :a2667 :a2667 :a2667. :a2668 :a2668 :a2668. :a2669 :a2669 :a2669. :a2670 :a2670 :a2670. :a2671 :a2671 :a2671. :a2672 :a2672 :a2672. :a2673 :a2673 :a2673. :a2674 :a2674 :a2674. :a2675 :a2675 :a2675. :a2676 :a2676 :a2676. :a2677 :a2677 :a2677. :a2678 :a2678 :a2678. :a2679 :a2679 :a2679. :a2680 :a2680 :a2680. :a2681 :a2681 :a2681. :a2682 :a2682 :a2682. :a2683 :a2683 :a2683. :a2684 :a2684 :a2684. :a2685 :a2685 :a2685. :a2686 :a2686 :a2686. :a2687 :a2687 :a2687. :a2688 :a2688 :a2688. :a2689 :a2689 :a2689. :a2690 :a2690 :a2690. :a2691 :a2691 :a2691. :a2692 :a2692 :a2692. :a2693 :a2693 :a2693. :a2694 :a2694 :a2694. :a2695 :a2695 :a2695. :a2696 :a2696 :a2696. :a2697 :a2697 :a2697. :a2698 :a2698 :a2698. :a2699 :a2699 :a2699. :a2700 :a2700 :a2700. :a2701 :a2701 :a2701. :a2702 :a2702 :a2702. :a2703 :a2703 :a2703. :a2704 :a2704 :a2704. :a2705 :a2705 :a2705. :a2706 :a2706 :a2706. :a2707 :a2707 :a2707. :a2708 :a2708 :a2708. :a2709 :a2709 :a2709. :a2710 :a2710 :a2710. :a2711 :a2711 :a2711. :a2712 :a2712 :a2712. :a2713 :a2713 :a2713. :a2714 :a2714 :a2714. :a2715 :a2715 :a2715. :a2716 :a2716 :a2716. :a2717 :a2717 :a2717. :a2718 :a2718 :a2718. :a2719 :a2719 :a2719. :a2720 :a2720 :a2720. :a2721 :a2721 :a2721. :a2722 :a2722 :a2722. :a2723 :a2723 :a2723. :a2724 :a2724 :a2724. :a2725 :a2725 :a2725. :a2726 :a2726 :a2726. :a2727 :a2727 :a2727. :a2728 :a2728 :a2728. :a2729 :a2729 :a2729. :a2730 :a2730 :a2730. :a2731 :a2731 :a2731. :a2732 :a2732 :a2732. :a2733 :a2733 :a2733. :a2734 :a2734 :a2734. :a2735 :a2735 :a2735. :a2736 :a2736 :a2736. :a2737 :a2737 :a2737. :a2738 :a2738 :a2738. :a2739 :a2739 :a2739. :a2740 :a2740 :a2740. :a2741 :a2741 :a2741. :a2742 :a2742 :a2742. :a2743 :a2743 :a2743. :a2744 :a2744 :a2744. :a2745 :a2745 :a2745. :a2746 :a2746 :a2746. :a2747 :a2747 :a2747. :a2748 :a2748 :a2748. :a2749 :a2749 :a2749. :a2750 :a2750 :a2750. :a2751 :a2751 :a2751. :a2752 :a2752 :a2752. :a2753 :a2753 :a2753. :a2754 :a2754 :a2754. :a2755 :a2755 :a2755. :a2756 :a2756 :a2756. :a2757 :a2757 :a2757. :a2758 :a2758 :a2758. :a2759 :a2759 :a2759. :a2760 :a2760 :a2760. :a2761 :a2761 :a2761. :a2762 :a2762 :a2762. :a2763 :a2763 :a2763. :a2764 :a2764 :a2764. :a2765 :a2765 :a2765. :a2766 :a2766 :a2766. :a2767 :a2767 :a2767. :a2768 :a2768 :a2768. :a2769 :a2769 :a2769. :a2770 :a2770 :a2770. :a2771 :a2771 :a2771. :a2772 :a2772 :a2772. :a2773 :a2773 :a2773. :a2774 :a2774 :a2774. :a2775 :a2775 :a2775. :a2776 :a2776 :a2776. :a2777 :a2777 :a2777. :a2778 :a2778 :a2778. :a2779 :a2779 :a2779. :a2780 :a2780 :a2780. :a2781 :a2781 :a2781. :a2782 :a2782 :a2782. :a2783 :a2783 :a2783. :a2784 :a2784 :a2784. :a2785 :a2785 :a2785. :a2786 :a2786 :a2786. :a2787 :a2787 :a2787. :a2788 :a2788 :a2788. :a2789 :a2789 :a2789. :a2790 :a2790 :a2790. :a2791 :a2791 :a2791. :a2792 :a2792 :a2792. :a2793 :a2793 :a2793. :a2794 :a2794 :a2794. :a2795 :a2795 :a2795. :a2796 :a2796 :a2796. :a2797 :a2797 :a2797. :a2798 :a2798 :a2798. :a2799 :a2799 :a2799. :a2800 :a2800 :a2800. :a2801 :a2801 :a2801. :a2802 :a2802 :a2802. :a2803 :a2803 :a2803. :a2804 :a2804 :a2804. :a2805 :a2805 :a2805. :a2806 :a2806 :a2806. :a2807 :a2807 :a2807. :a2808 :a2808 :a2808. :a2809 :a2809 :a2809. :a2810 :a2810 :a2810. :a2811 :a2811 :a2811. :a2812 :a2812 :a2812. :a2813 :a2813 :a2813. :a2814 :a2814 :a2814. :a2815 :a2815 :a2815. :a2816 :a2816 :a2816. :a2817 :a2817 :a2817. :a2818 :a2818 :a2818. :a2819 :a2819 :a2819. :a2820 :a2820 :a2820. :a2821 :a2821 :a2821. :a2822 :a2822 :a2822. :a2823 :a2823 :a2823. :a2824 :a2824 :a2824. :a2825 :a2825 :a2825. :a2826 :a2826 :a2826. :a2827 :a2827 :a2827. :a2828 :a2828 :a2828. :a2829 :a2829 :a2829. :a2830 :a2830 :a2830. :a2831 :a2831 :a2831. :a2832 :a2832 :a2832. :a2833 :a2833 :a2833. :a2834 :a2834 :a2834. :a2835 :a2835 :a2835. :a2836 :a2836 :a2836. :a2837 :a2837 :a2837. :a2838 :a2838 :a2838. :a2839 :a2839 :a2839. :a2840 :a2840 :a2840. :a2841 :a2841 :a2841. :a2842 :a2842 :a2842. :a2843 :a2843 :a2843. :a2844 :a2844 :a2844. :a2845 :a2845 :a2845. :a2846 :a2846 :a2846. :a2847 :a2847 :a2847. :a2848 :a2848 :a2848. :a2849 :a2849 :a2849. :a2850 :a2850 :a2850. :a2851 :a2851 :a2851. :a2852 :a2852 :a2852. :a2853 :a2853 :a2853. :a2854 :a2854 :a2854. :a2855 :a2855 :a2855. :a2856 :a2856 :a2856. :a2857 :a2857 :a2857. :a2858 :a2858 :a2858. :a2859 :a2859 :a2859. :a2860 :a2860 :a2860. :a2861 :a2861 :a2861. :a2862 :a2862 :a2862. :a2863 :a2863 :a2863. :a2864 :a2864 :a2864. :a2865 :a2865 :a2865. :a2866 :a2866 :a2866. :a2867 :a2867 :a2867. :a2868 :a2868 :a2868. :a2869 :a2869 :a2869. :a2870 :a2870 :a2870. :a2871 :a2871 :a2871. :a2872 :a2872 :a2872. :a2873 :a2873 :a2873. :a2874 :a2874 :a2874. :a2875 :a2875 :a2875. :a2876 :a2876 :a2876. :a2877 :a2877 :a2877. :a2878 :a2878 :a2878. :a2879 :a2879 :a2879. :a2880 :a2880 :a2880. :a2881 :a2881 :a2881. :a2882 :a2882 :a2882. :a2883 :a2883 :a2883. :a2884 :a2884 :a2884. :a2885 :a2885 :a2885. :a2886 :a2886 :a2886. :a2887 :a2887 :a2887. :a2888 :a2888 :a2888. :a2889 :a2889 :a2889. :a2890 :a2890 :a2890. :a2891 :a2891 :a2891. :a2892 :a2892 :a2892. :a2893 :a2893 :a2893. :a2894 :a2894 :a2894. :a2895 :a2895 :a2895. :a2896 :a2896 :a2896. :a2897 :a2897 :a2897. :a2898 :a2898 :a2898. :a2899 :a2899 :a2899. :a2900 :a2900 :a2900. :a2901 :a2901 :a2901. :a2902 :a2902 :a2902. :a2903 :a2903 :a2903. :a2904 :a2904 :a2904. :a2905 :a2905 :a2905. :a2906 :a2906 :a2906. :a2907 :a2907 :a2907. :a2908 :a2908 :a2908. :a2909 :a2909 :a2909. :a2910 :a2910 :a2910. :a2911 :a2911 :a2911. :a2912 :a2912 :a2912. :a2913 :a2913 :a2913. :a2914 :a2914 :a2914. :a2915 :a2915 :a2915. :a2916 :a2916 :a2916. :a2917 :a2917 :a2917. :a2918 :a2918 :a2918. :a2919 :a2919 :a2919. :a2920 :a2920 :a2920. :a2921 :a2921 :a2921. :a2922 :a2922 :a2922. :a2923 :a2923 :a2923. :a2924 :a2924 :a2924. :a2925 :a2925 :a2925. :a2926 :a2926 :a2926. :a2927 :a2927 :a2927. :a2928 :a2928 :a2928. :a2929 :a2929 :a2929. :a2930 :a2930 :a2930. :a2931 :a2931 :a2931. :a2932 :a2932 :a2932. :a2933 :a2933 :a2933. :a2934 :a2934 :a2934. :a2935 :a2935 :a2935. :a2936 :a2936 :a2936. :a2937 :a2937 :a2937. :a2938 :a2938 :a2938. :a2939 :a2939 :a2939. :a2940 :a2940 :a2940. :a2941 :a2941 :a2941. :a2942 :a2942 :a2942. :a2943 :a2943 :a2943. :a2944 :a2944 :a2944. :a2945 :a2945 :a2945. :a2946 :a2946 :a2946. :a2947 :a2947 :a2947. :a2948 :a2948 :a2948. :a2949 :a2949 :a2949. :a2950 :a2950 :a2950. :a2951 :a2951 :a2951. :a2952 :a2952 :a2952. :a2953 :a2953 :a2953. :a2954 :a2954 :a2954. :a2955 :a2955 :a2955. :a2956 :a2956 :a2956. :a2957 :a2957 :a2957. :a2958 :a2958 :a2958. :a2959 :a2959 :a2959. :a2960 :a2960 :a2960. :a2961 :a2961 :a2961. :a2962 :a2962 :a2962. :a2963 :a2963 :a2963. :a2964 :a2964 :a2964. :a2965 :a2965 :a2965. :a2966 :a2966 :a2966. :a2967 :a2967 :a2967. :a2968 :a2968 :a2968. :a2969 :a2969 :a2969. :a2970 :a2970 :a2970. :a2971 :a2971 :a2971. :a2972 :a2972 :a2972. :a2973 :a2973 :a2973. :a2974 :a2974 :a2974. :a2975 :a2975 :a2975. :a2976 :a2976 :a2976. :a2977 :a2977 :a2977. :a2978 :a2978 :a2978. :a2979 :a2979 :a2979. :a2980 :a2980 :a2980. :a2981 :a2981 :a2981. :a2982 :a2982 :a2982. :a2983 :a2983 :a2983. :a2984 :a2984 :a2984. :a2985 :a2985 :a2985. :a2986 :a2986 :a2986. :a2987 :a2987 :a2987. :a2988 :a2988 :a2988. :a2989 :a2989 :a2989. :a2990 :a2990 :a2990. :a2991 :a2991 :a2991. :a2992 :a2992 :a2992. :a2993 :a2993 :a2993. :a2994 :a2994 :a2994. :a2995 :a2995 :a2995. :a2996 :a2996 :a2996. :a2997 :a2997 :a2997. :a2998 :a2998 :a2998. :a2999 :a2999 :a2999. :a3000 :a3000 :a3000. :a3001 :a3001 :a3001. :a3002 :a3002 :a3002. :a3003 :a3003 :a3003. :a3004 :a3004 :a3004. :a3005 :a3005 :a3005. :a3006 :a3006 :a3006. :a3007 :a3007 :a3007. :a3008 :a3008 :a3008. :a3009 :a3009 :a3009. :a3010 :a3010 :a3010. :a3011 :a3011 :a3011. :a3012 :a3012 :a3012. :a3013 :a3013 :a3013. :a3014 :a3014 :a3014. :a3015 :a3015 :a3015. :a3016 :a3016 :a3016. :a3017 :a3017 :a3017. :a3018 :a3018 :a3018. :a3019 :a3019 :a3019. :a3020 :a3020 :a3020. :a3021 :a3021 :a3021. :a3022 :a3022 :a3022. :a3023 :a3023 :a3023. :a3024 :a3024 :a3024. :a3025 :a3025 :a3025. :a3026 :a3026 :a3026. :a3027 :a3027 :a3027. :a3028 :a3028 :a3028. :a3029 :a3029 :a3029. :a3030 :a3030 :a3030. :a3031 :a3031 :a3031. :a3032 :a3032 :a3032. :a3033 :a3033 :a3033. :a3034 :a3034 :a3034. :a3035 :a3035 :a3035. :a3036 :a3036 :a3036. :a3037 :a3037 :a3037. :a3038 :a3038 :a3038. :a3039 :a3039 :a3039. :a3040 :a3040 :a3040. :a3041 :a3041 :a3041. :a3042 :a3042 :a3042. :a3043 :a3043 :a3043. :a3044 :a3044 :a3044. :a3045 :a3045 :a3045. :a3046 :a3046 :a3046. :a3047 :a3047 :a3047. :a3048 :a3048 :a3048. :a3049 :a3049 :a3049. :a3050 :a3050 :a3050. :a3051 :a3051 :a3051. :a3052 :a3052 :a3052. :a3053 :a3053 :a3053. :a3054 :a3054 :a3054. :a3055 :a3055 :a3055. :a3056 :a3056 :a3056. :a3057 :a3057 :a3057. :a3058 :a3058 :a3058. :a3059 :a3059 :a3059. :a3060 :a3060 :a3060. :a3061 :a3061 :a3061. :a3062 :a3062 :a3062. :a3063 :a3063 :a3063. :a3064 :a3064 :a3064. :a3065 :a3065 :a3065. :a3066 :a3066 :a3066. :a3067 :a3067 :a3067. :a3068 :a3068 :a3068. :a3069 :a3069 :a3069. :a3070 :a3070 :a3070. :a3071 :a3071 :a3071. :a3072 :a3072 :a3072. :a3073 :a3073 :a3073. :a3074 :a3074 :a3074. :a3075 :a3075 :a3075. :a3076 :a3076 :a3076. :a3077 :a3077 :a3077. :a3078 :a3078 :a3078. :a3079 :a3079 :a3079. :a3080 :a3080 :a3080. :a3081 :a3081 :a3081. :a3082 :a3082 :a3082. :a3083 :a3083 :a3083. :a3084 :a3084 :a3084. :a3085 :a3085 :a3085. :a3086 :a3086 :a3086. :a3087 :a3087 :a3087. :a3088 :a3088 :a3088. :a3089 :a3089 :a3089. :a3090 :a3090 :a3090. :a3091 :a3091 :a3091. :a3092 :a3092 :a3092. :a3093 :a3093 :a3093. :a3094 :a3094 :a3094. :a3095 :a3095 :a3095. :a3096 :a3096 :a3096. :a3097 :a3097 :a3097. :a3098 :a3098 :a3098. :a3099 :a3099 :a3099. :a3100 :a3100 :a3100. :a3101 :a3101 :a3101. :a3102 :a3102 :a3102. :a3103 :a3103 :a3103. :a3104 :a3104 :a3104. :a3105 :a3105 :a3105. :a3106 :a3106 :a3106. :a3107 :a3107 :a3107. :a3108 :a3108 :a3108. :a3109 :a3109 :a3109. :a3110 :a3110 :a3110. :a3111 :a3111 :a3111. :a3112 :a3112 :a3112. :a3113 :a3113 :a3113. :a3114 :a3114 :a3114. :a3115 :a3115 :a3115. :a3116 :a3116 :a3116. :a3117 :a3117 :a3117. :a3118 :a3118 :a3118. :a3119 :a3119 :a3119. :a3120 :a3120 :a3120. :a3121 :a3121 :a3121. :a3122 :a3122 :a3122. :a3123 :a3123 :a3123. :a3124 :a3124 :a3124. :a3125 :a3125 :a3125. :a3126 :a3126 :a3126. :a3127 :a3127 :a3127. :a3128 :a3128 :a3128. :a3129 :a3129 :a3129. :a3130 :a3130 :a3130. :a3131 :a3131 :a3131. :a3132 :a3132 :a3132. :a3133 :a3133 :a3133. :a3134 :a3134 :a3134. :a3135 :a3135 :a3135. :a3136 :a3136 :a3136. :a3137 :a3137 :a3137. :a3138 :a3138 :a3138. :a3139 :a3139 :a3139. :a3140 :a3140 :a3140. :a3141 :a3141 :a3141. :a3142 :a3142 :a3142. :a3143 :a3143 :a3143. :a3144 :a3144 :a3144. :a3145 :a3145 :a3145. :a3146 :a3146 :a3146. :a3147 :a3147 :a3147. :a3148 :a3148 :a3148. :a3149 :a3149 :a3149. :a3150 :a3150 :a3150. :a3151 :a3151 :a3151. :a3152 :a3152 :a3152. :a3153 :a3153 :a3153. :a3154 :a3154 :a3154. :a3155 :a3155 :a3155. :a3156 :a3156 :a3156. :a3157 :a3157 :a3157. :a3158 :a3158 :a3158. :a3159 :a3159 :a3159. :a3160 :a3160 :a3160. :a3161 :a3161 :a3161. :a3162 :a3162 :a3162. :a3163 :a3163 :a3163. :a3164 :a3164 :a3164. :a3165 :a3165 :a3165. :a3166 :a3166 :a3166. :a3167 :a3167 :a3167. :a3168 :a3168 :a3168. :a3169 :a3169 :a3169. :a3170 :a3170 :a3170. :a3171 :a3171 :a3171. :a3172 :a3172 :a3172. :a3173 :a3173 :a3173. :a3174 :a3174 :a3174. :a3175 :a3175 :a3175. :a3176 :a3176 :a3176. :a3177 :a3177 :a3177. :a3178 :a3178 :a3178. :a3179 :a3179 :a3179. :a3180 :a3180 :a3180. :a3181 :a3181 :a3181. :a3182 :a3182 :a3182. :a3183 :a3183 :a3183. :a3184 :a3184 :a3184. :a3185 :a3185 :a3185. :a3186 :a3186 :a3186. :a3187 :a3187 :a3187. :a3188 :a3188 :a3188. :a3189 :a3189 :a3189. :a3190 :a3190 :a3190. :a3191 :a3191 :a3191. :a3192 :a3192 :a3192. :a3193 :a3193 :a3193. :a3194 :a3194 :a3194. :a3195 :a3195 :a3195. :a3196 :a3196 :a3196. :a3197 :a3197 :a3197. :a3198 :a3198 :a3198. :a3199 :a3199 :a3199. :a3200 :a3200 :a3200. :a3201 :a3201 :a3201. :a3202 :a3202 :a3202. :a3203 :a3203 :a3203. :a3204 :a3204 :a3204. :a3205 :a3205 :a3205. :a3206 :a3206 :a3206. :a3207 :a3207 :a3207. :a3208 :a3208 :a3208. :a3209 :a3209 :a3209. :a3210 :a3210 :a3210. :a3211 :a3211 :a3211. :a3212 :a3212 :a3212. :a3213 :a3213 :a3213. :a3214 :a3214 :a3214. :a3215 :a3215 :a3215. :a3216 :a3216 :a3216. :a3217 :a3217 :a3217. :a3218 :a3218 :a3218. :a3219 :a3219 :a3219. :a3220 :a3220 :a3220. :a3221 :a3221 :a3221. :a3222 :a3222 :a3222. :a3223 :a3223 :a3223. :a3224 :a3224 :a3224. :a3225 :a3225 :a3225. :a3226 :a3226 :a3226. :a3227 :a3227 :a3227. :a3228 :a3228 :a3228. :a3229 :a3229 :a3229. :a3230 :a3230 :a3230. :a3231 :a3231 :a3231. :a3232 :a3232 :a3232. :a3233 :a3233 :a3233. :a3234 :a3234 :a3234. :a3235 :a3235 :a3235. :a3236 :a3236 :a3236. :a3237 :a3237 :a3237. :a3238 :a3238 :a3238. :a3239 :a3239 :a3239. :a3240 :a3240 :a3240. :a3241 :a3241 :a3241. :a3242 :a3242 :a3242. :a3243 :a3243 :a3243. :a3244 :a3244 :a3244. :a3245 :a3245 :a3245. :a3246 :a3246 :a3246. :a3247 :a3247 :a3247. :a3248 :a3248 :a3248. :a3249 :a3249 :a3249. :a3250 :a3250 :a3250. :a3251 :a3251 :a3251. :a3252 :a3252 :a3252. :a3253 :a3253 :a3253. :a3254 :a3254 :a3254. :a3255 :a3255 :a3255. :a3256 :a3256 :a3256. :a3257 :a3257 :a3257. :a3258 :a3258 :a3258. :a3259 :a3259 :a3259. :a3260 :a3260 :a3260. :a3261 :a3261 :a3261. :a3262 :a3262 :a3262. :a3263 :a3263 :a3263. :a3264 :a3264 :a3264. :a3265 :a3265 :a3265. :a3266 :a3266 :a3266. :a3267 :a3267 :a3267. :a3268 :a3268 :a3268. :a3269 :a3269 :a3269. :a3270 :a3270 :a3270. :a3271 :a3271 :a3271. :a3272 :a3272 :a3272. :a3273 :a3273 :a3273. :a3274 :a3274 :a3274. :a3275 :a3275 :a3275. :a3276 :a3276 :a3276. :a3277 :a3277 :a3277. :a3278 :a3278 :a3278. :a3279 :a3279 :a3279. :a3280 :a3280 :a3280. :a3281 :a3281 :a3281. :a3282 :a3282 :a3282. :a3283 :a3283 :a3283. :a3284 :a3284 :a3284. :a3285 :a3285 :a3285. :a3286 :a3286 :a3286. :a3287 :a3287 :a3287. :a3288 :a3288 :a3288. :a3289 :a3289 :a3289. :a3290 :a3290 :a3290. :a3291 :a3291 :a3291. :a3292 :a3292 :a3292. :a3293 :a3293 :a3293. :a3294 :a3294 :a3294. :a3295 :a3295 :a3295. :a3296 :a3296 :a3296. :a3297 :a3297 :a3297. :a3298 :a3298 :a3298. :a3299 :a3299 :a3299. :a3300 :a3300 :a3300. :a3301 :a3301 :a3301. :a3302 :a3302 :a3302. :a3303 :a3303 :a3303. :a3304 :a3304 :a3304. :a3305 :a3305 :a3305. :a3306 :a3306 :a3306. :a3307 :a3307 :a3307. :a3308 :a3308 :a3308. :a3309 :a3309 :a3309. :a3310 :a3310 :a3310. :a3311 :a3311 :a3311. :a3312 :a3312 :a3312. :a3313 :a3313 :a3313. :a3314 :a3314 :a3314. :a3315 :a3315 :a3315. :a3316 :a3316 :a3316. :a3317 :a3317 :a3317. :a3318 :a3318 :a3318. :a3319 :a3319 :a3319. :a3320 :a3320 :a3320. :a3321 :a3321 :a3321. :a3322 :a3322 :a3322. :a3323 :a3323 :a3323. :a3324 :a3324 :a3324. :a3325 :a3325 :a3325. :a3326 :a3326 :a3326. :a3327 :a3327 :a3327. :a3328 :a3328 :a3328. :a3329 :a3329 :a3329. :a3330 :a3330 :a3330. :a3331 :a3331 :a3331. :a3332 :a3332 :a3332. :a3333 :a3333 :a3333. :a3334 :a3334 :a3334. :a3335 :a3335 :a3335. :a3336 :a3336 :a3336. :a3337 :a3337 :a3337. :a3338 :a3338 :a3338. :a3339 :a3339 :a3339. :a3340 :a3340 :a3340. :a3341 :a3341 :a3341. :a3342 :a3342 :a3342. :a3343 :a3343 :a3343. :a3344 :a3344 :a3344. :a3345 :a3345 :a3345. :a3346 :a3346 :a3346. :a3347 :a3347 :a3347. :a3348 :a3348 :a3348. :a3349 :a3349 :a3349. :a3350 :a3350 :a3350. :a3351 :a3351 :a3351. :a3352 :a3352 :a3352. :a3353 :a3353 :a3353. :a3354 :a3354 :a3354. :a3355 :a3355 :a3355. :a3356 :a3356 :a3356. :a3357 :a3357 :a3357. :a3358 :a3358 :a3358. :a3359 :a3359 :a3359. :a3360 :a3360 :a3360. :a3361 :a3361 :a3361. :a3362 :a3362 :a3362. :a3363 :a3363 :a3363. :a3364 :a3364 :a3364. :a3365 :a3365 :a3365. :a3366 :a3366 :a3366. :a3367 :a3367 :a3367. :a3368 :a3368 :a3368. :a3369 :a3369 :a3369. :a3370 :a3370 :a3370. :a3371 :a3371 :a3371. :a3372 :a3372 :a3372. :a3373 :a3373 :a3373. :a3374 :a3374 :a3374. :a3375 :a3375 :a3375. :a3376 :a3376 :a3376. :a3377 :a3377 :a3377. :a3378 :a3378 :a3378. :a3379 :a3379 :a3379. :a3380 :a3380 :a3380. :a3381 :a3381 :a3381. :a3382 :a3382 :a3382. :a3383 :a3383 :a3383. :a3384 :a3384 :a3384. :a3385 :a3385 :a3385. :a3386 :a3386 :a3386. :a3387 :a3387 :a3387. :a3388 :a3388 :a3388. :a3389 :a3389 :a3389. :a3390 :a3390 :a3390. :a3391 :a3391 :a3391. :a3392 :a3392 :a3392. :a3393 :a3393 :a3393. :a3394 :a3394 :a3394. :a3395 :a3395 :a3395. :a3396 :a3396 :a3396. :a3397 :a3397 :a3397. :a3398 :a3398 :a3398. :a3399 :a3399 :a3399. :a3400 :a3400 :a3400. :a3401 :a3401 :a3401. :a3402 :a3402 :a3402. :a3403 :a3403 :a3403. :a3404 :a3404 :a3404. :a3405 :a3405 :a3405. :a3406 :a3406 :a3406. :a3407 :a3407 :a3407. :a3408 :a3408 :a3408. :a3409 :a3409 :a3409. :a3410 :a3410 :a3410. :a3411 :a3411 :a3411. :a3412 :a3412 :a3412. :a3413 :a3413 :a3413. :a3414 :a3414 :a3414. :a3415 :a3415 :a3415. :a3416 :a3416 :a3416. :a3417 :a3417 :a3417. :a3418 :a3418 :a3418. :a3419 :a3419 :a3419. :a3420 :a3420 :a3420. :a3421 :a3421 :a3421. :a3422 :a3422 :a3422. :a3423 :a3423 :a3423. :a3424 :a3424 :a3424. :a3425 :a3425 :a3425. :a3426 :a3426 :a3426. :a3427 :a3427 :a3427. :a3428 :a3428 :a3428. :a3429 :a3429 :a3429. :a3430 :a3430 :a3430. :a3431 :a3431 :a3431. :a3432 :a3432 :a3432. :a3433 :a3433 :a3433. :a3434 :a3434 :a3434. :a3435 :a3435 :a3435. :a3436 :a3436 :a3436. :a3437 :a3437 :a3437. :a3438 :a3438 :a3438. :a3439 :a3439 :a3439. :a3440 :a3440 :a3440. :a3441 :a3441 :a3441. :a3442 :a3442 :a3442. :a3443 :a3443 :a3443. :a3444 :a3444 :a3444. :a3445 :a3445 :a3445. :a3446 :a3446 :a3446. :a3447 :a3447 :a3447. :a3448 :a3448 :a3448. :a3449 :a3449 :a3449. :a3450 :a3450 :a3450. :a3451 :a3451 :a3451. :a3452 :a3452 :a3452. :a3453 :a3453 :a3453. :a3454 :a3454 :a3454. :a3455 :a3455 :a3455. :a3456 :a3456 :a3456. :a3457 :a3457 :a3457. :a3458 :a3458 :a3458. :a3459 :a3459 :a3459. :a3460 :a3460 :a3460. :a3461 :a3461 :a3461. :a3462 :a3462 :a3462. :a3463 :a3463 :a3463. :a3464 :a3464 :a3464. :a3465 :a3465 :a3465. :a3466 :a3466 :a3466. :a3467 :a3467 :a3467. :a3468 :a3468 :a3468. :a3469 :a3469 :a3469. :a3470 :a3470 :a3470. :a3471 :a3471 :a3471. :a3472 :a3472 :a3472. :a3473 :a3473 :a3473. :a3474 :a3474 :a3474. :a3475 :a3475 :a3475. :a3476 :a3476 :a3476. :a3477 :a3477 :a3477. :a3478 :a3478 :a3478. :a3479 :a3479 :a3479. :a3480 :a3480 :a3480. :a3481 :a3481 :a3481. :a3482 :a3482 :a3482. :a3483 :a3483 :a3483. :a3484 :a3484 :a3484. :a3485 :a3485 :a3485. :a3486 :a3486 :a3486. :a3487 :a3487 :a3487. :a3488 :a3488 :a3488. :a3489 :a3489 :a3489. :a3490 :a3490 :a3490. :a3491 :a3491 :a3491. :a3492 :a3492 :a3492. :a3493 :a3493 :a3493. :a3494 :a3494 :a3494. :a3495 :a3495 :a3495. :a3496 :a3496 :a3496. :a3497 :a3497 :a3497. :a3498 :a3498 :a3498. :a3499 :a3499 :a3499. :a3500 :a3500 :a3500. :a3501 :a3501 :a3501. :a3502 :a3502 :a3502. :a3503 :a3503 :a3503. :a3504 :a3504 :a3504. :a3505 :a3505 :a3505. :a3506 :a3506 :a3506. :a3507 :a3507 :a3507. :a3508 :a3508 :a3508. :a3509 :a3509 :a3509. :a3510 :a3510 :a3510. :a3511 :a3511 :a3511. :a3512 :a3512 :a3512. :a3513 :a3513 :a3513. :a3514 :a3514 :a3514. :a3515 :a3515 :a3515. :a3516 :a3516 :a3516. :a3517 :a3517 :a3517. :a3518 :a3518 :a3518. :a3519 :a3519 :a3519. :a3520 :a3520 :a3520. :a3521 :a3521 :a3521. :a3522 :a3522 :a3522. :a3523 :a3523 :a3523. :a3524 :a3524 :a3524. :a3525 :a3525 :a3525. :a3526 :a3526 :a3526. :a3527 :a3527 :a3527. :a3528 :a3528 :a3528. :a3529 :a3529 :a3529. :a3530 :a3530 :a3530. :a3531 :a3531 :a3531. :a3532 :a3532 :a3532. :a3533 :a3533 :a3533. :a3534 :a3534 :a3534. :a3535 :a3535 :a3535. :a3536 :a3536 :a3536. :a3537 :a3537 :a3537. :a3538 :a3538 :a3538. :a3539 :a3539 :a3539. :a3540 :a3540 :a3540. :a3541 :a3541 :a3541. :a3542 :a3542 :a3542. :a3543 :a3543 :a3543. :a3544 :a3544 :a3544. :a3545 :a3545 :a3545. :a3546 :a3546 :a3546. :a3547 :a3547 :a3547. :a3548 :a3548 :a3548. :a3549 :a3549 :a3549. :a3550 :a3550 :a3550. :a3551 :a3551 :a3551. :a3552 :a3552 :a3552. :a3553 :a3553 :a3553. :a3554 :a3554 :a3554. :a3555 :a3555 :a3555. :a3556 :a3556 :a3556. :a3557 :a3557 :a3557. :a3558 :a3558 :a3558. :a3559 :a3559 :a3559. :a3560 :a3560 :a3560. :a3561 :a3561 :a3561. :a3562 :a3562 :a3562. :a3563 :a3563 :a3563. :a3564 :a3564 :a3564. :a3565 :a3565 :a3565. :a3566 :a3566 :a3566. :a3567 :a3567 :a3567. :a3568 :a3568 :a3568. :a3569 :a3569 :a3569. :a3570 :a3570 :a3570. :a3571 :a3571 :a3571. :a3572 :a3572 :a3572. :a3573 :a3573 :a3573. :a3574 :a3574 :a3574. :a3575 :a3575 :a3575. :a3576 :a3576 :a3576. :a3577 :a3577 :a3577. :a3578 :a3578 :a3578. :a3579 :a3579 :a3579. :a3580 :a3580 :a3580. :a3581 :a3581 :a3581. :a3582 :a3582 :a3582. :a3583 :a3583 :a3583. :a3584 :a3584 :a3584. :a3585 :a3585 :a3585. :a3586 :a3586 :a3586. :a3587 :a3587 :a3587. :a3588 :a3588 :a3588. :a3589 :a3589 :a3589. :a3590 :a3590 :a3590. :a3591 :a3591 :a3591. :a3592 :a3592 :a3592. :a3593 :a3593 :a3593. :a3594 :a3594 :a3594. :a3595 :a3595 :a3595. :a3596 :a3596 :a3596. :a3597 :a3597 :a3597. :a3598 :a3598 :a3598. :a3599 :a3599 :a3599. :a3600 :a3600 :a3600. :a3601 :a3601 :a3601. :a3602 :a3602 :a3602. :a3603 :a3603 :a3603. :a3604 :a3604 :a3604. :a3605 :a3605 :a3605. :a3606 :a3606 :a3606. :a3607 :a3607 :a3607. :a3608 :a3608 :a3608. :a3609 :a3609 :a3609. :a3610 :a3610 :a3610. :a3611 :a3611 :a3611. :a3612 :a3612 :a3612. :a3613 :a3613 :a3613. :a3614 :a3614 :a3614. :a3615 :a3615 :a3615. :a3616 :a3616 :a3616. :a3617 :a3617 :a3617. :a3618 :a3618 :a3618. :a3619 :a3619 :a3619. :a3620 :a3620 :a3620. :a3621 :a3621 :a3621. :a3622 :a3622 :a3622. :a3623 :a3623 :a3623. :a3624 :a3624 :a3624. :a3625 :a3625 :a3625. :a3626 :a3626 :a3626. :a3627 :a3627 :a3627. :a3628 :a3628 :a3628. :a3629 :a3629 :a3629. :a3630 :a3630 :a3630. :a3631 :a3631 :a3631. :a3632 :a3632 :a3632. :a3633 :a3633 :a3633. :a3634 :a3634 :a3634. :a3635 :a3635 :a3635. :a3636 :a3636 :a3636. :a3637 :a3637 :a3637. :a3638 :a3638 :a3638. :a3639 :a3639 :a3639. :a3640 :a3640 :a3640. :a3641 :a3641 :a3641. :a3642 :a3642 :a3642. :a3643 :a3643 :a3643. :a3644 :a3644 :a3644. :a3645 :a3645 :a3645. :a3646 :a3646 :a3646. :a3647 :a3647 :a3647. :a3648 :a3648 :a3648. :a3649 :a3649 :a3649. :a3650 :a3650 :a3650. :a3651 :a3651 :a3651. :a3652 :a3652 :a3652. :a3653 :a3653 :a3653. :a3654 :a3654 :a3654. :a3655 :a3655 :a3655. :a3656 :a3656 :a3656. :a3657 :a3657 :a3657. :a3658 :a3658 :a3658. :a3659 :a3659 :a3659. :a3660 :a3660 :a3660. :a3661 :a3661 :a3661. :a3662 :a3662 :a3662. :a3663 :a3663 :a3663. :a3664 :a3664 :a3664. :a3665 :a3665 :a3665. :a3666 :a3666 :a3666. :a3667 :a3667 :a3667. :a3668 :a3668 :a3668. :a3669 :a3669 :a3669. :a3670 :a3670 :a3670. :a3671 :a3671 :a3671. :a3672 :a3672 :a3672. :a3673 :a3673 :a3673. :a3674 :a3674 :a3674. :a3675 :a3675 :a3675. :a3676 :a3676 :a3676. :a3677 :a3677 :a3677. :a3678 :a3678 :a3678. :a3679 :a3679 :a3679. :a3680 :a3680 :a3680. :a3681 :a3681 :a3681. :a3682 :a3682 :a3682. :a3683 :a3683 :a3683. :a3684 :a3684 :a3684. :a3685 :a3685 :a3685. :a3686 :a3686 :a3686. :a3687 :a3687 :a3687. :a3688 :a3688 :a3688. :a3689 :a3689 :a3689. :a3690 :a3690 :a3690. :a3691 :a3691 :a3691. :a3692 :a3692 :a3692. :a3693 :a3693 :a3693. :a3694 :a3694 :a3694. :a3695 :a3695 :a3695. :a3696 :a3696 :a3696. :a3697 :a3697 :a3697. :a3698 :a3698 :a3698. :a3699 :a3699 :a3699. :a3700 :a3700 :a3700. :a3701 :a3701 :a3701. :a3702 :a3702 :a3702. :a3703 :a3703 :a3703. :a3704 :a3704 :a3704. :a3705 :a3705 :a3705. :a3706 :a3706 :a3706. :a3707 :a3707 :a3707. :a3708 :a3708 :a3708. :a3709 :a3709 :a3709. :a3710 :a3710 :a3710. :a3711 :a3711 :a3711. :a3712 :a3712 :a3712. :a3713 :a3713 :a3713. :a3714 :a3714 :a3714. :a3715 :a3715 :a3715. :a3716 :a3716 :a3716. :a3717 :a3717 :a3717. :a3718 :a3718 :a3718. :a3719 :a3719 :a3719. :a3720 :a3720 :a3720. :a3721 :a3721 :a3721. :a3722 :a3722 :a3722. :a3723 :a3723 :a3723. :a3724 :a3724 :a3724. :a3725 :a3725 :a3725. :a3726 :a3726 :a3726. :a3727 :a3727 :a3727. :a3728 :a3728 :a3728. :a3729 :a3729 :a3729. :a3730 :a3730 :a3730. :a3731 :a3731 :a3731. :a3732 :a3732 :a3732. :a3733 :a3733 :a3733. :a3734 :a3734 :a3734. :a3735 :a3735 :a3735. :a3736 :a3736 :a3736. :a3737 :a3737 :a3737. :a3738 :a3738 :a3738. :a3739 :a3739 :a3739. :a3740 :a3740 :a3740. :a3741 :a3741 :a3741. :a3742 :a3742 :a3742. :a3743 :a3743 :a3743. :a3744 :a3744 :a3744. :a3745 :a3745 :a3745. :a3746 :a3746 :a3746. :a3747 :a3747 :a3747. :a3748 :a3748 :a3748. :a3749 :a3749 :a3749. :a3750 :a3750 :a3750. :a3751 :a3751 :a3751. :a3752 :a3752 :a3752. :a3753 :a3753 :a3753. :a3754 :a3754 :a3754. :a3755 :a3755 :a3755. :a3756 :a3756 :a3756. :a3757 :a3757 :a3757. :a3758 :a3758 :a3758. :a3759 :a3759 :a3759. :a3760 :a3760 :a3760. :a3761 :a3761 :a3761. :a3762 :a3762 :a3762. :a3763 :a3763 :a3763. :a3764 :a3764 :a3764. :a3765 :a3765 :a3765. :a3766 :a3766 :a3766. :a3767 :a3767 :a3767. :a3768 :a3768 :a3768. :a3769 :a3769 :a3769. :a3770 :a3770 :a3770. :a3771 :a3771 :a3771. :a3772 :a3772 :a3772. :a3773 :a3773 :a3773. :a3774 :a3774 :a3774. :a3775 :a3775 :a3775. :a3776 :a3776 :a3776. :a3777 :a3777 :a3777. :a3778 :a3778 :a3778. :a3779 :a3779 :a3779. :a3780 :a3780 :a3780. :a3781 :a3781 :a3781. :a3782 :a3782 :a3782. :a3783 :a3783 :a3783. :a3784 :a3784 :a3784. :a3785 :a3785 :a3785. :a3786 :a3786 :a3786. :a3787 :a3787 :a3787. :a3788 :a3788 :a3788. :a3789 :a3789 :a3789. :a3790 :a3790 :a3790. :a3791 :a3791 :a3791. :a3792 :a3792 :a3792. :a3793 :a3793 :a3793. :a3794 :a3794 :a3794. :a3795 :a3795 :a3795. :a3796 :a3796 :a3796. :a3797 :a3797 :a3797. :a3798 :a3798 :a3798. :a3799 :a3799 :a3799. :a3800 :a3800 :a3800. :a3801 :a3801 :a3801. :a3802 :a3802 :a3802. :a3803 :a3803 :a3803. :a3804 :a3804 :a3804. :a3805 :a3805 :a3805. :a3806 :a3806 :a3806. :a3807 :a3807 :a3807. :a3808 :a3808 :a3808. :a3809 :a3809 :a3809. :a3810 :a3810 :a3810. :a3811 :a3811 :a3811. :a3812 :a3812 :a3812. :a3813 :a3813 :a3813. :a3814 :a3814 :a3814. :a3815 :a3815 :a3815. :a3816 :a3816 :a3816. :a3817 :a3817 :a3817. :a3818 :a3818 :a3818. :a3819 :a3819 :a3819. :a3820 :a3820 :a3820. :a3821 :a3821 :a3821. :a3822 :a3822 :a3822. :a3823 :a3823 :a3823. :a3824 :a3824 :a3824. :a3825 :a3825 :a3825. :a3826 :a3826 :a3826. :a3827 :a3827 :a3827. :a3828 :a3828 :a3828. :a3829 :a3829 :a3829. :a3830 :a3830 :a3830. :a3831 :a3831 :a3831. :a3832 :a3832 :a3832. :a3833 :a3833 :a3833. :a3834 :a3834 :a3834. :a3835 :a3835 :a3835. :a3836 :a3836 :a3836. :a3837 :a3837 :a3837. :a3838 :a3838 :a3838. :a3839 :a3839 :a3839. :a3840 :a3840 :a3840. :a3841 :a3841 :a3841. :a3842 :a3842 :a3842. :a3843 :a3843 :a3843. :a3844 :a3844 :a3844. :a3845 :a3845 :a3845. :a3846 :a3846 :a3846. :a3847 :a3847 :a3847. :a3848 :a3848 :a3848. :a3849 :a3849 :a3849. :a3850 :a3850 :a3850. :a3851 :a3851 :a3851. :a3852 :a3852 :a3852. :a3853 :a3853 :a3853. :a3854 :a3854 :a3854. :a3855 :a3855 :a3855. :a3856 :a3856 :a3856. :a3857 :a3857 :a3857. :a3858 :a3858 :a3858. :a3859 :a3859 :a3859. :a3860 :a3860 :a3860. :a3861 :a3861 :a3861. :a3862 :a3862 :a3862. :a3863 :a3863 :a3863. :a3864 :a3864 :a3864. :a3865 :a3865 :a3865. :a3866 :a3866 :a3866. :a3867 :a3867 :a3867. :a3868 :a3868 :a3868. :a3869 :a3869 :a3869. :a3870 :a3870 :a3870. :a3871 :a3871 :a3871. :a3872 :a3872 :a3872. :a3873 :a3873 :a3873. :a3874 :a3874 :a3874. :a3875 :a3875 :a3875. :a3876 :a3876 :a3876. :a3877 :a3877 :a3877. :a3878 :a3878 :a3878. :a3879 :a3879 :a3879. :a3880 :a3880 :a3880. :a3881 :a3881 :a3881. :a3882 :a3882 :a3882. :a3883 :a3883 :a3883. :a3884 :a3884 :a3884. :a3885 :a3885 :a3885. :a3886 :a3886 :a3886. :a3887 :a3887 :a3887. :a3888 :a3888 :a3888. :a3889 :a3889 :a3889. :a3890 :a3890 :a3890. :a3891 :a3891 :a3891. :a3892 :a3892 :a3892. :a3893 :a3893 :a3893. :a3894 :a3894 :a3894. :a3895 :a3895 :a3895. :a3896 :a3896 :a3896. :a3897 :a3897 :a3897. :a3898 :a3898 :a3898. :a3899 :a3899 :a3899. :a3900 :a3900 :a3900. :a3901 :a3901 :a3901. :a3902 :a3902 :a3902. :a3903 :a3903 :a3903. :a3904 :a3904 :a3904. :a3905 :a3905 :a3905. :a3906 :a3906 :a3906. :a3907 :a3907 :a3907. :a3908 :a3908 :a3908. :a3909 :a3909 :a3909. :a3910 :a3910 :a3910. :a3911 :a3911 :a3911. :a3912 :a3912 :a3912. :a3913 :a3913 :a3913. :a3914 :a3914 :a3914. :a3915 :a3915 :a3915. :a3916 :a3916 :a3916. :a3917 :a3917 :a3917. :a3918 :a3918 :a3918. :a3919 :a3919 :a3919. :a3920 :a3920 :a3920. :a3921 :a3921 :a3921. :a3922 :a3922 :a3922. :a3923 :a3923 :a3923. :a3924 :a3924 :a3924. :a3925 :a3925 :a3925. :a3926 :a3926 :a3926. :a3927 :a3927 :a3927. :a3928 :a3928 :a3928. :a3929 :a3929 :a3929. :a3930 :a3930 :a3930. :a3931 :a3931 :a3931. :a3932 :a3932 :a3932. :a3933 :a3933 :a3933. :a3934 :a3934 :a3934. :a3935 :a3935 :a3935. :a3936 :a3936 :a3936. :a3937 :a3937 :a3937. :a3938 :a3938 :a3938. :a3939 :a3939 :a3939. :a3940 :a3940 :a3940. :a3941 :a3941 :a3941. :a3942 :a3942 :a3942. :a3943 :a3943 :a3943. :a3944 :a3944 :a3944. :a3945 :a3945 :a3945. :a3946 :a3946 :a3946. :a3947 :a3947 :a3947. :a3948 :a3948 :a3948. :a3949 :a3949 :a3949. :a3950 :a3950 :a3950. :a3951 :a3951 :a3951. :a3952 :a3952 :a3952. :a3953 :a3953 :a3953. :a3954 :a3954 :a3954. :a3955 :a3955 :a3955. :a3956 :a3956 :a3956. :a3957 :a3957 :a3957. :a3958 :a3958 :a3958. :a3959 :a3959 :a3959. :a3960 :a3960 :a3960. :a3961 :a3961 :a3961. :a3962 :a3962 :a3962. :a3963 :a3963 :a3963. :a3964 :a3964 :a3964. :a3965 :a3965 :a3965. :a3966 :a3966 :a3966. :a3967 :a3967 :a3967. :a3968 :a3968 :a3968. :a3969 :a3969 :a3969. :a3970 :a3970 :a3970. :a3971 :a3971 :a3971. :a3972 :a3972 :a3972. :a3973 :a3973 :a3973. :a3974 :a3974 :a3974. :a3975 :a3975 :a3975. :a3976 :a3976 :a3976. :a3977 :a3977 :a3977. :a3978 :a3978 :a3978. :a3979 :a3979 :a3979. :a3980 :a3980 :a3980. :a3981 :a3981 :a3981. :a3982 :a3982 :a3982. :a3983 :a3983 :a3983. :a3984 :a3984 :a3984. :a3985 :a3985 :a3985. :a3986 :a3986 :a3986. :a3987 :a3987 :a3987. :a3988 :a3988 :a3988. :a3989 :a3989 :a3989. :a3990 :a3990 :a3990. :a3991 :a3991 :a3991. :a3992 :a3992 :a3992. :a3993 :a3993 :a3993. :a3994 :a3994 :a3994. :a3995 :a3995 :a3995. :a3996 :a3996 :a3996. :a3997 :a3997 :a3997. :a3998 :a3998 :a3998. :a3999 :a3999 :a3999. :a4000 :a4000 :a4000. :a4001 :a4001 :a4001. :a4002 :a4002 :a4002. :a4003 :a4003 :a4003. :a4004 :a4004 :a4004. :a4005 :a4005 :a4005. :a4006 :a4006 :a4006. :a4007 :a4007 :a4007. :a4008 :a4008 :a4008. :a4009 :a4009 :a4009. :a4010 :a4010 :a4010. :a4011 :a4011 :a4011. :a4012 :a4012 :a4012. :a4013 :a4013 :a4013. :a4014 :a4014 :a4014. :a4015 :a4015 :a4015. :a4016 :a4016 :a4016. :a4017 :a4017 :a4017. :a4018 :a4018 :a4018. :a4019 :a4019 :a4019. :a4020 :a4020 :a4020. :a4021 :a4021 :a4021. :a4022 :a4022 :a4022. :a4023 :a4023 :a4023. :a4024 :a4024 :a4024. :a4025 :a4025 :a4025. :a4026 :a4026 :a4026. :a4027 :a4027 :a4027. :a4028 :a4028 :a4028. :a4029 :a4029 :a4029. :a4030 :a4030 :a4030. :a4031 :a4031 :a4031. :a4032 :a4032 :a4032. :a4033 :a4033 :a4033. :a4034 :a4034 :a4034. :a4035 :a4035 :a4035. :a4036 :a4036 :a4036. :a4037 :a4037 :a4037. :a4038 :a4038 :a4038. :a4039 :a4039 :a4039. :a4040 :a4040 :a4040. :a4041 :a4041 :a4041. :a4042 :a4042 :a4042. :a4043 :a4043 :a4043. :a4044 :a4044 :a4044. :a4045 :a4045 :a4045. :a4046 :a4046 :a4046. :a4047 :a4047 :a4047. :a4048 :a4048 :a4048. :a4049 :a4049 :a4049. :a4050 :a4050 :a4050. :a4051 :a4051 :a4051. :a4052 :a4052 :a4052. :a4053 :a4053 :a4053. :a4054 :a4054 :a4054. :a4055 :a4055 :a4055. :a4056 :a4056 :a4056. :a4057 :a4057 :a4057. :a4058 :a4058 :a4058. :a4059 :a4059 :a4059. :a4060 :a4060 :a4060. :a4061 :a4061 :a4061. :a4062 :a4062 :a4062. :a4063 :a4063 :a4063. :a4064 :a4064 :a4064. :a4065 :a4065 :a4065. :a4066 :a4066 :a4066. :a4067 :a4067 :a4067. :a4068 :a4068 :a4068. :a4069 :a4069 :a4069. :a4070 :a4070 :a4070. :a4071 :a4071 :a4071. :a4072 :a4072 :a4072. :a4073 :a4073 :a4073. :a4074 :a4074 :a4074. :a4075 :a4075 :a4075. :a4076 :a4076 :a4076. :a4077 :a4077 :a4077. :a4078 :a4078 :a4078. :a4079 :a4079 :a4079. :a4080 :a4080 :a4080. :a4081 :a4081 :a4081. :a4082 :a4082 :a4082. :a4083 :a4083 :a4083. :a4084 :a4084 :a4084. :a4085 :a4085 :a4085. :a4086 :a4086 :a4086. :a4087 :a4087 :a4087. :a4088 :a4088 :a4088. :a4089 :a4089 :a4089. :a4090 :a4090 :a4090. :a4091 :a4091 :a4091. :a4092 :a4092 :a4092. :a4093 :a4093 :a4093. :a4094 :a4094 :a4094. :a4095 :a4095 :a4095. :a4096 :a4096 :a4096. :a4097 :a4097 :a4097. :a4098 :a4098 :a4098. :a4099 :a4099 :a4099. :a4100 :a4100 :a4100. :a4101 :a4101 :a4101. :a4102 :a4102 :a4102. :a4103 :a4103 :a4103. :a4104 :a4104 :a4104. :a4105 :a4105 :a4105. :a4106 :a4106 :a4106. :a4107 :a4107 :a4107. :a4108 :a4108 :a4108. :a4109 :a4109 :a4109. :a4110 :a4110 :a4110. :a4111 :a4111 :a4111. :a4112 :a4112 :a4112. :a4113 :a4113 :a4113. :a4114 :a4114 :a4114. :a4115 :a4115 :a4115. :a4116 :a4116 :a4116. :a4117 :a4117 :a4117. :a4118 :a4118 :a4118. :a4119 :a4119 :a4119. :a4120 :a4120 :a4120. :a4121 :a4121 :a4121. :a4122 :a4122 :a4122. :a4123 :a4123 :a4123. :a4124 :a4124 :a4124. :a4125 :a4125 :a4125. :a4126 :a4126 :a4126. :a4127 :a4127 :a4127. :a4128 :a4128 :a4128. :a4129 :a4129 :a4129. :a4130 :a4130 :a4130. :a4131 :a4131 :a4131. :a4132 :a4132 :a4132. :a4133 :a4133 :a4133. :a4134 :a4134 :a4134. :a4135 :a4135 :a4135. :a4136 :a4136 :a4136. :a4137 :a4137 :a4137. :a4138 :a4138 :a4138. :a4139 :a4139 :a4139. :a4140 :a4140 :a4140. :a4141 :a4141 :a4141. :a4142 :a4142 :a4142. :a4143 :a4143 :a4143. :a4144 :a4144 :a4144. :a4145 :a4145 :a4145. :a4146 :a4146 :a4146. :a4147 :a4147 :a4147. :a4148 :a4148 :a4148. :a4149 :a4149 :a4149. :a4150 :a4150 :a4150. :a4151 :a4151 :a4151. :a4152 :a4152 :a4152. :a4153 :a4153 :a4153. :a4154 :a4154 :a4154. :a4155 :a4155 :a4155. :a4156 :a4156 :a4156. :a4157 :a4157 :a4157. :a4158 :a4158 :a4158. :a4159 :a4159 :a4159. :a4160 :a4160 :a4160. :a4161 :a4161 :a4161. :a4162 :a4162 :a4162. :a4163 :a4163 :a4163. :a4164 :a4164 :a4164. :a4165 :a4165 :a4165. :a4166 :a4166 :a4166. :a4167 :a4167 :a4167. :a4168 :a4168 :a4168. :a4169 :a4169 :a4169. :a4170 :a4170 :a4170. :a4171 :a4171 :a4171. :a4172 :a4172 :a4172. :a4173 :a4173 :a4173. :a4174 :a4174 :a4174. :a4175 :a4175 :a4175. :a4176 :a4176 :a4176. :a4177 :a4177 :a4177. :a4178 :a4178 :a4178. :a4179 :a4179 :a4179. :a4180 :a4180 :a4180. :a4181 :a4181 :a4181. :a4182 :a4182 :a4182. :a4183 :a4183 :a4183. :a4184 :a4184 :a4184. :a4185 :a4185 :a4185. :a4186 :a4186 :a4186. :a4187 :a4187 :a4187. :a4188 :a4188 :a4188. :a4189 :a4189 :a4189. :a4190 :a4190 :a4190. :a4191 :a4191 :a4191. :a4192 :a4192 :a4192. :a4193 :a4193 :a4193. :a4194 :a4194 :a4194. :a4195 :a4195 :a4195. :a4196 :a4196 :a4196. :a4197 :a4197 :a4197. :a4198 :a4198 :a4198. :a4199 :a4199 :a4199. :a4200 :a4200 :a4200. :a4201 :a4201 :a4201. :a4202 :a4202 :a4202. :a4203 :a4203 :a4203. :a4204 :a4204 :a4204. :a4205 :a4205 :a4205. :a4206 :a4206 :a4206. :a4207 :a4207 :a4207. :a4208 :a4208 :a4208. :a4209 :a4209 :a4209. :a4210 :a4210 :a4210. :a4211 :a4211 :a4211. :a4212 :a4212 :a4212. :a4213 :a4213 :a4213. :a4214 :a4214 :a4214. :a4215 :a4215 :a4215. :a4216 :a4216 :a4216. :a4217 :a4217 :a4217. :a4218 :a4218 :a4218. :a4219 :a4219 :a4219. :a4220 :a4220 :a4220. :a4221 :a4221 :a4221. :a4222 :a4222 :a4222. :a4223 :a4223 :a4223. :a4224 :a4224 :a4224. :a4225 :a4225 :a4225. :a4226 :a4226 :a4226. :a4227 :a4227 :a4227. :a4228 :a4228 :a4228. :a4229 :a4229 :a4229. :a4230 :a4230 :a4230. :a4231 :a4231 :a4231. :a4232 :a4232 :a4232. :a4233 :a4233 :a4233. :a4234 :a4234 :a4234. :a4235 :a4235 :a4235. :a4236 :a4236 :a4236. :a4237 :a4237 :a4237. :a4238 :a4238 :a4238. :a4239 :a4239 :a4239. :a4240 :a4240 :a4240. :a4241 :a4241 :a4241. :a4242 :a4242 :a4242. :a4243 :a4243 :a4243. :a4244 :a4244 :a4244. :a4245 :a4245 :a4245. :a4246 :a4246 :a4246. :a4247 :a4247 :a4247. :a4248 :a4248 :a4248. :a4249 :a4249 :a4249. :a4250 :a4250 :a4250. :a4251 :a4251 :a4251. :a4252 :a4252 :a4252. :a4253 :a4253 :a4253. :a4254 :a4254 :a4254. :a4255 :a4255 :a4255. :a4256 :a4256 :a4256. :a4257 :a4257 :a4257. :a4258 :a4258 :a4258. :a4259 :a4259 :a4259. :a4260 :a4260 :a4260. :a4261 :a4261 :a4261. :a4262 :a4262 :a4262. :a4263 :a4263 :a4263. :a4264 :a4264 :a4264. :a4265 :a4265 :a4265. :a4266 :a4266 :a4266. :a4267 :a4267 :a4267. :a4268 :a4268 :a4268. :a4269 :a4269 :a4269. :a4270 :a4270 :a4270. :a4271 :a4271 :a4271. :a4272 :a4272 :a4272. :a4273 :a4273 :a4273. :a4274 :a4274 :a4274. :a4275 :a4275 :a4275. :a4276 :a4276 :a4276. :a4277 :a4277 :a4277. :a4278 :a4278 :a4278. :a4279 :a4279 :a4279. :a4280 :a4280 :a4280. :a4281 :a4281 :a4281. :a4282 :a4282 :a4282. :a4283 :a4283 :a4283. :a4284 :a4284 :a4284. :a4285 :a4285 :a4285. :a4286 :a4286 :a4286. :a4287 :a4287 :a4287. :a4288 :a4288 :a4288. :a4289 :a4289 :a4289. :a4290 :a4290 :a4290. :a4291 :a4291 :a4291. :a4292 :a4292 :a4292. :a4293 :a4293 :a4293. :a4294 :a4294 :a4294. :a4295 :a4295 :a4295. :a4296 :a4296 :a4296. :a4297 :a4297 :a4297. :a4298 :a4298 :a4298. :a4299 :a4299 :a4299. :a4300 :a4300 :a4300. :a4301 :a4301 :a4301. :a4302 :a4302 :a4302. :a4303 :a4303 :a4303. :a4304 :a4304 :a4304. :a4305 :a4305 :a4305. :a4306 :a4306 :a4306. :a4307 :a4307 :a4307. :a4308 :a4308 :a4308. :a4309 :a4309 :a4309. :a4310 :a4310 :a4310. :a4311 :a4311 :a4311. :a4312 :a4312 :a4312. :a4313 :a4313 :a4313. :a4314 :a4314 :a4314. :a4315 :a4315 :a4315. :a4316 :a4316 :a4316. :a4317 :a4317 :a4317. :a4318 :a4318 :a4318. :a4319 :a4319 :a4319. :a4320 :a4320 :a4320. :a4321 :a4321 :a4321. :a4322 :a4322 :a4322. :a4323 :a4323 :a4323. :a4324 :a4324 :a4324. :a4325 :a4325 :a4325. :a4326 :a4326 :a4326. :a4327 :a4327 :a4327. :a4328 :a4328 :a4328. :a4329 :a4329 :a4329. :a4330 :a4330 :a4330. :a4331 :a4331 :a4331. :a4332 :a4332 :a4332. :a4333 :a4333 :a4333. :a4334 :a4334 :a4334. :a4335 :a4335 :a4335. :a4336 :a4336 :a4336. :a4337 :a4337 :a4337. :a4338 :a4338 :a4338. :a4339 :a4339 :a4339. :a4340 :a4340 :a4340. :a4341 :a4341 :a4341. :a4342 :a4342 :a4342. :a4343 :a4343 :a4343. :a4344 :a4344 :a4344. :a4345 :a4345 :a4345. :a4346 :a4346 :a4346. :a4347 :a4347 :a4347. :a4348 :a4348 :a4348. :a4349 :a4349 :a4349. :a4350 :a4350 :a4350. :a4351 :a4351 :a4351. :a4352 :a4352 :a4352. :a4353 :a4353 :a4353. :a4354 :a4354 :a4354. :a4355 :a4355 :a4355. :a4356 :a4356 :a4356. :a4357 :a4357 :a4357. :a4358 :a4358 :a4358. :a4359 :a4359 :a4359. :a4360 :a4360 :a4360. :a4361 :a4361 :a4361. :a4362 :a4362 :a4362. :a4363 :a4363 :a4363. :a4364 :a4364 :a4364. :a4365 :a4365 :a4365. :a4366 :a4366 :a4366. :a4367 :a4367 :a4367. :a4368 :a4368 :a4368. :a4369 :a4369 :a4369. :a4370 :a4370 :a4370. :a4371 :a4371 :a4371. :a4372 :a4372 :a4372. :a4373 :a4373 :a4373. :a4374 :a4374 :a4374. :a4375 :a4375 :a4375. :a4376 :a4376 :a4376. :a4377 :a4377 :a4377. :a4378 :a4378 :a4378. :a4379 :a4379 :a4379. :a4380 :a4380 :a4380. :a4381 :a4381 :a4381. :a4382 :a4382 :a4382. :a4383 :a4383 :a4383. :a4384 :a4384 :a4384. :a4385 :a4385 :a4385. :a4386 :a4386 :a4386. :a4387 :a4387 :a4387. :a4388 :a4388 :a4388. :a4389 :a4389 :a4389. :a4390 :a4390 :a4390. :a4391 :a4391 :a4391. :a4392 :a4392 :a4392. :a4393 :a4393 :a4393. :a4394 :a4394 :a4394. :a4395 :a4395 :a4395. :a4396 :a4396 :a4396. :a4397 :a4397 :a4397. :a4398 :a4398 :a4398. :a4399 :a4399 :a4399. :a4400 :a4400 :a4400. :a4401 :a4401 :a4401. :a4402 :a4402 :a4402. :a4403 :a4403 :a4403. :a4404 :a4404 :a4404. :a4405 :a4405 :a4405. :a4406 :a4406 :a4406. :a4407 :a4407 :a4407. :a4408 :a4408 :a4408. :a4409 :a4409 :a4409. :a4410 :a4410 :a4410. :a4411 :a4411 :a4411. :a4412 :a4412 :a4412. :a4413 :a4413 :a4413. :a4414 :a4414 :a4414. :a4415 :a4415 :a4415. :a4416 :a4416 :a4416. :a4417 :a4417 :a4417. :a4418 :a4418 :a4418. :a4419 :a4419 :a4419. :a4420 :a4420 :a4420. :a4421 :a4421 :a4421. :a4422 :a4422 :a4422. :a4423 :a4423 :a4423. :a4424 :a4424 :a4424. :a4425 :a4425 :a4425. :a4426 :a4426 :a4426. :a4427 :a4427 :a4427. :a4428 :a4428 :a4428. :a4429 :a4429 :a4429. :a4430 :a4430 :a4430. :a4431 :a4431 :a4431. :a4432 :a4432 :a4432. :a4433 :a4433 :a4433. :a4434 :a4434 :a4434. :a4435 :a4435 :a4435. :a4436 :a4436 :a4436. :a4437 :a4437 :a4437. :a4438 :a4438 :a4438. :a4439 :a4439 :a4439. :a4440 :a4440 :a4440. :a4441 :a4441 :a4441. :a4442 :a4442 :a4442. :a4443 :a4443 :a4443. :a4444 :a4444 :a4444. :a4445 :a4445 :a4445. :a4446 :a4446 :a4446. :a4447 :a4447 :a4447. :a4448 :a4448 :a4448. :a4449 :a4449 :a4449. :a4450 :a4450 :a4450. :a4451 :a4451 :a4451. :a4452 :a4452 :a4452. :a4453 :a4453 :a4453. :a4454 :a4454 :a4454. :a4455 :a4455 :a4455. :a4456 :a4456 :a4456. :a4457 :a4457 :a4457. :a4458 :a4458 :a4458. :a4459 :a4459 :a4459. :a4460 :a4460 :a4460. :a4461 :a4461 :a4461. :a4462 :a4462 :a4462. :a4463 :a4463 :a4463. :a4464 :a4464 :a4464. :a4465 :a4465 :a4465. :a4466 :a4466 :a4466. :a4467 :a4467 :a4467. :a4468 :a4468 :a4468. :a4469 :a4469 :a4469. :a4470 :a4470 :a4470. :a4471 :a4471 :a4471. :a4472 :a4472 :a4472. :a4473 :a4473 :a4473. :a4474 :a4474 :a4474. :a4475 :a4475 :a4475. :a4476 :a4476 :a4476. :a4477 :a4477 :a4477. :a4478 :a4478 :a4478. :a4479 :a4479 :a4479. :a4480 :a4480 :a4480. :a4481 :a4481 :a4481. :a4482 :a4482 :a4482. :a4483 :a4483 :a4483. :a4484 :a4484 :a4484. :a4485 :a4485 :a4485. :a4486 :a4486 :a4486. :a4487 :a4487 :a4487. :a4488 :a4488 :a4488. :a4489 :a4489 :a4489. :a4490 :a4490 :a4490. :a4491 :a4491 :a4491. :a4492 :a4492 :a4492. :a4493 :a4493 :a4493. :a4494 :a4494 :a4494. :a4495 :a4495 :a4495. :a4496 :a4496 :a4496. :a4497 :a4497 :a4497. :a4498 :a4498 :a4498. :a4499 :a4499 :a4499. :a4500 :a4500 :a4500. :a4501 :a4501 :a4501. :a4502 :a4502 :a4502. :a4503 :a4503 :a4503. :a4504 :a4504 :a4504. :a4505 :a4505 :a4505. :a4506 :a4506 :a4506. :a4507 :a4507 :a4507. :a4508 :a4508 :a4508. :a4509 :a4509 :a4509. :a4510 :a4510 :a4510. :a4511 :a4511 :a4511. :a4512 :a4512 :a4512. :a4513 :a4513 :a4513. :a4514 :a4514 :a4514. :a4515 :a4515 :a4515. :a4516 :a4516 :a4516. :a4517 :a4517 :a4517. :a4518 :a4518 :a4518. :a4519 :a4519 :a4519. :a4520 :a4520 :a4520. :a4521 :a4521 :a4521. :a4522 :a4522 :a4522. :a4523 :a4523 :a4523. :a4524 :a4524 :a4524. :a4525 :a4525 :a4525. :a4526 :a4526 :a4526. :a4527 :a4527 :a4527. :a4528 :a4528 :a4528. :a4529 :a4529 :a4529. :a4530 :a4530 :a4530. :a4531 :a4531 :a4531. :a4532 :a4532 :a4532. :a4533 :a4533 :a4533. :a4534 :a4534 :a4534. :a4535 :a4535 :a4535. :a4536 :a4536 :a4536. :a4537 :a4537 :a4537. :a4538 :a4538 :a4538. :a4539 :a4539 :a4539. :a4540 :a4540 :a4540. :a4541 :a4541 :a4541. :a4542 :a4542 :a4542. :a4543 :a4543 :a4543. :a4544 :a4544 :a4544. :a4545 :a4545 :a4545. :a4546 :a4546 :a4546. :a4547 :a4547 :a4547. :a4548 :a4548 :a4548. :a4549 :a4549 :a4549. :a4550 :a4550 :a4550. :a4551 :a4551 :a4551. :a4552 :a4552 :a4552. :a4553 :a4553 :a4553. :a4554 :a4554 :a4554. :a4555 :a4555 :a4555. :a4556 :a4556 :a4556. :a4557 :a4557 :a4557. :a4558 :a4558 :a4558. :a4559 :a4559 :a4559. :a4560 :a4560 :a4560. :a4561 :a4561 :a4561. :a4562 :a4562 :a4562. :a4563 :a4563 :a4563. :a4564 :a4564 :a4564. :a4565 :a4565 :a4565. :a4566 :a4566 :a4566. :a4567 :a4567 :a4567. :a4568 :a4568 :a4568. :a4569 :a4569 :a4569. :a4570 :a4570 :a4570. :a4571 :a4571 :a4571. :a4572 :a4572 :a4572. :a4573 :a4573 :a4573. :a4574 :a4574 :a4574. :a4575 :a4575 :a4575. :a4576 :a4576 :a4576. :a4577 :a4577 :a4577. :a4578 :a4578 :a4578. :a4579 :a4579 :a4579. :a4580 :a4580 :a4580. :a4581 :a4581 :a4581. :a4582 :a4582 :a4582. :a4583 :a4583 :a4583. :a4584 :a4584 :a4584. :a4585 :a4585 :a4585. :a4586 :a4586 :a4586. :a4587 :a4587 :a4587. :a4588 :a4588 :a4588. :a4589 :a4589 :a4589. :a4590 :a4590 :a4590. :a4591 :a4591 :a4591. :a4592 :a4592 :a4592. :a4593 :a4593 :a4593. :a4594 :a4594 :a4594. :a4595 :a4595 :a4595. :a4596 :a4596 :a4596. :a4597 :a4597 :a4597. :a4598 :a4598 :a4598. :a4599 :a4599 :a4599. :a4600 :a4600 :a4600. :a4601 :a4601 :a4601. :a4602 :a4602 :a4602. :a4603 :a4603 :a4603. :a4604 :a4604 :a4604. :a4605 :a4605 :a4605. :a4606 :a4606 :a4606. :a4607 :a4607 :a4607. :a4608 :a4608 :a4608. :a4609 :a4609 :a4609. :a4610 :a4610 :a4610. :a4611 :a4611 :a4611. :a4612 :a4612 :a4612. :a4613 :a4613 :a4613. :a4614 :a4614 :a4614. :a4615 :a4615 :a4615. :a4616 :a4616 :a4616. :a4617 :a4617 :a4617. :a4618 :a4618 :a4618. :a4619 :a4619 :a4619. :a4620 :a4620 :a4620. :a4621 :a4621 :a4621. :a4622 :a4622 :a4622. :a4623 :a4623 :a4623. :a4624 :a4624 :a4624. :a4625 :a4625 :a4625. :a4626 :a4626 :a4626. :a4627 :a4627 :a4627. :a4628 :a4628 :a4628. :a4629 :a4629 :a4629. :a4630 :a4630 :a4630. :a4631 :a4631 :a4631. :a4632 :a4632 :a4632. :a4633 :a4633 :a4633. :a4634 :a4634 :a4634. :a4635 :a4635 :a4635. :a4636 :a4636 :a4636. :a4637 :a4637 :a4637. :a4638 :a4638 :a4638. :a4639 :a4639 :a4639. :a4640 :a4640 :a4640. :a4641 :a4641 :a4641. :a4642 :a4642 :a4642. :a4643 :a4643 :a4643. :a4644 :a4644 :a4644. :a4645 :a4645 :a4645. :a4646 :a4646 :a4646. :a4647 :a4647 :a4647. :a4648 :a4648 :a4648. :a4649 :a4649 :a4649. :a4650 :a4650 :a4650. :a4651 :a4651 :a4651. :a4652 :a4652 :a4652. :a4653 :a4653 :a4653. :a4654 :a4654 :a4654. :a4655 :a4655 :a4655. :a4656 :a4656 :a4656. :a4657 :a4657 :a4657. :a4658 :a4658 :a4658. :a4659 :a4659 :a4659. :a4660 :a4660 :a4660. :a4661 :a4661 :a4661. :a4662 :a4662 :a4662. :a4663 :a4663 :a4663. :a4664 :a4664 :a4664. :a4665 :a4665 :a4665. :a4666 :a4666 :a4666. :a4667 :a4667 :a4667. :a4668 :a4668 :a4668. :a4669 :a4669 :a4669. :a4670 :a4670 :a4670. :a4671 :a4671 :a4671. :a4672 :a4672 :a4672. :a4673 :a4673 :a4673. :a4674 :a4674 :a4674. :a4675 :a4675 :a4675. :a4676 :a4676 :a4676. :a4677 :a4677 :a4677. :a4678 :a4678 :a4678. :a4679 :a4679 :a4679. :a4680 :a4680 :a4680. :a4681 :a4681 :a4681. :a4682 :a4682 :a4682. :a4683 :a4683 :a4683. :a4684 :a4684 :a4684. :a4685 :a4685 :a4685. :a4686 :a4686 :a4686. :a4687 :a4687 :a4687. :a4688 :a4688 :a4688. :a4689 :a4689 :a4689. :a4690 :a4690 :a4690. :a4691 :a4691 :a4691. :a4692 :a4692 :a4692. :a4693 :a4693 :a4693. :a4694 :a4694 :a4694. :a4695 :a4695 :a4695. :a4696 :a4696 :a4696. :a4697 :a4697 :a4697. :a4698 :a4698 :a4698. :a4699 :a4699 :a4699. :a4700 :a4700 :a4700. :a4701 :a4701 :a4701. :a4702 :a4702 :a4702. :a4703 :a4703 :a4703. :a4704 :a4704 :a4704. :a4705 :a4705 :a4705. :a4706 :a4706 :a4706. :a4707 :a4707 :a4707. :a4708 :a4708 :a4708. :a4709 :a4709 :a4709. :a4710 :a4710 :a4710. :a4711 :a4711 :a4711. :a4712 :a4712 :a4712. :a4713 :a4713 :a4713. :a4714 :a4714 :a4714. :a4715 :a4715 :a4715. :a4716 :a4716 :a4716. :a4717 :a4717 :a4717. :a4718 :a4718 :a4718. :a4719 :a4719 :a4719. :a4720 :a4720 :a4720. :a4721 :a4721 :a4721. :a4722 :a4722 :a4722. :a4723 :a4723 :a4723. :a4724 :a4724 :a4724. :a4725 :a4725 :a4725. :a4726 :a4726 :a4726. :a4727 :a4727 :a4727. :a4728 :a4728 :a4728. :a4729 :a4729 :a4729. :a4730 :a4730 :a4730. :a4731 :a4731 :a4731. :a4732 :a4732 :a4732. :a4733 :a4733 :a4733. :a4734 :a4734 :a4734. :a4735 :a4735 :a4735. :a4736 :a4736 :a4736. :a4737 :a4737 :a4737. :a4738 :a4738 :a4738. :a4739 :a4739 :a4739. :a4740 :a4740 :a4740. :a4741 :a4741 :a4741. :a4742 :a4742 :a4742. :a4743 :a4743 :a4743. :a4744 :a4744 :a4744. :a4745 :a4745 :a4745. :a4746 :a4746 :a4746. :a4747 :a4747 :a4747. :a4748 :a4748 :a4748. :a4749 :a4749 :a4749. :a4750 :a4750 :a4750. :a4751 :a4751 :a4751. :a4752 :a4752 :a4752. :a4753 :a4753 :a4753. :a4754 :a4754 :a4754. :a4755 :a4755 :a4755. :a4756 :a4756 :a4756. :a4757 :a4757 :a4757. :a4758 :a4758 :a4758. :a4759 :a4759 :a4759. :a4760 :a4760 :a4760. :a4761 :a4761 :a4761. :a4762 :a4762 :a4762. :a4763 :a4763 :a4763. :a4764 :a4764 :a4764. :a4765 :a4765 :a4765. :a4766 :a4766 :a4766. :a4767 :a4767 :a4767. :a4768 :a4768 :a4768. :a4769 :a4769 :a4769. :a4770 :a4770 :a4770. :a4771 :a4771 :a4771. :a4772 :a4772 :a4772. :a4773 :a4773 :a4773. :a4774 :a4774 :a4774. :a4775 :a4775 :a4775. :a4776 :a4776 :a4776. :a4777 :a4777 :a4777. :a4778 :a4778 :a4778. :a4779 :a4779 :a4779. :a4780 :a4780 :a4780. :a4781 :a4781 :a4781. :a4782 :a4782 :a4782. :a4783 :a4783 :a4783. :a4784 :a4784 :a4784. :a4785 :a4785 :a4785. :a4786 :a4786 :a4786. :a4787 :a4787 :a4787. :a4788 :a4788 :a4788. :a4789 :a4789 :a4789. :a4790 :a4790 :a4790. :a4791 :a4791 :a4791. :a4792 :a4792 :a4792. :a4793 :a4793 :a4793. :a4794 :a4794 :a4794. :a4795 :a4795 :a4795. :a4796 :a4796 :a4796. :a4797 :a4797 :a4797. :a4798 :a4798 :a4798. :a4799 :a4799 :a4799. :a4800 :a4800 :a4800. :a4801 :a4801 :a4801. :a4802 :a4802 :a4802. :a4803 :a4803 :a4803. :a4804 :a4804 :a4804. :a4805 :a4805 :a4805. :a4806 :a4806 :a4806. :a4807 :a4807 :a4807. :a4808 :a4808 :a4808. :a4809 :a4809 :a4809. :a4810 :a4810 :a4810. :a4811 :a4811 :a4811. :a4812 :a4812 :a4812. :a4813 :a4813 :a4813. :a4814 :a4814 :a4814. :a4815 :a4815 :a4815. :a4816 :a4816 :a4816. :a4817 :a4817 :a4817. :a4818 :a4818 :a4818. :a4819 :a4819 :a4819. :a4820 :a4820 :a4820. :a4821 :a4821 :a4821. :a4822 :a4822 :a4822. :a4823 :a4823 :a4823. :a4824 :a4824 :a4824. :a4825 :a4825 :a4825. :a4826 :a4826 :a4826. :a4827 :a4827 :a4827. :a4828 :a4828 :a4828. :a4829 :a4829 :a4829. :a4830 :a4830 :a4830. :a4831 :a4831 :a4831. :a4832 :a4832 :a4832. :a4833 :a4833 :a4833. :a4834 :a4834 :a4834. :a4835 :a4835 :a4835. :a4836 :a4836 :a4836. :a4837 :a4837 :a4837. :a4838 :a4838 :a4838. :a4839 :a4839 :a4839. :a4840 :a4840 :a4840. :a4841 :a4841 :a4841. :a4842 :a4842 :a4842. :a4843 :a4843 :a4843. :a4844 :a4844 :a4844. :a4845 :a4845 :a4845. :a4846 :a4846 :a4846. :a4847 :a4847 :a4847. :a4848 :a4848 :a4848. :a4849 :a4849 :a4849. :a4850 :a4850 :a4850. :a4851 :a4851 :a4851. :a4852 :a4852 :a4852. :a4853 :a4853 :a4853. :a4854 :a4854 :a4854. :a4855 :a4855 :a4855. :a4856 :a4856 :a4856. :a4857 :a4857 :a4857. :a4858 :a4858 :a4858. :a4859 :a4859 :a4859. :a4860 :a4860 :a4860. :a4861 :a4861 :a4861. :a4862 :a4862 :a4862. :a4863 :a4863 :a4863. :a4864 :a4864 :a4864. :a4865 :a4865 :a4865. :a4866 :a4866 :a4866. :a4867 :a4867 :a4867. :a4868 :a4868 :a4868. :a4869 :a4869 :a4869. :a4870 :a4870 :a4870. :a4871 :a4871 :a4871. :a4872 :a4872 :a4872. :a4873 :a4873 :a4873. :a4874 :a4874 :a4874. :a4875 :a4875 :a4875. :a4876 :a4876 :a4876. :a4877 :a4877 :a4877. :a4878 :a4878 :a4878. :a4879 :a4879 :a4879. :a4880 :a4880 :a4880. :a4881 :a4881 :a4881. :a4882 :a4882 :a4882. :a4883 :a4883 :a4883. :a4884 :a4884 :a4884. :a4885 :a4885 :a4885. :a4886 :a4886 :a4886. :a4887 :a4887 :a4887. :a4888 :a4888 :a4888. :a4889 :a4889 :a4889. :a4890 :a4890 :a4890. :a4891 :a4891 :a4891. :a4892 :a4892 :a4892. :a4893 :a4893 :a4893. :a4894 :a4894 :a4894. :a4895 :a4895 :a4895. :a4896 :a4896 :a4896. :a4897 :a4897 :a4897. :a4898 :a4898 :a4898. :a4899 :a4899 :a4899. :a4900 :a4900 :a4900. :a4901 :a4901 :a4901. :a4902 :a4902 :a4902. :a4903 :a4903 :a4903. :a4904 :a4904 :a4904. :a4905 :a4905 :a4905. :a4906 :a4906 :a4906. :a4907 :a4907 :a4907. :a4908 :a4908 :a4908. :a4909 :a4909 :a4909. :a4910 :a4910 :a4910. :a4911 :a4911 :a4911. :a4912 :a4912 :a4912. :a4913 :a4913 :a4913. :a4914 :a4914 :a4914. :a4915 :a4915 :a4915. :a4916 :a4916 :a4916. :a4917 :a4917 :a4917. :a4918 :a4918 :a4918. :a4919 :a4919 :a4919. :a4920 :a4920 :a4920. :a4921 :a4921 :a4921. :a4922 :a4922 :a4922. :a4923 :a4923 :a4923. :a4924 :a4924 :a4924. :a4925 :a4925 :a4925. :a4926 :a4926 :a4926. :a4927 :a4927 :a4927. :a4928 :a4928 :a4928. :a4929 :a4929 :a4929. :a4930 :a4930 :a4930. :a4931 :a4931 :a4931. :a4932 :a4932 :a4932. :a4933 :a4933 :a4933. :a4934 :a4934 :a4934. :a4935 :a4935 :a4935. :a4936 :a4936 :a4936. :a4937 :a4937 :a4937. :a4938 :a4938 :a4938. :a4939 :a4939 :a4939. :a4940 :a4940 :a4940. :a4941 :a4941 :a4941. :a4942 :a4942 :a4942. :a4943 :a4943 :a4943. :a4944 :a4944 :a4944. :a4945 :a4945 :a4945. :a4946 :a4946 :a4946. :a4947 :a4947 :a4947. :a4948 :a4948 :a4948. :a4949 :a4949 :a4949. :a4950 :a4950 :a4950. :a4951 :a4951 :a4951. :a4952 :a4952 :a4952. :a4953 :a4953 :a4953. :a4954 :a4954 :a4954. :a4955 :a4955 :a4955. :a4956 :a4956 :a4956. :a4957 :a4957 :a4957. :a4958 :a4958 :a4958. :a4959 :a4959 :a4959. :a4960 :a4960 :a4960. :a4961 :a4961 :a4961. :a4962 :a4962 :a4962. :a4963 :a4963 :a4963. :a4964 :a4964 :a4964. :a4965 :a4965 :a4965. :a4966 :a4966 :a4966. :a4967 :a4967 :a4967. :a4968 :a4968 :a4968. :a4969 :a4969 :a4969. :a4970 :a4970 :a4970. :a4971 :a4971 :a4971. :a4972 :a4972 :a4972. :a4973 :a4973 :a4973. :a4974 :a4974 :a4974. :a4975 :a4975 :a4975. :a4976 :a4976 :a4976. :a4977 :a4977 :a4977. :a4978 :a4978 :a4978. :a4979 :a4979 :a4979. :a4980 :a4980 :a4980. :a4981 :a4981 :a4981. :a4982 :a4982 :a4982. :a4983 :a4983 :a4983. :a4984 :a4984 :a4984. :a4985 :a4985 :a4985. :a4986 :a4986 :a4986. :a4987 :a4987 :a4987. :a4988 :a4988 :a4988. :a4989 :a4989 :a4989. :a4990 :a4990 :a4990. :a4991 :a4991 :a4991. :a4992 :a4992 :a4992. :a4993 :a4993 :a4993. :a4994 :a4994 :a4994. :a4995 :a4995 :a4995. :a4996 :a4996 :a4996. :a4997 :a4997 :a4997. :a4998 :a4998 :a4998. :a4999 :a4999 :a4999. :a5000 :a5000 :a5000. :a5001 :a5001 :a5001. :a5002 :a5002 :a5002. :a5003 :a5003 :a5003. :a5004 :a5004 :a5004. :a5005 :a5005 :a5005. :a5006 :a5006 :a5006. :a5007 :a5007 :a5007. :a5008 :a5008 :a5008. :a5009 :a5009 :a5009. :a5010 :a5010 :a5010. :a5011 :a5011 :a5011. :a5012 :a5012 :a5012. :a5013 :a5013 :a5013. :a5014 :a5014 :a5014. :a5015 :a5015 :a5015. :a5016 :a5016 :a5016. :a5017 :a5017 :a5017. :a5018 :a5018 :a5018. :a5019 :a5019 :a5019. :a5020 :a5020 :a5020. :a5021 :a5021 :a5021. :a5022 :a5022 :a5022. :a5023 :a5023 :a5023. :a5024 :a5024 :a5024. :a5025 :a5025 :a5025. :a5026 :a5026 :a5026. :a5027 :a5027 :a5027. :a5028 :a5028 :a5028. :a5029 :a5029 :a5029. :a5030 :a5030 :a5030. :a5031 :a5031 :a5031. :a5032 :a5032 :a5032. :a5033 :a5033 :a5033. :a5034 :a5034 :a5034. :a5035 :a5035 :a5035. :a5036 :a5036 :a5036. :a5037 :a5037 :a5037. :a5038 :a5038 :a5038. :a5039 :a5039 :a5039. :a5040 :a5040 :a5040. :a5041 :a5041 :a5041. :a5042 :a5042 :a5042. :a5043 :a5043 :a5043. :a5044 :a5044 :a5044. :a5045 :a5045 :a5045. :a5046 :a5046 :a5046. :a5047 :a5047 :a5047. :a5048 :a5048 :a5048. :a5049 :a5049 :a5049. :a5050 :a5050 :a5050. :a5051 :a5051 :a5051. :a5052 :a5052 :a5052. :a5053 :a5053 :a5053. :a5054 :a5054 :a5054. :a5055 :a5055 :a5055. :a5056 :a5056 :a5056. :a5057 :a5057 :a5057. :a5058 :a5058 :a5058. :a5059 :a5059 :a5059. :a5060 :a5060 :a5060. :a5061 :a5061 :a5061. :a5062 :a5062 :a5062. :a5063 :a5063 :a5063. :a5064 :a5064 :a5064. :a5065 :a5065 :a5065. :a5066 :a5066 :a5066. :a5067 :a5067 :a5067. :a5068 :a5068 :a5068. :a5069 :a5069 :a5069. :a5070 :a5070 :a5070. :a5071 :a5071 :a5071. :a5072 :a5072 :a5072. :a5073 :a5073 :a5073. :a5074 :a5074 :a5074. :a5075 :a5075 :a5075. :a5076 :a5076 :a5076. :a5077 :a5077 :a5077. :a5078 :a5078 :a5078. :a5079 :a5079 :a5079. :a5080 :a5080 :a5080. :a5081 :a5081 :a5081. :a5082 :a5082 :a5082. :a5083 :a5083 :a5083. :a5084 :a5084 :a5084. :a5085 :a5085 :a5085. :a5086 :a5086 :a5086. :a5087 :a5087 :a5087. :a5088 :a5088 :a5088. :a5089 :a5089 :a5089. :a5090 :a5090 :a5090. :a5091 :a5091 :a5091. :a5092 :a5092 :a5092. :a5093 :a5093 :a5093. :a5094 :a5094 :a5094. :a5095 :a5095 :a5095. :a5096 :a5096 :a5096. :a5097 :a5097 :a5097. :a5098 :a5098 :a5098. :a5099 :a5099 :a5099. :a5100 :a5100 :a5100. :a5101 :a5101 :a5101. :a5102 :a5102 :a5102. :a5103 :a5103 :a5103. :a5104 :a5104 :a5104. :a5105 :a5105 :a5105. :a5106 :a5106 :a5106. :a5107 :a5107 :a5107. :a5108 :a5108 :a5108. :a5109 :a5109 :a5109. :a5110 :a5110 :a5110. :a5111 :a5111 :a5111. :a5112 :a5112 :a5112. :a5113 :a5113 :a5113. :a5114 :a5114 :a5114. :a5115 :a5115 :a5115. :a5116 :a5116 :a5116. :a5117 :a5117 :a5117. :a5118 :a5118 :a5118. :a5119 :a5119 :a5119. :a5120 :a5120 :a5120. :a5121 :a5121 :a5121. :a5122 :a5122 :a5122. :a5123 :a5123 :a5123. :a5124 :a5124 :a5124. :a5125 :a5125 :a5125. :a5126 :a5126 :a5126. :a5127 :a5127 :a5127. :a5128 :a5128 :a5128. :a5129 :a5129 :a5129. :a5130 :a5130 :a5130. :a5131 :a5131 :a5131. :a5132 :a5132 :a5132. :a5133 :a5133 :a5133. :a5134 :a5134 :a5134. :a5135 :a5135 :a5135. :a5136 :a5136 :a5136. :a5137 :a5137 :a5137. :a5138 :a5138 :a5138. :a5139 :a5139 :a5139. :a5140 :a5140 :a5140. :a5141 :a5141 :a5141. :a5142 :a5142 :a5142. :a5143 :a5143 :a5143. :a5144 :a5144 :a5144. :a5145 :a5145 :a5145. :a5146 :a5146 :a5146. :a5147 :a5147 :a5147. :a5148 :a5148 :a5148. :a5149 :a5149 :a5149. :a5150 :a5150 :a5150. :a5151 :a5151 :a5151. :a5152 :a5152 :a5152. :a5153 :a5153 :a5153. :a5154 :a5154 :a5154. :a5155 :a5155 :a5155. :a5156 :a5156 :a5156. :a5157 :a5157 :a5157. :a5158 :a5158 :a5158. :a5159 :a5159 :a5159. :a5160 :a5160 :a5160. :a5161 :a5161 :a5161. :a5162 :a5162 :a5162. :a5163 :a5163 :a5163. :a5164 :a5164 :a5164. :a5165 :a5165 :a5165. :a5166 :a5166 :a5166. :a5167 :a5167 :a5167. :a5168 :a5168 :a5168. :a5169 :a5169 :a5169. :a5170 :a5170 :a5170. :a5171 :a5171 :a5171. :a5172 :a5172 :a5172. :a5173 :a5173 :a5173. :a5174 :a5174 :a5174. :a5175 :a5175 :a5175. :a5176 :a5176 :a5176. :a5177 :a5177 :a5177. :a5178 :a5178 :a5178. :a5179 :a5179 :a5179. :a5180 :a5180 :a5180. :a5181 :a5181 :a5181. :a5182 :a5182 :a5182. :a5183 :a5183 :a5183. :a5184 :a5184 :a5184. :a5185 :a5185 :a5185. :a5186 :a5186 :a5186. :a5187 :a5187 :a5187. :a5188 :a5188 :a5188. :a5189 :a5189 :a5189. :a5190 :a5190 :a5190. :a5191 :a5191 :a5191. :a5192 :a5192 :a5192. :a5193 :a5193 :a5193. :a5194 :a5194 :a5194. :a5195 :a5195 :a5195. :a5196 :a5196 :a5196. :a5197 :a5197 :a5197. :a5198 :a5198 :a5198. :a5199 :a5199 :a5199. :a5200 :a5200 :a5200. :a5201 :a5201 :a5201. :a5202 :a5202 :a5202. :a5203 :a5203 :a5203. :a5204 :a5204 :a5204. :a5205 :a5205 :a5205. :a5206 :a5206 :a5206. :a5207 :a5207 :a5207. :a5208 :a5208 :a5208. :a5209 :a5209 :a5209. :a5210 :a5210 :a5210. :a5211 :a5211 :a5211. :a5212 :a5212 :a5212. :a5213 :a5213 :a5213. :a5214 :a5214 :a5214. :a5215 :a5215 :a5215. :a5216 :a5216 :a5216. :a5217 :a5217 :a5217. :a5218 :a5218 :a5218. :a5219 :a5219 :a5219. :a5220 :a5220 :a5220. :a5221 :a5221 :a5221. :a5222 :a5222 :a5222. :a5223 :a5223 :a5223. :a5224 :a5224 :a5224. :a5225 :a5225 :a5225. :a5226 :a5226 :a5226. :a5227 :a5227 :a5227. :a5228 :a5228 :a5228. :a5229 :a5229 :a5229. :a5230 :a5230 :a5230. :a5231 :a5231 :a5231. :a5232 :a5232 :a5232. :a5233 :a5233 :a5233. :a5234 :a5234 :a5234. :a5235 :a5235 :a5235. :a5236 :a5236 :a5236. :a5237 :a5237 :a5237. :a5238 :a5238 :a5238. :a5239 :a5239 :a5239. :a5240 :a5240 :a5240. :a5241 :a5241 :a5241. :a5242 :a5242 :a5242. :a5243 :a5243 :a5243. :a5244 :a5244 :a5244. :a5245 :a5245 :a5245. :a5246 :a5246 :a5246. :a5247 :a5247 :a5247. :a5248 :a5248 :a5248. :a5249 :a5249 :a5249. :a5250 :a5250 :a5250. :a5251 :a5251 :a5251. :a5252 :a5252 :a5252. :a5253 :a5253 :a5253. :a5254 :a5254 :a5254. :a5255 :a5255 :a5255. :a5256 :a5256 :a5256. :a5257 :a5257 :a5257. :a5258 :a5258 :a5258. :a5259 :a5259 :a5259. :a5260 :a5260 :a5260. :a5261 :a5261 :a5261. :a5262 :a5262 :a5262. :a5263 :a5263 :a5263. :a5264 :a5264 :a5264. :a5265 :a5265 :a5265. :a5266 :a5266 :a5266. :a5267 :a5267 :a5267. :a5268 :a5268 :a5268. :a5269 :a5269 :a5269. :a5270 :a5270 :a5270. :a5271 :a5271 :a5271. :a5272 :a5272 :a5272. :a5273 :a5273 :a5273. :a5274 :a5274 :a5274. :a5275 :a5275 :a5275. :a5276 :a5276 :a5276. :a5277 :a5277 :a5277. :a5278 :a5278 :a5278. :a5279 :a5279 :a5279. :a5280 :a5280 :a5280. :a5281 :a5281 :a5281. :a5282 :a5282 :a5282. :a5283 :a5283 :a5283. :a5284 :a5284 :a5284. :a5285 :a5285 :a5285. :a5286 :a5286 :a5286. :a5287 :a5287 :a5287. :a5288 :a5288 :a5288. :a5289 :a5289 :a5289. :a5290 :a5290 :a5290. :a5291 :a5291 :a5291. :a5292 :a5292 :a5292. :a5293 :a5293 :a5293. :a5294 :a5294 :a5294. :a5295 :a5295 :a5295. :a5296 :a5296 :a5296. :a5297 :a5297 :a5297. :a5298 :a5298 :a5298. :a5299 :a5299 :a5299. :a5300 :a5300 :a5300. :a5301 :a5301 :a5301. :a5302 :a5302 :a5302. :a5303 :a5303 :a5303. :a5304 :a5304 :a5304. :a5305 :a5305 :a5305. :a5306 :a5306 :a5306. :a5307 :a5307 :a5307. :a5308 :a5308 :a5308. :a5309 :a5309 :a5309. :a5310 :a5310 :a5310. :a5311 :a5311 :a5311. :a5312 :a5312 :a5312. :a5313 :a5313 :a5313. :a5314 :a5314 :a5314. :a5315 :a5315 :a5315. :a5316 :a5316 :a5316. :a5317 :a5317 :a5317. :a5318 :a5318 :a5318. :a5319 :a5319 :a5319. :a5320 :a5320 :a5320. :a5321 :a5321 :a5321. :a5322 :a5322 :a5322. :a5323 :a5323 :a5323. :a5324 :a5324 :a5324. :a5325 :a5325 :a5325. :a5326 :a5326 :a5326. :a5327 :a5327 :a5327. :a5328 :a5328 :a5328. :a5329 :a5329 :a5329. :a5330 :a5330 :a5330. :a5331 :a5331 :a5331. :a5332 :a5332 :a5332. :a5333 :a5333 :a5333. :a5334 :a5334 :a5334. :a5335 :a5335 :a5335. :a5336 :a5336 :a5336. :a5337 :a5337 :a5337. :a5338 :a5338 :a5338. :a5339 :a5339 :a5339. :a5340 :a5340 :a5340. :a5341 :a5341 :a5341. :a5342 :a5342 :a5342. :a5343 :a5343 :a5343. :a5344 :a5344 :a5344. :a5345 :a5345 :a5345. :a5346 :a5346 :a5346. :a5347 :a5347 :a5347. :a5348 :a5348 :a5348. :a5349 :a5349 :a5349. :a5350 :a5350 :a5350. :a5351 :a5351 :a5351. :a5352 :a5352 :a5352. :a5353 :a5353 :a5353. :a5354 :a5354 :a5354. :a5355 :a5355 :a5355. :a5356 :a5356 :a5356. :a5357 :a5357 :a5357. :a5358 :a5358 :a5358. :a5359 :a5359 :a5359. :a5360 :a5360 :a5360. :a5361 :a5361 :a5361. :a5362 :a5362 :a5362. :a5363 :a5363 :a5363. :a5364 :a5364 :a5364. :a5365 :a5365 :a5365. :a5366 :a5366 :a5366. :a5367 :a5367 :a5367. :a5368 :a5368 :a5368. :a5369 :a5369 :a5369. :a5370 :a5370 :a5370. :a5371 :a5371 :a5371. :a5372 :a5372 :a5372. :a5373 :a5373 :a5373. :a5374 :a5374 :a5374. :a5375 :a5375 :a5375. :a5376 :a5376 :a5376. :a5377 :a5377 :a5377. :a5378 :a5378 :a5378. :a5379 :a5379 :a5379. :a5380 :a5380 :a5380. :a5381 :a5381 :a5381. :a5382 :a5382 :a5382. :a5383 :a5383 :a5383. :a5384 :a5384 :a5384. :a5385 :a5385 :a5385. :a5386 :a5386 :a5386. :a5387 :a5387 :a5387. :a5388 :a5388 :a5388. :a5389 :a5389 :a5389. :a5390 :a5390 :a5390. :a5391 :a5391 :a5391. :a5392 :a5392 :a5392. :a5393 :a5393 :a5393. :a5394 :a5394 :a5394. :a5395 :a5395 :a5395. :a5396 :a5396 :a5396. :a5397 :a5397 :a5397. :a5398 :a5398 :a5398. :a5399 :a5399 :a5399. :a5400 :a5400 :a5400. :a5401 :a5401 :a5401. :a5402 :a5402 :a5402. :a5403 :a5403 :a5403. :a5404 :a5404 :a5404. :a5405 :a5405 :a5405. :a5406 :a5406 :a5406. :a5407 :a5407 :a5407. :a5408 :a5408 :a5408. :a5409 :a5409 :a5409. :a5410 :a5410 :a5410. :a5411 :a5411 :a5411. :a5412 :a5412 :a5412. :a5413 :a5413 :a5413. :a5414 :a5414 :a5414. :a5415 :a5415 :a5415. :a5416 :a5416 :a5416. :a5417 :a5417 :a5417. :a5418 :a5418 :a5418. :a5419 :a5419 :a5419. :a5420 :a5420 :a5420. :a5421 :a5421 :a5421. :a5422 :a5422 :a5422. :a5423 :a5423 :a5423. :a5424 :a5424 :a5424. :a5425 :a5425 :a5425. :a5426 :a5426 :a5426. :a5427 :a5427 :a5427. :a5428 :a5428 :a5428. :a5429 :a5429 :a5429. :a5430 :a5430 :a5430. :a5431 :a5431 :a5431. :a5432 :a5432 :a5432. :a5433 :a5433 :a5433. :a5434 :a5434 :a5434. :a5435 :a5435 :a5435. :a5436 :a5436 :a5436. :a5437 :a5437 :a5437. :a5438 :a5438 :a5438. :a5439 :a5439 :a5439. :a5440 :a5440 :a5440. :a5441 :a5441 :a5441. :a5442 :a5442 :a5442. :a5443 :a5443 :a5443. :a5444 :a5444 :a5444. :a5445 :a5445 :a5445. :a5446 :a5446 :a5446. :a5447 :a5447 :a5447. :a5448 :a5448 :a5448. :a5449 :a5449 :a5449. :a5450 :a5450 :a5450. :a5451 :a5451 :a5451. :a5452 :a5452 :a5452. :a5453 :a5453 :a5453. :a5454 :a5454 :a5454. :a5455 :a5455 :a5455. :a5456 :a5456 :a5456. :a5457 :a5457 :a5457. :a5458 :a5458 :a5458. :a5459 :a5459 :a5459. :a5460 :a5460 :a5460. :a5461 :a5461 :a5461. :a5462 :a5462 :a5462. :a5463 :a5463 :a5463. :a5464 :a5464 :a5464. :a5465 :a5465 :a5465. :a5466 :a5466 :a5466. :a5467 :a5467 :a5467. :a5468 :a5468 :a5468. :a5469 :a5469 :a5469. :a5470 :a5470 :a5470. :a5471 :a5471 :a5471. :a5472 :a5472 :a5472. :a5473 :a5473 :a5473. :a5474 :a5474 :a5474. :a5475 :a5475 :a5475. :a5476 :a5476 :a5476. :a5477 :a5477 :a5477. :a5478 :a5478 :a5478. :a5479 :a5479 :a5479. :a5480 :a5480 :a5480. :a5481 :a5481 :a5481. :a5482 :a5482 :a5482. :a5483 :a5483 :a5483. :a5484 :a5484 :a5484. :a5485 :a5485 :a5485. :a5486 :a5486 :a5486. :a5487 :a5487 :a5487. :a5488 :a5488 :a5488. :a5489 :a5489 :a5489. :a5490 :a5490 :a5490. :a5491 :a5491 :a5491. :a5492 :a5492 :a5492. :a5493 :a5493 :a5493. :a5494 :a5494 :a5494. :a5495 :a5495 :a5495. :a5496 :a5496 :a5496. :a5497 :a5497 :a5497. :a5498 :a5498 :a5498. :a5499 :a5499 :a5499. :a5500 :a5500 :a5500. :a5501 :a5501 :a5501. :a5502 :a5502 :a5502. :a5503 :a5503 :a5503. :a5504 :a5504 :a5504. :a5505 :a5505 :a5505. :a5506 :a5506 :a5506. :a5507 :a5507 :a5507. :a5508 :a5508 :a5508. :a5509 :a5509 :a5509. :a5510 :a5510 :a5510. :a5511 :a5511 :a5511. :a5512 :a5512 :a5512. :a5513 :a5513 :a5513. :a5514 :a5514 :a5514. :a5515 :a5515 :a5515. :a5516 :a5516 :a5516. :a5517 :a5517 :a5517. :a5518 :a5518 :a5518. :a5519 :a5519 :a5519. :a5520 :a5520 :a5520. :a5521 :a5521 :a5521. :a5522 :a5522 :a5522. :a5523 :a5523 :a5523. :a5524 :a5524 :a5524. :a5525 :a5525 :a5525. :a5526 :a5526 :a5526. :a5527 :a5527 :a5527. :a5528 :a5528 :a5528. :a5529 :a5529 :a5529. :a5530 :a5530 :a5530. :a5531 :a5531 :a5531. :a5532 :a5532 :a5532. :a5533 :a5533 :a5533. :a5534 :a5534 :a5534. :a5535 :a5535 :a5535. :a5536 :a5536 :a5536. :a5537 :a5537 :a5537. :a5538 :a5538 :a5538. :a5539 :a5539 :a5539. :a5540 :a5540 :a5540. :a5541 :a5541 :a5541. :a5542 :a5542 :a5542. :a5543 :a5543 :a5543. :a5544 :a5544 :a5544. :a5545 :a5545 :a5545. :a5546 :a5546 :a5546. :a5547 :a5547 :a5547. :a5548 :a5548 :a5548. :a5549 :a5549 :a5549. :a5550 :a5550 :a5550. :a5551 :a5551 :a5551. :a5552 :a5552 :a5552. :a5553 :a5553 :a5553. :a5554 :a5554 :a5554. :a5555 :a5555 :a5555. :a5556 :a5556 :a5556. :a5557 :a5557 :a5557. :a5558 :a5558 :a5558. :a5559 :a5559 :a5559. :a5560 :a5560 :a5560. :a5561 :a5561 :a5561. :a5562 :a5562 :a5562. :a5563 :a5563 :a5563. :a5564 :a5564 :a5564. :a5565 :a5565 :a5565. :a5566 :a5566 :a5566. :a5567 :a5567 :a5567. :a5568 :a5568 :a5568. :a5569 :a5569 :a5569. :a5570 :a5570 :a5570. :a5571 :a5571 :a5571. :a5572 :a5572 :a5572. :a5573 :a5573 :a5573. :a5574 :a5574 :a5574. :a5575 :a5575 :a5575. :a5576 :a5576 :a5576. :a5577 :a5577 :a5577. :a5578 :a5578 :a5578. :a5579 :a5579 :a5579. :a5580 :a5580 :a5580. :a5581 :a5581 :a5581. :a5582 :a5582 :a5582. :a5583 :a5583 :a5583. :a5584 :a5584 :a5584. :a5585 :a5585 :a5585. :a5586 :a5586 :a5586. :a5587 :a5587 :a5587. :a5588 :a5588 :a5588. :a5589 :a5589 :a5589. :a5590 :a5590 :a5590. :a5591 :a5591 :a5591. :a5592 :a5592 :a5592. :a5593 :a5593 :a5593. :a5594 :a5594 :a5594. :a5595 :a5595 :a5595. :a5596 :a5596 :a5596. :a5597 :a5597 :a5597. :a5598 :a5598 :a5598. :a5599 :a5599 :a5599. :a5600 :a5600 :a5600. :a5601 :a5601 :a5601. :a5602 :a5602 :a5602. :a5603 :a5603 :a5603. :a5604 :a5604 :a5604. :a5605 :a5605 :a5605. :a5606 :a5606 :a5606. :a5607 :a5607 :a5607. :a5608 :a5608 :a5608. :a5609 :a5609 :a5609. :a5610 :a5610 :a5610. :a5611 :a5611 :a5611. :a5612 :a5612 :a5612. :a5613 :a5613 :a5613. :a5614 :a5614 :a5614. :a5615 :a5615 :a5615. :a5616 :a5616 :a5616. :a5617 :a5617 :a5617. :a5618 :a5618 :a5618. :a5619 :a5619 :a5619. :a5620 :a5620 :a5620. :a5621 :a5621 :a5621. :a5622 :a5622 :a5622. :a5623 :a5623 :a5623. :a5624 :a5624 :a5624. :a5625 :a5625 :a5625. :a5626 :a5626 :a5626. :a5627 :a5627 :a5627. :a5628 :a5628 :a5628. :a5629 :a5629 :a5629. :a5630 :a5630 :a5630. :a5631 :a5631 :a5631. :a5632 :a5632 :a5632. :a5633 :a5633 :a5633. :a5634 :a5634 :a5634. :a5635 :a5635 :a5635. :a5636 :a5636 :a5636. :a5637 :a5637 :a5637. :a5638 :a5638 :a5638. :a5639 :a5639 :a5639. :a5640 :a5640 :a5640. :a5641 :a5641 :a5641. :a5642 :a5642 :a5642. :a5643 :a5643 :a5643. :a5644 :a5644 :a5644. :a5645 :a5645 :a5645. :a5646 :a5646 :a5646. :a5647 :a5647 :a5647. :a5648 :a5648 :a5648. :a5649 :a5649 :a5649. :a5650 :a5650 :a5650. :a5651 :a5651 :a5651. :a5652 :a5652 :a5652. :a5653 :a5653 :a5653. :a5654 :a5654 :a5654. :a5655 :a5655 :a5655. :a5656 :a5656 :a5656. :a5657 :a5657 :a5657. :a5658 :a5658 :a5658. :a5659 :a5659 :a5659. :a5660 :a5660 :a5660. :a5661 :a5661 :a5661. :a5662 :a5662 :a5662. :a5663 :a5663 :a5663. :a5664 :a5664 :a5664. :a5665 :a5665 :a5665. :a5666 :a5666 :a5666. :a5667 :a5667 :a5667. :a5668 :a5668 :a5668. :a5669 :a5669 :a5669. :a5670 :a5670 :a5670. :a5671 :a5671 :a5671. :a5672 :a5672 :a5672. :a5673 :a5673 :a5673. :a5674 :a5674 :a5674. :a5675 :a5675 :a5675. :a5676 :a5676 :a5676. :a5677 :a5677 :a5677. :a5678 :a5678 :a5678. :a5679 :a5679 :a5679. :a5680 :a5680 :a5680. :a5681 :a5681 :a5681. :a5682 :a5682 :a5682. :a5683 :a5683 :a5683. :a5684 :a5684 :a5684. :a5685 :a5685 :a5685. :a5686 :a5686 :a5686. :a5687 :a5687 :a5687. :a5688 :a5688 :a5688. :a5689 :a5689 :a5689. :a5690 :a5690 :a5690. :a5691 :a5691 :a5691. :a5692 :a5692 :a5692. :a5693 :a5693 :a5693. :a5694 :a5694 :a5694. :a5695 :a5695 :a5695. :a5696 :a5696 :a5696. :a5697 :a5697 :a5697. :a5698 :a5698 :a5698. :a5699 :a5699 :a5699. :a5700 :a5700 :a5700. :a5701 :a5701 :a5701. :a5702 :a5702 :a5702. :a5703 :a5703 :a5703. :a5704 :a5704 :a5704. :a5705 :a5705 :a5705. :a5706 :a5706 :a5706. :a5707 :a5707 :a5707. :a5708 :a5708 :a5708. :a5709 :a5709 :a5709. :a5710 :a5710 :a5710. :a5711 :a5711 :a5711. :a5712 :a5712 :a5712. :a5713 :a5713 :a5713. :a5714 :a5714 :a5714. :a5715 :a5715 :a5715. :a5716 :a5716 :a5716. :a5717 :a5717 :a5717. :a5718 :a5718 :a5718. :a5719 :a5719 :a5719. :a5720 :a5720 :a5720. :a5721 :a5721 :a5721. :a5722 :a5722 :a5722. :a5723 :a5723 :a5723. :a5724 :a5724 :a5724. :a5725 :a5725 :a5725. :a5726 :a5726 :a5726. :a5727 :a5727 :a5727. :a5728 :a5728 :a5728. :a5729 :a5729 :a5729. :a5730 :a5730 :a5730. :a5731 :a5731 :a5731. :a5732 :a5732 :a5732. :a5733 :a5733 :a5733. :a5734 :a5734 :a5734. :a5735 :a5735 :a5735. :a5736 :a5736 :a5736. :a5737 :a5737 :a5737. :a5738 :a5738 :a5738. :a5739 :a5739 :a5739. :a5740 :a5740 :a5740. :a5741 :a5741 :a5741. :a5742 :a5742 :a5742. :a5743 :a5743 :a5743. :a5744 :a5744 :a5744. :a5745 :a5745 :a5745. :a5746 :a5746 :a5746. :a5747 :a5747 :a5747. :a5748 :a5748 :a5748. :a5749 :a5749 :a5749. :a5750 :a5750 :a5750. :a5751 :a5751 :a5751. :a5752 :a5752 :a5752. :a5753 :a5753 :a5753. :a5754 :a5754 :a5754. :a5755 :a5755 :a5755. :a5756 :a5756 :a5756. :a5757 :a5757 :a5757. :a5758 :a5758 :a5758. :a5759 :a5759 :a5759. :a5760 :a5760 :a5760. :a5761 :a5761 :a5761. :a5762 :a5762 :a5762. :a5763 :a5763 :a5763. :a5764 :a5764 :a5764. :a5765 :a5765 :a5765. :a5766 :a5766 :a5766. :a5767 :a5767 :a5767. :a5768 :a5768 :a5768. :a5769 :a5769 :a5769. :a5770 :a5770 :a5770. :a5771 :a5771 :a5771. :a5772 :a5772 :a5772. :a5773 :a5773 :a5773. :a5774 :a5774 :a5774. :a5775 :a5775 :a5775. :a5776 :a5776 :a5776. :a5777 :a5777 :a5777. :a5778 :a5778 :a5778. :a5779 :a5779 :a5779. :a5780 :a5780 :a5780. :a5781 :a5781 :a5781. :a5782 :a5782 :a5782. :a5783 :a5783 :a5783. :a5784 :a5784 :a5784. :a5785 :a5785 :a5785. :a5786 :a5786 :a5786. :a5787 :a5787 :a5787. :a5788 :a5788 :a5788. :a5789 :a5789 :a5789. :a5790 :a5790 :a5790. :a5791 :a5791 :a5791. :a5792 :a5792 :a5792. :a5793 :a5793 :a5793. :a5794 :a5794 :a5794. :a5795 :a5795 :a5795. :a5796 :a5796 :a5796. :a5797 :a5797 :a5797. :a5798 :a5798 :a5798. :a5799 :a5799 :a5799. :a5800 :a5800 :a5800. :a5801 :a5801 :a5801. :a5802 :a5802 :a5802. :a5803 :a5803 :a5803. :a5804 :a5804 :a5804. :a5805 :a5805 :a5805. :a5806 :a5806 :a5806. :a5807 :a5807 :a5807. :a5808 :a5808 :a5808. :a5809 :a5809 :a5809. :a5810 :a5810 :a5810. :a5811 :a5811 :a5811. :a5812 :a5812 :a5812. :a5813 :a5813 :a5813. :a5814 :a5814 :a5814. :a5815 :a5815 :a5815. :a5816 :a5816 :a5816. :a5817 :a5817 :a5817. :a5818 :a5818 :a5818. :a5819 :a5819 :a5819. :a5820 :a5820 :a5820. :a5821 :a5821 :a5821. :a5822 :a5822 :a5822. :a5823 :a5823 :a5823. :a5824 :a5824 :a5824. :a5825 :a5825 :a5825. :a5826 :a5826 :a5826. :a5827 :a5827 :a5827. :a5828 :a5828 :a5828. :a5829 :a5829 :a5829. :a5830 :a5830 :a5830. :a5831 :a5831 :a5831. :a5832 :a5832 :a5832. :a5833 :a5833 :a5833. :a5834 :a5834 :a5834. :a5835 :a5835 :a5835. :a5836 :a5836 :a5836. :a5837 :a5837 :a5837. :a5838 :a5838 :a5838. :a5839 :a5839 :a5839. :a5840 :a5840 :a5840. :a5841 :a5841 :a5841. :a5842 :a5842 :a5842. :a5843 :a5843 :a5843. :a5844 :a5844 :a5844. :a5845 :a5845 :a5845. :a5846 :a5846 :a5846. :a5847 :a5847 :a5847. :a5848 :a5848 :a5848. :a5849 :a5849 :a5849. :a5850 :a5850 :a5850. :a5851 :a5851 :a5851. :a5852 :a5852 :a5852. :a5853 :a5853 :a5853. :a5854 :a5854 :a5854. :a5855 :a5855 :a5855. :a5856 :a5856 :a5856. :a5857 :a5857 :a5857. :a5858 :a5858 :a5858. :a5859 :a5859 :a5859. :a5860 :a5860 :a5860. :a5861 :a5861 :a5861. :a5862 :a5862 :a5862. :a5863 :a5863 :a5863. :a5864 :a5864 :a5864. :a5865 :a5865 :a5865. :a5866 :a5866 :a5866. :a5867 :a5867 :a5867. :a5868 :a5868 :a5868. :a5869 :a5869 :a5869. :a5870 :a5870 :a5870. :a5871 :a5871 :a5871. :a5872 :a5872 :a5872. :a5873 :a5873 :a5873. :a5874 :a5874 :a5874. :a5875 :a5875 :a5875. :a5876 :a5876 :a5876. :a5877 :a5877 :a5877. :a5878 :a5878 :a5878. :a5879 :a5879 :a5879. :a5880 :a5880 :a5880. :a5881 :a5881 :a5881. :a5882 :a5882 :a5882. :a5883 :a5883 :a5883. :a5884 :a5884 :a5884. :a5885 :a5885 :a5885. :a5886 :a5886 :a5886. :a5887 :a5887 :a5887. :a5888 :a5888 :a5888. :a5889 :a5889 :a5889. :a5890 :a5890 :a5890. :a5891 :a5891 :a5891. :a5892 :a5892 :a5892. :a5893 :a5893 :a5893. :a5894 :a5894 :a5894. :a5895 :a5895 :a5895. :a5896 :a5896 :a5896. :a5897 :a5897 :a5897. :a5898 :a5898 :a5898. :a5899 :a5899 :a5899. :a5900 :a5900 :a5900. :a5901 :a5901 :a5901. :a5902 :a5902 :a5902. :a5903 :a5903 :a5903. :a5904 :a5904 :a5904. :a5905 :a5905 :a5905. :a5906 :a5906 :a5906. :a5907 :a5907 :a5907. :a5908 :a5908 :a5908. :a5909 :a5909 :a5909. :a5910 :a5910 :a5910. :a5911 :a5911 :a5911. :a5912 :a5912 :a5912. :a5913 :a5913 :a5913. :a5914 :a5914 :a5914. :a5915 :a5915 :a5915. :a5916 :a5916 :a5916. :a5917 :a5917 :a5917. :a5918 :a5918 :a5918. :a5919 :a5919 :a5919. :a5920 :a5920 :a5920. :a5921 :a5921 :a5921. :a5922 :a5922 :a5922. :a5923 :a5923 :a5923. :a5924 :a5924 :a5924. :a5925 :a5925 :a5925. :a5926 :a5926 :a5926. :a5927 :a5927 :a5927. :a5928 :a5928 :a5928. :a5929 :a5929 :a5929. :a5930 :a5930 :a5930. :a5931 :a5931 :a5931. :a5932 :a5932 :a5932. :a5933 :a5933 :a5933. :a5934 :a5934 :a5934. :a5935 :a5935 :a5935. :a5936 :a5936 :a5936. :a5937 :a5937 :a5937. :a5938 :a5938 :a5938. :a5939 :a5939 :a5939. :a5940 :a5940 :a5940. :a5941 :a5941 :a5941. :a5942 :a5942 :a5942. :a5943 :a5943 :a5943. :a5944 :a5944 :a5944. :a5945 :a5945 :a5945. :a5946 :a5946 :a5946. :a5947 :a5947 :a5947. :a5948 :a5948 :a5948. :a5949 :a5949 :a5949. :a5950 :a5950 :a5950. :a5951 :a5951 :a5951. :a5952 :a5952 :a5952. :a5953 :a5953 :a5953. :a5954 :a5954 :a5954. :a5955 :a5955 :a5955. :a5956 :a5956 :a5956. :a5957 :a5957 :a5957. :a5958 :a5958 :a5958. :a5959 :a5959 :a5959. :a5960 :a5960 :a5960. :a5961 :a5961 :a5961. :a5962 :a5962 :a5962. :a5963 :a5963 :a5963. :a5964 :a5964 :a5964. :a5965 :a5965 :a5965. :a5966 :a5966 :a5966. :a5967 :a5967 :a5967. :a5968 :a5968 :a5968. :a5969 :a5969 :a5969. :a5970 :a5970 :a5970. :a5971 :a5971 :a5971. :a5972 :a5972 :a5972. :a5973 :a5973 :a5973. :a5974 :a5974 :a5974. :a5975 :a5975 :a5975. :a5976 :a5976 :a5976. :a5977 :a5977 :a5977. :a5978 :a5978 :a5978. :a5979 :a5979 :a5979. :a5980 :a5980 :a5980. :a5981 :a5981 :a5981. :a5982 :a5982 :a5982. :a5983 :a5983 :a5983. :a5984 :a5984 :a5984. :a5985 :a5985 :a5985. :a5986 :a5986 :a5986. :a5987 :a5987 :a5987. :a5988 :a5988 :a5988. :a5989 :a5989 :a5989. :a5990 :a5990 :a5990. :a5991 :a5991 :a5991. :a5992 :a5992 :a5992. :a5993 :a5993 :a5993. :a5994 :a5994 :a5994. :a5995 :a5995 :a5995. :a5996 :a5996 :a5996. :a5997 :a5997 :a5997. :a5998 :a5998 :a5998. :a5999 :a5999 :a5999. :a6000 :a6000 :a6000. :a6001 :a6001 :a6001. :a6002 :a6002 :a6002. :a6003 :a6003 :a6003. :a6004 :a6004 :a6004. :a6005 :a6005 :a6005. :a6006 :a6006 :a6006. :a6007 :a6007 :a6007. :a6008 :a6008 :a6008. :a6009 :a6009 :a6009. :a6010 :a6010 :a6010. :a6011 :a6011 :a6011. :a6012 :a6012 :a6012. :a6013 :a6013 :a6013. :a6014 :a6014 :a6014. :a6015 :a6015 :a6015. :a6016 :a6016 :a6016. :a6017 :a6017 :a6017. :a6018 :a6018 :a6018. :a6019 :a6019 :a6019. :a6020 :a6020 :a6020. :a6021 :a6021 :a6021. :a6022 :a6022 :a6022. :a6023 :a6023 :a6023. :a6024 :a6024 :a6024. :a6025 :a6025 :a6025. :a6026 :a6026 :a6026. :a6027 :a6027 :a6027. :a6028 :a6028 :a6028. :a6029 :a6029 :a6029. :a6030 :a6030 :a6030. :a6031 :a6031 :a6031. :a6032 :a6032 :a6032. :a6033 :a6033 :a6033. :a6034 :a6034 :a6034. :a6035 :a6035 :a6035. :a6036 :a6036 :a6036. :a6037 :a6037 :a6037. :a6038 :a6038 :a6038. :a6039 :a6039 :a6039. :a6040 :a6040 :a6040. :a6041 :a6041 :a6041. :a6042 :a6042 :a6042. :a6043 :a6043 :a6043. :a6044 :a6044 :a6044. :a6045 :a6045 :a6045. :a6046 :a6046 :a6046. :a6047 :a6047 :a6047. :a6048 :a6048 :a6048. :a6049 :a6049 :a6049. :a6050 :a6050 :a6050. :a6051 :a6051 :a6051. :a6052 :a6052 :a6052. :a6053 :a6053 :a6053. :a6054 :a6054 :a6054. :a6055 :a6055 :a6055. :a6056 :a6056 :a6056. :a6057 :a6057 :a6057. :a6058 :a6058 :a6058. :a6059 :a6059 :a6059. :a6060 :a6060 :a6060. :a6061 :a6061 :a6061. :a6062 :a6062 :a6062. :a6063 :a6063 :a6063. :a6064 :a6064 :a6064. :a6065 :a6065 :a6065. :a6066 :a6066 :a6066. :a6067 :a6067 :a6067. :a6068 :a6068 :a6068. :a6069 :a6069 :a6069. :a6070 :a6070 :a6070. :a6071 :a6071 :a6071. :a6072 :a6072 :a6072. :a6073 :a6073 :a6073. :a6074 :a6074 :a6074. :a6075 :a6075 :a6075. :a6076 :a6076 :a6076. :a6077 :a6077 :a6077. :a6078 :a6078 :a6078. :a6079 :a6079 :a6079. :a6080 :a6080 :a6080. :a6081 :a6081 :a6081. :a6082 :a6082 :a6082. :a6083 :a6083 :a6083. :a6084 :a6084 :a6084. :a6085 :a6085 :a6085. :a6086 :a6086 :a6086. :a6087 :a6087 :a6087. :a6088 :a6088 :a6088. :a6089 :a6089 :a6089. :a6090 :a6090 :a6090. :a6091 :a6091 :a6091. :a6092 :a6092 :a6092. :a6093 :a6093 :a6093. :a6094 :a6094 :a6094. :a6095 :a6095 :a6095. :a6096 :a6096 :a6096. :a6097 :a6097 :a6097. :a6098 :a6098 :a6098. :a6099 :a6099 :a6099. :a6100 :a6100 :a6100. :a6101 :a6101 :a6101. :a6102 :a6102 :a6102. :a6103 :a6103 :a6103. :a6104 :a6104 :a6104. :a6105 :a6105 :a6105. :a6106 :a6106 :a6106. :a6107 :a6107 :a6107. :a6108 :a6108 :a6108. :a6109 :a6109 :a6109. :a6110 :a6110 :a6110. :a6111 :a6111 :a6111. :a6112 :a6112 :a6112. :a6113 :a6113 :a6113. :a6114 :a6114 :a6114. :a6115 :a6115 :a6115. :a6116 :a6116 :a6116. :a6117 :a6117 :a6117. :a6118 :a6118 :a6118. :a6119 :a6119 :a6119. :a6120 :a6120 :a6120. :a6121 :a6121 :a6121. :a6122 :a6122 :a6122. :a6123 :a6123 :a6123. :a6124 :a6124 :a6124. :a6125 :a6125 :a6125. :a6126 :a6126 :a6126. :a6127 :a6127 :a6127. :a6128 :a6128 :a6128. :a6129 :a6129 :a6129. :a6130 :a6130 :a6130. :a6131 :a6131 :a6131. :a6132 :a6132 :a6132. :a6133 :a6133 :a6133. :a6134 :a6134 :a6134. :a6135 :a6135 :a6135. :a6136 :a6136 :a6136. :a6137 :a6137 :a6137. :a6138 :a6138 :a6138. :a6139 :a6139 :a6139. :a6140 :a6140 :a6140. :a6141 :a6141 :a6141. :a6142 :a6142 :a6142. :a6143 :a6143 :a6143. :a6144 :a6144 :a6144. :a6145 :a6145 :a6145. :a6146 :a6146 :a6146. :a6147 :a6147 :a6147. :a6148 :a6148 :a6148. :a6149 :a6149 :a6149. :a6150 :a6150 :a6150. :a6151 :a6151 :a6151. :a6152 :a6152 :a6152. :a6153 :a6153 :a6153. :a6154 :a6154 :a6154. :a6155 :a6155 :a6155. :a6156 :a6156 :a6156. :a6157 :a6157 :a6157. :a6158 :a6158 :a6158. :a6159 :a6159 :a6159. :a6160 :a6160 :a6160. :a6161 :a6161 :a6161. :a6162 :a6162 :a6162. :a6163 :a6163 :a6163. :a6164 :a6164 :a6164. :a6165 :a6165 :a6165. :a6166 :a6166 :a6166. :a6167 :a6167 :a6167. :a6168 :a6168 :a6168. :a6169 :a6169 :a6169. :a6170 :a6170 :a6170. :a6171 :a6171 :a6171. :a6172 :a6172 :a6172. :a6173 :a6173 :a6173. :a6174 :a6174 :a6174. :a6175 :a6175 :a6175. :a6176 :a6176 :a6176. :a6177 :a6177 :a6177. :a6178 :a6178 :a6178. :a6179 :a6179 :a6179. :a6180 :a6180 :a6180. :a6181 :a6181 :a6181. :a6182 :a6182 :a6182. :a6183 :a6183 :a6183. :a6184 :a6184 :a6184. :a6185 :a6185 :a6185. :a6186 :a6186 :a6186. :a6187 :a6187 :a6187. :a6188 :a6188 :a6188. :a6189 :a6189 :a6189. :a6190 :a6190 :a6190. :a6191 :a6191 :a6191. :a6192 :a6192 :a6192. :a6193 :a6193 :a6193. :a6194 :a6194 :a6194. :a6195 :a6195 :a6195. :a6196 :a6196 :a6196. :a6197 :a6197 :a6197. :a6198 :a6198 :a6198. :a6199 :a6199 :a6199. :a6200 :a6200 :a6200. :a6201 :a6201 :a6201. :a6202 :a6202 :a6202. :a6203 :a6203 :a6203. :a6204 :a6204 :a6204. :a6205 :a6205 :a6205. :a6206 :a6206 :a6206. :a6207 :a6207 :a6207. :a6208 :a6208 :a6208. :a6209 :a6209 :a6209. :a6210 :a6210 :a6210. :a6211 :a6211 :a6211. :a6212 :a6212 :a6212. :a6213 :a6213 :a6213. :a6214 :a6214 :a6214. :a6215 :a6215 :a6215. :a6216 :a6216 :a6216. :a6217 :a6217 :a6217. :a6218 :a6218 :a6218. :a6219 :a6219 :a6219. :a6220 :a6220 :a6220. :a6221 :a6221 :a6221. :a6222 :a6222 :a6222. :a6223 :a6223 :a6223. :a6224 :a6224 :a6224. :a6225 :a6225 :a6225. :a6226 :a6226 :a6226. :a6227 :a6227 :a6227. :a6228 :a6228 :a6228. :a6229 :a6229 :a6229. :a6230 :a6230 :a6230. :a6231 :a6231 :a6231. :a6232 :a6232 :a6232. :a6233 :a6233 :a6233. :a6234 :a6234 :a6234. :a6235 :a6235 :a6235. :a6236 :a6236 :a6236. :a6237 :a6237 :a6237. :a6238 :a6238 :a6238. :a6239 :a6239 :a6239. :a6240 :a6240 :a6240. :a6241 :a6241 :a6241. :a6242 :a6242 :a6242. :a6243 :a6243 :a6243. :a6244 :a6244 :a6244. :a6245 :a6245 :a6245. :a6246 :a6246 :a6246. :a6247 :a6247 :a6247. :a6248 :a6248 :a6248. :a6249 :a6249 :a6249. :a6250 :a6250 :a6250. :a6251 :a6251 :a6251. :a6252 :a6252 :a6252. :a6253 :a6253 :a6253. :a6254 :a6254 :a6254. :a6255 :a6255 :a6255. :a6256 :a6256 :a6256. :a6257 :a6257 :a6257. :a6258 :a6258 :a6258. :a6259 :a6259 :a6259. :a6260 :a6260 :a6260. :a6261 :a6261 :a6261. :a6262 :a6262 :a6262. :a6263 :a6263 :a6263. :a6264 :a6264 :a6264. :a6265 :a6265 :a6265. :a6266 :a6266 :a6266. :a6267 :a6267 :a6267. :a6268 :a6268 :a6268. :a6269 :a6269 :a6269. :a6270 :a6270 :a6270. :a6271 :a6271 :a6271. :a6272 :a6272 :a6272. :a6273 :a6273 :a6273. :a6274 :a6274 :a6274. :a6275 :a6275 :a6275. :a6276 :a6276 :a6276. :a6277 :a6277 :a6277. :a6278 :a6278 :a6278. :a6279 :a6279 :a6279. :a6280 :a6280 :a6280. :a6281 :a6281 :a6281. :a6282 :a6282 :a6282. :a6283 :a6283 :a6283. :a6284 :a6284 :a6284. :a6285 :a6285 :a6285. :a6286 :a6286 :a6286. :a6287 :a6287 :a6287. :a6288 :a6288 :a6288. :a6289 :a6289 :a6289. :a6290 :a6290 :a6290. :a6291 :a6291 :a6291. :a6292 :a6292 :a6292. :a6293 :a6293 :a6293. :a6294 :a6294 :a6294. :a6295 :a6295 :a6295. :a6296 :a6296 :a6296. :a6297 :a6297 :a6297. :a6298 :a6298 :a6298. :a6299 :a6299 :a6299. :a6300 :a6300 :a6300. :a6301 :a6301 :a6301. :a6302 :a6302 :a6302. :a6303 :a6303 :a6303. :a6304 :a6304 :a6304. :a6305 :a6305 :a6305. :a6306 :a6306 :a6306. :a6307 :a6307 :a6307. :a6308 :a6308 :a6308. :a6309 :a6309 :a6309. :a6310 :a6310 :a6310. :a6311 :a6311 :a6311. :a6312 :a6312 :a6312. :a6313 :a6313 :a6313. :a6314 :a6314 :a6314. :a6315 :a6315 :a6315. :a6316 :a6316 :a6316. :a6317 :a6317 :a6317. :a6318 :a6318 :a6318. :a6319 :a6319 :a6319. :a6320 :a6320 :a6320. :a6321 :a6321 :a6321. :a6322 :a6322 :a6322. :a6323 :a6323 :a6323. :a6324 :a6324 :a6324. :a6325 :a6325 :a6325. :a6326 :a6326 :a6326. :a6327 :a6327 :a6327. :a6328 :a6328 :a6328. :a6329 :a6329 :a6329. :a6330 :a6330 :a6330. :a6331 :a6331 :a6331. :a6332 :a6332 :a6332. :a6333 :a6333 :a6333. :a6334 :a6334 :a6334. :a6335 :a6335 :a6335. :a6336 :a6336 :a6336. :a6337 :a6337 :a6337. :a6338 :a6338 :a6338. :a6339 :a6339 :a6339. :a6340 :a6340 :a6340. :a6341 :a6341 :a6341. :a6342 :a6342 :a6342. :a6343 :a6343 :a6343. :a6344 :a6344 :a6344. :a6345 :a6345 :a6345. :a6346 :a6346 :a6346. :a6347 :a6347 :a6347. :a6348 :a6348 :a6348. :a6349 :a6349 :a6349. :a6350 :a6350 :a6350. :a6351 :a6351 :a6351. :a6352 :a6352 :a6352. :a6353 :a6353 :a6353. :a6354 :a6354 :a6354. :a6355 :a6355 :a6355. :a6356 :a6356 :a6356. :a6357 :a6357 :a6357. :a6358 :a6358 :a6358. :a6359 :a6359 :a6359. :a6360 :a6360 :a6360. :a6361 :a6361 :a6361. :a6362 :a6362 :a6362. :a6363 :a6363 :a6363. :a6364 :a6364 :a6364. :a6365 :a6365 :a6365. :a6366 :a6366 :a6366. :a6367 :a6367 :a6367. :a6368 :a6368 :a6368. :a6369 :a6369 :a6369. :a6370 :a6370 :a6370. :a6371 :a6371 :a6371. :a6372 :a6372 :a6372. :a6373 :a6373 :a6373. :a6374 :a6374 :a6374. :a6375 :a6375 :a6375. :a6376 :a6376 :a6376. :a6377 :a6377 :a6377. :a6378 :a6378 :a6378. :a6379 :a6379 :a6379. :a6380 :a6380 :a6380. :a6381 :a6381 :a6381. :a6382 :a6382 :a6382. :a6383 :a6383 :a6383. :a6384 :a6384 :a6384. :a6385 :a6385 :a6385. :a6386 :a6386 :a6386. :a6387 :a6387 :a6387. :a6388 :a6388 :a6388. :a6389 :a6389 :a6389. :a6390 :a6390 :a6390. :a6391 :a6391 :a6391. :a6392 :a6392 :a6392. :a6393 :a6393 :a6393. :a6394 :a6394 :a6394. :a6395 :a6395 :a6395. :a6396 :a6396 :a6396. :a6397 :a6397 :a6397. :a6398 :a6398 :a6398. :a6399 :a6399 :a6399. :a6400 :a6400 :a6400. :a6401 :a6401 :a6401. :a6402 :a6402 :a6402. :a6403 :a6403 :a6403. :a6404 :a6404 :a6404. :a6405 :a6405 :a6405. :a6406 :a6406 :a6406. :a6407 :a6407 :a6407. :a6408 :a6408 :a6408. :a6409 :a6409 :a6409. :a6410 :a6410 :a6410. :a6411 :a6411 :a6411. :a6412 :a6412 :a6412. :a6413 :a6413 :a6413. :a6414 :a6414 :a6414. :a6415 :a6415 :a6415. :a6416 :a6416 :a6416. :a6417 :a6417 :a6417. :a6418 :a6418 :a6418. :a6419 :a6419 :a6419. :a6420 :a6420 :a6420. :a6421 :a6421 :a6421. :a6422 :a6422 :a6422. :a6423 :a6423 :a6423. :a6424 :a6424 :a6424. :a6425 :a6425 :a6425. :a6426 :a6426 :a6426. :a6427 :a6427 :a6427. :a6428 :a6428 :a6428. :a6429 :a6429 :a6429. :a6430 :a6430 :a6430. :a6431 :a6431 :a6431. :a6432 :a6432 :a6432. :a6433 :a6433 :a6433. :a6434 :a6434 :a6434. :a6435 :a6435 :a6435. :a6436 :a6436 :a6436. :a6437 :a6437 :a6437. :a6438 :a6438 :a6438. :a6439 :a6439 :a6439. :a6440 :a6440 :a6440. :a6441 :a6441 :a6441. :a6442 :a6442 :a6442. :a6443 :a6443 :a6443. :a6444 :a6444 :a6444. :a6445 :a6445 :a6445. :a6446 :a6446 :a6446. :a6447 :a6447 :a6447. :a6448 :a6448 :a6448. :a6449 :a6449 :a6449. :a6450 :a6450 :a6450. :a6451 :a6451 :a6451. :a6452 :a6452 :a6452. :a6453 :a6453 :a6453. :a6454 :a6454 :a6454. :a6455 :a6455 :a6455. :a6456 :a6456 :a6456. :a6457 :a6457 :a6457. :a6458 :a6458 :a6458. :a6459 :a6459 :a6459. :a6460 :a6460 :a6460. :a6461 :a6461 :a6461. :a6462 :a6462 :a6462. :a6463 :a6463 :a6463. :a6464 :a6464 :a6464. :a6465 :a6465 :a6465. :a6466 :a6466 :a6466. :a6467 :a6467 :a6467. :a6468 :a6468 :a6468. :a6469 :a6469 :a6469. :a6470 :a6470 :a6470. :a6471 :a6471 :a6471. :a6472 :a6472 :a6472. :a6473 :a6473 :a6473. :a6474 :a6474 :a6474. :a6475 :a6475 :a6475. :a6476 :a6476 :a6476. :a6477 :a6477 :a6477. :a6478 :a6478 :a6478. :a6479 :a6479 :a6479. :a6480 :a6480 :a6480. :a6481 :a6481 :a6481. :a6482 :a6482 :a6482. :a6483 :a6483 :a6483. :a6484 :a6484 :a6484. :a6485 :a6485 :a6485. :a6486 :a6486 :a6486. :a6487 :a6487 :a6487. :a6488 :a6488 :a6488. :a6489 :a6489 :a6489. :a6490 :a6490 :a6490. :a6491 :a6491 :a6491. :a6492 :a6492 :a6492. :a6493 :a6493 :a6493. :a6494 :a6494 :a6494. :a6495 :a6495 :a6495. :a6496 :a6496 :a6496. :a6497 :a6497 :a6497. :a6498 :a6498 :a6498. :a6499 :a6499 :a6499. :a6500 :a6500 :a6500. :a6501 :a6501 :a6501. :a6502 :a6502 :a6502. :a6503 :a6503 :a6503. :a6504 :a6504 :a6504. :a6505 :a6505 :a6505. :a6506 :a6506 :a6506. :a6507 :a6507 :a6507. :a6508 :a6508 :a6508. :a6509 :a6509 :a6509. :a6510 :a6510 :a6510. :a6511 :a6511 :a6511. :a6512 :a6512 :a6512. :a6513 :a6513 :a6513. :a6514 :a6514 :a6514. :a6515 :a6515 :a6515. :a6516 :a6516 :a6516. :a6517 :a6517 :a6517. :a6518 :a6518 :a6518. :a6519 :a6519 :a6519. :a6520 :a6520 :a6520. :a6521 :a6521 :a6521. :a6522 :a6522 :a6522. :a6523 :a6523 :a6523. :a6524 :a6524 :a6524. :a6525 :a6525 :a6525. :a6526 :a6526 :a6526. :a6527 :a6527 :a6527. :a6528 :a6528 :a6528. :a6529 :a6529 :a6529. :a6530 :a6530 :a6530. :a6531 :a6531 :a6531. :a6532 :a6532 :a6532. :a6533 :a6533 :a6533. :a6534 :a6534 :a6534. :a6535 :a6535 :a6535. :a6536 :a6536 :a6536. :a6537 :a6537 :a6537. :a6538 :a6538 :a6538. :a6539 :a6539 :a6539. :a6540 :a6540 :a6540. :a6541 :a6541 :a6541. :a6542 :a6542 :a6542. :a6543 :a6543 :a6543. :a6544 :a6544 :a6544. :a6545 :a6545 :a6545. :a6546 :a6546 :a6546. :a6547 :a6547 :a6547. :a6548 :a6548 :a6548. :a6549 :a6549 :a6549. :a6550 :a6550 :a6550. :a6551 :a6551 :a6551. :a6552 :a6552 :a6552. :a6553 :a6553 :a6553. :a6554 :a6554 :a6554. :a6555 :a6555 :a6555. :a6556 :a6556 :a6556. :a6557 :a6557 :a6557. :a6558 :a6558 :a6558. :a6559 :a6559 :a6559. :a6560 :a6560 :a6560. :a6561 :a6561 :a6561. :a6562 :a6562 :a6562. :a6563 :a6563 :a6563. :a6564 :a6564 :a6564. :a6565 :a6565 :a6565. :a6566 :a6566 :a6566. :a6567 :a6567 :a6567. :a6568 :a6568 :a6568. :a6569 :a6569 :a6569. :a6570 :a6570 :a6570. :a6571 :a6571 :a6571. :a6572 :a6572 :a6572. :a6573 :a6573 :a6573. :a6574 :a6574 :a6574. :a6575 :a6575 :a6575. :a6576 :a6576 :a6576. :a6577 :a6577 :a6577. :a6578 :a6578 :a6578. :a6579 :a6579 :a6579. :a6580 :a6580 :a6580. :a6581 :a6581 :a6581. :a6582 :a6582 :a6582. :a6583 :a6583 :a6583. :a6584 :a6584 :a6584. :a6585 :a6585 :a6585. :a6586 :a6586 :a6586. :a6587 :a6587 :a6587. :a6588 :a6588 :a6588. :a6589 :a6589 :a6589. :a6590 :a6590 :a6590. :a6591 :a6591 :a6591. :a6592 :a6592 :a6592. :a6593 :a6593 :a6593. :a6594 :a6594 :a6594. :a6595 :a6595 :a6595. :a6596 :a6596 :a6596. :a6597 :a6597 :a6597. :a6598 :a6598 :a6598. :a6599 :a6599 :a6599. :a6600 :a6600 :a6600. :a6601 :a6601 :a6601. :a6602 :a6602 :a6602. :a6603 :a6603 :a6603. :a6604 :a6604 :a6604. :a6605 :a6605 :a6605. :a6606 :a6606 :a6606. :a6607 :a6607 :a6607. :a6608 :a6608 :a6608. :a6609 :a6609 :a6609. :a6610 :a6610 :a6610. :a6611 :a6611 :a6611. :a6612 :a6612 :a6612. :a6613 :a6613 :a6613. :a6614 :a6614 :a6614. :a6615 :a6615 :a6615. :a6616 :a6616 :a6616. :a6617 :a6617 :a6617. :a6618 :a6618 :a6618. :a6619 :a6619 :a6619. :a6620 :a6620 :a6620. :a6621 :a6621 :a6621. :a6622 :a6622 :a6622. :a6623 :a6623 :a6623. :a6624 :a6624 :a6624. :a6625 :a6625 :a6625. :a6626 :a6626 :a6626. :a6627 :a6627 :a6627. :a6628 :a6628 :a6628. :a6629 :a6629 :a6629. :a6630 :a6630 :a6630. :a6631 :a6631 :a6631. :a6632 :a6632 :a6632. :a6633 :a6633 :a6633. :a6634 :a6634 :a6634. :a6635 :a6635 :a6635. :a6636 :a6636 :a6636. :a6637 :a6637 :a6637. :a6638 :a6638 :a6638. :a6639 :a6639 :a6639. :a6640 :a6640 :a6640. :a6641 :a6641 :a6641. :a6642 :a6642 :a6642. :a6643 :a6643 :a6643. :a6644 :a6644 :a6644. :a6645 :a6645 :a6645. :a6646 :a6646 :a6646. :a6647 :a6647 :a6647. :a6648 :a6648 :a6648. :a6649 :a6649 :a6649. :a6650 :a6650 :a6650. :a6651 :a6651 :a6651. :a6652 :a6652 :a6652. :a6653 :a6653 :a6653. :a6654 :a6654 :a6654. :a6655 :a6655 :a6655. :a6656 :a6656 :a6656. :a6657 :a6657 :a6657. :a6658 :a6658 :a6658. :a6659 :a6659 :a6659. :a6660 :a6660 :a6660. :a6661 :a6661 :a6661. :a6662 :a6662 :a6662. :a6663 :a6663 :a6663. :a6664 :a6664 :a6664. :a6665 :a6665 :a6665. :a6666 :a6666 :a6666. :a6667 :a6667 :a6667. :a6668 :a6668 :a6668. :a6669 :a6669 :a6669. :a6670 :a6670 :a6670. :a6671 :a6671 :a6671. :a6672 :a6672 :a6672. :a6673 :a6673 :a6673. :a6674 :a6674 :a6674. :a6675 :a6675 :a6675. :a6676 :a6676 :a6676. :a6677 :a6677 :a6677. :a6678 :a6678 :a6678. :a6679 :a6679 :a6679. :a6680 :a6680 :a6680. :a6681 :a6681 :a6681. :a6682 :a6682 :a6682. :a6683 :a6683 :a6683. :a6684 :a6684 :a6684. :a6685 :a6685 :a6685. :a6686 :a6686 :a6686. :a6687 :a6687 :a6687. :a6688 :a6688 :a6688. :a6689 :a6689 :a6689. :a6690 :a6690 :a6690. :a6691 :a6691 :a6691. :a6692 :a6692 :a6692. :a6693 :a6693 :a6693. :a6694 :a6694 :a6694. :a6695 :a6695 :a6695. :a6696 :a6696 :a6696. :a6697 :a6697 :a6697. :a6698 :a6698 :a6698. :a6699 :a6699 :a6699. :a6700 :a6700 :a6700. :a6701 :a6701 :a6701. :a6702 :a6702 :a6702. :a6703 :a6703 :a6703. :a6704 :a6704 :a6704. :a6705 :a6705 :a6705. :a6706 :a6706 :a6706. :a6707 :a6707 :a6707. :a6708 :a6708 :a6708. :a6709 :a6709 :a6709. :a6710 :a6710 :a6710. :a6711 :a6711 :a6711. :a6712 :a6712 :a6712. :a6713 :a6713 :a6713. :a6714 :a6714 :a6714. :a6715 :a6715 :a6715. :a6716 :a6716 :a6716. :a6717 :a6717 :a6717. :a6718 :a6718 :a6718. :a6719 :a6719 :a6719. :a6720 :a6720 :a6720. :a6721 :a6721 :a6721. :a6722 :a6722 :a6722. :a6723 :a6723 :a6723. :a6724 :a6724 :a6724. :a6725 :a6725 :a6725. :a6726 :a6726 :a6726. :a6727 :a6727 :a6727. :a6728 :a6728 :a6728. :a6729 :a6729 :a6729. :a6730 :a6730 :a6730. :a6731 :a6731 :a6731. :a6732 :a6732 :a6732. :a6733 :a6733 :a6733. :a6734 :a6734 :a6734. :a6735 :a6735 :a6735. :a6736 :a6736 :a6736. :a6737 :a6737 :a6737. :a6738 :a6738 :a6738. :a6739 :a6739 :a6739. :a6740 :a6740 :a6740. :a6741 :a6741 :a6741. :a6742 :a6742 :a6742. :a6743 :a6743 :a6743. :a6744 :a6744 :a6744. :a6745 :a6745 :a6745. :a6746 :a6746 :a6746. :a6747 :a6747 :a6747. :a6748 :a6748 :a6748. :a6749 :a6749 :a6749. :a6750 :a6750 :a6750. :a6751 :a6751 :a6751. :a6752 :a6752 :a6752. :a6753 :a6753 :a6753. :a6754 :a6754 :a6754. :a6755 :a6755 :a6755. :a6756 :a6756 :a6756. :a6757 :a6757 :a6757. :a6758 :a6758 :a6758. :a6759 :a6759 :a6759. :a6760 :a6760 :a6760. :a6761 :a6761 :a6761. :a6762 :a6762 :a6762. :a6763 :a6763 :a6763. :a6764 :a6764 :a6764. :a6765 :a6765 :a6765. :a6766 :a6766 :a6766. :a6767 :a6767 :a6767. :a6768 :a6768 :a6768. :a6769 :a6769 :a6769. :a6770 :a6770 :a6770. :a6771 :a6771 :a6771. :a6772 :a6772 :a6772. :a6773 :a6773 :a6773. :a6774 :a6774 :a6774. :a6775 :a6775 :a6775. :a6776 :a6776 :a6776. :a6777 :a6777 :a6777. :a6778 :a6778 :a6778. :a6779 :a6779 :a6779. :a6780 :a6780 :a6780. :a6781 :a6781 :a6781. :a6782 :a6782 :a6782. :a6783 :a6783 :a6783. :a6784 :a6784 :a6784. :a6785 :a6785 :a6785. :a6786 :a6786 :a6786. :a6787 :a6787 :a6787. :a6788 :a6788 :a6788. :a6789 :a6789 :a6789. :a6790 :a6790 :a6790. :a6791 :a6791 :a6791. :a6792 :a6792 :a6792. :a6793 :a6793 :a6793. :a6794 :a6794 :a6794. :a6795 :a6795 :a6795. :a6796 :a6796 :a6796. :a6797 :a6797 :a6797. :a6798 :a6798 :a6798. :a6799 :a6799 :a6799. :a6800 :a6800 :a6800. :a6801 :a6801 :a6801. :a6802 :a6802 :a6802. :a6803 :a6803 :a6803. :a6804 :a6804 :a6804. :a6805 :a6805 :a6805. :a6806 :a6806 :a6806. :a6807 :a6807 :a6807. :a6808 :a6808 :a6808. :a6809 :a6809 :a6809. :a6810 :a6810 :a6810. :a6811 :a6811 :a6811. :a6812 :a6812 :a6812. :a6813 :a6813 :a6813. :a6814 :a6814 :a6814. :a6815 :a6815 :a6815. :a6816 :a6816 :a6816. :a6817 :a6817 :a6817. :a6818 :a6818 :a6818. :a6819 :a6819 :a6819. :a6820 :a6820 :a6820. :a6821 :a6821 :a6821. :a6822 :a6822 :a6822. :a6823 :a6823 :a6823. :a6824 :a6824 :a6824. :a6825 :a6825 :a6825. :a6826 :a6826 :a6826. :a6827 :a6827 :a6827. :a6828 :a6828 :a6828. :a6829 :a6829 :a6829. :a6830 :a6830 :a6830. :a6831 :a6831 :a6831. :a6832 :a6832 :a6832. :a6833 :a6833 :a6833. :a6834 :a6834 :a6834. :a6835 :a6835 :a6835. :a6836 :a6836 :a6836. :a6837 :a6837 :a6837. :a6838 :a6838 :a6838. :a6839 :a6839 :a6839. :a6840 :a6840 :a6840. :a6841 :a6841 :a6841. :a6842 :a6842 :a6842. :a6843 :a6843 :a6843. :a6844 :a6844 :a6844. :a6845 :a6845 :a6845. :a6846 :a6846 :a6846. :a6847 :a6847 :a6847. :a6848 :a6848 :a6848. :a6849 :a6849 :a6849. :a6850 :a6850 :a6850. :a6851 :a6851 :a6851. :a6852 :a6852 :a6852. :a6853 :a6853 :a6853. :a6854 :a6854 :a6854. :a6855 :a6855 :a6855. :a6856 :a6856 :a6856. :a6857 :a6857 :a6857. :a6858 :a6858 :a6858. :a6859 :a6859 :a6859. :a6860 :a6860 :a6860. :a6861 :a6861 :a6861. :a6862 :a6862 :a6862. :a6863 :a6863 :a6863. :a6864 :a6864 :a6864. :a6865 :a6865 :a6865. :a6866 :a6866 :a6866. :a6867 :a6867 :a6867. :a6868 :a6868 :a6868. :a6869 :a6869 :a6869. :a6870 :a6870 :a6870. :a6871 :a6871 :a6871. :a6872 :a6872 :a6872. :a6873 :a6873 :a6873. :a6874 :a6874 :a6874. :a6875 :a6875 :a6875. :a6876 :a6876 :a6876. :a6877 :a6877 :a6877. :a6878 :a6878 :a6878. :a6879 :a6879 :a6879. :a6880 :a6880 :a6880. :a6881 :a6881 :a6881. :a6882 :a6882 :a6882. :a6883 :a6883 :a6883. :a6884 :a6884 :a6884. :a6885 :a6885 :a6885. :a6886 :a6886 :a6886. :a6887 :a6887 :a6887. :a6888 :a6888 :a6888. :a6889 :a6889 :a6889. :a6890 :a6890 :a6890. :a6891 :a6891 :a6891. :a6892 :a6892 :a6892. :a6893 :a6893 :a6893. :a6894 :a6894 :a6894. :a6895 :a6895 :a6895. :a6896 :a6896 :a6896. :a6897 :a6897 :a6897. :a6898 :a6898 :a6898. :a6899 :a6899 :a6899. :a6900 :a6900 :a6900. :a6901 :a6901 :a6901. :a6902 :a6902 :a6902. :a6903 :a6903 :a6903. :a6904 :a6904 :a6904. :a6905 :a6905 :a6905. :a6906 :a6906 :a6906. :a6907 :a6907 :a6907. :a6908 :a6908 :a6908. :a6909 :a6909 :a6909. :a6910 :a6910 :a6910. :a6911 :a6911 :a6911. :a6912 :a6912 :a6912. :a6913 :a6913 :a6913. :a6914 :a6914 :a6914. :a6915 :a6915 :a6915. :a6916 :a6916 :a6916. :a6917 :a6917 :a6917. :a6918 :a6918 :a6918. :a6919 :a6919 :a6919. :a6920 :a6920 :a6920. :a6921 :a6921 :a6921. :a6922 :a6922 :a6922. :a6923 :a6923 :a6923. :a6924 :a6924 :a6924. :a6925 :a6925 :a6925. :a6926 :a6926 :a6926. :a6927 :a6927 :a6927. :a6928 :a6928 :a6928. :a6929 :a6929 :a6929. :a6930 :a6930 :a6930. :a6931 :a6931 :a6931. :a6932 :a6932 :a6932. :a6933 :a6933 :a6933. :a6934 :a6934 :a6934. :a6935 :a6935 :a6935. :a6936 :a6936 :a6936. :a6937 :a6937 :a6937. :a6938 :a6938 :a6938. :a6939 :a6939 :a6939. :a6940 :a6940 :a6940. :a6941 :a6941 :a6941. :a6942 :a6942 :a6942. :a6943 :a6943 :a6943. :a6944 :a6944 :a6944. :a6945 :a6945 :a6945. :a6946 :a6946 :a6946. :a6947 :a6947 :a6947. :a6948 :a6948 :a6948. :a6949 :a6949 :a6949. :a6950 :a6950 :a6950. :a6951 :a6951 :a6951. :a6952 :a6952 :a6952. :a6953 :a6953 :a6953. :a6954 :a6954 :a6954. :a6955 :a6955 :a6955. :a6956 :a6956 :a6956. :a6957 :a6957 :a6957. :a6958 :a6958 :a6958. :a6959 :a6959 :a6959. :a6960 :a6960 :a6960. :a6961 :a6961 :a6961. :a6962 :a6962 :a6962. :a6963 :a6963 :a6963. :a6964 :a6964 :a6964. :a6965 :a6965 :a6965. :a6966 :a6966 :a6966. :a6967 :a6967 :a6967. :a6968 :a6968 :a6968. :a6969 :a6969 :a6969. :a6970 :a6970 :a6970. :a6971 :a6971 :a6971. :a6972 :a6972 :a6972. :a6973 :a6973 :a6973. :a6974 :a6974 :a6974. :a6975 :a6975 :a6975. :a6976 :a6976 :a6976. :a6977 :a6977 :a6977. :a6978 :a6978 :a6978. :a6979 :a6979 :a6979. :a6980 :a6980 :a6980. :a6981 :a6981 :a6981. :a6982 :a6982 :a6982. :a6983 :a6983 :a6983. :a6984 :a6984 :a6984. :a6985 :a6985 :a6985. :a6986 :a6986 :a6986. :a6987 :a6987 :a6987. :a6988 :a6988 :a6988. :a6989 :a6989 :a6989. :a6990 :a6990 :a6990. :a6991 :a6991 :a6991. :a6992 :a6992 :a6992. :a6993 :a6993 :a6993. :a6994 :a6994 :a6994. :a6995 :a6995 :a6995. :a6996 :a6996 :a6996. :a6997 :a6997 :a6997. :a6998 :a6998 :a6998. :a6999 :a6999 :a6999. :a7000 :a7000 :a7000. :a7001 :a7001 :a7001. :a7002 :a7002 :a7002. :a7003 :a7003 :a7003. :a7004 :a7004 :a7004. :a7005 :a7005 :a7005. :a7006 :a7006 :a7006. :a7007 :a7007 :a7007. :a7008 :a7008 :a7008. :a7009 :a7009 :a7009. :a7010 :a7010 :a7010. :a7011 :a7011 :a7011. :a7012 :a7012 :a7012. :a7013 :a7013 :a7013. :a7014 :a7014 :a7014. :a7015 :a7015 :a7015. :a7016 :a7016 :a7016. :a7017 :a7017 :a7017. :a7018 :a7018 :a7018. :a7019 :a7019 :a7019. :a7020 :a7020 :a7020. :a7021 :a7021 :a7021. :a7022 :a7022 :a7022. :a7023 :a7023 :a7023. :a7024 :a7024 :a7024. :a7025 :a7025 :a7025. :a7026 :a7026 :a7026. :a7027 :a7027 :a7027. :a7028 :a7028 :a7028. :a7029 :a7029 :a7029. :a7030 :a7030 :a7030. :a7031 :a7031 :a7031. :a7032 :a7032 :a7032. :a7033 :a7033 :a7033. :a7034 :a7034 :a7034. :a7035 :a7035 :a7035. :a7036 :a7036 :a7036. :a7037 :a7037 :a7037. :a7038 :a7038 :a7038. :a7039 :a7039 :a7039. :a7040 :a7040 :a7040. :a7041 :a7041 :a7041. :a7042 :a7042 :a7042. :a7043 :a7043 :a7043. :a7044 :a7044 :a7044. :a7045 :a7045 :a7045. :a7046 :a7046 :a7046. :a7047 :a7047 :a7047. :a7048 :a7048 :a7048. :a7049 :a7049 :a7049. :a7050 :a7050 :a7050. :a7051 :a7051 :a7051. :a7052 :a7052 :a7052. :a7053 :a7053 :a7053. :a7054 :a7054 :a7054. :a7055 :a7055 :a7055. :a7056 :a7056 :a7056. :a7057 :a7057 :a7057. :a7058 :a7058 :a7058. :a7059 :a7059 :a7059. :a7060 :a7060 :a7060. :a7061 :a7061 :a7061. :a7062 :a7062 :a7062. :a7063 :a7063 :a7063. :a7064 :a7064 :a7064. :a7065 :a7065 :a7065. :a7066 :a7066 :a7066. :a7067 :a7067 :a7067. :a7068 :a7068 :a7068. :a7069 :a7069 :a7069. :a7070 :a7070 :a7070. :a7071 :a7071 :a7071. :a7072 :a7072 :a7072. :a7073 :a7073 :a7073. :a7074 :a7074 :a7074. :a7075 :a7075 :a7075. :a7076 :a7076 :a7076. :a7077 :a7077 :a7077. :a7078 :a7078 :a7078. :a7079 :a7079 :a7079. :a7080 :a7080 :a7080. :a7081 :a7081 :a7081. :a7082 :a7082 :a7082. :a7083 :a7083 :a7083. :a7084 :a7084 :a7084. :a7085 :a7085 :a7085. :a7086 :a7086 :a7086. :a7087 :a7087 :a7087. :a7088 :a7088 :a7088. :a7089 :a7089 :a7089. :a7090 :a7090 :a7090. :a7091 :a7091 :a7091. :a7092 :a7092 :a7092. :a7093 :a7093 :a7093. :a7094 :a7094 :a7094. :a7095 :a7095 :a7095. :a7096 :a7096 :a7096. :a7097 :a7097 :a7097. :a7098 :a7098 :a7098. :a7099 :a7099 :a7099. :a7100 :a7100 :a7100. :a7101 :a7101 :a7101. :a7102 :a7102 :a7102. :a7103 :a7103 :a7103. :a7104 :a7104 :a7104. :a7105 :a7105 :a7105. :a7106 :a7106 :a7106. :a7107 :a7107 :a7107. :a7108 :a7108 :a7108. :a7109 :a7109 :a7109. :a7110 :a7110 :a7110. :a7111 :a7111 :a7111. :a7112 :a7112 :a7112. :a7113 :a7113 :a7113. :a7114 :a7114 :a7114. :a7115 :a7115 :a7115. :a7116 :a7116 :a7116. :a7117 :a7117 :a7117. :a7118 :a7118 :a7118. :a7119 :a7119 :a7119. :a7120 :a7120 :a7120. :a7121 :a7121 :a7121. :a7122 :a7122 :a7122. :a7123 :a7123 :a7123. :a7124 :a7124 :a7124. :a7125 :a7125 :a7125. :a7126 :a7126 :a7126. :a7127 :a7127 :a7127. :a7128 :a7128 :a7128. :a7129 :a7129 :a7129. :a7130 :a7130 :a7130. :a7131 :a7131 :a7131. :a7132 :a7132 :a7132. :a7133 :a7133 :a7133. :a7134 :a7134 :a7134. :a7135 :a7135 :a7135. :a7136 :a7136 :a7136. :a7137 :a7137 :a7137. :a7138 :a7138 :a7138. :a7139 :a7139 :a7139. :a7140 :a7140 :a7140. :a7141 :a7141 :a7141. :a7142 :a7142 :a7142. :a7143 :a7143 :a7143. :a7144 :a7144 :a7144. :a7145 :a7145 :a7145. :a7146 :a7146 :a7146. :a7147 :a7147 :a7147. :a7148 :a7148 :a7148. :a7149 :a7149 :a7149. :a7150 :a7150 :a7150. :a7151 :a7151 :a7151. :a7152 :a7152 :a7152. :a7153 :a7153 :a7153. :a7154 :a7154 :a7154. :a7155 :a7155 :a7155. :a7156 :a7156 :a7156. :a7157 :a7157 :a7157. :a7158 :a7158 :a7158. :a7159 :a7159 :a7159. :a7160 :a7160 :a7160. :a7161 :a7161 :a7161. :a7162 :a7162 :a7162. :a7163 :a7163 :a7163. :a7164 :a7164 :a7164. :a7165 :a7165 :a7165. :a7166 :a7166 :a7166. :a7167 :a7167 :a7167. :a7168 :a7168 :a7168. :a7169 :a7169 :a7169. :a7170 :a7170 :a7170. :a7171 :a7171 :a7171. :a7172 :a7172 :a7172. :a7173 :a7173 :a7173. :a7174 :a7174 :a7174. :a7175 :a7175 :a7175. :a7176 :a7176 :a7176. :a7177 :a7177 :a7177. :a7178 :a7178 :a7178. :a7179 :a7179 :a7179. :a7180 :a7180 :a7180. :a7181 :a7181 :a7181. :a7182 :a7182 :a7182. :a7183 :a7183 :a7183. :a7184 :a7184 :a7184. :a7185 :a7185 :a7185. :a7186 :a7186 :a7186. :a7187 :a7187 :a7187. :a7188 :a7188 :a7188. :a7189 :a7189 :a7189. :a7190 :a7190 :a7190. :a7191 :a7191 :a7191. :a7192 :a7192 :a7192. :a7193 :a7193 :a7193. :a7194 :a7194 :a7194. :a7195 :a7195 :a7195. :a7196 :a7196 :a7196. :a7197 :a7197 :a7197. :a7198 :a7198 :a7198. :a7199 :a7199 :a7199. :a7200 :a7200 :a7200. :a7201 :a7201 :a7201. :a7202 :a7202 :a7202. :a7203 :a7203 :a7203. :a7204 :a7204 :a7204. :a7205 :a7205 :a7205. :a7206 :a7206 :a7206. :a7207 :a7207 :a7207. :a7208 :a7208 :a7208. :a7209 :a7209 :a7209. :a7210 :a7210 :a7210. :a7211 :a7211 :a7211. :a7212 :a7212 :a7212. :a7213 :a7213 :a7213. :a7214 :a7214 :a7214. :a7215 :a7215 :a7215. :a7216 :a7216 :a7216. :a7217 :a7217 :a7217. :a7218 :a7218 :a7218. :a7219 :a7219 :a7219. :a7220 :a7220 :a7220. :a7221 :a7221 :a7221. :a7222 :a7222 :a7222. :a7223 :a7223 :a7223. :a7224 :a7224 :a7224. :a7225 :a7225 :a7225. :a7226 :a7226 :a7226. :a7227 :a7227 :a7227. :a7228 :a7228 :a7228. :a7229 :a7229 :a7229. :a7230 :a7230 :a7230. :a7231 :a7231 :a7231. :a7232 :a7232 :a7232. :a7233 :a7233 :a7233. :a7234 :a7234 :a7234. :a7235 :a7235 :a7235. :a7236 :a7236 :a7236. :a7237 :a7237 :a7237. :a7238 :a7238 :a7238. :a7239 :a7239 :a7239. :a7240 :a7240 :a7240. :a7241 :a7241 :a7241. :a7242 :a7242 :a7242. :a7243 :a7243 :a7243. :a7244 :a7244 :a7244. :a7245 :a7245 :a7245. :a7246 :a7246 :a7246. :a7247 :a7247 :a7247. :a7248 :a7248 :a7248. :a7249 :a7249 :a7249. :a7250 :a7250 :a7250. :a7251 :a7251 :a7251. :a7252 :a7252 :a7252. :a7253 :a7253 :a7253. :a7254 :a7254 :a7254. :a7255 :a7255 :a7255. :a7256 :a7256 :a7256. :a7257 :a7257 :a7257. :a7258 :a7258 :a7258. :a7259 :a7259 :a7259. :a7260 :a7260 :a7260. :a7261 :a7261 :a7261. :a7262 :a7262 :a7262. :a7263 :a7263 :a7263. :a7264 :a7264 :a7264. :a7265 :a7265 :a7265. :a7266 :a7266 :a7266. :a7267 :a7267 :a7267. :a7268 :a7268 :a7268. :a7269 :a7269 :a7269. :a7270 :a7270 :a7270. :a7271 :a7271 :a7271. :a7272 :a7272 :a7272. :a7273 :a7273 :a7273. :a7274 :a7274 :a7274. :a7275 :a7275 :a7275. :a7276 :a7276 :a7276. :a7277 :a7277 :a7277. :a7278 :a7278 :a7278. :a7279 :a7279 :a7279. :a7280 :a7280 :a7280. :a7281 :a7281 :a7281. :a7282 :a7282 :a7282. :a7283 :a7283 :a7283. :a7284 :a7284 :a7284. :a7285 :a7285 :a7285. :a7286 :a7286 :a7286. :a7287 :a7287 :a7287. :a7288 :a7288 :a7288. :a7289 :a7289 :a7289. :a7290 :a7290 :a7290. :a7291 :a7291 :a7291. :a7292 :a7292 :a7292. :a7293 :a7293 :a7293. :a7294 :a7294 :a7294. :a7295 :a7295 :a7295. :a7296 :a7296 :a7296. :a7297 :a7297 :a7297. :a7298 :a7298 :a7298. :a7299 :a7299 :a7299. :a7300 :a7300 :a7300. :a7301 :a7301 :a7301. :a7302 :a7302 :a7302. :a7303 :a7303 :a7303. :a7304 :a7304 :a7304. :a7305 :a7305 :a7305. :a7306 :a7306 :a7306. :a7307 :a7307 :a7307. :a7308 :a7308 :a7308. :a7309 :a7309 :a7309. :a7310 :a7310 :a7310. :a7311 :a7311 :a7311. :a7312 :a7312 :a7312. :a7313 :a7313 :a7313. :a7314 :a7314 :a7314. :a7315 :a7315 :a7315. :a7316 :a7316 :a7316. :a7317 :a7317 :a7317. :a7318 :a7318 :a7318. :a7319 :a7319 :a7319. :a7320 :a7320 :a7320. :a7321 :a7321 :a7321. :a7322 :a7322 :a7322. :a7323 :a7323 :a7323. :a7324 :a7324 :a7324. :a7325 :a7325 :a7325. :a7326 :a7326 :a7326. :a7327 :a7327 :a7327. :a7328 :a7328 :a7328. :a7329 :a7329 :a7329. :a7330 :a7330 :a7330. :a7331 :a7331 :a7331. :a7332 :a7332 :a7332. :a7333 :a7333 :a7333. :a7334 :a7334 :a7334. :a7335 :a7335 :a7335. :a7336 :a7336 :a7336. :a7337 :a7337 :a7337. :a7338 :a7338 :a7338. :a7339 :a7339 :a7339. :a7340 :a7340 :a7340. :a7341 :a7341 :a7341. :a7342 :a7342 :a7342. :a7343 :a7343 :a7343. :a7344 :a7344 :a7344. :a7345 :a7345 :a7345. :a7346 :a7346 :a7346. :a7347 :a7347 :a7347. :a7348 :a7348 :a7348. :a7349 :a7349 :a7349. :a7350 :a7350 :a7350. :a7351 :a7351 :a7351. :a7352 :a7352 :a7352. :a7353 :a7353 :a7353. :a7354 :a7354 :a7354. :a7355 :a7355 :a7355. :a7356 :a7356 :a7356. :a7357 :a7357 :a7357. :a7358 :a7358 :a7358. :a7359 :a7359 :a7359. :a7360 :a7360 :a7360. :a7361 :a7361 :a7361. :a7362 :a7362 :a7362. :a7363 :a7363 :a7363. :a7364 :a7364 :a7364. :a7365 :a7365 :a7365. :a7366 :a7366 :a7366. :a7367 :a7367 :a7367. :a7368 :a7368 :a7368. :a7369 :a7369 :a7369. :a7370 :a7370 :a7370. :a7371 :a7371 :a7371. :a7372 :a7372 :a7372. :a7373 :a7373 :a7373. :a7374 :a7374 :a7374. :a7375 :a7375 :a7375. :a7376 :a7376 :a7376. :a7377 :a7377 :a7377. :a7378 :a7378 :a7378. :a7379 :a7379 :a7379. :a7380 :a7380 :a7380. :a7381 :a7381 :a7381. :a7382 :a7382 :a7382. :a7383 :a7383 :a7383. :a7384 :a7384 :a7384. :a7385 :a7385 :a7385. :a7386 :a7386 :a7386. :a7387 :a7387 :a7387. :a7388 :a7388 :a7388. :a7389 :a7389 :a7389. :a7390 :a7390 :a7390. :a7391 :a7391 :a7391. :a7392 :a7392 :a7392. :a7393 :a7393 :a7393. :a7394 :a7394 :a7394. :a7395 :a7395 :a7395. :a7396 :a7396 :a7396. :a7397 :a7397 :a7397. :a7398 :a7398 :a7398. :a7399 :a7399 :a7399. :a7400 :a7400 :a7400. :a7401 :a7401 :a7401. :a7402 :a7402 :a7402. :a7403 :a7403 :a7403. :a7404 :a7404 :a7404. :a7405 :a7405 :a7405. :a7406 :a7406 :a7406. :a7407 :a7407 :a7407. :a7408 :a7408 :a7408. :a7409 :a7409 :a7409. :a7410 :a7410 :a7410. :a7411 :a7411 :a7411. :a7412 :a7412 :a7412. :a7413 :a7413 :a7413. :a7414 :a7414 :a7414. :a7415 :a7415 :a7415. :a7416 :a7416 :a7416. :a7417 :a7417 :a7417. :a7418 :a7418 :a7418. :a7419 :a7419 :a7419. :a7420 :a7420 :a7420. :a7421 :a7421 :a7421. :a7422 :a7422 :a7422. :a7423 :a7423 :a7423. :a7424 :a7424 :a7424. :a7425 :a7425 :a7425. :a7426 :a7426 :a7426. :a7427 :a7427 :a7427. :a7428 :a7428 :a7428. :a7429 :a7429 :a7429. :a7430 :a7430 :a7430. :a7431 :a7431 :a7431. :a7432 :a7432 :a7432. :a7433 :a7433 :a7433. :a7434 :a7434 :a7434. :a7435 :a7435 :a7435. :a7436 :a7436 :a7436. :a7437 :a7437 :a7437. :a7438 :a7438 :a7438. :a7439 :a7439 :a7439. :a7440 :a7440 :a7440. :a7441 :a7441 :a7441. :a7442 :a7442 :a7442. :a7443 :a7443 :a7443. :a7444 :a7444 :a7444. :a7445 :a7445 :a7445. :a7446 :a7446 :a7446. :a7447 :a7447 :a7447. :a7448 :a7448 :a7448. :a7449 :a7449 :a7449. :a7450 :a7450 :a7450. :a7451 :a7451 :a7451. :a7452 :a7452 :a7452. :a7453 :a7453 :a7453. :a7454 :a7454 :a7454. :a7455 :a7455 :a7455. :a7456 :a7456 :a7456. :a7457 :a7457 :a7457. :a7458 :a7458 :a7458. :a7459 :a7459 :a7459. :a7460 :a7460 :a7460. :a7461 :a7461 :a7461. :a7462 :a7462 :a7462. :a7463 :a7463 :a7463. :a7464 :a7464 :a7464. :a7465 :a7465 :a7465. :a7466 :a7466 :a7466. :a7467 :a7467 :a7467. :a7468 :a7468 :a7468. :a7469 :a7469 :a7469. :a7470 :a7470 :a7470. :a7471 :a7471 :a7471. :a7472 :a7472 :a7472. :a7473 :a7473 :a7473. :a7474 :a7474 :a7474. :a7475 :a7475 :a7475. :a7476 :a7476 :a7476. :a7477 :a7477 :a7477. :a7478 :a7478 :a7478. :a7479 :a7479 :a7479. :a7480 :a7480 :a7480. :a7481 :a7481 :a7481. :a7482 :a7482 :a7482. :a7483 :a7483 :a7483. :a7484 :a7484 :a7484. :a7485 :a7485 :a7485. :a7486 :a7486 :a7486. :a7487 :a7487 :a7487. :a7488 :a7488 :a7488. :a7489 :a7489 :a7489. :a7490 :a7490 :a7490. :a7491 :a7491 :a7491. :a7492 :a7492 :a7492. :a7493 :a7493 :a7493. :a7494 :a7494 :a7494. :a7495 :a7495 :a7495. :a7496 :a7496 :a7496. :a7497 :a7497 :a7497. :a7498 :a7498 :a7498. :a7499 :a7499 :a7499. :a7500 :a7500 :a7500. :a7501 :a7501 :a7501. :a7502 :a7502 :a7502. :a7503 :a7503 :a7503. :a7504 :a7504 :a7504. :a7505 :a7505 :a7505. :a7506 :a7506 :a7506. :a7507 :a7507 :a7507. :a7508 :a7508 :a7508. :a7509 :a7509 :a7509. :a7510 :a7510 :a7510. :a7511 :a7511 :a7511. :a7512 :a7512 :a7512. :a7513 :a7513 :a7513. :a7514 :a7514 :a7514. :a7515 :a7515 :a7515. :a7516 :a7516 :a7516. :a7517 :a7517 :a7517. :a7518 :a7518 :a7518. :a7519 :a7519 :a7519. :a7520 :a7520 :a7520. :a7521 :a7521 :a7521. :a7522 :a7522 :a7522. :a7523 :a7523 :a7523. :a7524 :a7524 :a7524. :a7525 :a7525 :a7525. :a7526 :a7526 :a7526. :a7527 :a7527 :a7527. :a7528 :a7528 :a7528. :a7529 :a7529 :a7529. :a7530 :a7530 :a7530. :a7531 :a7531 :a7531. :a7532 :a7532 :a7532. :a7533 :a7533 :a7533. :a7534 :a7534 :a7534. :a7535 :a7535 :a7535. :a7536 :a7536 :a7536. :a7537 :a7537 :a7537. :a7538 :a7538 :a7538. :a7539 :a7539 :a7539. :a7540 :a7540 :a7540. :a7541 :a7541 :a7541. :a7542 :a7542 :a7542. :a7543 :a7543 :a7543. :a7544 :a7544 :a7544. :a7545 :a7545 :a7545. :a7546 :a7546 :a7546. :a7547 :a7547 :a7547. :a7548 :a7548 :a7548. :a7549 :a7549 :a7549. :a7550 :a7550 :a7550. :a7551 :a7551 :a7551. :a7552 :a7552 :a7552. :a7553 :a7553 :a7553. :a7554 :a7554 :a7554. :a7555 :a7555 :a7555. :a7556 :a7556 :a7556. :a7557 :a7557 :a7557. :a7558 :a7558 :a7558. :a7559 :a7559 :a7559. :a7560 :a7560 :a7560. :a7561 :a7561 :a7561. :a7562 :a7562 :a7562. :a7563 :a7563 :a7563. :a7564 :a7564 :a7564. :a7565 :a7565 :a7565. :a7566 :a7566 :a7566. :a7567 :a7567 :a7567. :a7568 :a7568 :a7568. :a7569 :a7569 :a7569. :a7570 :a7570 :a7570. :a7571 :a7571 :a7571. :a7572 :a7572 :a7572. :a7573 :a7573 :a7573. :a7574 :a7574 :a7574. :a7575 :a7575 :a7575. :a7576 :a7576 :a7576. :a7577 :a7577 :a7577. :a7578 :a7578 :a7578. :a7579 :a7579 :a7579. :a7580 :a7580 :a7580. :a7581 :a7581 :a7581. :a7582 :a7582 :a7582. :a7583 :a7583 :a7583. :a7584 :a7584 :a7584. :a7585 :a7585 :a7585. :a7586 :a7586 :a7586. :a7587 :a7587 :a7587. :a7588 :a7588 :a7588. :a7589 :a7589 :a7589. :a7590 :a7590 :a7590. :a7591 :a7591 :a7591. :a7592 :a7592 :a7592. :a7593 :a7593 :a7593. :a7594 :a7594 :a7594. :a7595 :a7595 :a7595. :a7596 :a7596 :a7596. :a7597 :a7597 :a7597. :a7598 :a7598 :a7598. :a7599 :a7599 :a7599. :a7600 :a7600 :a7600. :a7601 :a7601 :a7601. :a7602 :a7602 :a7602. :a7603 :a7603 :a7603. :a7604 :a7604 :a7604. :a7605 :a7605 :a7605. :a7606 :a7606 :a7606. :a7607 :a7607 :a7607. :a7608 :a7608 :a7608. :a7609 :a7609 :a7609. :a7610 :a7610 :a7610. :a7611 :a7611 :a7611. :a7612 :a7612 :a7612. :a7613 :a7613 :a7613. :a7614 :a7614 :a7614. :a7615 :a7615 :a7615. :a7616 :a7616 :a7616. :a7617 :a7617 :a7617. :a7618 :a7618 :a7618. :a7619 :a7619 :a7619. :a7620 :a7620 :a7620. :a7621 :a7621 :a7621. :a7622 :a7622 :a7622. :a7623 :a7623 :a7623. :a7624 :a7624 :a7624. :a7625 :a7625 :a7625. :a7626 :a7626 :a7626. :a7627 :a7627 :a7627. :a7628 :a7628 :a7628. :a7629 :a7629 :a7629. :a7630 :a7630 :a7630. :a7631 :a7631 :a7631. :a7632 :a7632 :a7632. :a7633 :a7633 :a7633. :a7634 :a7634 :a7634. :a7635 :a7635 :a7635. :a7636 :a7636 :a7636. :a7637 :a7637 :a7637. :a7638 :a7638 :a7638. :a7639 :a7639 :a7639. :a7640 :a7640 :a7640. :a7641 :a7641 :a7641. :a7642 :a7642 :a7642. :a7643 :a7643 :a7643. :a7644 :a7644 :a7644. :a7645 :a7645 :a7645. :a7646 :a7646 :a7646. :a7647 :a7647 :a7647. :a7648 :a7648 :a7648. :a7649 :a7649 :a7649. :a7650 :a7650 :a7650. :a7651 :a7651 :a7651. :a7652 :a7652 :a7652. :a7653 :a7653 :a7653. :a7654 :a7654 :a7654. :a7655 :a7655 :a7655. :a7656 :a7656 :a7656. :a7657 :a7657 :a7657. :a7658 :a7658 :a7658. :a7659 :a7659 :a7659. :a7660 :a7660 :a7660. :a7661 :a7661 :a7661. :a7662 :a7662 :a7662. :a7663 :a7663 :a7663. :a7664 :a7664 :a7664. :a7665 :a7665 :a7665. :a7666 :a7666 :a7666. :a7667 :a7667 :a7667. :a7668 :a7668 :a7668. :a7669 :a7669 :a7669. :a7670 :a7670 :a7670. :a7671 :a7671 :a7671. :a7672 :a7672 :a7672. :a7673 :a7673 :a7673. :a7674 :a7674 :a7674. :a7675 :a7675 :a7675. :a7676 :a7676 :a7676. :a7677 :a7677 :a7677. :a7678 :a7678 :a7678. :a7679 :a7679 :a7679. :a7680 :a7680 :a7680. :a7681 :a7681 :a7681. :a7682 :a7682 :a7682. :a7683 :a7683 :a7683. :a7684 :a7684 :a7684. :a7685 :a7685 :a7685. :a7686 :a7686 :a7686. :a7687 :a7687 :a7687. :a7688 :a7688 :a7688. :a7689 :a7689 :a7689. :a7690 :a7690 :a7690. :a7691 :a7691 :a7691. :a7692 :a7692 :a7692. :a7693 :a7693 :a7693. :a7694 :a7694 :a7694. :a7695 :a7695 :a7695. :a7696 :a7696 :a7696. :a7697 :a7697 :a7697. :a7698 :a7698 :a7698. :a7699 :a7699 :a7699. :a7700 :a7700 :a7700. :a7701 :a7701 :a7701. :a7702 :a7702 :a7702. :a7703 :a7703 :a7703. :a7704 :a7704 :a7704. :a7705 :a7705 :a7705. :a7706 :a7706 :a7706. :a7707 :a7707 :a7707. :a7708 :a7708 :a7708. :a7709 :a7709 :a7709. :a7710 :a7710 :a7710. :a7711 :a7711 :a7711. :a7712 :a7712 :a7712. :a7713 :a7713 :a7713. :a7714 :a7714 :a7714. :a7715 :a7715 :a7715. :a7716 :a7716 :a7716. :a7717 :a7717 :a7717. :a7718 :a7718 :a7718. :a7719 :a7719 :a7719. :a7720 :a7720 :a7720. :a7721 :a7721 :a7721. :a7722 :a7722 :a7722. :a7723 :a7723 :a7723. :a7724 :a7724 :a7724. :a7725 :a7725 :a7725. :a7726 :a7726 :a7726. :a7727 :a7727 :a7727. :a7728 :a7728 :a7728. :a7729 :a7729 :a7729. :a7730 :a7730 :a7730. :a7731 :a7731 :a7731. :a7732 :a7732 :a7732. :a7733 :a7733 :a7733. :a7734 :a7734 :a7734. :a7735 :a7735 :a7735. :a7736 :a7736 :a7736. :a7737 :a7737 :a7737. :a7738 :a7738 :a7738. :a7739 :a7739 :a7739. :a7740 :a7740 :a7740. :a7741 :a7741 :a7741. :a7742 :a7742 :a7742. :a7743 :a7743 :a7743. :a7744 :a7744 :a7744. :a7745 :a7745 :a7745. :a7746 :a7746 :a7746. :a7747 :a7747 :a7747. :a7748 :a7748 :a7748. :a7749 :a7749 :a7749. :a7750 :a7750 :a7750. :a7751 :a7751 :a7751. :a7752 :a7752 :a7752. :a7753 :a7753 :a7753. :a7754 :a7754 :a7754. :a7755 :a7755 :a7755. :a7756 :a7756 :a7756. :a7757 :a7757 :a7757. :a7758 :a7758 :a7758. :a7759 :a7759 :a7759. :a7760 :a7760 :a7760. :a7761 :a7761 :a7761. :a7762 :a7762 :a7762. :a7763 :a7763 :a7763. :a7764 :a7764 :a7764. :a7765 :a7765 :a7765. :a7766 :a7766 :a7766. :a7767 :a7767 :a7767. :a7768 :a7768 :a7768. :a7769 :a7769 :a7769. :a7770 :a7770 :a7770. :a7771 :a7771 :a7771. :a7772 :a7772 :a7772. :a7773 :a7773 :a7773. :a7774 :a7774 :a7774. :a7775 :a7775 :a7775. :a7776 :a7776 :a7776. :a7777 :a7777 :a7777. :a7778 :a7778 :a7778. :a7779 :a7779 :a7779. :a7780 :a7780 :a7780. :a7781 :a7781 :a7781. :a7782 :a7782 :a7782. :a7783 :a7783 :a7783. :a7784 :a7784 :a7784. :a7785 :a7785 :a7785. :a7786 :a7786 :a7786. :a7787 :a7787 :a7787. :a7788 :a7788 :a7788. :a7789 :a7789 :a7789. :a7790 :a7790 :a7790. :a7791 :a7791 :a7791. :a7792 :a7792 :a7792. :a7793 :a7793 :a7793. :a7794 :a7794 :a7794. :a7795 :a7795 :a7795. :a7796 :a7796 :a7796. :a7797 :a7797 :a7797. :a7798 :a7798 :a7798. :a7799 :a7799 :a7799. :a7800 :a7800 :a7800. :a7801 :a7801 :a7801. :a7802 :a7802 :a7802. :a7803 :a7803 :a7803. :a7804 :a7804 :a7804. :a7805 :a7805 :a7805. :a7806 :a7806 :a7806. :a7807 :a7807 :a7807. :a7808 :a7808 :a7808. :a7809 :a7809 :a7809. :a7810 :a7810 :a7810. :a7811 :a7811 :a7811. :a7812 :a7812 :a7812. :a7813 :a7813 :a7813. :a7814 :a7814 :a7814. :a7815 :a7815 :a7815. :a7816 :a7816 :a7816. :a7817 :a7817 :a7817. :a7818 :a7818 :a7818. :a7819 :a7819 :a7819. :a7820 :a7820 :a7820. :a7821 :a7821 :a7821. :a7822 :a7822 :a7822. :a7823 :a7823 :a7823. :a7824 :a7824 :a7824. :a7825 :a7825 :a7825. :a7826 :a7826 :a7826. :a7827 :a7827 :a7827. :a7828 :a7828 :a7828. :a7829 :a7829 :a7829. :a7830 :a7830 :a7830. :a7831 :a7831 :a7831. :a7832 :a7832 :a7832. :a7833 :a7833 :a7833. :a7834 :a7834 :a7834. :a7835 :a7835 :a7835. :a7836 :a7836 :a7836. :a7837 :a7837 :a7837. :a7838 :a7838 :a7838. :a7839 :a7839 :a7839. :a7840 :a7840 :a7840. :a7841 :a7841 :a7841. :a7842 :a7842 :a7842. :a7843 :a7843 :a7843. :a7844 :a7844 :a7844. :a7845 :a7845 :a7845. :a7846 :a7846 :a7846. :a7847 :a7847 :a7847. :a7848 :a7848 :a7848. :a7849 :a7849 :a7849. :a7850 :a7850 :a7850. :a7851 :a7851 :a7851. :a7852 :a7852 :a7852. :a7853 :a7853 :a7853. :a7854 :a7854 :a7854. :a7855 :a7855 :a7855. :a7856 :a7856 :a7856. :a7857 :a7857 :a7857. :a7858 :a7858 :a7858. :a7859 :a7859 :a7859. :a7860 :a7860 :a7860. :a7861 :a7861 :a7861. :a7862 :a7862 :a7862. :a7863 :a7863 :a7863. :a7864 :a7864 :a7864. :a7865 :a7865 :a7865. :a7866 :a7866 :a7866. :a7867 :a7867 :a7867. :a7868 :a7868 :a7868. :a7869 :a7869 :a7869. :a7870 :a7870 :a7870. :a7871 :a7871 :a7871. :a7872 :a7872 :a7872. :a7873 :a7873 :a7873. :a7874 :a7874 :a7874. :a7875 :a7875 :a7875. :a7876 :a7876 :a7876. :a7877 :a7877 :a7877. :a7878 :a7878 :a7878. :a7879 :a7879 :a7879. :a7880 :a7880 :a7880. :a7881 :a7881 :a7881. :a7882 :a7882 :a7882. :a7883 :a7883 :a7883. :a7884 :a7884 :a7884. :a7885 :a7885 :a7885. :a7886 :a7886 :a7886. :a7887 :a7887 :a7887. :a7888 :a7888 :a7888. :a7889 :a7889 :a7889. :a7890 :a7890 :a7890. :a7891 :a7891 :a7891. :a7892 :a7892 :a7892. :a7893 :a7893 :a7893. :a7894 :a7894 :a7894. :a7895 :a7895 :a7895. :a7896 :a7896 :a7896. :a7897 :a7897 :a7897. :a7898 :a7898 :a7898. :a7899 :a7899 :a7899. :a7900 :a7900 :a7900. :a7901 :a7901 :a7901. :a7902 :a7902 :a7902. :a7903 :a7903 :a7903. :a7904 :a7904 :a7904. :a7905 :a7905 :a7905. :a7906 :a7906 :a7906. :a7907 :a7907 :a7907. :a7908 :a7908 :a7908. :a7909 :a7909 :a7909. :a7910 :a7910 :a7910. :a7911 :a7911 :a7911. :a7912 :a7912 :a7912. :a7913 :a7913 :a7913. :a7914 :a7914 :a7914. :a7915 :a7915 :a7915. :a7916 :a7916 :a7916. :a7917 :a7917 :a7917. :a7918 :a7918 :a7918. :a7919 :a7919 :a7919. :a7920 :a7920 :a7920. :a7921 :a7921 :a7921. :a7922 :a7922 :a7922. :a7923 :a7923 :a7923. :a7924 :a7924 :a7924. :a7925 :a7925 :a7925. :a7926 :a7926 :a7926. :a7927 :a7927 :a7927. :a7928 :a7928 :a7928. :a7929 :a7929 :a7929. :a7930 :a7930 :a7930. :a7931 :a7931 :a7931. :a7932 :a7932 :a7932. :a7933 :a7933 :a7933. :a7934 :a7934 :a7934. :a7935 :a7935 :a7935. :a7936 :a7936 :a7936. :a7937 :a7937 :a7937. :a7938 :a7938 :a7938. :a7939 :a7939 :a7939. :a7940 :a7940 :a7940. :a7941 :a7941 :a7941. :a7942 :a7942 :a7942. :a7943 :a7943 :a7943. :a7944 :a7944 :a7944. :a7945 :a7945 :a7945. :a7946 :a7946 :a7946. :a7947 :a7947 :a7947. :a7948 :a7948 :a7948. :a7949 :a7949 :a7949. :a7950 :a7950 :a7950. :a7951 :a7951 :a7951. :a7952 :a7952 :a7952. :a7953 :a7953 :a7953. :a7954 :a7954 :a7954. :a7955 :a7955 :a7955. :a7956 :a7956 :a7956. :a7957 :a7957 :a7957. :a7958 :a7958 :a7958. :a7959 :a7959 :a7959. :a7960 :a7960 :a7960. :a7961 :a7961 :a7961. :a7962 :a7962 :a7962. :a7963 :a7963 :a7963. :a7964 :a7964 :a7964. :a7965 :a7965 :a7965. :a7966 :a7966 :a7966. :a7967 :a7967 :a7967. :a7968 :a7968 :a7968. :a7969 :a7969 :a7969. :a7970 :a7970 :a7970. :a7971 :a7971 :a7971. :a7972 :a7972 :a7972. :a7973 :a7973 :a7973. :a7974 :a7974 :a7974. :a7975 :a7975 :a7975. :a7976 :a7976 :a7976. :a7977 :a7977 :a7977. :a7978 :a7978 :a7978. :a7979 :a7979 :a7979. :a7980 :a7980 :a7980. :a7981 :a7981 :a7981. :a7982 :a7982 :a7982. :a7983 :a7983 :a7983. :a7984 :a7984 :a7984. :a7985 :a7985 :a7985. :a7986 :a7986 :a7986. :a7987 :a7987 :a7987. :a7988 :a7988 :a7988. :a7989 :a7989 :a7989. :a7990 :a7990 :a7990. :a7991 :a7991 :a7991. :a7992 :a7992 :a7992. :a7993 :a7993 :a7993. :a7994 :a7994 :a7994. :a7995 :a7995 :a7995. :a7996 :a7996 :a7996. :a7997 :a7997 :a7997. :a7998 :a7998 :a7998. :a7999 :a7999 :a7999. :a8000 :a8000 :a8000. :a8001 :a8001 :a8001. :a8002 :a8002 :a8002. :a8003 :a8003 :a8003. :a8004 :a8004 :a8004. :a8005 :a8005 :a8005. :a8006 :a8006 :a8006. :a8007 :a8007 :a8007. :a8008 :a8008 :a8008. :a8009 :a8009 :a8009. :a8010 :a8010 :a8010. :a8011 :a8011 :a8011. :a8012 :a8012 :a8012. :a8013 :a8013 :a8013. :a8014 :a8014 :a8014. :a8015 :a8015 :a8015. :a8016 :a8016 :a8016. :a8017 :a8017 :a8017. :a8018 :a8018 :a8018. :a8019 :a8019 :a8019. :a8020 :a8020 :a8020. :a8021 :a8021 :a8021. :a8022 :a8022 :a8022. :a8023 :a8023 :a8023. :a8024 :a8024 :a8024. :a8025 :a8025 :a8025. :a8026 :a8026 :a8026. :a8027 :a8027 :a8027. :a8028 :a8028 :a8028. :a8029 :a8029 :a8029. :a8030 :a8030 :a8030. :a8031 :a8031 :a8031. :a8032 :a8032 :a8032. :a8033 :a8033 :a8033. :a8034 :a8034 :a8034. :a8035 :a8035 :a8035. :a8036 :a8036 :a8036. :a8037 :a8037 :a8037. :a8038 :a8038 :a8038. :a8039 :a8039 :a8039. :a8040 :a8040 :a8040. :a8041 :a8041 :a8041. :a8042 :a8042 :a8042. :a8043 :a8043 :a8043. :a8044 :a8044 :a8044. :a8045 :a8045 :a8045. :a8046 :a8046 :a8046. :a8047 :a8047 :a8047. :a8048 :a8048 :a8048. :a8049 :a8049 :a8049. :a8050 :a8050 :a8050. :a8051 :a8051 :a8051. :a8052 :a8052 :a8052. :a8053 :a8053 :a8053. :a8054 :a8054 :a8054. :a8055 :a8055 :a8055. :a8056 :a8056 :a8056. :a8057 :a8057 :a8057. :a8058 :a8058 :a8058. :a8059 :a8059 :a8059. :a8060 :a8060 :a8060. :a8061 :a8061 :a8061. :a8062 :a8062 :a8062. :a8063 :a8063 :a8063. :a8064 :a8064 :a8064. :a8065 :a8065 :a8065. :a8066 :a8066 :a8066. :a8067 :a8067 :a8067. :a8068 :a8068 :a8068. :a8069 :a8069 :a8069. :a8070 :a8070 :a8070. :a8071 :a8071 :a8071. :a8072 :a8072 :a8072. :a8073 :a8073 :a8073. :a8074 :a8074 :a8074. :a8075 :a8075 :a8075. :a8076 :a8076 :a8076. :a8077 :a8077 :a8077. :a8078 :a8078 :a8078. :a8079 :a8079 :a8079. :a8080 :a8080 :a8080. :a8081 :a8081 :a8081. :a8082 :a8082 :a8082. :a8083 :a8083 :a8083. :a8084 :a8084 :a8084. :a8085 :a8085 :a8085. :a8086 :a8086 :a8086. :a8087 :a8087 :a8087. :a8088 :a8088 :a8088. :a8089 :a8089 :a8089. :a8090 :a8090 :a8090. :a8091 :a8091 :a8091. :a8092 :a8092 :a8092. :a8093 :a8093 :a8093. :a8094 :a8094 :a8094. :a8095 :a8095 :a8095. :a8096 :a8096 :a8096. :a8097 :a8097 :a8097. :a8098 :a8098 :a8098. :a8099 :a8099 :a8099. :a8100 :a8100 :a8100. :a8101 :a8101 :a8101. :a8102 :a8102 :a8102. :a8103 :a8103 :a8103. :a8104 :a8104 :a8104. :a8105 :a8105 :a8105. :a8106 :a8106 :a8106. :a8107 :a8107 :a8107. :a8108 :a8108 :a8108. :a8109 :a8109 :a8109. :a8110 :a8110 :a8110. :a8111 :a8111 :a8111. :a8112 :a8112 :a8112. :a8113 :a8113 :a8113. :a8114 :a8114 :a8114. :a8115 :a8115 :a8115. :a8116 :a8116 :a8116. :a8117 :a8117 :a8117. :a8118 :a8118 :a8118. :a8119 :a8119 :a8119. :a8120 :a8120 :a8120. :a8121 :a8121 :a8121. :a8122 :a8122 :a8122. :a8123 :a8123 :a8123. :a8124 :a8124 :a8124. :a8125 :a8125 :a8125. :a8126 :a8126 :a8126. :a8127 :a8127 :a8127. :a8128 :a8128 :a8128. :a8129 :a8129 :a8129. :a8130 :a8130 :a8130. :a8131 :a8131 :a8131. :a8132 :a8132 :a8132. :a8133 :a8133 :a8133. :a8134 :a8134 :a8134. :a8135 :a8135 :a8135. :a8136 :a8136 :a8136. :a8137 :a8137 :a8137. :a8138 :a8138 :a8138. :a8139 :a8139 :a8139. :a8140 :a8140 :a8140. :a8141 :a8141 :a8141. :a8142 :a8142 :a8142. :a8143 :a8143 :a8143. :a8144 :a8144 :a8144. :a8145 :a8145 :a8145. :a8146 :a8146 :a8146. :a8147 :a8147 :a8147. :a8148 :a8148 :a8148. :a8149 :a8149 :a8149. :a8150 :a8150 :a8150. :a8151 :a8151 :a8151. :a8152 :a8152 :a8152. :a8153 :a8153 :a8153. :a8154 :a8154 :a8154. :a8155 :a8155 :a8155. :a8156 :a8156 :a8156. :a8157 :a8157 :a8157. :a8158 :a8158 :a8158. :a8159 :a8159 :a8159. :a8160 :a8160 :a8160. :a8161 :a8161 :a8161. :a8162 :a8162 :a8162. :a8163 :a8163 :a8163. :a8164 :a8164 :a8164. :a8165 :a8165 :a8165. :a8166 :a8166 :a8166. :a8167 :a8167 :a8167. :a8168 :a8168 :a8168. :a8169 :a8169 :a8169. :a8170 :a8170 :a8170. :a8171 :a8171 :a8171. :a8172 :a8172 :a8172. :a8173 :a8173 :a8173. :a8174 :a8174 :a8174. :a8175 :a8175 :a8175. :a8176 :a8176 :a8176. :a8177 :a8177 :a8177. :a8178 :a8178 :a8178. :a8179 :a8179 :a8179. :a8180 :a8180 :a8180. :a8181 :a8181 :a8181. :a8182 :a8182 :a8182. :a8183 :a8183 :a8183. :a8184 :a8184 :a8184. :a8185 :a8185 :a8185. :a8186 :a8186 :a8186. :a8187 :a8187 :a8187. :a8188 :a8188 :a8188. :a8189 :a8189 :a8189. :a8190 :a8190 :a8190. :a8191 :a8191 :a8191. :a8192 :a8192 :a8192. :a8193 :a8193 :a8193. :a8194 :a8194 :a8194. :a8195 :a8195 :a8195. :a8196 :a8196 :a8196. :a8197 :a8197 :a8197. :a8198 :a8198 :a8198. :a8199 :a8199 :a8199. :a8200 :a8200 :a8200. :a8201 :a8201 :a8201. :a8202 :a8202 :a8202. :a8203 :a8203 :a8203. :a8204 :a8204 :a8204. :a8205 :a8205 :a8205. :a8206 :a8206 :a8206. :a8207 :a8207 :a8207. :a8208 :a8208 :a8208. :a8209 :a8209 :a8209. :a8210 :a8210 :a8210. :a8211 :a8211 :a8211. :a8212 :a8212 :a8212. :a8213 :a8213 :a8213. :a8214 :a8214 :a8214. :a8215 :a8215 :a8215. :a8216 :a8216 :a8216. :a8217 :a8217 :a8217. :a8218 :a8218 :a8218. :a8219 :a8219 :a8219. :a8220 :a8220 :a8220. :a8221 :a8221 :a8221. :a8222 :a8222 :a8222. :a8223 :a8223 :a8223. :a8224 :a8224 :a8224. :a8225 :a8225 :a8225. :a8226 :a8226 :a8226. :a8227 :a8227 :a8227. :a8228 :a8228 :a8228. :a8229 :a8229 :a8229. :a8230 :a8230 :a8230. :a8231 :a8231 :a8231. :a8232 :a8232 :a8232. :a8233 :a8233 :a8233. :a8234 :a8234 :a8234. :a8235 :a8235 :a8235. :a8236 :a8236 :a8236. :a8237 :a8237 :a8237. :a8238 :a8238 :a8238. :a8239 :a8239 :a8239. :a8240 :a8240 :a8240. :a8241 :a8241 :a8241. :a8242 :a8242 :a8242. :a8243 :a8243 :a8243. :a8244 :a8244 :a8244. :a8245 :a8245 :a8245. :a8246 :a8246 :a8246. :a8247 :a8247 :a8247. :a8248 :a8248 :a8248. :a8249 :a8249 :a8249. :a8250 :a8250 :a8250. :a8251 :a8251 :a8251. :a8252 :a8252 :a8252. :a8253 :a8253 :a8253. :a8254 :a8254 :a8254. :a8255 :a8255 :a8255. :a8256 :a8256 :a8256. :a8257 :a8257 :a8257. :a8258 :a8258 :a8258. :a8259 :a8259 :a8259. :a8260 :a8260 :a8260. :a8261 :a8261 :a8261. :a8262 :a8262 :a8262. :a8263 :a8263 :a8263. :a8264 :a8264 :a8264. :a8265 :a8265 :a8265. :a8266 :a8266 :a8266. :a8267 :a8267 :a8267. :a8268 :a8268 :a8268. :a8269 :a8269 :a8269. :a8270 :a8270 :a8270. :a8271 :a8271 :a8271. :a8272 :a8272 :a8272. :a8273 :a8273 :a8273. :a8274 :a8274 :a8274. :a8275 :a8275 :a8275. :a8276 :a8276 :a8276. :a8277 :a8277 :a8277. :a8278 :a8278 :a8278. :a8279 :a8279 :a8279. :a8280 :a8280 :a8280. :a8281 :a8281 :a8281. :a8282 :a8282 :a8282. :a8283 :a8283 :a8283. :a8284 :a8284 :a8284. :a8285 :a8285 :a8285. :a8286 :a8286 :a8286. :a8287 :a8287 :a8287. :a8288 :a8288 :a8288. :a8289 :a8289 :a8289. :a8290 :a8290 :a8290. :a8291 :a8291 :a8291. :a8292 :a8292 :a8292. :a8293 :a8293 :a8293. :a8294 :a8294 :a8294. :a8295 :a8295 :a8295. :a8296 :a8296 :a8296. :a8297 :a8297 :a8297. :a8298 :a8298 :a8298. :a8299 :a8299 :a8299. :a8300 :a8300 :a8300. :a8301 :a8301 :a8301. :a8302 :a8302 :a8302. :a8303 :a8303 :a8303. :a8304 :a8304 :a8304. :a8305 :a8305 :a8305. :a8306 :a8306 :a8306. :a8307 :a8307 :a8307. :a8308 :a8308 :a8308. :a8309 :a8309 :a8309. :a8310 :a8310 :a8310. :a8311 :a8311 :a8311. :a8312 :a8312 :a8312. :a8313 :a8313 :a8313. :a8314 :a8314 :a8314. :a8315 :a8315 :a8315. :a8316 :a8316 :a8316. :a8317 :a8317 :a8317. :a8318 :a8318 :a8318. :a8319 :a8319 :a8319. :a8320 :a8320 :a8320. :a8321 :a8321 :a8321. :a8322 :a8322 :a8322. :a8323 :a8323 :a8323. :a8324 :a8324 :a8324. :a8325 :a8325 :a8325. :a8326 :a8326 :a8326. :a8327 :a8327 :a8327. :a8328 :a8328 :a8328. :a8329 :a8329 :a8329. :a8330 :a8330 :a8330. :a8331 :a8331 :a8331. :a8332 :a8332 :a8332. :a8333 :a8333 :a8333. :a8334 :a8334 :a8334. :a8335 :a8335 :a8335. :a8336 :a8336 :a8336. :a8337 :a8337 :a8337. :a8338 :a8338 :a8338. :a8339 :a8339 :a8339. :a8340 :a8340 :a8340. :a8341 :a8341 :a8341. :a8342 :a8342 :a8342. :a8343 :a8343 :a8343. :a8344 :a8344 :a8344. :a8345 :a8345 :a8345. :a8346 :a8346 :a8346. :a8347 :a8347 :a8347. :a8348 :a8348 :a8348. :a8349 :a8349 :a8349. :a8350 :a8350 :a8350. :a8351 :a8351 :a8351. :a8352 :a8352 :a8352. :a8353 :a8353 :a8353. :a8354 :a8354 :a8354. :a8355 :a8355 :a8355. :a8356 :a8356 :a8356. :a8357 :a8357 :a8357. :a8358 :a8358 :a8358. :a8359 :a8359 :a8359. :a8360 :a8360 :a8360. :a8361 :a8361 :a8361. :a8362 :a8362 :a8362. :a8363 :a8363 :a8363. :a8364 :a8364 :a8364. :a8365 :a8365 :a8365. :a8366 :a8366 :a8366. :a8367 :a8367 :a8367. :a8368 :a8368 :a8368. :a8369 :a8369 :a8369. :a8370 :a8370 :a8370. :a8371 :a8371 :a8371. :a8372 :a8372 :a8372. :a8373 :a8373 :a8373. :a8374 :a8374 :a8374. :a8375 :a8375 :a8375. :a8376 :a8376 :a8376. :a8377 :a8377 :a8377. :a8378 :a8378 :a8378. :a8379 :a8379 :a8379. :a8380 :a8380 :a8380. :a8381 :a8381 :a8381. :a8382 :a8382 :a8382. :a8383 :a8383 :a8383. :a8384 :a8384 :a8384. :a8385 :a8385 :a8385. :a8386 :a8386 :a8386. :a8387 :a8387 :a8387. :a8388 :a8388 :a8388. :a8389 :a8389 :a8389. :a8390 :a8390 :a8390. :a8391 :a8391 :a8391. :a8392 :a8392 :a8392. :a8393 :a8393 :a8393. :a8394 :a8394 :a8394. :a8395 :a8395 :a8395. :a8396 :a8396 :a8396. :a8397 :a8397 :a8397. :a8398 :a8398 :a8398. :a8399 :a8399 :a8399. :a8400 :a8400 :a8400. :a8401 :a8401 :a8401. :a8402 :a8402 :a8402. :a8403 :a8403 :a8403. :a8404 :a8404 :a8404. :a8405 :a8405 :a8405. :a8406 :a8406 :a8406. :a8407 :a8407 :a8407. :a8408 :a8408 :a8408. :a8409 :a8409 :a8409. :a8410 :a8410 :a8410. :a8411 :a8411 :a8411. :a8412 :a8412 :a8412. :a8413 :a8413 :a8413. :a8414 :a8414 :a8414. :a8415 :a8415 :a8415. :a8416 :a8416 :a8416. :a8417 :a8417 :a8417. :a8418 :a8418 :a8418. :a8419 :a8419 :a8419. :a8420 :a8420 :a8420. :a8421 :a8421 :a8421. :a8422 :a8422 :a8422. :a8423 :a8423 :a8423. :a8424 :a8424 :a8424. :a8425 :a8425 :a8425. :a8426 :a8426 :a8426. :a8427 :a8427 :a8427. :a8428 :a8428 :a8428. :a8429 :a8429 :a8429. :a8430 :a8430 :a8430. :a8431 :a8431 :a8431. :a8432 :a8432 :a8432. :a8433 :a8433 :a8433. :a8434 :a8434 :a8434. :a8435 :a8435 :a8435. :a8436 :a8436 :a8436. :a8437 :a8437 :a8437. :a8438 :a8438 :a8438. :a8439 :a8439 :a8439. :a8440 :a8440 :a8440. :a8441 :a8441 :a8441. :a8442 :a8442 :a8442. :a8443 :a8443 :a8443. :a8444 :a8444 :a8444. :a8445 :a8445 :a8445. :a8446 :a8446 :a8446. :a8447 :a8447 :a8447. :a8448 :a8448 :a8448. :a8449 :a8449 :a8449. :a8450 :a8450 :a8450. :a8451 :a8451 :a8451. :a8452 :a8452 :a8452. :a8453 :a8453 :a8453. :a8454 :a8454 :a8454. :a8455 :a8455 :a8455. :a8456 :a8456 :a8456. :a8457 :a8457 :a8457. :a8458 :a8458 :a8458. :a8459 :a8459 :a8459. :a8460 :a8460 :a8460. :a8461 :a8461 :a8461. :a8462 :a8462 :a8462. :a8463 :a8463 :a8463. :a8464 :a8464 :a8464. :a8465 :a8465 :a8465. :a8466 :a8466 :a8466. :a8467 :a8467 :a8467. :a8468 :a8468 :a8468. :a8469 :a8469 :a8469. :a8470 :a8470 :a8470. :a8471 :a8471 :a8471. :a8472 :a8472 :a8472. :a8473 :a8473 :a8473. :a8474 :a8474 :a8474. :a8475 :a8475 :a8475. :a8476 :a8476 :a8476. :a8477 :a8477 :a8477. :a8478 :a8478 :a8478. :a8479 :a8479 :a8479. :a8480 :a8480 :a8480. :a8481 :a8481 :a8481. :a8482 :a8482 :a8482. :a8483 :a8483 :a8483. :a8484 :a8484 :a8484. :a8485 :a8485 :a8485. :a8486 :a8486 :a8486. :a8487 :a8487 :a8487. :a8488 :a8488 :a8488. :a8489 :a8489 :a8489. :a8490 :a8490 :a8490. :a8491 :a8491 :a8491. :a8492 :a8492 :a8492. :a8493 :a8493 :a8493. :a8494 :a8494 :a8494. :a8495 :a8495 :a8495. :a8496 :a8496 :a8496. :a8497 :a8497 :a8497. :a8498 :a8498 :a8498. :a8499 :a8499 :a8499. :a8500 :a8500 :a8500. :a8501 :a8501 :a8501. :a8502 :a8502 :a8502. :a8503 :a8503 :a8503. :a8504 :a8504 :a8504. :a8505 :a8505 :a8505. :a8506 :a8506 :a8506. :a8507 :a8507 :a8507. :a8508 :a8508 :a8508. :a8509 :a8509 :a8509. :a8510 :a8510 :a8510. :a8511 :a8511 :a8511. :a8512 :a8512 :a8512. :a8513 :a8513 :a8513. :a8514 :a8514 :a8514. :a8515 :a8515 :a8515. :a8516 :a8516 :a8516. :a8517 :a8517 :a8517. :a8518 :a8518 :a8518. :a8519 :a8519 :a8519. :a8520 :a8520 :a8520. :a8521 :a8521 :a8521. :a8522 :a8522 :a8522. :a8523 :a8523 :a8523. :a8524 :a8524 :a8524. :a8525 :a8525 :a8525. :a8526 :a8526 :a8526. :a8527 :a8527 :a8527. :a8528 :a8528 :a8528. :a8529 :a8529 :a8529. :a8530 :a8530 :a8530. :a8531 :a8531 :a8531. :a8532 :a8532 :a8532. :a8533 :a8533 :a8533. :a8534 :a8534 :a8534. :a8535 :a8535 :a8535. :a8536 :a8536 :a8536. :a8537 :a8537 :a8537. :a8538 :a8538 :a8538. :a8539 :a8539 :a8539. :a8540 :a8540 :a8540. :a8541 :a8541 :a8541. :a8542 :a8542 :a8542. :a8543 :a8543 :a8543. :a8544 :a8544 :a8544. :a8545 :a8545 :a8545. :a8546 :a8546 :a8546. :a8547 :a8547 :a8547. :a8548 :a8548 :a8548. :a8549 :a8549 :a8549. :a8550 :a8550 :a8550. :a8551 :a8551 :a8551. :a8552 :a8552 :a8552. :a8553 :a8553 :a8553. :a8554 :a8554 :a8554. :a8555 :a8555 :a8555. :a8556 :a8556 :a8556. :a8557 :a8557 :a8557. :a8558 :a8558 :a8558. :a8559 :a8559 :a8559. :a8560 :a8560 :a8560. :a8561 :a8561 :a8561. :a8562 :a8562 :a8562. :a8563 :a8563 :a8563. :a8564 :a8564 :a8564. :a8565 :a8565 :a8565. :a8566 :a8566 :a8566. :a8567 :a8567 :a8567. :a8568 :a8568 :a8568. :a8569 :a8569 :a8569. :a8570 :a8570 :a8570. :a8571 :a8571 :a8571. :a8572 :a8572 :a8572. :a8573 :a8573 :a8573. :a8574 :a8574 :a8574. :a8575 :a8575 :a8575. :a8576 :a8576 :a8576. :a8577 :a8577 :a8577. :a8578 :a8578 :a8578. :a8579 :a8579 :a8579. :a8580 :a8580 :a8580. :a8581 :a8581 :a8581. :a8582 :a8582 :a8582. :a8583 :a8583 :a8583. :a8584 :a8584 :a8584. :a8585 :a8585 :a8585. :a8586 :a8586 :a8586. :a8587 :a8587 :a8587. :a8588 :a8588 :a8588. :a8589 :a8589 :a8589. :a8590 :a8590 :a8590. :a8591 :a8591 :a8591. :a8592 :a8592 :a8592. :a8593 :a8593 :a8593. :a8594 :a8594 :a8594. :a8595 :a8595 :a8595. :a8596 :a8596 :a8596. :a8597 :a8597 :a8597. :a8598 :a8598 :a8598. :a8599 :a8599 :a8599. :a8600 :a8600 :a8600. :a8601 :a8601 :a8601. :a8602 :a8602 :a8602. :a8603 :a8603 :a8603. :a8604 :a8604 :a8604. :a8605 :a8605 :a8605. :a8606 :a8606 :a8606. :a8607 :a8607 :a8607. :a8608 :a8608 :a8608. :a8609 :a8609 :a8609. :a8610 :a8610 :a8610. :a8611 :a8611 :a8611. :a8612 :a8612 :a8612. :a8613 :a8613 :a8613. :a8614 :a8614 :a8614. :a8615 :a8615 :a8615. :a8616 :a8616 :a8616. :a8617 :a8617 :a8617. :a8618 :a8618 :a8618. :a8619 :a8619 :a8619. :a8620 :a8620 :a8620. :a8621 :a8621 :a8621. :a8622 :a8622 :a8622. :a8623 :a8623 :a8623. :a8624 :a8624 :a8624. :a8625 :a8625 :a8625. :a8626 :a8626 :a8626. :a8627 :a8627 :a8627. :a8628 :a8628 :a8628. :a8629 :a8629 :a8629. :a8630 :a8630 :a8630. :a8631 :a8631 :a8631. :a8632 :a8632 :a8632. :a8633 :a8633 :a8633. :a8634 :a8634 :a8634. :a8635 :a8635 :a8635. :a8636 :a8636 :a8636. :a8637 :a8637 :a8637. :a8638 :a8638 :a8638. :a8639 :a8639 :a8639. :a8640 :a8640 :a8640. :a8641 :a8641 :a8641. :a8642 :a8642 :a8642. :a8643 :a8643 :a8643. :a8644 :a8644 :a8644. :a8645 :a8645 :a8645. :a8646 :a8646 :a8646. :a8647 :a8647 :a8647. :a8648 :a8648 :a8648. :a8649 :a8649 :a8649. :a8650 :a8650 :a8650. :a8651 :a8651 :a8651. :a8652 :a8652 :a8652. :a8653 :a8653 :a8653. :a8654 :a8654 :a8654. :a8655 :a8655 :a8655. :a8656 :a8656 :a8656. :a8657 :a8657 :a8657. :a8658 :a8658 :a8658. :a8659 :a8659 :a8659. :a8660 :a8660 :a8660. :a8661 :a8661 :a8661. :a8662 :a8662 :a8662. :a8663 :a8663 :a8663. :a8664 :a8664 :a8664. :a8665 :a8665 :a8665. :a8666 :a8666 :a8666. :a8667 :a8667 :a8667. :a8668 :a8668 :a8668. :a8669 :a8669 :a8669. :a8670 :a8670 :a8670. :a8671 :a8671 :a8671. :a8672 :a8672 :a8672. :a8673 :a8673 :a8673. :a8674 :a8674 :a8674. :a8675 :a8675 :a8675. :a8676 :a8676 :a8676. :a8677 :a8677 :a8677. :a8678 :a8678 :a8678. :a8679 :a8679 :a8679. :a8680 :a8680 :a8680. :a8681 :a8681 :a8681. :a8682 :a8682 :a8682. :a8683 :a8683 :a8683. :a8684 :a8684 :a8684. :a8685 :a8685 :a8685. :a8686 :a8686 :a8686. :a8687 :a8687 :a8687. :a8688 :a8688 :a8688. :a8689 :a8689 :a8689. :a8690 :a8690 :a8690. :a8691 :a8691 :a8691. :a8692 :a8692 :a8692. :a8693 :a8693 :a8693. :a8694 :a8694 :a8694. :a8695 :a8695 :a8695. :a8696 :a8696 :a8696. :a8697 :a8697 :a8697. :a8698 :a8698 :a8698. :a8699 :a8699 :a8699. :a8700 :a8700 :a8700. :a8701 :a8701 :a8701. :a8702 :a8702 :a8702. :a8703 :a8703 :a8703. :a8704 :a8704 :a8704. :a8705 :a8705 :a8705. :a8706 :a8706 :a8706. :a8707 :a8707 :a8707. :a8708 :a8708 :a8708. :a8709 :a8709 :a8709. :a8710 :a8710 :a8710. :a8711 :a8711 :a8711. :a8712 :a8712 :a8712. :a8713 :a8713 :a8713. :a8714 :a8714 :a8714. :a8715 :a8715 :a8715. :a8716 :a8716 :a8716. :a8717 :a8717 :a8717. :a8718 :a8718 :a8718. :a8719 :a8719 :a8719. :a8720 :a8720 :a8720. :a8721 :a8721 :a8721. :a8722 :a8722 :a8722. :a8723 :a8723 :a8723. :a8724 :a8724 :a8724. :a8725 :a8725 :a8725. :a8726 :a8726 :a8726. :a8727 :a8727 :a8727. :a8728 :a8728 :a8728. :a8729 :a8729 :a8729. :a8730 :a8730 :a8730. :a8731 :a8731 :a8731. :a8732 :a8732 :a8732. :a8733 :a8733 :a8733. :a8734 :a8734 :a8734. :a8735 :a8735 :a8735. :a8736 :a8736 :a8736. :a8737 :a8737 :a8737. :a8738 :a8738 :a8738. :a8739 :a8739 :a8739. :a8740 :a8740 :a8740. :a8741 :a8741 :a8741. :a8742 :a8742 :a8742. :a8743 :a8743 :a8743. :a8744 :a8744 :a8744. :a8745 :a8745 :a8745. :a8746 :a8746 :a8746. :a8747 :a8747 :a8747. :a8748 :a8748 :a8748. :a8749 :a8749 :a8749. :a8750 :a8750 :a8750. :a8751 :a8751 :a8751. :a8752 :a8752 :a8752. :a8753 :a8753 :a8753. :a8754 :a8754 :a8754. :a8755 :a8755 :a8755. :a8756 :a8756 :a8756. :a8757 :a8757 :a8757. :a8758 :a8758 :a8758. :a8759 :a8759 :a8759. :a8760 :a8760 :a8760. :a8761 :a8761 :a8761. :a8762 :a8762 :a8762. :a8763 :a8763 :a8763. :a8764 :a8764 :a8764. :a8765 :a8765 :a8765. :a8766 :a8766 :a8766. :a8767 :a8767 :a8767. :a8768 :a8768 :a8768. :a8769 :a8769 :a8769. :a8770 :a8770 :a8770. :a8771 :a8771 :a8771. :a8772 :a8772 :a8772. :a8773 :a8773 :a8773. :a8774 :a8774 :a8774. :a8775 :a8775 :a8775. :a8776 :a8776 :a8776. :a8777 :a8777 :a8777. :a8778 :a8778 :a8778. :a8779 :a8779 :a8779. :a8780 :a8780 :a8780. :a8781 :a8781 :a8781. :a8782 :a8782 :a8782. :a8783 :a8783 :a8783. :a8784 :a8784 :a8784. :a8785 :a8785 :a8785. :a8786 :a8786 :a8786. :a8787 :a8787 :a8787. :a8788 :a8788 :a8788. :a8789 :a8789 :a8789. :a8790 :a8790 :a8790. :a8791 :a8791 :a8791. :a8792 :a8792 :a8792. :a8793 :a8793 :a8793. :a8794 :a8794 :a8794. :a8795 :a8795 :a8795. :a8796 :a8796 :a8796. :a8797 :a8797 :a8797. :a8798 :a8798 :a8798. :a8799 :a8799 :a8799. :a8800 :a8800 :a8800. :a8801 :a8801 :a8801. :a8802 :a8802 :a8802. :a8803 :a8803 :a8803. :a8804 :a8804 :a8804. :a8805 :a8805 :a8805. :a8806 :a8806 :a8806. :a8807 :a8807 :a8807. :a8808 :a8808 :a8808. :a8809 :a8809 :a8809. :a8810 :a8810 :a8810. :a8811 :a8811 :a8811. :a8812 :a8812 :a8812. :a8813 :a8813 :a8813. :a8814 :a8814 :a8814. :a8815 :a8815 :a8815. :a8816 :a8816 :a8816. :a8817 :a8817 :a8817. :a8818 :a8818 :a8818. :a8819 :a8819 :a8819. :a8820 :a8820 :a8820. :a8821 :a8821 :a8821. :a8822 :a8822 :a8822. :a8823 :a8823 :a8823. :a8824 :a8824 :a8824. :a8825 :a8825 :a8825. :a8826 :a8826 :a8826. :a8827 :a8827 :a8827. :a8828 :a8828 :a8828. :a8829 :a8829 :a8829. :a8830 :a8830 :a8830. :a8831 :a8831 :a8831. :a8832 :a8832 :a8832. :a8833 :a8833 :a8833. :a8834 :a8834 :a8834. :a8835 :a8835 :a8835. :a8836 :a8836 :a8836. :a8837 :a8837 :a8837. :a8838 :a8838 :a8838. :a8839 :a8839 :a8839. :a8840 :a8840 :a8840. :a8841 :a8841 :a8841. :a8842 :a8842 :a8842. :a8843 :a8843 :a8843. :a8844 :a8844 :a8844. :a8845 :a8845 :a8845. :a8846 :a8846 :a8846. :a8847 :a8847 :a8847. :a8848 :a8848 :a8848. :a8849 :a8849 :a8849. :a8850 :a8850 :a8850. :a8851 :a8851 :a8851. :a8852 :a8852 :a8852. :a8853 :a8853 :a8853. :a8854 :a8854 :a8854. :a8855 :a8855 :a8855. :a8856 :a8856 :a8856. :a8857 :a8857 :a8857. :a8858 :a8858 :a8858. :a8859 :a8859 :a8859. :a8860 :a8860 :a8860. :a8861 :a8861 :a8861. :a8862 :a8862 :a8862. :a8863 :a8863 :a8863. :a8864 :a8864 :a8864. :a8865 :a8865 :a8865. :a8866 :a8866 :a8866. :a8867 :a8867 :a8867. :a8868 :a8868 :a8868. :a8869 :a8869 :a8869. :a8870 :a8870 :a8870. :a8871 :a8871 :a8871. :a8872 :a8872 :a8872. :a8873 :a8873 :a8873. :a8874 :a8874 :a8874. :a8875 :a8875 :a8875. :a8876 :a8876 :a8876. :a8877 :a8877 :a8877. :a8878 :a8878 :a8878. :a8879 :a8879 :a8879. :a8880 :a8880 :a8880. :a8881 :a8881 :a8881. :a8882 :a8882 :a8882. :a8883 :a8883 :a8883. :a8884 :a8884 :a8884. :a8885 :a8885 :a8885. :a8886 :a8886 :a8886. :a8887 :a8887 :a8887. :a8888 :a8888 :a8888. :a8889 :a8889 :a8889. :a8890 :a8890 :a8890. :a8891 :a8891 :a8891. :a8892 :a8892 :a8892. :a8893 :a8893 :a8893. :a8894 :a8894 :a8894. :a8895 :a8895 :a8895. :a8896 :a8896 :a8896. :a8897 :a8897 :a8897. :a8898 :a8898 :a8898. :a8899 :a8899 :a8899. :a8900 :a8900 :a8900. :a8901 :a8901 :a8901. :a8902 :a8902 :a8902. :a8903 :a8903 :a8903. :a8904 :a8904 :a8904. :a8905 :a8905 :a8905. :a8906 :a8906 :a8906. :a8907 :a8907 :a8907. :a8908 :a8908 :a8908. :a8909 :a8909 :a8909. :a8910 :a8910 :a8910. :a8911 :a8911 :a8911. :a8912 :a8912 :a8912. :a8913 :a8913 :a8913. :a8914 :a8914 :a8914. :a8915 :a8915 :a8915. :a8916 :a8916 :a8916. :a8917 :a8917 :a8917. :a8918 :a8918 :a8918. :a8919 :a8919 :a8919. :a8920 :a8920 :a8920. :a8921 :a8921 :a8921. :a8922 :a8922 :a8922. :a8923 :a8923 :a8923. :a8924 :a8924 :a8924. :a8925 :a8925 :a8925. :a8926 :a8926 :a8926. :a8927 :a8927 :a8927. :a8928 :a8928 :a8928. :a8929 :a8929 :a8929. :a8930 :a8930 :a8930. :a8931 :a8931 :a8931. :a8932 :a8932 :a8932. :a8933 :a8933 :a8933. :a8934 :a8934 :a8934. :a8935 :a8935 :a8935. :a8936 :a8936 :a8936. :a8937 :a8937 :a8937. :a8938 :a8938 :a8938. :a8939 :a8939 :a8939. :a8940 :a8940 :a8940. :a8941 :a8941 :a8941. :a8942 :a8942 :a8942. :a8943 :a8943 :a8943. :a8944 :a8944 :a8944. :a8945 :a8945 :a8945. :a8946 :a8946 :a8946. :a8947 :a8947 :a8947. :a8948 :a8948 :a8948. :a8949 :a8949 :a8949. :a8950 :a8950 :a8950. :a8951 :a8951 :a8951. :a8952 :a8952 :a8952. :a8953 :a8953 :a8953. :a8954 :a8954 :a8954. :a8955 :a8955 :a8955. :a8956 :a8956 :a8956. :a8957 :a8957 :a8957. :a8958 :a8958 :a8958. :a8959 :a8959 :a8959. :a8960 :a8960 :a8960. :a8961 :a8961 :a8961. :a8962 :a8962 :a8962. :a8963 :a8963 :a8963. :a8964 :a8964 :a8964. :a8965 :a8965 :a8965. :a8966 :a8966 :a8966. :a8967 :a8967 :a8967. :a8968 :a8968 :a8968. :a8969 :a8969 :a8969. :a8970 :a8970 :a8970. :a8971 :a8971 :a8971. :a8972 :a8972 :a8972. :a8973 :a8973 :a8973. :a8974 :a8974 :a8974. :a8975 :a8975 :a8975. :a8976 :a8976 :a8976. :a8977 :a8977 :a8977. :a8978 :a8978 :a8978. :a8979 :a8979 :a8979. :a8980 :a8980 :a8980. :a8981 :a8981 :a8981. :a8982 :a8982 :a8982. :a8983 :a8983 :a8983. :a8984 :a8984 :a8984. :a8985 :a8985 :a8985. :a8986 :a8986 :a8986. :a8987 :a8987 :a8987. :a8988 :a8988 :a8988. :a8989 :a8989 :a8989. :a8990 :a8990 :a8990. :a8991 :a8991 :a8991. :a8992 :a8992 :a8992. :a8993 :a8993 :a8993. :a8994 :a8994 :a8994. :a8995 :a8995 :a8995. :a8996 :a8996 :a8996. :a8997 :a8997 :a8997. :a8998 :a8998 :a8998. :a8999 :a8999 :a8999. :a9000 :a9000 :a9000. :a9001 :a9001 :a9001. :a9002 :a9002 :a9002. :a9003 :a9003 :a9003. :a9004 :a9004 :a9004. :a9005 :a9005 :a9005. :a9006 :a9006 :a9006. :a9007 :a9007 :a9007. :a9008 :a9008 :a9008. :a9009 :a9009 :a9009. :a9010 :a9010 :a9010. :a9011 :a9011 :a9011. :a9012 :a9012 :a9012. :a9013 :a9013 :a9013. :a9014 :a9014 :a9014. :a9015 :a9015 :a9015. :a9016 :a9016 :a9016. :a9017 :a9017 :a9017. :a9018 :a9018 :a9018. :a9019 :a9019 :a9019. :a9020 :a9020 :a9020. :a9021 :a9021 :a9021. :a9022 :a9022 :a9022. :a9023 :a9023 :a9023. :a9024 :a9024 :a9024. :a9025 :a9025 :a9025. :a9026 :a9026 :a9026. :a9027 :a9027 :a9027. :a9028 :a9028 :a9028. :a9029 :a9029 :a9029. :a9030 :a9030 :a9030. :a9031 :a9031 :a9031. :a9032 :a9032 :a9032. :a9033 :a9033 :a9033. :a9034 :a9034 :a9034. :a9035 :a9035 :a9035. :a9036 :a9036 :a9036. :a9037 :a9037 :a9037. :a9038 :a9038 :a9038. :a9039 :a9039 :a9039. :a9040 :a9040 :a9040. :a9041 :a9041 :a9041. :a9042 :a9042 :a9042. :a9043 :a9043 :a9043. :a9044 :a9044 :a9044. :a9045 :a9045 :a9045. :a9046 :a9046 :a9046. :a9047 :a9047 :a9047. :a9048 :a9048 :a9048. :a9049 :a9049 :a9049. :a9050 :a9050 :a9050. :a9051 :a9051 :a9051. :a9052 :a9052 :a9052. :a9053 :a9053 :a9053. :a9054 :a9054 :a9054. :a9055 :a9055 :a9055. :a9056 :a9056 :a9056. :a9057 :a9057 :a9057. :a9058 :a9058 :a9058. :a9059 :a9059 :a9059. :a9060 :a9060 :a9060. :a9061 :a9061 :a9061. :a9062 :a9062 :a9062. :a9063 :a9063 :a9063. :a9064 :a9064 :a9064. :a9065 :a9065 :a9065. :a9066 :a9066 :a9066. :a9067 :a9067 :a9067. :a9068 :a9068 :a9068. :a9069 :a9069 :a9069. :a9070 :a9070 :a9070. :a9071 :a9071 :a9071. :a9072 :a9072 :a9072. :a9073 :a9073 :a9073. :a9074 :a9074 :a9074. :a9075 :a9075 :a9075. :a9076 :a9076 :a9076. :a9077 :a9077 :a9077. :a9078 :a9078 :a9078. :a9079 :a9079 :a9079. :a9080 :a9080 :a9080. :a9081 :a9081 :a9081. :a9082 :a9082 :a9082. :a9083 :a9083 :a9083. :a9084 :a9084 :a9084. :a9085 :a9085 :a9085. :a9086 :a9086 :a9086. :a9087 :a9087 :a9087. :a9088 :a9088 :a9088. :a9089 :a9089 :a9089. :a9090 :a9090 :a9090. :a9091 :a9091 :a9091. :a9092 :a9092 :a9092. :a9093 :a9093 :a9093. :a9094 :a9094 :a9094. :a9095 :a9095 :a9095. :a9096 :a9096 :a9096. :a9097 :a9097 :a9097. :a9098 :a9098 :a9098. :a9099 :a9099 :a9099. :a9100 :a9100 :a9100. :a9101 :a9101 :a9101. :a9102 :a9102 :a9102. :a9103 :a9103 :a9103. :a9104 :a9104 :a9104. :a9105 :a9105 :a9105. :a9106 :a9106 :a9106. :a9107 :a9107 :a9107. :a9108 :a9108 :a9108. :a9109 :a9109 :a9109. :a9110 :a9110 :a9110. :a9111 :a9111 :a9111. :a9112 :a9112 :a9112. :a9113 :a9113 :a9113. :a9114 :a9114 :a9114. :a9115 :a9115 :a9115. :a9116 :a9116 :a9116. :a9117 :a9117 :a9117. :a9118 :a9118 :a9118. :a9119 :a9119 :a9119. :a9120 :a9120 :a9120. :a9121 :a9121 :a9121. :a9122 :a9122 :a9122. :a9123 :a9123 :a9123. :a9124 :a9124 :a9124. :a9125 :a9125 :a9125. :a9126 :a9126 :a9126. :a9127 :a9127 :a9127. :a9128 :a9128 :a9128. :a9129 :a9129 :a9129. :a9130 :a9130 :a9130. :a9131 :a9131 :a9131. :a9132 :a9132 :a9132. :a9133 :a9133 :a9133. :a9134 :a9134 :a9134. :a9135 :a9135 :a9135. :a9136 :a9136 :a9136. :a9137 :a9137 :a9137. :a9138 :a9138 :a9138. :a9139 :a9139 :a9139. :a9140 :a9140 :a9140. :a9141 :a9141 :a9141. :a9142 :a9142 :a9142. :a9143 :a9143 :a9143. :a9144 :a9144 :a9144. :a9145 :a9145 :a9145. :a9146 :a9146 :a9146. :a9147 :a9147 :a9147. :a9148 :a9148 :a9148. :a9149 :a9149 :a9149. :a9150 :a9150 :a9150. :a9151 :a9151 :a9151. :a9152 :a9152 :a9152. :a9153 :a9153 :a9153. :a9154 :a9154 :a9154. :a9155 :a9155 :a9155. :a9156 :a9156 :a9156. :a9157 :a9157 :a9157. :a9158 :a9158 :a9158. :a9159 :a9159 :a9159. :a9160 :a9160 :a9160. :a9161 :a9161 :a9161. :a9162 :a9162 :a9162. :a9163 :a9163 :a9163. :a9164 :a9164 :a9164. :a9165 :a9165 :a9165. :a9166 :a9166 :a9166. :a9167 :a9167 :a9167. :a9168 :a9168 :a9168. :a9169 :a9169 :a9169. :a9170 :a9170 :a9170. :a9171 :a9171 :a9171. :a9172 :a9172 :a9172. :a9173 :a9173 :a9173. :a9174 :a9174 :a9174. :a9175 :a9175 :a9175. :a9176 :a9176 :a9176. :a9177 :a9177 :a9177. :a9178 :a9178 :a9178. :a9179 :a9179 :a9179. :a9180 :a9180 :a9180. :a9181 :a9181 :a9181. :a9182 :a9182 :a9182. :a9183 :a9183 :a9183. :a9184 :a9184 :a9184. :a9185 :a9185 :a9185. :a9186 :a9186 :a9186. :a9187 :a9187 :a9187. :a9188 :a9188 :a9188. :a9189 :a9189 :a9189. :a9190 :a9190 :a9190. :a9191 :a9191 :a9191. :a9192 :a9192 :a9192. :a9193 :a9193 :a9193. :a9194 :a9194 :a9194. :a9195 :a9195 :a9195. :a9196 :a9196 :a9196. :a9197 :a9197 :a9197. :a9198 :a9198 :a9198. :a9199 :a9199 :a9199. :a9200 :a9200 :a9200. :a9201 :a9201 :a9201. :a9202 :a9202 :a9202. :a9203 :a9203 :a9203. :a9204 :a9204 :a9204. :a9205 :a9205 :a9205. :a9206 :a9206 :a9206. :a9207 :a9207 :a9207. :a9208 :a9208 :a9208. :a9209 :a9209 :a9209. :a9210 :a9210 :a9210. :a9211 :a9211 :a9211. :a9212 :a9212 :a9212. :a9213 :a9213 :a9213. :a9214 :a9214 :a9214. :a9215 :a9215 :a9215. :a9216 :a9216 :a9216. :a9217 :a9217 :a9217. :a9218 :a9218 :a9218. :a9219 :a9219 :a9219. :a9220 :a9220 :a9220. :a9221 :a9221 :a9221. :a9222 :a9222 :a9222. :a9223 :a9223 :a9223. :a9224 :a9224 :a9224. :a9225 :a9225 :a9225. :a9226 :a9226 :a9226. :a9227 :a9227 :a9227. :a9228 :a9228 :a9228. :a9229 :a9229 :a9229. :a9230 :a9230 :a9230. :a9231 :a9231 :a9231. :a9232 :a9232 :a9232. :a9233 :a9233 :a9233. :a9234 :a9234 :a9234. :a9235 :a9235 :a9235. :a9236 :a9236 :a9236. :a9237 :a9237 :a9237. :a9238 :a9238 :a9238. :a9239 :a9239 :a9239. :a9240 :a9240 :a9240. :a9241 :a9241 :a9241. :a9242 :a9242 :a9242. :a9243 :a9243 :a9243. :a9244 :a9244 :a9244. :a9245 :a9245 :a9245. :a9246 :a9246 :a9246. :a9247 :a9247 :a9247. :a9248 :a9248 :a9248. :a9249 :a9249 :a9249. :a9250 :a9250 :a9250. :a9251 :a9251 :a9251. :a9252 :a9252 :a9252. :a9253 :a9253 :a9253. :a9254 :a9254 :a9254. :a9255 :a9255 :a9255. :a9256 :a9256 :a9256. :a9257 :a9257 :a9257. :a9258 :a9258 :a9258. :a9259 :a9259 :a9259. :a9260 :a9260 :a9260. :a9261 :a9261 :a9261. :a9262 :a9262 :a9262. :a9263 :a9263 :a9263. :a9264 :a9264 :a9264. :a9265 :a9265 :a9265. :a9266 :a9266 :a9266. :a9267 :a9267 :a9267. :a9268 :a9268 :a9268. :a9269 :a9269 :a9269. :a9270 :a9270 :a9270. :a9271 :a9271 :a9271. :a9272 :a9272 :a9272. :a9273 :a9273 :a9273. :a9274 :a9274 :a9274. :a9275 :a9275 :a9275. :a9276 :a9276 :a9276. :a9277 :a9277 :a9277. :a9278 :a9278 :a9278. :a9279 :a9279 :a9279. :a9280 :a9280 :a9280. :a9281 :a9281 :a9281. :a9282 :a9282 :a9282. :a9283 :a9283 :a9283. :a9284 :a9284 :a9284. :a9285 :a9285 :a9285. :a9286 :a9286 :a9286. :a9287 :a9287 :a9287. :a9288 :a9288 :a9288. :a9289 :a9289 :a9289. :a9290 :a9290 :a9290. :a9291 :a9291 :a9291. :a9292 :a9292 :a9292. :a9293 :a9293 :a9293. :a9294 :a9294 :a9294. :a9295 :a9295 :a9295. :a9296 :a9296 :a9296. :a9297 :a9297 :a9297. :a9298 :a9298 :a9298. :a9299 :a9299 :a9299. :a9300 :a9300 :a9300. :a9301 :a9301 :a9301. :a9302 :a9302 :a9302. :a9303 :a9303 :a9303. :a9304 :a9304 :a9304. :a9305 :a9305 :a9305. :a9306 :a9306 :a9306. :a9307 :a9307 :a9307. :a9308 :a9308 :a9308. :a9309 :a9309 :a9309. :a9310 :a9310 :a9310. :a9311 :a9311 :a9311. :a9312 :a9312 :a9312. :a9313 :a9313 :a9313. :a9314 :a9314 :a9314. :a9315 :a9315 :a9315. :a9316 :a9316 :a9316. :a9317 :a9317 :a9317. :a9318 :a9318 :a9318. :a9319 :a9319 :a9319. :a9320 :a9320 :a9320. :a9321 :a9321 :a9321. :a9322 :a9322 :a9322. :a9323 :a9323 :a9323. :a9324 :a9324 :a9324. :a9325 :a9325 :a9325. :a9326 :a9326 :a9326. :a9327 :a9327 :a9327. :a9328 :a9328 :a9328. :a9329 :a9329 :a9329. :a9330 :a9330 :a9330. :a9331 :a9331 :a9331. :a9332 :a9332 :a9332. :a9333 :a9333 :a9333. :a9334 :a9334 :a9334. :a9335 :a9335 :a9335. :a9336 :a9336 :a9336. :a9337 :a9337 :a9337. :a9338 :a9338 :a9338. :a9339 :a9339 :a9339. :a9340 :a9340 :a9340. :a9341 :a9341 :a9341. :a9342 :a9342 :a9342. :a9343 :a9343 :a9343. :a9344 :a9344 :a9344. :a9345 :a9345 :a9345. :a9346 :a9346 :a9346. :a9347 :a9347 :a9347. :a9348 :a9348 :a9348. :a9349 :a9349 :a9349. :a9350 :a9350 :a9350. :a9351 :a9351 :a9351. :a9352 :a9352 :a9352. :a9353 :a9353 :a9353. :a9354 :a9354 :a9354. :a9355 :a9355 :a9355. :a9356 :a9356 :a9356. :a9357 :a9357 :a9357. :a9358 :a9358 :a9358. :a9359 :a9359 :a9359. :a9360 :a9360 :a9360. :a9361 :a9361 :a9361. :a9362 :a9362 :a9362. :a9363 :a9363 :a9363. :a9364 :a9364 :a9364. :a9365 :a9365 :a9365. :a9366 :a9366 :a9366. :a9367 :a9367 :a9367. :a9368 :a9368 :a9368. :a9369 :a9369 :a9369. :a9370 :a9370 :a9370. :a9371 :a9371 :a9371. :a9372 :a9372 :a9372. :a9373 :a9373 :a9373. :a9374 :a9374 :a9374. :a9375 :a9375 :a9375. :a9376 :a9376 :a9376. :a9377 :a9377 :a9377. :a9378 :a9378 :a9378. :a9379 :a9379 :a9379. :a9380 :a9380 :a9380. :a9381 :a9381 :a9381. :a9382 :a9382 :a9382. :a9383 :a9383 :a9383. :a9384 :a9384 :a9384. :a9385 :a9385 :a9385. :a9386 :a9386 :a9386. :a9387 :a9387 :a9387. :a9388 :a9388 :a9388. :a9389 :a9389 :a9389. :a9390 :a9390 :a9390. :a9391 :a9391 :a9391. :a9392 :a9392 :a9392. :a9393 :a9393 :a9393. :a9394 :a9394 :a9394. :a9395 :a9395 :a9395. :a9396 :a9396 :a9396. :a9397 :a9397 :a9397. :a9398 :a9398 :a9398. :a9399 :a9399 :a9399. :a9400 :a9400 :a9400. :a9401 :a9401 :a9401. :a9402 :a9402 :a9402. :a9403 :a9403 :a9403. :a9404 :a9404 :a9404. :a9405 :a9405 :a9405. :a9406 :a9406 :a9406. :a9407 :a9407 :a9407. :a9408 :a9408 :a9408. :a9409 :a9409 :a9409. :a9410 :a9410 :a9410. :a9411 :a9411 :a9411. :a9412 :a9412 :a9412. :a9413 :a9413 :a9413. :a9414 :a9414 :a9414. :a9415 :a9415 :a9415. :a9416 :a9416 :a9416. :a9417 :a9417 :a9417. :a9418 :a9418 :a9418. :a9419 :a9419 :a9419. :a9420 :a9420 :a9420. :a9421 :a9421 :a9421. :a9422 :a9422 :a9422. :a9423 :a9423 :a9423. :a9424 :a9424 :a9424. :a9425 :a9425 :a9425. :a9426 :a9426 :a9426. :a9427 :a9427 :a9427. :a9428 :a9428 :a9428. :a9429 :a9429 :a9429. :a9430 :a9430 :a9430. :a9431 :a9431 :a9431. :a9432 :a9432 :a9432. :a9433 :a9433 :a9433. :a9434 :a9434 :a9434. :a9435 :a9435 :a9435. :a9436 :a9436 :a9436. :a9437 :a9437 :a9437. :a9438 :a9438 :a9438. :a9439 :a9439 :a9439. :a9440 :a9440 :a9440. :a9441 :a9441 :a9441. :a9442 :a9442 :a9442. :a9443 :a9443 :a9443. :a9444 :a9444 :a9444. :a9445 :a9445 :a9445. :a9446 :a9446 :a9446. :a9447 :a9447 :a9447. :a9448 :a9448 :a9448. :a9449 :a9449 :a9449. :a9450 :a9450 :a9450. :a9451 :a9451 :a9451. :a9452 :a9452 :a9452. :a9453 :a9453 :a9453. :a9454 :a9454 :a9454. :a9455 :a9455 :a9455. :a9456 :a9456 :a9456. :a9457 :a9457 :a9457. :a9458 :a9458 :a9458. :a9459 :a9459 :a9459. :a9460 :a9460 :a9460. :a9461 :a9461 :a9461. :a9462 :a9462 :a9462. :a9463 :a9463 :a9463. :a9464 :a9464 :a9464. :a9465 :a9465 :a9465. :a9466 :a9466 :a9466. :a9467 :a9467 :a9467. :a9468 :a9468 :a9468. :a9469 :a9469 :a9469. :a9470 :a9470 :a9470. :a9471 :a9471 :a9471. :a9472 :a9472 :a9472. :a9473 :a9473 :a9473. :a9474 :a9474 :a9474. :a9475 :a9475 :a9475. :a9476 :a9476 :a9476. :a9477 :a9477 :a9477. :a9478 :a9478 :a9478. :a9479 :a9479 :a9479. :a9480 :a9480 :a9480. :a9481 :a9481 :a9481. :a9482 :a9482 :a9482. :a9483 :a9483 :a9483. :a9484 :a9484 :a9484. :a9485 :a9485 :a9485. :a9486 :a9486 :a9486. :a9487 :a9487 :a9487. :a9488 :a9488 :a9488. :a9489 :a9489 :a9489. :a9490 :a9490 :a9490. :a9491 :a9491 :a9491. :a9492 :a9492 :a9492. :a9493 :a9493 :a9493. :a9494 :a9494 :a9494. :a9495 :a9495 :a9495. :a9496 :a9496 :a9496. :a9497 :a9497 :a9497. :a9498 :a9498 :a9498. :a9499 :a9499 :a9499. :a9500 :a9500 :a9500. :a9501 :a9501 :a9501. :a9502 :a9502 :a9502. :a9503 :a9503 :a9503. :a9504 :a9504 :a9504. :a9505 :a9505 :a9505. :a9506 :a9506 :a9506. :a9507 :a9507 :a9507. :a9508 :a9508 :a9508. :a9509 :a9509 :a9509. :a9510 :a9510 :a9510. :a9511 :a9511 :a9511. :a9512 :a9512 :a9512. :a9513 :a9513 :a9513. :a9514 :a9514 :a9514. :a9515 :a9515 :a9515. :a9516 :a9516 :a9516. :a9517 :a9517 :a9517. :a9518 :a9518 :a9518. :a9519 :a9519 :a9519. :a9520 :a9520 :a9520. :a9521 :a9521 :a9521. :a9522 :a9522 :a9522. :a9523 :a9523 :a9523. :a9524 :a9524 :a9524. :a9525 :a9525 :a9525. :a9526 :a9526 :a9526. :a9527 :a9527 :a9527. :a9528 :a9528 :a9528. :a9529 :a9529 :a9529. :a9530 :a9530 :a9530. :a9531 :a9531 :a9531. :a9532 :a9532 :a9532. :a9533 :a9533 :a9533. :a9534 :a9534 :a9534. :a9535 :a9535 :a9535. :a9536 :a9536 :a9536. :a9537 :a9537 :a9537. :a9538 :a9538 :a9538. :a9539 :a9539 :a9539. :a9540 :a9540 :a9540. :a9541 :a9541 :a9541. :a9542 :a9542 :a9542. :a9543 :a9543 :a9543. :a9544 :a9544 :a9544. :a9545 :a9545 :a9545. :a9546 :a9546 :a9546. :a9547 :a9547 :a9547. :a9548 :a9548 :a9548. :a9549 :a9549 :a9549. :a9550 :a9550 :a9550. :a9551 :a9551 :a9551. :a9552 :a9552 :a9552. :a9553 :a9553 :a9553. :a9554 :a9554 :a9554. :a9555 :a9555 :a9555. :a9556 :a9556 :a9556. :a9557 :a9557 :a9557. :a9558 :a9558 :a9558. :a9559 :a9559 :a9559. :a9560 :a9560 :a9560. :a9561 :a9561 :a9561. :a9562 :a9562 :a9562. :a9563 :a9563 :a9563. :a9564 :a9564 :a9564. :a9565 :a9565 :a9565. :a9566 :a9566 :a9566. :a9567 :a9567 :a9567. :a9568 :a9568 :a9568. :a9569 :a9569 :a9569. :a9570 :a9570 :a9570. :a9571 :a9571 :a9571. :a9572 :a9572 :a9572. :a9573 :a9573 :a9573. :a9574 :a9574 :a9574. :a9575 :a9575 :a9575. :a9576 :a9576 :a9576. :a9577 :a9577 :a9577. :a9578 :a9578 :a9578. :a9579 :a9579 :a9579. :a9580 :a9580 :a9580. :a9581 :a9581 :a9581. :a9582 :a9582 :a9582. :a9583 :a9583 :a9583. :a9584 :a9584 :a9584. :a9585 :a9585 :a9585. :a9586 :a9586 :a9586. :a9587 :a9587 :a9587. :a9588 :a9588 :a9588. :a9589 :a9589 :a9589. :a9590 :a9590 :a9590. :a9591 :a9591 :a9591. :a9592 :a9592 :a9592. :a9593 :a9593 :a9593. :a9594 :a9594 :a9594. :a9595 :a9595 :a9595. :a9596 :a9596 :a9596. :a9597 :a9597 :a9597. :a9598 :a9598 :a9598. :a9599 :a9599 :a9599. :a9600 :a9600 :a9600. :a9601 :a9601 :a9601. :a9602 :a9602 :a9602. :a9603 :a9603 :a9603. :a9604 :a9604 :a9604. :a9605 :a9605 :a9605. :a9606 :a9606 :a9606. :a9607 :a9607 :a9607. :a9608 :a9608 :a9608. :a9609 :a9609 :a9609. :a9610 :a9610 :a9610. :a9611 :a9611 :a9611. :a9612 :a9612 :a9612. :a9613 :a9613 :a9613. :a9614 :a9614 :a9614. :a9615 :a9615 :a9615. :a9616 :a9616 :a9616. :a9617 :a9617 :a9617. :a9618 :a9618 :a9618. :a9619 :a9619 :a9619. :a9620 :a9620 :a9620. :a9621 :a9621 :a9621. :a9622 :a9622 :a9622. :a9623 :a9623 :a9623. :a9624 :a9624 :a9624. :a9625 :a9625 :a9625. :a9626 :a9626 :a9626. :a9627 :a9627 :a9627. :a9628 :a9628 :a9628. :a9629 :a9629 :a9629. :a9630 :a9630 :a9630. :a9631 :a9631 :a9631. :a9632 :a9632 :a9632. :a9633 :a9633 :a9633. :a9634 :a9634 :a9634. :a9635 :a9635 :a9635. :a9636 :a9636 :a9636. :a9637 :a9637 :a9637. :a9638 :a9638 :a9638. :a9639 :a9639 :a9639. :a9640 :a9640 :a9640. :a9641 :a9641 :a9641. :a9642 :a9642 :a9642. :a9643 :a9643 :a9643. :a9644 :a9644 :a9644. :a9645 :a9645 :a9645. :a9646 :a9646 :a9646. :a9647 :a9647 :a9647. :a9648 :a9648 :a9648. :a9649 :a9649 :a9649. :a9650 :a9650 :a9650. :a9651 :a9651 :a9651. :a9652 :a9652 :a9652. :a9653 :a9653 :a9653. :a9654 :a9654 :a9654. :a9655 :a9655 :a9655. :a9656 :a9656 :a9656. :a9657 :a9657 :a9657. :a9658 :a9658 :a9658. :a9659 :a9659 :a9659. :a9660 :a9660 :a9660. :a9661 :a9661 :a9661. :a9662 :a9662 :a9662. :a9663 :a9663 :a9663. :a9664 :a9664 :a9664. :a9665 :a9665 :a9665. :a9666 :a9666 :a9666. :a9667 :a9667 :a9667. :a9668 :a9668 :a9668. :a9669 :a9669 :a9669. :a9670 :a9670 :a9670. :a9671 :a9671 :a9671. :a9672 :a9672 :a9672. :a9673 :a9673 :a9673. :a9674 :a9674 :a9674. :a9675 :a9675 :a9675. :a9676 :a9676 :a9676. :a9677 :a9677 :a9677. :a9678 :a9678 :a9678. :a9679 :a9679 :a9679. :a9680 :a9680 :a9680. :a9681 :a9681 :a9681. :a9682 :a9682 :a9682. :a9683 :a9683 :a9683. :a9684 :a9684 :a9684. :a9685 :a9685 :a9685. :a9686 :a9686 :a9686. :a9687 :a9687 :a9687. :a9688 :a9688 :a9688. :a9689 :a9689 :a9689. :a9690 :a9690 :a9690. :a9691 :a9691 :a9691. :a9692 :a9692 :a9692. :a9693 :a9693 :a9693. :a9694 :a9694 :a9694. :a9695 :a9695 :a9695. :a9696 :a9696 :a9696. :a9697 :a9697 :a9697. :a9698 :a9698 :a9698. :a9699 :a9699 :a9699. :a9700 :a9700 :a9700. :a9701 :a9701 :a9701. :a9702 :a9702 :a9702. :a9703 :a9703 :a9703. :a9704 :a9704 :a9704. :a9705 :a9705 :a9705. :a9706 :a9706 :a9706. :a9707 :a9707 :a9707. :a9708 :a9708 :a9708. :a9709 :a9709 :a9709. :a9710 :a9710 :a9710. :a9711 :a9711 :a9711. :a9712 :a9712 :a9712. :a9713 :a9713 :a9713. :a9714 :a9714 :a9714. :a9715 :a9715 :a9715. :a9716 :a9716 :a9716. :a9717 :a9717 :a9717. :a9718 :a9718 :a9718. :a9719 :a9719 :a9719. :a9720 :a9720 :a9720. :a9721 :a9721 :a9721. :a9722 :a9722 :a9722. :a9723 :a9723 :a9723. :a9724 :a9724 :a9724. :a9725 :a9725 :a9725. :a9726 :a9726 :a9726. :a9727 :a9727 :a9727. :a9728 :a9728 :a9728. :a9729 :a9729 :a9729. :a9730 :a9730 :a9730. :a9731 :a9731 :a9731. :a9732 :a9732 :a9732. :a9733 :a9733 :a9733. :a9734 :a9734 :a9734. :a9735 :a9735 :a9735. :a9736 :a9736 :a9736. :a9737 :a9737 :a9737. :a9738 :a9738 :a9738. :a9739 :a9739 :a9739. :a9740 :a9740 :a9740. :a9741 :a9741 :a9741. :a9742 :a9742 :a9742. :a9743 :a9743 :a9743. :a9744 :a9744 :a9744. :a9745 :a9745 :a9745. :a9746 :a9746 :a9746. :a9747 :a9747 :a9747. :a9748 :a9748 :a9748. :a9749 :a9749 :a9749. :a9750 :a9750 :a9750. :a9751 :a9751 :a9751. :a9752 :a9752 :a9752. :a9753 :a9753 :a9753. :a9754 :a9754 :a9754. :a9755 :a9755 :a9755. :a9756 :a9756 :a9756. :a9757 :a9757 :a9757. :a9758 :a9758 :a9758. :a9759 :a9759 :a9759. :a9760 :a9760 :a9760. :a9761 :a9761 :a9761. :a9762 :a9762 :a9762. :a9763 :a9763 :a9763. :a9764 :a9764 :a9764. :a9765 :a9765 :a9765. :a9766 :a9766 :a9766. :a9767 :a9767 :a9767. :a9768 :a9768 :a9768. :a9769 :a9769 :a9769. :a9770 :a9770 :a9770. :a9771 :a9771 :a9771. :a9772 :a9772 :a9772. :a9773 :a9773 :a9773. :a9774 :a9774 :a9774. :a9775 :a9775 :a9775. :a9776 :a9776 :a9776. :a9777 :a9777 :a9777. :a9778 :a9778 :a9778. :a9779 :a9779 :a9779. :a9780 :a9780 :a9780. :a9781 :a9781 :a9781. :a9782 :a9782 :a9782. :a9783 :a9783 :a9783. :a9784 :a9784 :a9784. :a9785 :a9785 :a9785. :a9786 :a9786 :a9786. :a9787 :a9787 :a9787. :a9788 :a9788 :a9788. :a9789 :a9789 :a9789. :a9790 :a9790 :a9790. :a9791 :a9791 :a9791. :a9792 :a9792 :a9792. :a9793 :a9793 :a9793. :a9794 :a9794 :a9794. :a9795 :a9795 :a9795. :a9796 :a9796 :a9796. :a9797 :a9797 :a9797. :a9798 :a9798 :a9798. :a9799 :a9799 :a9799. :a9800 :a9800 :a9800. :a9801 :a9801 :a9801. :a9802 :a9802 :a9802. :a9803 :a9803 :a9803. :a9804 :a9804 :a9804. :a9805 :a9805 :a9805. :a9806 :a9806 :a9806. :a9807 :a9807 :a9807. :a9808 :a9808 :a9808. :a9809 :a9809 :a9809. :a9810 :a9810 :a9810. :a9811 :a9811 :a9811. :a9812 :a9812 :a9812. :a9813 :a9813 :a9813. :a9814 :a9814 :a9814. :a9815 :a9815 :a9815. :a9816 :a9816 :a9816. :a9817 :a9817 :a9817. :a9818 :a9818 :a9818. :a9819 :a9819 :a9819. :a9820 :a9820 :a9820. :a9821 :a9821 :a9821. :a9822 :a9822 :a9822. :a9823 :a9823 :a9823. :a9824 :a9824 :a9824. :a9825 :a9825 :a9825. :a9826 :a9826 :a9826. :a9827 :a9827 :a9827. :a9828 :a9828 :a9828. :a9829 :a9829 :a9829. :a9830 :a9830 :a9830. :a9831 :a9831 :a9831. :a9832 :a9832 :a9832. :a9833 :a9833 :a9833. :a9834 :a9834 :a9834. :a9835 :a9835 :a9835. :a9836 :a9836 :a9836. :a9837 :a9837 :a9837. :a9838 :a9838 :a9838. :a9839 :a9839 :a9839. :a9840 :a9840 :a9840. :a9841 :a9841 :a9841. :a9842 :a9842 :a9842. :a9843 :a9843 :a9843. :a9844 :a9844 :a9844. :a9845 :a9845 :a9845. :a9846 :a9846 :a9846. :a9847 :a9847 :a9847. :a9848 :a9848 :a9848. :a9849 :a9849 :a9849. :a9850 :a9850 :a9850. :a9851 :a9851 :a9851. :a9852 :a9852 :a9852. :a9853 :a9853 :a9853. :a9854 :a9854 :a9854. :a9855 :a9855 :a9855. :a9856 :a9856 :a9856. :a9857 :a9857 :a9857. :a9858 :a9858 :a9858. :a9859 :a9859 :a9859. :a9860 :a9860 :a9860. :a9861 :a9861 :a9861. :a9862 :a9862 :a9862. :a9863 :a9863 :a9863. :a9864 :a9864 :a9864. :a9865 :a9865 :a9865. :a9866 :a9866 :a9866. :a9867 :a9867 :a9867. :a9868 :a9868 :a9868. :a9869 :a9869 :a9869. :a9870 :a9870 :a9870. :a9871 :a9871 :a9871. :a9872 :a9872 :a9872. :a9873 :a9873 :a9873. :a9874 :a9874 :a9874. :a9875 :a9875 :a9875. :a9876 :a9876 :a9876. :a9877 :a9877 :a9877. :a9878 :a9878 :a9878. :a9879 :a9879 :a9879. :a9880 :a9880 :a9880. :a9881 :a9881 :a9881. :a9882 :a9882 :a9882. :a9883 :a9883 :a9883. :a9884 :a9884 :a9884. :a9885 :a9885 :a9885. :a9886 :a9886 :a9886. :a9887 :a9887 :a9887. :a9888 :a9888 :a9888. :a9889 :a9889 :a9889. :a9890 :a9890 :a9890. :a9891 :a9891 :a9891. :a9892 :a9892 :a9892. :a9893 :a9893 :a9893. :a9894 :a9894 :a9894. :a9895 :a9895 :a9895. :a9896 :a9896 :a9896. :a9897 :a9897 :a9897. :a9898 :a9898 :a9898. :a9899 :a9899 :a9899. :a9900 :a9900 :a9900. :a9901 :a9901 :a9901. :a9902 :a9902 :a9902. :a9903 :a9903 :a9903. :a9904 :a9904 :a9904. :a9905 :a9905 :a9905. :a9906 :a9906 :a9906. :a9907 :a9907 :a9907. :a9908 :a9908 :a9908. :a9909 :a9909 :a9909. :a9910 :a9910 :a9910. :a9911 :a9911 :a9911. :a9912 :a9912 :a9912. :a9913 :a9913 :a9913. :a9914 :a9914 :a9914. :a9915 :a9915 :a9915. :a9916 :a9916 :a9916. :a9917 :a9917 :a9917. :a9918 :a9918 :a9918. :a9919 :a9919 :a9919. :a9920 :a9920 :a9920. :a9921 :a9921 :a9921. :a9922 :a9922 :a9922. :a9923 :a9923 :a9923. :a9924 :a9924 :a9924. :a9925 :a9925 :a9925. :a9926 :a9926 :a9926. :a9927 :a9927 :a9927. :a9928 :a9928 :a9928. :a9929 :a9929 :a9929. :a9930 :a9930 :a9930. :a9931 :a9931 :a9931. :a9932 :a9932 :a9932. :a9933 :a9933 :a9933. :a9934 :a9934 :a9934. :a9935 :a9935 :a9935. :a9936 :a9936 :a9936. :a9937 :a9937 :a9937. :a9938 :a9938 :a9938. :a9939 :a9939 :a9939. :a9940 :a9940 :a9940. :a9941 :a9941 :a9941. :a9942 :a9942 :a9942. :a9943 :a9943 :a9943. :a9944 :a9944 :a9944. :a9945 :a9945 :a9945. :a9946 :a9946 :a9946. :a9947 :a9947 :a9947. :a9948 :a9948 :a9948. :a9949 :a9949 :a9949. :a9950 :a9950 :a9950. :a9951 :a9951 :a9951. :a9952 :a9952 :a9952. :a9953 :a9953 :a9953. :a9954 :a9954 :a9954. :a9955 :a9955 :a9955. :a9956 :a9956 :a9956. :a9957 :a9957 :a9957. :a9958 :a9958 :a9958. :a9959 :a9959 :a9959. :a9960 :a9960 :a9960. :a9961 :a9961 :a9961. :a9962 :a9962 :a9962. :a9963 :a9963 :a9963. :a9964 :a9964 :a9964. :a9965 :a9965 :a9965. :a9966 :a9966 :a9966. :a9967 :a9967 :a9967. :a9968 :a9968 :a9968. :a9969 :a9969 :a9969. :a9970 :a9970 :a9970. :a9971 :a9971 :a9971. :a9972 :a9972 :a9972. :a9973 :a9973 :a9973. :a9974 :a9974 :a9974. :a9975 :a9975 :a9975. :a9976 :a9976 :a9976. :a9977 :a9977 :a9977. :a9978 :a9978 :a9978. :a9979 :a9979 :a9979. :a9980 :a9980 :a9980. :a9981 :a9981 :a9981. :a9982 :a9982 :a9982. :a9983 :a9983 :a9983. :a9984 :a9984 :a9984. :a9985 :a9985 :a9985. :a9986 :a9986 :a9986. :a9987 :a9987 :a9987. :a9988 :a9988 :a9988. :a9989 :a9989 :a9989. :a9990 :a9990 :a9990. :a9991 :a9991 :a9991. :a9992 :a9992 :a9992. :a9993 :a9993 :a9993. :a9994 :a9994 :a9994. :a9995 :a9995 :a9995. :a9996 :a9996 :a9996. :a9997 :a9997 :a9997. :a9998 :a9998 :a9998. :a9999 :a9999 :a9999. :a10000 :a10000 :a10000. RDF-Trine-1.007/xt/data/turtle/test-15.out000644 000765 000024 00003146356 11552456156 020154 0ustar00gregstaff000000 000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RDF-Trine-1.007/xt/data/turtle/test-15.ttl000644 000765 000024 00000232250 11552456156 020132 0ustar00gregstaff000000 000000 # 10000 triple objects (10000 triples) more than the default Bison stack size @prefix : . :a :b :c1, :c2, :c3, :c4, :c5, :c6, :c7, :c8, :c9, :c10, :c11, :c12, :c13, :c14, :c15, :c16, :c17, :c18, :c19, :c20, :c21, :c22, :c23, :c24, :c25, :c26, :c27, :c28, :c29, :c30, :c31, :c32, :c33, :c34, :c35, :c36, :c37, :c38, :c39, :c40, :c41, :c42, :c43, :c44, :c45, :c46, :c47, :c48, :c49, :c50, :c51, :c52, :c53, :c54, :c55, :c56, :c57, :c58, :c59, :c60, :c61, :c62, :c63, :c64, :c65, :c66, :c67, :c68, :c69, :c70, :c71, :c72, :c73, :c74, :c75, :c76, :c77, :c78, :c79, :c80, :c81, :c82, :c83, :c84, :c85, :c86, :c87, :c88, :c89, :c90, :c91, :c92, :c93, :c94, :c95, :c96, :c97, :c98, :c99, :c100, :c101, :c102, :c103, :c104, :c105, :c106, :c107, :c108, :c109, :c110, :c111, :c112, :c113, :c114, :c115, :c116, :c117, :c118, :c119, :c120, :c121, :c122, :c123, :c124, :c125, :c126, :c127, :c128, :c129, :c130, :c131, :c132, :c133, :c134, :c135, :c136, :c137, :c138, :c139, :c140, :c141, :c142, :c143, :c144, :c145, :c146, :c147, :c148, :c149, :c150, :c151, :c152, :c153, :c154, :c155, :c156, :c157, :c158, :c159, :c160, :c161, :c162, :c163, :c164, :c165, :c166, :c167, :c168, :c169, :c170, :c171, :c172, :c173, :c174, :c175, :c176, :c177, :c178, :c179, :c180, :c181, :c182, :c183, :c184, :c185, :c186, :c187, :c188, :c189, :c190, :c191, :c192, :c193, :c194, :c195, :c196, :c197, :c198, :c199, :c200, :c201, :c202, :c203, :c204, :c205, :c206, :c207, :c208, :c209, :c210, :c211, :c212, :c213, :c214, :c215, :c216, :c217, :c218, :c219, :c220, :c221, :c222, :c223, :c224, :c225, :c226, :c227, :c228, :c229, :c230, :c231, :c232, :c233, :c234, :c235, :c236, :c237, :c238, :c239, :c240, :c241, :c242, :c243, :c244, :c245, :c246, :c247, :c248, :c249, :c250, :c251, :c252, :c253, :c254, :c255, :c256, :c257, :c258, :c259, :c260, :c261, :c262, :c263, :c264, :c265, :c266, :c267, :c268, :c269, :c270, :c271, :c272, :c273, :c274, :c275, :c276, :c277, :c278, :c279, :c280, :c281, :c282, :c283, :c284, :c285, :c286, :c287, :c288, :c289, :c290, :c291, :c292, :c293, :c294, :c295, :c296, :c297, :c298, :c299, :c300, :c301, :c302, :c303, :c304, :c305, :c306, :c307, :c308, :c309, :c310, :c311, :c312, :c313, :c314, :c315, :c316, :c317, :c318, :c319, :c320, :c321, :c322, :c323, :c324, :c325, :c326, :c327, :c328, :c329, :c330, :c331, :c332, :c333, :c334, :c335, :c336, :c337, :c338, :c339, :c340, :c341, :c342, :c343, :c344, :c345, :c346, :c347, :c348, :c349, :c350, :c351, :c352, :c353, :c354, :c355, :c356, :c357, :c358, :c359, :c360, :c361, :c362, :c363, :c364, :c365, :c366, :c367, :c368, :c369, :c370, :c371, :c372, :c373, :c374, :c375, :c376, :c377, :c378, :c379, :c380, :c381, :c382, :c383, :c384, :c385, :c386, :c387, :c388, :c389, :c390, :c391, :c392, :c393, :c394, :c395, :c396, :c397, :c398, :c399, :c400, :c401, :c402, :c403, :c404, :c405, :c406, :c407, :c408, :c409, :c410, :c411, :c412, :c413, :c414, :c415, :c416, :c417, :c418, :c419, :c420, :c421, :c422, :c423, :c424, :c425, :c426, :c427, :c428, :c429, :c430, :c431, :c432, :c433, :c434, :c435, :c436, :c437, :c438, :c439, :c440, :c441, :c442, :c443, :c444, :c445, :c446, :c447, :c448, :c449, :c450, :c451, :c452, :c453, :c454, :c455, :c456, :c457, :c458, :c459, :c460, :c461, :c462, :c463, :c464, :c465, :c466, :c467, :c468, :c469, :c470, :c471, :c472, :c473, :c474, :c475, :c476, :c477, :c478, :c479, :c480, :c481, :c482, :c483, :c484, :c485, :c486, :c487, :c488, :c489, :c490, :c491, :c492, :c493, :c494, :c495, :c496, :c497, :c498, :c499, :c500, :c501, :c502, :c503, :c504, :c505, :c506, :c507, :c508, :c509, :c510, :c511, :c512, :c513, :c514, :c515, :c516, :c517, :c518, :c519, :c520, :c521, :c522, :c523, :c524, :c525, :c526, :c527, :c528, :c529, :c530, :c531, :c532, :c533, :c534, :c535, :c536, :c537, :c538, :c539, :c540, :c541, :c542, :c543, :c544, :c545, :c546, :c547, :c548, :c549, :c550, :c551, :c552, :c553, :c554, :c555, :c556, :c557, :c558, :c559, :c560, :c561, :c562, :c563, :c564, :c565, :c566, :c567, :c568, :c569, :c570, :c571, :c572, :c573, :c574, :c575, :c576, :c577, :c578, :c579, :c580, :c581, :c582, :c583, :c584, :c585, :c586, :c587, :c588, :c589, :c590, :c591, :c592, :c593, :c594, :c595, :c596, :c597, :c598, :c599, :c600, :c601, :c602, :c603, :c604, :c605, :c606, :c607, :c608, :c609, :c610, :c611, :c612, :c613, :c614, :c615, :c616, :c617, :c618, :c619, :c620, :c621, :c622, :c623, :c624, :c625, :c626, :c627, :c628, :c629, :c630, :c631, :c632, :c633, :c634, :c635, :c636, :c637, :c638, :c639, :c640, :c641, :c642, :c643, :c644, :c645, :c646, :c647, :c648, :c649, :c650, :c651, :c652, :c653, :c654, :c655, :c656, :c657, :c658, :c659, :c660, :c661, :c662, :c663, :c664, :c665, :c666, :c667, :c668, :c669, :c670, :c671, :c672, :c673, :c674, :c675, :c676, :c677, :c678, :c679, :c680, :c681, :c682, :c683, :c684, :c685, :c686, :c687, :c688, :c689, :c690, :c691, :c692, :c693, :c694, :c695, :c696, :c697, :c698, :c699, :c700, :c701, :c702, :c703, :c704, :c705, :c706, :c707, :c708, :c709, :c710, :c711, :c712, :c713, :c714, :c715, :c716, :c717, :c718, :c719, :c720, :c721, :c722, :c723, :c724, :c725, :c726, :c727, :c728, :c729, :c730, :c731, :c732, :c733, :c734, :c735, :c736, :c737, :c738, :c739, :c740, :c741, :c742, :c743, :c744, :c745, :c746, :c747, :c748, :c749, :c750, :c751, :c752, :c753, :c754, :c755, :c756, :c757, :c758, :c759, :c760, :c761, :c762, :c763, :c764, :c765, :c766, :c767, :c768, :c769, :c770, :c771, :c772, :c773, :c774, :c775, :c776, :c777, :c778, :c779, :c780, :c781, :c782, :c783, :c784, :c785, :c786, :c787, :c788, :c789, :c790, :c791, :c792, :c793, :c794, :c795, :c796, :c797, :c798, :c799, :c800, :c801, :c802, :c803, :c804, :c805, :c806, :c807, :c808, :c809, :c810, :c811, :c812, :c813, :c814, :c815, :c816, :c817, :c818, :c819, :c820, :c821, :c822, :c823, :c824, :c825, :c826, :c827, :c828, :c829, :c830, :c831, :c832, :c833, :c834, :c835, :c836, :c837, :c838, :c839, :c840, :c841, :c842, :c843, :c844, :c845, :c846, :c847, :c848, :c849, :c850, :c851, :c852, :c853, :c854, :c855, :c856, :c857, :c858, :c859, :c860, :c861, :c862, :c863, :c864, :c865, :c866, :c867, :c868, :c869, :c870, :c871, :c872, :c873, :c874, :c875, :c876, :c877, :c878, :c879, :c880, :c881, :c882, :c883, :c884, :c885, :c886, :c887, :c888, :c889, :c890, :c891, :c892, :c893, :c894, :c895, :c896, :c897, :c898, :c899, :c900, :c901, :c902, :c903, :c904, :c905, :c906, :c907, :c908, :c909, :c910, :c911, :c912, :c913, :c914, :c915, :c916, :c917, :c918, :c919, :c920, :c921, :c922, :c923, :c924, :c925, :c926, :c927, :c928, :c929, :c930, :c931, :c932, :c933, :c934, :c935, :c936, :c937, :c938, :c939, :c940, :c941, :c942, :c943, :c944, :c945, :c946, :c947, :c948, :c949, :c950, :c951, :c952, :c953, :c954, :c955, :c956, :c957, :c958, :c959, :c960, :c961, :c962, :c963, :c964, :c965, :c966, :c967, :c968, :c969, :c970, :c971, :c972, :c973, :c974, :c975, :c976, :c977, :c978, :c979, :c980, :c981, :c982, :c983, :c984, :c985, :c986, :c987, :c988, :c989, :c990, :c991, :c992, :c993, :c994, :c995, :c996, :c997, :c998, :c999, :c1000, :c1001, :c1002, :c1003, :c1004, :c1005, :c1006, :c1007, :c1008, :c1009, :c1010, :c1011, :c1012, :c1013, :c1014, :c1015, :c1016, :c1017, :c1018, :c1019, :c1020, :c1021, :c1022, :c1023, :c1024, :c1025, :c1026, :c1027, :c1028, :c1029, :c1030, :c1031, :c1032, :c1033, :c1034, :c1035, :c1036, :c1037, :c1038, :c1039, :c1040, :c1041, :c1042, :c1043, :c1044, :c1045, :c1046, :c1047, :c1048, :c1049, :c1050, :c1051, :c1052, :c1053, :c1054, :c1055, :c1056, :c1057, :c1058, :c1059, :c1060, :c1061, :c1062, :c1063, :c1064, :c1065, :c1066, :c1067, :c1068, :c1069, :c1070, :c1071, :c1072, :c1073, :c1074, :c1075, :c1076, :c1077, :c1078, :c1079, :c1080, :c1081, :c1082, :c1083, :c1084, :c1085, :c1086, :c1087, :c1088, :c1089, :c1090, :c1091, :c1092, :c1093, :c1094, :c1095, :c1096, :c1097, :c1098, :c1099, :c1100, :c1101, :c1102, :c1103, :c1104, :c1105, :c1106, :c1107, :c1108, :c1109, :c1110, :c1111, :c1112, :c1113, :c1114, :c1115, :c1116, :c1117, :c1118, :c1119, :c1120, :c1121, :c1122, :c1123, :c1124, :c1125, :c1126, :c1127, :c1128, :c1129, :c1130, :c1131, :c1132, :c1133, :c1134, :c1135, :c1136, :c1137, :c1138, :c1139, :c1140, :c1141, :c1142, :c1143, :c1144, :c1145, :c1146, :c1147, :c1148, :c1149, :c1150, :c1151, :c1152, :c1153, :c1154, :c1155, :c1156, :c1157, :c1158, :c1159, :c1160, :c1161, :c1162, :c1163, :c1164, :c1165, :c1166, :c1167, :c1168, :c1169, :c1170, :c1171, :c1172, :c1173, :c1174, :c1175, :c1176, :c1177, :c1178, :c1179, :c1180, :c1181, :c1182, :c1183, :c1184, :c1185, :c1186, :c1187, :c1188, :c1189, :c1190, :c1191, :c1192, :c1193, :c1194, :c1195, :c1196, :c1197, :c1198, :c1199, :c1200, :c1201, :c1202, :c1203, :c1204, :c1205, :c1206, :c1207, :c1208, :c1209, :c1210, :c1211, :c1212, :c1213, :c1214, :c1215, :c1216, :c1217, :c1218, :c1219, :c1220, :c1221, :c1222, :c1223, :c1224, :c1225, :c1226, :c1227, :c1228, :c1229, :c1230, :c1231, :c1232, :c1233, :c1234, :c1235, :c1236, :c1237, :c1238, :c1239, :c1240, :c1241, :c1242, :c1243, :c1244, :c1245, :c1246, :c1247, :c1248, :c1249, :c1250, :c1251, :c1252, :c1253, :c1254, :c1255, :c1256, :c1257, :c1258, :c1259, :c1260, :c1261, :c1262, :c1263, :c1264, :c1265, :c1266, :c1267, :c1268, :c1269, :c1270, :c1271, :c1272, :c1273, :c1274, :c1275, :c1276, :c1277, :c1278, :c1279, :c1280, :c1281, :c1282, :c1283, :c1284, :c1285, :c1286, :c1287, :c1288, :c1289, :c1290, :c1291, :c1292, :c1293, :c1294, :c1295, :c1296, :c1297, :c1298, :c1299, :c1300, :c1301, :c1302, :c1303, :c1304, :c1305, :c1306, :c1307, :c1308, :c1309, :c1310, :c1311, :c1312, :c1313, :c1314, :c1315, :c1316, :c1317, :c1318, :c1319, :c1320, :c1321, :c1322, :c1323, :c1324, :c1325, :c1326, :c1327, :c1328, :c1329, :c1330, :c1331, :c1332, :c1333, :c1334, :c1335, :c1336, :c1337, :c1338, :c1339, :c1340, :c1341, :c1342, :c1343, :c1344, :c1345, :c1346, :c1347, :c1348, :c1349, :c1350, :c1351, :c1352, :c1353, :c1354, :c1355, :c1356, :c1357, :c1358, :c1359, :c1360, :c1361, :c1362, :c1363, :c1364, :c1365, :c1366, :c1367, :c1368, :c1369, :c1370, :c1371, :c1372, :c1373, :c1374, :c1375, :c1376, :c1377, :c1378, :c1379, :c1380, :c1381, :c1382, :c1383, :c1384, :c1385, :c1386, :c1387, :c1388, :c1389, :c1390, :c1391, :c1392, :c1393, :c1394, :c1395, :c1396, :c1397, :c1398, :c1399, :c1400, :c1401, :c1402, :c1403, :c1404, :c1405, :c1406, :c1407, :c1408, :c1409, :c1410, :c1411, :c1412, :c1413, :c1414, :c1415, :c1416, :c1417, :c1418, :c1419, :c1420, :c1421, :c1422, :c1423, :c1424, :c1425, :c1426, :c1427, :c1428, :c1429, :c1430, :c1431, :c1432, :c1433, :c1434, :c1435, :c1436, :c1437, :c1438, :c1439, :c1440, :c1441, :c1442, :c1443, :c1444, :c1445, :c1446, :c1447, :c1448, :c1449, :c1450, :c1451, :c1452, :c1453, :c1454, :c1455, :c1456, :c1457, :c1458, :c1459, :c1460, :c1461, :c1462, :c1463, :c1464, :c1465, :c1466, :c1467, :c1468, :c1469, :c1470, :c1471, :c1472, :c1473, :c1474, :c1475, :c1476, :c1477, :c1478, :c1479, :c1480, :c1481, :c1482, :c1483, :c1484, :c1485, :c1486, :c1487, :c1488, :c1489, :c1490, :c1491, :c1492, :c1493, :c1494, :c1495, :c1496, :c1497, :c1498, :c1499, :c1500, :c1501, :c1502, :c1503, :c1504, :c1505, :c1506, :c1507, :c1508, :c1509, :c1510, :c1511, :c1512, :c1513, :c1514, :c1515, :c1516, :c1517, :c1518, :c1519, :c1520, :c1521, :c1522, :c1523, :c1524, :c1525, :c1526, :c1527, :c1528, :c1529, :c1530, :c1531, :c1532, :c1533, :c1534, :c1535, :c1536, :c1537, :c1538, :c1539, :c1540, :c1541, :c1542, :c1543, :c1544, :c1545, :c1546, :c1547, :c1548, :c1549, :c1550, :c1551, :c1552, :c1553, :c1554, :c1555, :c1556, :c1557, :c1558, :c1559, :c1560, :c1561, :c1562, :c1563, :c1564, :c1565, :c1566, :c1567, :c1568, :c1569, :c1570, :c1571, :c1572, :c1573, :c1574, :c1575, :c1576, :c1577, :c1578, :c1579, :c1580, :c1581, :c1582, :c1583, :c1584, :c1585, :c1586, :c1587, :c1588, :c1589, :c1590, :c1591, :c1592, :c1593, :c1594, :c1595, :c1596, :c1597, :c1598, :c1599, :c1600, :c1601, :c1602, :c1603, :c1604, :c1605, :c1606, :c1607, :c1608, :c1609, :c1610, :c1611, :c1612, :c1613, :c1614, :c1615, :c1616, :c1617, :c1618, :c1619, :c1620, :c1621, :c1622, :c1623, :c1624, :c1625, :c1626, :c1627, :c1628, :c1629, :c1630, :c1631, :c1632, :c1633, :c1634, :c1635, :c1636, :c1637, :c1638, :c1639, :c1640, :c1641, :c1642, :c1643, :c1644, :c1645, :c1646, :c1647, :c1648, :c1649, :c1650, :c1651, :c1652, :c1653, :c1654, :c1655, :c1656, :c1657, :c1658, :c1659, :c1660, :c1661, :c1662, :c1663, :c1664, :c1665, :c1666, :c1667, :c1668, :c1669, :c1670, :c1671, :c1672, :c1673, :c1674, :c1675, :c1676, :c1677, :c1678, :c1679, :c1680, :c1681, :c1682, :c1683, :c1684, :c1685, :c1686, :c1687, :c1688, :c1689, :c1690, :c1691, :c1692, :c1693, :c1694, :c1695, :c1696, :c1697, :c1698, :c1699, :c1700, :c1701, :c1702, :c1703, :c1704, :c1705, :c1706, :c1707, :c1708, :c1709, :c1710, :c1711, :c1712, :c1713, :c1714, :c1715, :c1716, :c1717, :c1718, :c1719, :c1720, :c1721, :c1722, :c1723, :c1724, :c1725, :c1726, :c1727, :c1728, :c1729, :c1730, :c1731, :c1732, :c1733, :c1734, :c1735, :c1736, :c1737, :c1738, :c1739, :c1740, :c1741, :c1742, :c1743, :c1744, :c1745, :c1746, :c1747, :c1748, :c1749, :c1750, :c1751, :c1752, :c1753, :c1754, :c1755, :c1756, :c1757, :c1758, :c1759, :c1760, :c1761, :c1762, :c1763, :c1764, :c1765, :c1766, :c1767, :c1768, :c1769, :c1770, :c1771, :c1772, :c1773, :c1774, :c1775, :c1776, :c1777, :c1778, :c1779, :c1780, :c1781, :c1782, :c1783, :c1784, :c1785, :c1786, :c1787, :c1788, :c1789, :c1790, :c1791, :c1792, :c1793, :c1794, :c1795, :c1796, :c1797, :c1798, :c1799, :c1800, :c1801, :c1802, :c1803, :c1804, :c1805, :c1806, :c1807, :c1808, :c1809, :c1810, :c1811, :c1812, :c1813, :c1814, :c1815, :c1816, :c1817, :c1818, :c1819, :c1820, :c1821, :c1822, :c1823, :c1824, :c1825, :c1826, :c1827, :c1828, :c1829, :c1830, :c1831, :c1832, :c1833, :c1834, :c1835, :c1836, :c1837, :c1838, :c1839, :c1840, :c1841, :c1842, :c1843, :c1844, :c1845, :c1846, :c1847, :c1848, :c1849, :c1850, :c1851, :c1852, :c1853, :c1854, :c1855, :c1856, :c1857, :c1858, :c1859, :c1860, :c1861, :c1862, :c1863, :c1864, :c1865, :c1866, :c1867, :c1868, :c1869, :c1870, :c1871, :c1872, :c1873, :c1874, :c1875, :c1876, :c1877, :c1878, :c1879, :c1880, :c1881, :c1882, :c1883, :c1884, :c1885, :c1886, :c1887, :c1888, :c1889, :c1890, :c1891, :c1892, :c1893, :c1894, :c1895, :c1896, :c1897, :c1898, :c1899, :c1900, :c1901, :c1902, :c1903, :c1904, :c1905, :c1906, :c1907, :c1908, :c1909, :c1910, :c1911, :c1912, :c1913, :c1914, :c1915, :c1916, :c1917, :c1918, :c1919, :c1920, :c1921, :c1922, :c1923, :c1924, :c1925, :c1926, :c1927, :c1928, :c1929, :c1930, :c1931, :c1932, :c1933, :c1934, :c1935, :c1936, :c1937, :c1938, :c1939, :c1940, :c1941, :c1942, :c1943, :c1944, :c1945, :c1946, :c1947, :c1948, :c1949, :c1950, :c1951, :c1952, :c1953, :c1954, :c1955, :c1956, :c1957, :c1958, :c1959, :c1960, :c1961, :c1962, :c1963, :c1964, :c1965, :c1966, :c1967, :c1968, :c1969, :c1970, :c1971, :c1972, :c1973, :c1974, :c1975, :c1976, :c1977, :c1978, :c1979, :c1980, :c1981, :c1982, :c1983, :c1984, :c1985, :c1986, :c1987, :c1988, :c1989, :c1990, :c1991, :c1992, :c1993, :c1994, :c1995, :c1996, :c1997, :c1998, :c1999, :c2000, :c2001, :c2002, :c2003, :c2004, :c2005, :c2006, :c2007, :c2008, :c2009, :c2010, :c2011, :c2012, :c2013, :c2014, :c2015, :c2016, :c2017, :c2018, :c2019, :c2020, :c2021, :c2022, :c2023, :c2024, :c2025, :c2026, :c2027, :c2028, :c2029, :c2030, :c2031, :c2032, :c2033, :c2034, :c2035, :c2036, :c2037, :c2038, :c2039, :c2040, :c2041, :c2042, :c2043, :c2044, :c2045, :c2046, :c2047, :c2048, :c2049, :c2050, :c2051, :c2052, :c2053, :c2054, :c2055, :c2056, :c2057, :c2058, :c2059, :c2060, :c2061, :c2062, :c2063, :c2064, :c2065, :c2066, :c2067, :c2068, :c2069, :c2070, :c2071, :c2072, :c2073, :c2074, :c2075, :c2076, :c2077, :c2078, :c2079, :c2080, :c2081, :c2082, :c2083, :c2084, :c2085, :c2086, :c2087, :c2088, :c2089, :c2090, :c2091, :c2092, :c2093, :c2094, :c2095, :c2096, :c2097, :c2098, :c2099, :c2100, :c2101, :c2102, :c2103, :c2104, :c2105, :c2106, :c2107, :c2108, :c2109, :c2110, :c2111, :c2112, :c2113, :c2114, :c2115, :c2116, :c2117, :c2118, :c2119, :c2120, :c2121, :c2122, :c2123, :c2124, :c2125, :c2126, :c2127, :c2128, :c2129, :c2130, :c2131, :c2132, :c2133, :c2134, :c2135, :c2136, :c2137, :c2138, :c2139, :c2140, :c2141, :c2142, :c2143, :c2144, :c2145, :c2146, :c2147, :c2148, :c2149, :c2150, :c2151, :c2152, :c2153, :c2154, :c2155, :c2156, :c2157, :c2158, :c2159, :c2160, :c2161, :c2162, :c2163, :c2164, :c2165, :c2166, :c2167, :c2168, :c2169, :c2170, :c2171, :c2172, :c2173, :c2174, :c2175, :c2176, :c2177, :c2178, :c2179, :c2180, :c2181, :c2182, :c2183, :c2184, :c2185, :c2186, :c2187, :c2188, :c2189, :c2190, :c2191, :c2192, :c2193, :c2194, :c2195, :c2196, :c2197, :c2198, :c2199, :c2200, :c2201, :c2202, :c2203, :c2204, :c2205, :c2206, :c2207, :c2208, :c2209, :c2210, :c2211, :c2212, :c2213, :c2214, :c2215, :c2216, :c2217, :c2218, :c2219, :c2220, :c2221, :c2222, :c2223, :c2224, :c2225, :c2226, :c2227, :c2228, :c2229, :c2230, :c2231, :c2232, :c2233, :c2234, :c2235, :c2236, :c2237, :c2238, :c2239, :c2240, :c2241, :c2242, :c2243, :c2244, :c2245, :c2246, :c2247, :c2248, :c2249, :c2250, :c2251, :c2252, :c2253, :c2254, :c2255, :c2256, :c2257, :c2258, :c2259, :c2260, :c2261, :c2262, :c2263, :c2264, :c2265, :c2266, :c2267, :c2268, :c2269, :c2270, :c2271, :c2272, :c2273, :c2274, :c2275, :c2276, :c2277, :c2278, :c2279, :c2280, :c2281, :c2282, :c2283, :c2284, :c2285, :c2286, :c2287, :c2288, :c2289, :c2290, :c2291, :c2292, :c2293, :c2294, :c2295, :c2296, :c2297, :c2298, :c2299, :c2300, :c2301, :c2302, :c2303, :c2304, :c2305, :c2306, :c2307, :c2308, :c2309, :c2310, :c2311, :c2312, :c2313, :c2314, :c2315, :c2316, :c2317, :c2318, :c2319, :c2320, :c2321, :c2322, :c2323, :c2324, :c2325, :c2326, :c2327, :c2328, :c2329, :c2330, :c2331, :c2332, :c2333, :c2334, :c2335, :c2336, :c2337, :c2338, :c2339, :c2340, :c2341, :c2342, :c2343, :c2344, :c2345, :c2346, :c2347, :c2348, :c2349, :c2350, :c2351, :c2352, :c2353, :c2354, :c2355, :c2356, :c2357, :c2358, :c2359, :c2360, :c2361, :c2362, :c2363, :c2364, :c2365, :c2366, :c2367, :c2368, :c2369, :c2370, :c2371, :c2372, :c2373, :c2374, :c2375, :c2376, :c2377, :c2378, :c2379, :c2380, :c2381, :c2382, :c2383, :c2384, :c2385, :c2386, :c2387, :c2388, :c2389, :c2390, :c2391, :c2392, :c2393, :c2394, :c2395, :c2396, :c2397, :c2398, :c2399, :c2400, :c2401, :c2402, :c2403, :c2404, :c2405, :c2406, :c2407, :c2408, :c2409, :c2410, :c2411, :c2412, :c2413, :c2414, :c2415, :c2416, :c2417, :c2418, :c2419, :c2420, :c2421, :c2422, :c2423, :c2424, :c2425, :c2426, :c2427, :c2428, :c2429, :c2430, :c2431, :c2432, :c2433, :c2434, :c2435, :c2436, :c2437, :c2438, :c2439, :c2440, :c2441, :c2442, :c2443, :c2444, :c2445, :c2446, :c2447, :c2448, :c2449, :c2450, :c2451, :c2452, :c2453, :c2454, :c2455, :c2456, :c2457, :c2458, :c2459, :c2460, :c2461, :c2462, :c2463, :c2464, :c2465, :c2466, :c2467, :c2468, :c2469, :c2470, :c2471, :c2472, :c2473, :c2474, :c2475, :c2476, :c2477, :c2478, :c2479, :c2480, :c2481, :c2482, :c2483, :c2484, :c2485, :c2486, :c2487, :c2488, :c2489, :c2490, :c2491, :c2492, :c2493, :c2494, :c2495, :c2496, :c2497, :c2498, :c2499, :c2500, :c2501, :c2502, :c2503, :c2504, :c2505, :c2506, :c2507, :c2508, :c2509, :c2510, :c2511, :c2512, :c2513, :c2514, :c2515, :c2516, :c2517, :c2518, :c2519, :c2520, :c2521, :c2522, :c2523, :c2524, :c2525, :c2526, :c2527, :c2528, :c2529, :c2530, :c2531, :c2532, :c2533, :c2534, :c2535, :c2536, :c2537, :c2538, :c2539, :c2540, :c2541, :c2542, :c2543, :c2544, :c2545, :c2546, :c2547, :c2548, :c2549, :c2550, :c2551, :c2552, :c2553, :c2554, :c2555, :c2556, :c2557, :c2558, :c2559, :c2560, :c2561, :c2562, :c2563, :c2564, :c2565, :c2566, :c2567, :c2568, :c2569, :c2570, :c2571, :c2572, :c2573, :c2574, :c2575, :c2576, :c2577, :c2578, :c2579, :c2580, :c2581, :c2582, :c2583, :c2584, :c2585, :c2586, :c2587, :c2588, :c2589, :c2590, :c2591, :c2592, :c2593, :c2594, :c2595, :c2596, :c2597, :c2598, :c2599, :c2600, :c2601, :c2602, :c2603, :c2604, :c2605, :c2606, :c2607, :c2608, :c2609, :c2610, :c2611, :c2612, :c2613, :c2614, :c2615, :c2616, :c2617, :c2618, :c2619, :c2620, :c2621, :c2622, :c2623, :c2624, :c2625, :c2626, :c2627, :c2628, :c2629, :c2630, :c2631, :c2632, :c2633, :c2634, :c2635, :c2636, :c2637, :c2638, :c2639, :c2640, :c2641, :c2642, :c2643, :c2644, :c2645, :c2646, :c2647, :c2648, :c2649, :c2650, :c2651, :c2652, :c2653, :c2654, :c2655, :c2656, :c2657, :c2658, :c2659, :c2660, :c2661, :c2662, :c2663, :c2664, :c2665, :c2666, :c2667, :c2668, :c2669, :c2670, :c2671, :c2672, :c2673, :c2674, :c2675, :c2676, :c2677, :c2678, :c2679, :c2680, :c2681, :c2682, :c2683, :c2684, :c2685, :c2686, :c2687, :c2688, :c2689, :c2690, :c2691, :c2692, :c2693, :c2694, :c2695, :c2696, :c2697, :c2698, :c2699, :c2700, :c2701, :c2702, :c2703, :c2704, :c2705, :c2706, :c2707, :c2708, :c2709, :c2710, :c2711, :c2712, :c2713, :c2714, :c2715, :c2716, :c2717, :c2718, :c2719, :c2720, :c2721, :c2722, :c2723, :c2724, :c2725, :c2726, :c2727, :c2728, :c2729, :c2730, :c2731, :c2732, :c2733, :c2734, :c2735, :c2736, :c2737, :c2738, :c2739, :c2740, :c2741, :c2742, :c2743, :c2744, :c2745, :c2746, :c2747, :c2748, :c2749, :c2750, :c2751, :c2752, :c2753, :c2754, :c2755, :c2756, :c2757, :c2758, :c2759, :c2760, :c2761, :c2762, :c2763, :c2764, :c2765, :c2766, :c2767, :c2768, :c2769, :c2770, :c2771, :c2772, :c2773, :c2774, :c2775, :c2776, :c2777, :c2778, :c2779, :c2780, :c2781, :c2782, :c2783, :c2784, :c2785, :c2786, :c2787, :c2788, :c2789, :c2790, :c2791, :c2792, :c2793, :c2794, :c2795, :c2796, :c2797, :c2798, :c2799, :c2800, :c2801, :c2802, :c2803, :c2804, :c2805, :c2806, :c2807, :c2808, :c2809, :c2810, :c2811, :c2812, :c2813, :c2814, :c2815, :c2816, :c2817, :c2818, :c2819, :c2820, :c2821, :c2822, :c2823, :c2824, :c2825, :c2826, :c2827, :c2828, :c2829, :c2830, :c2831, :c2832, :c2833, :c2834, :c2835, :c2836, :c2837, :c2838, :c2839, :c2840, :c2841, :c2842, :c2843, :c2844, :c2845, :c2846, :c2847, :c2848, :c2849, :c2850, :c2851, :c2852, :c2853, :c2854, :c2855, :c2856, :c2857, :c2858, :c2859, :c2860, :c2861, :c2862, :c2863, :c2864, :c2865, :c2866, :c2867, :c2868, :c2869, :c2870, :c2871, :c2872, :c2873, :c2874, :c2875, :c2876, :c2877, :c2878, :c2879, :c2880, :c2881, :c2882, :c2883, :c2884, :c2885, :c2886, :c2887, :c2888, :c2889, :c2890, :c2891, :c2892, :c2893, :c2894, :c2895, :c2896, :c2897, :c2898, :c2899, :c2900, :c2901, :c2902, :c2903, :c2904, :c2905, :c2906, :c2907, :c2908, :c2909, :c2910, :c2911, :c2912, :c2913, :c2914, :c2915, :c2916, :c2917, :c2918, :c2919, :c2920, :c2921, :c2922, :c2923, :c2924, :c2925, :c2926, :c2927, :c2928, :c2929, :c2930, :c2931, :c2932, :c2933, :c2934, :c2935, :c2936, :c2937, :c2938, :c2939, :c2940, :c2941, :c2942, :c2943, :c2944, :c2945, :c2946, :c2947, :c2948, :c2949, :c2950, :c2951, :c2952, :c2953, :c2954, :c2955, :c2956, :c2957, :c2958, :c2959, :c2960, :c2961, :c2962, :c2963, :c2964, :c2965, :c2966, :c2967, :c2968, :c2969, :c2970, :c2971, :c2972, :c2973, :c2974, :c2975, :c2976, :c2977, :c2978, :c2979, :c2980, :c2981, :c2982, :c2983, :c2984, :c2985, :c2986, :c2987, :c2988, :c2989, :c2990, :c2991, :c2992, :c2993, :c2994, :c2995, :c2996, :c2997, :c2998, :c2999, :c3000, :c3001, :c3002, :c3003, :c3004, :c3005, :c3006, :c3007, :c3008, :c3009, :c3010, :c3011, :c3012, :c3013, :c3014, :c3015, :c3016, :c3017, :c3018, :c3019, :c3020, :c3021, :c3022, :c3023, :c3024, :c3025, :c3026, :c3027, :c3028, :c3029, :c3030, :c3031, :c3032, :c3033, :c3034, :c3035, :c3036, :c3037, :c3038, :c3039, :c3040, :c3041, :c3042, :c3043, :c3044, :c3045, :c3046, :c3047, :c3048, :c3049, :c3050, :c3051, :c3052, :c3053, :c3054, :c3055, :c3056, :c3057, :c3058, :c3059, :c3060, :c3061, :c3062, :c3063, :c3064, :c3065, :c3066, :c3067, :c3068, :c3069, :c3070, :c3071, :c3072, :c3073, :c3074, :c3075, :c3076, :c3077, :c3078, :c3079, :c3080, :c3081, :c3082, :c3083, :c3084, :c3085, :c3086, :c3087, :c3088, :c3089, :c3090, :c3091, :c3092, :c3093, :c3094, :c3095, :c3096, :c3097, :c3098, :c3099, :c3100, :c3101, :c3102, :c3103, :c3104, :c3105, :c3106, :c3107, :c3108, :c3109, :c3110, :c3111, :c3112, :c3113, :c3114, :c3115, :c3116, :c3117, :c3118, :c3119, :c3120, :c3121, :c3122, :c3123, :c3124, :c3125, :c3126, :c3127, :c3128, :c3129, :c3130, :c3131, :c3132, :c3133, :c3134, :c3135, :c3136, :c3137, :c3138, :c3139, :c3140, :c3141, :c3142, :c3143, :c3144, :c3145, :c3146, :c3147, :c3148, :c3149, :c3150, :c3151, :c3152, :c3153, :c3154, :c3155, :c3156, :c3157, :c3158, :c3159, :c3160, :c3161, :c3162, :c3163, :c3164, :c3165, :c3166, :c3167, :c3168, :c3169, :c3170, :c3171, :c3172, :c3173, :c3174, :c3175, :c3176, :c3177, :c3178, :c3179, :c3180, :c3181, :c3182, :c3183, :c3184, :c3185, :c3186, :c3187, :c3188, :c3189, :c3190, :c3191, :c3192, :c3193, :c3194, :c3195, :c3196, :c3197, :c3198, :c3199, :c3200, :c3201, :c3202, :c3203, :c3204, :c3205, :c3206, :c3207, :c3208, :c3209, :c3210, :c3211, :c3212, :c3213, :c3214, :c3215, :c3216, :c3217, :c3218, :c3219, :c3220, :c3221, :c3222, :c3223, :c3224, :c3225, :c3226, :c3227, :c3228, :c3229, :c3230, :c3231, :c3232, :c3233, :c3234, :c3235, :c3236, :c3237, :c3238, :c3239, :c3240, :c3241, :c3242, :c3243, :c3244, :c3245, :c3246, :c3247, :c3248, :c3249, :c3250, :c3251, :c3252, :c3253, :c3254, :c3255, :c3256, :c3257, :c3258, :c3259, :c3260, :c3261, :c3262, :c3263, :c3264, :c3265, :c3266, :c3267, :c3268, :c3269, :c3270, :c3271, :c3272, :c3273, :c3274, :c3275, :c3276, :c3277, :c3278, :c3279, :c3280, :c3281, :c3282, :c3283, :c3284, :c3285, :c3286, :c3287, :c3288, :c3289, :c3290, :c3291, :c3292, :c3293, :c3294, :c3295, :c3296, :c3297, :c3298, :c3299, :c3300, :c3301, :c3302, :c3303, :c3304, :c3305, :c3306, :c3307, :c3308, :c3309, :c3310, :c3311, :c3312, :c3313, :c3314, :c3315, :c3316, :c3317, :c3318, :c3319, :c3320, :c3321, :c3322, :c3323, :c3324, :c3325, :c3326, :c3327, :c3328, :c3329, :c3330, :c3331, :c3332, :c3333, :c3334, :c3335, :c3336, :c3337, :c3338, :c3339, :c3340, :c3341, :c3342, :c3343, :c3344, :c3345, :c3346, :c3347, :c3348, :c3349, :c3350, :c3351, :c3352, :c3353, :c3354, :c3355, :c3356, :c3357, :c3358, :c3359, :c3360, :c3361, :c3362, :c3363, :c3364, :c3365, :c3366, :c3367, :c3368, :c3369, :c3370, :c3371, :c3372, :c3373, :c3374, :c3375, :c3376, :c3377, :c3378, :c3379, :c3380, :c3381, :c3382, :c3383, :c3384, :c3385, :c3386, :c3387, :c3388, :c3389, :c3390, :c3391, :c3392, :c3393, :c3394, :c3395, :c3396, :c3397, :c3398, :c3399, :c3400, :c3401, :c3402, :c3403, :c3404, :c3405, :c3406, :c3407, :c3408, :c3409, :c3410, :c3411, :c3412, :c3413, :c3414, :c3415, :c3416, :c3417, :c3418, :c3419, :c3420, :c3421, :c3422, :c3423, :c3424, :c3425, :c3426, :c3427, :c3428, :c3429, :c3430, :c3431, :c3432, :c3433, :c3434, :c3435, :c3436, :c3437, :c3438, :c3439, :c3440, :c3441, :c3442, :c3443, :c3444, :c3445, :c3446, :c3447, :c3448, :c3449, :c3450, :c3451, :c3452, :c3453, :c3454, :c3455, :c3456, :c3457, :c3458, :c3459, :c3460, :c3461, :c3462, :c3463, :c3464, :c3465, :c3466, :c3467, :c3468, :c3469, :c3470, :c3471, :c3472, :c3473, :c3474, :c3475, :c3476, :c3477, :c3478, :c3479, :c3480, :c3481, :c3482, :c3483, :c3484, :c3485, :c3486, :c3487, :c3488, :c3489, :c3490, :c3491, :c3492, :c3493, :c3494, :c3495, :c3496, :c3497, :c3498, :c3499, :c3500, :c3501, :c3502, :c3503, :c3504, :c3505, :c3506, :c3507, :c3508, :c3509, :c3510, :c3511, :c3512, :c3513, :c3514, :c3515, :c3516, :c3517, :c3518, :c3519, :c3520, :c3521, :c3522, :c3523, :c3524, :c3525, :c3526, :c3527, :c3528, :c3529, :c3530, :c3531, :c3532, :c3533, :c3534, :c3535, :c3536, :c3537, :c3538, :c3539, :c3540, :c3541, :c3542, :c3543, :c3544, :c3545, :c3546, :c3547, :c3548, :c3549, :c3550, :c3551, :c3552, :c3553, :c3554, :c3555, :c3556, :c3557, :c3558, :c3559, :c3560, :c3561, :c3562, :c3563, :c3564, :c3565, :c3566, :c3567, :c3568, :c3569, :c3570, :c3571, :c3572, :c3573, :c3574, :c3575, :c3576, :c3577, :c3578, :c3579, :c3580, :c3581, :c3582, :c3583, :c3584, :c3585, :c3586, :c3587, :c3588, :c3589, :c3590, :c3591, :c3592, :c3593, :c3594, :c3595, :c3596, :c3597, :c3598, :c3599, :c3600, :c3601, :c3602, :c3603, :c3604, :c3605, :c3606, :c3607, :c3608, :c3609, :c3610, :c3611, :c3612, :c3613, :c3614, :c3615, :c3616, :c3617, :c3618, :c3619, :c3620, :c3621, :c3622, :c3623, :c3624, :c3625, :c3626, :c3627, :c3628, :c3629, :c3630, :c3631, :c3632, :c3633, :c3634, :c3635, :c3636, :c3637, :c3638, :c3639, :c3640, :c3641, :c3642, :c3643, :c3644, :c3645, :c3646, :c3647, :c3648, :c3649, :c3650, :c3651, :c3652, :c3653, :c3654, :c3655, :c3656, :c3657, :c3658, :c3659, :c3660, :c3661, :c3662, :c3663, :c3664, :c3665, :c3666, :c3667, :c3668, :c3669, :c3670, :c3671, :c3672, :c3673, :c3674, :c3675, :c3676, :c3677, :c3678, :c3679, :c3680, :c3681, :c3682, :c3683, :c3684, :c3685, :c3686, :c3687, :c3688, :c3689, :c3690, :c3691, :c3692, :c3693, :c3694, :c3695, :c3696, :c3697, :c3698, :c3699, :c3700, :c3701, :c3702, :c3703, :c3704, :c3705, :c3706, :c3707, :c3708, :c3709, :c3710, :c3711, :c3712, :c3713, :c3714, :c3715, :c3716, :c3717, :c3718, :c3719, :c3720, :c3721, :c3722, :c3723, :c3724, :c3725, :c3726, :c3727, :c3728, :c3729, :c3730, :c3731, :c3732, :c3733, :c3734, :c3735, :c3736, :c3737, :c3738, :c3739, :c3740, :c3741, :c3742, :c3743, :c3744, :c3745, :c3746, :c3747, :c3748, :c3749, :c3750, :c3751, :c3752, :c3753, :c3754, :c3755, :c3756, :c3757, :c3758, :c3759, :c3760, :c3761, :c3762, :c3763, :c3764, :c3765, :c3766, :c3767, :c3768, :c3769, :c3770, :c3771, :c3772, :c3773, :c3774, :c3775, :c3776, :c3777, :c3778, :c3779, :c3780, :c3781, :c3782, :c3783, :c3784, :c3785, :c3786, :c3787, :c3788, :c3789, :c3790, :c3791, :c3792, :c3793, :c3794, :c3795, :c3796, :c3797, :c3798, :c3799, :c3800, :c3801, :c3802, :c3803, :c3804, :c3805, :c3806, :c3807, :c3808, :c3809, :c3810, :c3811, :c3812, :c3813, :c3814, :c3815, :c3816, :c3817, :c3818, :c3819, :c3820, :c3821, :c3822, :c3823, :c3824, :c3825, :c3826, :c3827, :c3828, :c3829, :c3830, :c3831, :c3832, :c3833, :c3834, :c3835, :c3836, :c3837, :c3838, :c3839, :c3840, :c3841, :c3842, :c3843, :c3844, :c3845, :c3846, :c3847, :c3848, :c3849, :c3850, :c3851, :c3852, :c3853, :c3854, :c3855, :c3856, :c3857, :c3858, :c3859, :c3860, :c3861, :c3862, :c3863, :c3864, :c3865, :c3866, :c3867, :c3868, :c3869, :c3870, :c3871, :c3872, :c3873, :c3874, :c3875, :c3876, :c3877, :c3878, :c3879, :c3880, :c3881, :c3882, :c3883, :c3884, :c3885, :c3886, :c3887, :c3888, :c3889, :c3890, :c3891, :c3892, :c3893, :c3894, :c3895, :c3896, :c3897, :c3898, :c3899, :c3900, :c3901, :c3902, :c3903, :c3904, :c3905, :c3906, :c3907, :c3908, :c3909, :c3910, :c3911, :c3912, :c3913, :c3914, :c3915, :c3916, :c3917, :c3918, :c3919, :c3920, :c3921, :c3922, :c3923, :c3924, :c3925, :c3926, :c3927, :c3928, :c3929, :c3930, :c3931, :c3932, :c3933, :c3934, :c3935, :c3936, :c3937, :c3938, :c3939, :c3940, :c3941, :c3942, :c3943, :c3944, :c3945, :c3946, :c3947, :c3948, :c3949, :c3950, :c3951, :c3952, :c3953, :c3954, :c3955, :c3956, :c3957, :c3958, :c3959, :c3960, :c3961, :c3962, :c3963, :c3964, :c3965, :c3966, :c3967, :c3968, :c3969, :c3970, :c3971, :c3972, :c3973, :c3974, :c3975, :c3976, :c3977, :c3978, :c3979, :c3980, :c3981, :c3982, :c3983, :c3984, :c3985, :c3986, :c3987, :c3988, :c3989, :c3990, :c3991, :c3992, :c3993, :c3994, :c3995, :c3996, :c3997, :c3998, :c3999, :c4000, :c4001, :c4002, :c4003, :c4004, :c4005, :c4006, :c4007, :c4008, :c4009, :c4010, :c4011, :c4012, :c4013, :c4014, :c4015, :c4016, :c4017, :c4018, :c4019, :c4020, :c4021, :c4022, :c4023, :c4024, :c4025, :c4026, :c4027, :c4028, :c4029, :c4030, :c4031, :c4032, :c4033, :c4034, :c4035, :c4036, :c4037, :c4038, :c4039, :c4040, :c4041, :c4042, :c4043, :c4044, :c4045, :c4046, :c4047, :c4048, :c4049, :c4050, :c4051, :c4052, :c4053, :c4054, :c4055, :c4056, :c4057, :c4058, :c4059, :c4060, :c4061, :c4062, :c4063, :c4064, :c4065, :c4066, :c4067, :c4068, :c4069, :c4070, :c4071, :c4072, :c4073, :c4074, :c4075, :c4076, :c4077, :c4078, :c4079, :c4080, :c4081, :c4082, :c4083, :c4084, :c4085, :c4086, :c4087, :c4088, :c4089, :c4090, :c4091, :c4092, :c4093, :c4094, :c4095, :c4096, :c4097, :c4098, :c4099, :c4100, :c4101, :c4102, :c4103, :c4104, :c4105, :c4106, :c4107, :c4108, :c4109, :c4110, :c4111, :c4112, :c4113, :c4114, :c4115, :c4116, :c4117, :c4118, :c4119, :c4120, :c4121, :c4122, :c4123, :c4124, :c4125, :c4126, :c4127, :c4128, :c4129, :c4130, :c4131, :c4132, :c4133, :c4134, :c4135, :c4136, :c4137, :c4138, :c4139, :c4140, :c4141, :c4142, :c4143, :c4144, :c4145, :c4146, :c4147, :c4148, :c4149, :c4150, :c4151, :c4152, :c4153, :c4154, :c4155, :c4156, :c4157, :c4158, :c4159, :c4160, :c4161, :c4162, :c4163, :c4164, :c4165, :c4166, :c4167, :c4168, :c4169, :c4170, :c4171, :c4172, :c4173, :c4174, :c4175, :c4176, :c4177, :c4178, :c4179, :c4180, :c4181, :c4182, :c4183, :c4184, :c4185, :c4186, :c4187, :c4188, :c4189, :c4190, :c4191, :c4192, :c4193, :c4194, :c4195, :c4196, :c4197, :c4198, :c4199, :c4200, :c4201, :c4202, :c4203, :c4204, :c4205, :c4206, :c4207, :c4208, :c4209, :c4210, :c4211, :c4212, :c4213, :c4214, :c4215, :c4216, :c4217, :c4218, :c4219, :c4220, :c4221, :c4222, :c4223, :c4224, :c4225, :c4226, :c4227, :c4228, :c4229, :c4230, :c4231, :c4232, :c4233, :c4234, :c4235, :c4236, :c4237, :c4238, :c4239, :c4240, :c4241, :c4242, :c4243, :c4244, :c4245, :c4246, :c4247, :c4248, :c4249, :c4250, :c4251, :c4252, :c4253, :c4254, :c4255, :c4256, :c4257, :c4258, :c4259, :c4260, :c4261, :c4262, :c4263, :c4264, :c4265, :c4266, :c4267, :c4268, :c4269, :c4270, :c4271, :c4272, :c4273, :c4274, :c4275, :c4276, :c4277, :c4278, :c4279, :c4280, :c4281, :c4282, :c4283, :c4284, :c4285, :c4286, :c4287, :c4288, :c4289, :c4290, :c4291, :c4292, :c4293, :c4294, :c4295, :c4296, :c4297, :c4298, :c4299, :c4300, :c4301, :c4302, :c4303, :c4304, :c4305, :c4306, :c4307, :c4308, :c4309, :c4310, :c4311, :c4312, :c4313, :c4314, :c4315, :c4316, :c4317, :c4318, :c4319, :c4320, :c4321, :c4322, :c4323, :c4324, :c4325, :c4326, :c4327, :c4328, :c4329, :c4330, :c4331, :c4332, :c4333, :c4334, :c4335, :c4336, :c4337, :c4338, :c4339, :c4340, :c4341, :c4342, :c4343, :c4344, :c4345, :c4346, :c4347, :c4348, :c4349, :c4350, :c4351, :c4352, :c4353, :c4354, :c4355, :c4356, :c4357, :c4358, :c4359, :c4360, :c4361, :c4362, :c4363, :c4364, :c4365, :c4366, :c4367, :c4368, :c4369, :c4370, :c4371, :c4372, :c4373, :c4374, :c4375, :c4376, :c4377, :c4378, :c4379, :c4380, :c4381, :c4382, :c4383, :c4384, :c4385, :c4386, :c4387, :c4388, :c4389, :c4390, :c4391, :c4392, :c4393, :c4394, :c4395, :c4396, :c4397, :c4398, :c4399, :c4400, :c4401, :c4402, :c4403, :c4404, :c4405, :c4406, :c4407, :c4408, :c4409, :c4410, :c4411, :c4412, :c4413, :c4414, :c4415, :c4416, :c4417, :c4418, :c4419, :c4420, :c4421, :c4422, :c4423, :c4424, :c4425, :c4426, :c4427, :c4428, :c4429, :c4430, :c4431, :c4432, :c4433, :c4434, :c4435, :c4436, :c4437, :c4438, :c4439, :c4440, :c4441, :c4442, :c4443, :c4444, :c4445, :c4446, :c4447, :c4448, :c4449, :c4450, :c4451, :c4452, :c4453, :c4454, :c4455, :c4456, :c4457, :c4458, :c4459, :c4460, :c4461, :c4462, :c4463, :c4464, :c4465, :c4466, :c4467, :c4468, :c4469, :c4470, :c4471, :c4472, :c4473, :c4474, :c4475, :c4476, :c4477, :c4478, :c4479, :c4480, :c4481, :c4482, :c4483, :c4484, :c4485, :c4486, :c4487, :c4488, :c4489, :c4490, :c4491, :c4492, :c4493, :c4494, :c4495, :c4496, :c4497, :c4498, :c4499, :c4500, :c4501, :c4502, :c4503, :c4504, :c4505, :c4506, :c4507, :c4508, :c4509, :c4510, :c4511, :c4512, :c4513, :c4514, :c4515, :c4516, :c4517, :c4518, :c4519, :c4520, :c4521, :c4522, :c4523, :c4524, :c4525, :c4526, :c4527, :c4528, :c4529, :c4530, :c4531, :c4532, :c4533, :c4534, :c4535, :c4536, :c4537, :c4538, :c4539, :c4540, :c4541, :c4542, :c4543, :c4544, :c4545, :c4546, :c4547, :c4548, :c4549, :c4550, :c4551, :c4552, :c4553, :c4554, :c4555, :c4556, :c4557, :c4558, :c4559, :c4560, :c4561, :c4562, :c4563, :c4564, :c4565, :c4566, :c4567, :c4568, :c4569, :c4570, :c4571, :c4572, :c4573, :c4574, :c4575, :c4576, :c4577, :c4578, :c4579, :c4580, :c4581, :c4582, :c4583, :c4584, :c4585, :c4586, :c4587, :c4588, :c4589, :c4590, :c4591, :c4592, :c4593, :c4594, :c4595, :c4596, :c4597, :c4598, :c4599, :c4600, :c4601, :c4602, :c4603, :c4604, :c4605, :c4606, :c4607, :c4608, :c4609, :c4610, :c4611, :c4612, :c4613, :c4614, :c4615, :c4616, :c4617, :c4618, :c4619, :c4620, :c4621, :c4622, :c4623, :c4624, :c4625, :c4626, :c4627, :c4628, :c4629, :c4630, :c4631, :c4632, :c4633, :c4634, :c4635, :c4636, :c4637, :c4638, :c4639, :c4640, :c4641, :c4642, :c4643, :c4644, :c4645, :c4646, :c4647, :c4648, :c4649, :c4650, :c4651, :c4652, :c4653, :c4654, :c4655, :c4656, :c4657, :c4658, :c4659, :c4660, :c4661, :c4662, :c4663, :c4664, :c4665, :c4666, :c4667, :c4668, :c4669, :c4670, :c4671, :c4672, :c4673, :c4674, :c4675, :c4676, :c4677, :c4678, :c4679, :c4680, :c4681, :c4682, :c4683, :c4684, :c4685, :c4686, :c4687, :c4688, :c4689, :c4690, :c4691, :c4692, :c4693, :c4694, :c4695, :c4696, :c4697, :c4698, :c4699, :c4700, :c4701, :c4702, :c4703, :c4704, :c4705, :c4706, :c4707, :c4708, :c4709, :c4710, :c4711, :c4712, :c4713, :c4714, :c4715, :c4716, :c4717, :c4718, :c4719, :c4720, :c4721, :c4722, :c4723, :c4724, :c4725, :c4726, :c4727, :c4728, :c4729, :c4730, :c4731, :c4732, :c4733, :c4734, :c4735, :c4736, :c4737, :c4738, :c4739, :c4740, :c4741, :c4742, :c4743, :c4744, :c4745, :c4746, :c4747, :c4748, :c4749, :c4750, :c4751, :c4752, :c4753, :c4754, :c4755, :c4756, :c4757, :c4758, :c4759, :c4760, :c4761, :c4762, :c4763, :c4764, :c4765, :c4766, :c4767, :c4768, :c4769, :c4770, :c4771, :c4772, :c4773, :c4774, :c4775, :c4776, :c4777, :c4778, :c4779, :c4780, :c4781, :c4782, :c4783, :c4784, :c4785, :c4786, :c4787, :c4788, :c4789, :c4790, :c4791, :c4792, :c4793, :c4794, :c4795, :c4796, :c4797, :c4798, :c4799, :c4800, :c4801, :c4802, :c4803, :c4804, :c4805, :c4806, :c4807, :c4808, :c4809, :c4810, :c4811, :c4812, :c4813, :c4814, :c4815, :c4816, :c4817, :c4818, :c4819, :c4820, :c4821, :c4822, :c4823, :c4824, :c4825, :c4826, :c4827, :c4828, :c4829, :c4830, :c4831, :c4832, :c4833, :c4834, :c4835, :c4836, :c4837, :c4838, :c4839, :c4840, :c4841, :c4842, :c4843, :c4844, :c4845, :c4846, :c4847, :c4848, :c4849, :c4850, :c4851, :c4852, :c4853, :c4854, :c4855, :c4856, :c4857, :c4858, :c4859, :c4860, :c4861, :c4862, :c4863, :c4864, :c4865, :c4866, :c4867, :c4868, :c4869, :c4870, :c4871, :c4872, :c4873, :c4874, :c4875, :c4876, :c4877, :c4878, :c4879, :c4880, :c4881, :c4882, :c4883, :c4884, :c4885, :c4886, :c4887, :c4888, :c4889, :c4890, :c4891, :c4892, :c4893, :c4894, :c4895, :c4896, :c4897, :c4898, :c4899, :c4900, :c4901, :c4902, :c4903, :c4904, :c4905, :c4906, :c4907, :c4908, :c4909, :c4910, :c4911, :c4912, :c4913, :c4914, :c4915, :c4916, :c4917, :c4918, :c4919, :c4920, :c4921, :c4922, :c4923, :c4924, :c4925, :c4926, :c4927, :c4928, :c4929, :c4930, :c4931, :c4932, :c4933, :c4934, :c4935, :c4936, :c4937, :c4938, :c4939, :c4940, :c4941, :c4942, :c4943, :c4944, :c4945, :c4946, :c4947, :c4948, :c4949, :c4950, :c4951, :c4952, :c4953, :c4954, :c4955, :c4956, :c4957, :c4958, :c4959, :c4960, :c4961, :c4962, :c4963, :c4964, :c4965, :c4966, :c4967, :c4968, :c4969, :c4970, :c4971, :c4972, :c4973, :c4974, :c4975, :c4976, :c4977, :c4978, :c4979, :c4980, :c4981, :c4982, :c4983, :c4984, :c4985, :c4986, :c4987, :c4988, :c4989, :c4990, :c4991, :c4992, :c4993, :c4994, :c4995, :c4996, :c4997, :c4998, :c4999, :c5000, :c5001, :c5002, :c5003, :c5004, :c5005, :c5006, :c5007, :c5008, :c5009, :c5010, :c5011, :c5012, :c5013, :c5014, :c5015, :c5016, :c5017, :c5018, :c5019, :c5020, :c5021, :c5022, :c5023, :c5024, :c5025, :c5026, :c5027, :c5028, :c5029, :c5030, :c5031, :c5032, :c5033, :c5034, :c5035, :c5036, :c5037, :c5038, :c5039, :c5040, :c5041, :c5042, :c5043, :c5044, :c5045, :c5046, :c5047, :c5048, :c5049, :c5050, :c5051, :c5052, :c5053, :c5054, :c5055, :c5056, :c5057, :c5058, :c5059, :c5060, :c5061, :c5062, :c5063, :c5064, :c5065, :c5066, :c5067, :c5068, :c5069, :c5070, :c5071, :c5072, :c5073, :c5074, :c5075, :c5076, :c5077, :c5078, :c5079, :c5080, :c5081, :c5082, :c5083, :c5084, :c5085, :c5086, :c5087, :c5088, :c5089, :c5090, :c5091, :c5092, :c5093, :c5094, :c5095, :c5096, :c5097, :c5098, :c5099, :c5100, :c5101, :c5102, :c5103, :c5104, :c5105, :c5106, :c5107, :c5108, :c5109, :c5110, :c5111, :c5112, :c5113, :c5114, :c5115, :c5116, :c5117, :c5118, :c5119, :c5120, :c5121, :c5122, :c5123, :c5124, :c5125, :c5126, :c5127, :c5128, :c5129, :c5130, :c5131, :c5132, :c5133, :c5134, :c5135, :c5136, :c5137, :c5138, :c5139, :c5140, :c5141, :c5142, :c5143, :c5144, :c5145, :c5146, :c5147, :c5148, :c5149, :c5150, :c5151, :c5152, :c5153, :c5154, :c5155, :c5156, :c5157, :c5158, :c5159, :c5160, :c5161, :c5162, :c5163, :c5164, :c5165, :c5166, :c5167, :c5168, :c5169, :c5170, :c5171, :c5172, :c5173, :c5174, :c5175, :c5176, :c5177, :c5178, :c5179, :c5180, :c5181, :c5182, :c5183, :c5184, :c5185, :c5186, :c5187, :c5188, :c5189, :c5190, :c5191, :c5192, :c5193, :c5194, :c5195, :c5196, :c5197, :c5198, :c5199, :c5200, :c5201, :c5202, :c5203, :c5204, :c5205, :c5206, :c5207, :c5208, :c5209, :c5210, :c5211, :c5212, :c5213, :c5214, :c5215, :c5216, :c5217, :c5218, :c5219, :c5220, :c5221, :c5222, :c5223, :c5224, :c5225, :c5226, :c5227, :c5228, :c5229, :c5230, :c5231, :c5232, :c5233, :c5234, :c5235, :c5236, :c5237, :c5238, :c5239, :c5240, :c5241, :c5242, :c5243, :c5244, :c5245, :c5246, :c5247, :c5248, :c5249, :c5250, :c5251, :c5252, :c5253, :c5254, :c5255, :c5256, :c5257, :c5258, :c5259, :c5260, :c5261, :c5262, :c5263, :c5264, :c5265, :c5266, :c5267, :c5268, :c5269, :c5270, :c5271, :c5272, :c5273, :c5274, :c5275, :c5276, :c5277, :c5278, :c5279, :c5280, :c5281, :c5282, :c5283, :c5284, :c5285, :c5286, :c5287, :c5288, :c5289, :c5290, :c5291, :c5292, :c5293, :c5294, :c5295, :c5296, :c5297, :c5298, :c5299, :c5300, :c5301, :c5302, :c5303, :c5304, :c5305, :c5306, :c5307, :c5308, :c5309, :c5310, :c5311, :c5312, :c5313, :c5314, :c5315, :c5316, :c5317, :c5318, :c5319, :c5320, :c5321, :c5322, :c5323, :c5324, :c5325, :c5326, :c5327, :c5328, :c5329, :c5330, :c5331, :c5332, :c5333, :c5334, :c5335, :c5336, :c5337, :c5338, :c5339, :c5340, :c5341, :c5342, :c5343, :c5344, :c5345, :c5346, :c5347, :c5348, :c5349, :c5350, :c5351, :c5352, :c5353, :c5354, :c5355, :c5356, :c5357, :c5358, :c5359, :c5360, :c5361, :c5362, :c5363, :c5364, :c5365, :c5366, :c5367, :c5368, :c5369, :c5370, :c5371, :c5372, :c5373, :c5374, :c5375, :c5376, :c5377, :c5378, :c5379, :c5380, :c5381, :c5382, :c5383, :c5384, :c5385, :c5386, :c5387, :c5388, :c5389, :c5390, :c5391, :c5392, :c5393, :c5394, :c5395, :c5396, :c5397, :c5398, :c5399, :c5400, :c5401, :c5402, :c5403, :c5404, :c5405, :c5406, :c5407, :c5408, :c5409, :c5410, :c5411, :c5412, :c5413, :c5414, :c5415, :c5416, :c5417, :c5418, :c5419, :c5420, :c5421, :c5422, :c5423, :c5424, :c5425, :c5426, :c5427, :c5428, :c5429, :c5430, :c5431, :c5432, :c5433, :c5434, :c5435, :c5436, :c5437, :c5438, :c5439, :c5440, :c5441, :c5442, :c5443, :c5444, :c5445, :c5446, :c5447, :c5448, :c5449, :c5450, :c5451, :c5452, :c5453, :c5454, :c5455, :c5456, :c5457, :c5458, :c5459, :c5460, :c5461, :c5462, :c5463, :c5464, :c5465, :c5466, :c5467, :c5468, :c5469, :c5470, :c5471, :c5472, :c5473, :c5474, :c5475, :c5476, :c5477, :c5478, :c5479, :c5480, :c5481, :c5482, :c5483, :c5484, :c5485, :c5486, :c5487, :c5488, :c5489, :c5490, :c5491, :c5492, :c5493, :c5494, :c5495, :c5496, :c5497, :c5498, :c5499, :c5500, :c5501, :c5502, :c5503, :c5504, :c5505, :c5506, :c5507, :c5508, :c5509, :c5510, :c5511, :c5512, :c5513, :c5514, :c5515, :c5516, :c5517, :c5518, :c5519, :c5520, :c5521, :c5522, :c5523, :c5524, :c5525, :c5526, :c5527, :c5528, :c5529, :c5530, :c5531, :c5532, :c5533, :c5534, :c5535, :c5536, :c5537, :c5538, :c5539, :c5540, :c5541, :c5542, :c5543, :c5544, :c5545, :c5546, :c5547, :c5548, :c5549, :c5550, :c5551, :c5552, :c5553, :c5554, :c5555, :c5556, :c5557, :c5558, :c5559, :c5560, :c5561, :c5562, :c5563, :c5564, :c5565, :c5566, :c5567, :c5568, :c5569, :c5570, :c5571, :c5572, :c5573, :c5574, :c5575, :c5576, :c5577, :c5578, :c5579, :c5580, :c5581, :c5582, :c5583, :c5584, :c5585, :c5586, :c5587, :c5588, :c5589, :c5590, :c5591, :c5592, :c5593, :c5594, :c5595, :c5596, :c5597, :c5598, :c5599, :c5600, :c5601, :c5602, :c5603, :c5604, :c5605, :c5606, :c5607, :c5608, :c5609, :c5610, :c5611, :c5612, :c5613, :c5614, :c5615, :c5616, :c5617, :c5618, :c5619, :c5620, :c5621, :c5622, :c5623, :c5624, :c5625, :c5626, :c5627, :c5628, :c5629, :c5630, :c5631, :c5632, :c5633, :c5634, :c5635, :c5636, :c5637, :c5638, :c5639, :c5640, :c5641, :c5642, :c5643, :c5644, :c5645, :c5646, :c5647, :c5648, :c5649, :c5650, :c5651, :c5652, :c5653, :c5654, :c5655, :c5656, :c5657, :c5658, :c5659, :c5660, :c5661, :c5662, :c5663, :c5664, :c5665, :c5666, :c5667, :c5668, :c5669, :c5670, :c5671, :c5672, :c5673, :c5674, :c5675, :c5676, :c5677, :c5678, :c5679, :c5680, :c5681, :c5682, :c5683, :c5684, :c5685, :c5686, :c5687, :c5688, :c5689, :c5690, :c5691, :c5692, :c5693, :c5694, :c5695, :c5696, :c5697, :c5698, :c5699, :c5700, :c5701, :c5702, :c5703, :c5704, :c5705, :c5706, :c5707, :c5708, :c5709, :c5710, :c5711, :c5712, :c5713, :c5714, :c5715, :c5716, :c5717, :c5718, :c5719, :c5720, :c5721, :c5722, :c5723, :c5724, :c5725, :c5726, :c5727, :c5728, :c5729, :c5730, :c5731, :c5732, :c5733, :c5734, :c5735, :c5736, :c5737, :c5738, :c5739, :c5740, :c5741, :c5742, :c5743, :c5744, :c5745, :c5746, :c5747, :c5748, :c5749, :c5750, :c5751, :c5752, :c5753, :c5754, :c5755, :c5756, :c5757, :c5758, :c5759, :c5760, :c5761, :c5762, :c5763, :c5764, :c5765, :c5766, :c5767, :c5768, :c5769, :c5770, :c5771, :c5772, :c5773, :c5774, :c5775, :c5776, :c5777, :c5778, :c5779, :c5780, :c5781, :c5782, :c5783, :c5784, :c5785, :c5786, :c5787, :c5788, :c5789, :c5790, :c5791, :c5792, :c5793, :c5794, :c5795, :c5796, :c5797, :c5798, :c5799, :c5800, :c5801, :c5802, :c5803, :c5804, :c5805, :c5806, :c5807, :c5808, :c5809, :c5810, :c5811, :c5812, :c5813, :c5814, :c5815, :c5816, :c5817, :c5818, :c5819, :c5820, :c5821, :c5822, :c5823, :c5824, :c5825, :c5826, :c5827, :c5828, :c5829, :c5830, :c5831, :c5832, :c5833, :c5834, :c5835, :c5836, :c5837, :c5838, :c5839, :c5840, :c5841, :c5842, :c5843, :c5844, :c5845, :c5846, :c5847, :c5848, :c5849, :c5850, :c5851, :c5852, :c5853, :c5854, :c5855, :c5856, :c5857, :c5858, :c5859, :c5860, :c5861, :c5862, :c5863, :c5864, :c5865, :c5866, :c5867, :c5868, :c5869, :c5870, :c5871, :c5872, :c5873, :c5874, :c5875, :c5876, :c5877, :c5878, :c5879, :c5880, :c5881, :c5882, :c5883, :c5884, :c5885, :c5886, :c5887, :c5888, :c5889, :c5890, :c5891, :c5892, :c5893, :c5894, :c5895, :c5896, :c5897, :c5898, :c5899, :c5900, :c5901, :c5902, :c5903, :c5904, :c5905, :c5906, :c5907, :c5908, :c5909, :c5910, :c5911, :c5912, :c5913, :c5914, :c5915, :c5916, :c5917, :c5918, :c5919, :c5920, :c5921, :c5922, :c5923, :c5924, :c5925, :c5926, :c5927, :c5928, :c5929, :c5930, :c5931, :c5932, :c5933, :c5934, :c5935, :c5936, :c5937, :c5938, :c5939, :c5940, :c5941, :c5942, :c5943, :c5944, :c5945, :c5946, :c5947, :c5948, :c5949, :c5950, :c5951, :c5952, :c5953, :c5954, :c5955, :c5956, :c5957, :c5958, :c5959, :c5960, :c5961, :c5962, :c5963, :c5964, :c5965, :c5966, :c5967, :c5968, :c5969, :c5970, :c5971, :c5972, :c5973, :c5974, :c5975, :c5976, :c5977, :c5978, :c5979, :c5980, :c5981, :c5982, :c5983, :c5984, :c5985, :c5986, :c5987, :c5988, :c5989, :c5990, :c5991, :c5992, :c5993, :c5994, :c5995, :c5996, :c5997, :c5998, :c5999, :c6000, :c6001, :c6002, :c6003, :c6004, :c6005, :c6006, :c6007, :c6008, :c6009, :c6010, :c6011, :c6012, :c6013, :c6014, :c6015, :c6016, :c6017, :c6018, :c6019, :c6020, :c6021, :c6022, :c6023, :c6024, :c6025, :c6026, :c6027, :c6028, :c6029, :c6030, :c6031, :c6032, :c6033, :c6034, :c6035, :c6036, :c6037, :c6038, :c6039, :c6040, :c6041, :c6042, :c6043, :c6044, :c6045, :c6046, :c6047, :c6048, :c6049, :c6050, :c6051, :c6052, :c6053, :c6054, :c6055, :c6056, :c6057, :c6058, :c6059, :c6060, :c6061, :c6062, :c6063, :c6064, :c6065, :c6066, :c6067, :c6068, :c6069, :c6070, :c6071, :c6072, :c6073, :c6074, :c6075, :c6076, :c6077, :c6078, :c6079, :c6080, :c6081, :c6082, :c6083, :c6084, :c6085, :c6086, :c6087, :c6088, :c6089, :c6090, :c6091, :c6092, :c6093, :c6094, :c6095, :c6096, :c6097, :c6098, :c6099, :c6100, :c6101, :c6102, :c6103, :c6104, :c6105, :c6106, :c6107, :c6108, :c6109, :c6110, :c6111, :c6112, :c6113, :c6114, :c6115, :c6116, :c6117, :c6118, :c6119, :c6120, :c6121, :c6122, :c6123, :c6124, :c6125, :c6126, :c6127, :c6128, :c6129, :c6130, :c6131, :c6132, :c6133, :c6134, :c6135, :c6136, :c6137, :c6138, :c6139, :c6140, :c6141, :c6142, :c6143, :c6144, :c6145, :c6146, :c6147, :c6148, :c6149, :c6150, :c6151, :c6152, :c6153, :c6154, :c6155, :c6156, :c6157, :c6158, :c6159, :c6160, :c6161, :c6162, :c6163, :c6164, :c6165, :c6166, :c6167, :c6168, :c6169, :c6170, :c6171, :c6172, :c6173, :c6174, :c6175, :c6176, :c6177, :c6178, :c6179, :c6180, :c6181, :c6182, :c6183, :c6184, :c6185, :c6186, :c6187, :c6188, :c6189, :c6190, :c6191, :c6192, :c6193, :c6194, :c6195, :c6196, :c6197, :c6198, :c6199, :c6200, :c6201, :c6202, :c6203, :c6204, :c6205, :c6206, :c6207, :c6208, :c6209, :c6210, :c6211, :c6212, :c6213, :c6214, :c6215, :c6216, :c6217, :c6218, :c6219, :c6220, :c6221, :c6222, :c6223, :c6224, :c6225, :c6226, :c6227, :c6228, :c6229, :c6230, :c6231, :c6232, :c6233, :c6234, :c6235, :c6236, :c6237, :c6238, :c6239, :c6240, :c6241, :c6242, :c6243, :c6244, :c6245, :c6246, :c6247, :c6248, :c6249, :c6250, :c6251, :c6252, :c6253, :c6254, :c6255, :c6256, :c6257, :c6258, :c6259, :c6260, :c6261, :c6262, :c6263, :c6264, :c6265, :c6266, :c6267, :c6268, :c6269, :c6270, :c6271, :c6272, :c6273, :c6274, :c6275, :c6276, :c6277, :c6278, :c6279, :c6280, :c6281, :c6282, :c6283, :c6284, :c6285, :c6286, :c6287, :c6288, :c6289, :c6290, :c6291, :c6292, :c6293, :c6294, :c6295, :c6296, :c6297, :c6298, :c6299, :c6300, :c6301, :c6302, :c6303, :c6304, :c6305, :c6306, :c6307, :c6308, :c6309, :c6310, :c6311, :c6312, :c6313, :c6314, :c6315, :c6316, :c6317, :c6318, :c6319, :c6320, :c6321, :c6322, :c6323, :c6324, :c6325, :c6326, :c6327, :c6328, :c6329, :c6330, :c6331, :c6332, :c6333, :c6334, :c6335, :c6336, :c6337, :c6338, :c6339, :c6340, :c6341, :c6342, :c6343, :c6344, :c6345, :c6346, :c6347, :c6348, :c6349, :c6350, :c6351, :c6352, :c6353, :c6354, :c6355, :c6356, :c6357, :c6358, :c6359, :c6360, :c6361, :c6362, :c6363, :c6364, :c6365, :c6366, :c6367, :c6368, :c6369, :c6370, :c6371, :c6372, :c6373, :c6374, :c6375, :c6376, :c6377, :c6378, :c6379, :c6380, :c6381, :c6382, :c6383, :c6384, :c6385, :c6386, :c6387, :c6388, :c6389, :c6390, :c6391, :c6392, :c6393, :c6394, :c6395, :c6396, :c6397, :c6398, :c6399, :c6400, :c6401, :c6402, :c6403, :c6404, :c6405, :c6406, :c6407, :c6408, :c6409, :c6410, :c6411, :c6412, :c6413, :c6414, :c6415, :c6416, :c6417, :c6418, :c6419, :c6420, :c6421, :c6422, :c6423, :c6424, :c6425, :c6426, :c6427, :c6428, :c6429, :c6430, :c6431, :c6432, :c6433, :c6434, :c6435, :c6436, :c6437, :c6438, :c6439, :c6440, :c6441, :c6442, :c6443, :c6444, :c6445, :c6446, :c6447, :c6448, :c6449, :c6450, :c6451, :c6452, :c6453, :c6454, :c6455, :c6456, :c6457, :c6458, :c6459, :c6460, :c6461, :c6462, :c6463, :c6464, :c6465, :c6466, :c6467, :c6468, :c6469, :c6470, :c6471, :c6472, :c6473, :c6474, :c6475, :c6476, :c6477, :c6478, :c6479, :c6480, :c6481, :c6482, :c6483, :c6484, :c6485, :c6486, :c6487, :c6488, :c6489, :c6490, :c6491, :c6492, :c6493, :c6494, :c6495, :c6496, :c6497, :c6498, :c6499, :c6500, :c6501, :c6502, :c6503, :c6504, :c6505, :c6506, :c6507, :c6508, :c6509, :c6510, :c6511, :c6512, :c6513, :c6514, :c6515, :c6516, :c6517, :c6518, :c6519, :c6520, :c6521, :c6522, :c6523, :c6524, :c6525, :c6526, :c6527, :c6528, :c6529, :c6530, :c6531, :c6532, :c6533, :c6534, :c6535, :c6536, :c6537, :c6538, :c6539, :c6540, :c6541, :c6542, :c6543, :c6544, :c6545, :c6546, :c6547, :c6548, :c6549, :c6550, :c6551, :c6552, :c6553, :c6554, :c6555, :c6556, :c6557, :c6558, :c6559, :c6560, :c6561, :c6562, :c6563, :c6564, :c6565, :c6566, :c6567, :c6568, :c6569, :c6570, :c6571, :c6572, :c6573, :c6574, :c6575, :c6576, :c6577, :c6578, :c6579, :c6580, :c6581, :c6582, :c6583, :c6584, :c6585, :c6586, :c6587, :c6588, :c6589, :c6590, :c6591, :c6592, :c6593, :c6594, :c6595, :c6596, :c6597, :c6598, :c6599, :c6600, :c6601, :c6602, :c6603, :c6604, :c6605, :c6606, :c6607, :c6608, :c6609, :c6610, :c6611, :c6612, :c6613, :c6614, :c6615, :c6616, :c6617, :c6618, :c6619, :c6620, :c6621, :c6622, :c6623, :c6624, :c6625, :c6626, :c6627, :c6628, :c6629, :c6630, :c6631, :c6632, :c6633, :c6634, :c6635, :c6636, :c6637, :c6638, :c6639, :c6640, :c6641, :c6642, :c6643, :c6644, :c6645, :c6646, :c6647, :c6648, :c6649, :c6650, :c6651, :c6652, :c6653, :c6654, :c6655, :c6656, :c6657, :c6658, :c6659, :c6660, :c6661, :c6662, :c6663, :c6664, :c6665, :c6666, :c6667, :c6668, :c6669, :c6670, :c6671, :c6672, :c6673, :c6674, :c6675, :c6676, :c6677, :c6678, :c6679, :c6680, :c6681, :c6682, :c6683, :c6684, :c6685, :c6686, :c6687, :c6688, :c6689, :c6690, :c6691, :c6692, :c6693, :c6694, :c6695, :c6696, :c6697, :c6698, :c6699, :c6700, :c6701, :c6702, :c6703, :c6704, :c6705, :c6706, :c6707, :c6708, :c6709, :c6710, :c6711, :c6712, :c6713, :c6714, :c6715, :c6716, :c6717, :c6718, :c6719, :c6720, :c6721, :c6722, :c6723, :c6724, :c6725, :c6726, :c6727, :c6728, :c6729, :c6730, :c6731, :c6732, :c6733, :c6734, :c6735, :c6736, :c6737, :c6738, :c6739, :c6740, :c6741, :c6742, :c6743, :c6744, :c6745, :c6746, :c6747, :c6748, :c6749, :c6750, :c6751, :c6752, :c6753, :c6754, :c6755, :c6756, :c6757, :c6758, :c6759, :c6760, :c6761, :c6762, :c6763, :c6764, :c6765, :c6766, :c6767, :c6768, :c6769, :c6770, :c6771, :c6772, :c6773, :c6774, :c6775, :c6776, :c6777, :c6778, :c6779, :c6780, :c6781, :c6782, :c6783, :c6784, :c6785, :c6786, :c6787, :c6788, :c6789, :c6790, :c6791, :c6792, :c6793, :c6794, :c6795, :c6796, :c6797, :c6798, :c6799, :c6800, :c6801, :c6802, :c6803, :c6804, :c6805, :c6806, :c6807, :c6808, :c6809, :c6810, :c6811, :c6812, :c6813, :c6814, :c6815, :c6816, :c6817, :c6818, :c6819, :c6820, :c6821, :c6822, :c6823, :c6824, :c6825, :c6826, :c6827, :c6828, :c6829, :c6830, :c6831, :c6832, :c6833, :c6834, :c6835, :c6836, :c6837, :c6838, :c6839, :c6840, :c6841, :c6842, :c6843, :c6844, :c6845, :c6846, :c6847, :c6848, :c6849, :c6850, :c6851, :c6852, :c6853, :c6854, :c6855, :c6856, :c6857, :c6858, :c6859, :c6860, :c6861, :c6862, :c6863, :c6864, :c6865, :c6866, :c6867, :c6868, :c6869, :c6870, :c6871, :c6872, :c6873, :c6874, :c6875, :c6876, :c6877, :c6878, :c6879, :c6880, :c6881, :c6882, :c6883, :c6884, :c6885, :c6886, :c6887, :c6888, :c6889, :c6890, :c6891, :c6892, :c6893, :c6894, :c6895, :c6896, :c6897, :c6898, :c6899, :c6900, :c6901, :c6902, :c6903, :c6904, :c6905, :c6906, :c6907, :c6908, :c6909, :c6910, :c6911, :c6912, :c6913, :c6914, :c6915, :c6916, :c6917, :c6918, :c6919, :c6920, :c6921, :c6922, :c6923, :c6924, :c6925, :c6926, :c6927, :c6928, :c6929, :c6930, :c6931, :c6932, :c6933, :c6934, :c6935, :c6936, :c6937, :c6938, :c6939, :c6940, :c6941, :c6942, :c6943, :c6944, :c6945, :c6946, :c6947, :c6948, :c6949, :c6950, :c6951, :c6952, :c6953, :c6954, :c6955, :c6956, :c6957, :c6958, :c6959, :c6960, :c6961, :c6962, :c6963, :c6964, :c6965, :c6966, :c6967, :c6968, :c6969, :c6970, :c6971, :c6972, :c6973, :c6974, :c6975, :c6976, :c6977, :c6978, :c6979, :c6980, :c6981, :c6982, :c6983, :c6984, :c6985, :c6986, :c6987, :c6988, :c6989, :c6990, :c6991, :c6992, :c6993, :c6994, :c6995, :c6996, :c6997, :c6998, :c6999, :c7000, :c7001, :c7002, :c7003, :c7004, :c7005, :c7006, :c7007, :c7008, :c7009, :c7010, :c7011, :c7012, :c7013, :c7014, :c7015, :c7016, :c7017, :c7018, :c7019, :c7020, :c7021, :c7022, :c7023, :c7024, :c7025, :c7026, :c7027, :c7028, :c7029, :c7030, :c7031, :c7032, :c7033, :c7034, :c7035, :c7036, :c7037, :c7038, :c7039, :c7040, :c7041, :c7042, :c7043, :c7044, :c7045, :c7046, :c7047, :c7048, :c7049, :c7050, :c7051, :c7052, :c7053, :c7054, :c7055, :c7056, :c7057, :c7058, :c7059, :c7060, :c7061, :c7062, :c7063, :c7064, :c7065, :c7066, :c7067, :c7068, :c7069, :c7070, :c7071, :c7072, :c7073, :c7074, :c7075, :c7076, :c7077, :c7078, :c7079, :c7080, :c7081, :c7082, :c7083, :c7084, :c7085, :c7086, :c7087, :c7088, :c7089, :c7090, :c7091, :c7092, :c7093, :c7094, :c7095, :c7096, :c7097, :c7098, :c7099, :c7100, :c7101, :c7102, :c7103, :c7104, :c7105, :c7106, :c7107, :c7108, :c7109, :c7110, :c7111, :c7112, :c7113, :c7114, :c7115, :c7116, :c7117, :c7118, :c7119, :c7120, :c7121, :c7122, :c7123, :c7124, :c7125, :c7126, :c7127, :c7128, :c7129, :c7130, :c7131, :c7132, :c7133, :c7134, :c7135, :c7136, :c7137, :c7138, :c7139, :c7140, :c7141, :c7142, :c7143, :c7144, :c7145, :c7146, :c7147, :c7148, :c7149, :c7150, :c7151, :c7152, :c7153, :c7154, :c7155, :c7156, :c7157, :c7158, :c7159, :c7160, :c7161, :c7162, :c7163, :c7164, :c7165, :c7166, :c7167, :c7168, :c7169, :c7170, :c7171, :c7172, :c7173, :c7174, :c7175, :c7176, :c7177, :c7178, :c7179, :c7180, :c7181, :c7182, :c7183, :c7184, :c7185, :c7186, :c7187, :c7188, :c7189, :c7190, :c7191, :c7192, :c7193, :c7194, :c7195, :c7196, :c7197, :c7198, :c7199, :c7200, :c7201, :c7202, :c7203, :c7204, :c7205, :c7206, :c7207, :c7208, :c7209, :c7210, :c7211, :c7212, :c7213, :c7214, :c7215, :c7216, :c7217, :c7218, :c7219, :c7220, :c7221, :c7222, :c7223, :c7224, :c7225, :c7226, :c7227, :c7228, :c7229, :c7230, :c7231, :c7232, :c7233, :c7234, :c7235, :c7236, :c7237, :c7238, :c7239, :c7240, :c7241, :c7242, :c7243, :c7244, :c7245, :c7246, :c7247, :c7248, :c7249, :c7250, :c7251, :c7252, :c7253, :c7254, :c7255, :c7256, :c7257, :c7258, :c7259, :c7260, :c7261, :c7262, :c7263, :c7264, :c7265, :c7266, :c7267, :c7268, :c7269, :c7270, :c7271, :c7272, :c7273, :c7274, :c7275, :c7276, :c7277, :c7278, :c7279, :c7280, :c7281, :c7282, :c7283, :c7284, :c7285, :c7286, :c7287, :c7288, :c7289, :c7290, :c7291, :c7292, :c7293, :c7294, :c7295, :c7296, :c7297, :c7298, :c7299, :c7300, :c7301, :c7302, :c7303, :c7304, :c7305, :c7306, :c7307, :c7308, :c7309, :c7310, :c7311, :c7312, :c7313, :c7314, :c7315, :c7316, :c7317, :c7318, :c7319, :c7320, :c7321, :c7322, :c7323, :c7324, :c7325, :c7326, :c7327, :c7328, :c7329, :c7330, :c7331, :c7332, :c7333, :c7334, :c7335, :c7336, :c7337, :c7338, :c7339, :c7340, :c7341, :c7342, :c7343, :c7344, :c7345, :c7346, :c7347, :c7348, :c7349, :c7350, :c7351, :c7352, :c7353, :c7354, :c7355, :c7356, :c7357, :c7358, :c7359, :c7360, :c7361, :c7362, :c7363, :c7364, :c7365, :c7366, :c7367, :c7368, :c7369, :c7370, :c7371, :c7372, :c7373, :c7374, :c7375, :c7376, :c7377, :c7378, :c7379, :c7380, :c7381, :c7382, :c7383, :c7384, :c7385, :c7386, :c7387, :c7388, :c7389, :c7390, :c7391, :c7392, :c7393, :c7394, :c7395, :c7396, :c7397, :c7398, :c7399, :c7400, :c7401, :c7402, :c7403, :c7404, :c7405, :c7406, :c7407, :c7408, :c7409, :c7410, :c7411, :c7412, :c7413, :c7414, :c7415, :c7416, :c7417, :c7418, :c7419, :c7420, :c7421, :c7422, :c7423, :c7424, :c7425, :c7426, :c7427, :c7428, :c7429, :c7430, :c7431, :c7432, :c7433, :c7434, :c7435, :c7436, :c7437, :c7438, :c7439, :c7440, :c7441, :c7442, :c7443, :c7444, :c7445, :c7446, :c7447, :c7448, :c7449, :c7450, :c7451, :c7452, :c7453, :c7454, :c7455, :c7456, :c7457, :c7458, :c7459, :c7460, :c7461, :c7462, :c7463, :c7464, :c7465, :c7466, :c7467, :c7468, :c7469, :c7470, :c7471, :c7472, :c7473, :c7474, :c7475, :c7476, :c7477, :c7478, :c7479, :c7480, :c7481, :c7482, :c7483, :c7484, :c7485, :c7486, :c7487, :c7488, :c7489, :c7490, :c7491, :c7492, :c7493, :c7494, :c7495, :c7496, :c7497, :c7498, :c7499, :c7500, :c7501, :c7502, :c7503, :c7504, :c7505, :c7506, :c7507, :c7508, :c7509, :c7510, :c7511, :c7512, :c7513, :c7514, :c7515, :c7516, :c7517, :c7518, :c7519, :c7520, :c7521, :c7522, :c7523, :c7524, :c7525, :c7526, :c7527, :c7528, :c7529, :c7530, :c7531, :c7532, :c7533, :c7534, :c7535, :c7536, :c7537, :c7538, :c7539, :c7540, :c7541, :c7542, :c7543, :c7544, :c7545, :c7546, :c7547, :c7548, :c7549, :c7550, :c7551, :c7552, :c7553, :c7554, :c7555, :c7556, :c7557, :c7558, :c7559, :c7560, :c7561, :c7562, :c7563, :c7564, :c7565, :c7566, :c7567, :c7568, :c7569, :c7570, :c7571, :c7572, :c7573, :c7574, :c7575, :c7576, :c7577, :c7578, :c7579, :c7580, :c7581, :c7582, :c7583, :c7584, :c7585, :c7586, :c7587, :c7588, :c7589, :c7590, :c7591, :c7592, :c7593, :c7594, :c7595, :c7596, :c7597, :c7598, :c7599, :c7600, :c7601, :c7602, :c7603, :c7604, :c7605, :c7606, :c7607, :c7608, :c7609, :c7610, :c7611, :c7612, :c7613, :c7614, :c7615, :c7616, :c7617, :c7618, :c7619, :c7620, :c7621, :c7622, :c7623, :c7624, :c7625, :c7626, :c7627, :c7628, :c7629, :c7630, :c7631, :c7632, :c7633, :c7634, :c7635, :c7636, :c7637, :c7638, :c7639, :c7640, :c7641, :c7642, :c7643, :c7644, :c7645, :c7646, :c7647, :c7648, :c7649, :c7650, :c7651, :c7652, :c7653, :c7654, :c7655, :c7656, :c7657, :c7658, :c7659, :c7660, :c7661, :c7662, :c7663, :c7664, :c7665, :c7666, :c7667, :c7668, :c7669, :c7670, :c7671, :c7672, :c7673, :c7674, :c7675, :c7676, :c7677, :c7678, :c7679, :c7680, :c7681, :c7682, :c7683, :c7684, :c7685, :c7686, :c7687, :c7688, :c7689, :c7690, :c7691, :c7692, :c7693, :c7694, :c7695, :c7696, :c7697, :c7698, :c7699, :c7700, :c7701, :c7702, :c7703, :c7704, :c7705, :c7706, :c7707, :c7708, :c7709, :c7710, :c7711, :c7712, :c7713, :c7714, :c7715, :c7716, :c7717, :c7718, :c7719, :c7720, :c7721, :c7722, :c7723, :c7724, :c7725, :c7726, :c7727, :c7728, :c7729, :c7730, :c7731, :c7732, :c7733, :c7734, :c7735, :c7736, :c7737, :c7738, :c7739, :c7740, :c7741, :c7742, :c7743, :c7744, :c7745, :c7746, :c7747, :c7748, :c7749, :c7750, :c7751, :c7752, :c7753, :c7754, :c7755, :c7756, :c7757, :c7758, :c7759, :c7760, :c7761, :c7762, :c7763, :c7764, :c7765, :c7766, :c7767, :c7768, :c7769, :c7770, :c7771, :c7772, :c7773, :c7774, :c7775, :c7776, :c7777, :c7778, :c7779, :c7780, :c7781, :c7782, :c7783, :c7784, :c7785, :c7786, :c7787, :c7788, :c7789, :c7790, :c7791, :c7792, :c7793, :c7794, :c7795, :c7796, :c7797, :c7798, :c7799, :c7800, :c7801, :c7802, :c7803, :c7804, :c7805, :c7806, :c7807, :c7808, :c7809, :c7810, :c7811, :c7812, :c7813, :c7814, :c7815, :c7816, :c7817, :c7818, :c7819, :c7820, :c7821, :c7822, :c7823, :c7824, :c7825, :c7826, :c7827, :c7828, :c7829, :c7830, :c7831, :c7832, :c7833, :c7834, :c7835, :c7836, :c7837, :c7838, :c7839, :c7840, :c7841, :c7842, :c7843, :c7844, :c7845, :c7846, :c7847, :c7848, :c7849, :c7850, :c7851, :c7852, :c7853, :c7854, :c7855, :c7856, :c7857, :c7858, :c7859, :c7860, :c7861, :c7862, :c7863, :c7864, :c7865, :c7866, :c7867, :c7868, :c7869, :c7870, :c7871, :c7872, :c7873, :c7874, :c7875, :c7876, :c7877, :c7878, :c7879, :c7880, :c7881, :c7882, :c7883, :c7884, :c7885, :c7886, :c7887, :c7888, :c7889, :c7890, :c7891, :c7892, :c7893, :c7894, :c7895, :c7896, :c7897, :c7898, :c7899, :c7900, :c7901, :c7902, :c7903, :c7904, :c7905, :c7906, :c7907, :c7908, :c7909, :c7910, :c7911, :c7912, :c7913, :c7914, :c7915, :c7916, :c7917, :c7918, :c7919, :c7920, :c7921, :c7922, :c7923, :c7924, :c7925, :c7926, :c7927, :c7928, :c7929, :c7930, :c7931, :c7932, :c7933, :c7934, :c7935, :c7936, :c7937, :c7938, :c7939, :c7940, :c7941, :c7942, :c7943, :c7944, :c7945, :c7946, :c7947, :c7948, :c7949, :c7950, :c7951, :c7952, :c7953, :c7954, :c7955, :c7956, :c7957, :c7958, :c7959, :c7960, :c7961, :c7962, :c7963, :c7964, :c7965, :c7966, :c7967, :c7968, :c7969, :c7970, :c7971, :c7972, :c7973, :c7974, :c7975, :c7976, :c7977, :c7978, :c7979, :c7980, :c7981, :c7982, :c7983, :c7984, :c7985, :c7986, :c7987, :c7988, :c7989, :c7990, :c7991, :c7992, :c7993, :c7994, :c7995, :c7996, :c7997, :c7998, :c7999, :c8000, :c8001, :c8002, :c8003, :c8004, :c8005, :c8006, :c8007, :c8008, :c8009, :c8010, :c8011, :c8012, :c8013, :c8014, :c8015, :c8016, :c8017, :c8018, :c8019, :c8020, :c8021, :c8022, :c8023, :c8024, :c8025, :c8026, :c8027, :c8028, :c8029, :c8030, :c8031, :c8032, :c8033, :c8034, :c8035, :c8036, :c8037, :c8038, :c8039, :c8040, :c8041, :c8042, :c8043, :c8044, :c8045, :c8046, :c8047, :c8048, :c8049, :c8050, :c8051, :c8052, :c8053, :c8054, :c8055, :c8056, :c8057, :c8058, :c8059, :c8060, :c8061, :c8062, :c8063, :c8064, :c8065, :c8066, :c8067, :c8068, :c8069, :c8070, :c8071, :c8072, :c8073, :c8074, :c8075, :c8076, :c8077, :c8078, :c8079, :c8080, :c8081, :c8082, :c8083, :c8084, :c8085, :c8086, :c8087, :c8088, :c8089, :c8090, :c8091, :c8092, :c8093, :c8094, :c8095, :c8096, :c8097, :c8098, :c8099, :c8100, :c8101, :c8102, :c8103, :c8104, :c8105, :c8106, :c8107, :c8108, :c8109, :c8110, :c8111, :c8112, :c8113, :c8114, :c8115, :c8116, :c8117, :c8118, :c8119, :c8120, :c8121, :c8122, :c8123, :c8124, :c8125, :c8126, :c8127, :c8128, :c8129, :c8130, :c8131, :c8132, :c8133, :c8134, :c8135, :c8136, :c8137, :c8138, :c8139, :c8140, :c8141, :c8142, :c8143, :c8144, :c8145, :c8146, :c8147, :c8148, :c8149, :c8150, :c8151, :c8152, :c8153, :c8154, :c8155, :c8156, :c8157, :c8158, :c8159, :c8160, :c8161, :c8162, :c8163, :c8164, :c8165, :c8166, :c8167, :c8168, :c8169, :c8170, :c8171, :c8172, :c8173, :c8174, :c8175, :c8176, :c8177, :c8178, :c8179, :c8180, :c8181, :c8182, :c8183, :c8184, :c8185, :c8186, :c8187, :c8188, :c8189, :c8190, :c8191, :c8192, :c8193, :c8194, :c8195, :c8196, :c8197, :c8198, :c8199, :c8200, :c8201, :c8202, :c8203, :c8204, :c8205, :c8206, :c8207, :c8208, :c8209, :c8210, :c8211, :c8212, :c8213, :c8214, :c8215, :c8216, :c8217, :c8218, :c8219, :c8220, :c8221, :c8222, :c8223, :c8224, :c8225, :c8226, :c8227, :c8228, :c8229, :c8230, :c8231, :c8232, :c8233, :c8234, :c8235, :c8236, :c8237, :c8238, :c8239, :c8240, :c8241, :c8242, :c8243, :c8244, :c8245, :c8246, :c8247, :c8248, :c8249, :c8250, :c8251, :c8252, :c8253, :c8254, :c8255, :c8256, :c8257, :c8258, :c8259, :c8260, :c8261, :c8262, :c8263, :c8264, :c8265, :c8266, :c8267, :c8268, :c8269, :c8270, :c8271, :c8272, :c8273, :c8274, :c8275, :c8276, :c8277, :c8278, :c8279, :c8280, :c8281, :c8282, :c8283, :c8284, :c8285, :c8286, :c8287, :c8288, :c8289, :c8290, :c8291, :c8292, :c8293, :c8294, :c8295, :c8296, :c8297, :c8298, :c8299, :c8300, :c8301, :c8302, :c8303, :c8304, :c8305, :c8306, :c8307, :c8308, :c8309, :c8310, :c8311, :c8312, :c8313, :c8314, :c8315, :c8316, :c8317, :c8318, :c8319, :c8320, :c8321, :c8322, :c8323, :c8324, :c8325, :c8326, :c8327, :c8328, :c8329, :c8330, :c8331, :c8332, :c8333, :c8334, :c8335, :c8336, :c8337, :c8338, :c8339, :c8340, :c8341, :c8342, :c8343, :c8344, :c8345, :c8346, :c8347, :c8348, :c8349, :c8350, :c8351, :c8352, :c8353, :c8354, :c8355, :c8356, :c8357, :c8358, :c8359, :c8360, :c8361, :c8362, :c8363, :c8364, :c8365, :c8366, :c8367, :c8368, :c8369, :c8370, :c8371, :c8372, :c8373, :c8374, :c8375, :c8376, :c8377, :c8378, :c8379, :c8380, :c8381, :c8382, :c8383, :c8384, :c8385, :c8386, :c8387, :c8388, :c8389, :c8390, :c8391, :c8392, :c8393, :c8394, :c8395, :c8396, :c8397, :c8398, :c8399, :c8400, :c8401, :c8402, :c8403, :c8404, :c8405, :c8406, :c8407, :c8408, :c8409, :c8410, :c8411, :c8412, :c8413, :c8414, :c8415, :c8416, :c8417, :c8418, :c8419, :c8420, :c8421, :c8422, :c8423, :c8424, :c8425, :c8426, :c8427, :c8428, :c8429, :c8430, :c8431, :c8432, :c8433, :c8434, :c8435, :c8436, :c8437, :c8438, :c8439, :c8440, :c8441, :c8442, :c8443, :c8444, :c8445, :c8446, :c8447, :c8448, :c8449, :c8450, :c8451, :c8452, :c8453, :c8454, :c8455, :c8456, :c8457, :c8458, :c8459, :c8460, :c8461, :c8462, :c8463, :c8464, :c8465, :c8466, :c8467, :c8468, :c8469, :c8470, :c8471, :c8472, :c8473, :c8474, :c8475, :c8476, :c8477, :c8478, :c8479, :c8480, :c8481, :c8482, :c8483, :c8484, :c8485, :c8486, :c8487, :c8488, :c8489, :c8490, :c8491, :c8492, :c8493, :c8494, :c8495, :c8496, :c8497, :c8498, :c8499, :c8500, :c8501, :c8502, :c8503, :c8504, :c8505, :c8506, :c8507, :c8508, :c8509, :c8510, :c8511, :c8512, :c8513, :c8514, :c8515, :c8516, :c8517, :c8518, :c8519, :c8520, :c8521, :c8522, :c8523, :c8524, :c8525, :c8526, :c8527, :c8528, :c8529, :c8530, :c8531, :c8532, :c8533, :c8534, :c8535, :c8536, :c8537, :c8538, :c8539, :c8540, :c8541, :c8542, :c8543, :c8544, :c8545, :c8546, :c8547, :c8548, :c8549, :c8550, :c8551, :c8552, :c8553, :c8554, :c8555, :c8556, :c8557, :c8558, :c8559, :c8560, :c8561, :c8562, :c8563, :c8564, :c8565, :c8566, :c8567, :c8568, :c8569, :c8570, :c8571, :c8572, :c8573, :c8574, :c8575, :c8576, :c8577, :c8578, :c8579, :c8580, :c8581, :c8582, :c8583, :c8584, :c8585, :c8586, :c8587, :c8588, :c8589, :c8590, :c8591, :c8592, :c8593, :c8594, :c8595, :c8596, :c8597, :c8598, :c8599, :c8600, :c8601, :c8602, :c8603, :c8604, :c8605, :c8606, :c8607, :c8608, :c8609, :c8610, :c8611, :c8612, :c8613, :c8614, :c8615, :c8616, :c8617, :c8618, :c8619, :c8620, :c8621, :c8622, :c8623, :c8624, :c8625, :c8626, :c8627, :c8628, :c8629, :c8630, :c8631, :c8632, :c8633, :c8634, :c8635, :c8636, :c8637, :c8638, :c8639, :c8640, :c8641, :c8642, :c8643, :c8644, :c8645, :c8646, :c8647, :c8648, :c8649, :c8650, :c8651, :c8652, :c8653, :c8654, :c8655, :c8656, :c8657, :c8658, :c8659, :c8660, :c8661, :c8662, :c8663, :c8664, :c8665, :c8666, :c8667, :c8668, :c8669, :c8670, :c8671, :c8672, :c8673, :c8674, :c8675, :c8676, :c8677, :c8678, :c8679, :c8680, :c8681, :c8682, :c8683, :c8684, :c8685, :c8686, :c8687, :c8688, :c8689, :c8690, :c8691, :c8692, :c8693, :c8694, :c8695, :c8696, :c8697, :c8698, :c8699, :c8700, :c8701, :c8702, :c8703, :c8704, :c8705, :c8706, :c8707, :c8708, :c8709, :c8710, :c8711, :c8712, :c8713, :c8714, :c8715, :c8716, :c8717, :c8718, :c8719, :c8720, :c8721, :c8722, :c8723, :c8724, :c8725, :c8726, :c8727, :c8728, :c8729, :c8730, :c8731, :c8732, :c8733, :c8734, :c8735, :c8736, :c8737, :c8738, :c8739, :c8740, :c8741, :c8742, :c8743, :c8744, :c8745, :c8746, :c8747, :c8748, :c8749, :c8750, :c8751, :c8752, :c8753, :c8754, :c8755, :c8756, :c8757, :c8758, :c8759, :c8760, :c8761, :c8762, :c8763, :c8764, :c8765, :c8766, :c8767, :c8768, :c8769, :c8770, :c8771, :c8772, :c8773, :c8774, :c8775, :c8776, :c8777, :c8778, :c8779, :c8780, :c8781, :c8782, :c8783, :c8784, :c8785, :c8786, :c8787, :c8788, :c8789, :c8790, :c8791, :c8792, :c8793, :c8794, :c8795, :c8796, :c8797, :c8798, :c8799, :c8800, :c8801, :c8802, :c8803, :c8804, :c8805, :c8806, :c8807, :c8808, :c8809, :c8810, :c8811, :c8812, :c8813, :c8814, :c8815, :c8816, :c8817, :c8818, :c8819, :c8820, :c8821, :c8822, :c8823, :c8824, :c8825, :c8826, :c8827, :c8828, :c8829, :c8830, :c8831, :c8832, :c8833, :c8834, :c8835, :c8836, :c8837, :c8838, :c8839, :c8840, :c8841, :c8842, :c8843, :c8844, :c8845, :c8846, :c8847, :c8848, :c8849, :c8850, :c8851, :c8852, :c8853, :c8854, :c8855, :c8856, :c8857, :c8858, :c8859, :c8860, :c8861, :c8862, :c8863, :c8864, :c8865, :c8866, :c8867, :c8868, :c8869, :c8870, :c8871, :c8872, :c8873, :c8874, :c8875, :c8876, :c8877, :c8878, :c8879, :c8880, :c8881, :c8882, :c8883, :c8884, :c8885, :c8886, :c8887, :c8888, :c8889, :c8890, :c8891, :c8892, :c8893, :c8894, :c8895, :c8896, :c8897, :c8898, :c8899, :c8900, :c8901, :c8902, :c8903, :c8904, :c8905, :c8906, :c8907, :c8908, :c8909, :c8910, :c8911, :c8912, :c8913, :c8914, :c8915, :c8916, :c8917, :c8918, :c8919, :c8920, :c8921, :c8922, :c8923, :c8924, :c8925, :c8926, :c8927, :c8928, :c8929, :c8930, :c8931, :c8932, :c8933, :c8934, :c8935, :c8936, :c8937, :c8938, :c8939, :c8940, :c8941, :c8942, :c8943, :c8944, :c8945, :c8946, :c8947, :c8948, :c8949, :c8950, :c8951, :c8952, :c8953, :c8954, :c8955, :c8956, :c8957, :c8958, :c8959, :c8960, :c8961, :c8962, :c8963, :c8964, :c8965, :c8966, :c8967, :c8968, :c8969, :c8970, :c8971, :c8972, :c8973, :c8974, :c8975, :c8976, :c8977, :c8978, :c8979, :c8980, :c8981, :c8982, :c8983, :c8984, :c8985, :c8986, :c8987, :c8988, :c8989, :c8990, :c8991, :c8992, :c8993, :c8994, :c8995, :c8996, :c8997, :c8998, :c8999, :c9000, :c9001, :c9002, :c9003, :c9004, :c9005, :c9006, :c9007, :c9008, :c9009, :c9010, :c9011, :c9012, :c9013, :c9014, :c9015, :c9016, :c9017, :c9018, :c9019, :c9020, :c9021, :c9022, :c9023, :c9024, :c9025, :c9026, :c9027, :c9028, :c9029, :c9030, :c9031, :c9032, :c9033, :c9034, :c9035, :c9036, :c9037, :c9038, :c9039, :c9040, :c9041, :c9042, :c9043, :c9044, :c9045, :c9046, :c9047, :c9048, :c9049, :c9050, :c9051, :c9052, :c9053, :c9054, :c9055, :c9056, :c9057, :c9058, :c9059, :c9060, :c9061, :c9062, :c9063, :c9064, :c9065, :c9066, :c9067, :c9068, :c9069, :c9070, :c9071, :c9072, :c9073, :c9074, :c9075, :c9076, :c9077, :c9078, :c9079, :c9080, :c9081, :c9082, :c9083, :c9084, :c9085, :c9086, :c9087, :c9088, :c9089, :c9090, :c9091, :c9092, :c9093, :c9094, :c9095, :c9096, :c9097, :c9098, :c9099, :c9100, :c9101, :c9102, :c9103, :c9104, :c9105, :c9106, :c9107, :c9108, :c9109, :c9110, :c9111, :c9112, :c9113, :c9114, :c9115, :c9116, :c9117, :c9118, :c9119, :c9120, :c9121, :c9122, :c9123, :c9124, :c9125, :c9126, :c9127, :c9128, :c9129, :c9130, :c9131, :c9132, :c9133, :c9134, :c9135, :c9136, :c9137, :c9138, :c9139, :c9140, :c9141, :c9142, :c9143, :c9144, :c9145, :c9146, :c9147, :c9148, :c9149, :c9150, :c9151, :c9152, :c9153, :c9154, :c9155, :c9156, :c9157, :c9158, :c9159, :c9160, :c9161, :c9162, :c9163, :c9164, :c9165, :c9166, :c9167, :c9168, :c9169, :c9170, :c9171, :c9172, :c9173, :c9174, :c9175, :c9176, :c9177, :c9178, :c9179, :c9180, :c9181, :c9182, :c9183, :c9184, :c9185, :c9186, :c9187, :c9188, :c9189, :c9190, :c9191, :c9192, :c9193, :c9194, :c9195, :c9196, :c9197, :c9198, :c9199, :c9200, :c9201, :c9202, :c9203, :c9204, :c9205, :c9206, :c9207, :c9208, :c9209, :c9210, :c9211, :c9212, :c9213, :c9214, :c9215, :c9216, :c9217, :c9218, :c9219, :c9220, :c9221, :c9222, :c9223, :c9224, :c9225, :c9226, :c9227, :c9228, :c9229, :c9230, :c9231, :c9232, :c9233, :c9234, :c9235, :c9236, :c9237, :c9238, :c9239, :c9240, :c9241, :c9242, :c9243, :c9244, :c9245, :c9246, :c9247, :c9248, :c9249, :c9250, :c9251, :c9252, :c9253, :c9254, :c9255, :c9256, :c9257, :c9258, :c9259, :c9260, :c9261, :c9262, :c9263, :c9264, :c9265, :c9266, :c9267, :c9268, :c9269, :c9270, :c9271, :c9272, :c9273, :c9274, :c9275, :c9276, :c9277, :c9278, :c9279, :c9280, :c9281, :c9282, :c9283, :c9284, :c9285, :c9286, :c9287, :c9288, :c9289, :c9290, :c9291, :c9292, :c9293, :c9294, :c9295, :c9296, :c9297, :c9298, :c9299, :c9300, :c9301, :c9302, :c9303, :c9304, :c9305, :c9306, :c9307, :c9308, :c9309, :c9310, :c9311, :c9312, :c9313, :c9314, :c9315, :c9316, :c9317, :c9318, :c9319, :c9320, :c9321, :c9322, :c9323, :c9324, :c9325, :c9326, :c9327, :c9328, :c9329, :c9330, :c9331, :c9332, :c9333, :c9334, :c9335, :c9336, :c9337, :c9338, :c9339, :c9340, :c9341, :c9342, :c9343, :c9344, :c9345, :c9346, :c9347, :c9348, :c9349, :c9350, :c9351, :c9352, :c9353, :c9354, :c9355, :c9356, :c9357, :c9358, :c9359, :c9360, :c9361, :c9362, :c9363, :c9364, :c9365, :c9366, :c9367, :c9368, :c9369, :c9370, :c9371, :c9372, :c9373, :c9374, :c9375, :c9376, :c9377, :c9378, :c9379, :c9380, :c9381, :c9382, :c9383, :c9384, :c9385, :c9386, :c9387, :c9388, :c9389, :c9390, :c9391, :c9392, :c9393, :c9394, :c9395, :c9396, :c9397, :c9398, :c9399, :c9400, :c9401, :c9402, :c9403, :c9404, :c9405, :c9406, :c9407, :c9408, :c9409, :c9410, :c9411, :c9412, :c9413, :c9414, :c9415, :c9416, :c9417, :c9418, :c9419, :c9420, :c9421, :c9422, :c9423, :c9424, :c9425, :c9426, :c9427, :c9428, :c9429, :c9430, :c9431, :c9432, :c9433, :c9434, :c9435, :c9436, :c9437, :c9438, :c9439, :c9440, :c9441, :c9442, :c9443, :c9444, :c9445, :c9446, :c9447, :c9448, :c9449, :c9450, :c9451, :c9452, :c9453, :c9454, :c9455, :c9456, :c9457, :c9458, :c9459, :c9460, :c9461, :c9462, :c9463, :c9464, :c9465, :c9466, :c9467, :c9468, :c9469, :c9470, :c9471, :c9472, :c9473, :c9474, :c9475, :c9476, :c9477, :c9478, :c9479, :c9480, :c9481, :c9482, :c9483, :c9484, :c9485, :c9486, :c9487, :c9488, :c9489, :c9490, :c9491, :c9492, :c9493, :c9494, :c9495, :c9496, :c9497, :c9498, :c9499, :c9500, :c9501, :c9502, :c9503, :c9504, :c9505, :c9506, :c9507, :c9508, :c9509, :c9510, :c9511, :c9512, :c9513, :c9514, :c9515, :c9516, :c9517, :c9518, :c9519, :c9520, :c9521, :c9522, :c9523, :c9524, :c9525, :c9526, :c9527, :c9528, :c9529, :c9530, :c9531, :c9532, :c9533, :c9534, :c9535, :c9536, :c9537, :c9538, :c9539, :c9540, :c9541, :c9542, :c9543, :c9544, :c9545, :c9546, :c9547, :c9548, :c9549, :c9550, :c9551, :c9552, :c9553, :c9554, :c9555, :c9556, :c9557, :c9558, :c9559, :c9560, :c9561, :c9562, :c9563, :c9564, :c9565, :c9566, :c9567, :c9568, :c9569, :c9570, :c9571, :c9572, :c9573, :c9574, :c9575, :c9576, :c9577, :c9578, :c9579, :c9580, :c9581, :c9582, :c9583, :c9584, :c9585, :c9586, :c9587, :c9588, :c9589, :c9590, :c9591, :c9592, :c9593, :c9594, :c9595, :c9596, :c9597, :c9598, :c9599, :c9600, :c9601, :c9602, :c9603, :c9604, :c9605, :c9606, :c9607, :c9608, :c9609, :c9610, :c9611, :c9612, :c9613, :c9614, :c9615, :c9616, :c9617, :c9618, :c9619, :c9620, :c9621, :c9622, :c9623, :c9624, :c9625, :c9626, :c9627, :c9628, :c9629, :c9630, :c9631, :c9632, :c9633, :c9634, :c9635, :c9636, :c9637, :c9638, :c9639, :c9640, :c9641, :c9642, :c9643, :c9644, :c9645, :c9646, :c9647, :c9648, :c9649, :c9650, :c9651, :c9652, :c9653, :c9654, :c9655, :c9656, :c9657, :c9658, :c9659, :c9660, :c9661, :c9662, :c9663, :c9664, :c9665, :c9666, :c9667, :c9668, :c9669, :c9670, :c9671, :c9672, :c9673, :c9674, :c9675, :c9676, :c9677, :c9678, :c9679, :c9680, :c9681, :c9682, :c9683, :c9684, :c9685, :c9686, :c9687, :c9688, :c9689, :c9690, :c9691, :c9692, :c9693, :c9694, :c9695, :c9696, :c9697, :c9698, :c9699, :c9700, :c9701, :c9702, :c9703, :c9704, :c9705, :c9706, :c9707, :c9708, :c9709, :c9710, :c9711, :c9712, :c9713, :c9714, :c9715, :c9716, :c9717, :c9718, :c9719, :c9720, :c9721, :c9722, :c9723, :c9724, :c9725, :c9726, :c9727, :c9728, :c9729, :c9730, :c9731, :c9732, :c9733, :c9734, :c9735, :c9736, :c9737, :c9738, :c9739, :c9740, :c9741, :c9742, :c9743, :c9744, :c9745, :c9746, :c9747, :c9748, :c9749, :c9750, :c9751, :c9752, :c9753, :c9754, :c9755, :c9756, :c9757, :c9758, :c9759, :c9760, :c9761, :c9762, :c9763, :c9764, :c9765, :c9766, :c9767, :c9768, :c9769, :c9770, :c9771, :c9772, :c9773, :c9774, :c9775, :c9776, :c9777, :c9778, :c9779, :c9780, :c9781, :c9782, :c9783, :c9784, :c9785, :c9786, :c9787, :c9788, :c9789, :c9790, :c9791, :c9792, :c9793, :c9794, :c9795, :c9796, :c9797, :c9798, :c9799, :c9800, :c9801, :c9802, :c9803, :c9804, :c9805, :c9806, :c9807, :c9808, :c9809, :c9810, :c9811, :c9812, :c9813, :c9814, :c9815, :c9816, :c9817, :c9818, :c9819, :c9820, :c9821, :c9822, :c9823, :c9824, :c9825, :c9826, :c9827, :c9828, :c9829, :c9830, :c9831, :c9832, :c9833, :c9834, :c9835, :c9836, :c9837, :c9838, :c9839, :c9840, :c9841, :c9842, :c9843, :c9844, :c9845, :c9846, :c9847, :c9848, :c9849, :c9850, :c9851, :c9852, :c9853, :c9854, :c9855, :c9856, :c9857, :c9858, :c9859, :c9860, :c9861, :c9862, :c9863, :c9864, :c9865, :c9866, :c9867, :c9868, :c9869, :c9870, :c9871, :c9872, :c9873, :c9874, :c9875, :c9876, :c9877, :c9878, :c9879, :c9880, :c9881, :c9882, :c9883, :c9884, :c9885, :c9886, :c9887, :c9888, :c9889, :c9890, :c9891, :c9892, :c9893, :c9894, :c9895, :c9896, :c9897, :c9898, :c9899, :c9900, :c9901, :c9902, :c9903, :c9904, :c9905, :c9906, :c9907, :c9908, :c9909, :c9910, :c9911, :c9912, :c9913, :c9914, :c9915, :c9916, :c9917, :c9918, :c9919, :c9920, :c9921, :c9922, :c9923, :c9924, :c9925, :c9926, :c9927, :c9928, :c9929, :c9930, :c9931, :c9932, :c9933, :c9934, :c9935, :c9936, :c9937, :c9938, :c9939, :c9940, :c9941, :c9942, :c9943, :c9944, :c9945, :c9946, :c9947, :c9948, :c9949, :c9950, :c9951, :c9952, :c9953, :c9954, :c9955, :c9956, :c9957, :c9958, :c9959, :c9960, :c9961, :c9962, :c9963, :c9964, :c9965, :c9966, :c9967, :c9968, :c9969, :c9970, :c9971, :c9972, :c9973, :c9974, :c9975, :c9976, :c9977, :c9978, :c9979, :c9980, :c9981, :c9982, :c9983, :c9984, :c9985, :c9986, :c9987, :c9988, :c9989, :c9990, :c9991, :c9992, :c9993, :c9994, :c9995, :c9996, :c9997, :c9998, :c9999, :c10000 . RDF-Trine-1.007/xt/data/turtle/test-16.out000644 000765 000024 00003146356 11552456156 020155 0ustar00gregstaff000000 000000 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . RDF-Trine-1.007/xt/data/turtle/test-16.ttl000644 000765 000024 00000417371 11552456156 020144 0ustar00gregstaff000000 000000 # 10000 items (10000 triples) more than the default Bison stack size @prefix : . :a :b :c1; :b :c2; :b :c3; :b :c4; :b :c5; :b :c6; :b :c7; :b :c8; :b :c9; :b :c10; :b :c11; :b :c12; :b :c13; :b :c14; :b :c15; :b :c16; :b :c17; :b :c18; :b :c19; :b :c20; :b :c21; :b :c22; :b :c23; :b :c24; :b :c25; :b :c26; :b :c27; :b :c28; :b :c29; :b :c30; :b :c31; :b :c32; :b :c33; :b :c34; :b :c35; :b :c36; :b :c37; :b :c38; :b :c39; :b :c40; :b :c41; :b :c42; :b :c43; :b :c44; :b :c45; :b :c46; :b :c47; :b :c48; :b :c49; :b :c50; :b :c51; :b :c52; :b :c53; :b :c54; :b :c55; :b :c56; :b :c57; :b :c58; :b :c59; :b :c60; :b :c61; :b :c62; :b :c63; :b :c64; :b :c65; :b :c66; :b :c67; :b :c68; :b :c69; :b :c70; :b :c71; :b :c72; :b :c73; :b :c74; :b :c75; :b :c76; :b :c77; :b :c78; :b :c79; :b :c80; :b :c81; :b :c82; :b :c83; :b :c84; :b :c85; :b :c86; :b :c87; :b :c88; :b :c89; :b :c90; :b :c91; :b :c92; :b :c93; :b :c94; :b :c95; :b :c96; :b :c97; :b :c98; :b :c99; :b :c100; :b :c101; :b :c102; :b :c103; :b :c104; :b :c105; :b :c106; :b :c107; :b :c108; :b :c109; :b :c110; :b :c111; :b :c112; :b :c113; :b :c114; :b :c115; :b :c116; :b :c117; :b :c118; :b :c119; :b :c120; :b :c121; :b :c122; :b :c123; :b :c124; :b :c125; :b :c126; :b :c127; :b :c128; :b :c129; :b :c130; :b :c131; :b :c132; :b :c133; :b :c134; :b :c135; :b :c136; :b :c137; :b :c138; :b :c139; :b :c140; :b :c141; :b :c142; :b :c143; :b :c144; :b :c145; :b :c146; :b :c147; :b :c148; :b :c149; :b :c150; :b :c151; :b :c152; :b :c153; :b :c154; :b :c155; :b :c156; :b :c157; :b :c158; :b :c159; :b :c160; :b :c161; :b :c162; :b :c163; :b :c164; :b :c165; :b :c166; :b :c167; :b :c168; :b :c169; :b :c170; :b :c171; :b :c172; :b :c173; :b :c174; :b :c175; :b :c176; :b :c177; :b :c178; :b :c179; :b :c180; :b :c181; :b :c182; :b :c183; :b :c184; :b :c185; :b :c186; :b :c187; :b :c188; :b :c189; :b :c190; :b :c191; :b :c192; :b :c193; :b :c194; :b :c195; :b :c196; :b :c197; :b :c198; :b :c199; :b :c200; :b :c201; :b :c202; :b :c203; :b :c204; :b :c205; :b :c206; :b :c207; :b :c208; :b :c209; :b :c210; :b :c211; :b :c212; :b :c213; :b :c214; :b :c215; :b :c216; :b :c217; :b :c218; :b :c219; :b :c220; :b :c221; :b :c222; :b :c223; :b :c224; :b :c225; :b :c226; :b :c227; :b :c228; :b :c229; :b :c230; :b :c231; :b :c232; :b :c233; :b :c234; :b :c235; :b :c236; :b :c237; :b :c238; :b :c239; :b :c240; :b :c241; :b :c242; :b :c243; :b :c244; :b :c245; :b :c246; :b :c247; :b :c248; :b :c249; :b :c250; :b :c251; :b :c252; :b :c253; :b :c254; :b :c255; :b :c256; :b :c257; :b :c258; :b :c259; :b :c260; :b :c261; :b :c262; :b :c263; :b :c264; :b :c265; :b :c266; :b :c267; :b :c268; :b :c269; :b :c270; :b :c271; :b :c272; :b :c273; :b :c274; :b :c275; :b :c276; :b :c277; :b :c278; :b :c279; :b :c280; :b :c281; :b :c282; :b :c283; :b :c284; :b :c285; :b :c286; :b :c287; :b :c288; :b :c289; :b :c290; :b :c291; :b :c292; :b :c293; :b :c294; :b :c295; :b :c296; :b :c297; :b :c298; :b :c299; :b :c300; :b :c301; :b :c302; :b :c303; :b :c304; :b :c305; :b :c306; :b :c307; :b :c308; :b :c309; :b :c310; :b :c311; :b :c312; :b :c313; :b :c314; :b :c315; :b :c316; :b :c317; :b :c318; :b :c319; :b :c320; :b :c321; :b :c322; :b :c323; :b :c324; :b :c325; :b :c326; :b :c327; :b :c328; :b :c329; :b :c330; :b :c331; :b :c332; :b :c333; :b :c334; :b :c335; :b :c336; :b :c337; :b :c338; :b :c339; :b :c340; :b :c341; :b :c342; :b :c343; :b :c344; :b :c345; :b :c346; :b :c347; :b :c348; :b :c349; :b :c350; :b :c351; :b :c352; :b :c353; :b :c354; :b :c355; :b :c356; :b :c357; :b :c358; :b :c359; :b :c360; :b :c361; :b :c362; :b :c363; :b :c364; :b :c365; :b :c366; :b :c367; :b :c368; :b :c369; :b :c370; :b :c371; :b :c372; :b :c373; :b :c374; :b :c375; :b :c376; :b :c377; :b :c378; :b :c379; :b :c380; :b :c381; :b :c382; :b :c383; :b :c384; :b :c385; :b :c386; :b :c387; :b :c388; :b :c389; :b :c390; :b :c391; :b :c392; :b :c393; :b :c394; :b :c395; :b :c396; :b :c397; :b :c398; :b :c399; :b :c400; :b :c401; :b :c402; :b :c403; :b :c404; :b :c405; :b :c406; :b :c407; :b :c408; :b :c409; :b :c410; :b :c411; :b :c412; :b :c413; :b :c414; :b :c415; :b :c416; :b :c417; :b :c418; :b :c419; :b :c420; :b :c421; :b :c422; :b :c423; :b :c424; :b :c425; :b :c426; :b :c427; :b :c428; :b :c429; :b :c430; :b :c431; :b :c432; :b :c433; :b :c434; :b :c435; :b :c436; :b :c437; :b :c438; :b :c439; :b :c440; :b :c441; :b :c442; :b :c443; :b :c444; :b :c445; :b :c446; :b :c447; :b :c448; :b :c449; :b :c450; :b :c451; :b :c452; :b :c453; :b :c454; :b :c455; :b :c456; :b :c457; :b :c458; :b :c459; :b :c460; :b :c461; :b :c462; :b :c463; :b :c464; :b :c465; :b :c466; :b :c467; :b :c468; :b :c469; :b :c470; :b :c471; :b :c472; :b :c473; :b :c474; :b :c475; :b :c476; :b :c477; :b :c478; :b :c479; :b :c480; :b :c481; :b :c482; :b :c483; :b :c484; :b :c485; :b :c486; :b :c487; :b :c488; :b :c489; :b :c490; :b :c491; :b :c492; :b :c493; :b :c494; :b :c495; :b :c496; :b :c497; :b :c498; :b :c499; :b :c500; :b :c501; :b :c502; :b :c503; :b :c504; :b :c505; :b :c506; :b :c507; :b :c508; :b :c509; :b :c510; :b :c511; :b :c512; :b :c513; :b :c514; :b :c515; :b :c516; :b :c517; :b :c518; :b :c519; :b :c520; :b :c521; :b :c522; :b :c523; :b :c524; :b :c525; :b :c526; :b :c527; :b :c528; :b :c529; :b :c530; :b :c531; :b :c532; :b :c533; :b :c534; :b :c535; :b :c536; :b :c537; :b :c538; :b :c539; :b :c540; :b :c541; :b :c542; :b :c543; :b :c544; :b :c545; :b :c546; :b :c547; :b :c548; :b :c549; :b :c550; :b :c551; :b :c552; :b :c553; :b :c554; :b :c555; :b :c556; :b :c557; :b :c558; :b :c559; :b :c560; :b :c561; :b :c562; :b :c563; :b :c564; :b :c565; :b :c566; :b :c567; :b :c568; :b :c569; :b :c570; :b :c571; :b :c572; :b :c573; :b :c574; :b :c575; :b :c576; :b :c577; :b :c578; :b :c579; :b :c580; :b :c581; :b :c582; :b :c583; :b :c584; :b :c585; :b :c586; :b :c587; :b :c588; :b :c589; :b :c590; :b :c591; :b :c592; :b :c593; :b :c594; :b :c595; :b :c596; :b :c597; :b :c598; :b :c599; :b :c600; :b :c601; :b :c602; :b :c603; :b :c604; :b :c605; :b :c606; :b :c607; :b :c608; :b :c609; :b :c610; :b :c611; :b :c612; :b :c613; :b :c614; :b :c615; :b :c616; :b :c617; :b :c618; :b :c619; :b :c620; :b :c621; :b :c622; :b :c623; :b :c624; :b :c625; :b :c626; :b :c627; :b :c628; :b :c629; :b :c630; :b :c631; :b :c632; :b :c633; :b :c634; :b :c635; :b :c636; :b :c637; :b :c638; :b :c639; :b :c640; :b :c641; :b :c642; :b :c643; :b :c644; :b :c645; :b :c646; :b :c647; :b :c648; :b :c649; :b :c650; :b :c651; :b :c652; :b :c653; :b :c654; :b :c655; :b :c656; :b :c657; :b :c658; :b :c659; :b :c660; :b :c661; :b :c662; :b :c663; :b :c664; :b :c665; :b :c666; :b :c667; :b :c668; :b :c669; :b :c670; :b :c671; :b :c672; :b :c673; :b :c674; :b :c675; :b :c676; :b :c677; :b :c678; :b :c679; :b :c680; :b :c681; :b :c682; :b :c683; :b :c684; :b :c685; :b :c686; :b :c687; :b :c688; :b :c689; :b :c690; :b :c691; :b :c692; :b :c693; :b :c694; :b :c695; :b :c696; :b :c697; :b :c698; :b :c699; :b :c700; :b :c701; :b :c702; :b :c703; :b :c704; :b :c705; :b :c706; :b :c707; :b :c708; :b :c709; :b :c710; :b :c711; :b :c712; :b :c713; :b :c714; :b :c715; :b :c716; :b :c717; :b :c718; :b :c719; :b :c720; :b :c721; :b :c722; :b :c723; :b :c724; :b :c725; :b :c726; :b :c727; :b :c728; :b :c729; :b :c730; :b :c731; :b :c732; :b :c733; :b :c734; :b :c735; :b :c736; :b :c737; :b :c738; :b :c739; :b :c740; :b :c741; :b :c742; :b :c743; :b :c744; :b :c745; :b :c746; :b :c747; :b :c748; :b :c749; :b :c750; :b :c751; :b :c752; :b :c753; :b :c754; :b :c755; :b :c756; :b :c757; :b :c758; :b :c759; :b :c760; :b :c761; :b :c762; :b :c763; :b :c764; :b :c765; :b :c766; :b :c767; :b :c768; :b :c769; :b :c770; :b :c771; :b :c772; :b :c773; :b :c774; :b :c775; :b :c776; :b :c777; :b :c778; :b :c779; :b :c780; :b :c781; :b :c782; :b :c783; :b :c784; :b :c785; :b :c786; :b :c787; :b :c788; :b :c789; :b :c790; :b :c791; :b :c792; :b :c793; :b :c794; :b :c795; :b :c796; :b :c797; :b :c798; :b :c799; :b :c800; :b :c801; :b :c802; :b :c803; :b :c804; :b :c805; :b :c806; :b :c807; :b :c808; :b :c809; :b :c810; :b :c811; :b :c812; :b :c813; :b :c814; :b :c815; :b :c816; :b :c817; :b :c818; :b :c819; :b :c820; :b :c821; :b :c822; :b :c823; :b :c824; :b :c825; :b :c826; :b :c827; :b :c828; :b :c829; :b :c830; :b :c831; :b :c832; :b :c833; :b :c834; :b :c835; :b :c836; :b :c837; :b :c838; :b :c839; :b :c840; :b :c841; :b :c842; :b :c843; :b :c844; :b :c845; :b :c846; :b :c847; :b :c848; :b :c849; :b :c850; :b :c851; :b :c852; :b :c853; :b :c854; :b :c855; :b :c856; :b :c857; :b :c858; :b :c859; :b :c860; :b :c861; :b :c862; :b :c863; :b :c864; :b :c865; :b :c866; :b :c867; :b :c868; :b :c869; :b :c870; :b :c871; :b :c872; :b :c873; :b :c874; :b :c875; :b :c876; :b :c877; :b :c878; :b :c879; :b :c880; :b :c881; :b :c882; :b :c883; :b :c884; :b :c885; :b :c886; :b :c887; :b :c888; :b :c889; :b :c890; :b :c891; :b :c892; :b :c893; :b :c894; :b :c895; :b :c896; :b :c897; :b :c898; :b :c899; :b :c900; :b :c901; :b :c902; :b :c903; :b :c904; :b :c905; :b :c906; :b :c907; :b :c908; :b :c909; :b :c910; :b :c911; :b :c912; :b :c913; :b :c914; :b :c915; :b :c916; :b :c917; :b :c918; :b :c919; :b :c920; :b :c921; :b :c922; :b :c923; :b :c924; :b :c925; :b :c926; :b :c927; :b :c928; :b :c929; :b :c930; :b :c931; :b :c932; :b :c933; :b :c934; :b :c935; :b :c936; :b :c937; :b :c938; :b :c939; :b :c940; :b :c941; :b :c942; :b :c943; :b :c944; :b :c945; :b :c946; :b :c947; :b :c948; :b :c949; :b :c950; :b :c951; :b :c952; :b :c953; :b :c954; :b :c955; :b :c956; :b :c957; :b :c958; :b :c959; :b :c960; :b :c961; :b :c962; :b :c963; :b :c964; :b :c965; :b :c966; :b :c967; :b :c968; :b :c969; :b :c970; :b :c971; :b :c972; :b :c973; :b :c974; :b :c975; :b :c976; :b :c977; :b :c978; :b :c979; :b :c980; :b :c981; :b :c982; :b :c983; :b :c984; :b :c985; :b :c986; :b :c987; :b :c988; :b :c989; :b :c990; :b :c991; :b :c992; :b :c993; :b :c994; :b :c995; :b :c996; :b :c997; :b :c998; :b :c999; :b :c1000; :b :c1001; :b :c1002; :b :c1003; :b :c1004; :b :c1005; :b :c1006; :b :c1007; :b :c1008; :b :c1009; :b :c1010; :b :c1011; :b :c1012; :b :c1013; :b :c1014; :b :c1015; :b :c1016; :b :c1017; :b :c1018; :b :c1019; :b :c1020; :b :c1021; :b :c1022; :b :c1023; :b :c1024; :b :c1025; :b :c1026; :b :c1027; :b :c1028; :b :c1029; :b :c1030; :b :c1031; :b :c1032; :b :c1033; :b :c1034; :b :c1035; :b :c1036; :b :c1037; :b :c1038; :b :c1039; :b :c1040; :b :c1041; :b :c1042; :b :c1043; :b :c1044; :b :c1045; :b :c1046; :b :c1047; :b :c1048; :b :c1049; :b :c1050; :b :c1051; :b :c1052; :b :c1053; :b :c1054; :b :c1055; :b :c1056; :b :c1057; :b :c1058; :b :c1059; :b :c1060; :b :c1061; :b :c1062; :b :c1063; :b :c1064; :b :c1065; :b :c1066; :b :c1067; :b :c1068; :b :c1069; :b :c1070; :b :c1071; :b :c1072; :b :c1073; :b :c1074; :b :c1075; :b :c1076; :b :c1077; :b :c1078; :b :c1079; :b :c1080; :b :c1081; :b :c1082; :b :c1083; :b :c1084; :b :c1085; :b :c1086; :b :c1087; :b :c1088; :b :c1089; :b :c1090; :b :c1091; :b :c1092; :b :c1093; :b :c1094; :b :c1095; :b :c1096; :b :c1097; :b :c1098; :b :c1099; :b :c1100; :b :c1101; :b :c1102; :b :c1103; :b :c1104; :b :c1105; :b :c1106; :b :c1107; :b :c1108; :b :c1109; :b :c1110; :b :c1111; :b :c1112; :b :c1113; :b :c1114; :b :c1115; :b :c1116; :b :c1117; :b :c1118; :b :c1119; :b :c1120; :b :c1121; :b :c1122; :b :c1123; :b :c1124; :b :c1125; :b :c1126; :b :c1127; :b :c1128; :b :c1129; :b :c1130; :b :c1131; :b :c1132; :b :c1133; :b :c1134; :b :c1135; :b :c1136; :b :c1137; :b :c1138; :b :c1139; :b :c1140; :b :c1141; :b :c1142; :b :c1143; :b :c1144; :b :c1145; :b :c1146; :b :c1147; :b :c1148; :b :c1149; :b :c1150; :b :c1151; :b :c1152; :b :c1153; :b :c1154; :b :c1155; :b :c1156; :b :c1157; :b :c1158; :b :c1159; :b :c1160; :b :c1161; :b :c1162; :b :c1163; :b :c1164; :b :c1165; :b :c1166; :b :c1167; :b :c1168; :b :c1169; :b :c1170; :b :c1171; :b :c1172; :b :c1173; :b :c1174; :b :c1175; :b :c1176; :b :c1177; :b :c1178; :b :c1179; :b :c1180; :b :c1181; :b :c1182; :b :c1183; :b :c1184; :b :c1185; :b :c1186; :b :c1187; :b :c1188; :b :c1189; :b :c1190; :b :c1191; :b :c1192; :b :c1193; :b :c1194; :b :c1195; :b :c1196; :b :c1197; :b :c1198; :b :c1199; :b :c1200; :b :c1201; :b :c1202; :b :c1203; :b :c1204; :b :c1205; :b :c1206; :b :c1207; :b :c1208; :b :c1209; :b :c1210; :b :c1211; :b :c1212; :b :c1213; :b :c1214; :b :c1215; :b :c1216; :b :c1217; :b :c1218; :b :c1219; :b :c1220; :b :c1221; :b :c1222; :b :c1223; :b :c1224; :b :c1225; :b :c1226; :b :c1227; :b :c1228; :b :c1229; :b :c1230; :b :c1231; :b :c1232; :b :c1233; :b :c1234; :b :c1235; :b :c1236; :b :c1237; :b :c1238; :b :c1239; :b :c1240; :b :c1241; :b :c1242; :b :c1243; :b :c1244; :b :c1245; :b :c1246; :b :c1247; :b :c1248; :b :c1249; :b :c1250; :b :c1251; :b :c1252; :b :c1253; :b :c1254; :b :c1255; :b :c1256; :b :c1257; :b :c1258; :b :c1259; :b :c1260; :b :c1261; :b :c1262; :b :c1263; :b :c1264; :b :c1265; :b :c1266; :b :c1267; :b :c1268; :b :c1269; :b :c1270; :b :c1271; :b :c1272; :b :c1273; :b :c1274; :b :c1275; :b :c1276; :b :c1277; :b :c1278; :b :c1279; :b :c1280; :b :c1281; :b :c1282; :b :c1283; :b :c1284; :b :c1285; :b :c1286; :b :c1287; :b :c1288; :b :c1289; :b :c1290; :b :c1291; :b :c1292; :b :c1293; :b :c1294; :b :c1295; :b :c1296; :b :c1297; :b :c1298; :b :c1299; :b :c1300; :b :c1301; :b :c1302; :b :c1303; :b :c1304; :b :c1305; :b :c1306; :b :c1307; :b :c1308; :b :c1309; :b :c1310; :b :c1311; :b :c1312; :b :c1313; :b :c1314; :b :c1315; :b :c1316; :b :c1317; :b :c1318; :b :c1319; :b :c1320; :b :c1321; :b :c1322; :b :c1323; :b :c1324; :b :c1325; :b :c1326; :b :c1327; :b :c1328; :b :c1329; :b :c1330; :b :c1331; :b :c1332; :b :c1333; :b :c1334; :b :c1335; :b :c1336; :b :c1337; :b :c1338; :b :c1339; :b :c1340; :b :c1341; :b :c1342; :b :c1343; :b :c1344; :b :c1345; :b :c1346; :b :c1347; :b :c1348; :b :c1349; :b :c1350; :b :c1351; :b :c1352; :b :c1353; :b :c1354; :b :c1355; :b :c1356; :b :c1357; :b :c1358; :b :c1359; :b :c1360; :b :c1361; :b :c1362; :b :c1363; :b :c1364; :b :c1365; :b :c1366; :b :c1367; :b :c1368; :b :c1369; :b :c1370; :b :c1371; :b :c1372; :b :c1373; :b :c1374; :b :c1375; :b :c1376; :b :c1377; :b :c1378; :b :c1379; :b :c1380; :b :c1381; :b :c1382; :b :c1383; :b :c1384; :b :c1385; :b :c1386; :b :c1387; :b :c1388; :b :c1389; :b :c1390; :b :c1391; :b :c1392; :b :c1393; :b :c1394; :b :c1395; :b :c1396; :b :c1397; :b :c1398; :b :c1399; :b :c1400; :b :c1401; :b :c1402; :b :c1403; :b :c1404; :b :c1405; :b :c1406; :b :c1407; :b :c1408; :b :c1409; :b :c1410; :b :c1411; :b :c1412; :b :c1413; :b :c1414; :b :c1415; :b :c1416; :b :c1417; :b :c1418; :b :c1419; :b :c1420; :b :c1421; :b :c1422; :b :c1423; :b :c1424; :b :c1425; :b :c1426; :b :c1427; :b :c1428; :b :c1429; :b :c1430; :b :c1431; :b :c1432; :b :c1433; :b :c1434; :b :c1435; :b :c1436; :b :c1437; :b :c1438; :b :c1439; :b :c1440; :b :c1441; :b :c1442; :b :c1443; :b :c1444; :b :c1445; :b :c1446; :b :c1447; :b :c1448; :b :c1449; :b :c1450; :b :c1451; :b :c1452; :b :c1453; :b :c1454; :b :c1455; :b :c1456; :b :c1457; :b :c1458; :b :c1459; :b :c1460; :b :c1461; :b :c1462; :b :c1463; :b :c1464; :b :c1465; :b :c1466; :b :c1467; :b :c1468; :b :c1469; :b :c1470; :b :c1471; :b :c1472; :b :c1473; :b :c1474; :b :c1475; :b :c1476; :b :c1477; :b :c1478; :b :c1479; :b :c1480; :b :c1481; :b :c1482; :b :c1483; :b :c1484; :b :c1485; :b :c1486; :b :c1487; :b :c1488; :b :c1489; :b :c1490; :b :c1491; :b :c1492; :b :c1493; :b :c1494; :b :c1495; :b :c1496; :b :c1497; :b :c1498; :b :c1499; :b :c1500; :b :c1501; :b :c1502; :b :c1503; :b :c1504; :b :c1505; :b :c1506; :b :c1507; :b :c1508; :b :c1509; :b :c1510; :b :c1511; :b :c1512; :b :c1513; :b :c1514; :b :c1515; :b :c1516; :b :c1517; :b :c1518; :b :c1519; :b :c1520; :b :c1521; :b :c1522; :b :c1523; :b :c1524; :b :c1525; :b :c1526; :b :c1527; :b :c1528; :b :c1529; :b :c1530; :b :c1531; :b :c1532; :b :c1533; :b :c1534; :b :c1535; :b :c1536; :b :c1537; :b :c1538; :b :c1539; :b :c1540; :b :c1541; :b :c1542; :b :c1543; :b :c1544; :b :c1545; :b :c1546; :b :c1547; :b :c1548; :b :c1549; :b :c1550; :b :c1551; :b :c1552; :b :c1553; :b :c1554; :b :c1555; :b :c1556; :b :c1557; :b :c1558; :b :c1559; :b :c1560; :b :c1561; :b :c1562; :b :c1563; :b :c1564; :b :c1565; :b :c1566; :b :c1567; :b :c1568; :b :c1569; :b :c1570; :b :c1571; :b :c1572; :b :c1573; :b :c1574; :b :c1575; :b :c1576; :b :c1577; :b :c1578; :b :c1579; :b :c1580; :b :c1581; :b :c1582; :b :c1583; :b :c1584; :b :c1585; :b :c1586; :b :c1587; :b :c1588; :b :c1589; :b :c1590; :b :c1591; :b :c1592; :b :c1593; :b :c1594; :b :c1595; :b :c1596; :b :c1597; :b :c1598; :b :c1599; :b :c1600; :b :c1601; :b :c1602; :b :c1603; :b :c1604; :b :c1605; :b :c1606; :b :c1607; :b :c1608; :b :c1609; :b :c1610; :b :c1611; :b :c1612; :b :c1613; :b :c1614; :b :c1615; :b :c1616; :b :c1617; :b :c1618; :b :c1619; :b :c1620; :b :c1621; :b :c1622; :b :c1623; :b :c1624; :b :c1625; :b :c1626; :b :c1627; :b :c1628; :b :c1629; :b :c1630; :b :c1631; :b :c1632; :b :c1633; :b :c1634; :b :c1635; :b :c1636; :b :c1637; :b :c1638; :b :c1639; :b :c1640; :b :c1641; :b :c1642; :b :c1643; :b :c1644; :b :c1645; :b :c1646; :b :c1647; :b :c1648; :b :c1649; :b :c1650; :b :c1651; :b :c1652; :b :c1653; :b :c1654; :b :c1655; :b :c1656; :b :c1657; :b :c1658; :b :c1659; :b :c1660; :b :c1661; :b :c1662; :b :c1663; :b :c1664; :b :c1665; :b :c1666; :b :c1667; :b :c1668; :b :c1669; :b :c1670; :b :c1671; :b :c1672; :b :c1673; :b :c1674; :b :c1675; :b :c1676; :b :c1677; :b :c1678; :b :c1679; :b :c1680; :b :c1681; :b :c1682; :b :c1683; :b :c1684; :b :c1685; :b :c1686; :b :c1687; :b :c1688; :b :c1689; :b :c1690; :b :c1691; :b :c1692; :b :c1693; :b :c1694; :b :c1695; :b :c1696; :b :c1697; :b :c1698; :b :c1699; :b :c1700; :b :c1701; :b :c1702; :b :c1703; :b :c1704; :b :c1705; :b :c1706; :b :c1707; :b :c1708; :b :c1709; :b :c1710; :b :c1711; :b :c1712; :b :c1713; :b :c1714; :b :c1715; :b :c1716; :b :c1717; :b :c1718; :b :c1719; :b :c1720; :b :c1721; :b :c1722; :b :c1723; :b :c1724; :b :c1725; :b :c1726; :b :c1727; :b :c1728; :b :c1729; :b :c1730; :b :c1731; :b :c1732; :b :c1733; :b :c1734; :b :c1735; :b :c1736; :b :c1737; :b :c1738; :b :c1739; :b :c1740; :b :c1741; :b :c1742; :b :c1743; :b :c1744; :b :c1745; :b :c1746; :b :c1747; :b :c1748; :b :c1749; :b :c1750; :b :c1751; :b :c1752; :b :c1753; :b :c1754; :b :c1755; :b :c1756; :b :c1757; :b :c1758; :b :c1759; :b :c1760; :b :c1761; :b :c1762; :b :c1763; :b :c1764; :b :c1765; :b :c1766; :b :c1767; :b :c1768; :b :c1769; :b :c1770; :b :c1771; :b :c1772; :b :c1773; :b :c1774; :b :c1775; :b :c1776; :b :c1777; :b :c1778; :b :c1779; :b :c1780; :b :c1781; :b :c1782; :b :c1783; :b :c1784; :b :c1785; :b :c1786; :b :c1787; :b :c1788; :b :c1789; :b :c1790; :b :c1791; :b :c1792; :b :c1793; :b :c1794; :b :c1795; :b :c1796; :b :c1797; :b :c1798; :b :c1799; :b :c1800; :b :c1801; :b :c1802; :b :c1803; :b :c1804; :b :c1805; :b :c1806; :b :c1807; :b :c1808; :b :c1809; :b :c1810; :b :c1811; :b :c1812; :b :c1813; :b :c1814; :b :c1815; :b :c1816; :b :c1817; :b :c1818; :b :c1819; :b :c1820; :b :c1821; :b :c1822; :b :c1823; :b :c1824; :b :c1825; :b :c1826; :b :c1827; :b :c1828; :b :c1829; :b :c1830; :b :c1831; :b :c1832; :b :c1833; :b :c1834; :b :c1835; :b :c1836; :b :c1837; :b :c1838; :b :c1839; :b :c1840; :b :c1841; :b :c1842; :b :c1843; :b :c1844; :b :c1845; :b :c1846; :b :c1847; :b :c1848; :b :c1849; :b :c1850; :b :c1851; :b :c1852; :b :c1853; :b :c1854; :b :c1855; :b :c1856; :b :c1857; :b :c1858; :b :c1859; :b :c1860; :b :c1861; :b :c1862; :b :c1863; :b :c1864; :b :c1865; :b :c1866; :b :c1867; :b :c1868; :b :c1869; :b :c1870; :b :c1871; :b :c1872; :b :c1873; :b :c1874; :b :c1875; :b :c1876; :b :c1877; :b :c1878; :b :c1879; :b :c1880; :b :c1881; :b :c1882; :b :c1883; :b :c1884; :b :c1885; :b :c1886; :b :c1887; :b :c1888; :b :c1889; :b :c1890; :b :c1891; :b :c1892; :b :c1893; :b :c1894; :b :c1895; :b :c1896; :b :c1897; :b :c1898; :b :c1899; :b :c1900; :b :c1901; :b :c1902; :b :c1903; :b :c1904; :b :c1905; :b :c1906; :b :c1907; :b :c1908; :b :c1909; :b :c1910; :b :c1911; :b :c1912; :b :c1913; :b :c1914; :b :c1915; :b :c1916; :b :c1917; :b :c1918; :b :c1919; :b :c1920; :b :c1921; :b :c1922; :b :c1923; :b :c1924; :b :c1925; :b :c1926; :b :c1927; :b :c1928; :b :c1929; :b :c1930; :b :c1931; :b :c1932; :b :c1933; :b :c1934; :b :c1935; :b :c1936; :b :c1937; :b :c1938; :b :c1939; :b :c1940; :b :c1941; :b :c1942; :b :c1943; :b :c1944; :b :c1945; :b :c1946; :b :c1947; :b :c1948; :b :c1949; :b :c1950; :b :c1951; :b :c1952; :b :c1953; :b :c1954; :b :c1955; :b :c1956; :b :c1957; :b :c1958; :b :c1959; :b :c1960; :b :c1961; :b :c1962; :b :c1963; :b :c1964; :b :c1965; :b :c1966; :b :c1967; :b :c1968; :b :c1969; :b :c1970; :b :c1971; :b :c1972; :b :c1973; :b :c1974; :b :c1975; :b :c1976; :b :c1977; :b :c1978; :b :c1979; :b :c1980; :b :c1981; :b :c1982; :b :c1983; :b :c1984; :b :c1985; :b :c1986; :b :c1987; :b :c1988; :b :c1989; :b :c1990; :b :c1991; :b :c1992; :b :c1993; :b :c1994; :b :c1995; :b :c1996; :b :c1997; :b :c1998; :b :c1999; :b :c2000; :b :c2001; :b :c2002; :b :c2003; :b :c2004; :b :c2005; :b :c2006; :b :c2007; :b :c2008; :b :c2009; :b :c2010; :b :c2011; :b :c2012; :b :c2013; :b :c2014; :b :c2015; :b :c2016; :b :c2017; :b :c2018; :b :c2019; :b :c2020; :b :c2021; :b :c2022; :b :c2023; :b :c2024; :b :c2025; :b :c2026; :b :c2027; :b :c2028; :b :c2029; :b :c2030; :b :c2031; :b :c2032; :b :c2033; :b :c2034; :b :c2035; :b :c2036; :b :c2037; :b :c2038; :b :c2039; :b :c2040; :b :c2041; :b :c2042; :b :c2043; :b :c2044; :b :c2045; :b :c2046; :b :c2047; :b :c2048; :b :c2049; :b :c2050; :b :c2051; :b :c2052; :b :c2053; :b :c2054; :b :c2055; :b :c2056; :b :c2057; :b :c2058; :b :c2059; :b :c2060; :b :c2061; :b :c2062; :b :c2063; :b :c2064; :b :c2065; :b :c2066; :b :c2067; :b :c2068; :b :c2069; :b :c2070; :b :c2071; :b :c2072; :b :c2073; :b :c2074; :b :c2075; :b :c2076; :b :c2077; :b :c2078; :b :c2079; :b :c2080; :b :c2081; :b :c2082; :b :c2083; :b :c2084; :b :c2085; :b :c2086; :b :c2087; :b :c2088; :b :c2089; :b :c2090; :b :c2091; :b :c2092; :b :c2093; :b :c2094; :b :c2095; :b :c2096; :b :c2097; :b :c2098; :b :c2099; :b :c2100; :b :c2101; :b :c2102; :b :c2103; :b :c2104; :b :c2105; :b :c2106; :b :c2107; :b :c2108; :b :c2109; :b :c2110; :b :c2111; :b :c2112; :b :c2113; :b :c2114; :b :c2115; :b :c2116; :b :c2117; :b :c2118; :b :c2119; :b :c2120; :b :c2121; :b :c2122; :b :c2123; :b :c2124; :b :c2125; :b :c2126; :b :c2127; :b :c2128; :b :c2129; :b :c2130; :b :c2131; :b :c2132; :b :c2133; :b :c2134; :b :c2135; :b :c2136; :b :c2137; :b :c2138; :b :c2139; :b :c2140; :b :c2141; :b :c2142; :b :c2143; :b :c2144; :b :c2145; :b :c2146; :b :c2147; :b :c2148; :b :c2149; :b :c2150; :b :c2151; :b :c2152; :b :c2153; :b :c2154; :b :c2155; :b :c2156; :b :c2157; :b :c2158; :b :c2159; :b :c2160; :b :c2161; :b :c2162; :b :c2163; :b :c2164; :b :c2165; :b :c2166; :b :c2167; :b :c2168; :b :c2169; :b :c2170; :b :c2171; :b :c2172; :b :c2173; :b :c2174; :b :c2175; :b :c2176; :b :c2177; :b :c2178; :b :c2179; :b :c2180; :b :c2181; :b :c2182; :b :c2183; :b :c2184; :b :c2185; :b :c2186; :b :c2187; :b :c2188; :b :c2189; :b :c2190; :b :c2191; :b :c2192; :b :c2193; :b :c2194; :b :c2195; :b :c2196; :b :c2197; :b :c2198; :b :c2199; :b :c2200; :b :c2201; :b :c2202; :b :c2203; :b :c2204; :b :c2205; :b :c2206; :b :c2207; :b :c2208; :b :c2209; :b :c2210; :b :c2211; :b :c2212; :b :c2213; :b :c2214; :b :c2215; :b :c2216; :b :c2217; :b :c2218; :b :c2219; :b :c2220; :b :c2221; :b :c2222; :b :c2223; :b :c2224; :b :c2225; :b :c2226; :b :c2227; :b :c2228; :b :c2229; :b :c2230; :b :c2231; :b :c2232; :b :c2233; :b :c2234; :b :c2235; :b :c2236; :b :c2237; :b :c2238; :b :c2239; :b :c2240; :b :c2241; :b :c2242; :b :c2243; :b :c2244; :b :c2245; :b :c2246; :b :c2247; :b :c2248; :b :c2249; :b :c2250; :b :c2251; :b :c2252; :b :c2253; :b :c2254; :b :c2255; :b :c2256; :b :c2257; :b :c2258; :b :c2259; :b :c2260; :b :c2261; :b :c2262; :b :c2263; :b :c2264; :b :c2265; :b :c2266; :b :c2267; :b :c2268; :b :c2269; :b :c2270; :b :c2271; :b :c2272; :b :c2273; :b :c2274; :b :c2275; :b :c2276; :b :c2277; :b :c2278; :b :c2279; :b :c2280; :b :c2281; :b :c2282; :b :c2283; :b :c2284; :b :c2285; :b :c2286; :b :c2287; :b :c2288; :b :c2289; :b :c2290; :b :c2291; :b :c2292; :b :c2293; :b :c2294; :b :c2295; :b :c2296; :b :c2297; :b :c2298; :b :c2299; :b :c2300; :b :c2301; :b :c2302; :b :c2303; :b :c2304; :b :c2305; :b :c2306; :b :c2307; :b :c2308; :b :c2309; :b :c2310; :b :c2311; :b :c2312; :b :c2313; :b :c2314; :b :c2315; :b :c2316; :b :c2317; :b :c2318; :b :c2319; :b :c2320; :b :c2321; :b :c2322; :b :c2323; :b :c2324; :b :c2325; :b :c2326; :b :c2327; :b :c2328; :b :c2329; :b :c2330; :b :c2331; :b :c2332; :b :c2333; :b :c2334; :b :c2335; :b :c2336; :b :c2337; :b :c2338; :b :c2339; :b :c2340; :b :c2341; :b :c2342; :b :c2343; :b :c2344; :b :c2345; :b :c2346; :b :c2347; :b :c2348; :b :c2349; :b :c2350; :b :c2351; :b :c2352; :b :c2353; :b :c2354; :b :c2355; :b :c2356; :b :c2357; :b :c2358; :b :c2359; :b :c2360; :b :c2361; :b :c2362; :b :c2363; :b :c2364; :b :c2365; :b :c2366; :b :c2367; :b :c2368; :b :c2369; :b :c2370; :b :c2371; :b :c2372; :b :c2373; :b :c2374; :b :c2375; :b :c2376; :b :c2377; :b :c2378; :b :c2379; :b :c2380; :b :c2381; :b :c2382; :b :c2383; :b :c2384; :b :c2385; :b :c2386; :b :c2387; :b :c2388; :b :c2389; :b :c2390; :b :c2391; :b :c2392; :b :c2393; :b :c2394; :b :c2395; :b :c2396; :b :c2397; :b :c2398; :b :c2399; :b :c2400; :b :c2401; :b :c2402; :b :c2403; :b :c2404; :b :c2405; :b :c2406; :b :c2407; :b :c2408; :b :c2409; :b :c2410; :b :c2411; :b :c2412; :b :c2413; :b :c2414; :b :c2415; :b :c2416; :b :c2417; :b :c2418; :b :c2419; :b :c2420; :b :c2421; :b :c2422; :b :c2423; :b :c2424; :b :c2425; :b :c2426; :b :c2427; :b :c2428; :b :c2429; :b :c2430; :b :c2431; :b :c2432; :b :c2433; :b :c2434; :b :c2435; :b :c2436; :b :c2437; :b :c2438; :b :c2439; :b :c2440; :b :c2441; :b :c2442; :b :c2443; :b :c2444; :b :c2445; :b :c2446; :b :c2447; :b :c2448; :b :c2449; :b :c2450; :b :c2451; :b :c2452; :b :c2453; :b :c2454; :b :c2455; :b :c2456; :b :c2457; :b :c2458; :b :c2459; :b :c2460; :b :c2461; :b :c2462; :b :c2463; :b :c2464; :b :c2465; :b :c2466; :b :c2467; :b :c2468; :b :c2469; :b :c2470; :b :c2471; :b :c2472; :b :c2473; :b :c2474; :b :c2475; :b :c2476; :b :c2477; :b :c2478; :b :c2479; :b :c2480; :b :c2481; :b :c2482; :b :c2483; :b :c2484; :b :c2485; :b :c2486; :b :c2487; :b :c2488; :b :c2489; :b :c2490; :b :c2491; :b :c2492; :b :c2493; :b :c2494; :b :c2495; :b :c2496; :b :c2497; :b :c2498; :b :c2499; :b :c2500; :b :c2501; :b :c2502; :b :c2503; :b :c2504; :b :c2505; :b :c2506; :b :c2507; :b :c2508; :b :c2509; :b :c2510; :b :c2511; :b :c2512; :b :c2513; :b :c2514; :b :c2515; :b :c2516; :b :c2517; :b :c2518; :b :c2519; :b :c2520; :b :c2521; :b :c2522; :b :c2523; :b :c2524; :b :c2525; :b :c2526; :b :c2527; :b :c2528; :b :c2529; :b :c2530; :b :c2531; :b :c2532; :b :c2533; :b :c2534; :b :c2535; :b :c2536; :b :c2537; :b :c2538; :b :c2539; :b :c2540; :b :c2541; :b :c2542; :b :c2543; :b :c2544; :b :c2545; :b :c2546; :b :c2547; :b :c2548; :b :c2549; :b :c2550; :b :c2551; :b :c2552; :b :c2553; :b :c2554; :b :c2555; :b :c2556; :b :c2557; :b :c2558; :b :c2559; :b :c2560; :b :c2561; :b :c2562; :b :c2563; :b :c2564; :b :c2565; :b :c2566; :b :c2567; :b :c2568; :b :c2569; :b :c2570; :b :c2571; :b :c2572; :b :c2573; :b :c2574; :b :c2575; :b :c2576; :b :c2577; :b :c2578; :b :c2579; :b :c2580; :b :c2581; :b :c2582; :b :c2583; :b :c2584; :b :c2585; :b :c2586; :b :c2587; :b :c2588; :b :c2589; :b :c2590; :b :c2591; :b :c2592; :b :c2593; :b :c2594; :b :c2595; :b :c2596; :b :c2597; :b :c2598; :b :c2599; :b :c2600; :b :c2601; :b :c2602; :b :c2603; :b :c2604; :b :c2605; :b :c2606; :b :c2607; :b :c2608; :b :c2609; :b :c2610; :b :c2611; :b :c2612; :b :c2613; :b :c2614; :b :c2615; :b :c2616; :b :c2617; :b :c2618; :b :c2619; :b :c2620; :b :c2621; :b :c2622; :b :c2623; :b :c2624; :b :c2625; :b :c2626; :b :c2627; :b :c2628; :b :c2629; :b :c2630; :b :c2631; :b :c2632; :b :c2633; :b :c2634; :b :c2635; :b :c2636; :b :c2637; :b :c2638; :b :c2639; :b :c2640; :b :c2641; :b :c2642; :b :c2643; :b :c2644; :b :c2645; :b :c2646; :b :c2647; :b :c2648; :b :c2649; :b :c2650; :b :c2651; :b :c2652; :b :c2653; :b :c2654; :b :c2655; :b :c2656; :b :c2657; :b :c2658; :b :c2659; :b :c2660; :b :c2661; :b :c2662; :b :c2663; :b :c2664; :b :c2665; :b :c2666; :b :c2667; :b :c2668; :b :c2669; :b :c2670; :b :c2671; :b :c2672; :b :c2673; :b :c2674; :b :c2675; :b :c2676; :b :c2677; :b :c2678; :b :c2679; :b :c2680; :b :c2681; :b :c2682; :b :c2683; :b :c2684; :b :c2685; :b :c2686; :b :c2687; :b :c2688; :b :c2689; :b :c2690; :b :c2691; :b :c2692; :b :c2693; :b :c2694; :b :c2695; :b :c2696; :b :c2697; :b :c2698; :b :c2699; :b :c2700; :b :c2701; :b :c2702; :b :c2703; :b :c2704; :b :c2705; :b :c2706; :b :c2707; :b :c2708; :b :c2709; :b :c2710; :b :c2711; :b :c2712; :b :c2713; :b :c2714; :b :c2715; :b :c2716; :b :c2717; :b :c2718; :b :c2719; :b :c2720; :b :c2721; :b :c2722; :b :c2723; :b :c2724; :b :c2725; :b :c2726; :b :c2727; :b :c2728; :b :c2729; :b :c2730; :b :c2731; :b :c2732; :b :c2733; :b :c2734; :b :c2735; :b :c2736; :b :c2737; :b :c2738; :b :c2739; :b :c2740; :b :c2741; :b :c2742; :b :c2743; :b :c2744; :b :c2745; :b :c2746; :b :c2747; :b :c2748; :b :c2749; :b :c2750; :b :c2751; :b :c2752; :b :c2753; :b :c2754; :b :c2755; :b :c2756; :b :c2757; :b :c2758; :b :c2759; :b :c2760; :b :c2761; :b :c2762; :b :c2763; :b :c2764; :b :c2765; :b :c2766; :b :c2767; :b :c2768; :b :c2769; :b :c2770; :b :c2771; :b :c2772; :b :c2773; :b :c2774; :b :c2775; :b :c2776; :b :c2777; :b :c2778; :b :c2779; :b :c2780; :b :c2781; :b :c2782; :b :c2783; :b :c2784; :b :c2785; :b :c2786; :b :c2787; :b :c2788; :b :c2789; :b :c2790; :b :c2791; :b :c2792; :b :c2793; :b :c2794; :b :c2795; :b :c2796; :b :c2797; :b :c2798; :b :c2799; :b :c2800; :b :c2801; :b :c2802; :b :c2803; :b :c2804; :b :c2805; :b :c2806; :b :c2807; :b :c2808; :b :c2809; :b :c2810; :b :c2811; :b :c2812; :b :c2813; :b :c2814; :b :c2815; :b :c2816; :b :c2817; :b :c2818; :b :c2819; :b :c2820; :b :c2821; :b :c2822; :b :c2823; :b :c2824; :b :c2825; :b :c2826; :b :c2827; :b :c2828; :b :c2829; :b :c2830; :b :c2831; :b :c2832; :b :c2833; :b :c2834; :b :c2835; :b :c2836; :b :c2837; :b :c2838; :b :c2839; :b :c2840; :b :c2841; :b :c2842; :b :c2843; :b :c2844; :b :c2845; :b :c2846; :b :c2847; :b :c2848; :b :c2849; :b :c2850; :b :c2851; :b :c2852; :b :c2853; :b :c2854; :b :c2855; :b :c2856; :b :c2857; :b :c2858; :b :c2859; :b :c2860; :b :c2861; :b :c2862; :b :c2863; :b :c2864; :b :c2865; :b :c2866; :b :c2867; :b :c2868; :b :c2869; :b :c2870; :b :c2871; :b :c2872; :b :c2873; :b :c2874; :b :c2875; :b :c2876; :b :c2877; :b :c2878; :b :c2879; :b :c2880; :b :c2881; :b :c2882; :b :c2883; :b :c2884; :b :c2885; :b :c2886; :b :c2887; :b :c2888; :b :c2889; :b :c2890; :b :c2891; :b :c2892; :b :c2893; :b :c2894; :b :c2895; :b :c2896; :b :c2897; :b :c2898; :b :c2899; :b :c2900; :b :c2901; :b :c2902; :b :c2903; :b :c2904; :b :c2905; :b :c2906; :b :c2907; :b :c2908; :b :c2909; :b :c2910; :b :c2911; :b :c2912; :b :c2913; :b :c2914; :b :c2915; :b :c2916; :b :c2917; :b :c2918; :b :c2919; :b :c2920; :b :c2921; :b :c2922; :b :c2923; :b :c2924; :b :c2925; :b :c2926; :b :c2927; :b :c2928; :b :c2929; :b :c2930; :b :c2931; :b :c2932; :b :c2933; :b :c2934; :b :c2935; :b :c2936; :b :c2937; :b :c2938; :b :c2939; :b :c2940; :b :c2941; :b :c2942; :b :c2943; :b :c2944; :b :c2945; :b :c2946; :b :c2947; :b :c2948; :b :c2949; :b :c2950; :b :c2951; :b :c2952; :b :c2953; :b :c2954; :b :c2955; :b :c2956; :b :c2957; :b :c2958; :b :c2959; :b :c2960; :b :c2961; :b :c2962; :b :c2963; :b :c2964; :b :c2965; :b :c2966; :b :c2967; :b :c2968; :b :c2969; :b :c2970; :b :c2971; :b :c2972; :b :c2973; :b :c2974; :b :c2975; :b :c2976; :b :c2977; :b :c2978; :b :c2979; :b :c2980; :b :c2981; :b :c2982; :b :c2983; :b :c2984; :b :c2985; :b :c2986; :b :c2987; :b :c2988; :b :c2989; :b :c2990; :b :c2991; :b :c2992; :b :c2993; :b :c2994; :b :c2995; :b :c2996; :b :c2997; :b :c2998; :b :c2999; :b :c3000; :b :c3001; :b :c3002; :b :c3003; :b :c3004; :b :c3005; :b :c3006; :b :c3007; :b :c3008; :b :c3009; :b :c3010; :b :c3011; :b :c3012; :b :c3013; :b :c3014; :b :c3015; :b :c3016; :b :c3017; :b :c3018; :b :c3019; :b :c3020; :b :c3021; :b :c3022; :b :c3023; :b :c3024; :b :c3025; :b :c3026; :b :c3027; :b :c3028; :b :c3029; :b :c3030; :b :c3031; :b :c3032; :b :c3033; :b :c3034; :b :c3035; :b :c3036; :b :c3037; :b :c3038; :b :c3039; :b :c3040; :b :c3041; :b :c3042; :b :c3043; :b :c3044; :b :c3045; :b :c3046; :b :c3047; :b :c3048; :b :c3049; :b :c3050; :b :c3051; :b :c3052; :b :c3053; :b :c3054; :b :c3055; :b :c3056; :b :c3057; :b :c3058; :b :c3059; :b :c3060; :b :c3061; :b :c3062; :b :c3063; :b :c3064; :b :c3065; :b :c3066; :b :c3067; :b :c3068; :b :c3069; :b :c3070; :b :c3071; :b :c3072; :b :c3073; :b :c3074; :b :c3075; :b :c3076; :b :c3077; :b :c3078; :b :c3079; :b :c3080; :b :c3081; :b :c3082; :b :c3083; :b :c3084; :b :c3085; :b :c3086; :b :c3087; :b :c3088; :b :c3089; :b :c3090; :b :c3091; :b :c3092; :b :c3093; :b :c3094; :b :c3095; :b :c3096; :b :c3097; :b :c3098; :b :c3099; :b :c3100; :b :c3101; :b :c3102; :b :c3103; :b :c3104; :b :c3105; :b :c3106; :b :c3107; :b :c3108; :b :c3109; :b :c3110; :b :c3111; :b :c3112; :b :c3113; :b :c3114; :b :c3115; :b :c3116; :b :c3117; :b :c3118; :b :c3119; :b :c3120; :b :c3121; :b :c3122; :b :c3123; :b :c3124; :b :c3125; :b :c3126; :b :c3127; :b :c3128; :b :c3129; :b :c3130; :b :c3131; :b :c3132; :b :c3133; :b :c3134; :b :c3135; :b :c3136; :b :c3137; :b :c3138; :b :c3139; :b :c3140; :b :c3141; :b :c3142; :b :c3143; :b :c3144; :b :c3145; :b :c3146; :b :c3147; :b :c3148; :b :c3149; :b :c3150; :b :c3151; :b :c3152; :b :c3153; :b :c3154; :b :c3155; :b :c3156; :b :c3157; :b :c3158; :b :c3159; :b :c3160; :b :c3161; :b :c3162; :b :c3163; :b :c3164; :b :c3165; :b :c3166; :b :c3167; :b :c3168; :b :c3169; :b :c3170; :b :c3171; :b :c3172; :b :c3173; :b :c3174; :b :c3175; :b :c3176; :b :c3177; :b :c3178; :b :c3179; :b :c3180; :b :c3181; :b :c3182; :b :c3183; :b :c3184; :b :c3185; :b :c3186; :b :c3187; :b :c3188; :b :c3189; :b :c3190; :b :c3191; :b :c3192; :b :c3193; :b :c3194; :b :c3195; :b :c3196; :b :c3197; :b :c3198; :b :c3199; :b :c3200; :b :c3201; :b :c3202; :b :c3203; :b :c3204; :b :c3205; :b :c3206; :b :c3207; :b :c3208; :b :c3209; :b :c3210; :b :c3211; :b :c3212; :b :c3213; :b :c3214; :b :c3215; :b :c3216; :b :c3217; :b :c3218; :b :c3219; :b :c3220; :b :c3221; :b :c3222; :b :c3223; :b :c3224; :b :c3225; :b :c3226; :b :c3227; :b :c3228; :b :c3229; :b :c3230; :b :c3231; :b :c3232; :b :c3233; :b :c3234; :b :c3235; :b :c3236; :b :c3237; :b :c3238; :b :c3239; :b :c3240; :b :c3241; :b :c3242; :b :c3243; :b :c3244; :b :c3245; :b :c3246; :b :c3247; :b :c3248; :b :c3249; :b :c3250; :b :c3251; :b :c3252; :b :c3253; :b :c3254; :b :c3255; :b :c3256; :b :c3257; :b :c3258; :b :c3259; :b :c3260; :b :c3261; :b :c3262; :b :c3263; :b :c3264; :b :c3265; :b :c3266; :b :c3267; :b :c3268; :b :c3269; :b :c3270; :b :c3271; :b :c3272; :b :c3273; :b :c3274; :b :c3275; :b :c3276; :b :c3277; :b :c3278; :b :c3279; :b :c3280; :b :c3281; :b :c3282; :b :c3283; :b :c3284; :b :c3285; :b :c3286; :b :c3287; :b :c3288; :b :c3289; :b :c3290; :b :c3291; :b :c3292; :b :c3293; :b :c3294; :b :c3295; :b :c3296; :b :c3297; :b :c3298; :b :c3299; :b :c3300; :b :c3301; :b :c3302; :b :c3303; :b :c3304; :b :c3305; :b :c3306; :b :c3307; :b :c3308; :b :c3309; :b :c3310; :b :c3311; :b :c3312; :b :c3313; :b :c3314; :b :c3315; :b :c3316; :b :c3317; :b :c3318; :b :c3319; :b :c3320; :b :c3321; :b :c3322; :b :c3323; :b :c3324; :b :c3325; :b :c3326; :b :c3327; :b :c3328; :b :c3329; :b :c3330; :b :c3331; :b :c3332; :b :c3333; :b :c3334; :b :c3335; :b :c3336; :b :c3337; :b :c3338; :b :c3339; :b :c3340; :b :c3341; :b :c3342; :b :c3343; :b :c3344; :b :c3345; :b :c3346; :b :c3347; :b :c3348; :b :c3349; :b :c3350; :b :c3351; :b :c3352; :b :c3353; :b :c3354; :b :c3355; :b :c3356; :b :c3357; :b :c3358; :b :c3359; :b :c3360; :b :c3361; :b :c3362; :b :c3363; :b :c3364; :b :c3365; :b :c3366; :b :c3367; :b :c3368; :b :c3369; :b :c3370; :b :c3371; :b :c3372; :b :c3373; :b :c3374; :b :c3375; :b :c3376; :b :c3377; :b :c3378; :b :c3379; :b :c3380; :b :c3381; :b :c3382; :b :c3383; :b :c3384; :b :c3385; :b :c3386; :b :c3387; :b :c3388; :b :c3389; :b :c3390; :b :c3391; :b :c3392; :b :c3393; :b :c3394; :b :c3395; :b :c3396; :b :c3397; :b :c3398; :b :c3399; :b :c3400; :b :c3401; :b :c3402; :b :c3403; :b :c3404; :b :c3405; :b :c3406; :b :c3407; :b :c3408; :b :c3409; :b :c3410; :b :c3411; :b :c3412; :b :c3413; :b :c3414; :b :c3415; :b :c3416; :b :c3417; :b :c3418; :b :c3419; :b :c3420; :b :c3421; :b :c3422; :b :c3423; :b :c3424; :b :c3425; :b :c3426; :b :c3427; :b :c3428; :b :c3429; :b :c3430; :b :c3431; :b :c3432; :b :c3433; :b :c3434; :b :c3435; :b :c3436; :b :c3437; :b :c3438; :b :c3439; :b :c3440; :b :c3441; :b :c3442; :b :c3443; :b :c3444; :b :c3445; :b :c3446; :b :c3447; :b :c3448; :b :c3449; :b :c3450; :b :c3451; :b :c3452; :b :c3453; :b :c3454; :b :c3455; :b :c3456; :b :c3457; :b :c3458; :b :c3459; :b :c3460; :b :c3461; :b :c3462; :b :c3463; :b :c3464; :b :c3465; :b :c3466; :b :c3467; :b :c3468; :b :c3469; :b :c3470; :b :c3471; :b :c3472; :b :c3473; :b :c3474; :b :c3475; :b :c3476; :b :c3477; :b :c3478; :b :c3479; :b :c3480; :b :c3481; :b :c3482; :b :c3483; :b :c3484; :b :c3485; :b :c3486; :b :c3487; :b :c3488; :b :c3489; :b :c3490; :b :c3491; :b :c3492; :b :c3493; :b :c3494; :b :c3495; :b :c3496; :b :c3497; :b :c3498; :b :c3499; :b :c3500; :b :c3501; :b :c3502; :b :c3503; :b :c3504; :b :c3505; :b :c3506; :b :c3507; :b :c3508; :b :c3509; :b :c3510; :b :c3511; :b :c3512; :b :c3513; :b :c3514; :b :c3515; :b :c3516; :b :c3517; :b :c3518; :b :c3519; :b :c3520; :b :c3521; :b :c3522; :b :c3523; :b :c3524; :b :c3525; :b :c3526; :b :c3527; :b :c3528; :b :c3529; :b :c3530; :b :c3531; :b :c3532; :b :c3533; :b :c3534; :b :c3535; :b :c3536; :b :c3537; :b :c3538; :b :c3539; :b :c3540; :b :c3541; :b :c3542; :b :c3543; :b :c3544; :b :c3545; :b :c3546; :b :c3547; :b :c3548; :b :c3549; :b :c3550; :b :c3551; :b :c3552; :b :c3553; :b :c3554; :b :c3555; :b :c3556; :b :c3557; :b :c3558; :b :c3559; :b :c3560; :b :c3561; :b :c3562; :b :c3563; :b :c3564; :b :c3565; :b :c3566; :b :c3567; :b :c3568; :b :c3569; :b :c3570; :b :c3571; :b :c3572; :b :c3573; :b :c3574; :b :c3575; :b :c3576; :b :c3577; :b :c3578; :b :c3579; :b :c3580; :b :c3581; :b :c3582; :b :c3583; :b :c3584; :b :c3585; :b :c3586; :b :c3587; :b :c3588; :b :c3589; :b :c3590; :b :c3591; :b :c3592; :b :c3593; :b :c3594; :b :c3595; :b :c3596; :b :c3597; :b :c3598; :b :c3599; :b :c3600; :b :c3601; :b :c3602; :b :c3603; :b :c3604; :b :c3605; :b :c3606; :b :c3607; :b :c3608; :b :c3609; :b :c3610; :b :c3611; :b :c3612; :b :c3613; :b :c3614; :b :c3615; :b :c3616; :b :c3617; :b :c3618; :b :c3619; :b :c3620; :b :c3621; :b :c3622; :b :c3623; :b :c3624; :b :c3625; :b :c3626; :b :c3627; :b :c3628; :b :c3629; :b :c3630; :b :c3631; :b :c3632; :b :c3633; :b :c3634; :b :c3635; :b :c3636; :b :c3637; :b :c3638; :b :c3639; :b :c3640; :b :c3641; :b :c3642; :b :c3643; :b :c3644; :b :c3645; :b :c3646; :b :c3647; :b :c3648; :b :c3649; :b :c3650; :b :c3651; :b :c3652; :b :c3653; :b :c3654; :b :c3655; :b :c3656; :b :c3657; :b :c3658; :b :c3659; :b :c3660; :b :c3661; :b :c3662; :b :c3663; :b :c3664; :b :c3665; :b :c3666; :b :c3667; :b :c3668; :b :c3669; :b :c3670; :b :c3671; :b :c3672; :b :c3673; :b :c3674; :b :c3675; :b :c3676; :b :c3677; :b :c3678; :b :c3679; :b :c3680; :b :c3681; :b :c3682; :b :c3683; :b :c3684; :b :c3685; :b :c3686; :b :c3687; :b :c3688; :b :c3689; :b :c3690; :b :c3691; :b :c3692; :b :c3693; :b :c3694; :b :c3695; :b :c3696; :b :c3697; :b :c3698; :b :c3699; :b :c3700; :b :c3701; :b :c3702; :b :c3703; :b :c3704; :b :c3705; :b :c3706; :b :c3707; :b :c3708; :b :c3709; :b :c3710; :b :c3711; :b :c3712; :b :c3713; :b :c3714; :b :c3715; :b :c3716; :b :c3717; :b :c3718; :b :c3719; :b :c3720; :b :c3721; :b :c3722; :b :c3723; :b :c3724; :b :c3725; :b :c3726; :b :c3727; :b :c3728; :b :c3729; :b :c3730; :b :c3731; :b :c3732; :b :c3733; :b :c3734; :b :c3735; :b :c3736; :b :c3737; :b :c3738; :b :c3739; :b :c3740; :b :c3741; :b :c3742; :b :c3743; :b :c3744; :b :c3745; :b :c3746; :b :c3747; :b :c3748; :b :c3749; :b :c3750; :b :c3751; :b :c3752; :b :c3753; :b :c3754; :b :c3755; :b :c3756; :b :c3757; :b :c3758; :b :c3759; :b :c3760; :b :c3761; :b :c3762; :b :c3763; :b :c3764; :b :c3765; :b :c3766; :b :c3767; :b :c3768; :b :c3769; :b :c3770; :b :c3771; :b :c3772; :b :c3773; :b :c3774; :b :c3775; :b :c3776; :b :c3777; :b :c3778; :b :c3779; :b :c3780; :b :c3781; :b :c3782; :b :c3783; :b :c3784; :b :c3785; :b :c3786; :b :c3787; :b :c3788; :b :c3789; :b :c3790; :b :c3791; :b :c3792; :b :c3793; :b :c3794; :b :c3795; :b :c3796; :b :c3797; :b :c3798; :b :c3799; :b :c3800; :b :c3801; :b :c3802; :b :c3803; :b :c3804; :b :c3805; :b :c3806; :b :c3807; :b :c3808; :b :c3809; :b :c3810; :b :c3811; :b :c3812; :b :c3813; :b :c3814; :b :c3815; :b :c3816; :b :c3817; :b :c3818; :b :c3819; :b :c3820; :b :c3821; :b :c3822; :b :c3823; :b :c3824; :b :c3825; :b :c3826; :b :c3827; :b :c3828; :b :c3829; :b :c3830; :b :c3831; :b :c3832; :b :c3833; :b :c3834; :b :c3835; :b :c3836; :b :c3837; :b :c3838; :b :c3839; :b :c3840; :b :c3841; :b :c3842; :b :c3843; :b :c3844; :b :c3845; :b :c3846; :b :c3847; :b :c3848; :b :c3849; :b :c3850; :b :c3851; :b :c3852; :b :c3853; :b :c3854; :b :c3855; :b :c3856; :b :c3857; :b :c3858; :b :c3859; :b :c3860; :b :c3861; :b :c3862; :b :c3863; :b :c3864; :b :c3865; :b :c3866; :b :c3867; :b :c3868; :b :c3869; :b :c3870; :b :c3871; :b :c3872; :b :c3873; :b :c3874; :b :c3875; :b :c3876; :b :c3877; :b :c3878; :b :c3879; :b :c3880; :b :c3881; :b :c3882; :b :c3883; :b :c3884; :b :c3885; :b :c3886; :b :c3887; :b :c3888; :b :c3889; :b :c3890; :b :c3891; :b :c3892; :b :c3893; :b :c3894; :b :c3895; :b :c3896; :b :c3897; :b :c3898; :b :c3899; :b :c3900; :b :c3901; :b :c3902; :b :c3903; :b :c3904; :b :c3905; :b :c3906; :b :c3907; :b :c3908; :b :c3909; :b :c3910; :b :c3911; :b :c3912; :b :c3913; :b :c3914; :b :c3915; :b :c3916; :b :c3917; :b :c3918; :b :c3919; :b :c3920; :b :c3921; :b :c3922; :b :c3923; :b :c3924; :b :c3925; :b :c3926; :b :c3927; :b :c3928; :b :c3929; :b :c3930; :b :c3931; :b :c3932; :b :c3933; :b :c3934; :b :c3935; :b :c3936; :b :c3937; :b :c3938; :b :c3939; :b :c3940; :b :c3941; :b :c3942; :b :c3943; :b :c3944; :b :c3945; :b :c3946; :b :c3947; :b :c3948; :b :c3949; :b :c3950; :b :c3951; :b :c3952; :b :c3953; :b :c3954; :b :c3955; :b :c3956; :b :c3957; :b :c3958; :b :c3959; :b :c3960; :b :c3961; :b :c3962; :b :c3963; :b :c3964; :b :c3965; :b :c3966; :b :c3967; :b :c3968; :b :c3969; :b :c3970; :b :c3971; :b :c3972; :b :c3973; :b :c3974; :b :c3975; :b :c3976; :b :c3977; :b :c3978; :b :c3979; :b :c3980; :b :c3981; :b :c3982; :b :c3983; :b :c3984; :b :c3985; :b :c3986; :b :c3987; :b :c3988; :b :c3989; :b :c3990; :b :c3991; :b :c3992; :b :c3993; :b :c3994; :b :c3995; :b :c3996; :b :c3997; :b :c3998; :b :c3999; :b :c4000; :b :c4001; :b :c4002; :b :c4003; :b :c4004; :b :c4005; :b :c4006; :b :c4007; :b :c4008; :b :c4009; :b :c4010; :b :c4011; :b :c4012; :b :c4013; :b :c4014; :b :c4015; :b :c4016; :b :c4017; :b :c4018; :b :c4019; :b :c4020; :b :c4021; :b :c4022; :b :c4023; :b :c4024; :b :c4025; :b :c4026; :b :c4027; :b :c4028; :b :c4029; :b :c4030; :b :c4031; :b :c4032; :b :c4033; :b :c4034; :b :c4035; :b :c4036; :b :c4037; :b :c4038; :b :c4039; :b :c4040; :b :c4041; :b :c4042; :b :c4043; :b :c4044; :b :c4045; :b :c4046; :b :c4047; :b :c4048; :b :c4049; :b :c4050; :b :c4051; :b :c4052; :b :c4053; :b :c4054; :b :c4055; :b :c4056; :b :c4057; :b :c4058; :b :c4059; :b :c4060; :b :c4061; :b :c4062; :b :c4063; :b :c4064; :b :c4065; :b :c4066; :b :c4067; :b :c4068; :b :c4069; :b :c4070; :b :c4071; :b :c4072; :b :c4073; :b :c4074; :b :c4075; :b :c4076; :b :c4077; :b :c4078; :b :c4079; :b :c4080; :b :c4081; :b :c4082; :b :c4083; :b :c4084; :b :c4085; :b :c4086; :b :c4087; :b :c4088; :b :c4089; :b :c4090; :b :c4091; :b :c4092; :b :c4093; :b :c4094; :b :c4095; :b :c4096; :b :c4097; :b :c4098; :b :c4099; :b :c4100; :b :c4101; :b :c4102; :b :c4103; :b :c4104; :b :c4105; :b :c4106; :b :c4107; :b :c4108; :b :c4109; :b :c4110; :b :c4111; :b :c4112; :b :c4113; :b :c4114; :b :c4115; :b :c4116; :b :c4117; :b :c4118; :b :c4119; :b :c4120; :b :c4121; :b :c4122; :b :c4123; :b :c4124; :b :c4125; :b :c4126; :b :c4127; :b :c4128; :b :c4129; :b :c4130; :b :c4131; :b :c4132; :b :c4133; :b :c4134; :b :c4135; :b :c4136; :b :c4137; :b :c4138; :b :c4139; :b :c4140; :b :c4141; :b :c4142; :b :c4143; :b :c4144; :b :c4145; :b :c4146; :b :c4147; :b :c4148; :b :c4149; :b :c4150; :b :c4151; :b :c4152; :b :c4153; :b :c4154; :b :c4155; :b :c4156; :b :c4157; :b :c4158; :b :c4159; :b :c4160; :b :c4161; :b :c4162; :b :c4163; :b :c4164; :b :c4165; :b :c4166; :b :c4167; :b :c4168; :b :c4169; :b :c4170; :b :c4171; :b :c4172; :b :c4173; :b :c4174; :b :c4175; :b :c4176; :b :c4177; :b :c4178; :b :c4179; :b :c4180; :b :c4181; :b :c4182; :b :c4183; :b :c4184; :b :c4185; :b :c4186; :b :c4187; :b :c4188; :b :c4189; :b :c4190; :b :c4191; :b :c4192; :b :c4193; :b :c4194; :b :c4195; :b :c4196; :b :c4197; :b :c4198; :b :c4199; :b :c4200; :b :c4201; :b :c4202; :b :c4203; :b :c4204; :b :c4205; :b :c4206; :b :c4207; :b :c4208; :b :c4209; :b :c4210; :b :c4211; :b :c4212; :b :c4213; :b :c4214; :b :c4215; :b :c4216; :b :c4217; :b :c4218; :b :c4219; :b :c4220; :b :c4221; :b :c4222; :b :c4223; :b :c4224; :b :c4225; :b :c4226; :b :c4227; :b :c4228; :b :c4229; :b :c4230; :b :c4231; :b :c4232; :b :c4233; :b :c4234; :b :c4235; :b :c4236; :b :c4237; :b :c4238; :b :c4239; :b :c4240; :b :c4241; :b :c4242; :b :c4243; :b :c4244; :b :c4245; :b :c4246; :b :c4247; :b :c4248; :b :c4249; :b :c4250; :b :c4251; :b :c4252; :b :c4253; :b :c4254; :b :c4255; :b :c4256; :b :c4257; :b :c4258; :b :c4259; :b :c4260; :b :c4261; :b :c4262; :b :c4263; :b :c4264; :b :c4265; :b :c4266; :b :c4267; :b :c4268; :b :c4269; :b :c4270; :b :c4271; :b :c4272; :b :c4273; :b :c4274; :b :c4275; :b :c4276; :b :c4277; :b :c4278; :b :c4279; :b :c4280; :b :c4281; :b :c4282; :b :c4283; :b :c4284; :b :c4285; :b :c4286; :b :c4287; :b :c4288; :b :c4289; :b :c4290; :b :c4291; :b :c4292; :b :c4293; :b :c4294; :b :c4295; :b :c4296; :b :c4297; :b :c4298; :b :c4299; :b :c4300; :b :c4301; :b :c4302; :b :c4303; :b :c4304; :b :c4305; :b :c4306; :b :c4307; :b :c4308; :b :c4309; :b :c4310; :b :c4311; :b :c4312; :b :c4313; :b :c4314; :b :c4315; :b :c4316; :b :c4317; :b :c4318; :b :c4319; :b :c4320; :b :c4321; :b :c4322; :b :c4323; :b :c4324; :b :c4325; :b :c4326; :b :c4327; :b :c4328; :b :c4329; :b :c4330; :b :c4331; :b :c4332; :b :c4333; :b :c4334; :b :c4335; :b :c4336; :b :c4337; :b :c4338; :b :c4339; :b :c4340; :b :c4341; :b :c4342; :b :c4343; :b :c4344; :b :c4345; :b :c4346; :b :c4347; :b :c4348; :b :c4349; :b :c4350; :b :c4351; :b :c4352; :b :c4353; :b :c4354; :b :c4355; :b :c4356; :b :c4357; :b :c4358; :b :c4359; :b :c4360; :b :c4361; :b :c4362; :b :c4363; :b :c4364; :b :c4365; :b :c4366; :b :c4367; :b :c4368; :b :c4369; :b :c4370; :b :c4371; :b :c4372; :b :c4373; :b :c4374; :b :c4375; :b :c4376; :b :c4377; :b :c4378; :b :c4379; :b :c4380; :b :c4381; :b :c4382; :b :c4383; :b :c4384; :b :c4385; :b :c4386; :b :c4387; :b :c4388; :b :c4389; :b :c4390; :b :c4391; :b :c4392; :b :c4393; :b :c4394; :b :c4395; :b :c4396; :b :c4397; :b :c4398; :b :c4399; :b :c4400; :b :c4401; :b :c4402; :b :c4403; :b :c4404; :b :c4405; :b :c4406; :b :c4407; :b :c4408; :b :c4409; :b :c4410; :b :c4411; :b :c4412; :b :c4413; :b :c4414; :b :c4415; :b :c4416; :b :c4417; :b :c4418; :b :c4419; :b :c4420; :b :c4421; :b :c4422; :b :c4423; :b :c4424; :b :c4425; :b :c4426; :b :c4427; :b :c4428; :b :c4429; :b :c4430; :b :c4431; :b :c4432; :b :c4433; :b :c4434; :b :c4435; :b :c4436; :b :c4437; :b :c4438; :b :c4439; :b :c4440; :b :c4441; :b :c4442; :b :c4443; :b :c4444; :b :c4445; :b :c4446; :b :c4447; :b :c4448; :b :c4449; :b :c4450; :b :c4451; :b :c4452; :b :c4453; :b :c4454; :b :c4455; :b :c4456; :b :c4457; :b :c4458; :b :c4459; :b :c4460; :b :c4461; :b :c4462; :b :c4463; :b :c4464; :b :c4465; :b :c4466; :b :c4467; :b :c4468; :b :c4469; :b :c4470; :b :c4471; :b :c4472; :b :c4473; :b :c4474; :b :c4475; :b :c4476; :b :c4477; :b :c4478; :b :c4479; :b :c4480; :b :c4481; :b :c4482; :b :c4483; :b :c4484; :b :c4485; :b :c4486; :b :c4487; :b :c4488; :b :c4489; :b :c4490; :b :c4491; :b :c4492; :b :c4493; :b :c4494; :b :c4495; :b :c4496; :b :c4497; :b :c4498; :b :c4499; :b :c4500; :b :c4501; :b :c4502; :b :c4503; :b :c4504; :b :c4505; :b :c4506; :b :c4507; :b :c4508; :b :c4509; :b :c4510; :b :c4511; :b :c4512; :b :c4513; :b :c4514; :b :c4515; :b :c4516; :b :c4517; :b :c4518; :b :c4519; :b :c4520; :b :c4521; :b :c4522; :b :c4523; :b :c4524; :b :c4525; :b :c4526; :b :c4527; :b :c4528; :b :c4529; :b :c4530; :b :c4531; :b :c4532; :b :c4533; :b :c4534; :b :c4535; :b :c4536; :b :c4537; :b :c4538; :b :c4539; :b :c4540; :b :c4541; :b :c4542; :b :c4543; :b :c4544; :b :c4545; :b :c4546; :b :c4547; :b :c4548; :b :c4549; :b :c4550; :b :c4551; :b :c4552; :b :c4553; :b :c4554; :b :c4555; :b :c4556; :b :c4557; :b :c4558; :b :c4559; :b :c4560; :b :c4561; :b :c4562; :b :c4563; :b :c4564; :b :c4565; :b :c4566; :b :c4567; :b :c4568; :b :c4569; :b :c4570; :b :c4571; :b :c4572; :b :c4573; :b :c4574; :b :c4575; :b :c4576; :b :c4577; :b :c4578; :b :c4579; :b :c4580; :b :c4581; :b :c4582; :b :c4583; :b :c4584; :b :c4585; :b :c4586; :b :c4587; :b :c4588; :b :c4589; :b :c4590; :b :c4591; :b :c4592; :b :c4593; :b :c4594; :b :c4595; :b :c4596; :b :c4597; :b :c4598; :b :c4599; :b :c4600; :b :c4601; :b :c4602; :b :c4603; :b :c4604; :b :c4605; :b :c4606; :b :c4607; :b :c4608; :b :c4609; :b :c4610; :b :c4611; :b :c4612; :b :c4613; :b :c4614; :b :c4615; :b :c4616; :b :c4617; :b :c4618; :b :c4619; :b :c4620; :b :c4621; :b :c4622; :b :c4623; :b :c4624; :b :c4625; :b :c4626; :b :c4627; :b :c4628; :b :c4629; :b :c4630; :b :c4631; :b :c4632; :b :c4633; :b :c4634; :b :c4635; :b :c4636; :b :c4637; :b :c4638; :b :c4639; :b :c4640; :b :c4641; :b :c4642; :b :c4643; :b :c4644; :b :c4645; :b :c4646; :b :c4647; :b :c4648; :b :c4649; :b :c4650; :b :c4651; :b :c4652; :b :c4653; :b :c4654; :b :c4655; :b :c4656; :b :c4657; :b :c4658; :b :c4659; :b :c4660; :b :c4661; :b :c4662; :b :c4663; :b :c4664; :b :c4665; :b :c4666; :b :c4667; :b :c4668; :b :c4669; :b :c4670; :b :c4671; :b :c4672; :b :c4673; :b :c4674; :b :c4675; :b :c4676; :b :c4677; :b :c4678; :b :c4679; :b :c4680; :b :c4681; :b :c4682; :b :c4683; :b :c4684; :b :c4685; :b :c4686; :b :c4687; :b :c4688; :b :c4689; :b :c4690; :b :c4691; :b :c4692; :b :c4693; :b :c4694; :b :c4695; :b :c4696; :b :c4697; :b :c4698; :b :c4699; :b :c4700; :b :c4701; :b :c4702; :b :c4703; :b :c4704; :b :c4705; :b :c4706; :b :c4707; :b :c4708; :b :c4709; :b :c4710; :b :c4711; :b :c4712; :b :c4713; :b :c4714; :b :c4715; :b :c4716; :b :c4717; :b :c4718; :b :c4719; :b :c4720; :b :c4721; :b :c4722; :b :c4723; :b :c4724; :b :c4725; :b :c4726; :b :c4727; :b :c4728; :b :c4729; :b :c4730; :b :c4731; :b :c4732; :b :c4733; :b :c4734; :b :c4735; :b :c4736; :b :c4737; :b :c4738; :b :c4739; :b :c4740; :b :c4741; :b :c4742; :b :c4743; :b :c4744; :b :c4745; :b :c4746; :b :c4747; :b :c4748; :b :c4749; :b :c4750; :b :c4751; :b :c4752; :b :c4753; :b :c4754; :b :c4755; :b :c4756; :b :c4757; :b :c4758; :b :c4759; :b :c4760; :b :c4761; :b :c4762; :b :c4763; :b :c4764; :b :c4765; :b :c4766; :b :c4767; :b :c4768; :b :c4769; :b :c4770; :b :c4771; :b :c4772; :b :c4773; :b :c4774; :b :c4775; :b :c4776; :b :c4777; :b :c4778; :b :c4779; :b :c4780; :b :c4781; :b :c4782; :b :c4783; :b :c4784; :b :c4785; :b :c4786; :b :c4787; :b :c4788; :b :c4789; :b :c4790; :b :c4791; :b :c4792; :b :c4793; :b :c4794; :b :c4795; :b :c4796; :b :c4797; :b :c4798; :b :c4799; :b :c4800; :b :c4801; :b :c4802; :b :c4803; :b :c4804; :b :c4805; :b :c4806; :b :c4807; :b :c4808; :b :c4809; :b :c4810; :b :c4811; :b :c4812; :b :c4813; :b :c4814; :b :c4815; :b :c4816; :b :c4817; :b :c4818; :b :c4819; :b :c4820; :b :c4821; :b :c4822; :b :c4823; :b :c4824; :b :c4825; :b :c4826; :b :c4827; :b :c4828; :b :c4829; :b :c4830; :b :c4831; :b :c4832; :b :c4833; :b :c4834; :b :c4835; :b :c4836; :b :c4837; :b :c4838; :b :c4839; :b :c4840; :b :c4841; :b :c4842; :b :c4843; :b :c4844; :b :c4845; :b :c4846; :b :c4847; :b :c4848; :b :c4849; :b :c4850; :b :c4851; :b :c4852; :b :c4853; :b :c4854; :b :c4855; :b :c4856; :b :c4857; :b :c4858; :b :c4859; :b :c4860; :b :c4861; :b :c4862; :b :c4863; :b :c4864; :b :c4865; :b :c4866; :b :c4867; :b :c4868; :b :c4869; :b :c4870; :b :c4871; :b :c4872; :b :c4873; :b :c4874; :b :c4875; :b :c4876; :b :c4877; :b :c4878; :b :c4879; :b :c4880; :b :c4881; :b :c4882; :b :c4883; :b :c4884; :b :c4885; :b :c4886; :b :c4887; :b :c4888; :b :c4889; :b :c4890; :b :c4891; :b :c4892; :b :c4893; :b :c4894; :b :c4895; :b :c4896; :b :c4897; :b :c4898; :b :c4899; :b :c4900; :b :c4901; :b :c4902; :b :c4903; :b :c4904; :b :c4905; :b :c4906; :b :c4907; :b :c4908; :b :c4909; :b :c4910; :b :c4911; :b :c4912; :b :c4913; :b :c4914; :b :c4915; :b :c4916; :b :c4917; :b :c4918; :b :c4919; :b :c4920; :b :c4921; :b :c4922; :b :c4923; :b :c4924; :b :c4925; :b :c4926; :b :c4927; :b :c4928; :b :c4929; :b :c4930; :b :c4931; :b :c4932; :b :c4933; :b :c4934; :b :c4935; :b :c4936; :b :c4937; :b :c4938; :b :c4939; :b :c4940; :b :c4941; :b :c4942; :b :c4943; :b :c4944; :b :c4945; :b :c4946; :b :c4947; :b :c4948; :b :c4949; :b :c4950; :b :c4951; :b :c4952; :b :c4953; :b :c4954; :b :c4955; :b :c4956; :b :c4957; :b :c4958; :b :c4959; :b :c4960; :b :c4961; :b :c4962; :b :c4963; :b :c4964; :b :c4965; :b :c4966; :b :c4967; :b :c4968; :b :c4969; :b :c4970; :b :c4971; :b :c4972; :b :c4973; :b :c4974; :b :c4975; :b :c4976; :b :c4977; :b :c4978; :b :c4979; :b :c4980; :b :c4981; :b :c4982; :b :c4983; :b :c4984; :b :c4985; :b :c4986; :b :c4987; :b :c4988; :b :c4989; :b :c4990; :b :c4991; :b :c4992; :b :c4993; :b :c4994; :b :c4995; :b :c4996; :b :c4997; :b :c4998; :b :c4999; :b :c5000; :b :c5001; :b :c5002; :b :c5003; :b :c5004; :b :c5005; :b :c5006; :b :c5007; :b :c5008; :b :c5009; :b :c5010; :b :c5011; :b :c5012; :b :c5013; :b :c5014; :b :c5015; :b :c5016; :b :c5017; :b :c5018; :b :c5019; :b :c5020; :b :c5021; :b :c5022; :b :c5023; :b :c5024; :b :c5025; :b :c5026; :b :c5027; :b :c5028; :b :c5029; :b :c5030; :b :c5031; :b :c5032; :b :c5033; :b :c5034; :b :c5035; :b :c5036; :b :c5037; :b :c5038; :b :c5039; :b :c5040; :b :c5041; :b :c5042; :b :c5043; :b :c5044; :b :c5045; :b :c5046; :b :c5047; :b :c5048; :b :c5049; :b :c5050; :b :c5051; :b :c5052; :b :c5053; :b :c5054; :b :c5055; :b :c5056; :b :c5057; :b :c5058; :b :c5059; :b :c5060; :b :c5061; :b :c5062; :b :c5063; :b :c5064; :b :c5065; :b :c5066; :b :c5067; :b :c5068; :b :c5069; :b :c5070; :b :c5071; :b :c5072; :b :c5073; :b :c5074; :b :c5075; :b :c5076; :b :c5077; :b :c5078; :b :c5079; :b :c5080; :b :c5081; :b :c5082; :b :c5083; :b :c5084; :b :c5085; :b :c5086; :b :c5087; :b :c5088; :b :c5089; :b :c5090; :b :c5091; :b :c5092; :b :c5093; :b :c5094; :b :c5095; :b :c5096; :b :c5097; :b :c5098; :b :c5099; :b :c5100; :b :c5101; :b :c5102; :b :c5103; :b :c5104; :b :c5105; :b :c5106; :b :c5107; :b :c5108; :b :c5109; :b :c5110; :b :c5111; :b :c5112; :b :c5113; :b :c5114; :b :c5115; :b :c5116; :b :c5117; :b :c5118; :b :c5119; :b :c5120; :b :c5121; :b :c5122; :b :c5123; :b :c5124; :b :c5125; :b :c5126; :b :c5127; :b :c5128; :b :c5129; :b :c5130; :b :c5131; :b :c5132; :b :c5133; :b :c5134; :b :c5135; :b :c5136; :b :c5137; :b :c5138; :b :c5139; :b :c5140; :b :c5141; :b :c5142; :b :c5143; :b :c5144; :b :c5145; :b :c5146; :b :c5147; :b :c5148; :b :c5149; :b :c5150; :b :c5151; :b :c5152; :b :c5153; :b :c5154; :b :c5155; :b :c5156; :b :c5157; :b :c5158; :b :c5159; :b :c5160; :b :c5161; :b :c5162; :b :c5163; :b :c5164; :b :c5165; :b :c5166; :b :c5167; :b :c5168; :b :c5169; :b :c5170; :b :c5171; :b :c5172; :b :c5173; :b :c5174; :b :c5175; :b :c5176; :b :c5177; :b :c5178; :b :c5179; :b :c5180; :b :c5181; :b :c5182; :b :c5183; :b :c5184; :b :c5185; :b :c5186; :b :c5187; :b :c5188; :b :c5189; :b :c5190; :b :c5191; :b :c5192; :b :c5193; :b :c5194; :b :c5195; :b :c5196; :b :c5197; :b :c5198; :b :c5199; :b :c5200; :b :c5201; :b :c5202; :b :c5203; :b :c5204; :b :c5205; :b :c5206; :b :c5207; :b :c5208; :b :c5209; :b :c5210; :b :c5211; :b :c5212; :b :c5213; :b :c5214; :b :c5215; :b :c5216; :b :c5217; :b :c5218; :b :c5219; :b :c5220; :b :c5221; :b :c5222; :b :c5223; :b :c5224; :b :c5225; :b :c5226; :b :c5227; :b :c5228; :b :c5229; :b :c5230; :b :c5231; :b :c5232; :b :c5233; :b :c5234; :b :c5235; :b :c5236; :b :c5237; :b :c5238; :b :c5239; :b :c5240; :b :c5241; :b :c5242; :b :c5243; :b :c5244; :b :c5245; :b :c5246; :b :c5247; :b :c5248; :b :c5249; :b :c5250; :b :c5251; :b :c5252; :b :c5253; :b :c5254; :b :c5255; :b :c5256; :b :c5257; :b :c5258; :b :c5259; :b :c5260; :b :c5261; :b :c5262; :b :c5263; :b :c5264; :b :c5265; :b :c5266; :b :c5267; :b :c5268; :b :c5269; :b :c5270; :b :c5271; :b :c5272; :b :c5273; :b :c5274; :b :c5275; :b :c5276; :b :c5277; :b :c5278; :b :c5279; :b :c5280; :b :c5281; :b :c5282; :b :c5283; :b :c5284; :b :c5285; :b :c5286; :b :c5287; :b :c5288; :b :c5289; :b :c5290; :b :c5291; :b :c5292; :b :c5293; :b :c5294; :b :c5295; :b :c5296; :b :c5297; :b :c5298; :b :c5299; :b :c5300; :b :c5301; :b :c5302; :b :c5303; :b :c5304; :b :c5305; :b :c5306; :b :c5307; :b :c5308; :b :c5309; :b :c5310; :b :c5311; :b :c5312; :b :c5313; :b :c5314; :b :c5315; :b :c5316; :b :c5317; :b :c5318; :b :c5319; :b :c5320; :b :c5321; :b :c5322; :b :c5323; :b :c5324; :b :c5325; :b :c5326; :b :c5327; :b :c5328; :b :c5329; :b :c5330; :b :c5331; :b :c5332; :b :c5333; :b :c5334; :b :c5335; :b :c5336; :b :c5337; :b :c5338; :b :c5339; :b :c5340; :b :c5341; :b :c5342; :b :c5343; :b :c5344; :b :c5345; :b :c5346; :b :c5347; :b :c5348; :b :c5349; :b :c5350; :b :c5351; :b :c5352; :b :c5353; :b :c5354; :b :c5355; :b :c5356; :b :c5357; :b :c5358; :b :c5359; :b :c5360; :b :c5361; :b :c5362; :b :c5363; :b :c5364; :b :c5365; :b :c5366; :b :c5367; :b :c5368; :b :c5369; :b :c5370; :b :c5371; :b :c5372; :b :c5373; :b :c5374; :b :c5375; :b :c5376; :b :c5377; :b :c5378; :b :c5379; :b :c5380; :b :c5381; :b :c5382; :b :c5383; :b :c5384; :b :c5385; :b :c5386; :b :c5387; :b :c5388; :b :c5389; :b :c5390; :b :c5391; :b :c5392; :b :c5393; :b :c5394; :b :c5395; :b :c5396; :b :c5397; :b :c5398; :b :c5399; :b :c5400; :b :c5401; :b :c5402; :b :c5403; :b :c5404; :b :c5405; :b :c5406; :b :c5407; :b :c5408; :b :c5409; :b :c5410; :b :c5411; :b :c5412; :b :c5413; :b :c5414; :b :c5415; :b :c5416; :b :c5417; :b :c5418; :b :c5419; :b :c5420; :b :c5421; :b :c5422; :b :c5423; :b :c5424; :b :c5425; :b :c5426; :b :c5427; :b :c5428; :b :c5429; :b :c5430; :b :c5431; :b :c5432; :b :c5433; :b :c5434; :b :c5435; :b :c5436; :b :c5437; :b :c5438; :b :c5439; :b :c5440; :b :c5441; :b :c5442; :b :c5443; :b :c5444; :b :c5445; :b :c5446; :b :c5447; :b :c5448; :b :c5449; :b :c5450; :b :c5451; :b :c5452; :b :c5453; :b :c5454; :b :c5455; :b :c5456; :b :c5457; :b :c5458; :b :c5459; :b :c5460; :b :c5461; :b :c5462; :b :c5463; :b :c5464; :b :c5465; :b :c5466; :b :c5467; :b :c5468; :b :c5469; :b :c5470; :b :c5471; :b :c5472; :b :c5473; :b :c5474; :b :c5475; :b :c5476; :b :c5477; :b :c5478; :b :c5479; :b :c5480; :b :c5481; :b :c5482; :b :c5483; :b :c5484; :b :c5485; :b :c5486; :b :c5487; :b :c5488; :b :c5489; :b :c5490; :b :c5491; :b :c5492; :b :c5493; :b :c5494; :b :c5495; :b :c5496; :b :c5497; :b :c5498; :b :c5499; :b :c5500; :b :c5501; :b :c5502; :b :c5503; :b :c5504; :b :c5505; :b :c5506; :b :c5507; :b :c5508; :b :c5509; :b :c5510; :b :c5511; :b :c5512; :b :c5513; :b :c5514; :b :c5515; :b :c5516; :b :c5517; :b :c5518; :b :c5519; :b :c5520; :b :c5521; :b :c5522; :b :c5523; :b :c5524; :b :c5525; :b :c5526; :b :c5527; :b :c5528; :b :c5529; :b :c5530; :b :c5531; :b :c5532; :b :c5533; :b :c5534; :b :c5535; :b :c5536; :b :c5537; :b :c5538; :b :c5539; :b :c5540; :b :c5541; :b :c5542; :b :c5543; :b :c5544; :b :c5545; :b :c5546; :b :c5547; :b :c5548; :b :c5549; :b :c5550; :b :c5551; :b :c5552; :b :c5553; :b :c5554; :b :c5555; :b :c5556; :b :c5557; :b :c5558; :b :c5559; :b :c5560; :b :c5561; :b :c5562; :b :c5563; :b :c5564; :b :c5565; :b :c5566; :b :c5567; :b :c5568; :b :c5569; :b :c5570; :b :c5571; :b :c5572; :b :c5573; :b :c5574; :b :c5575; :b :c5576; :b :c5577; :b :c5578; :b :c5579; :b :c5580; :b :c5581; :b :c5582; :b :c5583; :b :c5584; :b :c5585; :b :c5586; :b :c5587; :b :c5588; :b :c5589; :b :c5590; :b :c5591; :b :c5592; :b :c5593; :b :c5594; :b :c5595; :b :c5596; :b :c5597; :b :c5598; :b :c5599; :b :c5600; :b :c5601; :b :c5602; :b :c5603; :b :c5604; :b :c5605; :b :c5606; :b :c5607; :b :c5608; :b :c5609; :b :c5610; :b :c5611; :b :c5612; :b :c5613; :b :c5614; :b :c5615; :b :c5616; :b :c5617; :b :c5618; :b :c5619; :b :c5620; :b :c5621; :b :c5622; :b :c5623; :b :c5624; :b :c5625; :b :c5626; :b :c5627; :b :c5628; :b :c5629; :b :c5630; :b :c5631; :b :c5632; :b :c5633; :b :c5634; :b :c5635; :b :c5636; :b :c5637; :b :c5638; :b :c5639; :b :c5640; :b :c5641; :b :c5642; :b :c5643; :b :c5644; :b :c5645; :b :c5646; :b :c5647; :b :c5648; :b :c5649; :b :c5650; :b :c5651; :b :c5652; :b :c5653; :b :c5654; :b :c5655; :b :c5656; :b :c5657; :b :c5658; :b :c5659; :b :c5660; :b :c5661; :b :c5662; :b :c5663; :b :c5664; :b :c5665; :b :c5666; :b :c5667; :b :c5668; :b :c5669; :b :c5670; :b :c5671; :b :c5672; :b :c5673; :b :c5674; :b :c5675; :b :c5676; :b :c5677; :b :c5678; :b :c5679; :b :c5680; :b :c5681; :b :c5682; :b :c5683; :b :c5684; :b :c5685; :b :c5686; :b :c5687; :b :c5688; :b :c5689; :b :c5690; :b :c5691; :b :c5692; :b :c5693; :b :c5694; :b :c5695; :b :c5696; :b :c5697; :b :c5698; :b :c5699; :b :c5700; :b :c5701; :b :c5702; :b :c5703; :b :c5704; :b :c5705; :b :c5706; :b :c5707; :b :c5708; :b :c5709; :b :c5710; :b :c5711; :b :c5712; :b :c5713; :b :c5714; :b :c5715; :b :c5716; :b :c5717; :b :c5718; :b :c5719; :b :c5720; :b :c5721; :b :c5722; :b :c5723; :b :c5724; :b :c5725; :b :c5726; :b :c5727; :b :c5728; :b :c5729; :b :c5730; :b :c5731; :b :c5732; :b :c5733; :b :c5734; :b :c5735; :b :c5736; :b :c5737; :b :c5738; :b :c5739; :b :c5740; :b :c5741; :b :c5742; :b :c5743; :b :c5744; :b :c5745; :b :c5746; :b :c5747; :b :c5748; :b :c5749; :b :c5750; :b :c5751; :b :c5752; :b :c5753; :b :c5754; :b :c5755; :b :c5756; :b :c5757; :b :c5758; :b :c5759; :b :c5760; :b :c5761; :b :c5762; :b :c5763; :b :c5764; :b :c5765; :b :c5766; :b :c5767; :b :c5768; :b :c5769; :b :c5770; :b :c5771; :b :c5772; :b :c5773; :b :c5774; :b :c5775; :b :c5776; :b :c5777; :b :c5778; :b :c5779; :b :c5780; :b :c5781; :b :c5782; :b :c5783; :b :c5784; :b :c5785; :b :c5786; :b :c5787; :b :c5788; :b :c5789; :b :c5790; :b :c5791; :b :c5792; :b :c5793; :b :c5794; :b :c5795; :b :c5796; :b :c5797; :b :c5798; :b :c5799; :b :c5800; :b :c5801; :b :c5802; :b :c5803; :b :c5804; :b :c5805; :b :c5806; :b :c5807; :b :c5808; :b :c5809; :b :c5810; :b :c5811; :b :c5812; :b :c5813; :b :c5814; :b :c5815; :b :c5816; :b :c5817; :b :c5818; :b :c5819; :b :c5820; :b :c5821; :b :c5822; :b :c5823; :b :c5824; :b :c5825; :b :c5826; :b :c5827; :b :c5828; :b :c5829; :b :c5830; :b :c5831; :b :c5832; :b :c5833; :b :c5834; :b :c5835; :b :c5836; :b :c5837; :b :c5838; :b :c5839; :b :c5840; :b :c5841; :b :c5842; :b :c5843; :b :c5844; :b :c5845; :b :c5846; :b :c5847; :b :c5848; :b :c5849; :b :c5850; :b :c5851; :b :c5852; :b :c5853; :b :c5854; :b :c5855; :b :c5856; :b :c5857; :b :c5858; :b :c5859; :b :c5860; :b :c5861; :b :c5862; :b :c5863; :b :c5864; :b :c5865; :b :c5866; :b :c5867; :b :c5868; :b :c5869; :b :c5870; :b :c5871; :b :c5872; :b :c5873; :b :c5874; :b :c5875; :b :c5876; :b :c5877; :b :c5878; :b :c5879; :b :c5880; :b :c5881; :b :c5882; :b :c5883; :b :c5884; :b :c5885; :b :c5886; :b :c5887; :b :c5888; :b :c5889; :b :c5890; :b :c5891; :b :c5892; :b :c5893; :b :c5894; :b :c5895; :b :c5896; :b :c5897; :b :c5898; :b :c5899; :b :c5900; :b :c5901; :b :c5902; :b :c5903; :b :c5904; :b :c5905; :b :c5906; :b :c5907; :b :c5908; :b :c5909; :b :c5910; :b :c5911; :b :c5912; :b :c5913; :b :c5914; :b :c5915; :b :c5916; :b :c5917; :b :c5918; :b :c5919; :b :c5920; :b :c5921; :b :c5922; :b :c5923; :b :c5924; :b :c5925; :b :c5926; :b :c5927; :b :c5928; :b :c5929; :b :c5930; :b :c5931; :b :c5932; :b :c5933; :b :c5934; :b :c5935; :b :c5936; :b :c5937; :b :c5938; :b :c5939; :b :c5940; :b :c5941; :b :c5942; :b :c5943; :b :c5944; :b :c5945; :b :c5946; :b :c5947; :b :c5948; :b :c5949; :b :c5950; :b :c5951; :b :c5952; :b :c5953; :b :c5954; :b :c5955; :b :c5956; :b :c5957; :b :c5958; :b :c5959; :b :c5960; :b :c5961; :b :c5962; :b :c5963; :b :c5964; :b :c5965; :b :c5966; :b :c5967; :b :c5968; :b :c5969; :b :c5970; :b :c5971; :b :c5972; :b :c5973; :b :c5974; :b :c5975; :b :c5976; :b :c5977; :b :c5978; :b :c5979; :b :c5980; :b :c5981; :b :c5982; :b :c5983; :b :c5984; :b :c5985; :b :c5986; :b :c5987; :b :c5988; :b :c5989; :b :c5990; :b :c5991; :b :c5992; :b :c5993; :b :c5994; :b :c5995; :b :c5996; :b :c5997; :b :c5998; :b :c5999; :b :c6000; :b :c6001; :b :c6002; :b :c6003; :b :c6004; :b :c6005; :b :c6006; :b :c6007; :b :c6008; :b :c6009; :b :c6010; :b :c6011; :b :c6012; :b :c6013; :b :c6014; :b :c6015; :b :c6016; :b :c6017; :b :c6018; :b :c6019; :b :c6020; :b :c6021; :b :c6022; :b :c6023; :b :c6024; :b :c6025; :b :c6026; :b :c6027; :b :c6028; :b :c6029; :b :c6030; :b :c6031; :b :c6032; :b :c6033; :b :c6034; :b :c6035; :b :c6036; :b :c6037; :b :c6038; :b :c6039; :b :c6040; :b :c6041; :b :c6042; :b :c6043; :b :c6044; :b :c6045; :b :c6046; :b :c6047; :b :c6048; :b :c6049; :b :c6050; :b :c6051; :b :c6052; :b :c6053; :b :c6054; :b :c6055; :b :c6056; :b :c6057; :b :c6058; :b :c6059; :b :c6060; :b :c6061; :b :c6062; :b :c6063; :b :c6064; :b :c6065; :b :c6066; :b :c6067; :b :c6068; :b :c6069; :b :c6070; :b :c6071; :b :c6072; :b :c6073; :b :c6074; :b :c6075; :b :c6076; :b :c6077; :b :c6078; :b :c6079; :b :c6080; :b :c6081; :b :c6082; :b :c6083; :b :c6084; :b :c6085; :b :c6086; :b :c6087; :b :c6088; :b :c6089; :b :c6090; :b :c6091; :b :c6092; :b :c6093; :b :c6094; :b :c6095; :b :c6096; :b :c6097; :b :c6098; :b :c6099; :b :c6100; :b :c6101; :b :c6102; :b :c6103; :b :c6104; :b :c6105; :b :c6106; :b :c6107; :b :c6108; :b :c6109; :b :c6110; :b :c6111; :b :c6112; :b :c6113; :b :c6114; :b :c6115; :b :c6116; :b :c6117; :b :c6118; :b :c6119; :b :c6120; :b :c6121; :b :c6122; :b :c6123; :b :c6124; :b :c6125; :b :c6126; :b :c6127; :b :c6128; :b :c6129; :b :c6130; :b :c6131; :b :c6132; :b :c6133; :b :c6134; :b :c6135; :b :c6136; :b :c6137; :b :c6138; :b :c6139; :b :c6140; :b :c6141; :b :c6142; :b :c6143; :b :c6144; :b :c6145; :b :c6146; :b :c6147; :b :c6148; :b :c6149; :b :c6150; :b :c6151; :b :c6152; :b :c6153; :b :c6154; :b :c6155; :b :c6156; :b :c6157; :b :c6158; :b :c6159; :b :c6160; :b :c6161; :b :c6162; :b :c6163; :b :c6164; :b :c6165; :b :c6166; :b :c6167; :b :c6168; :b :c6169; :b :c6170; :b :c6171; :b :c6172; :b :c6173; :b :c6174; :b :c6175; :b :c6176; :b :c6177; :b :c6178; :b :c6179; :b :c6180; :b :c6181; :b :c6182; :b :c6183; :b :c6184; :b :c6185; :b :c6186; :b :c6187; :b :c6188; :b :c6189; :b :c6190; :b :c6191; :b :c6192; :b :c6193; :b :c6194; :b :c6195; :b :c6196; :b :c6197; :b :c6198; :b :c6199; :b :c6200; :b :c6201; :b :c6202; :b :c6203; :b :c6204; :b :c6205; :b :c6206; :b :c6207; :b :c6208; :b :c6209; :b :c6210; :b :c6211; :b :c6212; :b :c6213; :b :c6214; :b :c6215; :b :c6216; :b :c6217; :b :c6218; :b :c6219; :b :c6220; :b :c6221; :b :c6222; :b :c6223; :b :c6224; :b :c6225; :b :c6226; :b :c6227; :b :c6228; :b :c6229; :b :c6230; :b :c6231; :b :c6232; :b :c6233; :b :c6234; :b :c6235; :b :c6236; :b :c6237; :b :c6238; :b :c6239; :b :c6240; :b :c6241; :b :c6242; :b :c6243; :b :c6244; :b :c6245; :b :c6246; :b :c6247; :b :c6248; :b :c6249; :b :c6250; :b :c6251; :b :c6252; :b :c6253; :b :c6254; :b :c6255; :b :c6256; :b :c6257; :b :c6258; :b :c6259; :b :c6260; :b :c6261; :b :c6262; :b :c6263; :b :c6264; :b :c6265; :b :c6266; :b :c6267; :b :c6268; :b :c6269; :b :c6270; :b :c6271; :b :c6272; :b :c6273; :b :c6274; :b :c6275; :b :c6276; :b :c6277; :b :c6278; :b :c6279; :b :c6280; :b :c6281; :b :c6282; :b :c6283; :b :c6284; :b :c6285; :b :c6286; :b :c6287; :b :c6288; :b :c6289; :b :c6290; :b :c6291; :b :c6292; :b :c6293; :b :c6294; :b :c6295; :b :c6296; :b :c6297; :b :c6298; :b :c6299; :b :c6300; :b :c6301; :b :c6302; :b :c6303; :b :c6304; :b :c6305; :b :c6306; :b :c6307; :b :c6308; :b :c6309; :b :c6310; :b :c6311; :b :c6312; :b :c6313; :b :c6314; :b :c6315; :b :c6316; :b :c6317; :b :c6318; :b :c6319; :b :c6320; :b :c6321; :b :c6322; :b :c6323; :b :c6324; :b :c6325; :b :c6326; :b :c6327; :b :c6328; :b :c6329; :b :c6330; :b :c6331; :b :c6332; :b :c6333; :b :c6334; :b :c6335; :b :c6336; :b :c6337; :b :c6338; :b :c6339; :b :c6340; :b :c6341; :b :c6342; :b :c6343; :b :c6344; :b :c6345; :b :c6346; :b :c6347; :b :c6348; :b :c6349; :b :c6350; :b :c6351; :b :c6352; :b :c6353; :b :c6354; :b :c6355; :b :c6356; :b :c6357; :b :c6358; :b :c6359; :b :c6360; :b :c6361; :b :c6362; :b :c6363; :b :c6364; :b :c6365; :b :c6366; :b :c6367; :b :c6368; :b :c6369; :b :c6370; :b :c6371; :b :c6372; :b :c6373; :b :c6374; :b :c6375; :b :c6376; :b :c6377; :b :c6378; :b :c6379; :b :c6380; :b :c6381; :b :c6382; :b :c6383; :b :c6384; :b :c6385; :b :c6386; :b :c6387; :b :c6388; :b :c6389; :b :c6390; :b :c6391; :b :c6392; :b :c6393; :b :c6394; :b :c6395; :b :c6396; :b :c6397; :b :c6398; :b :c6399; :b :c6400; :b :c6401; :b :c6402; :b :c6403; :b :c6404; :b :c6405; :b :c6406; :b :c6407; :b :c6408; :b :c6409; :b :c6410; :b :c6411; :b :c6412; :b :c6413; :b :c6414; :b :c6415; :b :c6416; :b :c6417; :b :c6418; :b :c6419; :b :c6420; :b :c6421; :b :c6422; :b :c6423; :b :c6424; :b :c6425; :b :c6426; :b :c6427; :b :c6428; :b :c6429; :b :c6430; :b :c6431; :b :c6432; :b :c6433; :b :c6434; :b :c6435; :b :c6436; :b :c6437; :b :c6438; :b :c6439; :b :c6440; :b :c6441; :b :c6442; :b :c6443; :b :c6444; :b :c6445; :b :c6446; :b :c6447; :b :c6448; :b :c6449; :b :c6450; :b :c6451; :b :c6452; :b :c6453; :b :c6454; :b :c6455; :b :c6456; :b :c6457; :b :c6458; :b :c6459; :b :c6460; :b :c6461; :b :c6462; :b :c6463; :b :c6464; :b :c6465; :b :c6466; :b :c6467; :b :c6468; :b :c6469; :b :c6470; :b :c6471; :b :c6472; :b :c6473; :b :c6474; :b :c6475; :b :c6476; :b :c6477; :b :c6478; :b :c6479; :b :c6480; :b :c6481; :b :c6482; :b :c6483; :b :c6484; :b :c6485; :b :c6486; :b :c6487; :b :c6488; :b :c6489; :b :c6490; :b :c6491; :b :c6492; :b :c6493; :b :c6494; :b :c6495; :b :c6496; :b :c6497; :b :c6498; :b :c6499; :b :c6500; :b :c6501; :b :c6502; :b :c6503; :b :c6504; :b :c6505; :b :c6506; :b :c6507; :b :c6508; :b :c6509; :b :c6510; :b :c6511; :b :c6512; :b :c6513; :b :c6514; :b :c6515; :b :c6516; :b :c6517; :b :c6518; :b :c6519; :b :c6520; :b :c6521; :b :c6522; :b :c6523; :b :c6524; :b :c6525; :b :c6526; :b :c6527; :b :c6528; :b :c6529; :b :c6530; :b :c6531; :b :c6532; :b :c6533; :b :c6534; :b :c6535; :b :c6536; :b :c6537; :b :c6538; :b :c6539; :b :c6540; :b :c6541; :b :c6542; :b :c6543; :b :c6544; :b :c6545; :b :c6546; :b :c6547; :b :c6548; :b :c6549; :b :c6550; :b :c6551; :b :c6552; :b :c6553; :b :c6554; :b :c6555; :b :c6556; :b :c6557; :b :c6558; :b :c6559; :b :c6560; :b :c6561; :b :c6562; :b :c6563; :b :c6564; :b :c6565; :b :c6566; :b :c6567; :b :c6568; :b :c6569; :b :c6570; :b :c6571; :b :c6572; :b :c6573; :b :c6574; :b :c6575; :b :c6576; :b :c6577; :b :c6578; :b :c6579; :b :c6580; :b :c6581; :b :c6582; :b :c6583; :b :c6584; :b :c6585; :b :c6586; :b :c6587; :b :c6588; :b :c6589; :b :c6590; :b :c6591; :b :c6592; :b :c6593; :b :c6594; :b :c6595; :b :c6596; :b :c6597; :b :c6598; :b :c6599; :b :c6600; :b :c6601; :b :c6602; :b :c6603; :b :c6604; :b :c6605; :b :c6606; :b :c6607; :b :c6608; :b :c6609; :b :c6610; :b :c6611; :b :c6612; :b :c6613; :b :c6614; :b :c6615; :b :c6616; :b :c6617; :b :c6618; :b :c6619; :b :c6620; :b :c6621; :b :c6622; :b :c6623; :b :c6624; :b :c6625; :b :c6626; :b :c6627; :b :c6628; :b :c6629; :b :c6630; :b :c6631; :b :c6632; :b :c6633; :b :c6634; :b :c6635; :b :c6636; :b :c6637; :b :c6638; :b :c6639; :b :c6640; :b :c6641; :b :c6642; :b :c6643; :b :c6644; :b :c6645; :b :c6646; :b :c6647; :b :c6648; :b :c6649; :b :c6650; :b :c6651; :b :c6652; :b :c6653; :b :c6654; :b :c6655; :b :c6656; :b :c6657; :b :c6658; :b :c6659; :b :c6660; :b :c6661; :b :c6662; :b :c6663; :b :c6664; :b :c6665; :b :c6666; :b :c6667; :b :c6668; :b :c6669; :b :c6670; :b :c6671; :b :c6672; :b :c6673; :b :c6674; :b :c6675; :b :c6676; :b :c6677; :b :c6678; :b :c6679; :b :c6680; :b :c6681; :b :c6682; :b :c6683; :b :c6684; :b :c6685; :b :c6686; :b :c6687; :b :c6688; :b :c6689; :b :c6690; :b :c6691; :b :c6692; :b :c6693; :b :c6694; :b :c6695; :b :c6696; :b :c6697; :b :c6698; :b :c6699; :b :c6700; :b :c6701; :b :c6702; :b :c6703; :b :c6704; :b :c6705; :b :c6706; :b :c6707; :b :c6708; :b :c6709; :b :c6710; :b :c6711; :b :c6712; :b :c6713; :b :c6714; :b :c6715; :b :c6716; :b :c6717; :b :c6718; :b :c6719; :b :c6720; :b :c6721; :b :c6722; :b :c6723; :b :c6724; :b :c6725; :b :c6726; :b :c6727; :b :c6728; :b :c6729; :b :c6730; :b :c6731; :b :c6732; :b :c6733; :b :c6734; :b :c6735; :b :c6736; :b :c6737; :b :c6738; :b :c6739; :b :c6740; :b :c6741; :b :c6742; :b :c6743; :b :c6744; :b :c6745; :b :c6746; :b :c6747; :b :c6748; :b :c6749; :b :c6750; :b :c6751; :b :c6752; :b :c6753; :b :c6754; :b :c6755; :b :c6756; :b :c6757; :b :c6758; :b :c6759; :b :c6760; :b :c6761; :b :c6762; :b :c6763; :b :c6764; :b :c6765; :b :c6766; :b :c6767; :b :c6768; :b :c6769; :b :c6770; :b :c6771; :b :c6772; :b :c6773; :b :c6774; :b :c6775; :b :c6776; :b :c6777; :b :c6778; :b :c6779; :b :c6780; :b :c6781; :b :c6782; :b :c6783; :b :c6784; :b :c6785; :b :c6786; :b :c6787; :b :c6788; :b :c6789; :b :c6790; :b :c6791; :b :c6792; :b :c6793; :b :c6794; :b :c6795; :b :c6796; :b :c6797; :b :c6798; :b :c6799; :b :c6800; :b :c6801; :b :c6802; :b :c6803; :b :c6804; :b :c6805; :b :c6806; :b :c6807; :b :c6808; :b :c6809; :b :c6810; :b :c6811; :b :c6812; :b :c6813; :b :c6814; :b :c6815; :b :c6816; :b :c6817; :b :c6818; :b :c6819; :b :c6820; :b :c6821; :b :c6822; :b :c6823; :b :c6824; :b :c6825; :b :c6826; :b :c6827; :b :c6828; :b :c6829; :b :c6830; :b :c6831; :b :c6832; :b :c6833; :b :c6834; :b :c6835; :b :c6836; :b :c6837; :b :c6838; :b :c6839; :b :c6840; :b :c6841; :b :c6842; :b :c6843; :b :c6844; :b :c6845; :b :c6846; :b :c6847; :b :c6848; :b :c6849; :b :c6850; :b :c6851; :b :c6852; :b :c6853; :b :c6854; :b :c6855; :b :c6856; :b :c6857; :b :c6858; :b :c6859; :b :c6860; :b :c6861; :b :c6862; :b :c6863; :b :c6864; :b :c6865; :b :c6866; :b :c6867; :b :c6868; :b :c6869; :b :c6870; :b :c6871; :b :c6872; :b :c6873; :b :c6874; :b :c6875; :b :c6876; :b :c6877; :b :c6878; :b :c6879; :b :c6880; :b :c6881; :b :c6882; :b :c6883; :b :c6884; :b :c6885; :b :c6886; :b :c6887; :b :c6888; :b :c6889; :b :c6890; :b :c6891; :b :c6892; :b :c6893; :b :c6894; :b :c6895; :b :c6896; :b :c6897; :b :c6898; :b :c6899; :b :c6900; :b :c6901; :b :c6902; :b :c6903; :b :c6904; :b :c6905; :b :c6906; :b :c6907; :b :c6908; :b :c6909; :b :c6910; :b :c6911; :b :c6912; :b :c6913; :b :c6914; :b :c6915; :b :c6916; :b :c6917; :b :c6918; :b :c6919; :b :c6920; :b :c6921; :b :c6922; :b :c6923; :b :c6924; :b :c6925; :b :c6926; :b :c6927; :b :c6928; :b :c6929; :b :c6930; :b :c6931; :b :c6932; :b :c6933; :b :c6934; :b :c6935; :b :c6936; :b :c6937; :b :c6938; :b :c6939; :b :c6940; :b :c6941; :b :c6942; :b :c6943; :b :c6944; :b :c6945; :b :c6946; :b :c6947; :b :c6948; :b :c6949; :b :c6950; :b :c6951; :b :c6952; :b :c6953; :b :c6954; :b :c6955; :b :c6956; :b :c6957; :b :c6958; :b :c6959; :b :c6960; :b :c6961; :b :c6962; :b :c6963; :b :c6964; :b :c6965; :b :c6966; :b :c6967; :b :c6968; :b :c6969; :b :c6970; :b :c6971; :b :c6972; :b :c6973; :b :c6974; :b :c6975; :b :c6976; :b :c6977; :b :c6978; :b :c6979; :b :c6980; :b :c6981; :b :c6982; :b :c6983; :b :c6984; :b :c6985; :b :c6986; :b :c6987; :b :c6988; :b :c6989; :b :c6990; :b :c6991; :b :c6992; :b :c6993; :b :c6994; :b :c6995; :b :c6996; :b :c6997; :b :c6998; :b :c6999; :b :c7000; :b :c7001; :b :c7002; :b :c7003; :b :c7004; :b :c7005; :b :c7006; :b :c7007; :b :c7008; :b :c7009; :b :c7010; :b :c7011; :b :c7012; :b :c7013; :b :c7014; :b :c7015; :b :c7016; :b :c7017; :b :c7018; :b :c7019; :b :c7020; :b :c7021; :b :c7022; :b :c7023; :b :c7024; :b :c7025; :b :c7026; :b :c7027; :b :c7028; :b :c7029; :b :c7030; :b :c7031; :b :c7032; :b :c7033; :b :c7034; :b :c7035; :b :c7036; :b :c7037; :b :c7038; :b :c7039; :b :c7040; :b :c7041; :b :c7042; :b :c7043; :b :c7044; :b :c7045; :b :c7046; :b :c7047; :b :c7048; :b :c7049; :b :c7050; :b :c7051; :b :c7052; :b :c7053; :b :c7054; :b :c7055; :b :c7056; :b :c7057; :b :c7058; :b :c7059; :b :c7060; :b :c7061; :b :c7062; :b :c7063; :b :c7064; :b :c7065; :b :c7066; :b :c7067; :b :c7068; :b :c7069; :b :c7070; :b :c7071; :b :c7072; :b :c7073; :b :c7074; :b :c7075; :b :c7076; :b :c7077; :b :c7078; :b :c7079; :b :c7080; :b :c7081; :b :c7082; :b :c7083; :b :c7084; :b :c7085; :b :c7086; :b :c7087; :b :c7088; :b :c7089; :b :c7090; :b :c7091; :b :c7092; :b :c7093; :b :c7094; :b :c7095; :b :c7096; :b :c7097; :b :c7098; :b :c7099; :b :c7100; :b :c7101; :b :c7102; :b :c7103; :b :c7104; :b :c7105; :b :c7106; :b :c7107; :b :c7108; :b :c7109; :b :c7110; :b :c7111; :b :c7112; :b :c7113; :b :c7114; :b :c7115; :b :c7116; :b :c7117; :b :c7118; :b :c7119; :b :c7120; :b :c7121; :b :c7122; :b :c7123; :b :c7124; :b :c7125; :b :c7126; :b :c7127; :b :c7128; :b :c7129; :b :c7130; :b :c7131; :b :c7132; :b :c7133; :b :c7134; :b :c7135; :b :c7136; :b :c7137; :b :c7138; :b :c7139; :b :c7140; :b :c7141; :b :c7142; :b :c7143; :b :c7144; :b :c7145; :b :c7146; :b :c7147; :b :c7148; :b :c7149; :b :c7150; :b :c7151; :b :c7152; :b :c7153; :b :c7154; :b :c7155; :b :c7156; :b :c7157; :b :c7158; :b :c7159; :b :c7160; :b :c7161; :b :c7162; :b :c7163; :b :c7164; :b :c7165; :b :c7166; :b :c7167; :b :c7168; :b :c7169; :b :c7170; :b :c7171; :b :c7172; :b :c7173; :b :c7174; :b :c7175; :b :c7176; :b :c7177; :b :c7178; :b :c7179; :b :c7180; :b :c7181; :b :c7182; :b :c7183; :b :c7184; :b :c7185; :b :c7186; :b :c7187; :b :c7188; :b :c7189; :b :c7190; :b :c7191; :b :c7192; :b :c7193; :b :c7194; :b :c7195; :b :c7196; :b :c7197; :b :c7198; :b :c7199; :b :c7200; :b :c7201; :b :c7202; :b :c7203; :b :c7204; :b :c7205; :b :c7206; :b :c7207; :b :c7208; :b :c7209; :b :c7210; :b :c7211; :b :c7212; :b :c7213; :b :c7214; :b :c7215; :b :c7216; :b :c7217; :b :c7218; :b :c7219; :b :c7220; :b :c7221; :b :c7222; :b :c7223; :b :c7224; :b :c7225; :b :c7226; :b :c7227; :b :c7228; :b :c7229; :b :c7230; :b :c7231; :b :c7232; :b :c7233; :b :c7234; :b :c7235; :b :c7236; :b :c7237; :b :c7238; :b :c7239; :b :c7240; :b :c7241; :b :c7242; :b :c7243; :b :c7244; :b :c7245; :b :c7246; :b :c7247; :b :c7248; :b :c7249; :b :c7250; :b :c7251; :b :c7252; :b :c7253; :b :c7254; :b :c7255; :b :c7256; :b :c7257; :b :c7258; :b :c7259; :b :c7260; :b :c7261; :b :c7262; :b :c7263; :b :c7264; :b :c7265; :b :c7266; :b :c7267; :b :c7268; :b :c7269; :b :c7270; :b :c7271; :b :c7272; :b :c7273; :b :c7274; :b :c7275; :b :c7276; :b :c7277; :b :c7278; :b :c7279; :b :c7280; :b :c7281; :b :c7282; :b :c7283; :b :c7284; :b :c7285; :b :c7286; :b :c7287; :b :c7288; :b :c7289; :b :c7290; :b :c7291; :b :c7292; :b :c7293; :b :c7294; :b :c7295; :b :c7296; :b :c7297; :b :c7298; :b :c7299; :b :c7300; :b :c7301; :b :c7302; :b :c7303; :b :c7304; :b :c7305; :b :c7306; :b :c7307; :b :c7308; :b :c7309; :b :c7310; :b :c7311; :b :c7312; :b :c7313; :b :c7314; :b :c7315; :b :c7316; :b :c7317; :b :c7318; :b :c7319; :b :c7320; :b :c7321; :b :c7322; :b :c7323; :b :c7324; :b :c7325; :b :c7326; :b :c7327; :b :c7328; :b :c7329; :b :c7330; :b :c7331; :b :c7332; :b :c7333; :b :c7334; :b :c7335; :b :c7336; :b :c7337; :b :c7338; :b :c7339; :b :c7340; :b :c7341; :b :c7342; :b :c7343; :b :c7344; :b :c7345; :b :c7346; :b :c7347; :b :c7348; :b :c7349; :b :c7350; :b :c7351; :b :c7352; :b :c7353; :b :c7354; :b :c7355; :b :c7356; :b :c7357; :b :c7358; :b :c7359; :b :c7360; :b :c7361; :b :c7362; :b :c7363; :b :c7364; :b :c7365; :b :c7366; :b :c7367; :b :c7368; :b :c7369; :b :c7370; :b :c7371; :b :c7372; :b :c7373; :b :c7374; :b :c7375; :b :c7376; :b :c7377; :b :c7378; :b :c7379; :b :c7380; :b :c7381; :b :c7382; :b :c7383; :b :c7384; :b :c7385; :b :c7386; :b :c7387; :b :c7388; :b :c7389; :b :c7390; :b :c7391; :b :c7392; :b :c7393; :b :c7394; :b :c7395; :b :c7396; :b :c7397; :b :c7398; :b :c7399; :b :c7400; :b :c7401; :b :c7402; :b :c7403; :b :c7404; :b :c7405; :b :c7406; :b :c7407; :b :c7408; :b :c7409; :b :c7410; :b :c7411; :b :c7412; :b :c7413; :b :c7414; :b :c7415; :b :c7416; :b :c7417; :b :c7418; :b :c7419; :b :c7420; :b :c7421; :b :c7422; :b :c7423; :b :c7424; :b :c7425; :b :c7426; :b :c7427; :b :c7428; :b :c7429; :b :c7430; :b :c7431; :b :c7432; :b :c7433; :b :c7434; :b :c7435; :b :c7436; :b :c7437; :b :c7438; :b :c7439; :b :c7440; :b :c7441; :b :c7442; :b :c7443; :b :c7444; :b :c7445; :b :c7446; :b :c7447; :b :c7448; :b :c7449; :b :c7450; :b :c7451; :b :c7452; :b :c7453; :b :c7454; :b :c7455; :b :c7456; :b :c7457; :b :c7458; :b :c7459; :b :c7460; :b :c7461; :b :c7462; :b :c7463; :b :c7464; :b :c7465; :b :c7466; :b :c7467; :b :c7468; :b :c7469; :b :c7470; :b :c7471; :b :c7472; :b :c7473; :b :c7474; :b :c7475; :b :c7476; :b :c7477; :b :c7478; :b :c7479; :b :c7480; :b :c7481; :b :c7482; :b :c7483; :b :c7484; :b :c7485; :b :c7486; :b :c7487; :b :c7488; :b :c7489; :b :c7490; :b :c7491; :b :c7492; :b :c7493; :b :c7494; :b :c7495; :b :c7496; :b :c7497; :b :c7498; :b :c7499; :b :c7500; :b :c7501; :b :c7502; :b :c7503; :b :c7504; :b :c7505; :b :c7506; :b :c7507; :b :c7508; :b :c7509; :b :c7510; :b :c7511; :b :c7512; :b :c7513; :b :c7514; :b :c7515; :b :c7516; :b :c7517; :b :c7518; :b :c7519; :b :c7520; :b :c7521; :b :c7522; :b :c7523; :b :c7524; :b :c7525; :b :c7526; :b :c7527; :b :c7528; :b :c7529; :b :c7530; :b :c7531; :b :c7532; :b :c7533; :b :c7534; :b :c7535; :b :c7536; :b :c7537; :b :c7538; :b :c7539; :b :c7540; :b :c7541; :b :c7542; :b :c7543; :b :c7544; :b :c7545; :b :c7546; :b :c7547; :b :c7548; :b :c7549; :b :c7550; :b :c7551; :b :c7552; :b :c7553; :b :c7554; :b :c7555; :b :c7556; :b :c7557; :b :c7558; :b :c7559; :b :c7560; :b :c7561; :b :c7562; :b :c7563; :b :c7564; :b :c7565; :b :c7566; :b :c7567; :b :c7568; :b :c7569; :b :c7570; :b :c7571; :b :c7572; :b :c7573; :b :c7574; :b :c7575; :b :c7576; :b :c7577; :b :c7578; :b :c7579; :b :c7580; :b :c7581; :b :c7582; :b :c7583; :b :c7584; :b :c7585; :b :c7586; :b :c7587; :b :c7588; :b :c7589; :b :c7590; :b :c7591; :b :c7592; :b :c7593; :b :c7594; :b :c7595; :b :c7596; :b :c7597; :b :c7598; :b :c7599; :b :c7600; :b :c7601; :b :c7602; :b :c7603; :b :c7604; :b :c7605; :b :c7606; :b :c7607; :b :c7608; :b :c7609; :b :c7610; :b :c7611; :b :c7612; :b :c7613; :b :c7614; :b :c7615; :b :c7616; :b :c7617; :b :c7618; :b :c7619; :b :c7620; :b :c7621; :b :c7622; :b :c7623; :b :c7624; :b :c7625; :b :c7626; :b :c7627; :b :c7628; :b :c7629; :b :c7630; :b :c7631; :b :c7632; :b :c7633; :b :c7634; :b :c7635; :b :c7636; :b :c7637; :b :c7638; :b :c7639; :b :c7640; :b :c7641; :b :c7642; :b :c7643; :b :c7644; :b :c7645; :b :c7646; :b :c7647; :b :c7648; :b :c7649; :b :c7650; :b :c7651; :b :c7652; :b :c7653; :b :c7654; :b :c7655; :b :c7656; :b :c7657; :b :c7658; :b :c7659; :b :c7660; :b :c7661; :b :c7662; :b :c7663; :b :c7664; :b :c7665; :b :c7666; :b :c7667; :b :c7668; :b :c7669; :b :c7670; :b :c7671; :b :c7672; :b :c7673; :b :c7674; :b :c7675; :b :c7676; :b :c7677; :b :c7678; :b :c7679; :b :c7680; :b :c7681; :b :c7682; :b :c7683; :b :c7684; :b :c7685; :b :c7686; :b :c7687; :b :c7688; :b :c7689; :b :c7690; :b :c7691; :b :c7692; :b :c7693; :b :c7694; :b :c7695; :b :c7696; :b :c7697; :b :c7698; :b :c7699; :b :c7700; :b :c7701; :b :c7702; :b :c7703; :b :c7704; :b :c7705; :b :c7706; :b :c7707; :b :c7708; :b :c7709; :b :c7710; :b :c7711; :b :c7712; :b :c7713; :b :c7714; :b :c7715; :b :c7716; :b :c7717; :b :c7718; :b :c7719; :b :c7720; :b :c7721; :b :c7722; :b :c7723; :b :c7724; :b :c7725; :b :c7726; :b :c7727; :b :c7728; :b :c7729; :b :c7730; :b :c7731; :b :c7732; :b :c7733; :b :c7734; :b :c7735; :b :c7736; :b :c7737; :b :c7738; :b :c7739; :b :c7740; :b :c7741; :b :c7742; :b :c7743; :b :c7744; :b :c7745; :b :c7746; :b :c7747; :b :c7748; :b :c7749; :b :c7750; :b :c7751; :b :c7752; :b :c7753; :b :c7754; :b :c7755; :b :c7756; :b :c7757; :b :c7758; :b :c7759; :b :c7760; :b :c7761; :b :c7762; :b :c7763; :b :c7764; :b :c7765; :b :c7766; :b :c7767; :b :c7768; :b :c7769; :b :c7770; :b :c7771; :b :c7772; :b :c7773; :b :c7774; :b :c7775; :b :c7776; :b :c7777; :b :c7778; :b :c7779; :b :c7780; :b :c7781; :b :c7782; :b :c7783; :b :c7784; :b :c7785; :b :c7786; :b :c7787; :b :c7788; :b :c7789; :b :c7790; :b :c7791; :b :c7792; :b :c7793; :b :c7794; :b :c7795; :b :c7796; :b :c7797; :b :c7798; :b :c7799; :b :c7800; :b :c7801; :b :c7802; :b :c7803; :b :c7804; :b :c7805; :b :c7806; :b :c7807; :b :c7808; :b :c7809; :b :c7810; :b :c7811; :b :c7812; :b :c7813; :b :c7814; :b :c7815; :b :c7816; :b :c7817; :b :c7818; :b :c7819; :b :c7820; :b :c7821; :b :c7822; :b :c7823; :b :c7824; :b :c7825; :b :c7826; :b :c7827; :b :c7828; :b :c7829; :b :c7830; :b :c7831; :b :c7832; :b :c7833; :b :c7834; :b :c7835; :b :c7836; :b :c7837; :b :c7838; :b :c7839; :b :c7840; :b :c7841; :b :c7842; :b :c7843; :b :c7844; :b :c7845; :b :c7846; :b :c7847; :b :c7848; :b :c7849; :b :c7850; :b :c7851; :b :c7852; :b :c7853; :b :c7854; :b :c7855; :b :c7856; :b :c7857; :b :c7858; :b :c7859; :b :c7860; :b :c7861; :b :c7862; :b :c7863; :b :c7864; :b :c7865; :b :c7866; :b :c7867; :b :c7868; :b :c7869; :b :c7870; :b :c7871; :b :c7872; :b :c7873; :b :c7874; :b :c7875; :b :c7876; :b :c7877; :b :c7878; :b :c7879; :b :c7880; :b :c7881; :b :c7882; :b :c7883; :b :c7884; :b :c7885; :b :c7886; :b :c7887; :b :c7888; :b :c7889; :b :c7890; :b :c7891; :b :c7892; :b :c7893; :b :c7894; :b :c7895; :b :c7896; :b :c7897; :b :c7898; :b :c7899; :b :c7900; :b :c7901; :b :c7902; :b :c7903; :b :c7904; :b :c7905; :b :c7906; :b :c7907; :b :c7908; :b :c7909; :b :c7910; :b :c7911; :b :c7912; :b :c7913; :b :c7914; :b :c7915; :b :c7916; :b :c7917; :b :c7918; :b :c7919; :b :c7920; :b :c7921; :b :c7922; :b :c7923; :b :c7924; :b :c7925; :b :c7926; :b :c7927; :b :c7928; :b :c7929; :b :c7930; :b :c7931; :b :c7932; :b :c7933; :b :c7934; :b :c7935; :b :c7936; :b :c7937; :b :c7938; :b :c7939; :b :c7940; :b :c7941; :b :c7942; :b :c7943; :b :c7944; :b :c7945; :b :c7946; :b :c7947; :b :c7948; :b :c7949; :b :c7950; :b :c7951; :b :c7952; :b :c7953; :b :c7954; :b :c7955; :b :c7956; :b :c7957; :b :c7958; :b :c7959; :b :c7960; :b :c7961; :b :c7962; :b :c7963; :b :c7964; :b :c7965; :b :c7966; :b :c7967; :b :c7968; :b :c7969; :b :c7970; :b :c7971; :b :c7972; :b :c7973; :b :c7974; :b :c7975; :b :c7976; :b :c7977; :b :c7978; :b :c7979; :b :c7980; :b :c7981; :b :c7982; :b :c7983; :b :c7984; :b :c7985; :b :c7986; :b :c7987; :b :c7988; :b :c7989; :b :c7990; :b :c7991; :b :c7992; :b :c7993; :b :c7994; :b :c7995; :b :c7996; :b :c7997; :b :c7998; :b :c7999; :b :c8000; :b :c8001; :b :c8002; :b :c8003; :b :c8004; :b :c8005; :b :c8006; :b :c8007; :b :c8008; :b :c8009; :b :c8010; :b :c8011; :b :c8012; :b :c8013; :b :c8014; :b :c8015; :b :c8016; :b :c8017; :b :c8018; :b :c8019; :b :c8020; :b :c8021; :b :c8022; :b :c8023; :b :c8024; :b :c8025; :b :c8026; :b :c8027; :b :c8028; :b :c8029; :b :c8030; :b :c8031; :b :c8032; :b :c8033; :b :c8034; :b :c8035; :b :c8036; :b :c8037; :b :c8038; :b :c8039; :b :c8040; :b :c8041; :b :c8042; :b :c8043; :b :c8044; :b :c8045; :b :c8046; :b :c8047; :b :c8048; :b :c8049; :b :c8050; :b :c8051; :b :c8052; :b :c8053; :b :c8054; :b :c8055; :b :c8056; :b :c8057; :b :c8058; :b :c8059; :b :c8060; :b :c8061; :b :c8062; :b :c8063; :b :c8064; :b :c8065; :b :c8066; :b :c8067; :b :c8068; :b :c8069; :b :c8070; :b :c8071; :b :c8072; :b :c8073; :b :c8074; :b :c8075; :b :c8076; :b :c8077; :b :c8078; :b :c8079; :b :c8080; :b :c8081; :b :c8082; :b :c8083; :b :c8084; :b :c8085; :b :c8086; :b :c8087; :b :c8088; :b :c8089; :b :c8090; :b :c8091; :b :c8092; :b :c8093; :b :c8094; :b :c8095; :b :c8096; :b :c8097; :b :c8098; :b :c8099; :b :c8100; :b :c8101; :b :c8102; :b :c8103; :b :c8104; :b :c8105; :b :c8106; :b :c8107; :b :c8108; :b :c8109; :b :c8110; :b :c8111; :b :c8112; :b :c8113; :b :c8114; :b :c8115; :b :c8116; :b :c8117; :b :c8118; :b :c8119; :b :c8120; :b :c8121; :b :c8122; :b :c8123; :b :c8124; :b :c8125; :b :c8126; :b :c8127; :b :c8128; :b :c8129; :b :c8130; :b :c8131; :b :c8132; :b :c8133; :b :c8134; :b :c8135; :b :c8136; :b :c8137; :b :c8138; :b :c8139; :b :c8140; :b :c8141; :b :c8142; :b :c8143; :b :c8144; :b :c8145; :b :c8146; :b :c8147; :b :c8148; :b :c8149; :b :c8150; :b :c8151; :b :c8152; :b :c8153; :b :c8154; :b :c8155; :b :c8156; :b :c8157; :b :c8158; :b :c8159; :b :c8160; :b :c8161; :b :c8162; :b :c8163; :b :c8164; :b :c8165; :b :c8166; :b :c8167; :b :c8168; :b :c8169; :b :c8170; :b :c8171; :b :c8172; :b :c8173; :b :c8174; :b :c8175; :b :c8176; :b :c8177; :b :c8178; :b :c8179; :b :c8180; :b :c8181; :b :c8182; :b :c8183; :b :c8184; :b :c8185; :b :c8186; :b :c8187; :b :c8188; :b :c8189; :b :c8190; :b :c8191; :b :c8192; :b :c8193; :b :c8194; :b :c8195; :b :c8196; :b :c8197; :b :c8198; :b :c8199; :b :c8200; :b :c8201; :b :c8202; :b :c8203; :b :c8204; :b :c8205; :b :c8206; :b :c8207; :b :c8208; :b :c8209; :b :c8210; :b :c8211; :b :c8212; :b :c8213; :b :c8214; :b :c8215; :b :c8216; :b :c8217; :b :c8218; :b :c8219; :b :c8220; :b :c8221; :b :c8222; :b :c8223; :b :c8224; :b :c8225; :b :c8226; :b :c8227; :b :c8228; :b :c8229; :b :c8230; :b :c8231; :b :c8232; :b :c8233; :b :c8234; :b :c8235; :b :c8236; :b :c8237; :b :c8238; :b :c8239; :b :c8240; :b :c8241; :b :c8242; :b :c8243; :b :c8244; :b :c8245; :b :c8246; :b :c8247; :b :c8248; :b :c8249; :b :c8250; :b :c8251; :b :c8252; :b :c8253; :b :c8254; :b :c8255; :b :c8256; :b :c8257; :b :c8258; :b :c8259; :b :c8260; :b :c8261; :b :c8262; :b :c8263; :b :c8264; :b :c8265; :b :c8266; :b :c8267; :b :c8268; :b :c8269; :b :c8270; :b :c8271; :b :c8272; :b :c8273; :b :c8274; :b :c8275; :b :c8276; :b :c8277; :b :c8278; :b :c8279; :b :c8280; :b :c8281; :b :c8282; :b :c8283; :b :c8284; :b :c8285; :b :c8286; :b :c8287; :b :c8288; :b :c8289; :b :c8290; :b :c8291; :b :c8292; :b :c8293; :b :c8294; :b :c8295; :b :c8296; :b :c8297; :b :c8298; :b :c8299; :b :c8300; :b :c8301; :b :c8302; :b :c8303; :b :c8304; :b :c8305; :b :c8306; :b :c8307; :b :c8308; :b :c8309; :b :c8310; :b :c8311; :b :c8312; :b :c8313; :b :c8314; :b :c8315; :b :c8316; :b :c8317; :b :c8318; :b :c8319; :b :c8320; :b :c8321; :b :c8322; :b :c8323; :b :c8324; :b :c8325; :b :c8326; :b :c8327; :b :c8328; :b :c8329; :b :c8330; :b :c8331; :b :c8332; :b :c8333; :b :c8334; :b :c8335; :b :c8336; :b :c8337; :b :c8338; :b :c8339; :b :c8340; :b :c8341; :b :c8342; :b :c8343; :b :c8344; :b :c8345; :b :c8346; :b :c8347; :b :c8348; :b :c8349; :b :c8350; :b :c8351; :b :c8352; :b :c8353; :b :c8354; :b :c8355; :b :c8356; :b :c8357; :b :c8358; :b :c8359; :b :c8360; :b :c8361; :b :c8362; :b :c8363; :b :c8364; :b :c8365; :b :c8366; :b :c8367; :b :c8368; :b :c8369; :b :c8370; :b :c8371; :b :c8372; :b :c8373; :b :c8374; :b :c8375; :b :c8376; :b :c8377; :b :c8378; :b :c8379; :b :c8380; :b :c8381; :b :c8382; :b :c8383; :b :c8384; :b :c8385; :b :c8386; :b :c8387; :b :c8388; :b :c8389; :b :c8390; :b :c8391; :b :c8392; :b :c8393; :b :c8394; :b :c8395; :b :c8396; :b :c8397; :b :c8398; :b :c8399; :b :c8400; :b :c8401; :b :c8402; :b :c8403; :b :c8404; :b :c8405; :b :c8406; :b :c8407; :b :c8408; :b :c8409; :b :c8410; :b :c8411; :b :c8412; :b :c8413; :b :c8414; :b :c8415; :b :c8416; :b :c8417; :b :c8418; :b :c8419; :b :c8420; :b :c8421; :b :c8422; :b :c8423; :b :c8424; :b :c8425; :b :c8426; :b :c8427; :b :c8428; :b :c8429; :b :c8430; :b :c8431; :b :c8432; :b :c8433; :b :c8434; :b :c8435; :b :c8436; :b :c8437; :b :c8438; :b :c8439; :b :c8440; :b :c8441; :b :c8442; :b :c8443; :b :c8444; :b :c8445; :b :c8446; :b :c8447; :b :c8448; :b :c8449; :b :c8450; :b :c8451; :b :c8452; :b :c8453; :b :c8454; :b :c8455; :b :c8456; :b :c8457; :b :c8458; :b :c8459; :b :c8460; :b :c8461; :b :c8462; :b :c8463; :b :c8464; :b :c8465; :b :c8466; :b :c8467; :b :c8468; :b :c8469; :b :c8470; :b :c8471; :b :c8472; :b :c8473; :b :c8474; :b :c8475; :b :c8476; :b :c8477; :b :c8478; :b :c8479; :b :c8480; :b :c8481; :b :c8482; :b :c8483; :b :c8484; :b :c8485; :b :c8486; :b :c8487; :b :c8488; :b :c8489; :b :c8490; :b :c8491; :b :c8492; :b :c8493; :b :c8494; :b :c8495; :b :c8496; :b :c8497; :b :c8498; :b :c8499; :b :c8500; :b :c8501; :b :c8502; :b :c8503; :b :c8504; :b :c8505; :b :c8506; :b :c8507; :b :c8508; :b :c8509; :b :c8510; :b :c8511; :b :c8512; :b :c8513; :b :c8514; :b :c8515; :b :c8516; :b :c8517; :b :c8518; :b :c8519; :b :c8520; :b :c8521; :b :c8522; :b :c8523; :b :c8524; :b :c8525; :b :c8526; :b :c8527; :b :c8528; :b :c8529; :b :c8530; :b :c8531; :b :c8532; :b :c8533; :b :c8534; :b :c8535; :b :c8536; :b :c8537; :b :c8538; :b :c8539; :b :c8540; :b :c8541; :b :c8542; :b :c8543; :b :c8544; :b :c8545; :b :c8546; :b :c8547; :b :c8548; :b :c8549; :b :c8550; :b :c8551; :b :c8552; :b :c8553; :b :c8554; :b :c8555; :b :c8556; :b :c8557; :b :c8558; :b :c8559; :b :c8560; :b :c8561; :b :c8562; :b :c8563; :b :c8564; :b :c8565; :b :c8566; :b :c8567; :b :c8568; :b :c8569; :b :c8570; :b :c8571; :b :c8572; :b :c8573; :b :c8574; :b :c8575; :b :c8576; :b :c8577; :b :c8578; :b :c8579; :b :c8580; :b :c8581; :b :c8582; :b :c8583; :b :c8584; :b :c8585; :b :c8586; :b :c8587; :b :c8588; :b :c8589; :b :c8590; :b :c8591; :b :c8592; :b :c8593; :b :c8594; :b :c8595; :b :c8596; :b :c8597; :b :c8598; :b :c8599; :b :c8600; :b :c8601; :b :c8602; :b :c8603; :b :c8604; :b :c8605; :b :c8606; :b :c8607; :b :c8608; :b :c8609; :b :c8610; :b :c8611; :b :c8612; :b :c8613; :b :c8614; :b :c8615; :b :c8616; :b :c8617; :b :c8618; :b :c8619; :b :c8620; :b :c8621; :b :c8622; :b :c8623; :b :c8624; :b :c8625; :b :c8626; :b :c8627; :b :c8628; :b :c8629; :b :c8630; :b :c8631; :b :c8632; :b :c8633; :b :c8634; :b :c8635; :b :c8636; :b :c8637; :b :c8638; :b :c8639; :b :c8640; :b :c8641; :b :c8642; :b :c8643; :b :c8644; :b :c8645; :b :c8646; :b :c8647; :b :c8648; :b :c8649; :b :c8650; :b :c8651; :b :c8652; :b :c8653; :b :c8654; :b :c8655; :b :c8656; :b :c8657; :b :c8658; :b :c8659; :b :c8660; :b :c8661; :b :c8662; :b :c8663; :b :c8664; :b :c8665; :b :c8666; :b :c8667; :b :c8668; :b :c8669; :b :c8670; :b :c8671; :b :c8672; :b :c8673; :b :c8674; :b :c8675; :b :c8676; :b :c8677; :b :c8678; :b :c8679; :b :c8680; :b :c8681; :b :c8682; :b :c8683; :b :c8684; :b :c8685; :b :c8686; :b :c8687; :b :c8688; :b :c8689; :b :c8690; :b :c8691; :b :c8692; :b :c8693; :b :c8694; :b :c8695; :b :c8696; :b :c8697; :b :c8698; :b :c8699; :b :c8700; :b :c8701; :b :c8702; :b :c8703; :b :c8704; :b :c8705; :b :c8706; :b :c8707; :b :c8708; :b :c8709; :b :c8710; :b :c8711; :b :c8712; :b :c8713; :b :c8714; :b :c8715; :b :c8716; :b :c8717; :b :c8718; :b :c8719; :b :c8720; :b :c8721; :b :c8722; :b :c8723; :b :c8724; :b :c8725; :b :c8726; :b :c8727; :b :c8728; :b :c8729; :b :c8730; :b :c8731; :b :c8732; :b :c8733; :b :c8734; :b :c8735; :b :c8736; :b :c8737; :b :c8738; :b :c8739; :b :c8740; :b :c8741; :b :c8742; :b :c8743; :b :c8744; :b :c8745; :b :c8746; :b :c8747; :b :c8748; :b :c8749; :b :c8750; :b :c8751; :b :c8752; :b :c8753; :b :c8754; :b :c8755; :b :c8756; :b :c8757; :b :c8758; :b :c8759; :b :c8760; :b :c8761; :b :c8762; :b :c8763; :b :c8764; :b :c8765; :b :c8766; :b :c8767; :b :c8768; :b :c8769; :b :c8770; :b :c8771; :b :c8772; :b :c8773; :b :c8774; :b :c8775; :b :c8776; :b :c8777; :b :c8778; :b :c8779; :b :c8780; :b :c8781; :b :c8782; :b :c8783; :b :c8784; :b :c8785; :b :c8786; :b :c8787; :b :c8788; :b :c8789; :b :c8790; :b :c8791; :b :c8792; :b :c8793; :b :c8794; :b :c8795; :b :c8796; :b :c8797; :b :c8798; :b :c8799; :b :c8800; :b :c8801; :b :c8802; :b :c8803; :b :c8804; :b :c8805; :b :c8806; :b :c8807; :b :c8808; :b :c8809; :b :c8810; :b :c8811; :b :c8812; :b :c8813; :b :c8814; :b :c8815; :b :c8816; :b :c8817; :b :c8818; :b :c8819; :b :c8820; :b :c8821; :b :c8822; :b :c8823; :b :c8824; :b :c8825; :b :c8826; :b :c8827; :b :c8828; :b :c8829; :b :c8830; :b :c8831; :b :c8832; :b :c8833; :b :c8834; :b :c8835; :b :c8836; :b :c8837; :b :c8838; :b :c8839; :b :c8840; :b :c8841; :b :c8842; :b :c8843; :b :c8844; :b :c8845; :b :c8846; :b :c8847; :b :c8848; :b :c8849; :b :c8850; :b :c8851; :b :c8852; :b :c8853; :b :c8854; :b :c8855; :b :c8856; :b :c8857; :b :c8858; :b :c8859; :b :c8860; :b :c8861; :b :c8862; :b :c8863; :b :c8864; :b :c8865; :b :c8866; :b :c8867; :b :c8868; :b :c8869; :b :c8870; :b :c8871; :b :c8872; :b :c8873; :b :c8874; :b :c8875; :b :c8876; :b :c8877; :b :c8878; :b :c8879; :b :c8880; :b :c8881; :b :c8882; :b :c8883; :b :c8884; :b :c8885; :b :c8886; :b :c8887; :b :c8888; :b :c8889; :b :c8890; :b :c8891; :b :c8892; :b :c8893; :b :c8894; :b :c8895; :b :c8896; :b :c8897; :b :c8898; :b :c8899; :b :c8900; :b :c8901; :b :c8902; :b :c8903; :b :c8904; :b :c8905; :b :c8906; :b :c8907; :b :c8908; :b :c8909; :b :c8910; :b :c8911; :b :c8912; :b :c8913; :b :c8914; :b :c8915; :b :c8916; :b :c8917; :b :c8918; :b :c8919; :b :c8920; :b :c8921; :b :c8922; :b :c8923; :b :c8924; :b :c8925; :b :c8926; :b :c8927; :b :c8928; :b :c8929; :b :c8930; :b :c8931; :b :c8932; :b :c8933; :b :c8934; :b :c8935; :b :c8936; :b :c8937; :b :c8938; :b :c8939; :b :c8940; :b :c8941; :b :c8942; :b :c8943; :b :c8944; :b :c8945; :b :c8946; :b :c8947; :b :c8948; :b :c8949; :b :c8950; :b :c8951; :b :c8952; :b :c8953; :b :c8954; :b :c8955; :b :c8956; :b :c8957; :b :c8958; :b :c8959; :b :c8960; :b :c8961; :b :c8962; :b :c8963; :b :c8964; :b :c8965; :b :c8966; :b :c8967; :b :c8968; :b :c8969; :b :c8970; :b :c8971; :b :c8972; :b :c8973; :b :c8974; :b :c8975; :b :c8976; :b :c8977; :b :c8978; :b :c8979; :b :c8980; :b :c8981; :b :c8982; :b :c8983; :b :c8984; :b :c8985; :b :c8986; :b :c8987; :b :c8988; :b :c8989; :b :c8990; :b :c8991; :b :c8992; :b :c8993; :b :c8994; :b :c8995; :b :c8996; :b :c8997; :b :c8998; :b :c8999; :b :c9000; :b :c9001; :b :c9002; :b :c9003; :b :c9004; :b :c9005; :b :c9006; :b :c9007; :b :c9008; :b :c9009; :b :c9010; :b :c9011; :b :c9012; :b :c9013; :b :c9014; :b :c9015; :b :c9016; :b :c9017; :b :c9018; :b :c9019; :b :c9020; :b :c9021; :b :c9022; :b :c9023; :b :c9024; :b :c9025; :b :c9026; :b :c9027; :b :c9028; :b :c9029; :b :c9030; :b :c9031; :b :c9032; :b :c9033; :b :c9034; :b :c9035; :b :c9036; :b :c9037; :b :c9038; :b :c9039; :b :c9040; :b :c9041; :b :c9042; :b :c9043; :b :c9044; :b :c9045; :b :c9046; :b :c9047; :b :c9048; :b :c9049; :b :c9050; :b :c9051; :b :c9052; :b :c9053; :b :c9054; :b :c9055; :b :c9056; :b :c9057; :b :c9058; :b :c9059; :b :c9060; :b :c9061; :b :c9062; :b :c9063; :b :c9064; :b :c9065; :b :c9066; :b :c9067; :b :c9068; :b :c9069; :b :c9070; :b :c9071; :b :c9072; :b :c9073; :b :c9074; :b :c9075; :b :c9076; :b :c9077; :b :c9078; :b :c9079; :b :c9080; :b :c9081; :b :c9082; :b :c9083; :b :c9084; :b :c9085; :b :c9086; :b :c9087; :b :c9088; :b :c9089; :b :c9090; :b :c9091; :b :c9092; :b :c9093; :b :c9094; :b :c9095; :b :c9096; :b :c9097; :b :c9098; :b :c9099; :b :c9100; :b :c9101; :b :c9102; :b :c9103; :b :c9104; :b :c9105; :b :c9106; :b :c9107; :b :c9108; :b :c9109; :b :c9110; :b :c9111; :b :c9112; :b :c9113; :b :c9114; :b :c9115; :b :c9116; :b :c9117; :b :c9118; :b :c9119; :b :c9120; :b :c9121; :b :c9122; :b :c9123; :b :c9124; :b :c9125; :b :c9126; :b :c9127; :b :c9128; :b :c9129; :b :c9130; :b :c9131; :b :c9132; :b :c9133; :b :c9134; :b :c9135; :b :c9136; :b :c9137; :b :c9138; :b :c9139; :b :c9140; :b :c9141; :b :c9142; :b :c9143; :b :c9144; :b :c9145; :b :c9146; :b :c9147; :b :c9148; :b :c9149; :b :c9150; :b :c9151; :b :c9152; :b :c9153; :b :c9154; :b :c9155; :b :c9156; :b :c9157; :b :c9158; :b :c9159; :b :c9160; :b :c9161; :b :c9162; :b :c9163; :b :c9164; :b :c9165; :b :c9166; :b :c9167; :b :c9168; :b :c9169; :b :c9170; :b :c9171; :b :c9172; :b :c9173; :b :c9174; :b :c9175; :b :c9176; :b :c9177; :b :c9178; :b :c9179; :b :c9180; :b :c9181; :b :c9182; :b :c9183; :b :c9184; :b :c9185; :b :c9186; :b :c9187; :b :c9188; :b :c9189; :b :c9190; :b :c9191; :b :c9192; :b :c9193; :b :c9194; :b :c9195; :b :c9196; :b :c9197; :b :c9198; :b :c9199; :b :c9200; :b :c9201; :b :c9202; :b :c9203; :b :c9204; :b :c9205; :b :c9206; :b :c9207; :b :c9208; :b :c9209; :b :c9210; :b :c9211; :b :c9212; :b :c9213; :b :c9214; :b :c9215; :b :c9216; :b :c9217; :b :c9218; :b :c9219; :b :c9220; :b :c9221; :b :c9222; :b :c9223; :b :c9224; :b :c9225; :b :c9226; :b :c9227; :b :c9228; :b :c9229; :b :c9230; :b :c9231; :b :c9232; :b :c9233; :b :c9234; :b :c9235; :b :c9236; :b :c9237; :b :c9238; :b :c9239; :b :c9240; :b :c9241; :b :c9242; :b :c9243; :b :c9244; :b :c9245; :b :c9246; :b :c9247; :b :c9248; :b :c9249; :b :c9250; :b :c9251; :b :c9252; :b :c9253; :b :c9254; :b :c9255; :b :c9256; :b :c9257; :b :c9258; :b :c9259; :b :c9260; :b :c9261; :b :c9262; :b :c9263; :b :c9264; :b :c9265; :b :c9266; :b :c9267; :b :c9268; :b :c9269; :b :c9270; :b :c9271; :b :c9272; :b :c9273; :b :c9274; :b :c9275; :b :c9276; :b :c9277; :b :c9278; :b :c9279; :b :c9280; :b :c9281; :b :c9282; :b :c9283; :b :c9284; :b :c9285; :b :c9286; :b :c9287; :b :c9288; :b :c9289; :b :c9290; :b :c9291; :b :c9292; :b :c9293; :b :c9294; :b :c9295; :b :c9296; :b :c9297; :b :c9298; :b :c9299; :b :c9300; :b :c9301; :b :c9302; :b :c9303; :b :c9304; :b :c9305; :b :c9306; :b :c9307; :b :c9308; :b :c9309; :b :c9310; :b :c9311; :b :c9312; :b :c9313; :b :c9314; :b :c9315; :b :c9316; :b :c9317; :b :c9318; :b :c9319; :b :c9320; :b :c9321; :b :c9322; :b :c9323; :b :c9324; :b :c9325; :b :c9326; :b :c9327; :b :c9328; :b :c9329; :b :c9330; :b :c9331; :b :c9332; :b :c9333; :b :c9334; :b :c9335; :b :c9336; :b :c9337; :b :c9338; :b :c9339; :b :c9340; :b :c9341; :b :c9342; :b :c9343; :b :c9344; :b :c9345; :b :c9346; :b :c9347; :b :c9348; :b :c9349; :b :c9350; :b :c9351; :b :c9352; :b :c9353; :b :c9354; :b :c9355; :b :c9356; :b :c9357; :b :c9358; :b :c9359; :b :c9360; :b :c9361; :b :c9362; :b :c9363; :b :c9364; :b :c9365; :b :c9366; :b :c9367; :b :c9368; :b :c9369; :b :c9370; :b :c9371; :b :c9372; :b :c9373; :b :c9374; :b :c9375; :b :c9376; :b :c9377; :b :c9378; :b :c9379; :b :c9380; :b :c9381; :b :c9382; :b :c9383; :b :c9384; :b :c9385; :b :c9386; :b :c9387; :b :c9388; :b :c9389; :b :c9390; :b :c9391; :b :c9392; :b :c9393; :b :c9394; :b :c9395; :b :c9396; :b :c9397; :b :c9398; :b :c9399; :b :c9400; :b :c9401; :b :c9402; :b :c9403; :b :c9404; :b :c9405; :b :c9406; :b :c9407; :b :c9408; :b :c9409; :b :c9410; :b :c9411; :b :c9412; :b :c9413; :b :c9414; :b :c9415; :b :c9416; :b :c9417; :b :c9418; :b :c9419; :b :c9420; :b :c9421; :b :c9422; :b :c9423; :b :c9424; :b :c9425; :b :c9426; :b :c9427; :b :c9428; :b :c9429; :b :c9430; :b :c9431; :b :c9432; :b :c9433; :b :c9434; :b :c9435; :b :c9436; :b :c9437; :b :c9438; :b :c9439; :b :c9440; :b :c9441; :b :c9442; :b :c9443; :b :c9444; :b :c9445; :b :c9446; :b :c9447; :b :c9448; :b :c9449; :b :c9450; :b :c9451; :b :c9452; :b :c9453; :b :c9454; :b :c9455; :b :c9456; :b :c9457; :b :c9458; :b :c9459; :b :c9460; :b :c9461; :b :c9462; :b :c9463; :b :c9464; :b :c9465; :b :c9466; :b :c9467; :b :c9468; :b :c9469; :b :c9470; :b :c9471; :b :c9472; :b :c9473; :b :c9474; :b :c9475; :b :c9476; :b :c9477; :b :c9478; :b :c9479; :b :c9480; :b :c9481; :b :c9482; :b :c9483; :b :c9484; :b :c9485; :b :c9486; :b :c9487; :b :c9488; :b :c9489; :b :c9490; :b :c9491; :b :c9492; :b :c9493; :b :c9494; :b :c9495; :b :c9496; :b :c9497; :b :c9498; :b :c9499; :b :c9500; :b :c9501; :b :c9502; :b :c9503; :b :c9504; :b :c9505; :b :c9506; :b :c9507; :b :c9508; :b :c9509; :b :c9510; :b :c9511; :b :c9512; :b :c9513; :b :c9514; :b :c9515; :b :c9516; :b :c9517; :b :c9518; :b :c9519; :b :c9520; :b :c9521; :b :c9522; :b :c9523; :b :c9524; :b :c9525; :b :c9526; :b :c9527; :b :c9528; :b :c9529; :b :c9530; :b :c9531; :b :c9532; :b :c9533; :b :c9534; :b :c9535; :b :c9536; :b :c9537; :b :c9538; :b :c9539; :b :c9540; :b :c9541; :b :c9542; :b :c9543; :b :c9544; :b :c9545; :b :c9546; :b :c9547; :b :c9548; :b :c9549; :b :c9550; :b :c9551; :b :c9552; :b :c9553; :b :c9554; :b :c9555; :b :c9556; :b :c9557; :b :c9558; :b :c9559; :b :c9560; :b :c9561; :b :c9562; :b :c9563; :b :c9564; :b :c9565; :b :c9566; :b :c9567; :b :c9568; :b :c9569; :b :c9570; :b :c9571; :b :c9572; :b :c9573; :b :c9574; :b :c9575; :b :c9576; :b :c9577; :b :c9578; :b :c9579; :b :c9580; :b :c9581; :b :c9582; :b :c9583; :b :c9584; :b :c9585; :b :c9586; :b :c9587; :b :c9588; :b :c9589; :b :c9590; :b :c9591; :b :c9592; :b :c9593; :b :c9594; :b :c9595; :b :c9596; :b :c9597; :b :c9598; :b :c9599; :b :c9600; :b :c9601; :b :c9602; :b :c9603; :b :c9604; :b :c9605; :b :c9606; :b :c9607; :b :c9608; :b :c9609; :b :c9610; :b :c9611; :b :c9612; :b :c9613; :b :c9614; :b :c9615; :b :c9616; :b :c9617; :b :c9618; :b :c9619; :b :c9620; :b :c9621; :b :c9622; :b :c9623; :b :c9624; :b :c9625; :b :c9626; :b :c9627; :b :c9628; :b :c9629; :b :c9630; :b :c9631; :b :c9632; :b :c9633; :b :c9634; :b :c9635; :b :c9636; :b :c9637; :b :c9638; :b :c9639; :b :c9640; :b :c9641; :b :c9642; :b :c9643; :b :c9644; :b :c9645; :b :c9646; :b :c9647; :b :c9648; :b :c9649; :b :c9650; :b :c9651; :b :c9652; :b :c9653; :b :c9654; :b :c9655; :b :c9656; :b :c9657; :b :c9658; :b :c9659; :b :c9660; :b :c9661; :b :c9662; :b :c9663; :b :c9664; :b :c9665; :b :c9666; :b :c9667; :b :c9668; :b :c9669; :b :c9670; :b :c9671; :b :c9672; :b :c9673; :b :c9674; :b :c9675; :b :c9676; :b :c9677; :b :c9678; :b :c9679; :b :c9680; :b :c9681; :b :c9682; :b :c9683; :b :c9684; :b :c9685; :b :c9686; :b :c9687; :b :c9688; :b :c9689; :b :c9690; :b :c9691; :b :c9692; :b :c9693; :b :c9694; :b :c9695; :b :c9696; :b :c9697; :b :c9698; :b :c9699; :b :c9700; :b :c9701; :b :c9702; :b :c9703; :b :c9704; :b :c9705; :b :c9706; :b :c9707; :b :c9708; :b :c9709; :b :c9710; :b :c9711; :b :c9712; :b :c9713; :b :c9714; :b :c9715; :b :c9716; :b :c9717; :b :c9718; :b :c9719; :b :c9720; :b :c9721; :b :c9722; :b :c9723; :b :c9724; :b :c9725; :b :c9726; :b :c9727; :b :c9728; :b :c9729; :b :c9730; :b :c9731; :b :c9732; :b :c9733; :b :c9734; :b :c9735; :b :c9736; :b :c9737; :b :c9738; :b :c9739; :b :c9740; :b :c9741; :b :c9742; :b :c9743; :b :c9744; :b :c9745; :b :c9746; :b :c9747; :b :c9748; :b :c9749; :b :c9750; :b :c9751; :b :c9752; :b :c9753; :b :c9754; :b :c9755; :b :c9756; :b :c9757; :b :c9758; :b :c9759; :b :c9760; :b :c9761; :b :c9762; :b :c9763; :b :c9764; :b :c9765; :b :c9766; :b :c9767; :b :c9768; :b :c9769; :b :c9770; :b :c9771; :b :c9772; :b :c9773; :b :c9774; :b :c9775; :b :c9776; :b :c9777; :b :c9778; :b :c9779; :b :c9780; :b :c9781; :b :c9782; :b :c9783; :b :c9784; :b :c9785; :b :c9786; :b :c9787; :b :c9788; :b :c9789; :b :c9790; :b :c9791; :b :c9792; :b :c9793; :b :c9794; :b :c9795; :b :c9796; :b :c9797; :b :c9798; :b :c9799; :b :c9800; :b :c9801; :b :c9802; :b :c9803; :b :c9804; :b :c9805; :b :c9806; :b :c9807; :b :c9808; :b :c9809; :b :c9810; :b :c9811; :b :c9812; :b :c9813; :b :c9814; :b :c9815; :b :c9816; :b :c9817; :b :c9818; :b :c9819; :b :c9820; :b :c9821; :b :c9822; :b :c9823; :b :c9824; :b :c9825; :b :c9826; :b :c9827; :b :c9828; :b :c9829; :b :c9830; :b :c9831; :b :c9832; :b :c9833; :b :c9834; :b :c9835; :b :c9836; :b :c9837; :b :c9838; :b :c9839; :b :c9840; :b :c9841; :b :c9842; :b :c9843; :b :c9844; :b :c9845; :b :c9846; :b :c9847; :b :c9848; :b :c9849; :b :c9850; :b :c9851; :b :c9852; :b :c9853; :b :c9854; :b :c9855; :b :c9856; :b :c9857; :b :c9858; :b :c9859; :b :c9860; :b :c9861; :b :c9862; :b :c9863; :b :c9864; :b :c9865; :b :c9866; :b :c9867; :b :c9868; :b :c9869; :b :c9870; :b :c9871; :b :c9872; :b :c9873; :b :c9874; :b :c9875; :b :c9876; :b :c9877; :b :c9878; :b :c9879; :b :c9880; :b :c9881; :b :c9882; :b :c9883; :b :c9884; :b :c9885; :b :c9886; :b :c9887; :b :c9888; :b :c9889; :b :c9890; :b :c9891; :b :c9892; :b :c9893; :b :c9894; :b :c9895; :b :c9896; :b :c9897; :b :c9898; :b :c9899; :b :c9900; :b :c9901; :b :c9902; :b :c9903; :b :c9904; :b :c9905; :b :c9906; :b :c9907; :b :c9908; :b :c9909; :b :c9910; :b :c9911; :b :c9912; :b :c9913; :b :c9914; :b :c9915; :b :c9916; :b :c9917; :b :c9918; :b :c9919; :b :c9920; :b :c9921; :b :c9922; :b :c9923; :b :c9924; :b :c9925; :b :c9926; :b :c9927; :b :c9928; :b :c9929; :b :c9930; :b :c9931; :b :c9932; :b :c9933; :b :c9934; :b :c9935; :b :c9936; :b :c9937; :b :c9938; :b :c9939; :b :c9940; :b :c9941; :b :c9942; :b :c9943; :b :c9944; :b :c9945; :b :c9946; :b :c9947; :b :c9948; :b :c9949; :b :c9950; :b :c9951; :b :c9952; :b :c9953; :b :c9954; :b :c9955; :b :c9956; :b :c9957; :b :c9958; :b :c9959; :b :c9960; :b :c9961; :b :c9962; :b :c9963; :b :c9964; :b :c9965; :b :c9966; :b :c9967; :b :c9968; :b :c9969; :b :c9970; :b :c9971; :b :c9972; :b :c9973; :b :c9974; :b :c9975; :b :c9976; :b :c9977; :b :c9978; :b :c9979; :b :c9980; :b :c9981; :b :c9982; :b :c9983; :b :c9984; :b :c9985; :b :c9986; :b :c9987; :b :c9988; :b :c9989; :b :c9990; :b :c9991; :b :c9992; :b :c9993; :b :c9994; :b :c9995; :b :c9996; :b :c9997; :b :c9998; :b :c9999; :b :c10000 . RDF-Trine-1.007/t/00.load.t000644 000765 000024 00000000162 12054225575 015075 0ustar00gregstaff000000 000000 use Test::More tests => 1; BEGIN { use_ok( 'RDF::Trine' ); } note( "Testing RDF::Trine $RDF::Trine::VERSION" ); RDF-Trine-1.007/t/data/000755 000765 000024 00000000000 12171744442 014464 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/exporter-csv.t000644 000765 000024 00000004167 12137221214 016376 0ustar00gregstaff000000 000000 use Test::More tests => 5; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable statement); use RDF::Trine; use_ok('RDF::Trine::Exporter::CSV'); { my $e = RDF::Trine::Exporter::CSV->new(); isa_ok( $e, 'RDF::Trine::Exporter::CSV' ); } my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/predicate' => [ { 'type' => 'literal', 'value' => 'Foo', }, { 'type' => 'uri', 'value' => 'http://example.com/bar', }, 'baz@en' ], }, }); { my $e = RDF::Trine::Exporter::CSV->new( quote => 1 ); my $t = statement( iri('http://example.com/doc'), variable('p'), variable('o') ); my $iter = $model->get_pattern( $t, undef, orderby => [ qw(p ASC o ASC) ] ); my ($rh, $wh); pipe( $rh, $wh ); $e->serialize_iterator_to_file( $wh, $iter ); close($wh); my $got = do { local($/) = undef; <$rh> }; my $expect = <<'END'; o,p , """Foo""", """baz""@en", END is( $got, $expect, 'quote=1' ); } { my $e = RDF::Trine::Exporter::CSV->new( quote => 0 ); my $t = statement( iri('http://example.com/doc'), variable('p'), variable('o') ); my $iter = $model->get_pattern( $t, undef, orderby => [ qw(p ASC o ASC) ] ); my ($rh, $wh); pipe( $rh, $wh ); $e->serialize_iterator_to_file( $wh, $iter ); close($wh); my $got = do { local($/) = undef; <$rh> }; my $expect = <<'END'; o,p http://example.com/bar,http://example.com/predicate Foo,http://example.com/predicate baz,http://example.com/predicate END is( $got, $expect, 'quote=0' ); } { my $e = RDF::Trine::Exporter::CSV->new( quote => 0, sep_char => '|' ); my $t = statement( iri('http://example.com/doc'), variable('p'), variable('o') ); my $iter = $model->get_pattern( $t, undef, orderby => [ qw(p ASC o ASC) ] ); my $got = $e->serialize_iterator_to_string( $iter ); my $expect = <<'END'; o|p http://example.com/bar|http://example.com/predicate Foo|http://example.com/predicate baz|http://example.com/predicate END is( $got, $expect, 'sep_char=|' ); } RDF-Trine-1.007/t/graph-subgraphs.t000644 000765 000024 00000012121 12054230065 017021 0ustar00gregstaff000000 000000 use Test::More tests => 30; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri); use RDF::Trine::Store; use RDF::Trine::Model; use RDF::Trine::Graph; use RDF::Trine::Parser; ok(RDF::Trine::Graph->can('is_subgraph_of'), 'RDF::Trine::Graph provides is_subgraph_of'); { my $foaf_a = <<'END'; @prefix foaf: . foaf:knows . END my $foaf_b = <<'END'; @prefix foaf: . foaf:knows . foaf:knows . END test_graph_subset( $foaf_a, $foaf_b, 1, 'subgraph with no blank nodes' ); } ### Expecting exceptions { my $rdf = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . [] a foaf:Person ; foaf:name "Bob" . . END my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model ( 'http://base/', $rdf, $model ); my $graph = RDF::Trine::Graph->new( $model ); throws_ok { $graph->is_subgraph_of( 1 ) } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::is_subgraph_of throws on unblessed arguments"; throws_ok { $graph->is_subgraph_of( bless({},'Foo') ) } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::is_subgraph_of throws on weirdly blessed arguments"; } ### { my $foaf_a = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . [] a foaf:Person ; foaf:name "Bob" . . END my $foaf_b = <<'END'; @prefix foaf: . _:alice a foaf:Person ; foaf:name "Alice" . _:bob a foaf:Person ; foaf:name "Bob" , "Robert" . _:carol a foaf:Person ; foaf:name "Carol" . . END test_graph_subset( $foaf_a, $foaf_b, 1, 'simple blank node map' ); } { my $foaf_a = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . [] a foaf:Person ; foaf:name "Bob" ; foaf:homepage [] . . END my $foaf_b = <<'END'; @prefix foaf: . _:alice a foaf:Person ; foaf:name "Alice" . _:bob a foaf:Person ; foaf:name "Bob" ; foaf:homepage . , . END test_graph_subset( $foaf_a, $foaf_b, 0, 'blank node does not map to iri' ); } { my $foaf_a = " .\n"; my $foaf_b = " .\n"; test_graph_subset( $foaf_a, $foaf_b, 0, 'different non-blank statements' ); } { my $foaf_a = "_:a _:a .\n"; my $foaf_b = "_:a _:b .\n"; test_graph_subset( $foaf_a, $foaf_b, 0, 'different number of blank nodes' ); } { my $foaf_a = "_:a _:a .\n"; my $foaf_b = "_:a _:b, _:c.\n"; test_graph_subset( $foaf_a, $foaf_b, 0, 'different number of blank statements' ); } ##################### { my $foaf_a = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . a foaf:Person ; foaf:name "Bob" . . END my $parser = RDF::Trine::Parser->new('turtle'); my $model = RDF::Trine::Model->new( RDF::Trine::Store->temporary_store() ); $parser->parse_into_model( 'http://base/', $foaf_a, $model ); my $iter = $model->get_statements( undef, iri('http://xmlns.com/foaf/0.1/name'), undef ); my $graph = RDF::Trine::Graph->new( $iter ); my $model_expect = do { my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); $parser->parse_into_model ( 'http://base/', <<'END', $model ); @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . a foaf:Person ; foaf:name "Bob" , "Robert" . [] foaf:name "Carol" . , . END $model; }; my $graph_expect = RDF::Trine::Graph->new( $model_expect ); ok( $graph->is_subgraph_of( $graph_expect ), 'subgraph from statement iterator' ); ok( ($graph lt $graph_expect), 'overloaded lt' ); ok( ($graph_expect gt $graph), 'overloaded gt' ); ok( ($graph le $graph_expect), 'overloaded le' ); ok( ($graph_expect ge $graph), 'overloaded ge' ); ok(!($graph lt $graph), 'lt: not true when graphs equal' ); ok(!($graph gt $graph), 'gt: not true when graphs equal' ); ok( ($graph le $graph), 'le: true when graphs equal' ); ok( ($graph ge $graph), 'ge: true when graphs equal' ); } sub test_graph_subset { my $rdf_a = shift; my $rdf_b = shift; my $expect = shift; my $name = shift; my $model_a = do { my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model ( 'http://base/', $rdf_a, $model ); $model; }; my $model_b = do { my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model ( 'http://base/', $rdf_b, $model ); $model; }; my $graph_a = RDF::Trine::Graph->new( $model_a ); my $graph_b = RDF::Trine::Graph->new( $model_b ); isa_ok( $graph_a, 'RDF::Trine::Graph' ); isa_ok( $graph_b, 'RDF::Trine::Graph' ); is( $graph_a->is_subgraph_of( $graph_b ), $expect, $name ); } RDF-Trine-1.007/t/graph.t000644 000765 000024 00000011600 12054230065 015026 0ustar00gregstaff000000 000000 use Test::More tests => 26; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri); use RDF::Trine::Store; use RDF::Trine::Model; use RDF::Trine::Graph; use RDF::Trine::Parser; { my $foaf_a = <<'END'; @prefix foaf: . foaf:knows . END my $foaf_b = <<'END'; @prefix foaf: . foaf:knows . END test_graph_equality( $foaf_a, $foaf_b, 1, 'equal graphs with no blank nodes' ); } ### Expecting exceptions throws_ok { RDF::Trine::Graph->new() } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::new throws with no arguments"; throws_ok { RDF::Trine::Graph->new(1) } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::new throws with unblessed arguments"; throws_ok { RDF::Trine::Graph->new(bless({},'Foo')) } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::new throws with unrecognized blessed arguments"; { my $rdf = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . [] a foaf:Person ; foaf:name "Bob" . . END my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model ( 'http://base/', $rdf, $model ); my $graph = RDF::Trine::Graph->new( $model ); throws_ok { $graph->equals( 1 ) } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::equals throws on unblessed arguments"; throws_ok { $graph->equals( bless({},'Foo') ) } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Graph::equals throws on unblessed arguments"; } ### { my $foaf_a = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . [] a foaf:Person ; foaf:name "Bob" . . END my $foaf_b = <<'END'; @prefix foaf: . _:alice a foaf:Person ; foaf:name "Alice" . _:bob a foaf:Person ; foaf:name "Bob" . . END test_graph_equality( $foaf_a, $foaf_b, 1, 'simple blank node map' ); } { my $foaf_a = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . a foaf:Person ; foaf:name "Bob" . . END my $foaf_b = <<'END'; @prefix foaf: . _:alice a foaf:Person ; foaf:name "Alice" . _:bob a foaf:Person ; foaf:name "Bob" . . END test_graph_equality( $foaf_a, $foaf_b, 0, 'blank node does not map to iri' ); } { my $foaf_a = " .\n"; my $foaf_b = " .\n"; test_graph_equality( $foaf_a, $foaf_b, 0, 'different non-blank statements' ); } { my $foaf_a = "_:a _:a .\n"; my $foaf_b = "_:a _:b .\n"; test_graph_equality( $foaf_a, $foaf_b, 0, 'different number of blank nodes' ); } { my $foaf_a = "_:a _:a .\n"; my $foaf_b = "_:a _:b, _:c.\n"; test_graph_equality( $foaf_a, $foaf_b, 0, 'different number of blank statements' ); } ##################### { my $foaf_a = <<'END'; @prefix foaf: . [] a foaf:Person ; foaf:name "Alice" . a foaf:Person ; foaf:name "Bob" . . END my $parser = RDF::Trine::Parser->new('turtle'); my $model = RDF::Trine::Model->new( RDF::Trine::Store->temporary_store() ); $parser->parse_into_model( 'http://base/', $foaf_a, $model ); my $iter = $model->get_statements( undef, iri('http://xmlns.com/foaf/0.1/name'), undef ); my $graph = RDF::Trine::Graph->new( $iter ); my $model_expect = do { my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); $parser->parse_into_model ( 'http://base/', <<'END', $model ); @prefix foaf: . _:a foaf:name "Alice" . foaf:name "Bob" . END $model; }; my $graph_expect = RDF::Trine::Graph->new( $model_expect ); ok( $graph->equals( $graph_expect ), 'graph equality from statement iterator' ); cmp_ok( $graph, 'eq', $graph_expect, 'graph equality from overloaded eq' ); cmp_ok( $graph, '==', $graph_expect, 'graph equality from overloaded ==' ); } sub test_graph_equality { my $rdf_a = shift; my $rdf_b = shift; my $expect = shift; my $name = shift; my $model_a = do { my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model ( 'http://base/', $rdf_a, $model ); $model; }; my $model_b = do { my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model ( 'http://base/', $rdf_b, $model ); $model; }; my $graph_a = RDF::Trine::Graph->new( $model_a ); my $graph_b = RDF::Trine::Graph->new( $model_b ); isa_ok( $graph_a, 'RDF::Trine::Graph' ); isa_ok( $graph_b, 'RDF::Trine::Graph' ); is( $graph_a->equals( $graph_b ), $expect, $name ); } RDF-Trine-1.007/t/iterator-bindings-join.t000644 000765 000024 00000005547 12054230225 020321 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 17; use RDF::Trine; use RDF::Trine::Node; use_ok( 'RDF::Trine::Iterator' ); # something like { ?p a foaf:Person ; foaf:name ?n } my $p1 = RDF::Trine::Node::Resource->new('http://example.org/alice'); my $p2 = RDF::Trine::Node::Resource->new('http://example.org/eve'); my $p3 = RDF::Trine::Node::Resource->new('http://example.org/bob'); my $n1 = RDF::Trine::Node::Literal->new('Alice'); my $n1a = RDF::Trine::Node::Literal->new('Alice', 'en'); my $n2 = RDF::Trine::Node::Literal->new('Eve'); my $n3 = RDF::Trine::Node::Literal->new('Bob'); { my @people = ( { p => $p1 }, { p => $p2 }, { p => $p3 }, ); my @names = ( { p => $p3, n => $n3 }, { p => $p1, n => $n1a }, { p => $p2, n => $n2 }, { p => $p1, n => $n1 }, ); { print "# nested loop join outer order (1)\n"; my $people = RDF::Trine::Iterator::Bindings->new( [@people], ['p'] ); my $names = RDF::Trine::Iterator::Bindings->new( [@names], ['p', 'n'] ); my $join = RDF::Trine::Iterator::Bindings->join_streams( $people, $names ); isa_ok( $join, 'RDF::Trine::Iterator::Bindings' ); my @expect = (qw(Alice Alice Eve Bob)); while (my $row = $join->next) { my $e = shift(@expect); my $name = $row->{n}; is( $name->literal_value, $e, 'expected name' ); } } { print "# nested loop join outer order (2)\n"; my $people = RDF::Trine::Iterator::Bindings->new( [@people], ['p'] ); my $names = RDF::Trine::Iterator::Bindings->new( [@names], ['p', 'n'] ); my $join = RDF::Trine::Iterator::Bindings->join_streams( $names, $people ); isa_ok( $join, 'RDF::Trine::Iterator::Bindings' ); my @expect = (qw(Bob Alice Eve Alice)); while (my $row = $join->next) { my $e = shift(@expect); my $name = $row->{n}; is( $name->literal_value, $e, 'expected name' ); } } } { my @people = ( { p => $p1 }, { p => $p2 }, ); my @names = ( { n => $n2 }, { n => $n1 }, ); { print "# nested loop join for cartesian product\n"; my $people = RDF::Trine::Iterator::Bindings->new( [@people], ['p'] ); my $names = RDF::Trine::Iterator::Bindings->new( [@names], ['n'] ); my $join = RDF::Trine::Iterator::Bindings->join_streams( $people, $names ); my $stream = $join->materialize; isa_ok( $stream, 'RDF::Trine::Iterator::Bindings' ); is( $stream->length, 4, 'cartesian product size' ); my %counts; while (my $row = $stream->next) { $counts{ $row->{p}->as_string }++; $counts{ $row->{n}->as_string }++; } is( $counts{ '' }, 2, 'expected tuple count for ' ); is( $counts{ '"Alice"' }, 2, 'expected tuple count for "alice"' ); is( $counts{ '' }, 2, 'expected tuple count for ' ); is( $counts{ '"Eve"' }, 2, 'expected tuple count for "Eve"' ); } } __END__ RDF-Trine-1.007/t/iterator-bindings-materialize.t000644 000765 000024 00000002671 12054230225 021663 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 8; use Data::Dumper; use RDF::Trine; use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Bindings::Materialized; use RDF::Trine::Statement; my $p1 = RDF::Trine::Node::Resource->new('http://example.org/alice'); my $p2 = RDF::Trine::Node::Resource->new('http://example.org/eve'); my $p3 = RDF::Trine::Node::Resource->new('http://example.org/bob'); my $n1 = RDF::Trine::Node::Literal->new('Alice'); my $n1a = RDF::Trine::Node::Literal->new('Alice', 'en'); my $n2 = RDF::Trine::Node::Literal->new('Eve'); my $n3 = RDF::Trine::Node::Literal->new('Bob'); my @bindings = ( { p => $p3, n => $n3 }, { p => $p1, n => $n1a }, { p => $p2, n => $n2 }, { p => $p1, n => $n1 }, ); { my @data = @bindings; my $sub = sub { shift(@data) }; my $stream = RDF::Trine::Iterator::Bindings::Materialized->new( $sub, [qw(p n)] ); isa_ok( $stream, 'RDF::Trine::Iterator::Bindings::Materialized' ); is( $stream->length, 4, 'materialized bindings length' ); print "# iterator reset\n"; $stream->reset; my @expect = qw(Bob Alice Eve Alice); while (my $bind = $stream->next) { is( $bind->{n}->literal_value, shift(@expect), 'expected literal value' ); } print "# iterator reset\n"; $stream->reset; my $bind = $stream->next; isa_ok( $bind, 'HASH' ); is( $bind->{n}->literal_value, 'Bob', 'expected literal value' ); } RDF-Trine-1.007/t/iterator-bindings.t000644 000765 000024 00000002645 12054230225 017360 0ustar00gregstaff000000 000000 use Test::More tests => 10; use Test::JSON; use strict; use warnings; no warnings 'redefine'; use URI::file; use RDF::Trine; use RDF::Trine::Node; use_ok( 'RDF::Trine::Iterator::Bindings' ); { my $iter = RDF::Trine::Iterator::Bindings->new(); is( $iter->next, undef, 'empty iterator' ); } { note('simple values'); my @values = (1,2); my $sub = sub { return shift(@values) }; my $iter = RDF::Trine::Iterator::Bindings->new( $sub ); is( $iter->next, 1 ); is( $iter->next, 2 ); is( $iter->next, undef ); } { note('hash values'); my @bindings = ( { qw( a 1 b 2 ) }, { qw( b 3 c 4 ) }, ); my $iter = RDF::Trine::Iterator::Bindings->new( sub { return shift(@bindings) } ); my $proj = $iter->project( 'b' ); is_deeply( $proj->next, { b => 2 } ); is_deeply( $proj->next, { b => 3 } ); is( $proj->next, undef ); } { note('as_json with empty iterator, no variables'); my $iter = RDF::Trine::Iterator::Bindings->new( [] ); my $expect = '{"head":{"vars":[]},"results":{"bindings":[],"distinct":false,"ordered":false}}'; is_json( $iter->as_json, $expect, 'as_json empty bindings iterator without names' ); } { note('as_json with empty iterator, 3 variables'); my $iter = RDF::Trine::Iterator::Bindings->new( [], [qw(a b c)] ); my $expect = '{"head":{"vars":["a", "b", "c"]},"results":{"bindings":[],"distinct":false,"ordered":false}}'; is_json( $iter->as_json, $expect, 'as_json empty bindings iterator with names' ); } RDF-Trine-1.007/t/iterator-boolean.t000644 000765 000024 00000002117 12054230225 017174 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 8; use Test::Exception; use JSON 2.0; use Data::Dumper; use RDF::Trine; use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Boolean; use RDF::Trine::Statement; { my $stream = RDF::Trine::Iterator::Boolean->new([1]); isa_ok( $stream, 'RDF::Trine::Iterator::Boolean' ); ok( $stream->is_boolean, 'is_boolean' ); ok( $stream->get_boolean, 'boolean value' ); } { my $stream = RDF::Trine::Iterator::Boolean->new([0]); isa_ok( $stream, 'RDF::Trine::Iterator::Boolean' ); ok( $stream->is_boolean, 'is_boolean' ); ok( not($stream->get_boolean), 'boolean value' ); } { my $stream = RDF::Trine::Iterator::Boolean->new( [1] ); my $xml = $stream->as_xml; like( $xml, qr#true#sm, 'boolean iterator as_xml' ); } { my $stream = RDF::Trine::Iterator::Boolean->new( [0] ); my $json = $stream->as_json; my $expect = from_json('{"boolean":false,"head":{"vars":[]}}'); my $got = from_json($json); is_deeply( $got, $expect, 'boolean iterator as_json' ); } RDF-Trine-1.007/t/iterator-graph-materialize.t000644 000765 000024 00000002656 12054230225 021172 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 7; use Data::Dumper; use RDF::Trine; use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Graph; use RDF::Trine::Statement; my $p1 = RDF::Trine::Node::Resource->new('http://example.org/alice'); my $p2 = RDF::Trine::Node::Resource->new('http://example.org/eve'); my $p3 = RDF::Trine::Node::Resource->new('http://example.org/bob'); my $type = RDF::Trine::Node::Resource->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'); my $person = RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/'); my $st1 = RDF::Trine::Statement->new( $p1, $type, $person ); my $st2 = RDF::Trine::Statement->new( $p2, $type, $person ); my $st3 = RDF::Trine::Statement->new( $p3, $type, $person ); { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3 ] ); my $m = $stream->materialize; isa_ok( $m, 'RDF::Trine::Iterator::Graph::Materialized' ); is( $m->length, 3 ); $m->reset; my $st = $m->next; isa_ok( $st, 'RDF::Trine::Statement' ); is( $st->subject->uri_value, 'http://example.org/alice' ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3 ] ); my $bindings = $stream->as_bindings; isa_ok( $bindings, 'RDF::Trine::Iterator::Bindings' ); my $hash = $bindings->next; isa_ok( $hash, 'HASH' ); is_deeply( $hash, { subject => $p1, predicate => $type, object => $person } ); } RDF-Trine-1.007/t/iterator-graph.t000644 000765 000024 00000006755 12054230225 016672 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 21; use Test::Exception; use Data::Dumper; use RDF::Trine; use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Graph; use RDF::Trine::Statement; my $p1 = RDF::Trine::Node::Resource->new('http://example.org/alice'); my $p2 = RDF::Trine::Node::Resource->new('http://example.org/eve'); my $p3 = RDF::Trine::Node::Resource->new('http://example.org/bob'); my $type = RDF::Trine::Node::Resource->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#type'); my $person = RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/Person'); my $st1 = RDF::Trine::Statement->new( $p1, $type, $person ); my $st2 = RDF::Trine::Statement->new( $p2, $type, $person ); my $st3 = RDF::Trine::Statement->new( $p3, $type, $person ); { my $stream = RDF::Trine::Iterator::Graph->new(); isa_ok( $stream, 'RDF::Trine::Iterator::Graph' ); ok( $stream->is_graph, 'is_graph' ); my $data = $stream->next; is( $data, undef ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3 ] ); isa_ok( $stream, 'RDF::Trine::Iterator::Graph' ); my $st = $stream->next; isa_ok( $st, 'RDF::Trine::Statement' ); is( $st->subject->uri_value, 'http://example.org/alice' ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3 ] ); my $bindings = $stream->as_bindings; isa_ok( $bindings, 'RDF::Trine::Iterator::Bindings' ); my $hash = $bindings->next; isa_ok( $hash, 'HASH' ); is_deeply( $hash, { subject => $p1, predicate => $type, object => $person } ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3 ] ); my @vars = map { RDF::Trine::Node::Variable->new( $_ ) } qw(s p o); my $bindings = $stream->as_bindings( @vars ); isa_ok( $bindings, 'RDF::Trine::Iterator::Bindings' ); my $hash = $bindings->next; isa_ok( $hash, 'HASH' ); is_deeply( $hash, { 's' => $p1, p => $type, o => $person } ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st1, $st3, $st2, $st1 ] ); my $unique = $stream->unique; isa_ok( $unique, 'RDF::Trine::Iterator::Graph' ); my $count = 0; while (my $st = $unique->next) { $count++; } is( $count, 3, 'graph iterator unique' ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2 ] ); my $xml = $stream->as_xml; like( $xml, qrsm, 'graph iterator as_xml' ); like( $xml, qrsm, 'graph iterator as_xml (second result)' ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2 ] ); my $xml = $stream->as_xml( 2 ); my @matches = ($xml =~ m<"http://example.org/([^"]+)">gsm); is( scalar(@matches), 2, 'graph iterator as_xml maxcount=2' ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2 ] ); my $xml = $stream->as_xml( 1 ); my @matches = ($xml =~ m<"http://example.org/([^"]+)">gsm); is( scalar(@matches), 1, 'graph iterator as_xml maxcount=1' ); } { my $stream = RDF::Trine::Iterator::Graph->new( [ $st1, $st2 ] ); throws_ok { my $json = $stream->as_json; } 'RDF::Trine::Error::SerializationError'; } { my $stream1 = RDF::Trine::Iterator::Graph->new( [ $st2, $st3 ] ); my $stream2 = RDF::Trine::Iterator::Graph->new( [ $st1, $st3 ] ); my $mstream = $stream1->concat($stream2)->materialize; is($mstream->length, 4, 'Concatenated Graph Iterator has 4 statements'); $mstream->reset; is($mstream->unique->length, 3, 'Concatenated Graph Iterator has 3 unique statements'); } RDF-Trine-1.007/t/iterator-materialized.t000644 000765 000024 00000001425 11063223162 020231 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 5; use Data::Dumper; use RDF::Trine; use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Graph; use RDF::Trine::Iterator::Bindings; use RDF::Trine::Iterator::Boolean; { my @data = ({value=>1},{value=>2},{value=>3}); my $stream = RDF::Trine::Iterator::Bindings->new( \@data, [qw(value)] ); isa_ok( $stream, 'RDF::Trine::Iterator' ); my $m = $stream->materialize; isa_ok( $m, 'RDF::Trine::Iterator::Bindings::Materialized' ); my $data = $m->next; is( $data->{value}, 1, 'first value' ); $m->reset; for (qw(first second)) { my @values = $m->get_all; is_deeply( \@values, [{value=>1}, {value=>2}, {value=>3}], "deep comparison ($_ run)" ); } } RDF-Trine-1.007/t/iterator-thaw.t000644 000765 000024 00000003634 12054225575 016541 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 10; use Data::Dumper; use IO::Socket::INET; use Time::HiRes qw(sleep); use RDF::Trine; use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Graph; use RDF::Trine::Iterator::Bindings; use RDF::Trine::Iterator::Boolean; my $BASE_PORT = 9015; { my $string = <<"END"; r1196945277r60184r136 Adam http://kasei.us/about/foaf.xrdf#greg Greg END my $stream = RDF::Trine::Iterator->from_string( $string )->materialize; isa_ok( $stream, 'RDF::Trine::Iterator' ); ok( $stream->is_bindings, 'is_bindings' ); my @values = $stream->get_all; is( scalar(@values), 2, 'expected result count' ); { my $data = $stream->next; my $lit = $data->{name}; is( $lit->literal_value, 'Adam', 'name 1' ); is( $lit->literal_datatype, 'http://www.w3.org/2000/01/rdf-schema#Literal', 'datatype' ); } { my $data = $stream->next; my $lit = $data->{name}; is( $lit->literal_value, 'Greg', 'name 2' ); is( $lit->literal_value_language, 'en', 'language' ); } } { my $string = <<"END"; true END my $stream = RDF::Trine::Iterator->from_string( $string ); isa_ok( $stream, 'RDF::Trine::Iterator' ); ok( $stream->is_boolean, 'is_boolean' ); ok( $stream->get_boolean, 'expected result boolean' ); } RDF-Trine-1.007/t/iterator.t000644 000765 000024 00000014655 12054225575 015605 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 69; use Scalar::Util qw(reftype); use Data::Dumper; use RDF::Trine qw(iri literal); use RDF::Trine::Iterator qw(sgrep smap swatch); use RDF::Trine::Iterator::Graph; use RDF::Trine::Iterator::Bindings; use RDF::Trine::Iterator::Boolean; { my $iter = RDF::Trine::Iterator->new([1,2]); is( &$iter, 1 ); is( $iter->next, 2 ); is( &$iter, undef ); } { my @data = ({value=>1},{value=>2},{value=>3}); my $stream = RDF::Trine::Iterator::Bindings->new( \@data, [qw(value)] ); isa_ok( $stream, 'RDF::Trine::Iterator' ); ok( $stream->is_bindings, 'is_bindings' ); is( $stream->is_boolean, 0, 'is_boolean' ); is( $stream->is_graph, 0, 'is_graph' ); my @values = $stream->get_all; is_deeply( \@values, [{value=>1}, {value=>2}, {value=>3}], 'deep comparison' ); } { my @data = ({value=>1},{value=>2},{value=>3}); my $stream = smap { $_->{value}++; $_ } RDF::Trine::Iterator::Bindings->new( \@data, [qw(value)] ); isa_ok( $stream, 'RDF::Trine::Iterator::Bindings' ); my @values = $stream->get_all; is_deeply( \@values, [{value=>2}, {value=>3}, {value=>4}], 'smap increment' ); } { my @first = ({value=>1},{value=>2}); my @second = ({value=>3}); my $data = RDF::Trine::Iterator::Bindings->new( \@first, [qw(value)] ); my $extra = RDF::Trine::Iterator::Bindings->new( \@second, [qw(value)] ); my $stream = $data->concat( $extra ); isa_ok( $stream, 'RDF::Trine::Iterator' ); ok( $stream->is_bindings, 'is_bindings' ); is( $stream->is_boolean, 0, 'is_boolean' ); is( $stream->is_graph, 0, 'is_graph' ); my @values = $stream->get_all; is_deeply( \@values, [{value=>1}, {value=>2}, {value=>3}], 'deep comparison' ); } { my @data = ({value=>1},{value=>2}); my @sources = ([@data], sub { shift(@data) }); foreach my $data (@sources) { my $stream = RDF::Trine::Iterator::Bindings->new( $data, [qw(value)] ); my $first = $stream->next_result; isa_ok( $first, 'HASH' ); is( $first->{value}, 1 ); my $second = $stream->next; isa_ok( $second, 'HASH' ); is( $second->{value}, 2 ); my @names = $stream->binding_names; is_deeply( \@names, [qw(value)], 'binding_names' ); is( $stream->binding_name( 0 ), 'value', 'binding_name' ); is( $stream->binding_value_by_name('value'), 2, 'binding_value_by_name' ); is( $stream->binding_value(0), 2, 'binding_value' ); my @values = $stream->binding_values; is_deeply( \@values, [2], 'binding_values' ); is( $stream->bindings_count, 1, 'bindings_count' ); is( $stream->finished, 1, 'finished' ); is( $stream->open, 1, 'open' ); my $row = $stream->next; is( $row, undef ); } } { my $true = RDF::Trine::Iterator::Boolean->new( [1] ); isa_ok( $true, 'RDF::Trine::Iterator' ); is( $true->get_boolean, 1, 'get_boolean' ); my $false = RDF::Trine::Iterator::Boolean->new( [0] ); is( $false->get_boolean, 0, 'get_boolean' ); } { my @data = ( { name => 'alice', url => 'http://example.com/alice', number => 1 }, { name => 'eve', url => 'http://example.com/eve', number => 2 } ); my $stream = RDF::Trine::Iterator::Bindings->new( \@data, [qw(name url number)] ); my $pstream = $stream->project( qw(name number) ); my @cols = $pstream->binding_names; is_deeply( \@cols, [qw(name number)], 'project: binding_names' ); my $alice = $pstream->next; is_deeply( $alice, { name => 'alice', number => 1 }, 'project: alice' ); my $eve = $pstream->next; is_deeply( $eve, { name => 'eve', number => 2 }, 'project: eve' ); my $end = $pstream->next; is( $end, undef, 'project: end' ); } { my $stream = RDF::Trine::Iterator::Bindings->new( [], [qw(name url number)] ); my @sort = $stream->sorted_by; is_deeply( \@sort, [], 'sorted empty' ); } { my $stream = RDF::Trine::Iterator::Bindings->new( [], [qw(name url number)], sorted_by => ['number' => 'ASC'] ); my @sort = $stream->sorted_by; is_deeply( \@sort, ['number' => 'ASC'], 'sorted array' ); } { my $stream = RDF::Trine::Iterator::Bindings->new( [], [qw(name url number)], sorted_by => ['number' => 'ASC', name => 'DESC'] ); my @sort = $stream->sorted_by; is_deeply( \@sort, [qw(number ASC name DESC)], 'sorted array' ); } { my $count = 0; my $stream = swatch { $count++ } sgrep { $_->{number} % 2 == 0 } RDF::Trine::Iterator::Bindings->new( [{ name => 'Alice', number => 1}, { name => 'Eve', number => 2 }], [qw(name url number)], sorted_by => ['number' => 'ASC', name => 'DESC'] ); my @sort = $stream->sorted_by; is_deeply( \@sort, [qw(number ASC name DESC)], 'sorted array' ); is( $count, 0, 'zero watched results' ); my $row = $stream->next; is_deeply( $row, { name => 'Eve', number => 2 }, 'expected result after sgrep' ); is( $count, 1, 'one watched result' ); is( $stream->next, undef, 'empty stream' ); } { my @data = ( { name => literal('alice'), url => iri('http://example.com/alice'), number => literal(1) }, { name => literal('eve'), url => iri('http://example.com/eve'), number => literal(2) } ); my $stream = RDF::Trine::Iterator::Bindings->new( \@data, [qw(name url number)] ); my $string = $stream->to_string(); like( $string, qr/<\?xml/, 'xml to_string serialization' ); } { my $xml = <<"END"; alice http://example.com/alice 1 eve http://example.com/eve 2 END my $iter = RDF::Trine::Iterator->from_string( $xml ); is_deeply( [$iter->construct_args], ['bindings', [qw(name url number)]], 'expected construct args' ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my $b = $iter->next; is( reftype($b), 'HASH', 'expected variable bindings HASH' ); is( $b->{name}->literal_value, 'alice', 'expected variable binding literal value' ); } { my $iter = RDF::Trine::Iterator->new([1,2]); is( $iter->peek, 1, 'peek' ); is( $iter->peek, 1, 'peek again' ); is( $iter->next, 1, 'next' ); is( $iter->peek, 2, 'peek' ); is( $iter->peek, 2, 'peek again' ); is( $iter->next, 2, 'next' ); is( $iter->peek, undef, 'peek on eos' ); is( $iter->next, undef, 'next on eos' ); } RDF-Trine-1.007/t/model-boundeddescription.t000644 000765 000024 00000004304 11552456155 020726 0ustar00gregstaff000000 000000 use Test::More tests => 10; use Test::Exception; use FindBin qw($Bin); use File::Spec; use Data::Dumper; use utf8; use strict; use warnings; binmode( \*STDOUT, ':utf8' ); binmode( \*STDERR, ':utf8' ); use RDF::Trine qw(iri blank literal); use RDF::Trine::Parser; my $parser = RDF::Trine::Parser::NTriples->new(); isa_ok( $parser, 'RDF::Trine::Parser::NTriples' ); { my $model = RDF::Trine::Model->temporary_model; my $ntriples = <<"END"; . . _:a . "D" . . END $parser->parse_into_model(undef, $ntriples, $model); my $iter = $model->bounded_description( iri('a') ); isa_ok( $iter, 'RDF::Trine::Iterator::Graph' ); my @st = $iter->get_all; is( scalar(@st), 5, 'expected triple count' ); my @expect = ( '(triple )', '(triple )', '(triple _:a)', '(triple "D")', '(triple )', ); my @seen = sort map { $_->as_string } @st; is_deeply( \@seen, \@expect, 'BD with 0-outdegree bnode' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = <<"END"; . . _:a . _:a "C" . END $parser->parse_into_model(undef, $ntriples, $model); my $iter = $model->bounded_description( iri('a') ); isa_ok( $iter, 'RDF::Trine::Iterator::Graph' ); my @st = $iter->get_all; is( scalar(@st), 4, 'expected triple count' ); my @expect = ( '(triple )', '(triple )', '(triple _:a)', '(triple _:a "C")' ); my @seen = sort map { $_->as_string } @st; is_deeply( \@seen, \@expect, 'BD with 1-outdegree bnode' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = <<"END"; . . _:a . _:a _:c . _:c "D" . END $parser->parse_into_model(undef, $ntriples, $model); my $iter = $model->bounded_description( iri('a') ); isa_ok( $iter, 'RDF::Trine::Iterator::Graph' ); my @st = $iter->get_all; is( scalar(@st), 5, 'expected triple count' ); my @expect = ( '(triple )', '(triple )', '(triple _:a)', '(triple _:a _:c)', '(triple _:c "D")' ); my @seen = sort map { $_->as_string } @st; is_deeply( \@seen, \@expect, 'BD with 1-outdegree bnode chain' ); } RDF-Trine-1.007/t/model-dataset.t000644 000765 000024 00000016210 12054230225 016450 0ustar00gregstaff000000 000000 use Test::More tests => 41; use Test::Exception; use utf8; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri blank literal); use RDF::Trine::Model; use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Namespace; use RDF::Trine::Statement; use File::Temp qw(tempfile); my $default = RDF::Trine::Node::Nil->new; my $ex = RDF::Trine::Namespace->new('http://example.com/'); my $st0 = RDF::Trine::Statement->new( $ex->a, $ex->p, literal('default') ); my $st1 = RDF::Trine::Statement::Quad->new( $ex->a, $ex->p, literal('g1'), $ex->g1 ); my $st2 = RDF::Trine::Statement::Quad->new( $ex->a, $ex->r, literal('g2'), $ex->g2 ); my $st3 = RDF::Trine::Statement::Quad->new( $ex->a, $ex->r, literal('g3'), $ex->g3 ); my $st4 = RDF::Trine::Statement::Quad->new( $ex->a, $ex->r, literal('g3.2'), $ex->g3 ); my $store = RDF::Trine::Store->temporary_store; my $model = RDF::Trine::Model->new( $store ); isa_ok( $model, 'RDF::Trine::Model' ); $model->add_statement( $_ ) for ($st0, $st1, $st2, $st3, $st4); count_tests( $model ); get_statements_tests( $model ); get_statements_union_graph( $model ); sub get_statements_union_graph { my $model = shift; is( $model->count_statements( undef, $ex->r, undef, undef ), 3, 'count of statements with undef context' ); is( $model->count_statements( undef, $ex->r, undef, $ex->g2 ), 1, 'count of statements with iri context' ); is( $model->count_statements( undef, $ex->r, undef, iri('tag:gwilliams@cpan.org,2010-01-01:RT:ALL') ), 3, 'count of statements with special union-graph iri' ); } sub count_tests { my $_model = shift; my $model = RDF::Trine::Model::Dataset->new( $_model ); my $expected_msize = 5; print "# base model (default dataset)\n"; is( $model->count_statements( undef, undef, literal('default'), $default ), 1, 'count statements from actual default graph' ); count_test_1( $model, $expected_msize, 1, 2 ); print "# empty default dataset\n"; $model->push_dataset(); is( $model->count_statements( undef, undef, undef, $default ), 0, 'count statements from empty dataset' ); count_test_1( $model, 0, 0, 0 ); print "# 1-graph default dataset\n"; $model->push_dataset( default => [ $ex->g1 ] ); is( $model->count_statements( undef, undef, undef, $default ), 1, 'count statements from dataset with masked 1-graph default graph' ); count_test_2( $model, literal('g1') => 1 ); count_test_2( $model, literal('g2') => 0 ); count_test_2( $model, literal('g3') => 0 ); print "# 2-graph default dataset\n"; $model->push_dataset( default => [ $ex->g1, $ex->g3 ] ); is( $model->count_statements( undef, undef, undef, $default ), 3, 'count statements from dataset with masked 2-graph default graph' ); count_test_2( $model, literal('g1') => 1 ); count_test_2( $model, literal('g2') => 0 ); count_test_2( $model, literal('g3') => 1 ); print "# reverting to 1-graph default dataset\n"; $model->pop_dataset; is( $model->count_statements( undef, undef, undef, $default ), 1, 'count statements from dataset with masked 1-graph default graph' ); count_test_2( $model, literal('g1') => 1 ); count_test_2( $model, literal('g2') => 0 ); count_test_2( $model, literal('g3') => 0 ); } sub get_statements_tests { my $_model = shift; my $model = RDF::Trine::Model::Dataset->new( $_model ); print "# get_statements\n"; { my $iter = $model->get_statements; my %expect = (map { $_ => 1 } qw(default g1 g2 g3 g3.2)); my %got; while (my $row = $iter->next) { $got{ $row->object->literal_value }++; } is_deeply( \%got, \%expect, 'expected triple results on default dataset' ); } { my $iter = $model->get_statements( undef, undef, undef, undef ); my $expect = { '(nil)' => 1, '' => 1, '' => 1, '' => 2, }; my %got; while (my $row = $iter->next) { isa_ok( $row, 'RDF::Trine::Statement::Quad' ); $got{ $row->context->as_string }++; } is_deeply( \%got, $expect, 'expected quad results on default dataset' ); } $model->push_dataset( default => [ $ex->g1 ] ); { my $expect = { 'g1' => 1, }; my %got; my $iter = $model->get_statements; while (my $row = $iter->next) { $got{ $row->object->literal_value }++; } is_deeply( \%got, $expect, 'expected triple results on 1-graph default dataset' ); } { my $expect = { '(nil)' => 1, }; my %got; my $iter = $model->get_statements( undef, undef, undef, undef ); while (my $row = $iter->next) { $got{ $row->context->as_string }++; } is_deeply( \%got, $expect, 'expected quad results on 1-graph default dataset' ); } { my $expect = { map { $_ => 1 } qw(g1) }; my %got; my $iter = $model->get_statements( undef, undef, undef, $default ); while (my $row = $iter->next) { $got{ $row->object->literal_value }++; } is_deeply( \%got, $expect, 'expected default quad results on 1-graph default dataset' ); } $model->push_dataset( default => [ $ex->g1, $ex->g3 ] ); { my $iter = $model->get_statements; my $expect = { 'g1' => 1, 'g3' => 1, 'g3.2' => 1, }; my %got; while (my $row = $iter->next) { $got{ $row->object->literal_value }++; } is_deeply( \%got, $expect, 'expected triple results on 2-graph default dataset' ); } { my $iter = $model->get_statements( undef, undef, undef, undef ); my $expect = { '(nil)' => 3, }; my %got; while (my $row = $iter->next) { $got{ $row->context->as_string }++; } is_deeply( \%got, $expect, 'expected quad results on 2-graph default dataset' ); } { my $iter = $model->get_statements( undef, undef, undef, $default ); my $expect = { map { $_ => 1 } qw(g1 g3 g3.2) }; my %got; while (my $row = $iter->next) { $got{ $row->object->literal_value }++; } is_deeply( \%got, $expect, 'expected default quad results on 2-graph default dataset' ); } $model->push_dataset( default => [ $ex->g1, $ex->g3 ], named => [ $ex->g2 ] ); { my $iter = $model->get_statements; my $expect = { 'g1' => 1, 'g2' => 1, 'g3' => 1, 'g3.2' => 1, }; my %got; while (my $row = $iter->next) { $got{ $row->object->literal_value }++; } is_deeply( \%got, $expect, 'expected triple results on 2-graph default, 1 named graph dataset' ); } { my $iter = $model->get_statements( undef, undef, undef, undef ); my $expect = { '(nil)' => 3, '' => 1, }; my %got; while (my $row = $iter->next) { $got{ $row->context->as_string }++; } is_deeply( \%got, $expect, 'expected quad results on 2-graph default, 1 named graph dataset' ); } } sub count_test_1 { my $model = shift; my $msize = shift; my $dsize = shift; my $psize = shift; is( $model->count_statements(undef, undef, undef, undef), $msize, 'model size' ); is( $model->count_statements(undef, undef, undef, $default), $dsize, 'default graph size' ); is( $model->count_statements(), $msize, 'full model size' ); is( $model->count_statements( undef, $ex->p, undef ), $psize, 'count of ex:p statements in union' ); } sub count_test_2 { my $model = shift; my $node = shift; my $expect = shift; my $count = $model->count_statements(undef, undef, $node, $default); is( $count, $expect, "expected object count for " . $node->as_string ); } RDF-Trine-1.007/t/model-filter.t000644 000765 000024 00000021514 12054230225 016313 0ustar00gregstaff000000 000000 use Test::More tests => 74; use Test::Exception; use utf8; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use DBI; use RDF::Trine; use RDF::Trine::Model::StatementFilter; use RDF::Trine::Namespace; use RDF::Trine::Store::DBI; use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Statement; use File::Temp qw(tempfile); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $rdfs = RDF::Trine::Namespace->new('http://www.w3.org/2000/01/rdf-schema#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $nil = RDF::Trine::Node::Nil->new(); my $b = RDF::Trine::Node::Blank->new(); my $p = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf#greg'); my $st0 = RDF::Trine::Statement->new( $p, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams') ); my $st1q = RDF::Trine::Statement::Quad->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams'), $nil ); my $st2 = RDF::Trine::Statement->new( $b, $rdf->type, $foaf->Person ); my $st3 = RDF::Trine::Statement->new( $b, $foaf->name, RDF::Trine::Node::Literal->new('Eve') ); my $st3q = RDF::Trine::Statement::Quad->new( $b, $foaf->name, RDF::Trine::Node::Literal->new('Eve'), $nil ); { my $model = model(); isa_ok( $model, 'RDF::Trine::Model' ); $model->add_statement( $_ ) for ($st0, $st1, $st2, $st3); { is( $model->count_statements(), 4, 'initial model size' ); $model->add_statement( $_ ) for ($st0); is( $model->count_statements(), 4, 'model size after duplicate statements' ); is( $model->count_statements( undef, $foaf->name, undef ), 2, 'count of foaf:name statements after redundant add' ); } { my $stream = $model->get_statements( $p, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $st = $stream->next; is_deeply( $st, $st1q, 'got foaf:name statement' ); is( $stream->next, undef, 'expected end-of-stream (only one foaf:name statement)' ); } { my $stream = $model->get_statements( $b, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $st = $stream->next; is_deeply( $st, $st3q, 'got foaf:name statement (with bnode in triple)' ); is( $stream->next, undef, 'expected end-of-stream (only one foaf:name statement with bnode)' ); } { my $stream = $model->get_statements( RDF::Trine::Node::Variable->new('p'), $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams') ); my $st = $stream->next; is_deeply( $st, $st1q, 'got foaf:name statement (with literal in triple)' ); is( $stream->next, undef, 'expected end-of-stream (only one foaf:name statement with literal)' ); } { my $stream = $model->get_statements( RDF::Trine::Node::Variable->new('p'), $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $count = 0; while (my $st = $stream->next) { my $subj = $st->subject; isa_ok( $subj, 'RDF::Trine::Node' ); $count++; } is( $count, 2, 'got two results for triple { ?p foaf:name ?name }' ); } { my $p1 = RDF::Trine::Statement->new( RDF::Trine::Node::Variable->new('p'), $rdf->type, $foaf->Person ); my $p2 = RDF::Trine::Statement->new( RDF::Trine::Node::Variable->new('p'), $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $pattern = RDF::Trine::Pattern->new( $p1, $p2 ); { my $stream = $model->get_pattern( $pattern ); my $count = 0; while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node', 'node person' ); isa_ok( $b->{name}, 'RDF::Trine::Node::Literal', 'literal name' ); like( $b->{name}->literal_value, qr/Eve|Gregory/, 'name pattern' ); $count++; } is( $count, 2, 'got two results for pattern { ?p a foaf:Person ; foaf:name ?name }' ); } { { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'name' => 'ASC' ] ); is_deeply( [ $stream->sorted_by ], ['name' => 'ASC'], 'results sort order (ASC)' ); my $count = 0; my @expect = ('Eve', 'Gregory Todd Williams'); while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node', 'node person' ); my $name = shift(@expect); is( $b->{name}->literal_value, $name, 'name pattern' ); $count++; } is( $count, 2, 'got two results for ascending-ordered pattern { ?p a foaf:Person ; foaf:name ?name }' ); } { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'name' => 'DESC' ] ); is_deeply( [ $stream->sorted_by ], ['name' => 'DESC'], 'results sort order (DESC)' ); my $count = 0; my @expect = ('Gregory Todd Williams', 'Eve'); while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node', 'node person' ); my $name = shift(@expect); is( $b->{name}->literal_value, $name, 'name pattern' ); $count++; } is( $count, 2, 'got two results for descending-ordered pattern { ?p a foaf:Person ; foaf:name ?name }' ); } } { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'date' => 'ASC' ] ); is_deeply( [ $stream->sorted_by ], [], 'results sort order for unknown binding' ); } { throws_ok { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'name' ] ); } 'Error', 'bad ordering request throws exception'; } { my $stream = $model->get_pattern( $st0 ); my $empty = $stream->next; is_deeply( $empty, RDF::Trine::VariableBindings->new({}), 'empty binding on no-variable pattern' ); is( $stream->next, undef, 'end-of-stream' ); } } { my $stream = $model->as_stream(); isa_ok( $stream, 'RDF::Trine::Iterator::Graph' ); my $count = 0; while (my $st = $stream->next) { my $p = $st->predicate; like( $p->uri_value, qr<(#type|/name)$>, 'as_stream statement' ); $count++; } is( $count, 4, 'expected model statement count (4)' ); } { my $st5 = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('グレゴリ ウィリアムス', 'jp') ); $model->add_statement( $st5 ); my $pattern = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $stream = $model->get_pattern( $pattern ); my $count = 0; while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{name}, 'RDF::Trine::Node::Literal', 'literal name' ); like( $b->{name}->literal_value, qr/Gregory|グレゴリ/, 'name pattern with language-tagged result' ); $count++; } is( $count, 2, 'expected result count (2 names)' ); is( $model->count_statements(), 5, 'model size' ); $model->remove_statement( $st5 ); is( $model->count_statements(), 4, 'model size after remove_statement' ); } { my $st6 = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams', undef, 'http://www.w3.org/2000/01/rdf-schema#Literal') ); $model->add_statement( $st6 ); my $pattern = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $stream = $model->get_pattern( $pattern ); my $count = 0; my $dt = 0; while (my $b = $stream->next) { my $name = $b->{name}; isa_ok( $b, 'HASH' ); isa_ok( $name, 'RDF::Trine::Node::Literal', 'literal name' ); is( $name->literal_value, 'Gregory Todd Williams', 'name pattern with datatyped result' ); if (my $type = $name->literal_datatype) { is( $type, 'http://www.w3.org/2000/01/rdf-schema#Literal', 'datatyped literal' ); $dt++; } $count++; } is( $count, 2, 'expected result count (2 names)' ); is( $dt, 1, 'expected result count (1 datatyped literal)' ); } { $model->remove_statements( $p ); is( $model->count_statements(), 2, 'model size after remove_statements' ); } throws_ok { my $pattern = RDF::Trine::Pattern->new(); my $stream = $model->get_pattern( $pattern ); } 'RDF::Trine::Error::CompilationError', 'empty GGP throws exception'; ################################################################################ { my $stream = $model->get_statements( undef, $rdf->type, $foaf->Person ); isa_ok( $stream, 'RDF::Trine::Iterator' ); my $st = $stream->next; isa_ok( $st, 'RDF::Trine::Statement', 'got expected type statement' ); } is( $model->count_statements(), 2, 'model size before add_rule' ); $model->add_rule( sub { my $st = shift; my $p = $st->predicate; return 0 if ($p->equal( $rdf->type )); return 1; warn $st->as_string; } ); is( $model->count_statements(), 1, 'model size after add_rule' ); { my $stream = $model->get_statements( undef, $rdf->type, $foaf->person ); isa_ok( $stream, 'RDF::Trine::Iterator' ); my $st = $stream->next; is( $st, undef, 'expected empty iterator for hidden type statement' ); } } sub model { my $store = RDF::Trine::Store::DBI->new(); $store->init(); my $model = RDF::Trine::Model::StatementFilter->new( $store ); return $model; } RDF-Trine-1.007/t/model-logger.t000644 000765 000024 00000003730 12165612564 016322 0ustar00gregstaff000000 000000 use Test::More; use RDF::Trine::Exporter::RDFPatch; use strict; use warnings; use RDF::Trine; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $HEADER = qq[\@prefix foaf: .\n\@prefix rdf: .\n\n]; my $page = RDF::Trine::Node::Resource->new('http://kasei.us/'); my $g = RDF::Trine::Node::Blank->new('greg'); my $st0 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); # my $st0_p = q[_:greg rdf:type foaf:Person]; my $st1 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); # my $st1_p = q[_:greg foaf:name "Greg"]; my $st2 = RDF::Trine::Statement->new( $g, $foaf->homepage, $page ); # my $st2_p = q[_:greg foaf:homepage ]; my $st3 = RDF::Trine::Statement->new( $page, $rdf->type, $foaf->Document ); # my $st3_p = q[ rdf:type foaf:Document]; { my $sink = RDF::Trine::Serializer::StringSink->new(); my $log = RDF::Trine::Exporter::RDFPatch->new( sink => $sink, namespaces => { rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', foaf => 'http://xmlns.com/foaf/0.1/' } ); my $model = RDF::Trine::Model->new(); $model->logger( $log ); $model->add_statement( $st0 ); is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\n] ); $model->add_statement( $st1 ); is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\nA R foaf:name "Greg" .\n] ); $model->add_statement( $st3 ); is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\nA R foaf:name "Greg" .\nA rdf:type foaf:Document .\n] ); $model->remove_statement( $st0 ); is( $sink->string, qq[${HEADER}A _:greg rdf:type foaf:Person .\nA R foaf:name "Greg" .\nA rdf:type foaf:Document .\nD _:greg R foaf:Person .\n] ); } done_testing(); RDF-Trine-1.007/t/model-temporary.t000644 000765 000024 00000001755 12054230225 017055 0ustar00gregstaff000000 000000 use Test::More tests => 6; use Test::Exception; use utf8; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri); use RDF::Trine::Model; ### Test a temporary model's ability to switch from a fast in-memory store ### (::Store::Hexastore) initially to a more scalable store (::Store::DBI) ### as more triples are loaded. my $model = RDF::Trine::Model->temporary_model; isa_ok( $model, 'RDF::Trine::Model' ); isa_ok( $model->_store, 'RDF::Trine::Store', 'initial store type' ); my $initial = ref($model->_store); is( $model->size, 0, 'expected model size' ); $model->{threshold} = 10; foreach my $i (0 .. $model->{threshold}) { my $n = iri("http://example.org/$i"); my $st = RDF::Trine::Statement->new( $n, $n, $n ); $model->add_statement( $st ); } is( $model->size, 11, 'expected model size' ); isa_ok( $model->_store, 'RDF::Trine::Store', 'final store type' ); my $final = ref($model->_store); cmp_ok( $initial, 'ne', $final, 'expected change in store stype beyond threshold' ); RDF-Trine-1.007/t/model-union.t000644 000765 000024 00000005665 12054230225 016167 0ustar00gregstaff000000 000000 use Test::More tests => 9; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine; use RDF::Trine::Model::Union; use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Namespace; use RDF::Trine::Statement; use File::Temp qw(tempfile); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $g = RDF::Trine::Node::Blank->new(); my $h = RDF::Trine::Node::Blank->new(); my $st0 = RDF::Trine::Statement->new( $h, $foaf->name, RDF::Trine::Node::Literal->new('Alice') ); my $st1 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); my $st2 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); my $st3 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Gregory') ); my $store1 = RDF::Trine::Store->temporary_store(); my $store2 = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model::Union->new( $store1, $store2 ); $store1->add_statement( $_ ) for ($st0, $st1); $store2->add_statement( $_ ) for ($st2); $model->add_statement( $st3 ); { my $x = RDF::Trine::Node::Variable->new( 'x' ); my $t = RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ); my $p = RDF::Trine::Pattern->new( $t ); my $iter = $model->get_pattern( $p ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my (@rows) = $iter->get_all; is_deeply( \@rows, [ RDF::Trine::VariableBindings->new({ x => $g }) ], '1-triple get_pattern results' ); } { my $x = RDF::Trine::Node::Variable->new( 'x' ); my $n = RDF::Trine::Node::Variable->new( 'name' ); my $p = RDF::Trine::Pattern->new( RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ), RDF::Trine::Statement->new( $x, $foaf->name, $n ), ); my $iter = $model->get_pattern( $p ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my %got; my $count = 0; while (my $row = $iter->next) { $got{ $row->{'name'}->literal_value }++; $count++; } my $expect = { qw(Greg 1 Gregory 1) }; is( $count, 2, 'expected result count' ); is_deeply( \%got, $expect, '2-triple get_pattern results' ); } $model->remove_statement( $st3 ); { my $x = RDF::Trine::Node::Variable->new( 'x' ); my $n = RDF::Trine::Node::Variable->new( 'name' ); my $p = RDF::Trine::Pattern->new( RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ), RDF::Trine::Statement->new( $x, $foaf->name, $n ), ); my $iter = $model->get_pattern( $p ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my %got; my $count = 0; while (my $row = $iter->next) { $got{ $row->{'name'}->literal_value }++; $count++; } my $expect = { qw(Greg 1) }; is( $count, 1, 'expected result count' ); is_deeply( \%got, $expect, '2-triple get_pattern results' ); } $model->remove_statements( $g, undef, undef ); is( $model->size, 1, 'model size after remove_statements' ); RDF-Trine-1.007/t/model.t000644 000765 000024 00000027146 12054230225 015037 0ustar00gregstaff000000 000000 use Test::More; use Test::Exception; use utf8; use strict; use warnings; no warnings 'redefine'; use DBI; use RDF::Trine qw(literal); use RDF::Trine::Model; use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Namespace; use RDF::Trine::Store::DBI; use RDF::Trine::Statement; use File::Temp qw(tempfile); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $xsd = RDF::Trine::Namespace->new('http://www.w3.org/2001/XMLSchema#'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $b = RDF::Trine::Node::Blank->new(); my $p = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf#greg'); my $intval = RDF::Trine::Node::Literal->new('23',undef,$xsd->int); my $langval = RDF::Trine::Node::Literal->new('gwilliams','en'); my $st0 = RDF::Trine::Statement->new( $p, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams') ); my $st2 = RDF::Trine::Statement->new( $b, $rdf->type, $foaf->Person ); my $st3 = RDF::Trine::Statement->new( $b, $foaf->name, RDF::Trine::Node::Literal->new('Eve') ); my $st4 = RDF::Trine::Statement->new( $p, $foaf->knows, $b ); my $st5 = RDF::Trine::Statement->new( $p, $foaf->nick, $langval ); my $st6 = RDF::Trine::Statement->new( $p, $foaf->age, $intval); my ($stores, $remove) = stores(); plan tests => 7 + 85 * scalar(@$stores); print "### Testing auto-creation of store\n"; isa_ok( RDF::Trine::Model->new( 'Memory' ), 'RDF::Trine::Model' ); foreach my $store (@$stores) { print "### Testing store " . ref($store) . "\n"; isa_ok( $store, 'RDF::Trine::Store' ); my $model = RDF::Trine::Model->new( $store ); isa_ok( $model, 'RDF::Trine::Model' ); $model->add_statement( $_ ) for ($st0, $st1, $st2, $st3); { is( $model->count_statements(), 4, 'model size' ); $model->add_statement( $_ ) for ($st0); is( $model->count_statements(), 4, 'model size after duplicate statements' ); is( $model->count_statements( undef, $foaf->name, undef ), 2, 'count of foaf:name statements' ); } { my $stream = $model->get_statements( $p, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $st = $stream->next; is_deeply( $st, $st1, 'foaf:name statement' ); is( $stream->next, undef, 'end-of-stream' ); } { throws_ok { my $iter = $model->get_statements(''); } 'RDF::Trine::Error::MethodInvocationError', 'get_statements called with non-object argument'; } { throws_ok { $model->add_statement($p, $rdf->type, $foaf->Person); } 'RDF::Trine::Error::MethodInvocationError', 'add_statement called with 3 nodes, not a statement'; throws_ok { $model->add_statement($p, $rdf->type, $foaf->Person, $p); } 'RDF::Trine::Error::MethodInvocationError', 'add_statement called with 4 nodes, not a statement'; throws_ok { $model->add_statement('http://example.org/subject', 'http://example.org/predicate', 'String'); } 'RDF::Trine::Error::MethodInvocationError', 'add_statement called with strings, not a statement'; } { my $stream = $model->get_statements( $b, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $st = $stream->next; is_deeply( $st, $st3, 'foaf:name statement (with bnode in triple)' ); is( $stream->next, undef, 'end-of-stream' ); } { my $stream = $model->get_statements( RDF::Trine::Node::Variable->new('p'), $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams') ); my $st = $stream->next; is_deeply( $st, $st1, 'foaf:name statement (with literal in triple)' ); is( $stream->next, undef, 'end-of-stream' ); } { my $stream = $model->get_statements( RDF::Trine::Node::Variable->new('p'), $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $count = 0; while (my $st = $stream->next) { my $subj = $st->subject; isa_ok( $subj, 'RDF::Trine::Node' ); $count++; } is( $count, 2, 'expected result count (2 people) 1' ); } { my $p1 = RDF::Trine::Statement->new( RDF::Trine::Node::Variable->new('p'), $rdf->type, $foaf->Person ); my $p2 = RDF::Trine::Statement->new( RDF::Trine::Node::Variable->new('p'), $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $pattern = RDF::Trine::Pattern->new( $p1, $p2 ); { my $stream = $model->get_pattern( $pattern ); my $count = 0; while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node', 'node person' ); isa_ok( $b->{name}, 'RDF::Trine::Node::Literal', 'literal name' ); like( $b->{name}->literal_value, qr/Eve|Gregory/, 'name pattern' ); $count++; } is( $count, 2, 'expected result count (2 people) 2' ); } { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'name', 'ASC' ] ); is_deeply( [ $stream->sorted_by ], ['name', 'ASC'], 'results sort order' ); my $count = 0; my @expect = ('Eve', 'Gregory Todd Williams'); while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node', 'node person' ); my $name = shift(@expect); is( $b->{name}->literal_value, $name, 'name pattern' ); $count++; } is( $count, 2, 'expected result count (2 people) 3' ); } { my $stream = $model->get_pattern( $pattern, undef, orderby => [ qw(name DESC p ASC) ] ); is_deeply( [ $stream->sorted_by ], ['name', 'DESC', 'p', 'ASC'], 'results sort order' ); my $count = 0; my @expect = ('Gregory Todd Williams', 'Eve'); while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{p}, 'RDF::Trine::Node', 'node person' ); my $name = shift(@expect); is( $b->{name}->literal_value, $name, 'name pattern' ); $count++; } is( $count, 2, 'expected result count (2 people) 4' ); } { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'date', 'ASC' ] ); is_deeply( [ $stream->sorted_by ], [], 'results sort order for unknown binding' ); } { throws_ok { my $stream = $model->get_pattern( $pattern, undef, orderby => [ 'name' ] ); } 'RDF::Trine::Error::MethodInvocationError', 'bad ordering request throws exception'; } } { my $stream = $model->get_pattern( $st0 ); my $empty = $stream->next; is_deeply( $empty, RDF::Trine::VariableBindings->new({}), 'empty binding on no-variable pattern' ); is( $stream->next, undef, 'end-of-stream' ); } { my $stream = $model->as_stream(); isa_ok( $stream, 'RDF::Trine::Iterator::Graph' ); my $count = 0; while (my $st = $stream->next) { my $p = $st->predicate; like( $p->uri_value, qr<(#type|/name)$>, 'as_stream statement' ); $count++; } is( $count, 4, 'expected model statement count (4)' ); } { { my @subj = $model->subjects( $rdf->type ); my @preds = $model->predicates( $p ); my @objs = $model->objects( $p ); is( scalar(@subj), 2, "expected subject count on rdf:type" ); is( scalar(@preds), 2, "expected predicate count on " . $p->uri_value ); is( scalar(@objs), 2, "expected objects count on " . $p->uri_value ); } { my @subjs = $model->subjects( $foaf->name, literal('Eve') ); my @preds = $model->predicates( $p, $foaf->Person ); my @objs = $model->objects( $p, $rdf->type ); is( scalar(@subjs), 1, "expected subject count on rdf:type" ); ok( $subjs[0]->isa('RDF::Trine::Node::Blank'), 'expected subject' ); is( scalar(@preds), 1, "expected predicate count on " . $p->uri_value ); ok( $preds[0]->equal( $rdf->type ), 'expected predicate' ); is( scalar(@objs), 1, "expected objects count on " . $p->uri_value ); ok( $objs[0]->equal( $foaf->Person ), 'expected object' ); } { my $subjs = $model->subjects( $rdf->type ); my $preds = $model->predicates( $p ); my $objs = $model->objects( $p ); isa_ok( $subjs, 'RDF::Trine::Iterator', 'expected iterator from subjects()' ); isa_ok( $preds, 'RDF::Trine::Iterator', 'expected iterator from predicates()' ); isa_ok( $objs, 'RDF::Trine::Iterator', 'expected iterator from objects()' ); } } { my $st5 = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('グレゴリ ウィリアムス', 'jp') ); $model->add_statement( $st5 ); my $pattern = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $stream = $model->get_pattern( $pattern ); my $count = 0; while (my $b = $stream->next) { isa_ok( $b, 'HASH' ); isa_ok( $b->{name}, 'RDF::Trine::Node::Literal', 'literal name' ); my $value = $b->{name}->literal_value; like( $value, qr/Gregory|グレゴリ/, 'name pattern with language-tagged result' ); $count++; } is( $count, 2, 'expected result count (2 names)' ); is( $model->count_statements(), 5, 'model size' ); $model->remove_statement( $st5 ); is( $model->count_statements(), 4, 'model size after remove_statement' ); } { my $st6 = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Literal->new('Gregory Todd Williams', undef, 'http://www.w3.org/2000/01/rdf-schema#Literal') ); $model->add_statement( $st6 ); my $pattern = RDF::Trine::Statement->new( $p, $foaf->name, RDF::Trine::Node::Variable->new('name') ); my $stream = $model->get_pattern( $pattern ); my $count = 0; my $dt = 0; while (my $b = $stream->next) { my $name = $b->{name}; isa_ok( $b, 'HASH' ); isa_ok( $name, 'RDF::Trine::Node::Literal', 'literal name' ); is( $name->literal_value, 'Gregory Todd Williams', 'name pattern with datatyped result' ); if (my $type = $name->literal_datatype) { is( $type, 'http://www.w3.org/2000/01/rdf-schema#Literal', 'datatyped literal' ); $dt++; } $count++; } is( $count, 2, 'expected result count (2 names)' ); is( $dt, 1, 'expected result count (1 datatyped literal)' ); } { $model->remove_statements( $p ); is( $model->count_statements(), 2, 'model size after remove_statements' ); } { throws_ok { my $pattern = RDF::Trine::Pattern->new(); my $stream = $model->get_pattern( $pattern ); } 'RDF::Trine::Error::CompilationError', 'empty GGP throws exception'; } } foreach my $file (@$remove) { unlink( $file ); } { # test optional parameters of RDF::Trine::Model::objects my $model = RDF::Trine::Model->new; $model->add_statement( $_ ) for ($st0, $st1, $st3, $st4, $st5, $st6); my %types = (blank => 1, literal => 3, resource => 1); while (my ($type,$count) = each(%types)) { my @objs = $model->objects( $p, undef, type => $type ); is( scalar(@objs), $count, "expected objects count on type $type"); } my @objs = $model->objects( $p, undef, language => 'en' ); ok( $objs[0]->equal( $langval ), 'expected integer value as object' ); foreach my $dt ( $xsd->int, $xsd->int->uri_value ) { @objs = $model->objects( $p, undef, datatype => $dt ); ok( $objs[0]->equal( $intval ), 'expected integer value as object' ); } } sub stores { my @stores; my @removeme; push(@stores, RDF::Trine::Store::Memory->temporary_store()); { my $store = RDF::Trine::Store::DBI->new(); $store->init(); push(@stores, $store); } { my ($fh, $filename) = tempfile(); undef $fh; my $dbh = DBI->connect( "dbi:SQLite:dbname=${filename}", '', '' ); my $store = RDF::Trine::Store::DBI->new( 'model', $dbh ); $store->init(); push(@stores, $store); push(@removeme, $filename); } { my ($fh, $filename) = tempfile(); undef $fh; my $dsn = "dbi:SQLite:dbname=${filename}"; my $store = RDF::Trine::Store::DBI->new( 'model', $dsn, '', '' ); $store->init(); push(@stores, $store); push(@removeme, $filename); } return (\@stores, \@removeme); } sub debug { my $store = shift; my $dbh = $store->dbh; my $sth = $dbh->prepare( "SELECT * FROM Statements15799945864759145248" ); $sth->execute(); while (my $row = $sth->fetchrow_hashref) { warn Dumper($row); } } RDF-Trine-1.007/t/namespace-export.t000644 000765 000024 00000000735 12054230225 017205 0ustar00gregstaff000000 000000 use Test::More tests => 5; use RDF::Trine; use RDF::Trine::Namespace qw(FOAF DC rdf); isa_ok( $FOAF, 'RDF::Trine::Namespace' ); my $uri = $FOAF->homepage; isa_ok( $uri, 'RDF::Trine::Node' ); is( $uri->uri_value, 'http://xmlns.com/foaf/0.1/homepage', 'foaf:homepage' ); is( $DC->title->uri_value, 'http://purl.org/dc/elements/1.1/title', 'dc:title' ); is( $rdf->type->uri_value, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'rdf:type (lowercased known namespace)' ); RDF-Trine-1.007/t/namespace-uri.t000644 000765 000024 00000000435 12054230225 016460 0ustar00gregstaff000000 000000 use Test::More tests => 3; use RDF::Trine; my $foaf = RDF::Trine::Namespace->new( 'http://xmlns.com/foaf/0.1/' ); isa_ok( $foaf, 'RDF::Trine::Namespace' ); my $uri = $foaf->homepage; isa_ok( $uri, 'RDF::Trine::Node' ); is( $uri->uri_value, 'http://xmlns.com/foaf/0.1/homepage' ); RDF-Trine-1.007/t/namespacemap.t000644 000765 000024 00000005364 12065422135 016374 0ustar00gregstaff000000 000000 use Test::More tests => 19; use strict; use RDF::Trine; use RDF::Trine::Namespace qw(rdf xsd); my $foaf = RDF::Trine::Namespace->new( 'http://xmlns.com/foaf/0.1/' ); { my $map = RDF::Trine::NamespaceMap->new; isa_ok( $map, 'RDF::Trine::NamespaceMap' ); } { my $map = RDF::Trine::NamespaceMap->new( { foaf => $foaf, rdf => $rdf } ); isa_ok( $map, 'RDF::Trine::NamespaceMap' ); } my $map = RDF::Trine::NamespaceMap->new( { foaf => $foaf, rdf => $rdf, xsd => 'http://www.w3.org/2001/XMLSchema#' } ); isa_ok( $map, 'RDF::Trine::NamespaceMap' ); my $ns = $map->xsd; isa_ok( $ns, 'RDF::Trine::Namespace' ); $map->remove_mapping( 'xsd' ); is( $map->xsd, undef, 'removed namespace' ); $map = RDF::Trine::NamespaceMap->new( { foaf => 'http://xmlns.com/foaf/0.1/', '' => 'http://example.org/' } ); isa_ok( $map, 'RDF::Trine::NamespaceMap' ); is ( $map->uri(':foo')->uri_value, 'http://example.org/foo', 'empty prefix' ); $map->add_mapping( rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' ); my $type = $map->rdf('type'); isa_ok( $type, 'RDF::Trine::Node::Resource' ); is( $type->uri_value, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'expected uri for namespace map qname' ); $ns = $map->foaf; isa_ok( $ns, 'RDF::Trine::Namespace' ); my $uri = $ns->uri_value; is( $uri->uri_value, 'http://xmlns.com/foaf/0.1/', 'expected resource object for namespace from namespace map' ); $type = $map->uri('rdf:type'); isa_ok( $type, 'RDF::Trine::Node::Resource' ); is( $type->uri_value, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type', 'resolving via uri method' ); $uri = $map->uri('foaf:'); is( $uri->uri_value, 'http://xmlns.com/foaf/0.1/', 'resolving via uri method' ); $uri = $map->uri('foaf'); isa_ok( $type, 'RDF::Trine::Node::Resource' ); # abbreviate implicitly checks prefix_for is($map->abbreviate($map->foaf('Person')), 'foaf:Person', 'abbrev with prefix'); is($map->abbreviate($map->uri(':foo')), ':foo', 'abbrev no prefix '); is($map->abbreviate('http://derp.net/foobar'), undef, 'abbrev no match'); { my $rdf = <<'END'; END my $map = RDF::Trine::NamespaceMap->new(); my $model = RDF::Trine::Model->new(); my $parser = RDF::Trine::Parser->new( 'rdfxml', namespaces => $map ); $parser->parse_into_model( 'http://base/', $rdf, $model ); my $s = RDF::Trine::Serializer->new( 'turtle', namespaces => $map ); my $ttl = $s->serialize_model_to_string( $model ); like( $ttl, qr< a foaf:Person>sm, 'namespaces pass through parser to serializer' ); } RDF-Trine-1.007/t/node-literal.t000644 000765 000024 00000002754 12054230225 016314 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 30; use utf8; use RDF::Trine qw(literal); use RDF::Trine::Namespace qw(xsd); ok( literal('0', undef, $xsd->integer)->is_valid_lexical_form, 'integer valid lexical form' ); ok( literal('1', undef, $xsd->integer)->is_valid_lexical_form, 'integer valid lexical form' ); ok( literal('01', undef, $xsd->integer)->is_valid_lexical_form, 'integer valid lexical form' ); ok( not(literal('02 ', undef, $xsd->integer)->is_valid_lexical_form), 'integer valid lexical form' ); ok( not(literal('abc', undef, $xsd->integer)->is_valid_lexical_form), 'integer valid lexical form' ); my %values = ( integer => { '01' => '1', '+1' => '1', '-01' => '-1', }, decimal => { '0.00' => '0.0', '+01.10' => '1.1', }, float => { '-1E4' => '-1.0E4', '-1e4' => '-1.0E4', '+1e+01' => '1.0E1', '1e+000' => '1.0E0', '-INF' => '-INF', '+INF' => 'INF', 'NaN' => 'NaN', '12.78e-2' => '1.278E-1', }, double => { '-1E4' => '-1.0E4', '-1e4' => '-1.0E4', '+1e+01' => '1.0E1', '1e+000' => '1.0E0', '-INF' => '-INF', '+INF' => 'INF', 'NaN' => 'NaN', '12.78e-2' => '1.278E-1', }, boolean => { 'true' => 'true', '1' => 'true', 'false' => 'false', '0' => 'false', }, ); foreach my $type (keys %values) { while (my($k,$v) = each(%{ $values{$type} })) { my $canon = literal($k, undef, $xsd->$type(), 1); is( $canon->literal_value, $v, "canonicalization of xsd:$type" ); } } __END__ RDF-Trine-1.007/t/node-resource-i18n.t000644 000765 000024 00000001015 12054230225 017251 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 2; use utf8; use RDF::Trine; use RDF::Trine::Node; { my $uri = RDF::Trine::Node::Resource->new('http://kasei.us/#火星'); is( $uri->uri_value, 'http://kasei.us/#火星', 'i18n uri value' ); } { my $base = RDF::Trine::Node::Resource->new('http://kasei.us/'); my $uri = RDF::Trine::Node::Resource->new('#火星', $base); is( $uri->uri_value, 'http://kasei.us/#火星', 'i18n uri value using BASE' ); } __END__ RDF-Trine-1.007/t/node-serialization.t000644 000765 000024 00000004336 12054230225 017533 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 17; use RDF::Trine; use RDF::Trine::Node; { my $literal = RDF::Trine::Node::Literal->new('foo'); is( $literal->sse, '"foo"', 'plain literal sse' ); is( $literal->as_string, '"foo"', 'plain literal as_string' ); } { my $literal = RDF::Trine::Node::Literal->new('foo', 'en'); is( $literal->sse, '"foo"@en', 'language literal sse' ); is( $literal->as_string, '"foo"@en', 'language literal as_string' ); } { my $literal = RDF::Trine::Node::Literal->new('1', undef, 'http://www.w3.org/2001/XMLSchema#integer'); is( $literal->sse, '"1"^^', 'datatype literal sse' ); is( $literal->as_string, '"1"^^', 'datatype literal as_string' ); } { my $uri = RDF::Trine::Node::Resource->new('http://example.org/'); is( $uri->sse, '', 'uri sse' ); is( $uri->as_string, '', 'uri as_string' ); } { my $blank = RDF::Trine::Node::Blank->new('b1'); is( $blank->sse, '_:b1', 'blank sse' ); is( $blank->as_string, '(b1)', 'blank as_string' ); } { my $blank = RDF::Trine::Node::Variable->new('person'); is( $blank->sse, '?person', 'variable sse' ); is( $blank->as_string, '?person', 'blank as_string' ); } { my $string = "\x04\x{10001}"; my $literal = RDF::Trine::Node::Literal->new($string); is( $literal->as_ntriples, '"\u0004\U00010001"', 'unicode escaping of x04x10001' ); } { my $literal = RDF::Trine::Node::Literal->new("\x7f"); is( $literal->as_ntriples, '"\u007F"', 'unicode escaping of x7f' ); } { my $literal = RDF::Trine::Node::Literal->new(qq[a\r\t"\x80\x{10f000}b\x0b]); my $expect = q["a\r\t\"\u0080\U0010F000b\u000B"]; is( $literal->as_ntriples, $expect, 'unicode escaping of a\\r\\t"x{80}x{10f000}bx{0b}' ); } { my $uri = RDF::Trine::Node::Resource->new('http://example.org/bar'); is( $uri->sse({ namespaces => { foo => 'http://example.org/' } }), 'foo:bar', 'uri sse with valid namespace' ); } { my $uri = RDF::Trine::Node::Resource->new('http://example.org/bar'); is( $uri->sse({ namespaces => { foo => 'http://example.com/' } }), '', 'uri sse with invalid namespace' ); } __END__ RDF-Trine-1.007/t/node.t000644 000765 000024 00000022022 12164234713 014660 0ustar00gregstaff000000 000000 use Test::More tests => 73; use Test::Exception; use utf8; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(refaddr); use RDF::Trine qw(variable literal); use RDF::Trine::Error qw(:try); use RDF::Trine::Node; use RDF::Trine::Namespace qw(xsd); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $a = RDF::Trine::Node::Blank->new('a'); my $b = RDF::Trine::Node::Blank->new(); my $l = RDF::Trine::Node::Literal->new( 'value' ); my $ll = RDF::Trine::Node::Literal->new( 'value', 'en' ); my $dl = RDF::Trine::Node::Literal->new( '123', undef, 'http://www.w3.org/2001/XMLSchema#integer' ); my $dl2 = RDF::Trine::Node::Literal->new( '123', undef, $xsd->integer ); my $dl3 = RDF::Trine::Node::Literal->new( '123', undef, $xsd->decimal ); my $p = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf#greg'); my $p2 = RDF::Trine::Node::Resource->new('#greg', URI->new('http://kasei.us/about/foaf.xrdf')); my $name = RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'); my $v = RDF::Trine::Node::Variable->new('v'); my $k = RDF::Trine::Node::Resource->new('http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#食べる'); my $k2 = RDF::Trine::Node::Resource->new('/2001/sw/DataAccess/tests/data/i18n/kanji.ttl#食べる', 'http://www.w3.org/'); my $k3 = RDF::Trine::Node::Resource->new('#食べる', 'http://www.w3.org/2001/sw/DataAccess/tests/data/i18n/kanji/食'); my $urn = RDF::Trine::Node::Resource->new('urn:x-demonstrate:bug'); throws_ok { RDF::Trine::Node::Literal->new('foo', 'en', 'http://dt') } 'RDF::Trine::Error::MethodInvocationError', 'RDF::Trine::Node::Literal::new throws with both langauge and datatype'; throws_ok { RDF::Trine::Node::Blank->new('foo bar') } 'RDF::Trine::Error::SerializationError', 'RDF::Trine::Node::Blank::new throws with a label that includes whitespace'; is( $b->type, 'BLANK', 'blank type' ); is( $l->type, 'LITERAL', 'literal type' ); is( $p->type, 'URI', 'resource type' ); ok( $a->is_node, 'is_node' ); ok( not($a->is_resource), '!is_resource' ); ok( not($p->isa('RDF::Trine::Node::Blank')), '!is_blank' ); ok( not($p->is_variable), '!is_variable' ); ok( $a->equal( $a ), 'blank equal' ); ok( not($a->equal( $b )), 'blank not-equal' ); ok( not($a->equal( $name )), 'blank-resource not-equal' ); ok( $name->equal( $foaf->name ), 'resource equal' ); ok( not($name->equal( $p )), 'resource not-equal' ); ok( not($l->equal(0)), 'literal not-equal non-blessed' ); ok( not($l->equal(bless({},'Foo'))), 'literal not-equal non-recognized blessed' ); ok( not($l->equal( $p )), 'literal not-equal resource' ); ok( not($ll->equal( $dl )), 'plain and dt literals not-equal' ); ok( $dl->equal( $dl2 ), 'dt literals equal' ); ok( not($dl->equal( $dl3 )), 'different dt literals not-equal' ); ok( not($ll->equal( literal(qw(value en-us)) )), 'language literal not-equal' ); ok( $ll->equal( literal(qw(value en)) ), 'language literal equal' ); ok( not($p->equal( $l )), 'resource not-equal literal' ); ok( $p->equal( $p2 ), 'resource equal resource with URI base' ); ok( not($v->equal(0)), 'variable not-equal non-blessed' ); ok( not($v->equal(bless({},'Foo'))), 'variable not-equal non-recognized blessed' ); ok( not($v->equal($p)), 'variable not-equal resource' ); ok( $v->equal(variable('v')), 'variable equal' ); ok( $k->equal( $k2 ), 'resource equal with base constructor' ); # as_string is( $a->as_string, '(a)', 'blank as_string' ); is( $l->as_string, '"value"', 'plain literal as_string' ); is( $ll->as_string, '"value"@en', 'language literal as_string' ); is( $dl->as_string, '"123"^^', 'datatype literal as_string' ); is( $p->as_string, '', 'resource as_string' ); is( $k->as_string, '', 'unicode literal as_string' ); is( $k3->as_string, '', 'resource with unicode base as_string' ); # as_ntriples is( $a->as_ntriples, '_:a', 'blank as_ntriples' ); is( $l->as_ntriples, '"value"', 'plain literal as_ntriples' ); is( $ll->as_ntriples, '"value"@en', 'language literal as_ntriples' ); is( $dl->as_ntriples, '"123"^^', 'datatype literal as_ntriples' ); is( $p->as_ntriples, '', 'resource as_ntriples' ); is( $k->as_ntriples, '', 'unicode literal as_ntriples' ); throws_ok { $v->as_ntriples } 'RDF::Trine::Error::UnimplementedError', 'RDF::Trine::Node::Variable::as_ntriples throws'; { local($RDF::Trine::Node::Literal::USE_XMLLITERALS) = 0; my $l = RDF::Trine::Node::Literal->new( '', undef, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral' ); is( ref($l), 'RDF::Trine::Node::Literal', 'object is a RDF::Trine::Node::Literal' ); } SKIP: { if (RDF::Trine::Node::Literal::XML->can('new')) { lives_ok { local($RDF::Trine::Node::Literal::USE_XMLLITERALS) = 0; my $l = RDF::Trine::Node::Literal->new( '', undef, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral' ); } 'lives on bad xml when ::Node::Literal::XML use is forced off'; throws_ok { local($RDF::Trine::Node::Literal::USE_XMLLITERALS) = 1; my $l = RDF::Trine::Node::Literal->new( '', undef, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral' ); } 'RDF::Trine::Error', 'throws on bad xml when ::Node::Literal::XML is available'; } else { skip "RDF::Trine::Node::Literal::XML isn't available", 2; } } { my $l = RDF::Trine::Node::Literal->new( '', undef, 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral' ); if (RDF::Trine::Node::Literal::XML->can('new')) { isa_ok( $l, 'RDF::Trine::Node::Literal::XML' ); } else { isa_ok( $l, 'RDF::Trine::Node::Literal' ); } } { my $u = RDF::Trine::Node::Resource->new('http://example.com/'); $u->uri( 'http://example.org/' ); is( $u->uri, 'http://example.org/', 'resource uri after modification' ); } { my $l = RDF::Trine::Node::Literal->new('123', undef, $xsd->integer); $l->literal_value( '787' ); is( $l->literal_value, '787', 'literal value after modification' ); } { my ($ns, $l); ($ns, $l) = $k->qname; is( $l, '食べる', 'unicode qname separation' ); } { my ($ns, $l) = $urn->qname; is($ns, 'urn:x-demonstrate:', 'good URN namespace prefix'); is($l, 'bug', 'good URN local name'); } # from_sse { my $n = RDF::Trine::Node->from_sse( '(a)' ); isa_ok( $n, 'RDF::Trine::Node::Blank', 'blank from_sse' ); is( $n->blank_identifier, 'a', 'blank from_sse identifier' ); } { my $n = RDF::Trine::Node->from_sse( '' ); isa_ok( $n, 'RDF::Trine::Node::Resource', 'resource from_sse' ); is( $n->uri_value, 'iri', 'resource from_sse identifier' ); } { my $n = RDF::Trine::Node->from_sse( '"value"' ); isa_ok( $n, 'RDF::Trine::Node::Literal', 'literal from_sse' ); is( $n->literal_value, 'value', 'literal from_sse value' ); } { my $n = RDF::Trine::Node->from_sse( '"value"@en' ); isa_ok( $n, 'RDF::Trine::Node::Literal', 'language literal from_sse' ); is( $n->literal_value, 'value', 'language literal from_sse value' ); is( $n->literal_value_language, 'en', 'language literal from_sse language' ); } { my $n = RDF::Trine::Node->from_sse( '"value"^^
' ); isa_ok( $n, 'RDF::Trine::Node::Literal', 'datatype literal from_sse' ); is( $n->literal_value, 'value', 'datatype literal from_sse value' ); is( $n->literal_datatype, 'dt', 'datatype literal from_sse datatype' ); } { my $ctx = { namespaces => { foaf => 'http://xmlns.com/foaf/0.1/' } }; my $n = RDF::Trine::Node->from_sse( 'foaf:name', $ctx ); isa_ok( $n, 'RDF::Trine::Node::Resource', 'resource from_sse' ); is( $n->uri_value, 'http://xmlns.com/foaf/0.1/name', 'qname from_sse identifier' ); } { my $n1 = RDF::Trine::Node::Nil->new(); my $n2 = RDF::Trine::Node::Nil->new(); is( refaddr($n1), refaddr($n2), 'Nil is a singleton' ); ok( $n1->equal( $n2 ), 'Nil nodes claim equality' ); ok( not($n1->equal( $k )), 'Nil node is not equal to non-Nil node' ); } { my $uri = RDF::Trine::Node::Resource->new('http://www.xn--hestebedgrd-58a.dk/'); my $nt = $uri->as_ntriples; is($nt, "", 'latin1-compatible punycode URI properly decoded as an IRI'); } { my $uri = RDF::Trine::Node::Resource->new('http://xn--df-oiy.ws/'); my $nt = $uri->as_ntriples; is($nt, '', 'high-codepoint punycode URI properly decoded as an IRI'); } { my $uri = RDF::Trine::Node::Resource->new('http://www.xn--orfolkedansere-rqb.dk/#8835/St%C3%A6vne%202013'); is($uri->uri_value, 'http://www.xn--orfolkedansere-rqb.dk/#8835/St%C3%A6vne%202013', 'punycode URI with percent-escapes'); } { my $uri = RDF::Trine::Node::Resource->new('http://www.xn--orfolkedansere-rqb.dk/#8835/St%C3%A6vne%202013', 'http://base/'); is($uri->uri_value, "http://www.xn--orfolkedansere-rqb.dk/#8835/St%C3%A6vne%202013", 'punycode URI with percent-escapes with base'); } RDF-Trine-1.007/t/parser-nquads.t000644 000765 000024 00000007461 12054230225 016522 0ustar00gregstaff000000 000000 use Test::More tests => 16; use Test::Exception; use FindBin qw($Bin); use File::Spec; use Data::Dumper; use utf8; binmode( \*STDOUT, ':utf8' ); binmode( \*STDERR, ':utf8' ); use RDF::Trine qw(iri blank literal); use RDF::Trine::Parser; ################################################################################ # Log::Log4perl::init( \q[ # log4perl.category.rdf.trine.model = TRACE, Screen # # log4perl.appender.Screen = Log::Log4perl::Appender::Screen # log4perl.appender.Screen.stderr = 0 # log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout # ] ); ################################################################################ my $parser = RDF::Trine::Parser->new( 'nquads' ); isa_ok( $parser, 'RDF::Trine::Parser::NQuads' ); { my $model = RDF::Trine::Model->temporary_model; my $nquads = <<"END"; _:a . _:a . _:a . END $parser->parse_into_model(undef, $nquads, $model); is( $model->size, 2, 'expected model (triple) size after nquads parse' ); is( $model->count_statements(undef, undef, undef, undef), 3, 'expected 3 count ffff' ); is( $model->count_statements(blank('a'), undef, undef, undef), 2, 'expected 2 count bfff' ); is( $model->count_statements(iri('a')), 1, 'expected 1 count bff' ); is( $model->count_statements(iri('a'), undef, undef, undef), 1, 'expected 1 count bfff' ); is( $model->count_statements(iri('b')), 0, 'expected 0 count bff' ); is( $model->count_statements(iri('b'), undef, undef, undef), 0, 'expected 0 count bfff' ); is( $model->count_statements(undef, iri('b')), 2, 'expected 2 count fbf' ); is( $model->count_statements(undef, iri('b'), undef, undef), 3, 'expected 3 count fbff' ); is( $model->count_statements(undef, undef, undef, iri('g1')), 1, 'expected 1 count fffb' ); } { # Canonicalization tests my $parser = RDF::Trine::Parser->new( 'nquads', canonicalize => 1 ); { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "-0123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('-123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+0000123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+100000.00"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('100000.0', undef, 'http://www.w3.org/2001/XMLSchema#decimal')), 1, 'expected 1 count for canonical decimal value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('false', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "1"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('true', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } } RDF-Trine-1.007/t/parser-ntriples.t000644 000765 000024 00000013674 12076314606 017104 0ustar00gregstaff000000 000000 use Test::More tests => 21; use Test::Exception; use FindBin qw($Bin); use File::Spec; use Data::Dumper; use utf8; use strict; use warnings; binmode( \*STDOUT, ':utf8' ); binmode( \*STDERR, ':utf8' ); use RDF::Trine qw(iri blank literal); use RDF::Trine::Parser; my $parser = RDF::Trine::Parser::NTriples->new(); isa_ok( $parser, 'RDF::Trine::Parser::NTriples' ); { my $model = RDF::Trine::Model->temporary_model; my $ntriples = <<"END"; _:a . _:a . END $parser->parse_into_model(undef, $ntriples, $model); is( $model->size, 2, 'expected model size after ntriples parse' ); is( $model->count_statements(blank('a')), 1, 'expected 1 count bff' ); is( $model->count_statements(iri('a')), 1, 'expected 1 count bff' ); is( $model->count_statements(iri('b')), 0, 'expected 0 count bff' ); is( $model->count_statements(undef, iri('b')), 2, 'expected 2 count fbf' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:eve .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->size, 1, 'expected model size after ntriples parse' ); is( $model->count_statements(undef, iri('http://example.com/resumé')), 1, 'expected 1 count fbf with unicode escaping' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:eve "Resume" .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->size, 1, 'expected model size after ntriples parse' ); is( $model->count_statements(undef, undef, literal('Resume')), 1, 'expected 1 count fbf with unicode escaping' ); } { my %got; my $handler = sub { my $st = shift; my $o = $st->object; $got{ $o->as_string }++ }; my $ntriples = <<"END"; _:anon . # comment "x" . "\\u00E9" . "

"^^ . "chat"\@fr . END $parser->parse(undef, $ntriples, $handler); my %expect = ( q["é"] => 1, q["chat"@fr] => 1, q["x"] => 1, q["

"^^] => 1, q[] => 1, ); is_deeply( \%got, \%expect, 'expected statement object parsing' ); } { # Canonicalization tests my $parser = RDF::Trine::Parser::NTriples->new( canonicalize => 1 ); { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "-0123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('-123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+0000123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+100000.00"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('100000.0', undef, 'http://www.w3.org/2001/XMLSchema#decimal')), 1, 'expected 1 count for canonical decimal value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('false', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "1"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('true', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "01" .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('01')), 1, 'expected 1 count for plain literal with canonicalizing parser' ); } } { # escaping tests { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0\\t1" .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal("0\t1")), 1, 'expected plain literal with tab-encoding' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0\\n1" .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal("0\n1")), 1, 'expected plain literal with newline-encoding' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0\\"\\\\1" .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal(qq[0"\\1])), 1, 'expected plain literal with quote and backslash-encoding' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0\\U000000611" .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal(qq[0a1])), 1, 'expected plain literal with U-encoding' ); } } RDF-Trine-1.007/t/parser-rdfa.t000644 000765 000024 00000003620 12137221214 016134 0ustar00gregstaff000000 000000 use strict; use warnings; use Test::More; use Test::Exception; use FindBin qw($Bin); use File::Spec; use RDF::Trine qw(literal); use RDF::Trine::Parser; use RDF::Trine::Serializer::NTriples::Canonical; my $path = File::Spec->catfile( $Bin, 'data', 'rdfa' ); my @good = glob("${path}/test*.xhtml"); my $tests = 2 * scalar(@good); plan tests => $tests; my %expect; my %names; foreach my $g (@good) { my $f = $g; $f =~ s/xhtml$/nt/; if (-r $f) { local($/) = undef; open( my $fh, '<', $f ) or next; my $content = <$fh>; $expect{ $g } = $content; (undef, undef, my $name) = File::Spec->splitpath( $g ); $names{ $g } = $name; } } my $serializer = RDF::Trine::Serializer::NTriples::Canonical->new( onfail=>'space' ); SKIP: { eval "use RDF::RDFa::Parser 0.30;"; skip( "Need RDF::RDFa::Parser to run these tests.", $tests ) if ($@); if ($RDF::Trine::VERSION =~ /_/) { diag "Using RDF::RDFa::Parser $RDF::RDFa::Parser::VERSION"; } foreach my $file (keys %expect) { my $expect = $expect{ $file }; my $name = $names{ $file }; { my $parser = RDF::Trine::Parser->new('rdfa'); my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); my $url = 'file://' . $file; $parser->parse_into_model( $url, $data, $model ); my $got = $serializer->serialize_model_to_string($model); foreach ($got, $expect) { s/[\r\n]+/\n/g } is( $got, $expect, "parse_into_model: $name" ); } { my $parser = RDF::Trine::Parser->new('rdfa'); my $url = 'file://' . $file; my $model = RDF::Trine::Model->temporary_model; $parser->parse_file_into_model( $url, $file, $model ); my $got = $serializer->serialize_model_to_string($model); foreach ($got, $expect) { s/[\r\n]+/\n/g } is( $got, $expect, "parse_file_into_model: $name" ); } } } RDF-Trine-1.007/t/parser-rdfjson.t000644 000765 000024 00000003341 12054230225 016665 0ustar00gregstaff000000 000000 use Test::More tests => 9; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(literal); use_ok('RDF::Trine::Parser::RDFJSON'); { my $json =<<"END"; { "http://example.com/doc": { "http://example.com/predicate":[ {"value":"http://example.com/bar","type":"uri"}, {"value":"Foo","type":"literal"}, {"lang":"en","value":"baz","type":"literal"} ] } } END my $parser = RDF::Trine::Parser->new( 'RDF/JSON' ); my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $parser->parse_into_model(undef, $json, $model); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/doc'), RDF::Trine::Node::Resource->new('http://example.com/predicate'), RDF::Trine::Node::Resource->new('http://example.com/bar'), ), "RDF/JSON parser works"); my $data = $model->as_hashref; ok(defined $data->{'http://example.com/doc'}->{'http://example.com/predicate'}->[2]->{'value'}, "as_hashref seems to work"); } { my $json =<<"END"; { "_:a": { "http://example.com/predicate":[ "_:b" ] } } END my $parser = RDF::Trine::Parser->new( 'RDF/JSON' ); my $model = RDF::Trine::Model->temporary_model; $parser->parse_into_model(undef, $json, $model); my $p = RDF::Trine::Node::Resource->new('http://example.com/predicate'); ok($model->count_statements( undef, $p, undef ), "RDF/JSON parser works"); my @subj = $model->subjects(); is( scalar(@subj), 1, 'one subject' ); isa_ok( $subj[0], 'RDF::Trine::Node::Blank', 'blank node subject' ); my @obj = $model->objects(); is( scalar(@obj), 1, 'one object' ); isa_ok( $obj[0], 'RDF::Trine::Node::Blank', 'blank node obj' ); isnt( $subj[0]->blank_identifier, $obj[0]->blank_identifier, 'different subejct and obejct nodes' ); } RDF-Trine-1.007/t/parser-rdfxml-w3c.t000644 000765 000024 00000023765 12157133461 017232 0ustar00gregstaff000000 000000 use strict; use warnings; no warnings 'uninitialized'; use Test::More; use Test::Exception; use FindBin qw($Bin); use File::Spec; use File::Find qw(find); use RDF::Trine; use RDF::Trine::Model; use RDF::Trine::Store; use RDF::Trine::Serializer::NTriples; plan qw(no_plan); ################################################################################ # Log::Log4perl::init( \q[ # log4perl.category.rdf.trine.parser.rdfxml = TRACE, Screen # # log4perl.appender.Screen = Log::Log4perl::Appender::Screen # log4perl.appender.Screen.stderr = 0 # log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout # ] ); ################################################################################ use_ok( 'RDF::Trine::Parser::RDFXML' ); { my $parser = RDF::Trine::Parser::RDFXML->new; my $model = RDF::Trine::Model->temporary_model; throws_ok { $parser->parse_into_model('http://localhost/', '', $model) } 'RDF::Trine::Error::ParserError', 'Empty string data throws class'; throws_ok { $parser->parse_into_model('http://localhost/', '', $model) } qr|No RDF/XML content supplied to parser|, 'Empty string data throws string'; throws_ok { $parser->parse_into_model('http://localhost/', undef, $model) } 'RDF::Trine::Error::ParserError', 'Undef data throws class'; throws_ok { $parser->parse_into_model('http://localhost/', undef, $model) } qr|No RDF/XML content supplied to parser|, 'Undef data throws string'; } my $ok_regex = (@ARGV) ? shift : ''; my $XML_LOADED = ($RDF::Trine::Node::Literal::XML::VERSION > 0); my %XML_EXEMPTIONS = map { $_ => 1 } qw( /rdfms-empty-property-elements/test003.rdf /rdfms-empty-property-elements/test009.rdf ); our %PREFIXES = ( '/rdf-containers-syntax-vs-schema/test007.rdf' => 'd', ); my $path = File::Spec->catfile( $Bin, 'data', 'rdfxml-w3c' ); my @good; my %ok = map { $_ => 1 } qw( /amp-in-url/test001.rdf /datatypes/test001.rdf /datatypes/test002.rdf /rdf-charmod-literals/test001.rdf /rdf-charmod-uris/test001.rdf /rdf-charmod-uris/test002.rdf /rdf-containers-syntax-vs-schema/test001.rdf /rdf-containers-syntax-vs-schema/test002.rdf /rdf-containers-syntax-vs-schema/test003.rdf /rdf-containers-syntax-vs-schema/test004.rdf /rdf-containers-syntax-vs-schema/test005.rdf /rdf-containers-syntax-vs-schema/test006.rdf /rdf-containers-syntax-vs-schema/test007.rdf /rdf-containers-syntax-vs-schema/test008.rdf /rdf-element-not-mandatory/test001.rdf /rdf-ns-prefix-confusion/test0001.rdf /rdf-ns-prefix-confusion/test0002.rdf /rdf-ns-prefix-confusion/test0003.rdf /rdf-ns-prefix-confusion/test0004.rdf /rdf-ns-prefix-confusion/test0005.rdf /rdf-ns-prefix-confusion/test0006.rdf /rdf-ns-prefix-confusion/test0007.rdf /rdf-ns-prefix-confusion/test0008.rdf /rdf-ns-prefix-confusion/test0009.rdf /rdf-ns-prefix-confusion/test0010.rdf /rdf-ns-prefix-confusion/test0011.rdf /rdf-ns-prefix-confusion/test0012.rdf /rdf-ns-prefix-confusion/test0013.rdf /rdf-ns-prefix-confusion/test0014.rdf /rdfms-difference-between-ID-and-about/test1.rdf /rdfms-difference-between-ID-and-about/test2.rdf /rdfms-difference-between-ID-and-about/test3.rdf /rdfms-duplicate-member-props/test001.rdf /rdfms-empty-property-elements/test001.rdf /rdfms-empty-property-elements/test002.rdf /rdfms-empty-property-elements/test003.rdf /rdfms-empty-property-elements/test004.rdf /rdfms-empty-property-elements/test005.rdf /rdfms-empty-property-elements/test006.rdf /rdfms-empty-property-elements/test007.rdf /rdfms-empty-property-elements/test008.rdf /rdfms-empty-property-elements/test009.rdf /rdfms-empty-property-elements/test010.rdf /rdfms-empty-property-elements/test011.rdf /rdfms-empty-property-elements/test012.rdf /rdfms-empty-property-elements/test013.rdf /rdfms-empty-property-elements/test014.rdf /rdfms-empty-property-elements/test015.rdf /rdfms-empty-property-elements/test016.rdf /rdfms-empty-property-elements/test017.rdf /rdfms-identity-anon-resources/test001.rdf /rdfms-identity-anon-resources/test002.rdf /rdfms-identity-anon-resources/test003.rdf /rdfms-identity-anon-resources/test004.rdf /rdfms-identity-anon-resources/test005.rdf /rdfms-literal-is-xml-structure/test001.rdf /rdfms-literal-is-xml-structure/test002.rdf /rdfms-literal-is-xml-structure/test003.rdf /rdfms-literal-is-xml-structure/test004.rdf /rdfms-literal-is-xml-structure/test005.rdf /rdfms-nested-bagIDs/test001.rdf /rdfms-nested-bagIDs/test002.rdf /rdfms-nested-bagIDs/test003.rdf /rdfms-nested-bagIDs/test004.rdf /rdfms-nested-bagIDs/test005.rdf /rdfms-nested-bagIDs/test006.rdf /rdfms-nested-bagIDs/test008.rdf /rdfms-nested-bagIDs/test009.rdf /rdfms-nested-bagIDs/test010a.rdf /rdfms-nested-bagIDs/test010b.rdf /rdfms-nested-bagIDs/test011a.rdf /rdfms-nested-bagIDs/test011b.rdf /rdfms-nested-bagIDs/test012a.rdf /rdfms-nested-bagIDs/test012b.rdf /rdfms-not-id-and-resource-attr/test001.rdf /rdfms-not-id-and-resource-attr/test002.rdf /rdfms-not-id-and-resource-attr/test003.rdf /rdfms-not-id-and-resource-attr/test004.rdf /rdfms-not-id-and-resource-attr/test005.rdf /rdfms-para196/test001.rdf /rdfms-rdf-names-use/test-001.rdf /rdfms-rdf-names-use/test-002.rdf /rdfms-rdf-names-use/test-003.rdf /rdfms-rdf-names-use/test-004.rdf /rdfms-rdf-names-use/test-005.rdf /rdfms-rdf-names-use/test-006.rdf /rdfms-rdf-names-use/test-007.rdf /rdfms-rdf-names-use/test-008.rdf /rdfms-rdf-names-use/test-009.rdf /rdfms-rdf-names-use/test-010.rdf /rdfms-rdf-names-use/test-011.rdf /rdfms-rdf-names-use/test-012.rdf /rdfms-rdf-names-use/test-013.rdf /rdfms-rdf-names-use/test-014.rdf /rdfms-rdf-names-use/test-015.rdf /rdfms-rdf-names-use/test-016.rdf /rdfms-rdf-names-use/test-017.rdf /rdfms-rdf-names-use/test-018.rdf /rdfms-rdf-names-use/test-019.rdf /rdfms-rdf-names-use/test-020.rdf /rdfms-rdf-names-use/test-021.rdf /rdfms-rdf-names-use/test-022.rdf /rdfms-rdf-names-use/test-023.rdf /rdfms-rdf-names-use/test-024.rdf /rdfms-rdf-names-use/test-025.rdf /rdfms-rdf-names-use/test-026.rdf /rdfms-rdf-names-use/test-027.rdf /rdfms-rdf-names-use/test-028.rdf /rdfms-rdf-names-use/test-029.rdf /rdfms-rdf-names-use/test-030.rdf /rdfms-rdf-names-use/test-031.rdf /rdfms-rdf-names-use/test-032.rdf /rdfms-rdf-names-use/test-033.rdf /rdfms-rdf-names-use/test-034.rdf /rdfms-rdf-names-use/test-035.rdf /rdfms-rdf-names-use/test-036.rdf /rdfms-rdf-names-use/test-037.rdf /rdfms-rdf-names-use/warn-001.rdf /rdfms-rdf-names-use/warn-002.rdf /rdfms-rdf-names-use/warn-003.rdf /rdfms-reification-required/test001.rdf /rdfms-seq-representation/test001.rdf /rdfms-syntax-incomplete/test001.rdf /rdfms-syntax-incomplete/test002.rdf /rdfms-syntax-incomplete/test003.rdf /rdfms-syntax-incomplete/test004.rdf /rdfms-uri-substructure/test001.rdf /rdfms-xml-literal-namespaces/test001.rdf /rdfms-xml-literal-namespaces/test002.rdf /rdfms-xmllang/test001.rdf /rdfms-xmllang/test002.rdf /rdfms-xmllang/test003.rdf /rdfms-xmllang/test004.rdf /rdfms-xmllang/test005.rdf /rdfms-xmllang/test006.rdf /rdfs-domain-and-range/test001.rdf /rdfs-domain-and-range/test002.rdf /rdfs-domain-and-range/test003.rdf /rdfs-domain-and-range/test004.rdf /unrecognised-xml-attributes/test001.rdf /unrecognised-xml-attributes/test002.rdf /xml-canon/test001.rdf /xmlbase/test001.rdf /xmlbase/test002.rdf /xmlbase/test003.rdf /xmlbase/test004.rdf /xmlbase/test005.rdf /xmlbase/test006.rdf /xmlbase/test007.rdf /xmlbase/test008.rdf /xmlbase/test009.rdf /xmlbase/test010.rdf /xmlbase/test011.rdf /xmlbase/test012.rdf /xmlbase/test013.rdf /xmlbase/test014.rdf /xmlbase/test015.rdf /xmlbase/test016.rdf ); find( sub { if ($File::Find::name =~ /^(.*)[.]rdf/) { my $prefix = $1; my ($file) = $File::Find::name =~ m/rdfxml-w3c(.*)$/; if ($ok{ $file }) { if (not($XML_LOADED) or ($XML_LOADED and not exists $XML_EXEMPTIONS{ $file })) { my $expect = "${prefix}.nt"; if (-r $expect) { push(@good, $File::Find::name); } } } } }, $path ); my $s = RDF::Trine::Serializer::NTriples->new(); foreach my $file (@good) { TODO: { my (undef, undef, $filename) = File::Spec->splitpath( $file ); if ($file =~ $ok_regex) { local($TODO) = 'rdf/xml parser is currently broken' if ($file =~ m/ex-(19|37|45|46|53|58)/); my ($name) = $file =~ m<^.*rdfxml-w3c(.*)[.]rdf>; note($name); my (undef, undef, $test) = File::Spec->splitpath( $file ); { # test the parse() method my $data = do { open( my $fh, '<:encoding(UTF-8)', $file ); local($/) = undef; <$fh> }; my $model; lives_ok { my ($filename) = $file =~ m/rdfxml-w3c(.*)$/; my $url = 'http://www.w3.org/2000/10/rdf-tests/rdfcore' . $filename; my $prefix = $PREFIXES{ $filename } || 'genid'; my $parser = RDF::Trine::Parser::RDFXML->new( BNodePrefix => $prefix ); $model = RDF::Trine::Model->new( RDF::Trine::Store->temporary_store ); $parser->parse_into_model( $url, $data, $model ); } "parsing $name with parse_into_model lives"; compare( $model, $file, "parse_into_model" ); } { # test the parse_file() method my $model; lives_ok { my ($filename) = $file =~ m/rdfxml-w3c(.*)$/; my $url = 'http://www.w3.org/2000/10/rdf-tests/rdfcore' . $filename; my $prefix = $PREFIXES{ $filename } || 'genid'; my $parser = RDF::Trine::Parser::RDFXML->new( BNodePrefix => $prefix ); $model = RDF::Trine::Model->new( RDF::Trine::Store->temporary_store ); $parser->parse_file_into_model( $url, $file, $model ); } "parsing $name with parse_file_into_model lives"; compare( $model, $file, "parse_file_into_model" ); } } } } sub compare { my $model = shift; my $file = shift; my $parse_type = shift; my ($filename) = $file =~ m/rdfxml-w3c(.*)$/; my $url = 'http://www.w3.org/2000/10/rdf-tests/rdfcore' . $filename; my ($name) = $file =~ m<^.*rdfxml-w3c(.*)[.]rdf>; $file =~ s/[.]rdf$/.nt/; my $parser = RDF::Trine::Parser::NTriples->new(); my $emodel = RDF::Trine::Model->temporary_model; open( my $fh, '<', $file ); $parser->parse_file_into_model ( $url, $fh, $emodel ); my $got = RDF::Trine::Serializer::NTriples::Canonical->new->serialize_model_to_string( $model ); my $expect = RDF::Trine::Serializer::NTriples::Canonical->new->serialize_model_to_string( $emodel ); is( $got, $expect, "expected triples: $name ($parse_type)" ); } RDF-Trine-1.007/t/parser-redland.t000644 000765 000024 00000007576 12054230225 016647 0ustar00gregstaff000000 000000 use Test::More; use Test::Exception; use FindBin qw($Bin); use File::Glob qw(bsd_glob); use File::Spec; use RDF::Trine qw(literal); use RDF::Trine::Parser; use RDF::Trine::Parser::Redland; if ($RDF::Trine::Parser::Redland::HAVE_REDLAND_PARSER) { plan qw(no_plan); } else { plan skip_all => "Redland parser is not available."; } my $path = File::Spec->catfile( $Bin, 'data', 'turtle' ); my @good = bsd_glob("${path}/test*.ttl"); my @bad = bsd_glob("${path}/bad*.ttl"); foreach my $file (@good) { my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); lives_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse( $url, $data ); } $test; } _SILENCE(); foreach my $file (@bad) { my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); throws_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse( $url, $data ); } 'RDF::Trine::Error::ParserError', $test; } { # Canonicalization tests my $parser = RDF::Trine::Parser->new( 'turtle', canonicalize => 1 ); { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "-0123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('-123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+0000123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+100000.00"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('100000.0', undef, 'http://www.w3.org/2001/XMLSchema#decimal')), 1, 'expected 1 count for canonical decimal value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('false', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "1"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('true', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } TODO: { local $TODO = 'UTF8 problems with Redland'; my $model = RDF::Trine::Model->temporary_model; my $ntriples = ' "bl\\u00C3\\u00A5b\\u00C3\\u00A6rsyltet\\u00C3\\u00B8y"@nb .'; $parser->parse_into_model(undef, $ntriples, $model); my $iter = $model->as_stream; my $st = $iter->next; isa_ok( $st, 'RDF::Trine::Statement' ); is($st->object->literal_value, 'blåbærsyltetøy', 'expected triple object value with utf8 chars' ); } } sub _SILENCE { Log::Log4perl->init( { "log4perl.rootLogger" => "FATAL, screen", "log4perl.appender.screen" => "Log::Log4perl::Appender::Screen", "log4perl.appender.screen.stderr" => 1, "log4perl.appender.screen.layout" => 'Log::Log4perl::Layout::SimpleLayout', } ); } RDF-Trine-1.007/t/parser-trig.t000644 000765 000024 00000014352 12147055171 016201 0ustar00gregstaff000000 000000 use Test::More tests => 14; use Test::Exception; use FindBin qw($Bin); use File::Spec; use Data::Dumper; use utf8; binmode( \*STDOUT, ':utf8' ); binmode( \*STDERR, ':utf8' ); use RDF::Trine qw(iri blank literal); use RDF::Trine::Parser; ################################################################################ # Log::Log4perl::init( \q[ # log4perl.category.rdf.trine.model = TRACE, Screen # # log4perl.appender.Screen = Log::Log4perl::Appender::Screen # log4perl.appender.Screen.stderr = 0 # log4perl.appender.Screen.layout = Log::Log4perl::Layout::SimpleLayout # ] ); ################################################################################ my $parser = RDF::Trine::Parser::TriG->new(); isa_ok( $parser, 'RDF::Trine::Parser::TriG' ); { my $model = RDF::Trine::Model->temporary_model; my $trig = <<'END'; # TriG Example Document 2 @prefix ex: . @prefix : . :G1 = { :Monica a ex:Person ; ex:name "Monica Murphy" ; ex:homepage ; ex:email ; ex:hasSkill ex:Management , ex:Programming . } . END $parser->parse_into_model(undef, $trig, $model); is( $model->size, 6, 'expected model (triple) size after nquads parse' ); is( $model->count_statements(undef, undef, undef, undef), 6, 'expected 6 count ffff' ); is( $model->count_statements(iri('http://www.example.org/exampleDocument#Monica'), undef, undef, undef), 6, 'expected 2 count bfff' ); is( $model->count_statements(iri('b')), 0, 'expected 0 count bff' ); is( $model->count_statements(iri('b'), undef, undef, undef), 0, 'expected 0 count bfff' ); is( $model->count_statements(undef, iri('http://www.example.org/vocabulary#hasSkill')), 2, 'expected 2 count fbf' ); is( $model->count_statements(undef, iri('http://www.example.org/vocabulary#hasSkill'), undef, undef), 2, 'expected 2 count fbff' ); is( $model->count_statements(undef, undef, undef, iri('http://www.example.org/exampleDocument#G1')), 6, 'expected 6 count fffb' ); } { my $model = RDF::Trine::Model->temporary_model; my $trig = <<'END'; # TriG Example Document 1 # This document encodes three graphs. @prefix rdf: . @prefix xsd: . @prefix swp: . @prefix dc: . @prefix ex: . @prefix : . :G1 { :Monica ex:name "Monica Murphy" . :Monica ex:homepage . :Monica ex:email . :Monica ex:hasSkill ex:Management } :G2 { :Monica rdf:type ex:Person . :Monica ex:hasSkill ex:Programming } :G3 { :G1 swp:assertedBy _:w1 . _:w1 swp:authority :Chris . _:w1 dc:date "2003-10-02"^^xsd:date . :G2 swp:quotedBy _:w2 . :G3 swp:assertedBy _:w2 . _:w2 dc:date "2003-09-03"^^xsd:date . _:w2 swp:authority :Chris . :Chris rdf:type ex:Person . :Chris ex:email } END $parser->parse_into_model(undef, $trig, $model); { my $iter = $model->get_contexts; my %expect = ( '' => 1, '' => 1, '' => 1, ); my %got; while (my $c = $iter->next) { $got{ $c->as_string }++; } is_deeply( \%got, \%expect, 'expected graph names' ); } { my $iter = $model->get_statements( undef, undef, undef, undef ); my %expect = ( '' => 4, '' => 2, '' => 9, ); my %got; while (my $st = $iter->next) { $got{ $st->context->as_string }++; } is_deeply( \%got, \%expect, 'expected statement counts per graph name' ); } } { my $model = RDF::Trine::Model->temporary_model; my $trig = <<'END'; # TriG Example Document 3 # This document contains a default graph and two named graphs. @prefix rdf: . @prefix dc: . @prefix foaf: . # default graph { dc:publisher "Bob" . dc:publisher "Alice" . } { _:a foaf:name "Bob" . _:a foaf:mbox . } { _:a foaf:name "Alice" . _:a foaf:mbox . } END $parser->parse_into_model(undef, $trig, $model); { my $iter = $model->get_contexts; my %expect = ( '' => 1, '' => 1, ); my %got; while (my $c = $iter->next) { $got{ $c->as_string }++; } is_deeply( \%got, \%expect, 'expected graph names' ); } { my $iter = $model->get_statements( undef, undef, undef, undef ); my %expect = ( '(nil)' => 2, '' => 2, '' => 2, ); my %got; while (my $st = $iter->next) { $got{ $st->context->as_string }++; } is_deeply( \%got, \%expect, 'expected statement counts per graph name' ); } } { my $model = RDF::Trine::Model->temporary_model; my $trig = <<'END'; # TriG Example Document 4 # This document contains a default graph and one named graphs with non-ASCII chars. @prefix foaf: . @prefix ex: . @prefix dc: . # default graph { dc:publisher "Bob" . dc:publisher "Alice" . } { _:a foaf:name "Bob" . _:a ex:likes "Blåbærsyltetøy"@no . } END $parser->parse_into_model(undef, $trig, $model); my $iter = $model->get_statements( undef, RDF::Trine::Node::Resource->new('http://www.example.org/vocabulary#likes'), undef, undef ); my $st = $iter->next; is($st->object->literal_value, 'Blåbærsyltetøy', "Finding UTF-8 string"); } RDF-Trine-1.007/t/parser-turtle-2013.t000644 000765 000024 00000011533 12164234713 017134 0ustar00gregstaff000000 000000 use utf8; use strict; use Test::More; use Test::Exception; use FindBin qw($Bin); use File::Glob qw(bsd_glob); use File::Spec; use Data::Dumper; use RDF::Trine qw(iri literal); use RDF::Trine::Namespace qw(rdf); use URI::file; use TryCatch; my $mf = RDF::Trine::Namespace->new('http://www.w3.org/2001/sw/DataAccess/tests/test-manifest#'); my $rdft = RDF::Trine::Namespace->new('http://www.w3.org/ns/rdftest#'); my $base = iri('http://www.w3.org/2013/TurtleTests/'); my $model = RDF::Trine::Model->temporary_model; my $path = File::Spec->catfile( $Bin, '..', 't', 'data', 'turtle-2013' ); my $file = URI::file->new_abs( File::Spec->catfile($path, 'manifest.ttl') )->as_string; RDF::Trine::Parser->parse_url_into_model( $file, $model, canonicalize => 1 ); my @manifests = $model->subjects($rdf->type, $mf->Manifest); foreach my $manifest (@manifests) { my ($list) = $model->objects($manifest, $mf->entries); my @list = $model->get_list($list); my @syntax_good; my @syntax_bad; my @eval_good; my @eval_bad; foreach my $test (@list) { my ($type) = $model->objects($test, $rdf->type); if ($type->equal($rdft->TestTurtlePositiveSyntax)) { push(@syntax_good, $test); } elsif ($type->equal($rdft->TestTurtleNegativeSyntax)) { push(@syntax_bad, $test); } elsif ($type->equal($rdft->TestTurtleEval)) { push(@eval_good, $test); } elsif ($type->equal($rdft->TestTurtleNegativeEval)) { push(@eval_bad, $test); } else { warn "unrecognized test type $type\n"; } } note("Positive Syntax Tests"); foreach my $test (@syntax_good) { my ($test_file) = $model->objects($test, $mf->action); my $file = URI->new($test_file->uri)->file; my $data = eval { do { open( my $fh, '<', $file ) or die $!; local($/) = undef; <$fh> } }; if ($@) { fail("$test: $!"); next; } my (undef, undef, $test) = File::Spec->splitpath( $file ); lives_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser::Turtle->new(); $parser->parse( $url, $data ); } $test; } note("Negative Syntax Tests"); foreach my $test (@syntax_bad) { my ($test_file) = $model->objects($test, $mf->action); my $url = URI->new($test_file->uri); my $file = $url->file; my $data = eval { do { open( my $fh, '<', $file ) or die $!; local($/) = undef; <$fh> } }; if ($@) { fail("$test: $!"); next; } my (undef, undef, $test) = File::Spec->splitpath( $file ); throws_ok { my $parser = RDF::Trine::Parser::Turtle->new(); $parser->parse( $url, $data ); } 'RDF::Trine::Error::ParserError', $test; } note("Positive Evaluation Tests"); foreach my $test (@eval_good) { my ($test_file) = $model->objects($test, $mf->action); my ($res_file) = $model->objects($test, $mf->result); my $url = URI->new($test_file->uri); my $file = $url->file; open( my $fh, '<:encoding(UTF-8)', $file ) or die "$!: $file"; my $nt = URI->new($res_file->uri)->file; my (undef, undef, $test) = File::Spec->splitpath( $file ); my $parser = RDF::Trine::Parser::Turtle->new(); my $model = RDF::Trine::Model->temporary_model; my $tbase = URI->new_abs( $test, $base->uri_value )->as_string; my $parsed = 1; try { $parser->parse_file_into_model( $tbase, $fh, $model ); } catch (RDF::Trine::Error $e) { $parsed = 0; warn "Failed to parse $file: " . $e->text; } if ($parsed) { compare($model, URI->new($res_file->uri), $base, $test); } else { fail($test); } } note("Negative Evaluation Tests"); foreach my $test (@eval_bad) { my ($test_file) = $model->objects($test, $mf->action); my $file = URI->new($test_file->uri)->file; my $data = eval { do { open( my $fh, '<', $file ) or die $!; local($/) = undef; <$fh> } }; if ($@) { fail("$test: $!"); next; } my (undef, undef, $test) = File::Spec->splitpath( $file ); throws_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser::Turtle->new(); $parser->parse( $url, $data ); } 'RDF::Trine::Error::ParserError', $test; } } done_testing(); # sub _SILENCE { # Log::Log4perl->init( { # "log4perl.rootLogger" => "FATAL, screen", # "log4perl.appender.screen" => "Log::Log4perl::Appender::Screen", # "log4perl.appender.screen.stderr" => 1, # "log4perl.appender.screen.layout" => 'Log::Log4perl::Layout::SimpleLayout', # } ); # } sub compare { my $model = shift; my $url = shift; my $base = shift; my $name = shift; my $parser = RDF::Trine::Parser::NTriples->new(); my $emodel = RDF::Trine::Model->temporary_model; my $tbase = URI->new_abs( $name, $base->uri_value )->as_string; my $file = $url->file; open( my $fh, '<:encoding(UTF-8)', $file ); try { $parser->parse_file_into_model( $tbase, $fh, $emodel ); }; my $got = RDF::Trine::Serializer::NTriples::Canonical->new->serialize_model_to_string( $model ); my $expect = RDF::Trine::Serializer::NTriples::Canonical->new->serialize_model_to_string( $emodel ); is( $got, $expect, "expected triples: $name" ); } RDF-Trine-1.007/t/parser-turtle.t000644 000765 000024 00000011024 12054230225 016534 0ustar00gregstaff000000 000000 use utf8; use strict; use Test::More; use Test::Exception; use FindBin qw($Bin); use File::Glob qw(bsd_glob); use File::Spec; use RDF::Trine qw(iri literal); use RDF::Trine::Parser; my $path = File::Spec->catfile( $Bin, 'data', 'turtle' ); my @good = bsd_glob("${path}/test*.ttl"); my @bad = bsd_glob("${path}/bad*.ttl"); { my $file = $good[0]; my $base = 'file://' . $file; my $model = RDF::Trine::Model->temporary_model; RDF::Trine::Parser->parse_file_into_model( $base, $file, $model ); is( $model->size, 1, 'parse_file_into_model, guessed from filename' ); my $ok = 0; RDF::Trine::Parser->parse_file( $base, $file, sub { $ok = 1; } ); ok( $ok, 'parse_file, guessed from filename' ); } { my $file = File::Spec->catfile( $Bin, 'data', 'bugs', 'ttl-with-bom.ttl' ); my $model = RDF::Trine::Model->temporary_model; my $p = RDF::Trine::Parser::Turtle->new(); $p->parse_file_into_model( undef, $file, $model ); is( $model->size, 1, 'expected model size from turtle file with BOM' ); } foreach my $file (@good) { my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); lives_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser::Turtle->new(); $parser->parse( $url, $data ); } $test; } _SILENCE(); foreach my $file (@bad) { my $data = do { open( my $fh, '<', $file ); local($/) = undef; <$fh> }; my (undef, undef, $test) = File::Spec->splitpath( $file ); throws_ok { my $url = 'file://' . $file; my $parser = RDF::Trine::Parser::Turtle->new(); $parser->parse( $url, $data ); } 'RDF::Trine::Error::ParserError', $test; } { # Canonicalization tests my $parser = RDF::Trine::Parser::Turtle->new( canonicalize => 1 ); { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "-0123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('-123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+0000123"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('123', undef, 'http://www.w3.org/2001/XMLSchema#integer')), 1, 'expected 1 count for canonical integer value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "+100000.00"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('100000.0', undef, 'http://www.w3.org/2001/XMLSchema#decimal')), 1, 'expected 1 count for canonical decimal value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "0"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('false', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } { my $model = RDF::Trine::Model->temporary_model; my $ntriples = qq[_:a "1"^^ .\n]; $parser->parse_into_model(undef, $ntriples, $model); is( $model->count_statements(undef, undef, literal('true', undef, 'http://www.w3.org/2001/XMLSchema#boolean')), 1, 'expected 1 count for canonical boolean value' ); } } { my $parser = RDF::Trine::Parser::Turtle->new(); my $model = RDF::Trine::Model->temporary_model; my $ttl = <<'END'; # This document contains a graph with non-ASCII chars. @prefix foaf: . @prefix ex: . _:a foaf:name "Bob" . _:a ex:likes "Blåbærsyltetøy"@no . END $parser->parse_into_model(undef, $ttl, $model); my $iter = $model->get_statements( undef, iri('http://www.example.org/vocabulary#likes'), undef ); my $st = $iter->next; my $got = $st->object->literal_value; my $expect = 'Blåbærsyltetøy'; is($got, $expect, "Finding UTF-8 string"); } done_testing(); sub _SILENCE { Log::Log4perl->init( { "log4perl.rootLogger" => "FATAL, screen", "log4perl.appender.screen" => "Log::Log4perl::Appender::Screen", "log4perl.appender.screen.stderr" => 1, "log4perl.appender.screen.layout" => 'Log::Log4perl::Layout::SimpleLayout', } ); } RDF-Trine-1.007/t/parser.t000644 000765 000024 00000003321 12065422135 015225 0ustar00gregstaff000000 000000 use Test::More tests => 7; use Test::Exception; use strict; use warnings; use File::Spec; use RDF::Trine qw(iri); use RDF::Trine::Namespace qw(rdf foaf); use RDF::Trine::Error qw(:try); use RDF::Trine::Parser; throws_ok { RDF::Trine::Parser->new('guess') } 'RDF::Trine::Error::UnimplementedError', "Guess parser isn't implemented yet"; throws_ok { RDF::Trine::Parser->new('foobar') } 'RDF::Trine::Error::ParserError', "RDF::Trine::Parser constructor throws on unrecognized parser name"; SKIP: { unless ($ENV{RDFTRINE_NETWORK_TESTS}) { skip( "No network. Set RDFTRINE_NETWORK_TESTS to run these tests.", 5 ); } { my $url = 'http://kasei.us/about/foaf.xrdf'; my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); try { RDF::Trine::Parser->parse_url_into_model( $url, $model ); pass('parse_url_into_model succeeded'); } catch RDF::Trine::Error::ParserError with { fail('parse_url_into_model failed'); }; ok( $model->size, 'parsed statements' ); my $count = $model->count_statements( iri('http://kasei.us/about/foaf.xrdf#greg'), $rdf->type, $foaf->Person ); is( $count, 1, 'expected statement' ); } { my $url = 'http://kasei.us/bad_file.ttl'; my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); throws_ok { RDF::Trine::Parser->parse_url_into_model( $url, $model ); } 'RDF::Trine::Error::ParserError', 'parse_url_into_model throws on bad URL'; } { my $url = 'tag:gwilliams@cpan.org,2012-10-18:foobar'; my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); throws_ok { RDF::Trine::Parser->parse_url_into_model( $url, $model ); } 'RDF::Trine::Error::ParserError', 'parse_url_into_model throws on bad URL hostname'; } } RDF-Trine-1.007/t/pattern.t000644 000765 000024 00000005176 12054230225 015413 0ustar00gregstaff000000 000000 use Test::More tests => 14; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Scalar::Util qw(blessed refaddr); use RDF::Trine; use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Namespace; use RDF::Trine::Pattern; my $store = RDF::Trine::Store->temporary_store(); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $g = RDF::Trine::Node::Blank->new(); my $st0 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); my $st2 = RDF::Trine::Statement->new( $g, $foaf->homepage, RDF::Trine::Node::Resource->new('http://kasei.us/') ); $store->add_statement( $_ ) for ($st0, $st1, $st2); { my $pattern; lives_ok { $pattern = RDF::Trine::Pattern->new() } 'RDF::Trine::Pattern::new lives on no arguments'; isa_ok( $pattern, 'RDF::Trine::Pattern' ); } throws_ok { RDF::Trine::Pattern->new(1) } 'RDF::Trine::Error', 'RDF::Trine::Pattern::new throws on non-blessed arguments'; throws_ok { RDF::Trine::Pattern->new($store) } 'RDF::Trine::Error', 'RDF::Trine::Pattern::new throws on non-triple arguments'; { my $x = RDF::Trine::Node::Variable->new( 'x' ); my $t = RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ); my $p = RDF::Trine::Pattern->new( $t ); isa_ok( $p, 'RDF::Trine::Pattern' ); is_deeply( [ $p->construct_args ], [ $t ], 'construct args' ); is_deeply( [ $p->definite_variables ], ['x'], 'definite_variables' ); my $q = $p->clone; cmp_ok( refaddr($p), '!=', refaddr($q), 'clone returns different object' ); is_deeply( $p, $q, 'cloned structure is the same' ); ok( $p->subsumes( $t ), 'fbb subsumes fbb' ); ok( $p->subsumes( $st0 ), 'fbb subsumes bbb' ); } { my $x = RDF::Trine::Node::Variable->new( 'x' ); my $y = RDF::Trine::Node::Variable->new( 'y' ); my $t = RDF::Trine::Statement->new( $x, $rdf->type, $y ); my $p = RDF::Trine::Pattern->new( $t ); my $u = RDF::Trine::Statement->new( $x, $rdf->type, $foaf->Person ); my $v = RDF::Trine::Statement->new( $g, $x, $foaf->Person ); ok( $p->subsumes( $u ), 'fbf subsumes fbb' ); ok( not( $p->subsumes( $v ) ), 'fbf does not subsume bfb' ); } { my $x = RDF::Trine::Node::Variable->new( 'x' ); my $y = RDF::Trine::Node::Variable->new( 'y' ); my $t = RDF::Trine::Statement->new( $x, $rdf->type, $y ); my $p = RDF::Trine::Pattern->new( $t ); my $q = $p->bind_variables( { 'x' => $g, 'y' => $foaf->Person } ); ok( $q->subsumes( $st0 ), 'bind_variables' ); } RDF-Trine-1.007/t/remove-list.t000644 000765 000024 00000003664 12054230065 016206 0ustar00gregstaff000000 000000 use RDF::Trine; use RDF::Trine::Namespace qw[RDF]; use Test::More tests => 8; use Test::Exception; ok(RDF::Trine::Model->can('remove_list'), "There's a remove_list method."); my $EX = RDF::Trine::Namespace->new('http://example.com/'); my $model = &test_model; { my ($head) = $model->objects(undef, $EX->list1); my $rv = $model->remove_list($head, orphan_check=>1); ok($rv->equal($head), "Refused to remove non-orphan list when checking for orphans"); $rv = $model->remove_list($head, orphan_check=>0); is($rv, undef, "Removed non-orphan list when not checking for orphans"); } { my ($head) = $model->objects(undef, $EX->list2); throws_ok { $model->remove_list($head) } 'RDF::Trine::Error', 'Malformed lists throw'; } { my ($head) = $model->objects(undef, $EX->list3); $model->remove_statements(undef, $EX->list3, $head); # still not an orphan! my $rv = $model->remove_list($head, orphan_check=>1); ok($rv, "Refused to remove different non-orphan list when checking for orphans"); is($model->count_statements($rv, $EX->first, RDF::Trine::Node::Literal->new('b')), 1, "Correct node returned by orphan check."); my $rv2 = $model->remove_list($rv, orphan_check=>0); is($rv2, undef, "Removed different non-orphan list when not checking for orphans"); is($model->count_statements($rv, $EX->first, RDF::Trine::Node::Literal->new('b')), 1, "Unrelated triples kept when deleting a list."); } sub test_model { my $model = RDF::Trine::Model->temporary_model; my $parser = RDF::Trine::Parser->new('Turtle'); $parser->parse_into_model('http://example.net/', <<'TURTLE', $model); @prefix ex: . @prefix rdf: . [] ex:list1 ("a" "b" "c" "d") ; ex:list2 [ a rdf:List ; rdf:first "a" , "b" ; rdf:rest ("c" "d") ] ; ex:list3 [ a rdf:List ; rdf:first "a" ; rdf:rest [ a rdf:List ; rdf:first "b" ; ex:first "b" ; rdf:rest ("c" "d") ] ]. TURTLE return $model; } RDF-Trine-1.007/t/serializer-nquads.t000644 000765 000024 00000007054 12054230225 017375 0ustar00gregstaff000000 000000 use Test::More tests => 5; BEGIN { use_ok('RDF::Trine::Serializer::NQuads') }; use strict; use warnings; use RDF::Trine qw(iri blank); my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $graph1 = iri('http://example.com/graph1'); my $graph2 = blank('graph2'); my $page = iri('http://kasei.us/'); my $g = blank('greg'); my $st0 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); my $st2 = RDF::Trine::Statement::Quad->new( $g, $foaf->homepage, $page, $graph1 ); my $st3 = RDF::Trine::Statement::Quad->new( $page, $rdf->type, $foaf->Document, $graph2 ); $model->add_statement( $_ ) for ($st0, $st1, $st2, $st3); { my ($rh, $wh); pipe($rh, $wh); my $serializer = RDF::Trine::Serializer::NQuads->new(); $serializer->serialize_model_to_file($wh, $model); close($wh); my %got; while (defined(my $line = <$rh>)) { chomp($line); $got{$line}++; } my $expect = { map { $_ => 1 } ( '_:greg .', '_:greg .', '_:greg "Greg" .', ' _:graph2 .', ) }; is_deeply( \%got, $expect, 'serialize_model_to_file' ); } { my $iter = $model->get_statements( undef, $rdf->type, undef ); my ($rh, $wh); pipe($rh, $wh); my $serializer = RDF::Trine::Serializer::NQuads->new(); $serializer->serialize_iterator_to_file($wh, $iter); close($wh); my %got; while (defined(my $line = <$rh>)) { chomp($line); $got{$line}++; } my $expect = { map { $_ => 1 } '_:greg .', ' .', }; is_deeply( \%got, $expect, 'serialize_iterator_to_file with triple-based iterator' ); } { my $iter = $model->get_statements( undef, $rdf->type, undef, undef ); my ($rh, $wh); pipe($rh, $wh); my $serializer = RDF::Trine::Serializer::NQuads->new(); $serializer->serialize_iterator_to_file($wh, $iter); close($wh); my %got; while (defined(my $line = <$rh>)) { chomp($line); $got{$line}++; } my $expect = { map { $_ => 1 } '_:greg .', ' _:graph2 .', }; is_deeply( \%got, $expect, 'serialize_iterator_to_file with quad-based iterator' ); } { my $serializer = RDF::Trine::Serializer::NQuads->new(); my $iter = $model->get_statements( undef, $rdf->type, undef, undef ); my $string = $serializer->serialize_iterator_to_string( $iter ); my %got = map { $_ => 1 } split(/\r?\n/, $string); my $expect = { map { $_ => 1 } '_:greg .', ' _:graph2 .', }; is_deeply( \%got, $expect, 'serialize_iterator_to_string with quad-based iterator' ); } RDF-Trine-1.007/t/serializer-ntriples-canonical.t000644 000765 000024 00000001773 12054230065 021673 0ustar00gregstaff000000 000000 use Test::More tests => 3; BEGIN { use_ok('RDF::Trine::Serializer::NTriples::Canonical') }; use strict; use warnings; use RDF::Trine; use RDF::Trine::Parser; my $data = <<"DATA"; # Hello _:a "why" . _:a "val" . _:b . _:b3 "val" . # World DATA my $model = RDF::Trine::Model->new( RDF::Trine::Store->temporary_store ); my $parser = RDF::Trine::Parser->new('turtle'); $parser->parse_into_model(undef, $data, $model); my $serializer = RDF::Trine::Serializer::NTriples::Canonical->new( onfail=>'space' ); my $testString = $serializer->serialize_model_to_string($model); my $correctString = <<"END"; _:g1 .\r _:g2 "val" .\r _:g2 "why" .\r \r _:h3 "val" .\r END is($testString, $correctString, "canonicalisation works"); { my ($rh, $wh); pipe($rh, $wh); $serializer->serialize_model_to_file($wh, $model); close($wh); local($/) = undef; my $string = <$rh>; is( $string, $correctString, 'serialize_model_to_file' ); } RDF-Trine-1.007/t/serializer-ntriples.t000644 000765 000024 00000005377 12054230225 017750 0ustar00gregstaff000000 000000 use Test::More tests => 4; BEGIN { use_ok('RDF::Trine::Serializer::NTriples') }; use strict; use warnings; use RDF::Trine; use RDF::Trine::Parser; my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $page = RDF::Trine::Node::Resource->new('http://kasei.us/'); my $g = RDF::Trine::Node::Blank->new('greg'); my $st0 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); my $st2 = RDF::Trine::Statement->new( $g, $foaf->homepage, $page ); my $st3 = RDF::Trine::Statement->new( $page, $rdf->type, $foaf->Document ); $model->add_statement( $_ ) for ($st0, $st1, $st2, $st3); { my ($rh, $wh); pipe($rh, $wh); my $serializer = RDF::Trine::Serializer::NTriples->new(); $serializer->serialize_model_to_file($wh, $model); close($wh); my %got; while (defined(my $line = <$rh>)) { chomp($line); $got{$line}++; } my $expect = { map { $_ => 1 } '_:greg .', '_:greg .', '_:greg "Greg" .', ' .', }; is_deeply( \%got, $expect, 'serialize_model_to_file' ); } { my $iter = $model->get_statements( undef, $rdf->type, undef ); my ($rh, $wh); pipe($rh, $wh); my $serializer = RDF::Trine::Serializer::NTriples->new(); $serializer->serialize_iterator_to_file($wh, $iter); close($wh); my %got; while (defined(my $line = <$rh>)) { chomp($line); $got{$line}++; } my $expect = { map { $_ => 1 } '_:greg .', ' .', }; is_deeply( \%got, $expect, 'serialize_iterator_to_file' ); } { my $serializer = RDF::Trine::Serializer::NTriples->new(); my $iter = $model->get_statements( undef, $rdf->type, undef ); my $string = $serializer->serialize_iterator_to_string( $iter ); my %got = map { $_ => 1 } split(/\r?\n/, $string); my $expect = { map { $_ => 1 } '_:greg .', ' .', }; is_deeply( \%got, $expect, 'serialize_iterator_to_string' ); } RDF-Trine-1.007/t/serializer-rdfjson.t000644 000765 000024 00000001561 11760736733 017566 0ustar00gregstaff000000 000000 use Test::More tests => 3; use strict; use warnings; no warnings 'redefine'; use RDF::Trine; use_ok('RDF::Trine::Serializer::RDFJSON'); my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/predicate' => [ { 'type' => 'literal', 'value' => 'Foo', }, { 'type' => 'uri', 'value' => 'http://example.com/bar', }, 'baz@en' ], }, }); ok($model->count_statements( RDF::Trine::Node::Resource->new('http://example.com/doc'), RDF::Trine::Node::Resource->new('http://example.com/predicate'), RDF::Trine::Node::Literal->new('baz', 'en'), ), "add_hashref works"); my $serializer = RDF::Trine::Serializer::RDFJSON->new(); my $json = $serializer->serialize_model_to_string($model); ok($json =~ /^\{/, "RDF/JSON serialiser seems to work"); RDF-Trine-1.007/t/serializer-rdfpatch.t000644 000765 000024 00000004156 12165606751 017713 0ustar00gregstaff000000 000000 use Test::More; BEGIN { use_ok('RDF::Trine::Serializer::RDFPatch') }; use strict; use warnings; use RDF::Trine; use RDF::Trine::Parser; my $store = RDF::Trine::Store->temporary_store(); my $model = RDF::Trine::Model->new( $store ); my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $page = RDF::Trine::Node::Resource->new('http://kasei.us/'); my $g = RDF::Trine::Node::Blank->new('greg'); my $st0 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); my $st2 = RDF::Trine::Statement->new( $g, $foaf->homepage, $page ); my $st3 = RDF::Trine::Statement->new( $page, $rdf->type, $foaf->Document ); $model->add_statement( $_ ) for ($st0, $st1, $st2, $st3); { my $serializer = RDF::Trine::Serializer::RDFPatch->new(); my $iter = RDF::Trine::Iterator->new([$st0, $st1, $st2, $st3]); my $string = $serializer->serialize_iterator_to_string( $iter ); is( $string, <<"END", 'serialize_iterator_to_string' ); A _:greg . A R "Greg" . A R . A . END } { my $serializer = RDF::Trine::Serializer::RDFPatch->new( namespaces => { rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', foaf => 'http://xmlns.com/foaf/0.1/' } ); my $iter = RDF::Trine::Iterator->new([$st0, $st1, $st2, $st3]); my $string = $serializer->serialize_iterator_to_string( $iter ); is( $string, <<'END', 'serialize_iterator_to_string with namespaces' ); @prefix foaf: . @prefix rdf: . A _:greg rdf:type foaf:Person . A R foaf:name "Greg" . A R foaf:homepage . A rdf:type foaf:Document . END } done_testing(); RDF-Trine-1.007/t/serializer-rdfxml.t000644 000765 000024 00000034752 12137221214 017403 0ustar00gregstaff000000 000000 use Test::More tests => 22; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri statement); use_ok('RDF::Trine::Serializer::RDFXML'); { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/predicate' => [ {'type' => 'literal','value' => 'Foo'}, {'type' => 'uri','value' => 'http://example.com/bar'}, 'baz@en' ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; Foo baz END { my $xml = $serializer->serialize_model_to_string($model); is($xml, $expect, 'serialize_model_to_string 1'); } { my $iter = $model->as_stream; my $xml = $serializer->serialize_iterator_to_string($iter); is($xml, $expect, 'serialize_iterator_to_string 1'); } } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ './doc' => { './predicate' => [ {'type' => 'literal','value' => 'Foo'}, {'type' => 'uri','value' => './bar'}, 'baz@en' ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new( base_uri => 'http://example.org/'); my $expect = <<"END"; Foo baz END { my $xml = $serializer->serialize_model_to_string($model); is($xml, $expect, 'serialize_model_to_string 1'); } } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ '_:b' => { 'http://example.com/ns#description' => ['quux'], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $xml = $serializer->serialize_model_to_string($model); is($xml, <<"END", 'serialize_model_to_string 2: simple literal'); quux END } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ '_:a' => { 'http://example.com/ns#title' => [ 'foo', {type => 'literal', value => 'bar', datatype => 'http://www.w3.org/2001/XMLSchema#string'}, ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $xml = $serializer->serialize_model_to_string($model); is($xml, <<"END", 'serialize_model_to_string 3: datatype literal'); bar foo END } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ '_:b' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:a'}], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $xml = $serializer->serialize_model_to_string($model); is($xml, <<"END", 'serialize_model_to_string 4: blank object'); END } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/alice' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' => [{ type => 'resource', value => 'http://xmlns.com/foaf/0.1/Person' }], 'http://purl.org/net/inkel/rdf/schemas/lang/1.1#masters' => ['en'], 'http://xmlns.com/foaf/0.1/name' => [ 'Alice', {'type' => 'literal','value' => 'Alice', language => 'en' } ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; en Alice END my $xml = $serializer->serialize_model_to_string($model); is($xml, $expect, 'serialize_model_to_string 5: multiple namespaces'); } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ '_:b' => { 'http://example.com/' => [{type=>'uri', value=>'_:a'}], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); throws_ok { my $xml = $serializer->serialize_model_to_string($model); } 'RDF::Trine::Error::SerializationError', "serializing bad predicates throws exception (uri ends with '/')"; } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ '_:b' => { 'http://example.com/123' => [{type=>'uri', value=>'_:a'}], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); throws_ok { my $xml = $serializer->serialize_model_to_string($model); warn $xml; } 'RDF::Trine::Error::SerializationError', "serializing bad predicates throws exception (local part starts with digits)"; } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/predicate' => [ {'type' => 'literal','value' => 'Foo'}, {'type' => 'uri','value' => 'http://example.com/bar'}, 'baz@en' ], }, 'http://example.com/bar' => { 'http://example.com/predicate' => [ {'type' => 'literal','value' => 'Bar'}, ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; Bar Foo baz END { my $xml = $serializer->serialize_model_to_string($model); is($xml, $expect, 'serialize_model_to_string 1'); } { my $iter = $model->as_stream; my $xml = $serializer->serialize_iterator_to_string($iter); is($xml, $expect, 'serialize_iterator_to_string 1'); } } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/maker' => [ {'type' => 'uri','value' => '_:a'}, ], }, '_:a' => { 'http://example.com/name' => [ {'type' => 'literal','value' => 'Alice', 'lang' => 'en'}, ], 'http://example.com/homepage' => [ {'type' => 'uri', 'value' => 'http://example.com/' }, ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; Alice END my $iter = $model->bounded_description( iri('http://example.com/doc') ); my $xml = $serializer->serialize_iterator_to_string( $iter ); is($xml, $expect, 'serialize bounded description 1'); } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/maker' => [ {'type' => 'uri','value' => '_:a'}, ], 'http://example.com/creator' => [ {'type' => 'uri','value' => '_:a'}, ], }, '_:a' => { 'http://example.com/name' => [ {'type' => 'literal','value' => 'Alice', 'lang' => 'en'}, ], 'http://example.com/homepage' => [ {'type' => 'uri', 'value' => 'http://example.com/' }, ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; Alice END my $iter = $model->bounded_description( iri('http://example.com/doc') ); my $xml = $serializer->serialize_iterator_to_string( $iter ); is($xml, $expect, 'serialize bounded description 2'); } { my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/maker' => [ {'type' => 'uri','value' => '_:a'}, ], 'http://example.com/creator' => [ {'type' => 'uri','value' => '_:a'}, ], }, '_:a' => { 'http://example.com/name' => [ {'type' => 'literal','value' => 'Alice', 'lang' => 'en'}, ], 'http://example.com/homepage' => [ {'type' => 'uri', 'value' => 'http://example.com/' }, ], }, }); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; END my $iter = $model->bounded_description( iri('http://example.com/unknown') ); my $xml = $serializer->serialize_iterator_to_string( $iter ); is($xml, $expect, 'serialize bounded description with unknown node'); } { my $model = RDF::Trine::Model->temporary_model(); my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $expect = <<"END"; END my $xml = $serializer->serialize_model_to_string($model); is($xml, $expect, 'serialize_model_to_string with empty model'); } { my $serializer = RDF::Trine::Serializer::RDFXML->new( namespaces => { ex => 'http://example.com/' } ); my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/maker' => [ {'type' => 'uri','value' => '_:a'}, ], }, '_:a' => { 'http://example.com/name' => [ {'type' => 'literal','value' => 'Alice', 'lang' => 'en'}, ], 'http://example.com/homepage' => [ {'type' => 'uri', 'value' => 'http://example.com/' }, ], }, }); my $expect = <<"END"; Alice END my $iter = $model->bounded_description( iri('http://example.com/doc') ); my $xml = $serializer->serialize_iterator_to_string( $iter ); is($xml, $expect, 'xmlns namespaces 1'); } { my $serializer = RDF::Trine::Serializer::RDFXML->new( namespaces => { foaf => 'http://xmlns.com/foaf/0.1/', rdfs => "http://www.w3.org/2000/01/rdf-schema#", lang => "http://purl.org/net/inkel/rdf/schemas/lang/1.1#", } ); my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ '_:a' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type' => [{type => 'uri', value => 'http://xmlns.com/foaf/0.1/Person'}], 'http://xmlns.com/foaf/0.1/name' => ['Eve'], 'http://purl.org/net/inkel/rdf/schemas/lang/1.1#masters' => ['en','fr'], 'http://www.w3.org/2000/01/rdf-schema#seeAlso' => [{type => 'uri', value => 'http://eve.example.com/'}], }, }); my $xml = $serializer->serialize_model_to_string($model); like( $xml, qr[xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:lang="http://purl.org/net/inkel/rdf/schemas/lang/1.1#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"]sm, 'xmlns sorted in rdf:RDF tag' ); like( $xml, qr[en]sm, 'Qname literal tag' ); like( $xml, qr[]sm, 'Qname resource tag' ); } { my $serializer = RDF::Trine::Serializer::RDFXML->new(); my $model = RDF::Trine::Model->temporary_model; my $base_uri = 'http://example.org/'; my $url_with_amp = "$base_uri?foo=bar&doz=baz"; $model->add_statement( statement( iri($base_uri), iri("http://xmlns.com/foaf/0.1/page"), iri($url_with_amp) ) ); my $xml = $serializer->serialize_model_to_string($model); like( $xml, qr[&]sm, 'XML entity escaping' ); } { my $serializer = RDF::Trine::Serializer::RDFXML->new( scoped_namespaces => 1, namespaces => { ex => 'http://example.com/', unused1 => 'http://example.org/not-used', unused2 => 'tag:kasei.us,2012-01-01:' } ); my $model = RDF::Trine::Model->temporary_model; $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/maker' => [ {'type' => 'uri','value' => '_:a'}, ], }, '_:a' => { 'http://example.com/name' => [ {'type' => 'literal','value' => 'Alice', 'lang' => 'en'}, ], 'http://example.com/homepage' => [ {'type' => 'uri', 'value' => 'http://example.com/' }, ], }, }); my $expect = <<"END"; Alice END my $iter = $model->bounded_description( iri('http://example.com/doc') ); my $xml = $serializer->serialize_iterator_to_string( $iter ); is($xml, $expect, 'xmlns namespaces 2 with unused definitions'); } RDF-Trine-1.007/t/serializer-trig.t000644 000765 000024 00000005173 12171021602 017044 0ustar00gregstaff000000 000000 use Test::More; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed reftype); use utf8; use RDF::Trine qw(statement iri literal blank); use RDF::Trine::Namespace qw(rdf foaf); my $ex = RDF::Trine::Namespace->new('http://example.com/'); my $ns = RDF::Trine::Namespace->new('http://example.com/ns#'); my $lang = RDF::Trine::Namespace->new('http://purl.org/net/inkel/rdf/schemas/lang/1.1#'); my $nil = RDF::Trine::Node::Nil->new(); ################################################################################ my @tests = ( { quads => [ statement($ex->s, $ex->p, $ex->o, $nil), ], trig => qq[{\n\t .\n}\n], test => 'single quad', }, { sargs => [ namespaces => { foaf => 'http://xmlns.com/foaf/0.1/' } ], quads => [ statement($ex->alice, $foaf->name, literal('Alice'), $nil), ], trig => qq[\@prefix foaf: .\n\n{\n\t foaf:name "Alice" .\n}\n], test => 'single quad with prefix name', }, { quads => [ statement($ex->s, $ex->p, $ex->o, $nil), statement($ex->s, $ex->p, literal('o'), $nil), ], trig => qq[{\n\t .\n\t "o" .\n}\n], test => 'two quads, shared s-p', }, { quads => [ statement($ex->s, $ex->p, $ex->o, $nil), statement($ex->s, $ex->p, literal('o'), $ex->g), ], trig => qq[{\n\t .\n}\n\n {\n\t "o" .\n}\n], test => 'two quads, two graphs', }, { sargs => [ namespaces => { ex => 'http://example.com/' } ], quads => [ statement($ex->s, $ex->p, literal('o'), $ex->g), ], trig => qq[\@prefix ex: .\n\nex:g {\n\tex:s ex:p "o" .\n}\n], test => 'one quad, with prefix name graph', }, ); foreach my $d (@tests) { my $quads = $d->{quads}; my $iter = RDF::Trine::Iterator->new($quads); my @args = exists($d->{sargs}) ? @{ $d->{sargs} } : (); my $s = RDF::Trine::Serializer::TriG->new( @args ); my $trig = $s->serialize_iterator_to_string($iter); my $test = $d->{test}; my $expect = $d->{trig}; TODO: { my $re = (blessed($expect) and $expect->isa('Regexp')); if ($test =~ /TODO/) { local $TODO = "Not implemented yet"; if ($re) { like($trig, $expect, $test); } else { is($trig, $expect, $test); } } else { if ($re) { like($trig, $expect, $test); } else { is($trig, $expect, $test); } } } } done_testing(); RDF-Trine-1.007/t/serializer-tsv.t000755 000765 000024 00000004236 12054230225 016720 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use URI::file; use Test::More tests => 2; use Data::Dumper; use RDF::Trine qw(iri literal blank); use RDF::Trine::Iterator; use RDF::Trine::Namespace qw(rdf xsd foaf); use RDF::Trine::Statement; use RDF::Trine::Serializer::TSV; my $p1 = RDF::Trine::Node::Resource->new('http://example.org/alice'); my $p2 = RDF::Trine::Node::Resource->new('http://example.org/eve'); my $p3 = RDF::Trine::Node::Resource->new('http://example.org/bob'); my $type = $rdf->type; my $person = $foaf->Person; my $s = RDF::Trine::Serializer::TSV->new(); { my $st1 = RDF::Trine::Statement->new( $p1, $type, $person ); my $st2 = RDF::Trine::Statement->new( $p2, $type, $person ); my $st3 = RDF::Trine::Statement->new( $p3, $type, $person ); my $iter = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3 ] ); my $string = $s->serialize_iterator_to_string( $iter ); is( $string, <<"END", 'tsv serialization' ); END } { my $st1 = RDF::Trine::Statement->new( $p2, $rdf->type, $foaf->Person ); my $st2 = RDF::Trine::Statement->new( $p2, $foaf->name, literal('Eve', 'en') ); my $st3 = RDF::Trine::Statement->new( $p2, $rdf->value, literal('123', undef, $xsd->integer) ); my $st4 = RDF::Trine::Statement->new( $p2, $rdf->value, blank('foo') ); my $iter = RDF::Trine::Iterator::Graph->new( [ $st1, $st2, $st3, $st4 ] ); my $string = $s->serialize_iterator_to_string( $iter ); is( $string, <<'END', 'tsv serialization' ); "Eve"@en "123"^^ _:foo END } RDF-Trine-1.007/t/serializer-turtle.t000644 000765 000024 00000064520 12137221214 017422 0ustar00gregstaff000000 000000 use Test::More; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed reftype); use utf8; use RDF::Trine qw(statement iri literal blank); use RDF::Trine::Namespace qw(rdf foaf); use_ok('RDF::Trine::Serializer::Turtle'); my $ex = RDF::Trine::Namespace->new('http://example.com/'); my $ns = RDF::Trine::Namespace->new('http://example.com/ns#'); my $lang = RDF::Trine::Namespace->new('http://purl.org/net/inkel/rdf/schemas/lang/1.1#'); ################################################################################ my @tests = ( [ { 'http://example.com/doc' => { 'http://example.com/predicate' => [ {'type' => 'literal','value' => 'Foo'}, {'type' => 'uri','value' => 'http://example.com/bar'}, 'baz@en' ], } }, qq[ , "Foo", "baz"\@en .\n], 'serialize_model_to_string 1' ], [ { '_:b' => { 'http://example.com/ns#description' => ['quux'], }, }, qq{[] "quux" .\n}, 'simple literal' ], [ { '_:a' => { 'http://example.com/ns#title' => [ 'foo', {type => 'literal', value => 'bar', datatype => 'http://www.w3.org/2001/XMLSchema#string'}, ], }, }, qq{[] "bar"^^, "foo" .\n}, 'datatype literal' ], [ { '_:b' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:a'}], }, }, qq{[] [] .\n}, 'blank object' ], [ [ statement($ex->alice, $rdf->type, $foaf->Person), statement($ex->alice, $foaf->name, literal('Alice', 'en')), statement($ex->alice, $lang->masters, literal('en')), ], qr{ a ;\n\t "Alice"\@en ;\n\t "en" .\n}, 'multiple namespaces' ], [ { '_:b' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:a'}], }, '_:c' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:a'}], }, }, qq{[] _:a .\n[] _:a .\n}, 'shared blank object' ], [ { '_:a' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:b'}], }, '_:b' => { 'http://example.com/ns#foo' => ['foo'], 'http://example.com/ns#bar' => ['bar'], }, }, qq{[] [\n\t\t "bar" ;\n\t\t "foo"\n\t] .\n}, 'blank object with multiple predicates' ], [ { '_:a' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:b'}, {type=>'uri', value=>'_:c'}], }, '_:b' => { 'http://example.com/ns#foo' => [{type=>'literal', value=>'foo'}], }, '_:c' => { 'http://example.com/ns#bar' => ['bar'], }, }, qq{[] [\n\t\t "foo"\n\t], [\n\t\t "bar"\n\t] .\n}, 'multiple blank objects' ], [ { '_:a' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:b'}], }, '_:b' => { 'http://example.com/ns#foo' => [{type=>'uri', value=>'_:c'}], }, '_:c' => { 'http://example.com/ns#bar' => ['bar'], }, }, qq{[] [\n\t\t [\n\t\t\t "bar"\n\t\t]\n\t] .\n}, 'multi-level blank objects' ], [ { '_:abc' => { 'http://example.com/predicate' => [{type => 'blank', value => '_:head'}] }, '_:head' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '1', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'blank', value => '_:middle'}], }, '_:middle' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '2', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'}], }, }, qq{[] (1 2) .\n}, 'concise rdf:List syntax 1' ], [ { '_:a' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '1', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'blank', value => '_:b'}], }, '_:doc' => { 'http://example.com/predicate' => [{type => 'blank', value => '_:a'}] }, '_:b' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '2', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'}], }, }, qq{[] (1 2) .\n}, 'concise rdf:List syntax 2' ], [ { '_:abc' => { 'http://example.com/predicate' => [{type => 'blank', value => '_:head'}] }, '_:head' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '1', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}, {type => 'literal', value => '2', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'blank', value => '_:middle'}], }, '_:middle' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '3', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'}], }, }, qq{[] [\n\t\t 2, 1 ;\n\t\t [\n\t\t\t 3 ;\n\t\t\t \n\t\t]\n\t] .\n}, 'TODO: full rdf:List syntax on invalid list' ], [ { '_:abc' => { 'http://example.com/predicate' => [{type => 'blank', value => '_:head'}] }, '_:head' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '1', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://example.com/listElement'}], }, 'http://example.com/listElement' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '2', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'}], }, }, qq{[] [\n\t\t 1 ;\n\t\t \n\t] .\n 2 ;\n\t .\n},, 'full rdf:List syntax on IRI list element' ], [ { '_:b' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '1', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'blank', value => '_:a'}], }, '_:a' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '2', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'}], }, }, qq{(1 2) .\n}, 'TODO bare concise rdf:List syntax' ], [ { '_:b' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '1', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'blank', value => '_:a'}], 'http://example.com/predicate' => ['foo'], }, '_:a' => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#first' => [{type => 'literal', value => '2', datatype => 'http://www.w3.org/2001/XMLSchema#integer'}], 'http://www.w3.org/1999/02/22-rdf-syntax-ns#rest' => [{type => 'uri', value => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'}], }, }, qq{(1 2) "foo" .\n}, 'TODO rdf:List as subject syntax' ], [ [ statement(blank('b'), $ex->predicate, literal('foo')), statement(blank('b'), $rdf->first, blank('b')), statement(blank('b'), $rdf->rest, $rdf->nil), ], qq{_:b "foo" ;\n\t _:b ;\n\t .\n}, 'recursive rdf:List' ], ### integers [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => '123', datatype => 'http://www.w3.org/2001/XMLSchema#integer' } ], }, }, qq[ 123 .\n], 'xsd:integer' ], [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => 'baz', datatype => 'http://www.w3.org/2001/XMLSchema#integer' } ], }, }, qq[ "baz"^^ .\n], 'xsd:integer with bad lexical value' ], ### doubles [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => '-0.5E+6', datatype => 'http://www.w3.org/2001/XMLSchema#double' } ], }, }, qq[ -0.5E+6 .\n], 'xsd:double' ], [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => '1e1', datatype => 'http://www.w3.org/2001/XMLSchema#double' } ], }, }, qq[ 1e1 .\n], 'xsd:double' ], [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => 'quux', datatype => 'http://www.w3.org/2001/XMLSchema#double' } ], }, }, qq[ "quux"^^ .\n], 'xsd:double with bad lexical value' ], ### decimals [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => '-4.0', datatype => 'http://www.w3.org/2001/XMLSchema#decimal' } ], }, }, qq[ -4.0 .\n], 'xsd:decimal' ], [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => '+.01', datatype => 'http://www.w3.org/2001/XMLSchema#decimal' } ], }, }, qq[ +.01 .\n], 'xsd:decimal' ], [ { 'http://example.com/foo' => { 'http://example.com/bar' => [ {'type' => 'literal','value' => 'baz', datatype => 'http://www.w3.org/2001/XMLSchema#decimal' } ], }, }, qq[ "baz"^^ .\n], 'xsd:decimal with bad lexical value' ], ); foreach my $d (@tests) { my ($data, @data) = @$d; my $test = pop(@data); my @expects = @data; my $turtle; my $serializer = RDF::Trine::Serializer::Turtle->new(); if (reftype($data) eq 'HASH') { my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($data); $turtle = $serializer->serialize_model_to_string($model); } else { my $iter = RDF::Trine::Iterator->new($data); $turtle = $serializer->serialize_iterator_to_string($iter); } TODO: { foreach my $expect (@expects) { my $re = (blessed($expect) and $expect->isa('Regexp')); if ($test =~ /TODO/) { local $TODO = "Not implemented yet"; if ($re) { like($turtle, $expect, $test); } else { is($turtle, $expect, $test); } } else { if ($re) { like($turtle, $expect, $test); } else { is($turtle, $expect, $test); } } } } } ################################################################################ { my $serializer = RDF::Trine::Serializer::Turtle->new({ foaf => 'http://xmlns.com/foaf/0.1/' }); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/name' => ['Alice'] }, '_:b' => { 'http://xmlns.com/foaf/0.1/name' => ['Eve'] }, }; my $expect = <<"END"; \@prefix foaf: . [] foaf:name "Alice" . [] foaf:name "Eve" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'single namespace Qnames'); } { my $serializer = RDF::Trine::Serializer::Turtle->new(base_uri => 'http://example.org/foo'); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/homepage' => [{ 'type'=>'uri', 'value'=>'./bar' }] }}; my $expect = <<"END"; \@base . [] <./bar> . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'single base URI'); } { # Retained for backwards compatibility my $serializer = RDF::Trine::Serializer::Turtle->new(base => 'http://example.org/foo'); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/homepage' => [{ 'type'=>'uri', 'value'=>'./bar' }] }}; my $expect = <<"END"; \@base . [] <./bar> . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'single base URI, old style'); } { my $serializer = RDF::Trine::Serializer::Turtle->new({ foaf => 'http://xmlns.com/foaf/0.1/', foo => 'foo://', bar => 'http://bar/' }); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/name' => ['Alice'] }, '_:b' => { 'http://xmlns.com/foaf/0.1/name' => ['Eve'] }, }; my $expect = <<"END"; \@prefix foaf: . [] foaf:name "Alice" . [] foaf:name "Eve" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'single namespace Qnames (ignoring extra namespaces)'); } { my $serializer = RDF::Trine::Serializer::Turtle->new({ foaf => 'http://xmlns.com/foaf/0.1/', foo => 'foo://', bar => 'http://bar/' }); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/name' => ['Alice'] }, '_:b' => { 'http://xmlns.com/foaf/0.1/name' => ['Eve'] }, }; my $expect = <<"END"; \@prefix bar: . \@prefix foaf: . \@prefix foo: . [] foaf:name "Alice" . [] foaf:name "Eve" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = ''; open( my $fh, '>', \$turtle ); $serializer->serialize_model_to_file($fh, $model); close($fh); is($turtle, $expect, 'single namespace Qnames (including extra namespaces)'); } { my $serializer = RDF::Trine::Serializer::Turtle->new({ foaf => 'http://xmlns.com/foaf/0.1/', rdfs => 'http://www.w3.org/2000/01/rdf-schema#' }); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/name' => ['Alice'], 'http://www.w3.org/2000/01/rdf-schema#seeAlso' => [{type=>'resource', value => 'http://alice.me/'}] }, '_:b' => { 'http://xmlns.com/foaf/0.1/name' => ['Eve'] }, }; my $expect = <<"END"; \@prefix foaf: . \@prefix rdfs: . [] rdfs:seeAlso ; foaf:name "Alice" . [] foaf:name "Eve" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'multiple namespace Qnames (old namespace API)'); } { my $serializer = RDF::Trine::Serializer::Turtle->new( namespaces => { foaf => 'http://xmlns.com/foaf/0.1/', rdfs => 'http://www.w3.org/2000/01/rdf-schema#' } ); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/name' => ['Alice'], 'http://www.w3.org/2000/01/rdf-schema#seeAlso' => [{type=>'resource', value => 'http://alice.me/'}] }, '_:b' => { 'http://xmlns.com/foaf/0.1/name' => ['Eve'] }, }; my $expect = <<"END"; \@prefix foaf: . \@prefix rdfs: . [] rdfs:seeAlso ; foaf:name "Alice" . [] foaf:name "Eve" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'multiple namespace Qnames (new namespace API)'); } { my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $serializer = RDF::Trine::Serializer::Turtle->new({ foaf => $foaf }); my $hash = { '_:a' => { 'http://xmlns.com/foaf/0.1/name' => ['Alice'] }, '_:b' => { 'http://xmlns.com/foaf/0.1/name' => ['Eve'] }, }; my $expect = <<"END"; \@prefix foaf: . [] foaf:name "Alice" . [] foaf:name "Eve" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'RDF::Trine::Namespace Qnames'); } { my $serializer = RDF::Trine::Serializer::Turtle->new({ ex => 'http://example.org/' }); my $s = RDF::Trine::Node::Blank->new('a'); my $p = RDF::Trine::Node::Resource->new("http://example.org/Ä"); my $o = RDF::Trine::Node::Literal->new("Ä"); my $st = RDF::Trine::Statement->new($s, $p, $o); my $expect = <<"END"; \@prefix ex: . [] ex:Ä "\\u00C4" . END my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_statement($st); my $turtle = $serializer->serialize_model_to_string($model); is($turtle, $expect, 'IRI with prefixes'); } { my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref({ 'http://example.com/doc' => { 'http://example.com/predicate' => [ {'type' => 'literal','value' => 'Foo'}, {'type' => 'uri','value' => 'http://example.com/bar'}, 'baz@en' ], }, }); my $serializer = RDF::Trine::Serializer::Turtle->new(); my $expect = qq[ , "Foo", "baz"\@en .\n]; my $iter = RDF::Trine::Iterator->new([ statement($ex->doc, $ex->predicate, $ex->bar), statement($ex->doc, $ex->predicate, literal('Foo')), statement($ex->doc, $ex->predicate, literal('baz', 'en')), ]); my $turtle = $serializer->serialize_iterator_to_string($iter); is($turtle, $expect, 'serialize_iterator_to_string 1'); } { # bug found 2010.02.23 had a reference to a bnode _:XXX, but the bnode was serialized with free floating brackets ('[]') without the id _:XXX. my $turtle = <<'END'; @prefix rdf: . @prefix rdfs: . @prefix sd: . @prefix scovo: . @prefix void: . @prefix ent: . [] a sd:Service ; sd:url ; sd:defaultEntailmentRegime ent:Simple ; sd:feature sd:DereferencesURIs ; sd:extensionFunction , ; sd:languageExtension ; sd:defaultDatasetDescription [ a sd:Dataset ; sd:defaultGraph [ a sd:Graph ; void:statItem [ scovo:dimension void:numberOfTriples ; rdf:value 100 ] ; ] ; ] ; sd:availableGraphDescriptions [ a sd:GraphCollection ; sd:namedGraph [ a sd:NamedGraph ; sd:named ; sd:graphDescription [ a sd:Graph ; void:statItem [ scovo:dimension void:numberOfTriples ; rdf:value 608 ] ; ] ; ], [ a sd:NamedGraph ; sd:named ; sd:graphDescription [ a sd:Graph ; void:statItem [ scovo:dimension void:numberOfTriples ; rdf:value 53 ] ; ] ; ] ; ] ; sd:defaultEntailmentRegime ent:Simple ; . a sd:ScalarFunction . a sd:ScalarFunction . END my $parser = RDF::Trine::Parser->new('turtle'); my $model = RDF::Trine::Model->temporary_model; my $base_uri = 'http://kasei.us/2009/09/sparql/sd-example.ttl'; $parser->parse_into_model( $base_uri, $turtle, $model ); my $namespaces = { rdfs => 'http://www.w3.org/2000/01/rdf-schema#', xsd => 'http://www.w3.org/2001/XMLSchema#', scovo => 'http://purl.org/NET/scovo#', jena => 'java:com.hp.hpl.jena.query.function.library.', sd => 'http://www.w3.org/ns/sparql-service-description#', saddle => 'http://www.w3.org/2005/03/saddle/#', ke => 'http://kasei.us/2008/04/sparql-extension/', kf => 'http://kasei.us/2007/09/functions/', }; my $serializer = RDF::Trine::Serializer::Turtle->new( $namespaces ); my $got = $serializer->serialize_model_to_string($model); unlike( $got, qr/\[\] a sd:NamedGraph/sm, 'no free floating blank node' ); } { # bug found 2010.04.08 serialized uri->blank->xxx as uri->bnode label and []->xxx. my $turtle = <<'END'; @prefix rdf: . @prefix rdfs: . @prefix dc: . @prefix dcterms: . @prefix foaf: . @prefix void: . @prefix xsd: . @prefix doap: . @prefix conv: . @prefix dg: . @prefix raw: . @prefix e1: . @prefix e2: . @prefix : . :dataset-1 a void:Dataset ; conv:conversionProcess [ a conv:RawConversionProcess ; conv:conversionTool [ conv:project ; conv:revision "1.0.1" ] ; dc:date "2010-01-01T18:00:00Z"^^xsd:dateTime ; # essential data dcterms:requires [ conv:datasetFile ; dc:date "2009-12-01"^^xsd:date ; foaf:sha1 "da39a3ee5e6b4b0d3255bfef95601890afd80709" ] ; conv:datasetOrigin "datagov" ; conv:datasetIdentifier "10" ; ] ; . END my $parser = RDF::Trine::Parser->new('turtle'); my $model = RDF::Trine::Model->temporary_model; my $base_uri = 'http://kasei.us/2009/09/sparql/sd-example.ttl'; $parser->parse_into_model( $base_uri, $turtle, $model ); my $namespaces = { rdf => 'http://www.w3.org/1999/02/22-rdf-syntax-ns#', rdfs => 'http://www.w3.org/2000/01/rdf-schema#', dc => 'http://purl.org/dc/terms/', dcterms => 'http://purl.org/dc/terms/', foaf => 'http://xmlns.com/foaf/0.1/', void => 'http://rdfs.org/ns/void#', xsd => 'http://www.w3.org/2001/XMLSchema#', doap => 'http://usefulinc.com/ns/doap#', conv => 'http://data-gov.tw.rpi.edu/vocab/conversion/', dg => 'http://data-gov.tw.rpi.edu/datagov/vocab/', }; my $serializer = RDF::Trine::Serializer::Turtle->new( $namespaces ); my $got = $serializer->serialize_model_to_string($model); unlike( $got, qr/\[\] conv:conversionTool/sm, 'no free floating blank node 2' ); } { my $turtle = <<'END'; @prefix dc: . dc:date "2010-01-01T18:00:00Z"^^ . END my $parser = RDF::Trine::Parser->new('turtle'); my $model = RDF::Trine::Model->temporary_model; my $base_uri = 'http://kasei.us/2009/09/sparql/sd-example.ttl'; $parser->parse_into_model( $base_uri, $turtle, $model ); my $namespaces = { xsd => 'http://www.w3.org/2001/XMLSchema#' }; my $serializer = RDF::Trine::Serializer::Turtle->new( $namespaces ); my $got = $serializer->serialize_model_to_string($model); like( $got, qr/"\^\^xsd:dateTime/sm, 'qname literal datatype' ); } { # Date: Sun, 2 Jan 2011 22:17:55 +0000 # From: Toby Inkster # To: dev@lists.perlrdf.org # Subject: Turtle serialisation bug # Message-ID: <20110102221755.78db000f@miranda.g5n.co.uk> my $turtle = <<"END"; _:a [

[ _:b ]; _:c ] . # _:a _:b . _:c _:a . END # _:a [ #

[ # _:b ]; # [ _:a ] ] ; # _:b . my $parser = RDF::Trine::Parser->new('turtle'); my $model = RDF::Trine::Model->temporary_model; my $base_uri = 'http://example.org/'; $parser->parse_into_model( $base_uri, $turtle, $model ); my $serializer = RDF::Trine::Serializer::Turtle->new(); my $got = $serializer->serialize_model_to_string($model); my $gotmodel = RDF::Trine::Model->temporary_model; $parser->parse_into_model( $base_uri, $got, $gotmodel ); is( $gotmodel->size, $model->size, 'bnode concise syntax' ); } { my $hash = { '_:a' => { 'http://example.com/ns#description' => [{type=>'uri', value=>'_:b'}], }, '_:b' => { 'http://example.com/ns#foo' => [{type=>'literal', value=>'foo'}, 'FOO'], 'http://example.com/ns#bar' => [{type=>'literal', value=>'bar'}], }, }; my $expect = qr{[] [\n\t\t(( "bar" ;\n\t\t "FOO", "foo")|( "FOO", "foo" ;\n\t\t "bar"))\n\t] .\n}; my $test = 'blank object with multiple predicates and objects'; my $model = RDF::Trine::Model->new(RDF::Trine::Store->temporary_store); $model->add_hashref($hash); my $serializer = RDF::Trine::Serializer::Turtle->new(); my $turtle = $serializer->serialize_model_to_string($model); TODO: { if ($test =~ /TODO/) { local $TODO = "Not implemented yet"; like($turtle, $expect, $test); } else { like($turtle, $expect, $test); } } } done_testing(); RDF-Trine-1.007/t/serializer.t000644 000765 000024 00000012110 11674132435 016104 0ustar00gregstaff000000 000000 use Test::More tests => 39; use Test::Exception; use strict; use warnings; use File::Spec; use HTTP::Headers; use RDF::Trine qw(iri); use RDF::Trine::Namespace qw(rdf foaf); use RDF::Trine::Error qw(:try); use RDF::Trine::Serializer; throws_ok { RDF::Trine::Serializer->new('foobar') } 'RDF::Trine::Error::SerializationError', "RDF::Trine::Serializer constructor throws on unrecognized serializer name"; my %name_expect = ( 'nquads' => 'RDF::Trine::Serializer::NQuads', 'ntriples' => 'RDF::Trine::Serializer::NTriples', 'ntriples-canonical' => 'RDF::Trine::Serializer::NTriples::Canonical', 'rdfjson' => 'RDF::Trine::Serializer::RDFJSON', 'rdfxml' => 'RDF::Trine::Serializer::RDFXML', 'turtle' => 'RDF::Trine::Serializer::Turtle', ); my %type_expect = ( 'nquads' => [qw(text/x-nquads)], 'ntriples' => [qw(text/plain)], 'ntriples-canonical' => [], 'rdfjson' => [qw(application/json application/x-rdf+json)], 'rdfxml' => [qw(application/rdf+xml)], 'turtle' => [qw(application/turtle application/x-turtle text/rdf+n3 text/turtle)], ); while (my($k,$v) = each(%name_expect)) { my $p = RDF::Trine::Serializer->new( $k ); isa_ok( $p, $v ); my @types = $p->media_types; is_deeply( \@types, $type_expect{ $k }, "expected media types for $k" ); } { my %negotiate_expect = ( "text/plain" => ['NTriples', 'text/plain'], "application/rdf+xml" => ['RDFXML', 'application/rdf+xml'], "image/jpeg;q=1,application/rdf+xml;q=0.5" => ['RDFXML', 'application/rdf+xml'], "application/rdf+xml;q=1,text/plain" => ['RDFXML', 'application/rdf+xml'], "application/rdf+xml;q=0,text/plain;q=1" => ['NTriples', 'text/plain'], "application/rdf+xml;q=0.5,text/turtle;q=0.7,text/xml" => ['Turtle', 'text/turtle'], "application/x-turtle;q=1,text/turtle;q=0.7" => ['Turtle', 'application/x-turtle'], ); while (my ($accept,$data) = each(%negotiate_expect)) { my ($sname, $etype) = @$data; my $h = new HTTP::Headers; $h->header(Accept => $accept); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h ); is( $type, $etype, "expected media type for $sname serialization is $etype" ); unless (isa_ok( $s, "RDF::Trine::Serializer::$sname", "HTTP negotiated $sname serializer" )) { warn "# $accept"; } } } { my $h = new HTTP::Headers; $h->header(Accept=>"application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,*/*;0.5"); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h ); ok ( $type, 'choose some serializer for Accept: */*' ); } { my $h = new HTTP::Headers; $h->header(Accept=>"application/rdf+xml;q=1,text/turtle;q=0.7"); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h, restrict => [ 'turtle' ] ); is ( $type, 'text/turtle', 'choose less wanted serializer with restrict option' ); } { my $h = new HTTP::Headers; $h->header(Accept=>"application/xhtml+xml;q=0.8,application/rdf+xml;q=0.9,text/turtle;q=0.7"); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h, restrict => [ 'turtle' ], extend => { 'text/html' => 'html', 'application/xhtml+xml' => 'xhtml', }, ); is( $type, 'application/xhtml+xml', "negotiation with both 'restrict' restriction and 'extend' custom type" ); is( $s, 'xhtml', 'negotiation custom type thunk' ); } { my $h = new HTTP::Headers; $h->header(Accept=>"application/rdf+xml;q=0.9,text/turtle;q=0.7"); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h, extend => { 'application/rdf+xml' => 'rdfxml', }, ); is($type, 'application/rdf+xml', 'extended negotiation with media type collision'); is($s, 'rdfxml', 'extended negotiation with media type collision'); } my %negotiate_fail = ( "image/jpeg" => undef, "application/rdf+xml" => ['turtle','rdfjson'] ); while (my ($accept,$restrict) = each(%negotiate_fail)) { throws_ok { my $h = new HTTP::Headers; $h->header(Accept => $accept); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h, restrict => $restrict ); } 'RDF::Trine::Error::SerializationError', "HTTP negotiated serialization throws on unknown/unwanted media type $accept"; } { my ($sname, $etype) = (); my $h = new HTTP::Headers; $h->header(Accept => ""); my ($type, $s) = RDF::Trine::Serializer->negotiate( request_headers => $h ); like( $type, qr'^(text|application)/turtle$', "expected media type with empty accept header" ); isa_ok( $s, "RDF::Trine::Serializer::Turtle", "HTTP negotiated empty accept header to proper serializer" ); } { my $rdf = <<'END'; @prefix foaf: . @prefix : . :me a foaf:Person . END my $map = RDF::Trine::NamespaceMap->new(); my $model = RDF::Trine::Model->new(); my $parser = RDF::Trine::Parser->new( 'turtle', namespaces => $map ); $parser->parse_into_model( 'http://base/', $rdf, $model ); my $s = RDF::Trine::Serializer->new( 'rdfxml', namespaces => $map ); my $xml = $s->serialize_model_to_string( $model ); like( $xml, qr[xmlns="http://example.com/"]sm, 'good XML namespaces using namespacemap from parser' ); like( $xml, qr[xmlns:foaf="http://xmlns.com/foaf/0.1/"]sm, 'good XML namespaces using namespacemap from parser' ); } RDF-Trine-1.007/t/statement-serialization.t000644 000765 000024 00000002465 12054230225 020613 0ustar00gregstaff000000 000000 use Test::More tests => 2; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine; use RDF::Trine::Statement; use RDF::Trine::Statement::Quad; use RDF::Trine::Namespace; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $dc = RDF::Trine::Namespace->new('http://purl.org/dc/elements/1.1/'); my $kasei = RDF::Trine::Node::Resource->new('http://kasei.us/'); my $a = RDF::Trine::Node::Blank->new(); my $b = RDF::Trine::Node::Blank->new(); my $p = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf#greg'); my $myfoaf = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf'); my $name = RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'); my $desc = RDF::Trine::Node::Literal->new( 'my homepage' ); { my $st = RDF::Trine::Statement->new( $kasei, $rdf->type, $foaf->Document ); is( $st->sse, '(triple )' ); } { my $st = RDF::Trine::Statement::Quad->new( $kasei, $dc->description, $desc, $myfoaf ); is( $st->sse, '(quad "my homepage" )' ); } RDF-Trine-1.007/t/statement.t000644 000765 000024 00000012701 12054230225 015732 0ustar00gregstaff000000 000000 use Test::More tests => 36; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed refaddr); use RDF::Trine qw(iri); use RDF::Trine::Statement; use RDF::Trine::Statement::Quad; use RDF::Trine::Namespace; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $dc = RDF::Trine::Namespace->new('http://purl.org/dc/elements/1.1/'); my $kasei = RDF::Trine::Node::Resource->new('http://kasei.us/'); my $a = RDF::Trine::Node::Blank->new(); my $b = RDF::Trine::Node::Blank->new(); my $p = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf#greg'); my $myfoaf = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf'); my $name = RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'); my $desc = RDF::Trine::Node::Literal->new( 'my homepage' ); my $v = RDF::Trine::Node::Variable->new('v'); { my $st = RDF::Trine::Statement->new( $kasei, $rdf->type, $foaf->Document ); is_deeply( [ $st->node_names ], [qw(subject predicate object)], 'triple node names' ); is( $st->type, 'TRIPLE' ); isa_ok( $st, 'RDF::Trine::Statement' ); isa_ok( $st->subject, 'RDF::Trine::Node::Resource' ); isa_ok( $st->predicate, 'RDF::Trine::Node::Resource' ); isa_ok( $st->object, 'RDF::Trine::Node::Resource' ); is( $st->subject->uri_value, 'http://kasei.us/' ); is_deeply( [$st->construct_args], [$kasei, $rdf->type, $foaf->Document] ); my $c = $st->clone; cmp_ok( refaddr($st), '!=', refaddr($c), 'cloned statement is a new object' ); is_deeply( $st, $c, 'cloned statement has the same structure' ); } { my $st = RDF::Trine::Statement::Quad->new( $kasei, $dc->description, $desc, $myfoaf ); is_deeply( [ $st->node_names ], [qw(subject predicate object context)], 'quad node names' ); is( $st->type, 'QUAD' ); isa_ok( $st, 'RDF::Trine::Statement::Quad' ); isa_ok( $st->object, 'RDF::Trine::Node::Literal' ); isa_ok( $st->context, 'RDF::Trine::Node::Resource' ); is( $st->context->uri_value, 'http://kasei.us/about/foaf.xrdf' ); $st->context( $kasei ); is( $st->context->uri_value, 'http://kasei.us/' ); } { my $st = RDF::Trine::Statement->new( $kasei, undef, undef ); isa_ok( $st->predicate, 'RDF::Trine::Node::Variable' ); isa_ok( $st->object, 'RDF::Trine::Node::Variable' ); } { my $st = RDF::Trine::Statement->new( $kasei, $rdf->type, $foaf->Document ); my @nodes = $st->nodes; is( scalar(@nodes), 3, 'triple node count' ); is_deeply( \@nodes, [$kasei, $rdf->type, $foaf->Document], 'nodes' ); } { my $st = RDF::Trine::Statement::Quad->new( $kasei, $dc->description, $desc, $myfoaf ); my @nodes = $st->nodes; is( scalar(@nodes), 4, 'quad node count' ); is_deeply( \@nodes, [$kasei, $dc->description, $desc, $myfoaf], 'quad nodes' ); } { my $st = RDF::Trine::Statement->new( $a, $b, $a ); $st->subject( $kasei ); $st->predicate( $rdf->type ); $st->object( $foaf->Document ); is_deeply( [ $st->nodes ], [$kasei, $rdf->type, $foaf->Document], 'nodes after changed triple values' ); } { my $sse = '(triple )'; my $st_a = RDF::Trine::Statement->new( $p, $rdf->type, $foaf->Document ); my $st_b = RDF::Trine::Statement->from_sse( $sse ); is_deeply( $st_a, $st_b, 'from_sse' ); is( $sse, $st_a->sse, 'sse comparison' ); } { my $st = RDF::Trine::Statement->new( $kasei, $dc->title, $v ); my @vars = $st->definite_variables; is_deeply( \@vars, [qw(v)], 'definite variables' ); } { my $st = RDF::Trine::Statement->new( $kasei, $dc->title, $v ); my $st2 = $st->clone; is_deeply( $st, $st2, 'statement clone' ); } { my $st = RDF::Trine::Statement->new( $kasei, $dc->title, $v ); my $expect = RDF::Trine::Statement->new( $kasei, $dc->title, $desc ); my $st2 = $st->bind_variables({ v => $desc }); is_deeply( $st2, $expect, 'statement after binding' ); } throws_ok { my $st = RDF::Trine::Statement->new(); } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Statement::new throws without 3 node arguments."; throws_ok { my $st = RDF::Trine::Statement::Quad->new(1,2); } 'RDF::Trine::Error::MethodInvocationError', "RDF::Trine::Statement::Quad::new throws without 4 node arguments."; SKIP: { eval "use RDF::Redland;"; skip( "Need RDF::Redland to run these tests.", 5 ) if ($@); { my $subj = RDF::Redland::Node->new_from_uri("http://example.com/doc"); my $pred = RDF::Redland::Node->new_from_uri("http://example.com/maker"); my $obj = RDF::Redland::Node->new_from_blank_identifier("eve"); my $statement = new RDF::Redland::Statement($subj, $pred, $obj); isa_ok( $statement, 'RDF::Redland::Statement' ); my $st = RDF::Trine::Statement->from_redland( $statement ); isa_ok( $st, 'RDF::Trine::Statement' ); is( $st->sse, '(triple _:eve)', 'triple sse after from_redland' ); } { my $subj = RDF::Redland::Node->new_from_uri("http://example.com/doc"); my $pred = RDF::Redland::Node->new_from_uri("http://example.com/maker"); my $obj = RDF::Redland::Node->new_from_blank_identifier("eve"); my $statement = new RDF::Redland::Statement($subj, $pred, $obj); my $st = RDF::Trine::Statement::Quad->from_redland( $statement, iri('graph') ); isa_ok( $st, 'RDF::Trine::Statement::Quad' ); is( $st->sse, '(quad _:eve )', 'quad sse after from_redland' ); } } RDF-Trine-1.007/t/store-config.t000644 000765 000024 00000007444 12054230225 016335 0ustar00gregstaff000000 000000 use Test::More tests => 15; use Test::Exception; use strict; use warnings; use RDF::Trine; use RDF::Trine::Store; use FindBin qw($Bin); use File::Spec; my $path = File::Spec->catfile( $Bin, 'data' ); { my $store = RDF::Trine::Store->new_with_config({storetype => 'Memory', sources => [ { file => File::Spec->catfile($path, 'turtle', 'test-23.ttl'), syntax => 'turtle', } ]}); isa_ok($store, 'RDF::Trine::Store::Memory'); is($store->size, 1, "One statement in the model"); my $it = $store->get_statements(RDF::Trine::Node::Resource->new('http://example.org/ex#a'), RDF::Trine::Node::Resource->new('http://example.org/ex#b'), undef); like($it->to_string, qr/Hello World/, 'Contains Hello World string'); } { my $store = RDF::Trine::Store->new_with_config({storetype => 'Hexastore', sources => [ { file => File::Spec->catfile($path, 'turtle', 'test-23.ttl'), syntax => 'turtle', }, { file => File::Spec->catfile($path, 'rdfxml-w3c', 'rdfms-xml-literal-namespaces', 'test001.rdf'), syntax => 'rdfxml', } ]}); isa_ok($store, 'RDF::Trine::Store::Hexastore'); is($store->size, 2, "Two statements in the model"); my $it = $store->get_statements(RDF::Trine::Node::Resource->new('http://example.org/ex#a'), RDF::Trine::Node::Resource->new('http://example.org/ex#b'), undef); like($it->to_string, qr/Hello World/, 'Contains Hello World string'); } { my $store = RDF::Trine::Store->new_with_config({storetype => 'Memory', sources => [ { file => File::Spec->catfile($path, 'turtle', 'test-23.ttl'), syntax => 'turtle', graph => 'http://example.org/local-stuff' }, { file => File::Spec->catfile($path, 'rdfxml-w3c', 'rdfms-xml-literal-namespaces', 'test001.rdf'), syntax => 'rdfxml', } ]}); isa_ok($store, 'RDF::Trine::Store::Memory'); is($store->size, 2, "Two statements in the model"); is($store->count_statements(undef, undef, undef, RDF::Trine::Node::Resource->new('http://example.org/local-stuff')), 1, "Only one statement in the graph"); my $it = $store->get_statements(RDF::Trine::Node::Resource->new('http://example.org/ex#a'), RDF::Trine::Node::Resource->new('http://example.org/ex#b'), undef); like($it->to_string, qr/Hello World/, 'Contains Hello World string'); } SKIP: { unless ($ENV{RDFTRINE_NETWORK_TESTS}) { skip( "No network. Set RDFTRINE_NETWORK_TESTS to run these tests.", 2 ); } my $store = RDF::Trine::Store->new_with_config({storetype => 'Memory', sources => [ { file => File::Spec->catfile($path, 'turtle', 'test-23.ttl'), syntax => 'turtle', }, { url => 'http://www.kjetil.kjernsmo.net/foaf', syntax => 'rdfxml', } ]}); isa_ok($store, 'RDF::Trine::Store::Memory'); my $it = $store->get_statements(RDF::Trine::Node::Resource->new('http://www.kjetil.kjernsmo.net/foaf#me'), RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/nick'), undef); like($it->to_string, qr/KjetilK/, 'Contains Hello World string'); } throws_ok { my $store = RDF::Trine::Store->new_with_config({storetype => 'Memory', sources => [ { file => File::Spec->catfile($path, 'turtle', 'bad-00.ttl'), syntax => 'turtle', } ]}); } 'RDF::Trine::Error::ParserError', 'Throws on parsing bad Turtle file'; throws_ok { my $store = RDF::Trine::Store->new_with_config({storetype => 'FooBar'}); } 'RDF::Trine::Error', 'Throws on parsing non-existent Store.'; throws_ok { my $store = RDF::Trine::Store->new_with_config(); } 'RDF::Trine::Error::MethodInvocationError', 'Throws on parsing non-existent Store.'; done_testing(); RDF-Trine-1.007/t/store-context.t000644 000765 000024 00000004524 12147055171 016560 0ustar00gregstaff000000 000000 use Test::More; use strict; use warnings; no warnings 'redefine'; use RDF::Trine; use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Namespace; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $kasei = RDF::Trine::Namespace->new('http://kasei.us/'); my $g = RDF::Trine::Node::Blank->new(); my $st0 = RDF::Trine::Statement->new( $g, $rdf->type, $foaf->Person ); my $st1 = RDF::Trine::Statement->new( $g, $foaf->name, RDF::Trine::Node::Literal->new('Greg') ); my $st2 = RDF::Trine::Statement->new( $g, $foaf->homepage, RDF::Trine::Node::Resource->new('http://kasei.us/') ); my @stores = test_stores(); plan tests => scalar(@stores) * 5; foreach my $store (@stores) { print "### Testing store " . ref($store) . "\n"; isa_ok( $store, 'RDF::Trine::Store' ); { $store->add_statement( $_ ) for ($st0, $st1, $st2); my $stream = $store->get_contexts; my $c = $stream->next; is( $stream->next, undef, 'expected end-of-iterator' ); } { my $ctx = RDF::Trine::Node::Resource->new('http://kasei.us/about/foaf.xrdf'); $store->add_statement( $_, $ctx ) for ($st0, $st1, $st2); my $stream = $store->get_contexts; my %seen; while (my $c = $stream->next) { $seen{ $c->as_string }++; } my %expect = ( '' => 1, ); is_deeply( \%seen, \%expect, 'expected contexts' ); } { my $ctx = RDF::Trine::Node::Literal->new('Literal Context'); $store->add_statement( $_, $ctx ) for ($st0, $st1, $st2); my $stream = $store->get_contexts; my %seen; while (my $c = $stream->next) { $seen{ $c->as_string }++; } my %expect = ( '"Literal Context"' => 1, '' => 1, ); is_deeply( \%seen, \%expect, 'expected contexts' ); } { my $ctx = RDF::Trine::Node::Blank->new('blankContext'); $store->add_statement( $_, $ctx ) for ($st0, $st1, $st2); my $stream = $store->get_contexts; my %seen; while (my $c = $stream->next) { $seen{ $c->as_string }++; } my %expect = ( '(blankContext)' => 1, '"Literal Context"' => 1, '' => 1, ); is_deeply( \%seen, \%expect, 'expected contexts' ); } } sub test_stores { my @stores; push(@stores, RDF::Trine::Store::Memory->temporary_store()); return @stores; } RDF-Trine-1.007/t/store-dbi-mysql.t000644 000765 000024 00000004563 11573504053 017000 0ustar00gregstaff000000 000000 use FindBin '$Bin'; use lib "$Bin/lib"; use RDF::Trine qw(iri literal statement); use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use strict; use Test::More; unless ( exists $ENV{RDFTRINE_STORE_MYSQL_DATABASE} and exists $ENV{RDFTRINE_STORE_MYSQL_HOST} and exists $ENV{RDFTRINE_STORE_MYSQL_USER} and exists $ENV{RDFTRINE_STORE_MYSQL_PASSWORD} and exists $ENV{RDFTRINE_STORE_MYSQL_MODEL}) { plan skip_all => "Set the MySQL environment variables to run these tests (RDFTRINE_STORE_MYSQL_DATABASE, RDFTRINE_STORE_MYSQL_HOST, RDFTRINE_STORE_MYSQL_PORT, RDFTRINE_STORE_MYSQL_USER, RDFTRINE_STORE_MYSQL_PASSWORD, RDFTRINE_STORE_MYSQL_MODEL)"; } my $db = $ENV{RDFTRINE_STORE_MYSQL_DATABASE}; my $host = $ENV{RDFTRINE_STORE_MYSQL_HOST}; my $port = $ENV{RDFTRINE_STORE_MYSQL_PORT}; my $user = $ENV{RDFTRINE_STORE_MYSQL_USER}; my $pass = $ENV{RDFTRINE_STORE_MYSQL_PASSWORD}; my $model = $ENV{RDFTRINE_STORE_MYSQL_MODEL}; plan tests => 4 + Test::RDF::Trine::Store::number_of_tests; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $dsn = "DBI:mysql:database=$db;host=$host"; $dsn .= ";port=$port" if (defined($port)); persist_test($dsn, $user, $pass, $model); my $data = Test::RDF::Trine::Store::create_data; my $dbh = DBI->connect( $dsn, $user, $pass ); my $store = RDF::Trine::Store::DBI::mysql->new( $model, $dbh ); isa_ok( $store, 'RDF::Trine::Store::DBI::mysql' ); Test::RDF::Trine::Store::all_store_tests($store, $data); sub new_store { my $dsn = shift; my $user = shift; my $pass = shift; my $model = shift; my $dbh = DBI->connect( $dsn, $user, $pass ); my $store = RDF::Trine::Store::DBI::mysql->new( $model, $dbh ); return $store; } sub persist_test { note " persistence tests"; my $dsn = shift; my $user = shift; my $pass = shift; my $model = shift; my $st = statement( iri('http://example.org/'), iri('http://purl.org/dc/elements/1.1/title'), literal('test') ); { my $store = new_store( $dsn, $user, $pass, $model ); $store->add_statement( $st ); is( $store->count_statements, 1, 'insert statement' ); } { my $store = new_store( $dsn, $user, $pass, $model ); is( $store->count_statements, 1, 'statement persists across dbh connections' ); $store->remove_statement( $st ); is( $store->count_statements, 0, 'cleaned up persistent statement' ); } } RDF-Trine-1.007/t/store-dbi-pg.t000644 000765 000024 00000004771 12171025553 016240 0ustar00gregstaff000000 000000 use FindBin '$Bin'; use lib "$Bin/lib"; use RDF::Trine qw(iri literal statement); use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use strict; use Test::More; use Module::Load::Conditional qw[can_load]; unless (can_load( modules => { 'DBD::Pg' => 0 })) { plan skip_all => "DBD::Pg must be installed for Postgres tests"; } unless ( exists $ENV{RDFTRINE_STORE_PG_DATABASE} and exists $ENV{RDFTRINE_STORE_PG_MODEL}) { plan skip_all => "Set the Pg environment variables to run these tests at least RDFTRINE_STORE_PG_DATABASE and RDFTRINE_STORE_PG_MODEL)"; } my $db = $ENV{RDFTRINE_STORE_PG_DATABASE}; my $host = $ENV{RDFTRINE_STORE_PG_HOST}; my $port = $ENV{RDFTRINE_STORE_PG_PORT}; my $user = $ENV{RDFTRINE_STORE_PG_USER}; my $pass = $ENV{RDFTRINE_STORE_PG_PASSWORD}; my $model = $ENV{RDFTRINE_STORE_PG_MODEL}; plan tests => 4 + Test::RDF::Trine::Store::number_of_tests; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $dsn = "DBI:Pg:database=$db"; $dsn .= ";host=$host" if (defined($host)); $dsn .= ";port=$port" if (defined($port)); persist_test($dsn, $user, $pass, $model); my $data = Test::RDF::Trine::Store::create_data; my $dbh = DBI->connect( $dsn, $user, $pass ); my $store = RDF::Trine::Store::DBI::Pg->new( $model, $dbh ); isa_ok( $store, 'RDF::Trine::Store::DBI::Pg' ); Test::RDF::Trine::Store::all_store_tests($store, $data); sub new_store { my $dsn = shift; my $user = shift; my $pass = shift; my $model = shift; my $dbh = DBI->connect( $dsn, $user, $pass ); if ((! $dbh) || ($dbh->err)) { diag 'Connection to database failed'; diag 'You may have to set one or more of RDFTRINE_STORE_PG_HOST, RDFTRINE_STORE_PG_PORT, RDFTRINE_STORE_PG_USER, RDFTRINE_STORE_PG_PASSWORD'; } my $store = RDF::Trine::Store::DBI::Pg->new( $model, $dbh ); return $store; } sub persist_test { note " persistence tests"; my $dsn = shift; my $user = shift; my $pass = shift; my $model = shift; my $st = statement( iri('http://example.org/'), iri('http://purl.org/dc/elements/1.1/title'), literal('test') ); { my $store = new_store( $dsn, $user, $pass, $model ); $store->add_statement( $st ); is( $store->count_statements, 1, 'insert statement' ); } { my $store = new_store( $dsn, $user, $pass, $model ); is( $store->count_statements, 1, 'statement persists across dbh connections' ); $store->remove_statement( $st ); is( $store->count_statements, 0, 'cleaned up persistent statement' ); } } RDF-Trine-1.007/t/store-dbi.t000644 000765 000024 00000000775 11563603677 015651 0ustar00gregstaff000000 000000 use FindBin '$Bin'; use lib "$Bin/lib"; use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use Test::More tests => 1 + Test::RDF::Trine::Store::number_of_tests; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $data = Test::RDF::Trine::Store::create_data; my $store = RDF::Trine::Store::DBI->temporary_store(); isa_ok( $store, 'RDF::Trine::Store::DBI' ); Test::RDF::Trine::Store::all_store_tests($store, $data); RDF-Trine-1.007/t/store-hexastore-pattern.t000644 000765 000024 00000012743 12147055171 020553 0ustar00gregstaff000000 000000 use Test::More qw(no_plan); # tests => 183; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed); use File::Temp qw(tempfile); use RDF::Trine qw(iri literal variable statement); use RDF::Trine::Pattern; use RDF::Trine::Store::Hexastore; my $store = RDF::Trine::Store::Hexastore->new(); _add_rdf( $store, <<'END'); @prefix eg: . eg:foo eg:bar 23, 24 ; eg:baz "quux" . eg:zzz eg:bar 23, 999 . END { my $p1 = statement( variable('p'), iri('http://example.org/bar'), variable('value') ); my $pattern = RDF::Trine::Pattern->new( $p1 ); my $iter = $store->get_pattern( $pattern ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my $count = 0; while (my $row = $iter->next) { isa_ok( $row, 'HASH' ); my $value = $row->{ value }; isa_ok( $value, 'RDF::Trine::Node::Literal' ); like( $value->literal_value, qr/^(23|24|999)$/, 'expected literal numeric value' ); $count++; } is( $count, 4, 'expected count of triples matching predicate ' ); } { # ?p 999 . # ?s ?p ?value . my $p1 = statement( iri('http://example.org/zzz'), variable('p'), literal('999', undef, 'http://www.w3.org/2001/XMLSchema#integer') ); my $p2 = statement( variable('s'), variable('p'), variable('value') ); my $pattern = RDF::Trine::Pattern->new( $p1, $p2 ); my $iter = $store->get_pattern( $pattern ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my $count = 0; while (my $row = $iter->next) { isa_ok( $row, 'HASH' ); like( $row->{'s'}->uri_value, qr, 'expected subject variable' ); is( $row->{'p'}->uri_value, 'http://example.org/bar', 'expected predicate variable' ); like( $row->{'value'}->literal_value, qr<^(23|24|999)$>, 'expected object variable' ); $count++; } is( $count, 4, 'expected count on b1b,213 (requires sorting on 3-free get_statements call)' ); } { my $iter = $store->get_statements( variable('s'), iri('http://example.org/bar'), variable('value'), undef, orderby => [ 's' => 'ASC' ] ); isa_ok( $iter, 'RDF::Trine::Iterator::Graph' ); my $count = 0; my %seen; my $current; while (my $t = $iter->next) { if (defined($current)) { my $new = $t->subject; if ($current->as_string ne $new->as_string) { if ($seen{ $new->as_string }++) { fail('distinct sorted subject value'); } else { pass('distinct sorted subject value'); } } $current = $new; } else { $seen{ $t->subject->as_string }++; } $current = $t->subject; $count++; } is( $count, 4, 'expected count on sorted get_statements call' ); } { my @sorted; { my $iter = $store->get_statements( variable('s'), iri('http://example.org/bar'), variable('o'), undef, orderby => [ 'o' => 'ASC' ] ); isa_ok( $iter, 'RDF::Trine::Iterator::Graph' ); my $count = 0; my %seen; my $current; while (my $t = $iter->next) { if (defined($current)) { my $new = $t->object; if ($current->as_string ne $new->as_string) { if ($seen{ $new->as_string }++) { fail('distinct sorted object value'); } else { pass('distinct sorted object value'); } push(@sorted, $new->as_string); } $current = $new; } else { my $s = $t->object->as_string; $seen{ $s }++; push(@sorted, $s); } $current = $t->object; $count++; } is( $count, 4, 'expected count on sorted get_statements call' ); } { my $iter = $store->get_statements( variable('s'), iri('http://example.org/bar'), variable('o'), undef, orderby => [ 'o' => 'DESC' ] ); my $current; while (my $t = $iter->next) { if (defined($current)) { my $new = $t->object; if ($current->as_string ne $new->as_string) { is( $new->as_string, pop(@sorted), 'expected reverse sorted object value' ); } $current = $new; } else { my $s = $t->object->as_string; is( $s, pop(@sorted), 'expected reverse sorted object value' ); } $current = $t->object; } } } { my @sorted; { my $iter = $store->get_statements( variable('s'), variable('p'), variable('o'), undef, orderby => [ 'o' => 'ASC' ] ); isa_ok( $iter, 'RDF::Trine::Iterator::Graph' ); my $count = 0; my %seen; my $current; while (my $t = $iter->next) { if (defined($current)) { my $new = $t->object; if ($current->as_string ne $new->as_string) { if ($seen{ $new->as_string }++) { fail('distinct sorted object value'); } else { pass('distinct sorted object value'); } push(@sorted, $new->as_string); } $current = $new; } else { my $s = $t->object->as_string; $seen{ $s }++; push(@sorted, $s); } $current = $t->object; $count++; } is( $count, 5, 'expected count on sorted get_statements call' ); } { my $iter = $store->get_statements( variable('s'), variable('p'), variable('o'), undef, orderby => [ 'o' => 'DESC' ] ); my $current; while (my $t = $iter->next) { if (defined($current)) { my $new = $t->object; if ($current->as_string ne $new->as_string) { is( $new->as_string, pop(@sorted), 'expected reverse sorted object value' ); } $current = $new; } else { my $s = $t->object->as_string; is( $s, pop(@sorted), 'expected reverse sorted object value' ); } $current = $t->object; } } } ################ sub _add_rdf { my $store = shift; my $data = shift; my $base = shift || 'http://example.org/'; my $parser = RDF::Trine::Parser::Turtle->new(); my $model = RDF::Trine::Model->new($store); $parser->parse_into_model( $base, $data, $model ); } RDF-Trine-1.007/t/store-hexastore-storable.t000644 000765 000024 00000004263 12017675455 020720 0ustar00gregstaff000000 000000 use Test::More qw(no_plan); # tests => 183; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed); use File::Temp qw(tempfile); use RDF::Trine; use RDF::Trine::Store::Hexastore; (undef, my $filename) = tempfile(); { my $store = RDF::Trine::Store::Hexastore->new(); _add_rdf( $store, <<"END" ); 23 24 quux 999 END $store->store( $filename ); } { my $store = RDF::Trine::Store::Hexastore->load( $filename ); _do_tests($store, "loading $filename directly"); } { my $store = RDF::Trine::Store->new_with_string('Hexastore;Storable;file='.$filename ); _do_tests($store, "using $filename in config string"); } sub _do_tests { my ($store, $group) = @_; note "Tests for $group"; isa_ok( $store, 'RDF::Trine::Store::Hexastore' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/foo') ), 3, 'count_statements(bff) returned 3' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/zzz') ), 1, 'count_statements(bff) returned 1' ); is( $store->count_statements( undef, RDF::Trine::Node::Resource->new('http://example.org/bar'), undef ), 3, 'count_statements(fbf) returned 3' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), undef ), 2, 'count_statements(bbf) returned 2' ); is( $store->count_statements, 4, 'count_statements(fff) returned expected 4' ); } ################ sub _add_rdf { my $store = shift; my $data = shift; my $base = shift || 'http://example.org/'; my $parser = RDF::Trine::Parser::RDFXML->new(); $parser->parse_into_model( $base, $data, $store ); } RDF-Trine-1.007/t/store-hexastore-triplestore.t000644 000765 000024 00000001111 12054230225 021425 0ustar00gregstaff000000 000000 use FindBin '$Bin'; use lib "$Bin/lib"; use Test::RDF::Trine::Store qw(all_triple_store_tests number_of_triple_tests); use Test::More tests => 1 + Test::RDF::Trine::Store::number_of_triple_tests; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $data = Test::RDF::Trine::Store::create_data; my $ex = $data->{ex}; my $store = RDF::Trine::Store::Hexastore->temporary_store(); isa_ok( $store, 'RDF::Trine::Store::Hexastore' ); Test::RDF::Trine::Store::all_triple_store_tests($store, $data); done_testing; RDF-Trine-1.007/t/store-hexastore.t000644 000765 000024 00000023652 12054230225 017071 0ustar00gregstaff000000 000000 use Test::More qw(no_plan); # tests => 183; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed); use RDF::Trine; use RDF::Trine::Store::Hexastore; my $store = RDF::Trine::Store::Hexastore->new(); isa_ok( $store, 'RDF::Trine::Store::Hexastore' ); _add_rdf( $store, <<"END" ); 23 END { my @nodes = ( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('23', undef, 'http://www.w3.org/2001/XMLSchema#integer'), ); my $st = RDF::Trine::Statement->new( @nodes ); my $iter = $store->get_statements( @nodes ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $next = $iter->next; is_deeply( $next, $st, 'got expected statement by 3-bound query' ); } { my @nodes = ( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('00', undef, 'http://www.w3.org/2001/XMLSchema#integer'), ); my $st = RDF::Trine::Statement->new( @nodes ); my $iter = $store->get_statements( @nodes ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $next = $iter->next; is_deeply( $next, undef, 'got expected empty statement iterator by 3-bound query' ); } { my @nodes = ( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), undef, ); my $st = RDF::Trine::Statement->new( @nodes[0,1], RDF::Trine::Node::Literal->new('23', undef, 'http://www.w3.org/2001/XMLSchema#integer') ); my $iter = $store->get_statements( @nodes ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $next = $iter->next) { is_deeply( $next, $st, 'got expected statement by 2-bound query' ); $count++; } is( $count, 1, 'iterator had expected single element' ); } _add_rdf( $store, <<"END" ); 999 24 quux END { my @nodes = ( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), undef, ); my @expect = ( RDF::Trine::Node::Literal->new('23', undef, 'http://www.w3.org/2001/XMLSchema#integer'), RDF::Trine::Node::Literal->new('24', undef, 'http://www.w3.org/2001/XMLSchema#integer'), ); my $iter = $store->get_statements( @nodes ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $next = $iter->next) { my $e = shift(@expect); unless (blessed($e)) { fail('no more nodes are expected, but one was found'); } my $st = RDF::Trine::Statement->new( @nodes[0,1], $e ); is_deeply( $next, $st, 'got expected statement by 2-bound query' ); $count++; } is( $count, 2, 'iterator had 2 expected element (after adding new data)' ); } { my @nodes = ( RDF::Trine::Node::Resource->new('http://example.org/foo'), undef, undef, ); my @expect = ( [ RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('23', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], [ RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('24', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], [ RDF::Trine::Node::Resource->new('http://example.org/baz'), RDF::Trine::Node::Literal->new('quux') ], ); my $iter = $store->get_statements( @nodes ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $next = $iter->next) { my $e = shift(@expect); unless (ref($e)) { fail('no more nodes are expected, but one was found'); } my $st = RDF::Trine::Statement->new( $nodes[0], @$e ); is_deeply( $next, $st, 'got expected statement by 1-bound query' ); $count++; } is( $count, 3, 'iterator had 3 expected element' ); } { my @expect = ( [ RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('23', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], [ RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('24', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], [ RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/baz'), RDF::Trine::Node::Literal->new('quux') ], [ RDF::Trine::Node::Resource->new('http://example.org/zzz'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('999', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], ); my $iter = $store->get_statements(); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $next = $iter->next) { my $e = shift(@expect); unless (ref($e)) { fail('no more nodes are expected, but one was found'); } my $st = RDF::Trine::Statement->new( @$e ); is_deeply( $next, $st, 'got expected statement by all wildcard query' ); $count++; } is( $count, 4, 'iterator had 4 expected element' ); } is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/foo') ), 3, 'count_statements(bff) returned 3' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/zzz') ), 1, 'count_statements(bff) returned 1' ); is( $store->count_statements( undef, RDF::Trine::Node::Resource->new('http://example.org/bar'), undef ), 3, 'count_statements(fbf) returned 3' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), undef ), 2, 'count_statements(bbf) returned 2' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('24', undef, 'http://www.w3.org/2001/XMLSchema#integer') ), 1, 'count_statements(bbb) returned 1' ); is( $store->count_statements( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('12345', undef, 'http://www.w3.org/2001/XMLSchema#integer') ), 0, 'count_statements(bbb) returned 0' ); is( $store->count_statements, 4, 'count_statements(fff) returned expected 4' ); $store->remove_statement( RDF::Trine::Statement->new( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('23', undef, 'http://www.w3.org/2001/XMLSchema#integer') ) ); { my @expect = ( [ RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('24', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], [ RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/baz'), RDF::Trine::Node::Literal->new('quux') ], [ RDF::Trine::Node::Resource->new('http://example.org/zzz'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('999', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], ); my $iter = $store->get_statements(); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $next = $iter->next) { my $e = shift(@expect); unless (ref($e)) { fail('no more nodes are expected, but one was found'); } my $st = RDF::Trine::Statement->new( @$e ); is_deeply( $next, $st, 'got expected statement by all wildcard query (after removing a statement)' ); $count++; } is( $count, 3, 'iterator had 3 expected element' ); } $store->remove_statement( RDF::Trine::Statement->new( RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/baz'), RDF::Trine::Node::Literal->new('quux') ) ); { my @expect = ( [ RDF::Trine::Node::Resource->new('http://example.org/foo'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('24', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], [ RDF::Trine::Node::Resource->new('http://example.org/zzz'), RDF::Trine::Node::Resource->new('http://example.org/bar'), RDF::Trine::Node::Literal->new('999', undef, 'http://www.w3.org/2001/XMLSchema#integer') ], ); my $iter = $store->get_statements(); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $next = $iter->next) { # use Data::Dumper; # warn Dumper($next); my $e = shift(@expect); unless (ref($e)) { fail('no more nodes are expected, but one was found'); } my $st = RDF::Trine::Statement->new( @$e ); is_deeply( $next, $st, 'got expected statement by all wildcard query (after removing a second statement)' ); $count++; } is( $count, 2, 'iterator had 2 expected element' ); } { is($store->size, 2, 'pre-nuke size test shows 2 statements in store'); $store->nuke; is($store->size, 0, 'post-nuke size test shows 0 statements in store'); my $count = $store->count_statements( undef, undef, undef, undef ); is($count, 0, 'post-nuke count test shows 0 statements in store'); my $iter = $store->get_statements( undef, undef, undef, undef ); my $next = $iter->next; ok(! defined($next), 'Iterator gave no result' ); } ################ sub _add_rdf { my $store = shift; my $data = shift; my $base = shift || 'http://example.org/'; my $parser = RDF::Trine::Parser::RDFXML->new(); $parser->parse_into_model( $base, $data, $store ); } RDF-Trine-1.007/t/store-memory.t000644 000765 000024 00000003735 12054225575 016413 0ustar00gregstaff000000 000000 use FindBin '$Bin'; use lib "$Bin/lib"; use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use Test::More tests => 7 + Test::RDF::Trine::Store::number_of_tests; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; use RDF::Trine::Namespace qw(rdf rdfs); use RDF::Trine qw[iri literal blank variable statement]; use RDF::Trine::Model; my $data = Test::RDF::Trine::Store::create_data; my $ex = $data->{ex}; { my $store = RDF::Trine::Store::Memory->new(); isa_ok( $store, 'RDF::Trine::Store::Memory' ); $store->add_statement( RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, $ex->d) ); $store->add_statement( RDF::Trine::Statement::Quad->new($ex->r, $ex->t, $ex->u, $ex->v) ); is( $store->_statement_id($ex->a, $ex->t, $ex->c, $ex->d), -1, '_statement_id' ); is( $store->_statement_id($ex->w, $ex->x, $ex->z, $ex->z), -1, '_statement_id' ); } { my $store = RDF::Trine::Store::Memory->temporary_store(); isa_ok( $store, 'RDF::Trine::Store::Memory' ); Test::RDF::Trine::Store::all_store_tests($store, $data); } { my $parser = RDF::Trine::Parser->new( 'turtle' ); my $store = RDF::Trine::Store::Memory->new(); my $model = RDF::Trine::Model->new( $store ); my $ttl = <<'END'; @base . @prefix rdfs: . rdfs:label "This is a test"@en ; . rdfs:label "Testing with longer URI."@en . END $parser->parse_into_model( 'http://localhost', $ttl, $model ); my $etag1 = $model->etag; $model->add_statement(statement(iri('http://localhost/foo'), $rdfs->label, literal('DAAAAHUT'))); my $etag2 = $model->etag; isnt( $etag1, $etag2, 'changed etag' ); $model->add_statement(statement(iri('http://localhost/foo'), $rdfs->label, literal('DAHUT'))); my $etag3 = $model->etag; isnt( $etag3, $etag1, 'changed etag' ); isnt( $etag3, $etag2, 'changed etag' ); } RDF-Trine-1.007/t/store-redis.t000644 000765 000024 00000001656 11760736733 016217 0ustar00gregstaff000000 000000 use strict; use warnings; no warnings 'redefine'; use Test::More; use FindBin '$Bin'; use lib "$Bin/lib"; use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $tests = 1 + Test::RDF::Trine::Store::number_of_tests; SKIP: { eval "use RDF::Trine::Store::Redis;"; if ($@) { plan skip_all => "Need Redis to run these tests."; } elsif (not exists $ENV{RDFTRINE_STORE_REDIS_SERVER}) { plan skip_all => "Set the Redis environment variable to run these tests (RDFTRINE_STORE_REDIS_SERVER)"; } else { plan tests => $tests; } my $server = $ENV{RDFTRINE_STORE_REDIS_SERVER}; my $data = Test::RDF::Trine::Store::create_data; my $store = RDF::Trine::Store::Redis->new( server => $server ); isa_ok( $store, 'RDF::Trine::Store::Redis' ); $store->nuke; Test::RDF::Trine::Store::all_store_tests($store, $data, 0); $store->nuke; } done_testing; RDF-Trine-1.007/t/store-triple_sql.t000644 000765 000024 00000033164 12054230225 017244 0ustar00gregstaff000000 000000 use Test::More tests => 12; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine; use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Statement; use RDF::Trine::Store::DBI; use XML::Namespace; my $dc = XML::Namespace->new('http://purl.org/dc/elements/1.1/'); my $foaf = XML::Namespace->new('http://xmlns.com/foaf/0.1/'); my $s = RDF::Trine::Node::Resource->new( 'http://example.com/' ); my $title = RDF::Trine::Node::Resource->new( $dc->title ); my $desc = RDF::Trine::Node::Resource->new( $dc->description ); my $v1 = RDF::Trine::Node::Variable->new( 'title' ); my $v2 = RDF::Trine::Node::Variable->new( 'description' ); { my $triple = RDF::Trine::Statement->new($s, $title, $v1); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $triple ); sql_like( $sql, qr'SELECT s0[.]object AS title_Node, ljr0[.]URI AS title_URI, ljl0[.]Value AS title_Value, ljl0[.]Language AS title_Language, ljl0[.]Datatype AS title_Datatype, ljb0[.]Name AS title_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 2882409734267140843 AND s0[.]predicate = 16668832798855018521', 'triple to sql' ); } { my $triple1 = RDF::Trine::Statement->new($s, $title, $v1); my $triple2 = RDF::Trine::Statement->new($s, $desc, $v2); my $bgp = RDF::Trine::Pattern->new( $triple1, $triple2 ); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $bgp ); sql_like( $sql, qr'SELECT s1[.]object AS description_Node, ljr0[.]URI AS description_URI, ljl0[.]Value AS description_Value, ljl0[.]Language AS description_Language, ljl0[.]Datatype AS description_Datatype, ljb0[.]Name AS description_Name, s0[.]object AS title_Node, ljr1[.]URI AS title_URI, ljl1[.]Value AS title_Value, ljl1[.]Language AS title_Language, ljl1[.]Datatype AS title_Datatype, ljb1[.]Name AS title_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr1 ON [(]s0[.]object = ljr1[.]ID[)] LEFT JOIN Literals ljl1 ON [(]s0[.]object = ljl1[.]ID[)] LEFT JOIN Bnodes ljb1 ON [(]s0[.]object = ljb1[.]ID[)], Statements14109427105860845629 s1 LEFT JOIN Resources ljr0 ON [(]s1[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s1[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s1[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 2882409734267140843 AND s0[.]predicate = 16668832798855018521 AND s1[.]subject = 2882409734267140843 AND s1[.]predicate = 14986803616804843731$', 'bgp to sql' ); } { my $triple = RDF::Trine::Statement->new($s, $title, $v1); my $store = RDF::Trine::Store::DBI->new('temp'); my $ctx = RDF::Trine::Node::Resource->new( 'http://example.com/' ); my $sql = $store->_sql_for_pattern( $triple, $ctx ); sql_like( $sql, qr'SELECT s0.object AS title_Node, ljr0.URI AS title_URI, ljl0.Value AS title_Value, ljl0.Language AS title_Language, ljl0.Datatype AS title_Datatype, ljb0.Name AS title_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0.object = ljr0.ID[)] LEFT JOIN Literals ljl0 ON [(]s0.object = ljl0.ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0.object = ljb0.ID[)] WHERE s0.subject = 2882409734267140843 AND s0.predicate = 16668832798855018521 AND s0.Context = 2882409734267140843$', 'triple with context to sql (1)' ); } { my $triple = RDF::Trine::Statement->new($v1, $v1, $v1); my $store = RDF::Trine::Store::DBI->new('temp'); my $ctx = RDF::Trine::Node::Resource->new( 'http://example.com/' ); my $sql = $store->_sql_for_pattern( $triple, $ctx ); sql_like( $sql, qr'SELECT s0.subject AS title_Node, ljr0.URI AS title_URI FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0.subject = ljr0.ID[)] WHERE s0.predicate = s0.subject AND s0.object = s0.subject AND s0.Context = 2882409734267140843 AND [(]ljr0[.]URI IS NOT NULL[)]$', 'triple with context to sql (2)' ); } eval "use RDF::Query 2.000; use RDF::Query::Expression;"; my $RDF_QUERY_LOADED = ($@) ? 0 : 1; SKIP: { if (not($RDF_QUERY_LOADED)) { skip("RDF::Query can't be loaded", 8); } else { my $s = RDF::Query::Node::Resource->new('http://example/x1'); my $p = RDF::Query::Node::Resource->new('http://purl.org/dc/elements/1.1/title'); my $v = RDF::Query::Node::Variable->new('v'); my $x = RDF::Query::Node::Variable->new('x'); my $l = RDF::Query::Node::Literal->new('literal'); { my $triple = RDF::Query::Algebra::Triple->new($s, $p, $v); my $expr = RDF::Query::Expression::Function->new( 'sparql:isliteral', $v ); my $filter = RDF::Query::Algebra::Filter->new( $expr, $triple ); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $filter ); sql_like( $sql, qr'SELECT s0[.]object AS v_Node, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype FROM Statements14109427105860845629 s0 LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] WHERE s0[.]subject = 17375543198360951945 AND s0[.]predicate = 16668832798855018521 AND [(]ljl0[.]Value IS NOT NULL[)]$', 'triple with isliteral(?node) filter' ); } { my $s = RDF::Query::Node::Resource->new('http://kasei.us/about/foaf.xrdf#greg'); my $p1 = RDF::Query::Node::Resource->new('http://xmlns.com/foaf/0.1/made'); my $p2 = RDF::Query::Node::Resource->new('http://xmlns.com/foaf/0.1/img'); my $v = RDF::Query::Node::Variable->new('v'); my $triple1 = RDF::Query::Algebra::Triple->new($s, $p1, $v); my $triple2 = RDF::Query::Algebra::Triple->new($s, $p2, $v); my $union = RDF::Query::Algebra::Union->new( $triple1, $triple2 ); my $store = RDF::Trine::Store::DBI->new('endpoint'); my $sql = $store->_sql_for_pattern( $union ); sql_like( $sql, qr'SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name FROM Statements4926934303433647533 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 2954181085641959508 AND s0[.]predicate = 18268311508035964650 UNION SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name FROM Statements4926934303433647533 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 2954181085641959508 AND s0[.]predicate = 7452795881103254944$', 'UNION pattern with two triples' ); } { my $p1 = RDF::Query::Node::Resource->new('http://xmlns.com/foaf/0.1/made'); my $p2 = RDF::Query::Node::Resource->new('http://xmlns.com/foaf/0.1/img'); my $triple1 = RDF::Query::Algebra::Triple->new($v, $p1, $x); my $triple2 = RDF::Query::Algebra::Triple->new($x, $p2, $v); my $union = RDF::Query::Algebra::Union->new( $triple1, $triple2 ); my $store = RDF::Trine::Store::DBI->new('endpoint'); my $sql = $store->_sql_for_pattern( $union ); sql_like( $sql, qr'SELECT s0[.]subject AS v_Node, ljr0[.]URI AS v_URI, ljb0[.]Name AS v_Name, s0[.]object AS x_Node, ljr1[.]URI AS x_URI, ljl1[.]Value AS x_Value, ljl1[.]Language AS x_Language, ljl1[.]Datatype AS x_Datatype, ljb1[.]Name AS x_Name FROM Statements4926934303433647533 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]subject = ljr0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]subject = ljb0[.]ID[)] LEFT JOIN Resources ljr1 ON [(]s0[.]object = ljr1[.]ID[)] LEFT JOIN Literals ljl1 ON [(]s0[.]object = ljl1[.]ID[)] LEFT JOIN Bnodes ljb1 ON [(]s0[.]object = ljb1[.]ID[)] WHERE s0[.]predicate = 18268311508035964650 AND [(]ljr0[.]URI IS NOT NULL OR ljb0[.]Name IS NOT NULL[)] UNION SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name, s0[.]subject AS x_Node, ljr1[.]URI AS x_URI, ljb1[.]Name AS x_Name FROM Statements4926934303433647533 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] LEFT JOIN Resources ljr1 ON [(]s0[.]subject = ljr1[.]ID[)] LEFT JOIN Bnodes ljb1 ON [(]s0[.]subject = ljb1[.]ID[)] WHERE s0[.]predicate = 7452795881103254944 AND [(]ljr1[.]URI IS NOT NULL OR ljb1[.]Name IS NOT NULL[)]$', 'UNION pattern with reversed variable orderings' ); } { my $lit = RDF::Query::Node::Literal->new('Jan'); my $triple = RDF::Query::Algebra::Triple->new($s, $p, $v); my $expr = RDF::Query::Expression::Binary->new( '==', $v, $lit ); my $filter = RDF::Query::Algebra::Filter->new( $expr, $triple ); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $filter ); sql_like( $sql, qr'SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 17375543198360951945 AND s0[.]predicate = 16668832798855018521 AND s0[.]object = 3959637603443298718$', 'triple with equality test filter' ); } { my $lit = RDF::Query::Node::Literal->new('Jan'); my $triple = RDF::Query::Algebra::Triple->new($s, $p, $v); my $bgp = RDF::Query::Algebra::BasicGraphPattern->new( $triple ); my $ggp = RDF::Query::Algebra::GroupGraphPattern->new( $bgp ); my $expr = RDF::Query::Expression::Binary->new( '==', $v, $lit ); my $filter = RDF::Query::Algebra::Filter->new( $expr, $ggp ); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $filter ); sql_like( $sql, qr'SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 17375543198360951945 AND s0[.]predicate = 16668832798855018521 AND s0[.]object = 3959637603443298718$', 'GGP with equality test filter' ); } { my $jan = RDF::Query::Node::Literal->new('Jan'); my $feb = RDF::Query::Node::Literal->new('Feb'); my $triple = RDF::Query::Algebra::Triple->new($s, $p, $v); my $expr1 = RDF::Query::Expression::Binary->new( '==', $v, $jan ); my $expr2 = RDF::Query::Expression::Binary->new( '==', $v, $feb ); my $logor = RDF::Query::Node::Resource->new('sparql:logical-or'); my $expr = RDF::Query::Expression::Function->new( $logor, $expr1, $expr2 ); my $filter = RDF::Query::Algebra::Filter->new( $expr, $triple ); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $filter ); sql_like( $sql, qr'SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 17375543198360951945 AND s0[.]predicate = 16668832798855018521 AND [(]s0[.]object = 3959637603443298718 OR s0[.]object = 15386739423987231717[)]$', 'triple with equality test disjunction filter' ); } { my $jan = RDF::Query::Node::Literal->new('Jan'); my $feb = RDF::Query::Node::Literal->new('Feb'); my $mar = RDF::Query::Node::Literal->new('Mar'); my $triple = RDF::Query::Algebra::Triple->new($s, $p, $v); my $expr1 = RDF::Query::Expression::Binary->new( '==', $v, $jan ); my $expr2 = RDF::Query::Expression::Binary->new( '==', $v, $feb ); my $expr3 = RDF::Query::Expression::Binary->new( '==', $v, $mar ); my $logor = RDF::Query::Node::Resource->new('sparql:logical-or'); my $expr4 = RDF::Query::Expression::Function->new( $logor, $expr1, $expr2 ); my $expr = RDF::Query::Expression::Function->new( $logor, $expr4, $expr3 ); my $filter = RDF::Query::Algebra::Filter->new( $expr, $triple ); my $store = RDF::Trine::Store::DBI->new('temp'); my $sql = $store->_sql_for_pattern( $filter ); sql_like( $sql, qr'SELECT s0[.]object AS v_Node, ljr0[.]URI AS v_URI, ljl0[.]Value AS v_Value, ljl0[.]Language AS v_Language, ljl0[.]Datatype AS v_Datatype, ljb0[.]Name AS v_Name FROM Statements14109427105860845629 s0 LEFT JOIN Resources ljr0 ON [(]s0[.]object = ljr0[.]ID[)] LEFT JOIN Literals ljl0 ON [(]s0[.]object = ljl0[.]ID[)] LEFT JOIN Bnodes ljb0 ON [(]s0[.]object = ljb0[.]ID[)] WHERE s0[.]subject = 17375543198360951945 AND s0[.]predicate = 16668832798855018521 AND [(]s0[.]object = 3959637603443298718 OR s0[.]object = 15386739423987231717 OR s0[.]object = 6604099646270077689[)]$', 'triple with equality test deep-disjunction filter' ); } throws_ok { my $triple1 = RDF::Query::Algebra::Triple->new($s, $p, $v); my $triple2 = RDF::Query::Algebra::Triple->new($s, $p, $x); my $union = RDF::Query::Algebra::Union->new( $triple1, $triple2 ); my $store = RDF::Trine::Store::DBI->new('endpoint'); my $sql = $store->_sql_for_pattern( $union ); warn $sql; } 'RDF::Trine::Error::CompilationError', 'UNION block with different referenced variables throws error'; } } sub sql_like { my $sql = shift; my $pat = shift; my $name = shift; $sql =~ s/\s+/ /g; like( $sql, $pat, $name ); } RDF-Trine-1.007/t/store.t000644 000765 000024 00000000776 11563603677 015116 0ustar00gregstaff000000 000000 use Test::More tests => 3; # This file now only contains tests that are relevant to all stores use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; use FindBin '$Bin'; use lib "$Bin/lib"; isa_ok( store( 'Memory' ), 'RDF::Trine::Store::Memory' ); isa_ok( RDF::Trine::Store->new_with_string( 'Memory' ), 'RDF::Trine::Store::Memory' ); isa_ok( RDF::Trine::Store->new_with_string( 'SPARQL;http://example/' ), 'RDF::Trine::Store::SPARQL' ); RDF-Trine-1.007/t/syntax.t000644 000765 000024 00000002314 11325427731 015265 0ustar00gregstaff000000 000000 use Test::More tests => 14; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri blank literal variable); use RDF::Trine::Namespace qw(xsd); { my $r = iri('http://kasei.us/'); isa_ok( $r, 'RDF::Trine::Node::Resource' ); is( $r->uri_value, 'http://kasei.us/', 'expected IRI value' ); } { my $b = blank('b1'); isa_ok( $b, 'RDF::Trine::Node::Blank' ); is( $b->blank_identifier, 'b1', 'expected blank node identifier' ); } { my $l = literal( 'text' ); isa_ok( $l, 'RDF::Trine::Node::Literal' ); is( $l->literal_value, 'text', 'expected literal value' ); } { my $l = literal( 'text', 'en' ); isa_ok( $l, 'RDF::Trine::Node::Literal' ); is( $l->literal_value, 'text', 'expected lang-literal value' ); is( $l->literal_value_language, 'en', 'expected lang-literal language' ); } { my $l = literal( '123', undef, $xsd->integer ); isa_ok( $l, 'RDF::Trine::Node::Literal' ); is( $l->literal_value, '123', 'expected dt-literal value' ); is( $l->literal_datatype, 'http://www.w3.org/2001/XMLSchema#integer', 'expected dt-literal datatype' ); } { my $v = variable( 'x' ); isa_ok( $v, 'RDF::Trine::Node::Variable' ); is( $v->name, 'x', 'expected variable name' ); } __END__ RDF-Trine-1.007/t/data/bugs/000755 000765 000024 00000000000 12171744442 015424 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfa/000755 000765 000024 00000000000 12171744443 015401 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/000755 000765 000024 00000000000 12171744443 016453 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/trig-2013/000755 000765 000024 00000000000 12171744443 016015 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/turtle/000755 000765 000024 00000000000 12171744443 016004 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/turtle-2013/000755 000765 000024 00000000000 12171744443 016367 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/turtle-2013/anonymous_blank_node_object.ttl000644 000765 000024 00000000057 12164234713 024644 0ustar00gregstaff000000 000000 [] . RDF-Trine-1.007/t/data/turtle-2013/anonymous_blank_node_subject.ttl000644 000765 000024 00000000057 12164234713 025035 0ustar00gregstaff000000 000000 [] . RDF-Trine-1.007/t/data/turtle-2013/bareword_a_predicate.nt000644 000765 000024 00000000136 12164234713 023053 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/bareword_a_predicate.ttl000644 000765 000024 00000000056 12164234713 023236 0ustar00gregstaff000000 000000 a . RDF-Trine-1.007/t/data/turtle-2013/bareword_decimal.nt000644 000765 000024 00000000136 12164234713 022211 0ustar00gregstaff000000 000000 "1.0"^^ . RDF-Trine-1.007/t/data/turtle-2013/bareword_decimal.ttl000644 000765 000024 00000000060 12164234713 022367 0ustar00gregstaff000000 000000 1.0 . RDF-Trine-1.007/t/data/turtle-2013/bareword_double.nt000644 000765 000024 00000000135 12164234713 022064 0ustar00gregstaff000000 000000 "1E0"^^ . RDF-Trine-1.007/t/data/turtle-2013/bareword_double.ttl000644 000765 000024 00000000060 12164234713 022243 0ustar00gregstaff000000 000000 1E0 . RDF-Trine-1.007/t/data/turtle-2013/bareword_integer.ttl000644 000765 000024 00000000056 12164234713 022433 0ustar00gregstaff000000 000000 1 . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_as_object.nt000644 000765 000024 00000000144 12164234713 025234 0ustar00gregstaff000000 000000 _:b1 . _:b1 . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_as_object.ttl000644 000765 000024 00000000134 12164234713 025415 0ustar00gregstaff000000 000000 [ ] . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_as_subject.nt000644 000765 000024 00000000144 12164234713 025425 0ustar00gregstaff000000 000000 _:b1 . _:b1 . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_as_subject.ttl000644 000765 000024 00000000134 12164234713 025606 0ustar00gregstaff000000 000000 [ ] . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_containing_collection.nt000644 000765 000024 00000000371 12164234713 027651 0ustar00gregstaff000000 000000 _:b1 _:el1 . _:el1 "1"^^ . _:el1 . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_containing_collection.ttl000644 000765 000024 00000000040 12164234713 030024 0ustar00gregstaff000000 000000 [ (1) ] . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_with_multiple_triples.nt000644 000765 000024 00000000227 12164234713 027735 0ustar00gregstaff000000 000000 _:b1 . _:b1 . _:b1 . RDF-Trine-1.007/t/data/turtle-2013/blankNodePropertyList_with_multiple_triples.ttl000644 000765 000024 00000000212 12164234713 030111 0ustar00gregstaff000000 000000 [ ; ] . RDF-Trine-1.007/t/data/turtle-2013/collection_object.nt000644 000765 000024 00000000410 12164234713 022402 0ustar00gregstaff000000 000000 _:el1 . _:el1 "1"^^ . _:el1 . RDF-Trine-1.007/t/data/turtle-2013/collection_object.ttl000644 000765 000024 00000000060 12164234713 022565 0ustar00gregstaff000000 000000 (1) . RDF-Trine-1.007/t/data/turtle-2013/collection_subject.nt000644 000765 000024 00000000410 12164234713 022573 0ustar00gregstaff000000 000000 _:el1 "1"^^ . _:el1 . _:el1 . RDF-Trine-1.007/t/data/turtle-2013/collection_subject.ttl000644 000765 000024 00000000060 12164234713 022756 0ustar00gregstaff000000 000000 (1) . RDF-Trine-1.007/t/data/turtle-2013/comment_following_localName.ttl000644 000765 000024 00000000131 12164234713 024600 0ustar00gregstaff000000 000000 @prefix p: . p:o#comment . RDF-Trine-1.007/t/data/turtle-2013/comment_following_PNAME_NS.nt000644 000765 000024 00000000100 12164234713 023757 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/comment_following_PNAME_NS.ttl000644 000765 000024 00000000130 12164234713 024144 0ustar00gregstaff000000 000000 @prefix p: . p:#comment . RDF-Trine-1.007/t/data/turtle-2013/default_namespace_IRI.ttl000644 000765 000024 00000000116 12164234713 023251 0ustar00gregstaff000000 000000 @prefix : . :s . RDF-Trine-1.007/t/data/turtle-2013/double_lower_case_e.nt000644 000765 000024 00000000135 12164234713 022706 0ustar00gregstaff000000 000000 "1e0"^^ . RDF-Trine-1.007/t/data/turtle-2013/double_lower_case_e.ttl000644 000765 000024 00000000060 12164234713 023065 0ustar00gregstaff000000 000000 1e0 . RDF-Trine-1.007/t/data/turtle-2013/empty_collection.nt000644 000765 000024 00000000135 12164234713 022276 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/empty_collection.ttl000644 000765 000024 00000000057 12164234713 022463 0ustar00gregstaff000000 000000 () . RDF-Trine-1.007/t/data/turtle-2013/first.nt000644 000765 000024 00000001214 12164234713 020053 0ustar00gregstaff000000 000000 _:outerEl1 . _:outerEl1 _:innerEl1 . _:innerEl1 "1"^^ . _:innerEl1 . _:outerEl1 _:outerEl2 . _:outerEl2 "2"^^ . _:outerEl2 . RDF-Trine-1.007/t/data/turtle-2013/first.ttl000644 000765 000024 00000000064 12164234713 020237 0ustar00gregstaff000000 000000 ((1) 2) . RDF-Trine-1.007/t/data/turtle-2013/HYPHEN_MINUS_in_localName.nt000644 000765 000024 00000000102 12164234713 023326 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/HYPHEN_MINUS_in_localName.ttl000644 000765 000024 00000000121 12164234713 023511 0ustar00gregstaff000000 000000 @prefix p: . p:s- . RDF-Trine-1.007/t/data/turtle-2013/IRI_spo.nt000644 000765 000024 00000000101 12164234713 020222 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/IRI_subject.ttl000644 000765 000024 00000000101 12164234713 021242 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/IRI_with_all_punctuation.nt000644 000765 000024 00000000216 12164234713 023664 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/IRI_with_all_punctuation.ttl000644 000765 000024 00000000216 12164234713 024046 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/IRI_with_eight_digit_numeric_escape.ttl000644 000765 000024 00000000112 12164234713 026162 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/IRI_with_four_digit_numeric_escape.ttl000644 000765 000024 00000000106 12164234713 026040 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/IRIREF_datatype.nt000644 000765 000024 00000000134 12164234713 021577 0ustar00gregstaff000000 000000 "1"^^ . RDF-Trine-1.007/t/data/turtle-2013/IRIREF_datatype.ttl000644 000765 000024 00000000134 12164234713 021761 0ustar00gregstaff000000 000000 "1"^^ . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_object.nt000644 000765 000024 00000000061 12164234713 024015 0ustar00gregstaff000000 000000 _:b1 . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_object.ttl000644 000765 000024 00000000060 12164234713 024176 0ustar00gregstaff000000 000000 _:o . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_subject.nt000644 000765 000024 00000000061 12164234713 024206 0ustar00gregstaff000000 000000 _:b1 . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_subject.ttl000644 000765 000024 00000000060 12164234713 024367 0ustar00gregstaff000000 000000 _:s . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_with_leading_digit.ttl000644 000765 000024 00000000060 12164234713 026546 0ustar00gregstaff000000 000000 _:0 . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_with_leading_underscore.ttl000644 000765 000024 00000000060 12164234713 027617 0ustar00gregstaff000000 000000 _:_ . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_with_non_leading_extras.ttl000644 000765 000024 00000000075 12164234713 027634 0ustar00gregstaff000000 000000 _:a·̀ͯ‿.⁀ . RDF-Trine-1.007/t/data/turtle-2013/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.ttl000644 000765 000024 00000000164 12164234713 032246 0ustar00gregstaff000000 000000 _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽 . RDF-Trine-1.007/t/data/turtle-2013/langtagged_LONG.ttl000644 000765 000024 00000000072 12164234713 022023 0ustar00gregstaff000000 000000 """chat"""@en . RDF-Trine-1.007/t/data/turtle-2013/langtagged_LONG_with_subtag.nt000644 000765 000024 00000000105 12164234713 024236 0ustar00gregstaff000000 000000 "Cheers"@en-UK . RDF-Trine-1.007/t/data/turtle-2013/langtagged_LONG_with_subtag.ttl000644 000765 000024 00000000143 12164234713 024422 0ustar00gregstaff000000 000000 # Test long literal with lang tag @prefix : . :a :b """Cheers"""@en-UK . RDF-Trine-1.007/t/data/turtle-2013/langtagged_non_LONG.nt000644 000765 000024 00000000066 12164234713 022516 0ustar00gregstaff000000 000000 "chat"@en . RDF-Trine-1.007/t/data/turtle-2013/langtagged_non_LONG.ttl000644 000765 000024 00000000066 12164234713 022700 0ustar00gregstaff000000 000000 "chat"@en . RDF-Trine-1.007/t/data/turtle-2013/lantag_with_subtag.nt000644 000765 000024 00000000071 12164234713 022572 0ustar00gregstaff000000 000000 "chat"@en-us . RDF-Trine-1.007/t/data/turtle-2013/lantag_with_subtag.ttl000644 000765 000024 00000000071 12164234713 022754 0ustar00gregstaff000000 000000 "chat"@en-us . RDF-Trine-1.007/t/data/turtle-2013/last.nt000644 000765 000024 00000001214 12164234713 017667 0ustar00gregstaff000000 000000 _:outerEl1 . _:outerEl1 "1"^^ . _:outerEl1 _:outerEl2 . _:outerEl2 _:innerEl1 . _:innerEl1 "2"^^ . _:innerEl1 . _:outerEl2 . RDF-Trine-1.007/t/data/turtle-2013/last.ttl000644 000765 000024 00000000064 12164234713 020053 0ustar00gregstaff000000 000000 (1 (2)) . RDF-Trine-1.007/t/data/turtle-2013/LICENSE000644 000765 000024 00000013642 12164234713 017376 0ustar00gregstaff000000 000000 Summary ======= Distributed under both the W3C Test Suite License[1] and the W3C 3-clause BSD License[2]. To contribute to a W3C Test Suite, see the policies and contribution forms [3] 1. http://www.w3.org/Consortium/Legal/2008/04-testsuite-license 2. http://www.w3.org/Consortium/Legal/2008/03-bsd-license 3. http://www.w3.org/2004/10/27-testcases DISCLAIMER UNDER BOTH MUTUALLY EXCLUSIVE LICENSES, THIS DOCUMENT AND ALL DOCUMENTS, TESTS AND SOFTWARE THAT LINK THIS STATEMENT ARE PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF. W3C Test Suite License ====================== This document, Test Suites and other documents that link to this statement are provided by the copyright holders under the following license: By using and/or copying this document, or the W3C document from which this statement is linked, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions: Permission to copy, and distribute the contents of this document, or the W3C document from which this statement is linked, in any medium for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the document, or portions thereof, that you use: 1 A link or URL to the original W3C document. 2 The pre-existing copyright notice of the original author, or if it doesn't exist, a notice (hypertext is preferred, but a textual representation is permitted) of the form: "Copyright © [$date-of-document] World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) and others. All Rights Reserved. http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html" 3 If it exists, the STATUS of the W3C document. 4 When space permits, inclusion of the full text of this NOTICE should be provided. We request that authorship attribution be provided in any software, documents, or other items or products that you create pursuant to the implementation of the contents of this document, or any portion thereof. No right to create modifications or derivatives of W3C documents is granted pursuant to this license. However, if additional requirements (documented in the Copyright FAQ) are satisfied, the right to create modifications or derivatives is sometimes granted by the W3C to individuals complying with those requirements. If a Test Suite distinguishes the test harness (or, framework for navigation) and the actual tests, permission is given to remove or alter the harness or navigation if the Test Suite in question allows to do so. The tests themselves shall NOT be changed in any way. The name and trademarks of W3C and other copyright holders may NOT be used in advertising or publicity pertaining to this document or other documents that link to this statement without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders. Permission is given to use the trademarked string W3C within claims of performance concerning W3C Specifications or features described therein, and there only, if the test suite so authorizes. THIS WORK IS PROVIDED BY W3C, MIT, ERCIM, KEIO UNIVERSITY, THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL W3C, MIT, ERCIM, KEIO UNIVERSITY, THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. W3C 3-clause BSD License ======================== Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: 1 Redistributions of works must retain the original copyright notice, this list of conditions and the following disclaimer. 2 Redistributions in binary form must reproduce the original copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 3 Neither the name of the W3C nor the names of its contributors may be used to endorse or promote products derived from this work without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. RDF-Trine-1.007/t/data/turtle-2013/LITERAL1.nt000644 000765 000024 00000000060 12164234713 020077 0ustar00gregstaff000000 000000 "x" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1.ttl000644 000765 000024 00000000060 12164234713 020261 0ustar00gregstaff000000 000000 'x' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_all_controls.nt000644 000765 000024 00000000337 12164234713 022661 0ustar00gregstaff000000 000000 "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\t\u000B\u000C\u000E\u000F\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001A\u001B\u001C\u001D\u001E\u001F" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_all_controls.ttl000644 000765 000024 00000000115 12164234713 023035 0ustar00gregstaff000000 000000 ' ' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_all_punctuation.nt000644 000765 000024 00000000111 12164234713 023355 0ustar00gregstaff000000 000000 " !\"#$%&():;<=>?@[]^_`{|}~" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_all_punctuation.ttl000644 000765 000024 00000000110 12164234713 023536 0ustar00gregstaff000000 000000 ' !"#$%&():;<=>?@[]^_`{|}~' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_ascii_boundaries.nt000644 000765 000024 00000000123 12164234713 023462 0ustar00gregstaff000000 000000 "\u0000\t\u000B\u000C\u000E&([]\u007F" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_ascii_boundaries.ttl000644 000765 000024 00000000071 12164234713 023646 0ustar00gregstaff000000 000000 ' &([]' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_with_UTF8_boundaries.ttl000644 000765 000024 00000000143 12164234713 024337 0ustar00gregstaff000000 000000 '€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL1_with_UTF8_boundaries.ttl.new000644 000765 000024 00000000143 12164234713 025127 0ustar00gregstaff000000 000000 '€߿ࠀ࿿က쿿퀀퟿�𐀀𿿿񀀀󿿿􀀀􏿽' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL2.ttl000644 000765 000024 00000000060 12164234713 020262 0ustar00gregstaff000000 000000 "x" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL2_ascii_boundaries.nt000644 000765 000024 00000000123 12164234713 023463 0ustar00gregstaff000000 000000 "\u0000\t\u000B\u000C\u000E!#[]\u007F" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL2_ascii_boundaries.ttl000644 000765 000024 00000000071 12164234713 023647 0ustar00gregstaff000000 000000 " !#[]" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL2_with_UTF8_boundaries.ttl000644 000765 000024 00000000143 12164234713 024340 0ustar00gregstaff000000 000000 "€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽" . RDF-Trine-1.007/t/data/turtle-2013/literal_false.nt000644 000765 000024 00000000140 12164234713 021527 0ustar00gregstaff000000 000000 "false"^^ . RDF-Trine-1.007/t/data/turtle-2013/literal_false.ttl000644 000765 000024 00000000062 12164234713 021714 0ustar00gregstaff000000 000000 false . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1.ttl000644 000765 000024 00000000064 12164234713 021104 0ustar00gregstaff000000 000000 '''x''' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_ascii_boundaries.nt000644 000765 000024 00000000077 12164234713 024311 0ustar00gregstaff000000 000000 "\u0000&([]\u007F" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_ascii_boundaries.ttl000644 000765 000024 00000000065 12164234713 024470 0ustar00gregstaff000000 000000 '&([]' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_with_1_squote.nt000644 000765 000024 00000000062 12164234713 023573 0ustar00gregstaff000000 000000 "x'y" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_with_1_squote.ttl000644 000765 000024 00000000066 12164234713 023761 0ustar00gregstaff000000 000000 '''x'y''' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_with_2_squotes.nt000644 000765 000024 00000000063 12164234713 023760 0ustar00gregstaff000000 000000 "x''y" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_with_2_squotes.ttl000644 000765 000024 00000000067 12164234713 024146 0ustar00gregstaff000000 000000 '''x''y''' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG1_with_UTF8_boundaries.ttl000644 000765 000024 00000000147 12164234713 025162 0ustar00gregstaff000000 000000 '''€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽''' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2.ttl000644 000765 000024 00000000064 12164234713 021105 0ustar00gregstaff000000 000000 """x""" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_ascii_boundaries.nt000644 000765 000024 00000000077 12164234713 024312 0ustar00gregstaff000000 000000 "\u0000!#[]\u007F" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_ascii_boundaries.ttl000644 000765 000024 00000000065 12164234713 024471 0ustar00gregstaff000000 000000 "!#[]" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_1_squote.nt000644 000765 000024 00000000063 12164234713 023575 0ustar00gregstaff000000 000000 "x\"y" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_1_squote.ttl000644 000765 000024 00000000066 12164234713 023762 0ustar00gregstaff000000 000000 """x"y""" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_2_squotes.nt000644 000765 000024 00000000065 12164234713 023763 0ustar00gregstaff000000 000000 "x\"\"y" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_2_squotes.ttl000644 000765 000024 00000000067 12164234713 024147 0ustar00gregstaff000000 000000 """x""y""" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.nt000644 000765 000024 00000000101 12164234713 024343 0ustar00gregstaff000000 000000 "test-\\" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.ttl000644 000765 000024 00000000075 12164234713 024537 0ustar00gregstaff000000 000000 @prefix : . :s :p1 """test-\\""" . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_LONG2_with_UTF8_boundaries.ttl000644 000765 000024 00000000147 12164234713 025163 0ustar00gregstaff000000 000000 """€߿ࠀ࿿က쿿퀀퟿�𐀀𿿽񀀀󿿽􀀀􏿽""" . RDF-Trine-1.007/t/data/turtle-2013/literal_true.nt000644 000765 000024 00000000137 12164234713 021422 0ustar00gregstaff000000 000000 "true"^^ . RDF-Trine-1.007/t/data/turtle-2013/literal_true.ttl000644 000765 000024 00000000061 12164234713 021600 0ustar00gregstaff000000 000000 true . RDF-Trine-1.007/t/data/turtle-2013/literal_with_BACKSPACE.nt000644 000765 000024 00000000065 12164234713 022752 0ustar00gregstaff000000 000000 "\u0008" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_BACKSPACE.ttl000644 000765 000024 00000000060 12164234713 023127 0ustar00gregstaff000000 000000 '' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_CARRIAGE_RETURN.nt000644 000765 000024 00000000061 12164234713 023746 0ustar00gregstaff000000 000000 "\r" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_CARRIAGE_RETURN.ttl000644 000765 000024 00000000064 12164234713 024133 0ustar00gregstaff000000 000000 ''' ''' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_CHARACTER_TABULATION.nt000644 000765 000024 00000000061 12164234713 024510 0ustar00gregstaff000000 000000 "\t" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_CHARACTER_TABULATION.ttl000644 000765 000024 00000000060 12164234713 024671 0ustar00gregstaff000000 000000 ' ' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_escaped_BACKSPACE.ttl000644 000765 000024 00000000061 12164234713 024614 0ustar00gregstaff000000 000000 '\b' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_escaped_CARRIAGE_RETURN.ttl000644 000765 000024 00000000061 12164234713 025614 0ustar00gregstaff000000 000000 '\r' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_escaped_CHARACTER_TABULATION.ttl000644 000765 000024 00000000061 12164234713 026356 0ustar00gregstaff000000 000000 '\t' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_escaped_FORM_FEED.ttl000644 000765 000024 00000000061 12164234713 024666 0ustar00gregstaff000000 000000 '\f' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_escaped_LINE_FEED.ttl000644 000765 000024 00000000061 12164234713 024652 0ustar00gregstaff000000 000000 '\n' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_FORM_FEED.nt000644 000765 000024 00000000065 12164234713 023024 0ustar00gregstaff000000 000000 "\u000C" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_FORM_FEED.ttl000644 000765 000024 00000000060 12164234713 023201 0ustar00gregstaff000000 000000 ' ' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_LINE_FEED.nt000644 000765 000024 00000000061 12164234713 023004 0ustar00gregstaff000000 000000 "\n" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_LINE_FEED.ttl000644 000765 000024 00000000064 12164234713 023171 0ustar00gregstaff000000 000000 ''' ''' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_numeric_escape4.nt000644 000765 000024 00000000060 12164234713 024537 0ustar00gregstaff000000 000000 "o" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_numeric_escape4.ttl000644 000765 000024 00000000065 12164234713 024726 0ustar00gregstaff000000 000000 '\u006F' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_numeric_escape8.ttl000644 000765 000024 00000000071 12164234713 024727 0ustar00gregstaff000000 000000 '\U0000006F' . RDF-Trine-1.007/t/data/turtle-2013/literal_with_REVERSE_SOLIDUS.nt000644 000765 000024 00000000061 12164234713 024007 0ustar00gregstaff000000 000000 "\\" . RDF-Trine-1.007/t/data/turtle-2013/literal_with_REVERSE_SOLIDUS.ttl000644 000765 000024 00000000061 12164234713 024171 0ustar00gregstaff000000 000000 '\\' . RDF-Trine-1.007/t/data/turtle-2013/LITERAL_with_UTF8_boundaries.nt000644 000765 000024 00000000247 12164234713 024101 0ustar00gregstaff000000 000000 "\u0080\u07FF\u0800\u0FFF\u1000\uCFFF\uD000\uD7FF\uE000\uFFFD\U00010000\U0003FFFD\U00040000\U000FFFFD\U00100000\U0010FFFD" . t/data/turtle-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nt000644 000765 000024 00000000310 12164234713 033466 0ustar00gregstaff000000 000000 RDF-Trine-1.007 . t/data/turtle-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.ttl000644 000765 000024 00000000215 12164234713 033654 0ustar00gregstaff000000 000000 RDF-Trine-1.007@prefix p: . p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯ . RDF-Trine-1.007/t/data/turtle-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nt000644 000765 000024 00000000334 12164234713 032715 0ustar00gregstaff000000 000000 . t/data/turtle-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.ttl000644 000765 000024 00000000225 12164234713 033017 0ustar00gregstaff000000 000000 RDF-Trine-1.007@prefix p: . p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯𐀀󠇯 . RDF-Trine-1.007/t/data/turtle-2013/localname_with_COLON.nt000644 000765 000024 00000000102 12164234713 022637 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/localname_with_COLON.ttl000644 000765 000024 00000000121 12164234713 023022 0ustar00gregstaff000000 000000 @prefix p: . p:s: . RDF-Trine-1.007/t/data/turtle-2013/localName_with_leading_digit.nt000644 000765 000024 00000000101 12164234713 024507 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/localName_with_leading_digit.ttl000644 000765 000024 00000000120 12164234713 024672 0ustar00gregstaff000000 000000 @prefix p: . p:0 . RDF-Trine-1.007/t/data/turtle-2013/localName_with_leading_underscore.nt000644 000765 000024 00000000101 12164234713 025560 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/localName_with_leading_underscore.ttl000644 000765 000024 00000000120 12164234713 025743 0ustar00gregstaff000000 000000 @prefix p: . p:_ . RDF-Trine-1.007/t/data/turtle-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nt000644 000765 000024 00000000334 12164234713 031040 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.ttl000644 000765 000024 00000000225 12164234713 031221 0ustar00gregstaff000000 000000 @prefix p: . p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿﨎﷏ﷰ￯𐀀󯿽 . RDF-Trine-1.007/t/data/turtle-2013/localName_with_non_leading_extras.nt000644 000765 000024 00000000116 12164234713 025575 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/localName_with_non_leading_extras.ttl000644 000765 000024 00000000135 12164234713 025760 0ustar00gregstaff000000 000000 @prefix p: . p:a·̀ͯ‿.⁀ . RDF-Trine-1.007/t/data/turtle-2013/manifest.ttl000644 000765 000024 00000257601 12164234713 020731 0ustar00gregstaff000000 000000 ## Distributed under both the W3C Test Suite License[1] and the W3C 3- ## clause BSD License[2]. To contribute to a W3C Test Suite, see the ## policies and contribution forms [3] ## ## 1. http://www.w3.org/Consortium/Legal/2008/04-testsuite-license ## 2. http://www.w3.org/Consortium/Legal/2008/03-bsd-license ## 3. http://www.w3.org/2004/10/27-testcases # Test named *subm* are (c) W3C and taken from the Turtle submission. @prefix rdf: . @prefix rdfs: . @prefix mf: . @prefix qt: . @prefix rdft: . <> rdf:type mf:Manifest ; rdfs:comment "Turtle tests" ; mf:entries ( # atomic tests <#IRI_subject> <#IRI_with_four_digit_numeric_escape> <#IRI_with_eight_digit_numeric_escape> <#IRI_with_all_punctuation> <#bareword_a_predicate> <#old_style_prefix> <#SPARQL_style_prefix> <#prefixed_IRI_predicate> <#prefixed_IRI_object> <#prefix_only_IRI> <#prefix_with_PN_CHARS_BASE_character_boundaries> <#prefix_with_non_leading_extras> <#default_namespace_IRI> <#prefix_reassigned_and_used> <#reserved_escaped_localName> <#percent_escaped_localName> <#HYPHEN_MINUS_in_localName> <#underscore_in_localName> <#localname_with_COLON> <#localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries> <#localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries> <#localName_with_nfc_PN_CHARS_BASE_character_boundaries> <#localName_with_leading_underscore> <#localName_with_leading_digit> <#localName_with_non_leading_extras> <#old_style_base> <#SPARQL_style_base> <#labeled_blank_node_subject> <#labeled_blank_node_object> <#labeled_blank_node_with_PN_CHARS_BASE_character_boundaries> <#labeled_blank_node_with_leading_underscore> <#labeled_blank_node_with_leading_digit> <#labeled_blank_node_with_non_leading_extras> <#anonymous_blank_node_subject> <#anonymous_blank_node_object> <#sole_blankNodePropertyList> <#blankNodePropertyList_as_subject> <#blankNodePropertyList_as_object> <#blankNodePropertyList_with_multiple_triples> <#nested_blankNodePropertyLists> <#blankNodePropertyList_containing_collection> <#collection_subject> <#collection_object> <#empty_collection> <#nested_collection> <#first> <#last> <#LITERAL1> <#LITERAL1_ascii_boundaries> <#LITERAL1_with_UTF8_boundaries> <#LITERAL1_all_controls> <#LITERAL1_all_punctuation> <#LITERAL_LONG1> <#LITERAL_LONG1_ascii_boundaries> <#LITERAL_LONG1_with_UTF8_boundaries> <#LITERAL_LONG1_with_1_squote> <#LITERAL_LONG1_with_2_squotes> <#LITERAL2> <#LITERAL2_ascii_boundaries> <#LITERAL2_with_UTF8_boundaries> <#LITERAL_LONG2> <#LITERAL_LONG2_ascii_boundaries> <#LITERAL_LONG2_with_UTF8_boundaries> <#LITERAL_LONG2_with_1_squote> <#LITERAL_LONG2_with_2_squotes> <#literal_with_CHARACTER_TABULATION> <#literal_with_BACKSPACE> <#literal_with_LINE_FEED> <#literal_with_CARRIAGE_RETURN> <#literal_with_FORM_FEED> <#literal_with_REVERSE_SOLIDUS> <#literal_with_escaped_CHARACTER_TABULATION> <#literal_with_escaped_BACKSPACE> <#literal_with_escaped_LINE_FEED> <#literal_with_escaped_CARRIAGE_RETURN> <#literal_with_escaped_FORM_FEED> <#literal_with_numeric_escape4> <#literal_with_numeric_escape8> <#IRIREF_datatype> <#prefixed_name_datatype> <#bareword_integer> <#bareword_decimal> <#bareword_double> <#double_lower_case_e> <#negative_numeric> <#positive_numeric> <#numeric_with_leading_0> <#literal_true> <#literal_false> <#langtagged_non_LONG> <#langtagged_LONG> <#lantag_with_subtag> <#objectList_with_two_objects> <#predicateObjectList_with_two_objectLists> <#repeated_semis_at_end> <#repeated_semis_not_at_end> # tests requested by Jeremy Carroll # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c35 <#comment_following_localName> <#number_sign_following_localName> <#comment_following_PNAME_NS> <#number_sign_following_PNAME_NS> # tests from Dave Beckett # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c28 <#LITERAL_LONG2_with_REVERSE_SOLIDUS> <#turtle-syntax-bad-LITERAL2_with_langtag_and_datatype> <#two_LITERAL_LONG2s> <#langtagged_LONG_with_subtag> # original tests-ttl <#turtle-syntax-file-01> <#turtle-syntax-file-02> <#turtle-syntax-file-03> <#turtle-syntax-uri-01> <#turtle-syntax-uri-02> <#turtle-syntax-uri-03> <#turtle-syntax-uri-04> <#turtle-syntax-base-01> <#turtle-syntax-base-02> <#turtle-syntax-base-03> <#turtle-syntax-base-04> <#turtle-syntax-prefix-01> <#turtle-syntax-prefix-02> <#turtle-syntax-prefix-03> <#turtle-syntax-prefix-04> <#turtle-syntax-prefix-05> <#turtle-syntax-prefix-06> <#turtle-syntax-prefix-07> <#turtle-syntax-prefix-08> <#turtle-syntax-prefix-09> <#turtle-syntax-string-01> <#turtle-syntax-string-02> <#turtle-syntax-string-03> <#turtle-syntax-string-04> <#turtle-syntax-string-05> <#turtle-syntax-string-06> <#turtle-syntax-string-07> <#turtle-syntax-string-08> <#turtle-syntax-string-09> <#turtle-syntax-string-10> <#turtle-syntax-string-11> <#turtle-syntax-str-esc-01> <#turtle-syntax-str-esc-02> <#turtle-syntax-str-esc-03> <#turtle-syntax-pname-esc-01> <#turtle-syntax-pname-esc-02> <#turtle-syntax-pname-esc-03> <#turtle-syntax-bnode-01> <#turtle-syntax-bnode-02> <#turtle-syntax-bnode-03> <#turtle-syntax-bnode-04> <#turtle-syntax-bnode-05> <#turtle-syntax-bnode-06> <#turtle-syntax-bnode-07> <#turtle-syntax-bnode-08> <#turtle-syntax-bnode-09> <#turtle-syntax-bnode-10> <#turtle-syntax-number-01> <#turtle-syntax-number-02> <#turtle-syntax-number-03> <#turtle-syntax-number-04> <#turtle-syntax-number-05> <#turtle-syntax-number-06> <#turtle-syntax-number-07> <#turtle-syntax-number-08> <#turtle-syntax-number-09> <#turtle-syntax-number-10> <#turtle-syntax-number-11> <#turtle-syntax-datatypes-01> <#turtle-syntax-datatypes-02> <#turtle-syntax-kw-01> <#turtle-syntax-kw-02> <#turtle-syntax-kw-03> <#turtle-syntax-struct-01> <#turtle-syntax-struct-02> <#turtle-syntax-struct-03> <#turtle-syntax-struct-04> <#turtle-syntax-struct-05> <#turtle-syntax-lists-01> <#turtle-syntax-lists-02> <#turtle-syntax-lists-03> <#turtle-syntax-lists-04> <#turtle-syntax-lists-05> <#turtle-syntax-bad-uri-01> <#turtle-syntax-bad-uri-02> <#turtle-syntax-bad-uri-03> <#turtle-syntax-bad-uri-04> <#turtle-syntax-bad-uri-05> <#turtle-syntax-bad-prefix-01> <#turtle-syntax-bad-prefix-02> <#turtle-syntax-bad-prefix-03> <#turtle-syntax-bad-prefix-04> <#turtle-syntax-bad-prefix-05> <#turtle-syntax-bad-base-01> <#turtle-syntax-bad-base-02> <#turtle-syntax-bad-base-03> <#turtle-syntax-bad-struct-01> <#turtle-syntax-bad-struct-02> <#turtle-syntax-bad-struct-03> <#turtle-syntax-bad-struct-04> <#turtle-syntax-bad-struct-05> <#turtle-syntax-bad-struct-06> <#turtle-syntax-bad-struct-07> <#turtle-syntax-bad-kw-01> <#turtle-syntax-bad-kw-02> <#turtle-syntax-bad-kw-03> <#turtle-syntax-bad-kw-04> <#turtle-syntax-bad-kw-05> <#turtle-syntax-bad-n3-extras-01> <#turtle-syntax-bad-n3-extras-02> <#turtle-syntax-bad-n3-extras-03> <#turtle-syntax-bad-n3-extras-04> <#turtle-syntax-bad-n3-extras-05> <#turtle-syntax-bad-n3-extras-06> <#turtle-syntax-bad-n3-extras-07> <#turtle-syntax-bad-n3-extras-08> <#turtle-syntax-bad-n3-extras-09> <#turtle-syntax-bad-n3-extras-10> <#turtle-syntax-bad-n3-extras-11> <#turtle-syntax-bad-n3-extras-12> <#turtle-syntax-bad-n3-extras-13> <#turtle-syntax-bad-struct-08> <#turtle-syntax-bad-struct-09> <#turtle-syntax-bad-struct-10> <#turtle-syntax-bad-struct-11> <#turtle-syntax-bad-struct-12> <#turtle-syntax-bad-struct-13> <#turtle-syntax-bad-struct-14> <#turtle-syntax-bad-struct-15> <#turtle-syntax-bad-struct-16> <#turtle-syntax-bad-struct-17> <#turtle-syntax-bad-lang-01> <#turtle-syntax-bad-esc-01> <#turtle-syntax-bad-esc-02> <#turtle-syntax-bad-esc-03> <#turtle-syntax-bad-esc-04> <#turtle-syntax-bad-pname-01> <#turtle-syntax-bad-pname-02> <#turtle-syntax-bad-pname-03> <#turtle-syntax-bad-string-01> <#turtle-syntax-bad-string-02> <#turtle-syntax-bad-string-03> <#turtle-syntax-bad-string-04> <#turtle-syntax-bad-string-05> <#turtle-syntax-bad-string-06> <#turtle-syntax-bad-string-07> <#turtle-syntax-bad-num-01> <#turtle-syntax-bad-num-02> <#turtle-syntax-bad-num-03> <#turtle-syntax-bad-num-04> <#turtle-syntax-bad-num-05> <#turtle-eval-struct-01> <#turtle-eval-struct-02> <#turtle-subm-01> <#turtle-subm-02> <#turtle-subm-03> <#turtle-subm-04> <#turtle-subm-05> <#turtle-subm-06> <#turtle-subm-07> <#turtle-subm-08> <#turtle-subm-09> <#turtle-subm-10> <#turtle-subm-11> <#turtle-subm-12> <#turtle-subm-13> <#turtle-subm-14> <#turtle-subm-15> <#turtle-subm-16> <#turtle-subm-17> <#turtle-subm-18> <#turtle-subm-19> <#turtle-subm-20> <#turtle-subm-21> <#turtle-subm-22> <#turtle-subm-23> <#turtle-subm-24> <#turtle-subm-25> <#turtle-subm-26> <#turtle-subm-27> <#turtle-eval-bad-01> <#turtle-eval-bad-02> <#turtle-eval-bad-03> <#turtle-eval-bad-04> # tests from David Robillard # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21 <#turtle-syntax-bad-blank-label-dot-end> <#turtle-syntax-bad-ln-dash-start> <#turtle-syntax-bad-ln-escape-start> <#turtle-syntax-bad-ln-escape> <#turtle-syntax-bad-missing-ns-dot-end> <#turtle-syntax-bad-missing-ns-dot-start> <#turtle-syntax-bad-ns-dot-end> <#turtle-syntax-bad-ns-dot-start> <#turtle-syntax-bad-number-dot-in-anon> <#turtle-syntax-blank-label> <#turtle-syntax-ln-colons> <#turtle-syntax-ln-dots> <#turtle-syntax-ns-dots> ) . # atomic tests <#IRI_subject> rdf:type rdft:TestTurtleEval ; mf:name "IRI_subject" ; rdfs:comment "IRI subject" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#IRI_with_four_digit_numeric_escape> rdf:type rdft:TestTurtleEval ; mf:name "IRI_with_four_digit_numeric_escape" ; rdfs:comment "IRI with four digit numeric escape (\\u)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#IRI_with_eight_digit_numeric_escape> rdf:type rdft:TestTurtleEval ; mf:name "IRI_with_eight_digit_numeric_escape" ; rdfs:comment "IRI with eight digit numeric escape (\\U)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#IRI_with_all_punctuation> rdf:type rdft:TestTurtleEval ; mf:name "IRI_with_all_punctuation" ; rdfs:comment "IRI with all punctuation" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#bareword_a_predicate> rdf:type rdft:TestTurtleEval ; mf:name "bareword_a_predicate" ; rdfs:comment "bareword a predicate" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#old_style_prefix> rdf:type rdft:TestTurtleEval ; mf:name "old_style_prefix" ; rdfs:comment "old-style prefix" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#SPARQL_style_prefix> rdf:type rdft:TestTurtleEval ; mf:name "SPARQL_style_prefix" ; rdfs:comment "SPARQL-style prefix" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefixed_IRI_predicate> rdf:type rdft:TestTurtleEval ; mf:name "prefixed_IRI_predicate" ; rdfs:comment "prefixed IRI predicate" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefixed_IRI_object> rdf:type rdft:TestTurtleEval ; mf:name "prefixed_IRI_object" ; rdfs:comment "prefixed IRI object" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefix_only_IRI> rdf:type rdft:TestTurtleEval ; mf:name "prefix_only_IRI" ; rdfs:comment "prefix-only IRI (p:)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefix_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "prefix_with_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "prefix with PN CHARS BASE character boundaries (prefix: AZazÀÖØöø...:)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefix_with_non_leading_extras> rdf:type rdft:TestTurtleEval ; mf:name "prefix_with_non_leading_extras" ; rdfs:comment "prefix with_non_leading_extras (_:a·̀ͯ‿.⁀)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with assigned, NFC-normalized, basic-multilingual-plane PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with assigned, NFC-normalized PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localName_with_nfc_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "localName_with_nfc_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with nfc-normalize PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#default_namespace_IRI> rdf:type rdft:TestTurtleEval ; mf:name "default_namespace_IRI" ; rdfs:comment "default namespace IRI (:ln)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefix_reassigned_and_used> rdf:type rdft:TestTurtleEval ; mf:name "prefix_reassigned_and_used" ; rdfs:comment "prefix reassigned and used" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#reserved_escaped_localName> rdf:type rdft:TestTurtleEval ; mf:name "reserved_escaped_localName" ; rdfs:comment "reserved-escaped local name" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#percent_escaped_localName> rdf:type rdft:TestTurtleEval ; mf:name "percent_escaped_localName" ; rdfs:comment "percent-escaped local name" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#HYPHEN_MINUS_in_localName> rdf:type rdft:TestTurtleEval ; mf:name "HYPHEN_MINUS_in_localName" ; rdfs:comment "HYPHEN-MINUS in local name" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#underscore_in_localName> rdf:type rdft:TestTurtleEval ; mf:name "underscore_in_localName" ; rdfs:comment "underscore in local name" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localname_with_COLON> rdf:type rdft:TestTurtleEval ; mf:name "localname_with_COLON" ; rdfs:comment "localname with COLON" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localName_with_leading_underscore> rdf:type rdft:TestTurtleEval ; mf:name "localName_with_leading_underscore" ; rdfs:comment "localName with leading underscore (p:_)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localName_with_leading_digit> rdf:type rdft:TestTurtleEval ; mf:name "localName_with_leading_digit" ; rdfs:comment "localName with leading digit (p:_)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#localName_with_non_leading_extras> rdf:type rdft:TestTurtleEval ; mf:name "localName_with_non_leading_extras" ; rdfs:comment "localName with_non_leading_extras (_:a·̀ͯ‿.⁀)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#old_style_base> rdf:type rdft:TestTurtleEval ; mf:name "old_style_base" ; rdfs:comment "old-style base" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#SPARQL_style_base> rdf:type rdft:TestTurtleEval ; mf:name "SPARQL_style_base" ; rdfs:comment "SPARQL-style base" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#labeled_blank_node_subject> rdf:type rdft:TestTurtleEval ; mf:name "labeled_blank_node_subject" ; rdfs:comment "labeled blank node subject" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#labeled_blank_node_object> rdf:type rdft:TestTurtleEval ; mf:name "labeled_blank_node_object" ; rdfs:comment "labeled blank node object" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#labeled_blank_node_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "labeled_blank_node_with_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "labeled blank node with PN_CHARS_BASE character boundaries (_:AZazÀÖØöø...)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#labeled_blank_node_with_leading_underscore> rdf:type rdft:TestTurtleEval ; mf:name "labeled_blank_node_with_leading_underscore" ; rdfs:comment "labeled blank node with_leading_underscore (_:_)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#labeled_blank_node_with_leading_digit> rdf:type rdft:TestTurtleEval ; mf:name "labeled_blank_node_with_leading_digit" ; rdfs:comment "labeled blank node with_leading_digit (_:0)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#labeled_blank_node_with_non_leading_extras> rdf:type rdft:TestTurtleEval ; mf:name "labeled_blank_node_with_non_leading_extras" ; rdfs:comment "labeled blank node with_non_leading_extras (_:a·̀ͯ‿.⁀)" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#anonymous_blank_node_subject> rdf:type rdft:TestTurtleEval ; mf:name "anonymous_blank_node_subject" ; rdfs:comment "anonymous blank node subject" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#anonymous_blank_node_object> rdf:type rdft:TestTurtleEval ; mf:name "anonymous_blank_node_object" ; rdfs:comment "anonymous blank node object" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#sole_blankNodePropertyList> rdf:type rdft:TestTurtleEval ; mf:name "sole_blankNodePropertyList" ; rdfs:comment "sole blankNodePropertyList [

] ." ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#blankNodePropertyList_as_subject> rdf:type rdft:TestTurtleEval ; mf:name "blankNodePropertyList_as_subject" ; rdfs:comment "blankNodePropertyList as subject [ … ]

." ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#blankNodePropertyList_as_object> rdf:type rdft:TestTurtleEval ; mf:name "blankNodePropertyList_as_object" ; rdfs:comment "blankNodePropertyList as object

[ … ] ." ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#blankNodePropertyList_with_multiple_triples> rdf:type rdft:TestTurtleEval ; mf:name "blankNodePropertyList_with_multiple_triples" ; rdfs:comment "blankNodePropertyList with multiple triples [

; ]" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#nested_blankNodePropertyLists> rdf:type rdft:TestTurtleEval ; mf:name "nested_blankNodePropertyLists" ; rdfs:comment "nested blankNodePropertyLists [ [ ] ; ]" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#blankNodePropertyList_containing_collection> rdf:type rdft:TestTurtleEval ; mf:name "blankNodePropertyList_containing_collection" ; rdfs:comment "blankNodePropertyList containing collection [ ( … ) ]" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#collection_subject> rdf:type rdft:TestTurtleEval ; mf:name "collection_subject" ; rdfs:comment "collection subject" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#collection_object> rdf:type rdft:TestTurtleEval ; mf:name "collection_object" ; rdfs:comment "collection object" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#empty_collection> rdf:type rdft:TestTurtleEval ; mf:name "empty_collection" ; rdfs:comment "empty collection ()" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#nested_collection> rdf:type rdft:TestTurtleEval ; mf:name "nested_collection" ; rdfs:comment "nested collection (())" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#first> rdf:type rdft:TestTurtleEval ; mf:name "first" ; rdfs:comment "first, not last, non-empty nested collection" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#last> rdf:type rdft:TestTurtleEval ; mf:name "last" ; rdfs:comment "last, not first, non-empty nested collection" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL1> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL1" ; rdfs:comment "LITERAL1 'x'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL1_ascii_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL1_ascii_boundaries" ; rdfs:comment "LITERAL1_ascii_boundaries '\\x00\\x09\\x0b\\x0c\\x0e\\x26\\x28...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL1_with_UTF8_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL1_with_UTF8_boundaries" ; rdfs:comment "LITERAL1_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL1_all_controls> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL1_all_controls" ; rdfs:comment "LITERAL1_all_controls '\\x00\\x01\\x02\\x03\\x04...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL1_all_punctuation> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL1_all_punctuation" ; rdfs:comment "LITERAL1_all_punctuation '!\"#$%&()...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG1> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG1" ; rdfs:comment "LITERAL_LONG1 '''x'''" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG1_ascii_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG1_ascii_boundaries" ; rdfs:comment "LITERAL_LONG1_ascii_boundaries '\\x00\\x26\\x28...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG1_with_UTF8_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG1_with_UTF8_boundaries" ; rdfs:comment "LITERAL_LONG1_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG1_with_1_squote> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG1_with_1_squote" ; rdfs:comment "LITERAL_LONG1 with 1 squote '''a'b'''" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG1_with_2_squotes> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG1_with_2_squotes" ; rdfs:comment "LITERAL_LONG1 with 2 squotes '''a''b'''" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL2> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL2" ; rdfs:comment "LITERAL2 \"x\"" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL2_ascii_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL2_ascii_boundaries" ; rdfs:comment "LITERAL2_ascii_boundaries '\\x00\\x09\\x0b\\x0c\\x0e\\x21\\x23...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL2_with_UTF8_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL2_with_UTF8_boundaries" ; rdfs:comment "LITERAL2_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG2> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG2" ; rdfs:comment "LITERAL_LONG2 \"\"\"x\"\"\"" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG2_ascii_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG2_ascii_boundaries" ; rdfs:comment "LITERAL_LONG2_ascii_boundaries '\\x00\\x21\\x23...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG2_with_UTF8_boundaries> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG2_with_UTF8_boundaries" ; rdfs:comment "LITERAL_LONG2_with_UTF8_boundaries '\\x80\\x7ff\\x800\\xfff...'" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG2_with_1_squote> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG2_with_1_squote" ; rdfs:comment "LITERAL_LONG2 with 1 squote \"\"\"a\"b\"\"\"" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#LITERAL_LONG2_with_2_squotes> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG2_with_2_squotes" ; rdfs:comment "LITERAL_LONG2 with 2 squotes \"\"\"a\"\"b\"\"\"" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_CHARACTER_TABULATION> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_CHARACTER_TABULATION" ; rdfs:comment "literal with CHARACTER TABULATION" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_BACKSPACE> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_BACKSPACE" ; rdfs:comment "literal with BACKSPACE" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_LINE_FEED> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_LINE_FEED" ; rdfs:comment "literal with LINE FEED" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_CARRIAGE_RETURN> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_CARRIAGE_RETURN" ; rdfs:comment "literal with CARRIAGE RETURN" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_FORM_FEED> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_FORM_FEED" ; rdfs:comment "literal with FORM FEED" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_REVERSE_SOLIDUS> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_REVERSE_SOLIDUS" ; rdfs:comment "literal with REVERSE SOLIDUS" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_escaped_CHARACTER_TABULATION> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_escaped_CHARACTER_TABULATION" ; rdfs:comment "literal with escaped CHARACTER TABULATION" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_escaped_BACKSPACE> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_escaped_BACKSPACE" ; rdfs:comment "literal with escaped BACKSPACE" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_escaped_LINE_FEED> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_escaped_LINE_FEED" ; rdfs:comment "literal with escaped LINE FEED" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_escaped_CARRIAGE_RETURN> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_escaped_CARRIAGE_RETURN" ; rdfs:comment "literal with escaped CARRIAGE RETURN" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_escaped_FORM_FEED> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_escaped_FORM_FEED" ; rdfs:comment "literal with escaped FORM FEED" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_numeric_escape4> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_numeric_escape4" ; rdfs:comment "literal with numeric escape4 \\u" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_with_numeric_escape8> rdf:type rdft:TestTurtleEval ; mf:name "literal_with_numeric_escape8" ; rdfs:comment "literal with numeric escape8 \\U" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#IRIREF_datatype> rdf:type rdft:TestTurtleEval ; mf:name "IRIREF_datatype" ; rdfs:comment "IRIREF datatype \"\"^^" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#prefixed_name_datatype> rdf:type rdft:TestTurtleEval ; mf:name "prefixed_name_datatype" ; rdfs:comment "prefixed name datatype \"\"^^p:t" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#bareword_integer> rdf:type rdft:TestTurtleEval ; mf:name "bareword_integer" ; rdfs:comment "bareword integer" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#bareword_decimal> rdf:type rdft:TestTurtleEval ; mf:name "bareword_decimal" ; rdfs:comment "bareword decimal" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#bareword_double> rdf:type rdft:TestTurtleEval ; mf:name "bareword_double" ; rdfs:comment "bareword double" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#double_lower_case_e> rdf:type rdft:TestTurtleEval ; mf:name "double_lower_case_e" ; rdfs:comment "double lower case e" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#negative_numeric> rdf:type rdft:TestTurtleEval ; mf:name "negative_numeric" ; rdfs:comment "negative numeric" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#positive_numeric> rdf:type rdft:TestTurtleEval ; mf:name "positive_numeric" ; rdfs:comment "positive numeric" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#numeric_with_leading_0> rdf:type rdft:TestTurtleEval ; mf:name "numeric_with_leading_0" ; rdfs:comment "numeric with leading 0" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_true> rdf:type rdft:TestTurtleEval ; mf:name "literal_true" ; rdfs:comment "literal true" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#literal_false> rdf:type rdft:TestTurtleEval ; mf:name "literal_false" ; rdfs:comment "literal false" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#langtagged_non_LONG> rdf:type rdft:TestTurtleEval ; mf:name "langtagged_non_LONG" ; rdfs:comment "langtagged non-LONG \"x\"@en" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#langtagged_LONG> rdf:type rdft:TestTurtleEval ; mf:name "langtagged_LONG" ; rdfs:comment "langtagged LONG \"\"\"x\"\"\"@en" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#lantag_with_subtag> rdf:type rdft:TestTurtleEval ; mf:name "lantag_with_subtag" ; rdfs:comment "lantag with subtag \"x\"@en-us" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#objectList_with_two_objects> rdf:type rdft:TestTurtleEval ; mf:name "objectList_with_two_objects" ; rdfs:comment "objectList with two objects … ," ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#predicateObjectList_with_two_objectLists> rdf:type rdft:TestTurtleEval ; mf:name "predicateObjectList_with_two_objectLists" ; rdfs:comment "predicateObjectList with two objectLists … ," ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#repeated_semis_at_end> rdf:type rdft:TestTurtleEval ; mf:name "repeated_semis_at_end" ; rdfs:comment "repeated semis at end

;; ." ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#repeated_semis_not_at_end> rdf:type rdft:TestTurtleEval ; mf:name "repeated_semis_not_at_end" ; rdfs:comment "repeated semis not at end

;;." ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . # original tests-ttl <#turtle-syntax-file-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-file-01" ; rdfs:comment "Empty file" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-file-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-file-02" ; rdfs:comment "Only comment" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-file-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-file-03" ; rdfs:comment "One comment, one empty line" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-uri-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-uri-01" ; rdfs:comment "Only IRIs" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-uri-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-uri-02" ; rdfs:comment "IRIs with Unicode escape" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-uri-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-uri-03" ; rdfs:comment "IRIs with long Unicode escape" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-uri-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-uri-04" ; rdfs:comment "Legal IRIs" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-base-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-base-01" ; rdfs:comment "@base" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-base-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-base-02" ; rdfs:comment "BASE" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-base-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-base-03" ; rdfs:comment "@base with relative IRIs" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-base-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-base-04" ; rdfs:comment "base with relative IRIs" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-01" ; rdfs:comment "@prefix" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-02" ; rdfs:comment "PreFIX" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-03" ; rdfs:comment "Empty PREFIX" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-04" ; rdfs:comment "Empty @prefix with % escape" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-05> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-05" ; rdfs:comment "@prefix with no suffix" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-06> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-06" ; rdfs:comment "colon is a legal pname character" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-07> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-07" ; rdfs:comment "dash is a legal pname character" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-08> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-08" ; rdfs:comment "underscore is a legal pname character" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-prefix-09> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-prefix-09" ; rdfs:comment "percents in pnames" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-01" ; rdfs:comment "string literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-02" ; rdfs:comment "langString literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-03" ; rdfs:comment "langString literal with region" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-04" ; rdfs:comment "squote string literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-05> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-05" ; rdfs:comment "squote langString literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-06> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-06" ; rdfs:comment "squote langString literal with region" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-07> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-07" ; rdfs:comment "long string literal with embedded single- and double-quotes" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-08> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-08" ; rdfs:comment "long string literal with embedded newline" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-09> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-09" ; rdfs:comment "squote long string literal with embedded single- and double-quotes" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-10> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-10" ; rdfs:comment "long langString literal with embedded newline" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-string-11> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-string-11" ; rdfs:comment "squote long langString literal with embedded newline" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-str-esc-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-str-esc-01" ; rdfs:comment "string literal with escaped newline" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-str-esc-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-str-esc-02" ; rdfs:comment "string literal with Unicode escape" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-str-esc-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-str-esc-03" ; rdfs:comment "string literal with long Unicode escape" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-pname-esc-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-pname-esc-01" ; rdfs:comment "pname with back-slash escapes" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-pname-esc-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-pname-esc-02" ; rdfs:comment "pname with back-slash escapes (2)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-pname-esc-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-pname-esc-03" ; rdfs:comment "pname with back-slash escapes (3)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-01" ; rdfs:comment "bnode subject" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-02" ; rdfs:comment "bnode object" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-03" ; rdfs:comment "bnode property list object" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-04" ; rdfs:comment "bnode property list object (2)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-05> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-05" ; rdfs:comment "bnode property list subject" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-06> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-06" ; rdfs:comment "labeled bnode subject" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-07> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-07" ; rdfs:comment "labeled bnode subject and object" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-08> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-08" ; rdfs:comment "bare bnode property list" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-09> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-09" ; rdfs:comment "bnode property list" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bnode-10> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-bnode-10" ; rdfs:comment "mixed bnode property list and triple" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-01" ; rdfs:comment "integer literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-02" ; rdfs:comment "negative integer literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-03" ; rdfs:comment "positive integer literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-04" ; rdfs:comment "decimal literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-05> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-05" ; rdfs:comment "decimal literal (no leading digits)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-06> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-06" ; rdfs:comment "negative decimal literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-07> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-07" ; rdfs:comment "positive decimal literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-08> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-08" ; rdfs:comment "integer literal with decimal lexical confusion" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-09> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-09" ; rdfs:comment "double literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-10> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-10" ; rdfs:comment "negative double literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-number-11> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-number-11" ; rdfs:comment "double literal no fraction" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-datatypes-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-datatypes-01" ; rdfs:comment "xsd:byte literal" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-datatypes-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-datatypes-02" ; rdfs:comment "integer as xsd:string" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-kw-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-kw-01" ; rdfs:comment "boolean literal (true)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-kw-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-kw-02" ; rdfs:comment "boolean literal (false)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-kw-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-kw-03" ; rdfs:comment "'a' as keyword" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-struct-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-struct-01" ; rdfs:comment "object list" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-struct-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-struct-02" ; rdfs:comment "predicate list with object list" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-struct-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-struct-03" ; rdfs:comment "predicate list with object list and dangling ';'" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-struct-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-struct-04" ; rdfs:comment "predicate list with multiple ;;" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-struct-05> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-struct-05" ; rdfs:comment "predicate list with multiple ;;" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-lists-01> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-lists-01" ; rdfs:comment "empty list" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-lists-02> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-lists-02" ; rdfs:comment "mixed list" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-lists-03> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-lists-03" ; rdfs:comment "isomorphic list as subject and object" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-lists-04> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-lists-04" ; rdfs:comment "lists of lists" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-lists-05> rdf:type rdft:TestTurtlePositiveSyntax ; mf:name "turtle-syntax-lists-05" ; rdfs:comment "mixed lists with embedded lists" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-uri-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-uri-01" ; rdfs:comment "Bad IRI : space (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-uri-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-uri-02" ; rdfs:comment "Bad IRI : bad escape (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-uri-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-uri-03" ; rdfs:comment "Bad IRI : bad long escape (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-uri-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-uri-04" ; rdfs:comment "Bad IRI : character escapes not allowed (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-uri-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-uri-05" ; rdfs:comment "Bad IRI : character escapes not allowed (2) (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-prefix-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-prefix-01" ; rdfs:comment "No prefix (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-prefix-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-prefix-02" ; rdfs:comment "No prefix (2) (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-prefix-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-prefix-03" ; rdfs:comment "@prefix without URI (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-prefix-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-prefix-04" ; rdfs:comment "@prefix without prefix name (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-prefix-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-prefix-05" ; rdfs:comment "@prefix without ':' (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-base-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-base-01" ; rdfs:comment "@base without URI (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-base-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-base-02" ; rdfs:comment "@base in wrong case (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-base-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-base-03" ; rdfs:comment "BASE without URI (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-01" ; rdfs:comment "Turtle is not TriG (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-02" ; rdfs:comment "Turtle is not N3 (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-03" ; rdfs:comment "Turtle is not NQuads (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-04" ; rdfs:comment "Turtle does not allow literals-as-subjects (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-05" ; rdfs:comment "Turtle does not allow literals-as-predicates (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-06> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-06" ; rdfs:comment "Turtle does not allow bnodes-as-predicates (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-07> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-07" ; rdfs:comment "Turtle does not allow labeled bnodes-as-predicates (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-kw-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-kw-01" ; rdfs:comment "'A' is not a keyword (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-kw-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-kw-02" ; rdfs:comment "'a' cannot be used as subject (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-kw-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-kw-03" ; rdfs:comment "'a' cannot be used as object (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-kw-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-kw-04" ; rdfs:comment "'true' cannot be used as subject (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-kw-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-kw-05" ; rdfs:comment "'true' cannot be used as object (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-01" ; rdfs:comment "{} fomulae not in Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-02" ; rdfs:comment "= is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-03" ; rdfs:comment "N3 paths not in Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-04" ; rdfs:comment "N3 paths not in Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-05" ; rdfs:comment "N3 is...of not in Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-06> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-06" ; rdfs:comment "N3 paths not in Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-07> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-07" ; rdfs:comment "@keywords is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-08> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-08" ; rdfs:comment "@keywords is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-09> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-09" ; rdfs:comment "=> is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-10> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-10" ; rdfs:comment "<= is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-11> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-11" ; rdfs:comment "@forSome is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-12> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-12" ; rdfs:comment "@forAll is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-n3-extras-13> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-n3-extras-13" ; rdfs:comment "@keywords is not Turtle (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-08> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-08" ; rdfs:comment "missing '.' (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-09> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-09" ; rdfs:comment "extra '.' (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-10> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-10" ; rdfs:comment "extra '.' (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-11> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-11" ; rdfs:comment "trailing ';' no '.' (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-12> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-12" ; rdfs:comment "subject, predicate, no object (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-13> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-13" ; rdfs:comment "subject, predicate, no object (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-14> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-14" ; rdfs:comment "literal as subject (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-15> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-15" ; rdfs:comment "literal as predicate (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-16> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-16" ; rdfs:comment "bnode as predicate (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-struct-17> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-struct-17" ; rdfs:comment "labeled bnode as predicate (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-lang-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-lang-01" ; rdfs:comment "langString with bad lang (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-esc-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-esc-01" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-esc-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-esc-02" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-esc-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-esc-03" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-esc-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-esc-04" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-pname-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-pname-01" ; rdfs:comment "'~' must be escaped in pname (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-pname-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-pname-02" ; rdfs:comment "Bad %-sequence in pname (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-pname-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-pname-03" ; rdfs:comment "Bad unicode escape in pname (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-01" ; rdfs:comment "mismatching string literal open/close (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-02" ; rdfs:comment "mismatching string literal open/close (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-03" ; rdfs:comment "mismatching string literal long/short (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-04" ; rdfs:comment "mismatching long string literal open/close (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-05" ; rdfs:comment "Long literal with missing end (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-06> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-06" ; rdfs:comment "Long literal with extra quote (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-string-07> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-string-07" ; rdfs:comment "Long literal with extra squote (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-num-01> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-num-01" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-num-02> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-num-02" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-num-03> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-num-03" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-num-04> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-num-04" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-syntax-bad-num-05> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-num-05" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-eval-struct-01> rdf:type rdft:TestTurtleEval ; mf:name "turtle-eval-struct-01" ; rdfs:comment "triple with IRIs" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-eval-struct-02> rdf:type rdft:TestTurtleEval ; mf:name "turtle-eval-struct-02" ; rdfs:comment "triple with IRIs and embedded whitespace" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-01> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-01" ; rdfs:comment "Blank subject" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-02> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-02" ; rdfs:comment "@prefix and qnames" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-03> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-03" ; rdfs:comment ", operator" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-04> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-04" ; rdfs:comment "; operator" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-05> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-05" ; rdfs:comment "empty [] as subject and object" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-06> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-06" ; rdfs:comment "non-empty [] as subject and object" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-07> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-07" ; rdfs:comment "'a' as predicate" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-08> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-08" ; rdfs:comment "simple collection" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-09> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-09" ; rdfs:comment "empty collection" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-10> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-10" ; rdfs:comment "integer datatyped literal" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-11> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-11" ; rdfs:comment "decimal integer canonicalization" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-12> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-12" ; rdfs:comment "- and _ in names and qnames" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-13> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-13" ; rdfs:comment "tests for rdf:_ and other qnames starting with _" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-14> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-14" ; rdfs:comment "bare : allowed" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-15> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-15" ; rdfs:comment "simple long literal" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-16> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-16" ; rdfs:comment "long literals with escapes" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-17> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-17" ; rdfs:comment "floating point number" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-18> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-18" ; rdfs:comment "empty literals, normal and long variant" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-19> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-19" ; rdfs:comment "positive integer, decimal and doubles" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-20> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-20" ; rdfs:comment "negative integer, decimal and doubles" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-21> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-21" ; rdfs:comment "long literal ending in double quote" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-22> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-22" ; rdfs:comment "boolean literals" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-23> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-23" ; rdfs:comment "comments" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-24> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-24" ; rdfs:comment "no final mewline" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-25> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-25" ; rdfs:comment "repeating a @prefix changes pname definition" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-26> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-26" ; rdfs:comment "Variations on decimal canonicalization" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-subm-27> rdf:type rdft:TestTurtleEval ; mf:name "turtle-subm-27" ; rdfs:comment "Repeating @base changes base for relative IRI lookup" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-eval-bad-01> rdf:type rdft:TestTurtleNegativeEval ; mf:name "turtle-eval-bad-01" ; rdfs:comment "Bad IRI : good escape, bad charcater (negative evaluation test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-eval-bad-02> rdf:type rdft:TestTurtleNegativeEval ; mf:name "turtle-eval-bad-02" ; rdfs:comment "Bad IRI : hex 3C is < (negative evaluation test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-eval-bad-03> rdf:type rdft:TestTurtleNegativeEval ; mf:name "turtle-eval-bad-03" ; rdfs:comment "Bad IRI : hex 3E is (negative evaluation test)" ; rdft:approval rdft:Approved ; mf:action ; . <#turtle-eval-bad-04> rdf:type rdft:TestTurtleNegativeEval ; mf:name "turtle-eval-bad-04" ; rdfs:comment "Bad IRI : {abc} (negative evaluation test)" ; rdft:approval rdft:Approved ; mf:action ; . # tests requested by Jeremy Carroll # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c35 <#comment_following_localName> rdf:type rdft:TestTurtleEval ; mf:name "comment_following_localName" ; rdfs:comment "comment following localName" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#number_sign_following_localName> rdf:type rdft:TestTurtleEval ; mf:name "number_sign_following_localName" ; rdfs:comment "number sign following localName" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#comment_following_PNAME_NS> rdf:type rdft:TestTurtleEval ; mf:name "comment_following_PNAME_NS" ; rdfs:comment "comment following PNAME_NS" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#number_sign_following_PNAME_NS> rdf:type rdft:TestTurtleEval ; mf:name "number_sign_following_PNAME_NS" ; rdfs:comment "number sign following PNAME_NS" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . # tests from Dave Beckett # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c28 <#LITERAL_LONG2_with_REVERSE_SOLIDUS> rdf:type rdft:TestTurtleEval ; mf:name "LITERAL_LONG2_with_REVERSE_SOLIDUS" ; rdfs:comment "REVERSE SOLIDUS at end of LITERAL_LONG2" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#turtle-syntax-bad-LITERAL2_with_langtag_and_datatype> rdf:type rdft:TestTurtleNegativeSyntax ; mf:name "turtle-syntax-bad-num-05" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Approved ; mf:action ; . <#two_LITERAL_LONG2s> rdf:type rdft:TestTurtleEval ; mf:name "two_LITERAL_LONG2s" ; rdfs:comment "two LITERAL_LONG2s testing quote delimiter overrun" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . <#langtagged_LONG_with_subtag> rdf:type rdft:TestTurtleEval ; mf:name "langtagged_LONG_with_subtag" ; rdfs:comment "langtagged LONG with subtag \"\"\"Cheers\"\"\"@en-UK" ; rdft:approval rdft:Approved ; mf:action ; mf:result ; . # tests from David Robillard # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21 <#turtle-syntax-bad-blank-label-dot-end> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Blank node label must not end in dot" ; mf:name "turtle-syntax-bad-blank-label-dot-end" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-number-dot-in-anon> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Dot delimeter may not appear in anonymous nodes" ; mf:name "turtle-syntax-bad-number-dot-in-anon" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-ln-dash-start> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Local name must not begin with dash" ; mf:name "turtle-syntax-bad-ln-dash-start" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-ln-escape> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Bad hex escape in local name" ; mf:name "turtle-syntax-bad-ln-escape" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-ln-escape-start> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Bad hex escape at start of local name" ; mf:name "turtle-syntax-bad-ln-escape-start" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-ns-dot-end> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Prefix must not end in dot" ; mf:name "turtle-syntax-bad-ns-dot-end" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-ns-dot-start> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Prefix must not start with dot" ; mf:name "turtle-syntax-bad-ns-dot-start" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-missing-ns-dot-end> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Prefix must not end in dot (error in triple, not prefix directive like turtle-syntax-bad-ns-dot-end)" ; mf:name "turtle-syntax-bad-missing-ns-dot-end" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-bad-missing-ns-dot-start> rdf:type rdft:TestTurtleNegativeSyntax ; rdfs:comment "Prefix must not start with dot (error in triple, not prefix directive like turtle-syntax-bad-ns-dot-end)" ; mf:name "turtle-syntax-bad-missing-ns-dot-start" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-ln-dots> rdf:type rdft:TestTurtlePositiveSyntax ; rdfs:comment "Dots in pname local names" ; mf:name "turtle-syntax-ln-dots" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-ln-colons> rdf:type rdft:TestTurtlePositiveSyntax ; rdfs:comment "Colons in pname local names" ; mf:name "turtle-syntax-ln-colons" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-ns-dots> rdf:type rdft:TestTurtlePositiveSyntax ; rdfs:comment "Dots in namespace names" ; mf:name "turtle-syntax-ns-dots" ; rdft:approval rdft:Approved ; mf:action . <#turtle-syntax-blank-label> rdf:type rdft:TestTurtlePositiveSyntax ; rdfs:comment "Characters allowed in blank node labels" ; mf:name "turtle-syntax-blank-label" ; rdft:approval rdft:Approved ; mf:action . RDF-Trine-1.007/t/data/turtle-2013/negative_numeric.nt000644 000765 000024 00000000135 12164234713 022251 0ustar00gregstaff000000 000000 "-1"^^ . RDF-Trine-1.007/t/data/turtle-2013/negative_numeric.ttl000644 000765 000024 00000000057 12164234713 022436 0ustar00gregstaff000000 000000 -1 . RDF-Trine-1.007/t/data/turtle-2013/nested_blankNodePropertyLists.nt000644 000765 000024 00000000206 12164234713 024747 0ustar00gregstaff000000 000000 _:b1 _:b2 . _:b2 . _:b1 . RDF-Trine-1.007/t/data/turtle-2013/nested_blankNodePropertyLists.ttl000644 000765 000024 00000000167 12164234713 025137 0ustar00gregstaff000000 000000 [ [ ] ; ]. RDF-Trine-1.007/t/data/turtle-2013/nested_collection.nt000644 000765 000024 00000000722 12164234713 022424 0ustar00gregstaff000000 000000 _:outerEl1 . _:outerEl1 _:innerEl1 . _:innerEl1 "1"^^ . _:innerEl1 . _:outerEl1 . RDF-Trine-1.007/t/data/turtle-2013/nested_collection.ttl000644 000765 000024 00000000062 12164234713 022603 0ustar00gregstaff000000 000000 ((1)) . RDF-Trine-1.007/t/data/turtle-2013/number_sign_following_localName.nt000644 000765 000024 00000000114 12164234713 025265 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/number_sign_following_localName.ttl000644 000765 000024 00000000135 12164234713 025452 0ustar00gregstaff000000 000000 @prefix p: . p:o\#numbersign . RDF-Trine-1.007/t/data/turtle-2013/number_sign_following_PNAME_NS.nt000644 000765 000024 00000000113 12164234713 024631 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/number_sign_following_PNAME_NS.ttl000644 000765 000024 00000000133 12164234713 025015 0ustar00gregstaff000000 000000 @prefix p: . p:\#numbersign . RDF-Trine-1.007/t/data/turtle-2013/numeric_with_leading_0.nt000644 000765 000024 00000000135 12164234713 023324 0ustar00gregstaff000000 000000 "01"^^ . RDF-Trine-1.007/t/data/turtle-2013/numeric_with_leading_0.ttl000644 000765 000024 00000000057 12164234713 023511 0ustar00gregstaff000000 000000 01 . RDF-Trine-1.007/t/data/turtle-2013/objectList_with_two_objects.nt000644 000765 000024 00000000204 12164234713 024461 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/turtle-2013/objectList_with_two_objects.ttl000644 000765 000024 00000000131 12164234713 024642 0ustar00gregstaff000000 000000 , . RDF-Trine-1.007/t/data/turtle-2013/old_style_base.ttl000644 000765 000024 00000000113 12164234713 022073 0ustar00gregstaff000000 000000 @base . . RDF-Trine-1.007/t/data/turtle-2013/old_style_prefix.ttl000644 000765 000024 00000000120 12164234713 022454 0ustar00gregstaff000000 000000 @prefix p: . p:s . RDF-Trine-1.007/t/data/turtle-2013/percent_escaped_localName.nt000644 000765 000024 00000000103 12164234713 024017 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/percent_escaped_localName.ttl000644 000765 000024 00000000122 12164234713 024202 0ustar00gregstaff000000 000000 @prefix p: . p:%25 . RDF-Trine-1.007/t/data/turtle-2013/positive_numeric.nt000644 000765 000024 00000000135 12164234713 022311 0ustar00gregstaff000000 000000 "+1"^^ . RDF-Trine-1.007/t/data/turtle-2013/positive_numeric.ttl000644 000765 000024 00000000057 12164234713 022476 0ustar00gregstaff000000 000000 +1 . RDF-Trine-1.007/t/data/turtle-2013/predicateObjectList_with_two_objectLists.nt000644 000765 000024 00000000206 12164234713 027140 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/turtle-2013/predicateObjectList_with_two_objectLists.ttl000644 000765 000024 00000000160 12164234713 027321 0ustar00gregstaff000000 000000 ; . RDF-Trine-1.007/t/data/turtle-2013/prefix_only_IRI.ttl000644 000765 000024 00000000120 12164234713 022142 0ustar00gregstaff000000 000000 @prefix p: . p: . RDF-Trine-1.007/t/data/turtle-2013/prefix_reassigned_and_used.nt000644 000765 000024 00000000101 12164234713 024261 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/prefix_reassigned_and_used.ttl000644 000765 000024 00000000160 12164234713 024450 0ustar00gregstaff000000 000000 @prefix p: . @prefix p: . p:s . RDF-Trine-1.007/t/data/turtle-2013/prefix_with_non_leading_extras.ttl000644 000765 000024 00000000152 12164234713 025361 0ustar00gregstaff000000 000000 @prefix a·̀ͯ‿.⁀: . a·̀ͯ‿.⁀:s . RDF-Trine-1.007/t/data/turtle-2013/prefix_with_PN_CHARS_BASE_character_boundaries.ttl000644 000765 000024 00000000331 12164234713 027773 0ustar00gregstaff000000 000000 @prefix AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽: . AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿽:o . RDF-Trine-1.007/t/data/turtle-2013/prefixed_IRI_object.ttl000644 000765 000024 00000000120 12164234713 022740 0ustar00gregstaff000000 000000 @prefix p: . p:o . RDF-Trine-1.007/t/data/turtle-2013/prefixed_IRI_predicate.ttl000644 000765 000024 00000000120 12164234713 023432 0ustar00gregstaff000000 000000 @prefix p: . p:p . RDF-Trine-1.007/t/data/turtle-2013/prefixed_name_datatype.ttl000644 000765 000024 00000000160 12164234713 023606 0ustar00gregstaff000000 000000 @prefix xsd: . "1"^^xsd:integer . RDF-Trine-1.007/t/data/turtle-2013/README000644 000765 000024 00000004422 12164234713 017245 0ustar00gregstaff000000 000000 This README is for the W3C RDF Working Group's Turtle test suite. This test suite contains three kinds of tests: Evaluation (rdft:TestTurtleEval) - a pair of an input turtle file and reference ntriples file. Positive syntax (rdft:TestTurtlePositiveSyntax) - an input turtle file with no syntax errors. Negative syntax (rdft:TestTurtleNegativeSyntax) - an input turtle file with at least one syntax error. The manifest.ttl file in this directory lists all of the tests in the RDF WG's Turtle test suite. Each test is one of the above tests. All tests have a name (mf:name) and an input (mf:action). The Evaluation tests have an expected result (mf:result). • An implementation passes an Evaluation test if it parses the input into a graph, parses the expecte result into another graph, and those two graphs are isomorphic (see ). • An implementation passes a positive syntax test if it parses the input. • An implementation passes a negative syntax test if it fails to parse the input. RELATIVE IRI RESOLUTION: The home of the test suite is . Per RFC 3986 section 5.1.3, the base IRI for parsing each file is the retrieval IRI for that file. For example, the tests turtle-subm-01 and turtle-subm-27 require relative IRI resolution against a base of and respectively. CHARACTER ENCODING: The Turtle language uses UTF-8 encoding. The following tests include non-ascii characters: localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries * localName_with_nfc_PN_CHARS_BASE_character_boundaries * labeled_blank_node_with_PN_CHARS_BASE_character_boundaries * LITERAL1_with_UTF8_boundaries * LITERAL_LONG1_with_UTF8_boundaries * LITERAL2_with_UTF8_boundaries * LITERAL_LONG2_with_UTF8_boundaries * Those marked with a * include characters with codepoints greater than U+FFFD and are thus expressed as a pair of surrogate characters when represented in UCS2. See http://www.w3.org/2011/rdf-wg/wiki/Turtle_Test_Suite for more details. Eric Prud'hommeaux - 11 June 2013. RDF-Trine-1.007/t/data/turtle-2013/repeated_semis_at_end.ttl000644 000765 000024 00000000161 12164234713 023411 0ustar00gregstaff000000 000000 ;; . RDF-Trine-1.007/t/data/turtle-2013/repeated_semis_not_at_end.nt000644 000765 000024 00000000103 12164234713 024103 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/repeated_semis_not_at_end.ttl000644 000765 000024 00000000105 12164234713 024267 0ustar00gregstaff000000 000000 ;; . RDF-Trine-1.007/t/data/turtle-2013/reserved_escaped_localName.nt000644 000765 000024 00000000126 12164234713 024203 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/reserved_escaped_localName.ttl000644 000765 000024 00000000171 12164234713 024365 0ustar00gregstaff000000 000000 @prefix p: . p:\_\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\%00 . RDF-Trine-1.007/t/data/turtle-2013/sole_blankNodePropertyList.ttl000644 000765 000024 00000000060 12164234713 024424 0ustar00gregstaff000000 000000 [ ] . RDF-Trine-1.007/t/data/turtle-2013/SPARQL_style_base.ttl000644 000765 000024 00000000111 12164234713 022315 0ustar00gregstaff000000 000000 BASE . RDF-Trine-1.007/t/data/turtle-2013/SPARQL_style_prefix.ttl000644 000765 000024 00000000116 12164234713 022705 0ustar00gregstaff000000 000000 PREFIX p: p:s . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-bad-01.ttl000644 000765 000024 00000000243 12164234713 022315 0ustar00gregstaff000000 000000 # Bad IRI : good escape, bad charcater . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-bad-02.ttl000644 000765 000024 00000000224 12164234713 022315 0ustar00gregstaff000000 000000 # Bad IRI : hex 3C is < . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-bad-03.ttl000644 000765 000024 00000000224 12164234713 022316 0ustar00gregstaff000000 000000 # Bad IRI : hex 3E is > . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-bad-04.ttl000644 000765 000024 00000000205 12164234713 022316 0ustar00gregstaff000000 000000 # Bad IRI . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-struct-01.nt000644 000765 000024 00000000167 12164234713 022736 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-struct-01.ttl000644 000765 000024 00000000167 12164234713 023120 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-struct-02.nt000644 000765 000024 00000000362 12164234713 022734 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/turtle-2013/turtle-eval-struct-02.ttl000644 000765 000024 00000000341 12164234713 023113 0ustar00gregstaff000000 000000 ; ; . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-01.nt000644 000765 000024 00000000177 12164234713 021434 0ustar00gregstaff000000 000000 _:genid1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-01.ttl000644 000765 000024 00000000033 12164234713 021605 0ustar00gregstaff000000 000000 @prefix : <#> . [] :x :y . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-02.nt000644 000765 000024 00000000413 12164234713 021426 0ustar00gregstaff000000 000000 . . . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-02.ttl000644 000765 000024 00000000273 12164234713 021614 0ustar00gregstaff000000 000000 # Test @prefix and qnames @prefix : . @prefix a: . @prefix b: . :a :b :c . a:a a:b a:c . :a a:a b:a . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-03.nt000644 000765 000024 00000000402 12164234713 021425 0ustar00gregstaff000000 000000 . . . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-03.ttl000644 000765 000024 00000000130 12164234713 021605 0ustar00gregstaff000000 000000 # Test , operator @prefix : . :a :b :c, :d, :e . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-04.nt000644 000765 000024 00000000402 12164234713 021426 0ustar00gregstaff000000 000000 . . . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-04.ttl000644 000765 000024 00000000132 12164234713 021610 0ustar00gregstaff000000 000000 # Test ; operator @prefix : . :a :b :c ; :d :e ; :f :g . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-05.nt000644 000765 000024 00000000206 12164234713 021431 0ustar00gregstaff000000 000000 _:genid1 . _:genid2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-05.ttl000644 000765 000024 00000000160 12164234713 021612 0ustar00gregstaff000000 000000 # Test empty [] operator; not allowed as predicate @prefix : . [] :a :b . :c :d [] . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-06.nt000644 000765 000024 00000000414 12164234713 021433 0ustar00gregstaff000000 000000 _:genid1 . _:genid1 . _:genid2 . _:genid2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-06.ttl000644 000765 000024 00000000202 12164234713 021610 0ustar00gregstaff000000 000000 # Test non empty [] operator; not allowed as predicate @prefix : . [ :a :b ] :c :d . :e :f [ :g :h ] . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-07.nt000644 000765 000024 00000000154 12164234713 021435 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-07.ttl000644 000765 000024 00000000123 12164234713 021613 0ustar00gregstaff000000 000000 # 'a' only allowed as a predicate @prefix : . :a a :b . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-08.nt000644 000765 000024 00000000616 12164234713 021441 0ustar00gregstaff000000 000000 _:genid1 "banana" . _:genid1 . _:genid2 "apple" . _:genid2 _:genid1 . _:genid2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-08.ttl000644 000765 000024 00000000112 12164234713 021612 0ustar00gregstaff000000 000000 @prefix : . :a :b ( "apple" "banana" ) . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-09.nt000644 000765 000024 00000000165 12164234713 021441 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-09.ttl000644 000765 000024 00000000071 12164234713 021617 0ustar00gregstaff000000 000000 @prefix : . :a :b ( ) . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-10.nt000644 000765 000024 00000000604 12164234713 021427 0ustar00gregstaff000000 000000 _:hasParent . _:genid1 . _:genid1 _:hasParent . _:genid1 "2"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-10.ttl000644 000765 000024 00000000424 12164234713 021611 0ustar00gregstaff000000 000000 # Test integer datatyped literals using an OWL cardinality constraint @prefix owl: . # based on examples in the OWL Reference _:hasParent a owl:ObjectProperty . [] a owl:Restriction ; owl:onProperty _:hasParent ; owl:maxCardinality 2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-11.nt000644 000765 000024 00000001015 12164234713 021425 0ustar00gregstaff000000 000000 "000000"^^ . "0"^^ . "000001"^^ . "2"^^ . "4"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-11.ttl000644 000765 000024 00000000447 12164234713 021617 0ustar00gregstaff000000 000000 000000 . 0 . 000001 . 2 . 4 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-12.nt000644 000765 000024 00000000440 12164234713 021427 0ustar00gregstaff000000 000000 "a" . "b" . "c" . "d" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-12.ttl000644 000765 000024 00000000513 12164234713 021612 0ustar00gregstaff000000 000000 # Tests for - and _ in names, qnames @prefix ex1: . @prefix ex-2: . @prefix ex3_: . @prefix ex4-: . ex1:foo-bar ex1:foo_bar "a" . ex-2:foo-bar ex-2:foo_bar "b" . ex3_:foo-bar ex3_:foo_bar "c" . ex4-:foo-bar ex4-:foo_bar "d" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-13.nt000644 000765 000024 00000000456 12164234713 021437 0ustar00gregstaff000000 000000 "1" . "2" . "def" . "678" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-13.ttl000644 000765 000024 00000000440 12164234713 021612 0ustar00gregstaff000000 000000 # Tests for rdf:_ and other qnames starting with _ @prefix rdf: . @prefix ex: . @prefix : . ex:foo rdf:_1 "1" . ex:foo rdf:_2 "2" . ex:foo :_abc "def" . ex:foo :_345 "678" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-14.nt000644 000765 000024 00000000172 12164234713 021433 0ustar00gregstaff000000 000000 _:genid1 _:genid2 . . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-14.ttl000644 000765 000024 00000000122 12164234713 021610 0ustar00gregstaff000000 000000 # Test for : allowed @prefix : . [] : [] . : : : . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-15.nt000644 000765 000024 00000000132 12164234713 021430 0ustar00gregstaff000000 000000 "a long\n\tliteral\nwith\nnewlines" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-15.ttl000644 000765 000024 00000000146 12164234713 021617 0ustar00gregstaff000000 000000 # Test long literal @prefix : . :a :b """a long literal with newlines""" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-16.nt000644 000765 000024 00000000321 12164234713 021431 0ustar00gregstaff000000 000000 "\nthis \ris a \U00012451long\t\nliteral\uABCD\n" . "\tThis \uABCDis\r \U00012451another\n\none\n" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-16.ttl000644 000765 000024 00000000642 12164234713 021621 0ustar00gregstaff000000 000000 @prefix : . ## \U00015678 is a not a legal codepoint ## :a :b """\nthis \ris a \U00015678long\t ## literal\uABCD ## """ . ## ## :d :e """\tThis \uABCDis\r \U00015678another\n ## one ## """ . # \U00015678 is a not a legal codepoint # \U00012451 in Cuneiform numeric ban 3 :a :b """\nthis \ris a \U00012451long\t literal\uABCD """ . :d :e """\tThis \uABCDis\r \U00012451another\n one """ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-17.nt000644 000765 000024 00000000144 12164234713 021435 0ustar00gregstaff000000 000000 "1.0"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-17.ttl000644 000765 000024 00000000062 12164234713 021616 0ustar00gregstaff000000 000000 @prefix : . :a :b 1.0 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-18.nt000644 000765 000024 00000000152 12164234713 021435 0ustar00gregstaff000000 000000 "" . "" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-18.ttl000644 000765 000024 00000000100 12164234713 021610 0ustar00gregstaff000000 000000 @prefix : . :a :b "" . :c :d """""" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-19.nt000644 000765 000024 00000000445 12164234713 021443 0ustar00gregstaff000000 000000 "1.0"^^ . "1"^^ . "1.0e0"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-19.ttl000644 000765 000024 00000000106 12164234713 021617 0ustar00gregstaff000000 000000 @prefix : . :a :b 1.0 . :c :d 1 . :e :f 1.0e0 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-20.nt000644 000765 000024 00000000450 12164234713 021427 0ustar00gregstaff000000 000000 "-1.0"^^ . "-1"^^ . "-1.0e0"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-20.ttl000644 000765 000024 00000000111 12164234713 021603 0ustar00gregstaff000000 000000 @prefix : . :a :b -1.0 . :c :d -1 . :e :f -1.0e0 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-21.nt000644 000765 000024 00000000124 12164234713 021426 0ustar00gregstaff000000 000000 "John said: \"Hello World!\"" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-21.ttl000644 000765 000024 00000000143 12164234713 021611 0ustar00gregstaff000000 000000 # Test long literal @prefix : . :a :b """John said: "Hello World!\"""" . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-22.nt000644 000765 000024 00000000307 12164234713 021432 0ustar00gregstaff000000 000000 "true"^^ . "false"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-22.ttl000644 000765 000024 00000000075 12164234713 021616 0ustar00gregstaff000000 000000 @prefix : . :a :b true . :c :d false . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-23.nt000644 000765 000024 00000001006 12164234713 021430 0ustar00gregstaff000000 000000 . . . . . . . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-23.ttl000644 000765 000024 00000000402 12164234713 021611 0ustar00gregstaff000000 000000 # comment test @prefix : . :a :b :c . # end of line comment :d # ignore me :e # and me :f # and me . :g :h #ignore me :i, # and me :j . # and me :k :l :m ; #ignore me :n :o ; # and me :p :q . # and me RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-24.nt000644 000765 000024 00000000112 12164234713 021426 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-24.ttl000644 000765 000024 00000000135 12164234713 021615 0ustar00gregstaff000000 000000 # comment line with no final newline test @prefix : . :a :b :c . #foo RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-25.nt000644 000765 000024 00000000134 12164234713 021433 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-25.ttl000644 000765 000024 00000000163 12164234713 021617 0ustar00gregstaff000000 000000 @prefix foo: . @prefix foo: . foo:blah foo:blah foo:blah . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-26.nt000644 000765 000024 00000004707 12164234713 021446 0ustar00gregstaff000000 000000 "2.345"^^ . "1"^^ . "1.0"^^ . "1."^^ . "1.000000000"^^ . "2.3"^^ . "2.234000005"^^ . "2.2340000005"^^ . "2.23400000005"^^ . "2.234000000005"^^ . "2.2340000000005"^^ . "2.23400000000005"^^ . "2.234000000000005"^^ . "2.2340000000000005"^^ . "2.23400000000000005"^^ . "2.234000000000000005"^^ . "2.2340000000000000005"^^ . "2.23400000000000000005"^^ . "2.234000000000000000005"^^ . "2.2340000000000000000005"^^ . "2.23400000000000000000005"^^ . "1.2345678901234567890123457890"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-26.ttl000644 000765 000024 00000004707 12164234713 021630 0ustar00gregstaff000000 000000 "2.345"^^ . "1"^^ . "1.0"^^ . "1."^^ . "1.000000000"^^ . "2.3"^^ . "2.234000005"^^ . "2.2340000005"^^ . "2.23400000005"^^ . "2.234000000005"^^ . "2.2340000000005"^^ . "2.23400000000005"^^ . "2.234000000000005"^^ . "2.2340000000000005"^^ . "2.23400000000000005"^^ . "2.234000000000000005"^^ . "2.2340000000000000005"^^ . "2.23400000000000000005"^^ . "2.234000000000000000005"^^ . "2.2340000000000000000005"^^ . "2.23400000000000000000005"^^ . "1.2345678901234567890123457890"^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-27.nt000644 000765 000024 00000000755 12164234713 021446 0ustar00gregstaff000000 000000 . . . . . RDF-Trine-1.007/t/data/turtle-2013/turtle-subm-27.ttl000644 000765 000024 00000000647 12164234713 021630 0ustar00gregstaff000000 000000 # In-scope base URI is at this point . @base . # In-scope base URI is http://example.org/ns/ at this point . @base . # In-scope base URI is http://example.org/ns/foo/ at this point . @prefix : . :a4 :b4 :c4 . @prefix : . :a5 :b5 :c5 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-base-01.ttl000644 000765 000024 00000000035 12164234713 023623 0ustar00gregstaff000000 000000 # @base without URI. @base . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-base-02.ttl000644 000765 000024 00000000105 12164234713 023622 0ustar00gregstaff000000 000000 # @base in wrong case. @BASE . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-base-03.ttl000644 000765 000024 00000000136 12164234713 023627 0ustar00gregstaff000000 000000 # FULL STOP used after SPARQL BASE BASE .

. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-blank-label-dot-end.ttl000644 000765 000024 00000000100 12164234713 026160 0ustar00gregstaff000000 000000 @prefix : . _:b1. :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-esc-01.ttl000644 000765 000024 00000000153 12164234713 023464 0ustar00gregstaff000000 000000 # Bad string escape "a\zb" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-esc-02.ttl000644 000765 000024 00000000155 12164234713 023467 0ustar00gregstaff000000 000000 # Bad string escape "\uWXYZ" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-esc-03.ttl000644 000765 000024 00000000161 12164234713 023465 0ustar00gregstaff000000 000000 # Bad string escape "\U0000WXYZ" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-esc-04.ttl000644 000765 000024 00000000161 12164234713 023466 0ustar00gregstaff000000 000000 # Bad string escape "\U0000WXYZ" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-kw-01.ttl000644 000765 000024 00000000074 12164234713 023335 0ustar00gregstaff000000 000000 @prefix : . :s A :C . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-kw-02.ttl000644 000765 000024 00000000074 12164234713 023336 0ustar00gregstaff000000 000000 @prefix : . a :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-kw-03.ttl000644 000765 000024 00000000074 12164234713 023337 0ustar00gregstaff000000 000000 @prefix : . :s :p a . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-kw-04.ttl000644 000765 000024 00000000077 12164234713 023343 0ustar00gregstaff000000 000000 @prefix : . true :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-kw-05.ttl000644 000765 000024 00000000077 12164234713 023344 0ustar00gregstaff000000 000000 @prefix : . :s true :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-lang-01.ttl000644 000765 000024 00000000152 12164234713 023632 0ustar00gregstaff000000 000000 # Bad lang tag "string"@1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-LITERAL2_with_langtag_and_datatype.ttl000644 000765 000024 00000000176 12164234713 031124 0ustar00gregstaff000000 000000 "value"@en^^ . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-ln-dash-start.ttl000644 000765 000024 00000000076 12164234713 025161 0ustar00gregstaff000000 000000 @prefix : . :s :p :-o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-ln-escape-start.ttl000644 000765 000024 00000000077 12164234713 025503 0ustar00gregstaff000000 000000 @prefix : . :s :p :%2o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-ln-escape.ttl000644 000765 000024 00000000077 12164234713 024350 0ustar00gregstaff000000 000000 @prefix : . :s :p :o%2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-missing-ns-dot-end.ttl000644 000765 000024 00000000035 12164234713 026112 0ustar00gregstaff000000 000000 valid:s valid:p invalid.:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-missing-ns-dot-start.ttl000644 000765 000024 00000000051 12164234713 026477 0ustar00gregstaff000000 000000 .undefined:s .undefined:p .undefined:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-01.ttl000644 000765 000024 00000000146 12164234713 024540 0ustar00gregstaff000000 000000 # {} fomulae not in Turtle @prefix : . { :a :q :c . } :p :z . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-02.ttl000644 000765 000024 00000000117 12164234713 024537 0ustar00gregstaff000000 000000 # = is not Turtle @prefix : . :a = :b . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-03.ttl000644 000765 000024 00000000221 12164234713 024534 0ustar00gregstaff000000 000000 # N3 paths @prefix : . @prefix ns: . :x. ns:p. ns:q :p :z . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-04.ttl000644 000765 000024 00000000204 12164234713 024536 0ustar00gregstaff000000 000000 # N3 paths @prefix : . @prefix ns: . :x^ns:p :p :z . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-05.ttl000644 000765 000024 00000000121 12164234713 024535 0ustar00gregstaff000000 000000 # N3 is...of @prefix : . :z is :p of :x . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-06.ttl000644 000765 000024 00000000120 12164234713 024535 0ustar00gregstaff000000 000000 # = is not Turtle @prefix : . :a.:b.:c . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-07.ttl000644 000765 000024 00000000063 12164234713 024544 0ustar00gregstaff000000 000000 # @keywords is not Turtle @keywords a . x a Item . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-08.ttl000644 000765 000024 00000000063 12164234713 024545 0ustar00gregstaff000000 000000 # @keywords is not Turtle @keywords a . x a Item . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-09.ttl000644 000765 000024 00000000120 12164234713 024540 0ustar00gregstaff000000 000000 # => is not Turtle @prefix : . :s => :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-10.ttl000644 000765 000024 00000000120 12164234713 024530 0ustar00gregstaff000000 000000 # <= is not Turtle @prefix : . :s <= :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-11.ttl000644 000765 000024 00000000131 12164234713 024533 0ustar00gregstaff000000 000000 # @forSome is not Turtle @prefix : . @forSome :x . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-12.ttl000644 000765 000024 00000000127 12164234713 024541 0ustar00gregstaff000000 000000 # @forAll is not Turtle @prefix : . @forAll :x . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-n3-extras-13.ttl000644 000765 000024 00000000062 12164234713 024540 0ustar00gregstaff000000 000000 # @keywords is not Turtle @keywords . x @a Item . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-ns-dot-end.ttl000644 000765 000024 00000000112 12164234713 024437 0ustar00gregstaff000000 000000 @prefix eg. : . eg.:s eg.:p eg.:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-ns-dot-start.ttl000644 000765 000024 00000000112 12164234713 025026 0ustar00gregstaff000000 000000 @prefix .eg : . .eg:s .eg:p .eg:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-num-01.ttl000644 000765 000024 00000000130 12164234713 023504 0ustar00gregstaff000000 000000 123.abc . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-num-02.ttl000644 000765 000024 00000000125 12164234713 023511 0ustar00gregstaff000000 000000 123e . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-num-03.ttl000644 000765 000024 00000000127 12164234713 023514 0ustar00gregstaff000000 000000 123abc . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-num-04.ttl000644 000765 000024 00000000126 12164234713 023514 0ustar00gregstaff000000 000000 0x123 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-num-05.ttl000644 000765 000024 00000000124 12164234713 023513 0ustar00gregstaff000000 000000 +-1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-number-dot-in-anon.ttl000644 000765 000024 00000000113 12164234713 026101 0ustar00gregstaff000000 000000 @prefix : . :s :p [ :p1 27. ] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-pname-01.ttl000644 000765 000024 00000000124 12164234713 024010 0ustar00gregstaff000000 000000 # ~ must be escaped. @prefix : . :a~b :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-pname-02.ttl000644 000765 000024 00000000120 12164234713 024005 0ustar00gregstaff000000 000000 # Bad %-sequence @prefix : . :a%2 :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-pname-03.ttl000644 000765 000024 00000000130 12164234713 024007 0ustar00gregstaff000000 000000 # No \u (x39 is "9") @prefix : . :a\u0039 :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-prefix-01.ttl000644 000765 000024 00000000074 12164234713 024211 0ustar00gregstaff000000 000000 # No prefix :s "x" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-prefix-02.ttl000644 000765 000024 00000000202 12164234713 024203 0ustar00gregstaff000000 000000 # No prefix @prefix rdf: . rdf:type :C . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-prefix-03.ttl000644 000765 000024 00000000045 12164234713 024211 0ustar00gregstaff000000 000000 # @prefix without URI. @prefix ex: . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-prefix-04.ttl000644 000765 000024 00000000120 12164234713 024204 0ustar00gregstaff000000 000000 # @prefix without prefix name . @prefix . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-prefix-05.ttl000644 000765 000024 00000000106 12164234713 024211 0ustar00gregstaff000000 000000 # @prefix without : @prefix x . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-01.ttl000644 000765 000024 00000000100 12164234713 024210 0ustar00gregstaff000000 000000 @prefix : . :s :p "abc' . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-02.ttl000644 000765 000024 00000000100 12164234713 024211 0ustar00gregstaff000000 000000 @prefix : . :s :p 'abc" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-03.ttl000644 000765 000024 00000000102 12164234713 024214 0ustar00gregstaff000000 000000 @prefix : . :s :p '''abc' . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-04.ttl000644 000765 000024 00000000104 12164234713 024217 0ustar00gregstaff000000 000000 @prefix : . :s :p """abc''' . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-05.ttl000644 000765 000024 00000000143 12164234713 024223 0ustar00gregstaff000000 000000 # Long literal with missing end @prefix : . :s :p """abc def RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-06.ttl000644 000765 000024 00000000137 12164234713 024227 0ustar00gregstaff000000 000000 # Long literal with 4" @prefix : . :s :p """abc""""@en . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-string-07.ttl000644 000765 000024 00000000137 12164234713 024230 0ustar00gregstaff000000 000000 # Long literal with 4' @prefix : . :s :p '''abc''''@en . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-01.ttl000644 000765 000024 00000000216 12164234713 024236 0ustar00gregstaff000000 000000 # Turtle is not TriG { } RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-02.ttl000644 000765 000024 00000000145 12164234713 024240 0ustar00gregstaff000000 000000 # Turtle is not N3 = . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-03.ttl000644 000765 000024 00000000265 12164234713 024244 0ustar00gregstaff000000 000000 # Turtle is not NQuads . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-04.ttl000644 000765 000024 00000000205 12164234713 024237 0ustar00gregstaff000000 000000 # Turtle does not allow literals-as-subjects "hello" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-05.ttl000644 000765 000024 00000000207 12164234713 024242 0ustar00gregstaff000000 000000 # Turtle does not allow literals-as-predicates "hello" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-06.ttl000644 000765 000024 00000000200 12164234713 024234 0ustar00gregstaff000000 000000 # Turtle does not allow bnodes-as-predicates [] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-07.ttl000644 000765 000024 00000000201 12164234713 024236 0ustar00gregstaff000000 000000 # Turtle does not allow bnodes-as-predicates _:p . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-08.ttl000644 000765 000024 00000000176 12164234713 024252 0ustar00gregstaff000000 000000 # No DOT RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-09.ttl000644 000765 000024 00000000210 12164234713 024240 0ustar00gregstaff000000 000000 # Too many DOT . . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-10.ttl000644 000765 000024 00000000402 12164234713 024233 0ustar00gregstaff000000 000000 # Too many DOT . . . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-11.ttl000644 000765 000024 00000000204 12164234713 024234 0ustar00gregstaff000000 000000 # Trailing ; ; RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-12.ttl000644 000765 000024 00000000117 12164234713 024240 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-13.ttl000644 000765 000024 00000000117 12164234713 024241 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-14.ttl000644 000765 000024 00000000154 12164234713 024243 0ustar00gregstaff000000 000000 # Literal as subject "abc" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-15.ttl000644 000765 000024 00000000156 12164234713 024246 0ustar00gregstaff000000 000000 # Literal as predicate "abc" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-16.ttl000644 000765 000024 00000000151 12164234713 024242 0ustar00gregstaff000000 000000 # BNode as predicate [] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-struct-17.ttl000644 000765 000024 00000000152 12164234713 024244 0ustar00gregstaff000000 000000 # BNode as predicate _:a . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-uri-01.ttl000644 000765 000024 00000000217 12164234713 023512 0ustar00gregstaff000000 000000 # Bad IRI : space. . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-uri-02.ttl000644 000765 000024 00000000225 12164234713 023512 0ustar00gregstaff000000 000000 # Bad IRI : bad escape . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-uri-03.ttl000644 000765 000024 00000000227 12164234713 023515 0ustar00gregstaff000000 000000 # Bad IRI : bad escape . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-uri-04.ttl000644 000765 000024 00000000243 12164234713 023514 0ustar00gregstaff000000 000000 # Bad IRI : character escapes not allowed. . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bad-uri-05.ttl000644 000765 000024 00000000243 12164234713 023515 0ustar00gregstaff000000 000000 # Bad IRI : character escapes not allowed. . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-base-01.ttl000644 000765 000024 00000000056 12164234713 023102 0ustar00gregstaff000000 000000 @base . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-base-02.ttl000644 000765 000024 00000000053 12164234713 023100 0ustar00gregstaff000000 000000 BASE RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-base-03.ttl000644 000765 000024 00000000074 12164234713 023104 0ustar00gregstaff000000 000000 @base .

. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-base-04.ttl000644 000765 000024 00000000071 12164234713 023102 0ustar00gregstaff000000 000000 base

. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-blank-label.ttl000644 000765 000024 00000000247 12164234713 024120 0ustar00gregstaff000000 000000 @prefix : . _:0b :p :o . # Starts with digit _:_b :p :o . # Starts with underscore _:b.0 :p :o . # Contains dot, ends with digit RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-01.ttl000644 000765 000024 00000000075 12164234713 023260 0ustar00gregstaff000000 000000 @prefix : . [] :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-02.ttl000644 000765 000024 00000000075 12164234713 023261 0ustar00gregstaff000000 000000 @prefix : . :s :p [] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-03.ttl000644 000765 000024 00000000104 12164234713 023253 0ustar00gregstaff000000 000000 @prefix : . :s :p [ :q :o ] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-04.ttl000644 000765 000024 00000000120 12164234713 023252 0ustar00gregstaff000000 000000 @prefix : . :s :p [ :q1 :o1 ; :q2 :o2 ] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-05.ttl000644 000765 000024 00000000120 12164234713 023253 0ustar00gregstaff000000 000000 @prefix : . [ :q1 :o1 ; :q2 :o2 ] :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-06.ttl000644 000765 000024 00000000077 12164234713 023267 0ustar00gregstaff000000 000000 @prefix : . _:a :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-07.ttl000644 000765 000024 00000000114 12164234713 023260 0ustar00gregstaff000000 000000 @prefix : . :s :p _:a . _:a :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-08.ttl000644 000765 000024 00000000077 12164234713 023271 0ustar00gregstaff000000 000000 @prefix : . [ :p :o ] . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-09.ttl000644 000765 000024 00000000117 12164234713 023265 0ustar00gregstaff000000 000000 @prefix : . [ :p :o1,:2 ] . :s :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-bnode-10.ttl000644 000765 000024 00000000144 12164234713 023255 0ustar00gregstaff000000 000000 @prefix : . :s1 :p :o . [ :p1 :o1 ; :p2 :o2 ] . :s2 :p :o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-datatypes-01.ttl000644 000765 000024 00000000121 12164234713 024157 0ustar00gregstaff000000 000000 @prefix xsd: .

"123"^^xsd:byte . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-datatypes-02.ttl000644 000765 000024 00000000224 12164234713 024164 0ustar00gregstaff000000 000000 @prefix rdf: . @prefix xsd: .

"123"^^xsd:string . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-file-01.ttl000644 000765 000024 00000000000 12164234713 023074 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-file-02.ttl000644 000765 000024 00000000015 12164234713 023103 0ustar00gregstaff000000 000000 #Empty file. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-file-03.ttl000644 000765 000024 00000000037 12164234713 023110 0ustar00gregstaff000000 000000 #One comment, one empty line. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-kw-01.ttl000644 000765 000024 00000000017 12164234713 022606 0ustar00gregstaff000000 000000

true . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-kw-02.ttl000644 000765 000024 00000000020 12164234713 022601 0ustar00gregstaff000000 000000

false . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-kw-03.ttl000644 000765 000024 00000000074 12164234713 022613 0ustar00gregstaff000000 000000 @prefix : . :s a :C . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-lists-01.ttl000644 000765 000024 00000000075 12164234713 023327 0ustar00gregstaff000000 000000 @prefix : . :s :p () . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-lists-02.ttl000644 000765 000024 00000000105 12164234713 023322 0ustar00gregstaff000000 000000 @prefix : . :s :p (1 "2" :o) . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-lists-03.ttl000644 000765 000024 00000000077 12164234713 023333 0ustar00gregstaff000000 000000 @prefix : . (1) :p (1) . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-lists-04.ttl000644 000765 000024 00000000101 12164234713 023320 0ustar00gregstaff000000 000000 @prefix : . (()) :p (()) . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-lists-05.ttl000644 000765 000024 00000000123 12164234713 023325 0ustar00gregstaff000000 000000 @prefix : . (1 2 (1 2)) :p (( "a") "b" :o) . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-ln-colons.ttl000644 000765 000024 00000000205 12164234713 023652 0ustar00gregstaff000000 000000 @prefix : . :s:1 :p:1 :o:1 . :s::2 :p::2 :o::2 . :3:s :3:p :3 . ::s ::p ::o . ::s: ::p: ::o: . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-ln-dots.ttl000644 000765 000024 00000000144 12164234713 023330 0ustar00gregstaff000000 000000 @prefix : . :s.1 :p.1 :o.1 . :s..2 :p..2 :o..2. :3.s :3.p :3. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-ns-dots.ttl000644 000765 000024 00000000111 12164234713 023331 0ustar00gregstaff000000 000000 @prefix e.g: . e.g:s e.g:p e.g:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-01.ttl000644 000765 000024 00000000016 12164234713 023454 0ustar00gregstaff000000 000000

123 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-02.ttl000644 000765 000024 00000000017 12164234713 023456 0ustar00gregstaff000000 000000

-123 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-03.ttl000644 000765 000024 00000000017 12164234713 023457 0ustar00gregstaff000000 000000

+123 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-04.ttl000644 000765 000024 00000000046 12164234713 023462 0ustar00gregstaff000000 000000 # This is a decimal.

123.0 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-05.ttl000644 000765 000024 00000000043 12164234713 023460 0ustar00gregstaff000000 000000 # This is a decimal.

.1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-06.ttl000644 000765 000024 00000000047 12164234713 023465 0ustar00gregstaff000000 000000 # This is a decimal.

-123.0 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-07.ttl000644 000765 000024 00000000047 12164234713 023466 0ustar00gregstaff000000 000000 # This is a decimal.

+123.0 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-08.ttl000644 000765 000024 00000000042 12164234713 023462 0ustar00gregstaff000000 000000 # This is an integer

123. RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-09.ttl000644 000765 000024 00000000022 12164234713 023461 0ustar00gregstaff000000 000000

123.0e1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-10.ttl000644 000765 000024 00000000022 12164234713 023451 0ustar00gregstaff000000 000000

-123e-1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-number-11.ttl000644 000765 000024 00000000022 12164234713 023452 0ustar00gregstaff000000 000000

123.E+1 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-pname-esc-01.ttl000644 000765 000024 00000000146 12164234713 024040 0ustar00gregstaff000000 000000 @prefix : . :s :p :\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-pname-esc-02.ttl000644 000765 000024 00000000155 12164234713 024041 0ustar00gregstaff000000 000000 @prefix : . :s :p :0123\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA123 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-pname-esc-03.ttl000644 000765 000024 00000000106 12164234713 024036 0ustar00gregstaff000000 000000 @prefix : . :xyz\~ :abc\.: : . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-01.ttl000644 000765 000024 00000000062 12164234713 023462 0ustar00gregstaff000000 000000 @prefix : . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-02.ttl000644 000765 000024 00000000057 12164234713 023467 0ustar00gregstaff000000 000000 PreFIX : RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-03.ttl000644 000765 000024 00000000074 12164234713 023467 0ustar00gregstaff000000 000000 PREFIX : :s :p :123 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-04.ttl000644 000765 000024 00000000077 12164234713 023473 0ustar00gregstaff000000 000000 @prefix : . :s :p :%20 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-05.ttl000644 000765 000024 00000000072 12164234713 023467 0ustar00gregstaff000000 000000 @prefix : . : : : . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-06.ttl000644 000765 000024 00000000237 12164234713 023473 0ustar00gregstaff000000 000000 # colon is a legal pname character @prefix : . @prefix x: . :a:b:c x:d:e:f :::: . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-07.ttl000644 000765 000024 00000000150 12164234713 023466 0ustar00gregstaff000000 000000 # dash is a legal pname character @prefix x: . x:a-b-c x:p x:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-08.ttl000644 000765 000024 00000000154 12164234713 023473 0ustar00gregstaff000000 000000 # underscore is a legal pname character @prefix x: . x:_ x:p_1 x:o . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-prefix-09.ttl000644 000765 000024 00000000206 12164234713 023472 0ustar00gregstaff000000 000000 # percents @prefix : . @prefix x: . :a%3E x:%25 :a%3Eb . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-str-esc-01.ttl000644 000765 000024 00000000126 12164234713 023546 0ustar00gregstaff000000 000000 "a\n" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-str-esc-02.ttl000644 000765 000024 00000000133 12164234713 023545 0ustar00gregstaff000000 000000 "a\u0020b" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-str-esc-03.ttl000644 000765 000024 00000000137 12164234713 023552 0ustar00gregstaff000000 000000 "a\U00000020b" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-01.ttl000644 000765 000024 00000000131 12164234713 023470 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-02.ttl000644 000765 000024 00000000134 12164234713 023474 0ustar00gregstaff000000 000000 "string"@en . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-03.ttl000644 000765 000024 00000000137 12164234713 023500 0ustar00gregstaff000000 000000 "string"@en-uk . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-04.ttl000644 000765 000024 00000000131 12164234713 023473 0ustar00gregstaff000000 000000 'string' . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-05.ttl000644 000765 000024 00000000134 12164234713 023477 0ustar00gregstaff000000 000000 'string'@en . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-06.ttl000644 000765 000024 00000000137 12164234713 023503 0ustar00gregstaff000000 000000 'string'@en-uk . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-07.ttl000644 000765 000024 00000000144 12164234713 023502 0ustar00gregstaff000000 000000 """abc""def''ghi""" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-08.ttl000644 000765 000024 00000000136 12164234713 023504 0ustar00gregstaff000000 000000 """abc def""" . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-09.ttl000644 000765 000024 00000000136 12164234713 023505 0ustar00gregstaff000000 000000 '''abc def''' . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-10.ttl000644 000765 000024 00000000141 12164234713 023471 0ustar00gregstaff000000 000000 """abc def"""@en . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-string-11.ttl000644 000765 000024 00000000141 12164234713 023472 0ustar00gregstaff000000 000000 '''abc def'''@en . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-struct-01.ttl000644 000765 000024 00000000104 12164234713 023506 0ustar00gregstaff000000 000000 @prefix : . :s :p :o1 , :o2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-struct-02.ttl000644 000765 000024 00000000114 12164234713 023510 0ustar00gregstaff000000 000000 @prefix : . :s :p1 :o1 ; :p2 :o2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-struct-03.ttl000644 000765 000024 00000000121 12164234713 023507 0ustar00gregstaff000000 000000 @prefix : . :s :p1 :o1 ; :p2 :o2 ; . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-struct-04.ttl000644 000765 000024 00000000121 12164234713 023510 0ustar00gregstaff000000 000000 @prefix : . :s :p1 :o1 ;; :p2 :o2 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-struct-05.ttl000644 000765 000024 00000000122 12164234713 023512 0ustar00gregstaff000000 000000 @prefix : . :s :p1 :o1 ; :p2 :o2 ;; . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-uri-01.ttl000644 000765 000024 00000000167 12164234713 022772 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-uri-02.ttl000644 000765 000024 00000000217 12164234713 022767 0ustar00gregstaff000000 000000 # x53 is capital S . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-uri-03.ttl000644 000765 000024 00000000223 12164234713 022765 0ustar00gregstaff000000 000000 # x53 is capital S . RDF-Trine-1.007/t/data/turtle-2013/turtle-syntax-uri-04.ttl000644 000765 000024 00000000312 12164234713 022765 0ustar00gregstaff000000 000000 # IRI with all chars in it. . RDF-Trine-1.007/t/data/turtle-2013/two_LITERAL_LONG2s.nt000644 000765 000024 00000000227 12164234713 022000 0ustar00gregstaff000000 000000 "first long literal" . "second long literal" . RDF-Trine-1.007/t/data/turtle-2013/two_LITERAL_LONG2s.ttl000644 000765 000024 00000000244 12164234713 022161 0ustar00gregstaff000000 000000 # Test long literal twice to ensure it does not over-quote @prefix : . :a :b """first long literal""" . :c :d """second long literal""" . RDF-Trine-1.007/t/data/turtle-2013/underscore_in_localName.nt000644 000765 000024 00000000102 12164234713 023531 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle-2013/underscore_in_localName.ttl000644 000765 000024 00000000121 12164234713 023714 0ustar00gregstaff000000 000000 @prefix p: . p:s_ . RDF-Trine-1.007/t/data/turtle/bad-00.ttl000644 000765 000024 00000000056 10747456207 017502 0ustar00gregstaff000000 000000 # prefix name must end in a : @prefix a <#> . RDF-Trine-1.007/t/data/turtle/bad-01.ttl000644 000765 000024 00000000150 10747456207 017476 0ustar00gregstaff000000 000000 # Forbidden by RDF - predicate cannot be blank @prefix : . :a [ :b :c ] :d . RDF-Trine-1.007/t/data/turtle/bad-02.ttl000644 000765 000024 00000000141 10747456207 017477 0ustar00gregstaff000000 000000 # Forbidden by RDF - predicate cannot be blank @prefix : . :a [] :b . RDF-Trine-1.007/t/data/turtle/bad-03.ttl000644 000765 000024 00000000123 10747456207 017500 0ustar00gregstaff000000 000000 # 'a' only allowed as a predicate @prefix : . a :a :b . RDF-Trine-1.007/t/data/turtle/bad-04.ttl000644 000765 000024 00000000157 10747456207 017510 0ustar00gregstaff000000 000000 # No comma is allowed in collections @prefix : . :a :b ( "apple", "banana" ) . RDF-Trine-1.007/t/data/turtle/bad-05.ttl000644 000765 000024 00000000137 10747456207 017507 0ustar00gregstaff000000 000000 # N3 {}s are not in Turtle @prefix : . { :a :b :c . } :d :e . RDF-Trine-1.007/t/data/turtle/bad-06.ttl000644 000765 000024 00000000133 10747456207 017504 0ustar00gregstaff000000 000000 # is and of are not in turtle @prefix : . :a is :b of :c . RDF-Trine-1.007/t/data/turtle/bad-07.ttl000644 000765 000024 00000000134 10747456207 017506 0ustar00gregstaff000000 000000 # paths are not in turtle @prefix : . :a.:b.:c . :a^:b^:c . RDF-Trine-1.007/t/data/turtle/bad-08.ttl000644 000765 000024 00000000062 10747456207 017507 0ustar00gregstaff000000 000000 @keywords something. # @keywords is not in turtle RDF-Trine-1.007/t/data/turtle/bad-09.ttl000644 000765 000024 00000000122 10747456207 017505 0ustar00gregstaff000000 000000 # implies is not in turtle @prefix : . :a => :b . RDF-Trine-1.007/t/data/turtle/bad-10.ttl000644 000765 000024 00000000125 10747456207 017500 0ustar00gregstaff000000 000000 # equivalence is not in turtle @prefix : . :a = :b . RDF-Trine-1.007/t/data/turtle/bad-11.ttl000644 000765 000024 00000000124 10747456207 017500 0ustar00gregstaff000000 000000 # @forAll is not in turtle @prefix : . @forAll :x . RDF-Trine-1.007/t/data/turtle/bad-12.ttl000644 000765 000024 00000000126 10747456207 017503 0ustar00gregstaff000000 000000 # @forSome is not in turtle @prefix : . @forSome :x . RDF-Trine-1.007/t/data/turtle/bad-13.ttl000644 000765 000024 00000000115 10747456207 017502 0ustar00gregstaff000000 000000 # <= is not in turtle @prefix : . :a <= :b . RDF-Trine-1.007/t/data/turtle/bad-14.ttl000644 000765 000024 00000000163 10747456207 017506 0ustar00gregstaff000000 000000 # Test long literals with missing end @prefix : . :a :b """a long literal with newlines RDF-Trine-1.007/t/data/turtle/rdf-schema.out000644 000765 000024 00000041347 10747456207 020564 0ustar00gregstaff000000 000000 . "Indicates membership of a class" . "type"@en . "type"@fr . . . "The concept of Class" . "Class"@en . "Classe"@fr . . . "Properties used to express RDF Schema constraints." . "ConstraintProperty"@en . "Propri\u00E9t\u00E9Contrainte"@fr . . . . . "Resources used to express RDF Schema constraints." . "ConstraintResource"@en . "RessourceContrainte"@fr . . . "This represents the set Containers." . "Container"@en . "Enveloppe"@fr . . . "ContainerMembershipProperty"@en . . . . "This represents the set of atomic values, eg. textual strings." . "Literal"@en . "Litt\u00E9ral"@fr . . "The most general class" . "Resource"@en . "Ressource"@fr . . "Use this for descriptions" . . "comment"@en . "commentaire"@fr . . . "This is how we associate a class with properties that its instances can have" . "domain"@en . "domaine"@fr . . "Indicates a resource containing and defining the subject resource." . . "esD\u00E9finiPar"@fr . "isDefinedBy"@en . . . . "Provides a human-readable version of a resource name." . . "label"@en . "label"@fr . . . "Properties that can be used in a schema to provide constraints" . . "range"@en . "\u00E9tendue"@fr . . . "Indicates a resource that provides information about the subject resource." . . "seeAlso"@en . "voirAussi"@fr . . . "Indicates membership of a class" . . "sousClasseDe"@fr . "subClassOf"@en . . . "Indicates specialization of properties" . . "sousPropri\u00E9t\u00E9De"@fr . "subPropertyOf"@en . . . "Alt"@en . "Choix"@fr . . . "Bag"@en . "Ensemble"@fr . . . "The concept of a property." . "Property"@en . "Propri\u00E9t\u00E9"@fr . . . "Sequence"@en . "S\u00E9quence"@fr . . . "This represents the set of reified statements." . "D\u00E9claration"@fr . "Statement"@en . . . . "object"@en . "objet"@fr . . . "predicate"@en . "pr\u00E9dicat"@fr . . . . "subject"@en . "sujet"@fr . . . "object"@en . "value"@fr . . RDF-Trine-1.007/t/data/turtle/rdf-schema.ttl000644 000765 000024 00000010431 10747456207 020546 0ustar00gregstaff000000 000000 # RDF Namespace document converted into Turtle @prefix : . @prefix rdf: . rdf:type a rdf:Property; :comment "Indicates membership of a class"; :label "type"@en, "type"@fr; :range :Class . :Class a :Class; :comment "The concept of Class"; :label "Class"@en, "Classe"@fr; :subClassOf :Resource . :ConstraintProperty a :Class; :comment "Properties used to express RDF Schema constraints."; :label "ConstraintProperty"@en, "Propri\u00E9t\u00E9Contrainte"@fr; :subClassOf :ConstraintResource, rdf:Property . :ConstraintResource a :Class, :Class; :comment "Resources used to express RDF Schema constraints."; :label "ConstraintResource"@en, "RessourceContrainte"@fr; :subClassOf :Resource . :Container a :Class; :comment "This represents the set Containers."; :label "Container"@en, "Enveloppe"@fr; :subClassOf :Resource . :ContainerMembershipProperty a :Class; :label "ContainerMembershipProperty"@en; :subClassOf rdf:Property . :Literal a :Class, :Class; :comment "This represents the set of atomic values, eg. textual strings."; :label "Literal"@en, "Litt\u00E9ral"@fr . :Resource a :Class; :comment "The most general class"; :label "Resource"@en, "Ressource"@fr . :comment a rdf:Property; :comment "Use this for descriptions"; :domain :Resource; :label "comment"@en, "commentaire"@fr; :range :Literal . :domain a :ConstraintProperty; :comment "This is how we associate a class with properties that its instances can have"; :label "domain"@en, "domaine"@fr . :isDefinedBy a rdf:Property; :comment "Indicates a resource containing and defining the subject resource."; :domain :Resource; :label "esD\u00E9finiPar"@fr, "isDefinedBy"@en; :range :Resource; :subPropertyOf :seeAlso . :label a rdf:Property; :comment "Provides a human-readable version of a resource name."; :domain :Resource; :label "label"@en, "label"@fr; :range :Literal . :range a :ConstraintProperty; :comment "Properties that can be used in a schema to provide constraints"; :domain rdf:Property; :label "range"@en, "\u00E9tendue"@fr; :range :Class . :seeAlso a rdf:Property; :comment "Indicates a resource that provides information about the subject resource."; :domain :Resource; :label "seeAlso"@en, "voirAussi"@fr; :range :Resource . :subClassOf a rdf:Property; :comment "Indicates membership of a class"; :domain :Class; :label "sousClasseDe"@fr, "subClassOf"@en; :range :Class . :subPropertyOf a rdf:Property; :comment "Indicates specialization of properties"; :domain rdf:Property; :label "sousPropri\u00E9t\u00E9De"@fr, "subPropertyOf"@en; :range rdf:Property . rdf:Alt a :Class; :label "Alt"@en, "Choix"@fr; :subClassOf :Container . rdf:Bag a :Class; :label "Bag"@en, "Ensemble"@fr; :subClassOf :Container . rdf:Property a :Class; :comment "The concept of a property."; :label "Property"@en, "Propri\u00E9t\u00E9"@fr; :subClassOf :Resource . rdf:Seq a :Class; :label "Sequence"@en, "S\u00E9quence"@fr; :subClassOf :Container . rdf:Statement a :Class; :comment "This represents the set of reified statements."; :label "D\u00E9claration"@fr, "Statement"@en; :subClassOf :Resource . rdf:object a rdf:Property; :domain rdf:Statement; :label "object"@en, "objet"@fr . rdf:predicate a rdf:Property; :domain rdf:Statement; :label "predicate"@en, "pr\u00E9dicat"@fr; :range rdf:Property . rdf:subject a rdf:Property; :domain rdf:Statement; :label "subject"@en, "sujet"@fr; :range :Resource . rdf:value a rdf:Property; :label "object"@en, "value"@fr . : :seeAlso . RDF-Trine-1.007/t/data/turtle/rdfq-results.out000644 000765 000024 00000006446 10747456207 021207 0ustar00gregstaff000000 000000 _:genid1 "x" . _:genid1 "123"^^ . _:genid2 "y" . _:genid2 . _:genid3 . _:genid3 _:genid1 . _:genid3 _:genid2 . _:genid4 "x" . _:genid4 "2003-01-21" . _:genid5 "y" . _:genid5 . _:genid6 . _:genid6 _:genid4 . _:genid6 _:genid5 . _:genid7 "x" . _:genid7 "anon1" . _:genid8 "y" . _:genid8 _:a . _:genid9 . _:genid9 _:genid7 . _:genid9 _:genid8 . _:genid10 "x" . _:genid10 "anon2" . _:genid11 "y" . _:genid11 _:a . _:genid12 . _:genid12 _:genid10 . _:genid12 _:genid11 . . "4"^^ . "x" . "y" . _:genid3 . _:genid6 . _:genid9 . _:genid12 . RDF-Trine-1.007/t/data/turtle/rdfq-results.ttl000644 000765 000024 00000002324 10747456207 021172 0ustar00gregstaff000000 000000 # from http://www.w3.org/2003/03/rdfqr-tests/recording-query-results.html @prefix rdf: . @prefix rs: . <> rdf:type rs:ResultSet ; rs:size 4 ; rs:resultVariable "x" ; rs:resultVariable "y" ; rs:solution [ rdf:type rs:ResultSolution ; rs:binding [ rs:variable "x" ; rs:value 123 ] ; rs:binding [ rs:variable "y" ; rs:value ] ] ; rs:solution [ rdf:type rs:ResultSolution ; rs:binding [ rs:variable "x" ; rs:value "2003-01-21" ] ; rs:binding [ rs:variable "y" ; rs:value ] ] ; rs:solution [ rdf:type rs:ResultSolution ; rs:binding [ rs:variable "x" ; rs:value "anon1" ] ; rs:binding [ rs:variable "y" ; rs:value _:a ] ] ; rs:solution [ rdf:type rs:ResultSolution ; rs:binding [ rs:variable "x" ; rs:value "anon2" ] ; rs:binding [ rs:variable "y" ; rs:value _:a ] ] ; . RDF-Trine-1.007/t/data/turtle/rdfs-namespace.out000644 000765 000024 00000043731 10747456207 021442 0ustar00gregstaff000000 000000 . "Indicates membership of a class" . . . "type"@en . . . "A collection of alternatives."@en . . "Alt"@en . . . "An unordered collection."@en . . "Bag"@en . . . "The concept of a property." . . "Property"@en . . . "An ordered collection."@en . . "Seq"@en . . . "The class of RDF statements." . . "Statement"@en . . . "The object of an RDF statement." . . . "object"@en . . "the predicate of an RDF statement." . . . "predicate"@en . . . "The subject of an RDF statement." . . . "subject"@en . . . "Identifies the principal value (usually a string) of a property when the property value is a structured resource" . . . "value"@en . . . "The concept of Class" . . "Class"@en . . . "This represents the set Containers." . . "Container"@en . . . "The container membership properties, rdf:1, rdf:2, ..., all of which are sub-properties of 'member'." . . "ContainerMembershipProperty"@en . . . "This represents the set of atomic values, eg. textual strings." . . "Literal"@en . . "The class resource, everything." . . "Resource"@en . . "Use this for descriptions" . . . "comment"@en . . . "A domain class for a property type" . . . "domain"@en . . . "Indicates the namespace of a resource" . . . "isDefinedBy"@en . . . . "Provides a human-readable version of a resource name." . . . "label"@en . . . "a member of a container" . . . "member"@en . . "A range class for a property type" . . . "range"@en . . . "A resource that provides information about the subject resource" . . . "seeAlso"@en . . . "Indicates membership of a class" . . . "subClassOf"@en . . . "Indicates specialization of properties" . . . "subPropertyOf"@en . . RDF-Trine-1.007/t/data/turtle/rdfs-namespace.ttl000644 000765 000024 00000010435 10747456207 021431 0ustar00gregstaff000000 000000 # RDFS Namespace document converted into Turtle @prefix : . @prefix rdf: . rdf:type a rdf:Property; :comment "Indicates membership of a class"; :domain :Resource; :isDefinedBy rdf:; :label "type"@en; :range :Class . rdf:Alt a :Class; :comment "A collection of alternatives."@en; :isDefinedBy rdf:; :label "Alt"@en; :subClassOf :Container . rdf:Bag a :Class; :comment "An unordered collection."@en; :isDefinedBy rdf:; :label "Bag"@en; :subClassOf :Container . rdf:Property a :Class; :comment "The concept of a property."; :isDefinedBy rdf:; :label "Property"@en; :subClassOf :Resource . rdf:Seq a :Class; :comment "An ordered collection."@en; :isDefinedBy rdf:; :label "Seq"@en; :subClassOf :Container . rdf:Statement a :Class; :comment "The class of RDF statements."; :isDefinedBy rdf:; :label "Statement"@en; :subClassOf :Resource . rdf:object a rdf:Property; :comment "The object of an RDF statement."; :domain rdf:Statement; :isDefinedBy rdf:; :label "object"@en . rdf:predicate a rdf:Property; :comment "the predicate of an RDF statement."; :domain rdf:Statement; :isDefinedBy rdf:; :label "predicate"@en; :range rdf:Property . rdf:subject a rdf:Property; :comment "The subject of an RDF statement."; :domain rdf:Statement; :isDefinedBy rdf:; :label "subject"@en; :range :Resource . rdf:value a rdf:Property; :comment "Identifies the principal value (usually a string) of a property when the property value is a structured resource"; :domain :Resource; :isDefinedBy rdf:; :label "value"@en . : :seeAlso . :Class a :Class; :comment "The concept of Class"; :isDefinedBy :; :label "Class"@en; :subClassOf :Resource . :Container a :Class; :comment "This represents the set Containers."; :isDefinedBy :; :label "Container"@en; :subClassOf :Resource . :ContainerMembershipProperty a :Class; :comment "The container membership properties, rdf:1, rdf:2, ..., all of which are sub-properties of 'member'."; :isDefinedBy :; :label "ContainerMembershipProperty"@en; :subClassOf rdf:Property . :Literal a :Class; :comment "This represents the set of atomic values, eg. textual strings."; :isDefinedBy :; :label "Literal"@en . :Resource a :Class; :comment "The class resource, everything."; :isDefinedBy :; :label "Resource"@en . :comment a rdf:Property; :comment "Use this for descriptions"; :domain :Resource; :isDefinedBy :; :label "comment"@en; :range :Literal . :domain a rdf:Property; :comment "A domain class for a property type"; :domain rdf:Property; :isDefinedBy :; :label "domain"@en; :range :Class . :isDefinedBy a rdf:Property; :comment "Indicates the namespace of a resource"; :domain :Resource; :isDefinedBy :; :label "isDefinedBy"@en; :range :Resource; :subPropertyOf :seeAlso . :label a rdf:Property; :comment "Provides a human-readable version of a resource name."; :domain :Resource; :isDefinedBy :; :label "label"@en; :range :Literal . :member a rdf:Property; :comment "a member of a container"; :domain :Container; :isDefinedBy :; :label "member"@en . :range a rdf:Property; :comment "A range class for a property type"; :domain rdf:Property; :isDefinedBy :; :label "range"@en; :range :Class . :seeAlso a rdf:Property; :comment "A resource that provides information about the subject resource"; :domain :Resource; :isDefinedBy :; :label "seeAlso"@en; :range :Resource . :subClassOf a rdf:Property; :comment "Indicates membership of a class"; :domain :Class; :isDefinedBy :; :label "subClassOf"@en; :range :Class . :subPropertyOf a rdf:Property; :comment "Indicates specialization of properties"; :domain rdf:Property; :isDefinedBy :; :label "subPropertyOf"@en; :range rdf:Property . RDF-Trine-1.007/t/data/turtle/test-00.out000644 000765 000024 00000000211 10747456207 017730 0ustar00gregstaff000000 000000 _:genid1 . RDF-Trine-1.007/t/data/turtle/test-00.ttl000644 000765 000024 00000000033 10747456207 017726 0ustar00gregstaff000000 000000 @prefix : <#> . [] :x :y . RDF-Trine-1.007/t/data/turtle/test-01.out000644 000765 000024 00000000413 10747456207 017735 0ustar00gregstaff000000 000000 . . . RDF-Trine-1.007/t/data/turtle/test-01.ttl000644 000765 000024 00000000273 10747456207 017735 0ustar00gregstaff000000 000000 # Test @prefix and qnames @prefix : . @prefix a: . @prefix b: . :a :b :c . a:a a:b a:c . :a a:a b:a . RDF-Trine-1.007/t/data/turtle/test-02.out000644 000765 000024 00000000402 10747456207 017734 0ustar00gregstaff000000 000000 . . . RDF-Trine-1.007/t/data/turtle/test-02.ttl000644 000765 000024 00000000130 10747456207 017726 0ustar00gregstaff000000 000000 # Test , operator @prefix : . :a :b :c, :d, :e . RDF-Trine-1.007/t/data/turtle/test-03.out000644 000765 000024 00000000402 10747456207 017735 0ustar00gregstaff000000 000000 . . . RDF-Trine-1.007/t/data/turtle/test-03.ttl000644 000765 000024 00000000132 10747456207 017731 0ustar00gregstaff000000 000000 # Test ; operator @prefix : . :a :b :c ; :d :e ; :f :g . RDF-Trine-1.007/t/data/turtle/test-04.out000644 000765 000024 00000000206 10747456207 017740 0ustar00gregstaff000000 000000 _:genid1 . _:genid2 . RDF-Trine-1.007/t/data/turtle/test-04.ttl000644 000765 000024 00000000160 10747456207 017733 0ustar00gregstaff000000 000000 # Test empty [] operator; not allowed as predicate @prefix : . [] :a :b . :c :d [] . RDF-Trine-1.007/t/data/turtle/test-05.out000644 000765 000024 00000000414 10747456207 017742 0ustar00gregstaff000000 000000 _:genid1 . _:genid1 . _:genid2 . _:genid2 . RDF-Trine-1.007/t/data/turtle/test-05.ttl000644 000765 000024 00000000202 10747456207 017731 0ustar00gregstaff000000 000000 # Test non empty [] operator; not allowed as predicate @prefix : . [ :a :b ] :c :d . :e :f [ :g :h ] . RDF-Trine-1.007/t/data/turtle/test-06.out000644 000765 000024 00000000154 10747456207 017744 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle/test-06.ttl000644 000765 000024 00000000123 10747456207 017734 0ustar00gregstaff000000 000000 # 'a' only allowed as a predicate @prefix : . :a a :b . RDF-Trine-1.007/t/data/turtle/test-07.out000644 000765 000024 00000000616 10747456207 017750 0ustar00gregstaff000000 000000 _:genid1 "banana" . _:genid1 . _:genid2 "apple" . _:genid2 _:genid1 . _:genid2 . RDF-Trine-1.007/t/data/turtle/test-07.ttl000644 000765 000024 00000000112 10747456207 017733 0ustar00gregstaff000000 000000 @prefix : . :a :b ( "apple" "banana" ) . RDF-Trine-1.007/t/data/turtle/test-08.out000644 000765 000024 00000000165 10747456207 017750 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/turtle/test-08.ttl000644 000765 000024 00000000071 10747456207 017740 0ustar00gregstaff000000 000000 @prefix : . :a :b ( ) . RDF-Trine-1.007/t/data/turtle/test-09.out000644 000765 000024 00000000604 10747456207 017747 0ustar00gregstaff000000 000000 _:hasParent . _:genid1 . _:genid1 _:hasParent . _:genid1 "2"^^ . RDF-Trine-1.007/t/data/turtle/test-09.ttl000644 000765 000024 00000000424 10747456207 017743 0ustar00gregstaff000000 000000 # Test integer datatyped literals using an OWL cardinality constraint @prefix owl: . # based on examples in the OWL Reference _:hasParent a owl:ObjectProperty . [] a owl:Restriction ; owl:onProperty _:hasParent ; owl:maxCardinality 2 . RDF-Trine-1.007/t/data/turtle/test-10.out000644 000765 000024 00000001003 10747456207 017731 0ustar00gregstaff000000 000000 "0"^^ . "0"^^ . "1"^^ . "2"^^ . "4"^^ . RDF-Trine-1.007/t/data/turtle/test-10.ttl000644 000765 000024 00000000447 10747456207 017740 0ustar00gregstaff000000 000000 000000 . 0 . 000001 . 2 . 4 . RDF-Trine-1.007/t/data/turtle/test-11.out000644 000765 000024 00000000440 10747456207 017736 0ustar00gregstaff000000 000000 "a" . "b" . "c" . "d" . RDF-Trine-1.007/t/data/turtle/test-11.ttl000644 000765 000024 00000000513 10747456207 017733 0ustar00gregstaff000000 000000 # Tests for - and _ in names, qnames @prefix ex1: . @prefix ex-2: . @prefix ex3_: . @prefix ex4-: . ex1:foo-bar ex1:foo_bar "a" . ex-2:foo-bar ex-2:foo_bar "b" . ex3_:foo-bar ex3_:foo_bar "c" . ex4-:foo-bar ex4-:foo_bar "d" . RDF-Trine-1.007/t/data/turtle/test-12.out000644 000765 000024 00000000456 10747456207 017746 0ustar00gregstaff000000 000000 "1" . "2" . "def" . "678" . RDF-Trine-1.007/t/data/turtle/test-12.ttl000644 000765 000024 00000000440 10747456207 017733 0ustar00gregstaff000000 000000 # Tests for rdf:_ and other qnames starting with _ @prefix rdf: . @prefix ex: . @prefix : . ex:foo rdf:_1 "1" . ex:foo rdf:_2 "2" . ex:foo :_abc "def" . ex:foo :_345 "678" . RDF-Trine-1.007/t/data/turtle/test-13.out000644 000765 000024 00000000172 10747456207 017742 0ustar00gregstaff000000 000000 _:genid1 _:genid2 . . RDF-Trine-1.007/t/data/turtle/test-13.ttl000644 000765 000024 00000000122 10747456207 017731 0ustar00gregstaff000000 000000 # Test for : allowed @prefix : . [] : [] . : : : . RDF-Trine-1.007/t/data/turtle/test-17.out000644 000765 000024 00000000132 10747456207 017742 0ustar00gregstaff000000 000000 "a long\n\tliteral\nwith\nnewlines" . RDF-Trine-1.007/t/data/turtle/test-17.ttl000644 000765 000024 00000000146 10747456207 017743 0ustar00gregstaff000000 000000 # Test long literal @prefix : . :a :b """a long literal with newlines""" . RDF-Trine-1.007/t/data/turtle/test-18.out000644 000765 000024 00000000321 10747456207 017743 0ustar00gregstaff000000 000000 "\nthis \ris a \U00015678long\t\nliteral\uABCD\n" . "\tThis \uABCDis\r \U00015678another\n\none\n" . RDF-Trine-1.007/t/data/turtle/test-18.ttl000644 000765 000024 00000000235 10747456207 017743 0ustar00gregstaff000000 000000 @prefix : . :a :b """\nthis \ris a \U00015678long\t literal\uABCD """ . :d :e """\tThis \uABCDis\r \U00015678another\n one """ . RDF-Trine-1.007/t/data/turtle/test-19.out000644 000765 000024 00000000144 10747456207 017747 0ustar00gregstaff000000 000000 "1.0"^^ . RDF-Trine-1.007/t/data/turtle/test-19.ttl000644 000765 000024 00000000062 10747456207 017742 0ustar00gregstaff000000 000000 @prefix : . :a :b 1.0 . RDF-Trine-1.007/t/data/turtle/test-20.out000644 000765 000024 00000000152 10747456207 017736 0ustar00gregstaff000000 000000 "" . "" . RDF-Trine-1.007/t/data/turtle/test-20.ttl000644 000765 000024 00000000100 10747456207 017723 0ustar00gregstaff000000 000000 @prefix : . :a :b "" . :c :d """""" . RDF-Trine-1.007/t/data/turtle/test-21.out000644 000765 000024 00000000443 10747456207 017742 0ustar00gregstaff000000 000000 "1.0"^^ . "1"^^ . "1.0"^^ . RDF-Trine-1.007/t/data/turtle/test-21.ttl000644 000765 000024 00000000106 10747456207 017732 0ustar00gregstaff000000 000000 @prefix : . :a :b 1.0 . :c :d 1 . :e :f 1.0e0 . RDF-Trine-1.007/t/data/turtle/test-22.out000644 000765 000024 00000000446 10747456207 017746 0ustar00gregstaff000000 000000 "-1.0"^^ . "-1"^^ . "-1.0"^^ . RDF-Trine-1.007/t/data/turtle/test-22.ttl000644 000765 000024 00000000111 10747456207 017727 0ustar00gregstaff000000 000000 @prefix : . :a :b -1.0 . :c :d -1 . :e :f -1.0e0 . RDF-Trine-1.007/t/data/turtle/test-23.out000644 000765 000024 00000000124 10747456207 017740 0ustar00gregstaff000000 000000 "John said: \"Hello World!\"" . RDF-Trine-1.007/t/data/turtle/test-23.ttl000644 000765 000024 00000000143 10747456207 017735 0ustar00gregstaff000000 000000 # Test long literal @prefix : . :a :b """John said: "Hello World!\"""" . RDF-Trine-1.007/t/data/turtle/test-24.out000644 000765 000024 00000000307 10747456207 017744 0ustar00gregstaff000000 000000 "true"^^ . "false"^^ . RDF-Trine-1.007/t/data/turtle/test-24.ttl000644 000765 000024 00000000075 10747456207 017742 0ustar00gregstaff000000 000000 @prefix : . :a :b true . :c :d false . RDF-Trine-1.007/t/data/turtle/test-25.out000644 000765 000024 00000001006 10747456207 017742 0ustar00gregstaff000000 000000 . . . . . . . RDF-Trine-1.007/t/data/turtle/test-25.ttl000644 000765 000024 00000000402 10747456207 017735 0ustar00gregstaff000000 000000 # comment test @prefix : . :a :b :c . # end of line comment :d # ignore me :e # and me :f # and me . :g :h #ignore me :i, # and me :j . # and me :k :l :m ; #ignore me :n :o ; # and me :p :q . # and me RDF-Trine-1.007/t/data/trig-2013/alternating_bnode_graphs.nq000644 000765 000024 00000000364 12164234713 023377 0ustar00gregstaff000000 000000 . _:G . . _:G . RDF-Trine-1.007/t/data/trig-2013/alternating_bnode_graphs.trig000644 000765 000024 00000000126 12164234713 023722 0ustar00gregstaff000000 000000 @prefix : . {:a :b :c.} _:G {:a :b :d.} {:a :b :e.} _:G {:a :b :f.} RDF-Trine-1.007/t/data/trig-2013/alternating_iri_graphs.nq000644 000765 000024 00000000422 12164234713 023066 0ustar00gregstaff000000 000000 . . . . RDF-Trine-1.007/t/data/trig-2013/alternating_iri_graphs.trig000644 000765 000024 00000000124 12164234713 023414 0ustar00gregstaff000000 000000 @prefix : . {:a :b :c.} :G {:a :b :d.} {:a :b :e.} :G {:a :b :f.} RDF-Trine-1.007/t/data/trig-2013/anonymous_blank_node_graph.trig000644 000765 000024 00000000106 12164234713 024262 0ustar00gregstaff000000 000000 [] { .} RDF-Trine-1.007/t/data/trig-2013/anonymous_blank_node_object.nq000644 000765 000024 00000000171 12164234713 024102 0ustar00gregstaff000000 000000 _:b1 . _:b2 . RDF-Trine-1.007/t/data/trig-2013/anonymous_blank_node_object.trig000644 000765 000024 00000000171 12164234713 024431 0ustar00gregstaff000000 000000 { [] .} { [] .} RDF-Trine-1.007/t/data/trig-2013/anonymous_blank_node_subject.nq000644 000765 000024 00000000171 12164234713 024273 0ustar00gregstaff000000 000000 _:b1 . _:b2 . RDF-Trine-1.007/t/data/trig-2013/anonymous_blank_node_subject.trig000644 000765 000024 00000000171 12164234713 024622 0ustar00gregstaff000000 000000 {[] .} {[] .} RDF-Trine-1.007/t/data/trig-2013/bareword_a_predicate.nq000644 000765 000024 00000000323 12164234713 022474 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/bareword_a_predicate.trig000644 000765 000024 00000000167 12164234713 023031 0ustar00gregstaff000000 000000 { a .} { a .} RDF-Trine-1.007/t/data/trig-2013/bareword_decimal.nq000644 000765 000024 00000000323 12164234713 021632 0ustar00gregstaff000000 000000 "1.0"^^ . "1.0"^^ . RDF-Trine-1.007/t/data/trig-2013/bareword_decimal.trig000644 000765 000024 00000000173 12164234713 022164 0ustar00gregstaff000000 000000 { 1.0 .} { 1.0 .} RDF-Trine-1.007/t/data/trig-2013/bareword_double.nq000644 000765 000024 00000000321 12164234713 021504 0ustar00gregstaff000000 000000 "1E0"^^ . "1E0"^^ . RDF-Trine-1.007/t/data/trig-2013/bareword_double.trig000644 000765 000024 00000000173 12164234713 022040 0ustar00gregstaff000000 000000 { 1E0 .} { 1E0 .} RDF-Trine-1.007/t/data/trig-2013/bareword_integer.trig000644 000765 000024 00000000167 12164234713 022226 0ustar00gregstaff000000 000000 { 1 .} { 1 .} RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_as_object.nq000644 000765 000024 00000000367 12164234713 024666 0ustar00gregstaff000000 000000 _:b1 . _:b1 . _:b2 . _:b2 . RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_as_object.trig000644 000765 000024 00000000322 12164234713 025204 0ustar00gregstaff000000 000000 { [ ] .} { [ ] .}RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_as_subject.nq000644 000765 000024 00000000367 12164234713 025057 0ustar00gregstaff000000 000000 _:b1 . _:b1 . _:b2 . _:b2 . RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_as_subject.trig000644 000765 000024 00000000323 12164234713 025376 0ustar00gregstaff000000 000000 {[ ] .} {[ ] .} RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_containing_collection.nq000644 000765 000024 00000001067 12164234713 027277 0ustar00gregstaff000000 000000 _:b1 _:el1 . _:el1 "1"^^ . _:el1 . _:b2 _:el2 . _:el2 "1"^^ . _:el2 . RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_containing_collection.trig000644 000765 000024 00000000133 12164234713 027617 0ustar00gregstaff000000 000000 {[ (1) ] .} {[ (1) ] .} RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_with_multiple_triples.nq000644 000765 000024 00000000563 12164234713 027363 0ustar00gregstaff000000 000000 _:b1 . _:b1 . _:b1 . _:b2 . _:b2 . _:b2 . RDF-Trine-1.007/t/data/trig-2013/blankNodePropertyList_with_multiple_triples.trig000644 000765 000024 00000000457 12164234713 027714 0ustar00gregstaff000000 000000 {[ ; ] .} {[ ; ] .} RDF-Trine-1.007/t/data/trig-2013/collection_object.nq000644 000765 000024 00000001125 12164234713 022031 0ustar00gregstaff000000 000000 _:el1 . _:el1 "1"^^ . _:el1 . _:el2 . _:el2 "1"^^ . _:el2 . RDF-Trine-1.007/t/data/trig-2013/collection_object.trig000644 000765 000024 00000000172 12164234713 022361 0ustar00gregstaff000000 000000 { (1) .} { (1) .}RDF-Trine-1.007/t/data/trig-2013/collection_subject.nq000644 000765 000024 00000001125 12164234713 022222 0ustar00gregstaff000000 000000 _:el1 "1"^^ . _:el1 . _:el1 . _:el2 "1"^^ . _:el2 . _:el2 . RDF-Trine-1.007/t/data/trig-2013/collection_subject.trig000644 000765 000024 00000000173 12164234713 022553 0ustar00gregstaff000000 000000 {(1) .} {(1) .} RDF-Trine-1.007/t/data/trig-2013/default_namespace_IRI.trig000644 000765 000024 00000000230 12164234713 023036 0ustar00gregstaff000000 000000 @prefix : . {:s .} {:s .} RDF-Trine-1.007/t/data/trig-2013/double_lower_case_e.nq000644 000765 000024 00000000321 12164234713 022326 0ustar00gregstaff000000 000000 "1e0"^^ . "1e0"^^ . RDF-Trine-1.007/t/data/trig-2013/double_lower_case_e.trig000644 000765 000024 00000000173 12164234713 022662 0ustar00gregstaff000000 000000 { 1e0 .} { 1e0 .} RDF-Trine-1.007/t/data/trig-2013/empty_collection.nq000644 000765 000024 00000000321 12164234713 021716 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/empty_collection.trig000644 000765 000024 00000000171 12164234713 022250 0ustar00gregstaff000000 000000 { () .} { () .} RDF-Trine-1.007/t/data/trig-2013/first.nq000644 000765 000024 00000002671 12164234713 017506 0ustar00gregstaff000000 000000 _:outerEl1 . _:outerEl1 _:innerEl1 . _:innerEl1 "1"^^ . _:innerEl1 . _:outerEl1 _:outerEl2 . _:outerEl2 "2"^^ . _:outerEl2 . _:outerEl3 . _:outerEl3 _:innerEl3 . _:innerEl3 "1"^^ . _:innerEl3 . _:outerEl3 _:outerEl4 . _:outerEl4 "2"^^ . _:outerEl4 . RDF-Trine-1.007/t/data/trig-2013/first.trig000644 000765 000024 00000000203 12164234713 020022 0ustar00gregstaff000000 000000 { ((1) 2) .} { ((1) 2) .} RDF-Trine-1.007/t/data/trig-2013/HYPHEN_MINUS_in_localName.nq000644 000765 000024 00000000233 12164234713 022756 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/HYPHEN_MINUS_in_localName.trig000644 000765 000024 00000000235 12164234713 023307 0ustar00gregstaff000000 000000 @prefix p: . {p:s- .} {p:s- .} RDF-Trine-1.007/t/data/trig-2013/IRI_spo.nq000644 000765 000024 00000000231 12164234713 017651 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/IRI_subject.trig000644 000765 000024 00000000235 12164234713 021042 0ustar00gregstaff000000 000000 { .} { .} RDF-Trine-1.007/t/data/trig-2013/IRI_with_all_punctuation.nq000644 000765 000024 00000000463 12164234713 023313 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/IRI_with_all_punctuation.trig000644 000765 000024 00000000467 12164234713 023646 0ustar00gregstaff000000 000000 { .} { .} RDF-Trine-1.007/t/data/trig-2013/IRI_with_eight_digit_numeric_escape.trig000644 000765 000024 00000000257 12164234713 025764 0ustar00gregstaff000000 000000 { .} { .} RDF-Trine-1.007/t/data/trig-2013/IRI_with_four_digit_numeric_escape.trig000644 000765 000024 00000000247 12164234713 025636 0ustar00gregstaff000000 000000 { .} { .} RDF-Trine-1.007/t/data/trig-2013/IRIREF_datatype.nq000644 000765 000024 00000000317 12164234713 021225 0ustar00gregstaff000000 000000 "1"^^ . "1"^^ . RDF-Trine-1.007/t/data/trig-2013/IRIREF_datatype.trig000644 000765 000024 00000000323 12164234713 021551 0ustar00gregstaff000000 000000 { "1"^^ .} { "1"^^ .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_graph.nq000644 000765 000024 00000000106 12164234713 023273 0ustar00gregstaff000000 000000 _:b1 . RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_graph.trig000644 000765 000024 00000000107 12164234713 023623 0ustar00gregstaff000000 000000 _:g { .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_object.nq000644 000765 000024 00000000171 12164234713 023442 0ustar00gregstaff000000 000000 _:b1 . _:b1 . RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_object.trig000644 000765 000024 00000000173 12164234713 023773 0ustar00gregstaff000000 000000 { _:o .} { _:o .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_subject.nq000644 000765 000024 00000000171 12164234713 023633 0ustar00gregstaff000000 000000 _:b1 . _:b1 . RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_subject.trig000644 000765 000024 00000000173 12164234713 024164 0ustar00gregstaff000000 000000 {_:s .} {_:s .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_with_leading_digit.trig000644 000765 000024 00000000173 12164234713 026343 0ustar00gregstaff000000 000000 { _:0 .} { _:0 .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_with_leading_underscore.trig000644 000765 000024 00000000173 12164234713 027414 0ustar00gregstaff000000 000000 { _:_ .} { _:_ .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_with_non_leading_extras.trig000644 000765 000024 00000000225 12164234713 027421 0ustar00gregstaff000000 000000 { _:a·̀ͯ‿.⁀ .} { _:a·̀ͯ‿.⁀ .} RDF-Trine-1.007/t/data/trig-2013/labeled_blank_node_with_PN_CHARS_BASE_character_boundaries.trig000644 000765 000024 00000000403 12164234713 032032 0ustar00gregstaff000000 000000 { _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿿 .} { _:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿿 .} RDF-Trine-1.007/t/data/trig-2013/langtagged_LONG.trig000644 000765 000024 00000000217 12164234713 021614 0ustar00gregstaff000000 000000 { """chat"""@en .} { """chat"""@en .} RDF-Trine-1.007/t/data/trig-2013/langtagged_LONG_with_subtag.nq000644 000765 000024 00000000241 12164234713 023662 0ustar00gregstaff000000 000000 "Cheers"@en-UK . "Cheers"@en-UK . RDF-Trine-1.007/t/data/trig-2013/langtagged_LONG_with_subtag.trig000644 000765 000024 00000000231 12164234713 024210 0ustar00gregstaff000000 000000 # Test long literal with lang tag @prefix : . {:a :b """Cheers"""@en-UK .} {:a :b """Cheers"""@en-UK .} RDF-Trine-1.007/t/data/trig-2013/langtagged_non_LONG.nq000644 000765 000024 00000000203 12164234713 022132 0ustar00gregstaff000000 000000 "chat"@en . "chat"@en . RDF-Trine-1.007/t/data/trig-2013/langtagged_non_LONG.trig000644 000765 000024 00000000207 12164234713 022465 0ustar00gregstaff000000 000000 { "chat"@en .} { "chat"@en .} RDF-Trine-1.007/t/data/trig-2013/lantag_with_subtag.nq000644 000765 000024 00000000211 12164234713 022211 0ustar00gregstaff000000 000000 "chat"@en-us . "chat"@en-us . RDF-Trine-1.007/t/data/trig-2013/lantag_with_subtag.trig000644 000765 000024 00000000215 12164234713 022544 0ustar00gregstaff000000 000000 { "chat"@en-us .} { "chat"@en-us .} RDF-Trine-1.007/t/data/trig-2013/last.nq000644 000765 000024 00000002671 12164234713 017322 0ustar00gregstaff000000 000000 _:outerEl1 . _:outerEl1 "1"^^ . _:outerEl1 _:outerEl2 . _:outerEl2 _:innerEl1 . _:innerEl1 "2"^^ . _:innerEl1 . _:outerEl2 . _:outerEl3 . _:outerEl3 "1"^^ . _:outerEl3 _:outerEl4 . _:outerEl4 _:innerEl3 . _:innerEl3 "2"^^ . _:innerEl3 . _:outerEl4 . RDF-Trine-1.007/t/data/trig-2013/last.trig000644 000765 000024 00000000203 12164234713 017636 0ustar00gregstaff000000 000000 { (1 (2)) .} { (1 (2)) .} RDF-Trine-1.007/t/data/trig-2013/LICENSE000644 000765 000024 00000013566 12164234713 017031 0ustar00gregstaff000000 000000 Summary ======= Distributed under both the W3C Test Suite License[1] and the W3C 3-clause BSD License[2]. To contribute to a W3C Test Suite, see the policies and contribution forms [3] 1. http://www.w3.org/Consortium/Legal/2008/04-testsuite-license 2. http://www.w3.org/Consortium/Legal/2008/03-bsd-license 3. http://www.w3.org/2004/10/27-testcases DISCLAIMER UNDER BOTH MUTUALLY EXCLUSIVE LICENSES, THIS DOCUMENT AND ALL DOCUMENTS, TESTS AND SOFTWARE THAT LINK THIS STATEMENT ARE PROVIDED "AS IS," AND COPYRIGHT HOLDERS MAKE NO REPRESENTATIONS OR WARRANTIES, EXPRESS OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE, NON-INFRINGEMENT, OR TITLE; THAT THE CONTENTS OF THE DOCUMENT ARE SUITABLE FOR ANY PURPOSE; NOR THAT THE IMPLEMENTATION OF SUCH CONTENTS WILL NOT INFRINGE ANY THIRD PARTY PATENTS, COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS. COPYRIGHT HOLDERS WILL NOT BE LIABLE FOR ANY DIRECT, INDIRECT, SPECIAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF ANY USE OF THE DOCUMENT OR THE PERFORMANCE OR IMPLEMENTATION OF THE CONTENTS THEREOF. W3C Test Suite License ====================== This document, Test Suites and other documents that link to this statement are provided by the copyright holders under the following license: By using and/or copying this document, or the W3C document from which this statement is linked, you (the licensee) agree that you have read, understood, and will comply with the following terms and conditions: Permission to copy, and distribute the contents of this document, or the W3C document from which this statement is linked, in any medium for any purpose and without fee or royalty is hereby granted, provided that you include the following on ALL copies of the document, or portions thereof, that you use: A link or URL to the original W3C document. The pre-existing copyright notice of the original author, or if it doesn't exist, a notice (hypertext is preferred, but a textual representation is permitted) of the form: "Copyright © [$date-of-document] World Wide Web Consortium, (Massachusetts Institute of Technology, European Research Consortium for Informatics and Mathematics, Keio University) and others. All Rights Reserved. http://www.w3.org/Consortium/Legal/2008/04-testsuite-copyright.html" If it exists, the STATUS of the W3C document. When space permits, inclusion of the full text of this NOTICE should be provided. We request that authorship attribution be provided in any software, documents, or other items or products that you create pursuant to the implementation of the contents of this document, or any portion thereof. No right to create modifications or derivatives of W3C documents is granted pursuant to this license. However, if additional requirements (documented in the Copyright FAQ) are satisfied, the right to create modifications or derivatives is sometimes granted by the W3C to individuals complying with those requirements. If a Test Suite distinguishes the test harness (or, framework for navigation) and the actual tests, permission is given to remove or alter the harness or navigation if the Test Suite in question allows to do so. The tests themselves shall NOT be changed in any way. The name and trademarks of W3C and other copyright holders may NOT be used in advertising or publicity pertaining to this document or other documents that link to this statement without specific, written prior permission. Title to copyright in this document will at all times remain with copyright holders. Permission is given to use the trademarked string W3C within claims of performance concerning W3C Specifications or features described therein, and there only, if the test suite so authorizes. THIS WORK IS PROVIDED BY W3C, MIT, ERCIM, KEIO UNIVERSITY, THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL W3C, MIT, ERCIM, KEIO UNIVERSITY, THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. W3C 3-clause BSD License ======================== Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: Redistributions of works must retain the original copyright notice, this list of conditions and the following disclaimer. Redistributions in binary form must reproduce the original copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. Neither the name of the W3C nor the names of its contributors may be used to endorse or promote products derived from this work without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. RDF-Trine-1.007/t/data/trig-2013/LITERAL1.nq000644 000765 000024 00000000167 12164234713 017532 0ustar00gregstaff000000 000000 "x" . "x" . RDF-Trine-1.007/t/data/trig-2013/LITERAL1.trig000644 000765 000024 00000000173 12164234713 020056 0ustar00gregstaff000000 000000 { 'x' .} { 'x' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL1_all_controls.nq000644 000765 000024 00000000735 12164234713 022306 0ustar00gregstaff000000 000000 "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000b\u000c\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f" . "\u0000\u0001\u0002\u0003\u0004\u0005\u0006\u0007\u0008\u0009\u000b\u000c\u000e\u000f\u0010\u0011\u0012\u0013\u0014\u0015\u0016\u0017\u0018\u0019\u001a\u001b\u001c\u001d\u001e\u001f" . RDF-Trine-1.007/t/data/trig-2013/LITERAL1_all_controls.trig000644 000765 000024 00000000264 12164234713 022632 0ustar00gregstaff000000 000000 { ' ' .} { ' ' .}RDF-Trine-1.007/t/data/trig-2013/LITERAL1_all_punctuation.nq000644 000765 000024 00000000261 12164234713 023006 0ustar00gregstaff000000 000000 " !\u0022#$%&():;<=>?@[]^_`{|}~" . " !\u0022#$%&():;<=>?@[]^_`{|}~" . RDF-Trine-1.007/t/data/trig-2013/LITERAL1_all_punctuation.trig000644 000765 000024 00000000253 12164234713 023336 0ustar00gregstaff000000 000000 { ' !"#$%&():;<=>?@[]^_`{|}~' .} { ' !"#$%&():;<=>?@[]^_`{|}~' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL1_ascii_boundaries.nq000644 000765 000024 00000000355 12164234713 023114 0ustar00gregstaff000000 000000 "\u0000\u0009\u000b\u000c\u000e\u0026\u0028\u005b\u005d\u007f" . "\u0000\u0009\u000b\u000c\u000e\u0026\u0028\u005b\u005d\u007f" . RDF-Trine-1.007/t/data/trig-2013/LITERAL1_ascii_boundaries.trig000644 000765 000024 00000000215 12164234713 023436 0ustar00gregstaff000000 000000 { ' &([]' .} { ' &([]' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL2.trig000644 000765 000024 00000000173 12164234713 020057 0ustar00gregstaff000000 000000 { "x" .} { "x" .} RDF-Trine-1.007/t/data/trig-2013/LITERAL2_ascii_boundaries.nq000644 000765 000024 00000000355 12164234713 023115 0ustar00gregstaff000000 000000 "\u0000\u0009\u000b\u000c\u000e\u0021\u0023\u005b\u005d\u007f" . "\u0000\u0009\u000b\u000c\u000e\u0021\u0023\u005b\u005d\u007f" . RDF-Trine-1.007/t/data/trig-2013/LITERAL2_ascii_boundaries.trig000644 000765 000024 00000000215 12164234713 023437 0ustar00gregstaff000000 000000 { " !#[]" .} { " !#[]" .} RDF-Trine-1.007/t/data/trig-2013/literal_false.nq000644 000765 000024 00000000327 12164234713 021161 0ustar00gregstaff000000 000000 "false"^^ . "false"^^ . RDF-Trine-1.007/t/data/trig-2013/literal_false.trig000644 000765 000024 00000000177 12164234713 021513 0ustar00gregstaff000000 000000 { false .} { false .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1.trig000644 000765 000024 00000000203 12164234713 020667 0ustar00gregstaff000000 000000 { '''x''' .} { '''x''' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1_ascii_boundaries.nq000644 000765 000024 00000000275 12164234713 023734 0ustar00gregstaff000000 000000 "\u0000\u0026\u0028\u005b\u005d\u007f" . "\u0000\u0026\u0028\u005b\u005d\u007f" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1_ascii_boundaries.trig000644 000765 000024 00000000205 12164234713 024254 0ustar00gregstaff000000 000000 { '&([]' .} { '&([]' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1_with_1_squote.nq000644 000765 000024 00000000173 12164234713 023221 0ustar00gregstaff000000 000000 "x'y" . "x'y" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1_with_1_squote.trig000644 000765 000024 00000000207 12164234713 023546 0ustar00gregstaff000000 000000 { '''x'y''' .} { '''x'y''' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1_with_2_squotes.nq000644 000765 000024 00000000175 12164234713 023407 0ustar00gregstaff000000 000000 "x''y" . "x''y" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG1_with_2_squotes.trig000644 000765 000024 00000000211 12164234713 023725 0ustar00gregstaff000000 000000 { '''x''y''' .} { '''x''y''' .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2.trig000644 000765 000024 00000000203 12164234713 020670 0ustar00gregstaff000000 000000 { """x""" .} { """x""" .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_ascii_boundaries.nq000644 000765 000024 00000000275 12164234713 023735 0ustar00gregstaff000000 000000 "\u0000\u0021\u0023\u005b\u005d\u007f" . "\u0000\u0021\u0023\u005b\u005d\u007f" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_ascii_boundaries.trig000644 000765 000024 00000000205 12164234713 024255 0ustar00gregstaff000000 000000 { "!#[]" .} { "!#[]" .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_with_1_squote.nq000644 000765 000024 00000000175 12164234713 023224 0ustar00gregstaff000000 000000 "x\"y" . "x\"y" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_with_1_squote.trig000644 000765 000024 00000000207 12164234713 023547 0ustar00gregstaff000000 000000 { """x"y""" .} { """x"y""" .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_with_2_squotes.nq000644 000765 000024 00000000201 12164234713 023376 0ustar00gregstaff000000 000000 "x\"\"y" . "x\"\"y" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_with_2_squotes.trig000644 000765 000024 00000000211 12164234713 023726 0ustar00gregstaff000000 000000 { """x""y""" .} { """x""y""" .} RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.nq000644 000765 000024 00000000231 12164234713 023772 0ustar00gregstaff000000 000000 "test-\\" . "test-\\" . RDF-Trine-1.007/t/data/trig-2013/LITERAL_LONG2_with_REVERSE_SOLIDUS.trig000644 000765 000024 00000000157 12164234713 024330 0ustar00gregstaff000000 000000 @prefix : . {:s :p1 """test-\\""" .} {:s :p1 """test-\\""" .} RDF-Trine-1.007/t/data/trig-2013/literal_true.nq000644 000765 000024 00000000325 12164234713 021044 0ustar00gregstaff000000 000000 "true"^^ . "true"^^ . RDF-Trine-1.007/t/data/trig-2013/literal_true.trig000644 000765 000024 00000000175 12164234713 021376 0ustar00gregstaff000000 000000 { true .} { true .} RDF-Trine-1.007/t/data/trig-2013/literal_with_BACKSPACE.nq000644 000765 000024 00000000201 12164234713 022365 0ustar00gregstaff000000 000000 "\u0008" . "\u0008" . RDF-Trine-1.007/t/data/trig-2013/literal_with_BACKSPACE.trig000644 000765 000024 00000000173 12164234713 022724 0ustar00gregstaff000000 000000 { '' .} { '' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_CARRIAGE_RETURN.nq000644 000765 000024 00000000171 12164234713 023373 0ustar00gregstaff000000 000000 "\r" . "\r" . RDF-Trine-1.007/t/data/trig-2013/literal_with_CARRIAGE_RETURN.trig000644 000765 000024 00000000203 12164234713 023716 0ustar00gregstaff000000 000000 { ''' ''' .} { ''' ''' .}RDF-Trine-1.007/t/data/trig-2013/literal_with_CHARACTER_TABULATION.nq000644 000765 000024 00000000171 12164234713 024135 0ustar00gregstaff000000 000000 "\t" . "\t" . RDF-Trine-1.007/t/data/trig-2013/literal_with_CHARACTER_TABULATION.trig000644 000765 000024 00000000173 12164234713 024466 0ustar00gregstaff000000 000000 { ' ' .} { ' ' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_escaped_BACKSPACE.trig000644 000765 000024 00000000175 12164234713 024412 0ustar00gregstaff000000 000000 { '\b' .} { '\b' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_escaped_CARRIAGE_RETURN.trig000644 000765 000024 00000000175 12164234713 025412 0ustar00gregstaff000000 000000 { '\r' .} { '\r' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_escaped_CHARACTER_TABULATION.trig000644 000765 000024 00000000175 12164234713 026154 0ustar00gregstaff000000 000000 { '\t' .} { '\t' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_escaped_FORM_FEED.trig000644 000765 000024 00000000175 12164234713 024464 0ustar00gregstaff000000 000000 { '\f' .} { '\f' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_escaped_LINE_FEED.trig000644 000765 000024 00000000175 12164234713 024450 0ustar00gregstaff000000 000000 { '\n' .} { '\n' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_FORM_FEED.nq000644 000765 000024 00000000201 12164234713 022437 0ustar00gregstaff000000 000000 "\u000C" . "\u000C" . RDF-Trine-1.007/t/data/trig-2013/literal_with_FORM_FEED.trig000644 000765 000024 00000000173 12164234713 022776 0ustar00gregstaff000000 000000 { ' ' .} { ' ' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_LINE_FEED.nq000644 000765 000024 00000000171 12164234713 022431 0ustar00gregstaff000000 000000 "\n" . "\n" . RDF-Trine-1.007/t/data/trig-2013/literal_with_LINE_FEED.trig000644 000765 000024 00000000202 12164234713 022753 0ustar00gregstaff000000 000000 { ''' ''' .} { ''' ''' .}RDF-Trine-1.007/t/data/trig-2013/literal_with_numeric_escape4.nq000644 000765 000024 00000000167 12164234713 024172 0ustar00gregstaff000000 000000 "o" . "o" . RDF-Trine-1.007/t/data/trig-2013/literal_with_numeric_escape4.trig000644 000765 000024 00000000205 12164234713 024512 0ustar00gregstaff000000 000000 { '\u006F' .} { '\u006F' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_numeric_escape8.trig000644 000765 000024 00000000215 12164234713 024517 0ustar00gregstaff000000 000000 { '\U0000006F' .} { '\U0000006F' .} RDF-Trine-1.007/t/data/trig-2013/literal_with_REVERSE_SOLIDUS.nq000644 000765 000024 00000000171 12164234713 023434 0ustar00gregstaff000000 000000 "\\" . "\\" . RDF-Trine-1.007/t/data/trig-2013/literal_with_REVERSE_SOLIDUS.trig000644 000765 000024 00000000175 12164234713 023767 0ustar00gregstaff000000 000000 { '\\' .} { '\\' .} t/data/trig-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.nq000644 000765 000024 00000000647 12164234713 033126 0ustar00gregstaff000000 000000 RDF-Trine-1.007 . . t/data/trig-2013/localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries.trig000644 000765 000024 00000000424 12164234713 033446 0ustar00gregstaff000000 000000 RDF-Trine-1.007@prefix p: . { p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯ .} { p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯ .} RDF-Trine-1.007/t/data/trig-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.nq000644 000765 000024 00000000717 12164234713 032345 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries.trig000644 000765 000024 00000000444 12164234713 032671 0ustar00gregstaff000000 000000 @prefix p: . { p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯𐀀󠇯 .} { p:AZazÀÖØöø˿Ͱͽ΄῾‌‍⁰↉Ⰰ⿕、ퟻ﨎ﷇﷰ￯𐀀󠇯 .} RDF-Trine-1.007/t/data/trig-2013/localname_with_COLON.nq000644 000765 000024 00000000232 12164234713 022266 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localname_with_COLON.trig000644 000765 000024 00000000235 12164234713 022620 0ustar00gregstaff000000 000000 @prefix p: . {p:s: .} {p:s: .} RDF-Trine-1.007/t/data/trig-2013/localName_with_leading_digit.nq000644 000765 000024 00000000231 12164234713 024136 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localName_with_leading_digit.trig000644 000765 000024 00000000233 12164234713 024467 0ustar00gregstaff000000 000000 @prefix p: . {p:0 .} {p:0 .} RDF-Trine-1.007/t/data/trig-2013/localName_with_leading_underscore.nq000644 000765 000024 00000000231 12164234713 025207 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localName_with_leading_underscore.trig000644 000765 000024 00000000233 12164234713 025540 0ustar00gregstaff000000 000000 @prefix p: . {p:_ .} {p:_ .} RDF-Trine-1.007/t/data/trig-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.nq000644 000765 000024 00000000717 12164234713 030470 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localName_with_nfc_PN_CHARS_BASE_character_boundaries.trig000644 000765 000024 00000000444 12164234713 031014 0ustar00gregstaff000000 000000 @prefix p: . { p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿﨎﷏ﷰ￯𐀀󯿽 .} { p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿﨎﷏ﷰ￯𐀀󯿽 .} RDF-Trine-1.007/t/data/trig-2013/localName_with_non_leading_extras.nq000644 000765 000024 00000000263 12164234713 025223 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localName_with_non_leading_extras.trig000644 000765 000024 00000000265 12164234713 025554 0ustar00gregstaff000000 000000 @prefix p: . {p:a·̀ͯ‿.⁀ .} {p:a·̀ͯ‿.⁀ .} RDF-Trine-1.007/t/data/trig-2013/localName_with_PN_CHARS_BASE_character_boundaries.nq000644 000765 000024 00000000717 12164234713 027642 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/localName_with_PN_CHARS_BASE_character_boundaries.trig000644 000765 000024 00000000444 12164234713 030166 0ustar00gregstaff000000 000000 @prefix p: . { p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ￯𐀀󯿽 .} { p:AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ￯𐀀󯿽 .} RDF-Trine-1.007/t/data/trig-2013/manifest.ttl000644 000765 000024 00000253036 12164234713 020355 0ustar00gregstaff000000 000000 # TriG tests ## Distributed under both the W3C Test Suite License[1] and the W3C 3- ## clause BSD License[2]. To contribute to a W3C Test Suite, see the ## policies and contribution forms [3] ## ## 1. http://www.w3.org/Consortium/Legal/2008/04-testsuite-license ## 2. http://www.w3.org/Consortium/Legal/2008/03-bsd-license ## 3. http://www.w3.org/2004/10/27-testcases @prefix rdf: . @prefix rdfs: . @prefix mf: . @prefix qt: . @prefix rdft: . <> rdf:type mf:Manifest ; rdfs:comment "TriG tests" ; mf:entries ( # TriG specific tests <#anonymous_blank_node_graph> <#labeled_blank_node_graph> <#alternating_iri_graphs> <#alternating_bnode_graphs> <#trig-syntax-bad-base-04> <#trig-syntax-bad-base-05> <#trig-syntax-bad-prefix-06> <#trig-syntax-bad-prefix-07> <#trig-syntax-struct-06> <#trig-syntax-struct-07> # From Turtle tests # atomic tests <#IRI_subject> <#IRI_with_four_digit_numeric_escape> <#IRI_with_eight_digit_numeric_escape> <#IRI_with_all_punctuation> <#bareword_a_predicate> <#old_style_prefix> <#SPARQL_style_prefix> <#prefixed_IRI_predicate> <#prefixed_IRI_object> <#prefix_only_IRI> <#prefix_with_PN_CHARS_BASE_character_boundaries> <#prefix_with_non_leading_extras> <#default_namespace_IRI> <#prefix_reassigned_and_used> <#reserved_escaped_localName> <#percent_escaped_localName> <#HYPHEN_MINUS_in_localName> <#underscore_in_localName> <#localname_with_COLON> <#localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries> <#localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries> <#localName_with_nfc_PN_CHARS_BASE_character_boundaries> # <#localName_with_PN_CHARS_BASE_character_boundaries> <#localName_with_leading_underscore> <#localName_with_leading_digit> <#localName_with_non_leading_extras> <#old_style_base> <#SPARQL_style_base> <#labeled_blank_node_subject> <#labeled_blank_node_object> <#labeled_blank_node_with_PN_CHARS_BASE_character_boundaries> <#labeled_blank_node_with_leading_underscore> <#labeled_blank_node_with_leading_digit> <#labeled_blank_node_with_non_leading_extras> <#anonymous_blank_node_subject> <#anonymous_blank_node_object> <#sole_blankNodePropertyList> <#blankNodePropertyList_as_subject> <#blankNodePropertyList_as_object> <#blankNodePropertyList_with_multiple_triples> <#nested_blankNodePropertyLists> <#blankNodePropertyList_containing_collection> <#collection_subject> <#collection_object> <#empty_collection> <#nested_collection> <#first> <#last> <#LITERAL1> <#LITERAL1_ascii_boundaries> <#LITERAL1_all_controls> <#LITERAL1_all_punctuation> <#LITERAL_LONG1> <#LITERAL_LONG1_ascii_boundaries> <#LITERAL_LONG1_with_1_squote> <#LITERAL_LONG1_with_2_squotes> <#LITERAL2> <#LITERAL2_ascii_boundaries> <#LITERAL_LONG2> <#LITERAL_LONG2_ascii_boundaries> <#LITERAL_LONG2_with_1_squote> <#LITERAL_LONG2_with_2_squotes> <#literal_with_CHARACTER_TABULATION> <#literal_with_BACKSPACE> <#literal_with_LINE_FEED> <#literal_with_CARRIAGE_RETURN> <#literal_with_FORM_FEED> <#literal_with_REVERSE_SOLIDUS> <#literal_with_escaped_CHARACTER_TABULATION> <#literal_with_escaped_BACKSPACE> <#literal_with_escaped_LINE_FEED> <#literal_with_escaped_CARRIAGE_RETURN> <#literal_with_escaped_FORM_FEED> <#literal_with_numeric_escape4> <#literal_with_numeric_escape8> <#IRIREF_datatype> <#prefixed_name_datatype> <#bareword_integer> <#bareword_decimal> <#bareword_double> <#double_lower_case_e> <#negative_numeric> <#positive_numeric> <#numeric_with_leading_0> <#literal_true> <#literal_false> <#langtagged_non_LONG> <#langtagged_LONG> <#lantag_with_subtag> <#objectList_with_two_objects> <#predicateObjectList_with_two_objectLists> <#repeated_semis_at_end> <#repeated_semis_not_at_end> # original tests-ttl <#trig-syntax-file-01> <#trig-syntax-file-02> <#trig-syntax-file-03> <#trig-syntax-uri-01> <#trig-syntax-uri-02> <#trig-syntax-uri-03> <#trig-syntax-uri-04> <#trig-syntax-base-01> <#trig-syntax-base-02> <#trig-syntax-base-03> <#trig-syntax-base-04> <#trig-syntax-prefix-01> <#trig-syntax-prefix-02> <#trig-syntax-prefix-03> <#trig-syntax-prefix-04> <#trig-syntax-prefix-05> <#trig-syntax-prefix-06> <#trig-syntax-prefix-07> <#trig-syntax-prefix-08> <#trig-syntax-prefix-09> <#trig-syntax-string-01> <#trig-syntax-string-02> <#trig-syntax-string-03> <#trig-syntax-string-04> <#trig-syntax-string-05> <#trig-syntax-string-06> <#trig-syntax-string-07> <#trig-syntax-string-08> <#trig-syntax-string-09> <#trig-syntax-string-10> <#trig-syntax-string-11> <#trig-syntax-str-esc-01> <#trig-syntax-str-esc-02> <#trig-syntax-str-esc-03> <#trig-syntax-pname-esc-01> <#trig-syntax-pname-esc-02> <#trig-syntax-pname-esc-03> <#trig-syntax-bnode-01> <#trig-syntax-bnode-02> <#trig-syntax-bnode-03> <#trig-syntax-bnode-04> <#trig-syntax-bnode-05> <#trig-syntax-bnode-06> <#trig-syntax-bnode-07> <#trig-syntax-bnode-08> <#trig-syntax-bnode-09> <#trig-syntax-bnode-10> <#trig-syntax-number-01> <#trig-syntax-number-02> <#trig-syntax-number-03> <#trig-syntax-number-04> <#trig-syntax-number-05> <#trig-syntax-number-06> <#trig-syntax-number-07> <#trig-syntax-number-08> <#trig-syntax-number-09> <#trig-syntax-number-10> <#trig-syntax-number-11> <#trig-syntax-datatypes-01> <#trig-syntax-datatypes-02> <#trig-syntax-kw-01> <#trig-syntax-kw-02> <#trig-syntax-kw-03> <#trig-syntax-struct-01> <#trig-syntax-struct-02> <#trig-syntax-struct-03> <#trig-syntax-struct-04> <#trig-syntax-struct-05> <#trig-syntax-lists-01> <#trig-syntax-lists-02> <#trig-syntax-lists-03> <#trig-syntax-lists-04> <#trig-syntax-lists-05> <#trig-syntax-bad-uri-01> <#trig-syntax-bad-uri-02> <#trig-syntax-bad-uri-03> <#trig-syntax-bad-uri-04> <#trig-syntax-bad-uri-05> <#trig-syntax-bad-prefix-01> <#trig-syntax-bad-prefix-02> <#trig-syntax-bad-prefix-03> <#trig-syntax-bad-prefix-04> <#trig-syntax-bad-prefix-05> <#trig-syntax-bad-base-01> <#trig-syntax-bad-base-02> <#trig-syntax-bad-base-03> <#trig-syntax-bad-struct-02> <#trig-syntax-bad-struct-03> <#trig-syntax-bad-struct-04> <#trig-syntax-bad-struct-05> <#trig-syntax-bad-struct-06> <#trig-syntax-bad-struct-07> <#trig-syntax-bad-kw-01> <#trig-syntax-bad-kw-02> <#trig-syntax-bad-kw-03> <#trig-syntax-bad-kw-04> <#trig-syntax-bad-kw-05> <#trig-syntax-bad-n3-extras-01> <#trig-syntax-bad-n3-extras-02> <#trig-syntax-bad-n3-extras-03> <#trig-syntax-bad-n3-extras-04> <#trig-syntax-bad-n3-extras-05> <#trig-syntax-bad-n3-extras-06> <#trig-syntax-bad-n3-extras-07> <#trig-syntax-bad-n3-extras-08> <#trig-syntax-bad-n3-extras-09> <#trig-syntax-bad-n3-extras-10> <#trig-syntax-bad-n3-extras-11> <#trig-syntax-bad-n3-extras-12> <#trig-syntax-bad-n3-extras-13> <#trig-syntax-bad-struct-09> <#trig-syntax-bad-struct-10> <#trig-syntax-bad-struct-12> <#trig-syntax-bad-struct-13> <#trig-syntax-bad-struct-14> <#trig-syntax-bad-struct-15> <#trig-syntax-bad-struct-16> <#trig-syntax-bad-struct-17> <#trig-syntax-bad-lang-01> <#trig-syntax-bad-esc-01> <#trig-syntax-bad-esc-02> <#trig-syntax-bad-esc-03> <#trig-syntax-bad-esc-04> <#trig-syntax-bad-pname-01> <#trig-syntax-bad-pname-02> <#trig-syntax-bad-pname-03> <#trig-syntax-bad-string-01> <#trig-syntax-bad-string-02> <#trig-syntax-bad-string-03> <#trig-syntax-bad-string-04> <#trig-syntax-bad-string-05> <#trig-syntax-bad-string-06> <#trig-syntax-bad-string-07> <#trig-syntax-bad-num-01> <#trig-syntax-bad-num-02> <#trig-syntax-bad-num-03> <#trig-syntax-bad-num-04> <#trig-syntax-bad-num-05> <#trig-eval-struct-01> <#trig-eval-struct-02> <#trig-subm-01> <#trig-subm-02> <#trig-subm-03> <#trig-subm-04> <#trig-subm-05> <#trig-subm-06> <#trig-subm-07> <#trig-subm-08> <#trig-subm-09> <#trig-subm-10> <#trig-subm-11> <#trig-subm-12> <#trig-subm-13> <#trig-subm-14> <#trig-subm-15> <#trig-subm-16> <#trig-subm-17> <#trig-subm-18> <#trig-subm-19> <#trig-subm-20> <#trig-subm-21> <#trig-subm-22> <#trig-subm-23> <#trig-subm-24> <#trig-subm-25> <#trig-subm-26> <#trig-subm-27> <#trig-eval-bad-01> <#trig-eval-bad-02> <#trig-eval-bad-03> <#trig-eval-bad-04> # tests from Dave Beckett # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c28 <#LITERAL_LONG2_with_REVERSE_SOLIDUS> <#trig-syntax-bad-LITERAL2_with_langtag_and_datatype> <#two_LITERAL_LONG2s> <#langtagged_LONG_with_subtag> # tests from David Robillard # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21 <#trig-syntax-bad-blank-label-dot-end> <#trig-syntax-bad-ln-dash-start> <#trig-syntax-bad-ln-escape-start> <#trig-syntax-bad-ln-escape> <#trig-syntax-bad-missing-ns-dot-end> <#trig-syntax-bad-missing-ns-dot-start> <#trig-syntax-bad-ns-dot-end> <#trig-syntax-bad-ns-dot-start> <#trig-syntax-bad-number-dot-in-anon> <#trig-syntax-blank-label> <#trig-syntax-ln-colons> <#trig-syntax-ln-dots> <#trig-syntax-ns-dots> ) . # TriG tests <#anonymous_blank_node_graph> rdf:type rdft:TestTrigEval ; mf:name "anonymous_blank_node_graph" ; rdfs:comment "anonymous blank node graph" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_graph> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_graph" ; rdfs:comment "labeled blank node graph" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#alternating_iri_graphs> rdf:type rdft:TestTrigEval ; mf:name "alternating_iri_graphs" ; rdfs:comment "alternating graphs with IRI names" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#alternating_bnode_graphs> rdf:type rdft:TestTrigEval ; mf:name "alternating_bnode_graphs" ; rdfs:comment "alternating graphs with BNode names" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-syntax-bad-base-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-base-04" ; rdfs:comment "@base inside graph (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-base-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-base-05" ; rdfs:comment "BASE inside graph (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-06> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-06" ; rdfs:comment "@prefix inside graph (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-07> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-07" ; rdfs:comment "PREFIX inside graph (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-06> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-06" ; rdfs:comment "missing '.'" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-07> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-07" ; rdfs:comment "trailing ';' no '.'" ; rdft:approval rdft:Proposed ; mf:action ; . # Original Turtle tests # atomic tests <#IRI_subject> rdf:type rdft:TestTrigEval ; mf:name "IRI_subject" ; rdfs:comment "IRI subject" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#IRI_with_four_digit_numeric_escape> rdf:type rdft:TestTrigEval ; mf:name "IRI_with_four_digit_numeric_escape" ; rdfs:comment "IRI with four digit numeric escape (\\u)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#IRI_with_eight_digit_numeric_escape> rdf:type rdft:TestTrigEval ; mf:name "IRI_with_eight_digit_numeric_escape" ; rdfs:comment "IRI with eight digit numeric escape (\\U)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#IRI_with_all_punctuation> rdf:type rdft:TestTrigEval ; mf:name "IRI_with_all_punctuation" ; rdfs:comment "IRI with all punctuation" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#bareword_a_predicate> rdf:type rdft:TestTrigEval ; mf:name "bareword_a_predicate" ; rdfs:comment "bareword a predicate" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#old_style_prefix> rdf:type rdft:TestTrigEval ; mf:name "old_style_prefix" ; rdfs:comment "old-style prefix" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#SPARQL_style_prefix> rdf:type rdft:TestTrigEval ; mf:name "SPARQL_style_prefix" ; rdfs:comment "SPARQL-style prefix" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefixed_IRI_predicate> rdf:type rdft:TestTrigEval ; mf:name "prefixed_IRI_predicate" ; rdfs:comment "prefixed IRI predicate" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefixed_IRI_object> rdf:type rdft:TestTrigEval ; mf:name "prefixed_IRI_object" ; rdfs:comment "prefixed IRI object" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefix_only_IRI> rdf:type rdft:TestTrigEval ; mf:name "prefix_only_IRI" ; rdfs:comment "prefix-only IRI (p:)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefix_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ; mf:name "prefix_with_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "prefix with PN CHARS BASE character boundaries (prefix: AZazÀÖØöø...:)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefix_with_non_leading_extras> rdf:type rdft:TestTrigEval ; mf:name "prefix_with_non_leading_extras" ; rdfs:comment "prefix with_non_leading_extras (_:a·̀ͯ‿.⁀)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ; mf:name "localName_with_assigned_nfc_bmp_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with assigned, NFC-normalized, basic-multilingual-plane PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ; mf:name "localName_with_assigned_nfc_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with assigned, NFC-normalized PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_nfc_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ; mf:name "localName_with_nfc_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with nfc-normalize PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ; mf:name "localName_with_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "localName with PN CHARS BASE character boundaries (p:AZazÀÖØöø...)" ; rdft:approval rdft:Rejected ; mf:action ; mf:result ; . <#default_namespace_IRI> rdf:type rdft:TestTrigEval ; mf:name "default_namespace_IRI" ; rdfs:comment "default namespace IRI (:ln)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefix_reassigned_and_used> rdf:type rdft:TestTrigEval ; mf:name "prefix_reassigned_and_used" ; rdfs:comment "prefix reassigned and used" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#reserved_escaped_localName> rdf:type rdft:TestTrigEval ; mf:name "reserved_escaped_localName" ; rdfs:comment "reserved-escaped local name" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#percent_escaped_localName> rdf:type rdft:TestTrigEval ; mf:name "percent_escaped_localName" ; rdfs:comment "percent-escaped local name" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#HYPHEN_MINUS_in_localName> rdf:type rdft:TestTrigEval ; mf:name "HYPHEN_MINUS_in_localName" ; rdfs:comment "HYPHEN-MINUS in local name" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#underscore_in_localName> rdf:type rdft:TestTrigEval ; mf:name "underscore_in_localName" ; rdfs:comment "underscore in local name" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localname_with_COLON> rdf:type rdft:TestTrigEval ; mf:name "localname_with_COLON" ; rdfs:comment "localname with COLON" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_leading_underscore> rdf:type rdft:TestTrigEval ; mf:name "localName_with_leading_underscore" ; rdfs:comment "localName with leading underscore (p:_)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_leading_digit> rdf:type rdft:TestTrigEval ; mf:name "localName_with_leading_digit" ; rdfs:comment "localName with leading digit (p:_)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#localName_with_non_leading_extras> rdf:type rdft:TestTrigEval ; mf:name "localName_with_non_leading_extras" ; rdfs:comment "localName with_non_leading_extras (_:a·̀ͯ‿.⁀)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#old_style_base> rdf:type rdft:TestTrigEval ; mf:name "old_style_base" ; rdfs:comment "old-style base" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#SPARQL_style_base> rdf:type rdft:TestTrigEval ; mf:name "SPARQL_style_base" ; rdfs:comment "SPARQL-style base" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_subject> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_subject" ; rdfs:comment "labeled blank node subject" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_object> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_object" ; rdfs:comment "labeled blank node object" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_with_PN_CHARS_BASE_character_boundaries> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_with_PN_CHARS_BASE_character_boundaries" ; rdfs:comment "labeled blank node with PN_CHARS_BASE character boundaries (_:AZazÀÖØöø...)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_with_leading_underscore> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_with_leading_underscore" ; rdfs:comment "labeled blank node with_leading_underscore (_:_)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_with_leading_digit> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_with_leading_digit" ; rdfs:comment "labeled blank node with_leading_digit (_:0)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#labeled_blank_node_with_non_leading_extras> rdf:type rdft:TestTrigEval ; mf:name "labeled_blank_node_with_non_leading_extras" ; rdfs:comment "labeled blank node with_non_leading_extras (_:a·̀ͯ‿.⁀)" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#anonymous_blank_node_subject> rdf:type rdft:TestTrigEval ; mf:name "anonymous_blank_node_subject" ; rdfs:comment "anonymous blank node subject" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#anonymous_blank_node_object> rdf:type rdft:TestTrigEval ; mf:name "anonymous_blank_node_object" ; rdfs:comment "anonymous blank node object" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#sole_blankNodePropertyList> rdf:type rdft:TestTrigEval ; mf:name "sole_blankNodePropertyList" ; rdfs:comment "sole blankNodePropertyList [

] ." ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#blankNodePropertyList_as_subject> rdf:type rdft:TestTrigEval ; mf:name "blankNodePropertyList_as_subject" ; rdfs:comment "blankNodePropertyList as subject [ … ]

." ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#blankNodePropertyList_as_object> rdf:type rdft:TestTrigEval ; mf:name "blankNodePropertyList_as_object" ; rdfs:comment "blankNodePropertyList as object

[ … ] ." ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#blankNodePropertyList_with_multiple_triples> rdf:type rdft:TestTrigEval ; mf:name "blankNodePropertyList_with_multiple_triples" ; rdfs:comment "blankNodePropertyList with multiple triples [

; ]" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#nested_blankNodePropertyLists> rdf:type rdft:TestTrigEval ; mf:name "nested_blankNodePropertyLists" ; rdfs:comment "nested blankNodePropertyLists [ [ ] ; ]" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#blankNodePropertyList_containing_collection> rdf:type rdft:TestTrigEval ; mf:name "blankNodePropertyList_containing_collection" ; rdfs:comment "blankNodePropertyList containing collection [ ( … ) ]" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#collection_subject> rdf:type rdft:TestTrigEval ; mf:name "collection_subject" ; rdfs:comment "collection subject" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#collection_object> rdf:type rdft:TestTrigEval ; mf:name "collection_object" ; rdfs:comment "collection object" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#empty_collection> rdf:type rdft:TestTrigEval ; mf:name "empty_collection" ; rdfs:comment "empty collection ()" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#nested_collection> rdf:type rdft:TestTrigEval ; mf:name "nested_collection" ; rdfs:comment "nested collection (())" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#first> rdf:type rdft:TestTrigEval ; mf:name "first" ; rdfs:comment "first, not last, non-empty nested collection" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#last> rdf:type rdft:TestTrigEval ; mf:name "last" ; rdfs:comment "last, not first, non-empty nested collection" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL1> rdf:type rdft:TestTrigEval ; mf:name "LITERAL1" ; rdfs:comment "LITERAL1 'x'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL1_ascii_boundaries> rdf:type rdft:TestTrigEval ; mf:name "LITERAL1_ascii_boundaries" ; rdfs:comment "LITERAL1_ascii_boundaries '\\x00\\x09\\x0b\\x0c\\x0e\\x26\\x28...'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL1_all_controls> rdf:type rdft:TestTrigEval ; mf:name "LITERAL1_all_controls" ; rdfs:comment "LITERAL1_all_controls '\\x00\\x01\\x02\\x03\\x04...'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL1_all_punctuation> rdf:type rdft:TestTrigEval ; mf:name "LITERAL1_all_punctuation" ; rdfs:comment "LITERAL1_all_punctuation '!\"#$%&()...'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG1> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG1" ; rdfs:comment "LITERAL_LONG1 '''x'''" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG1_ascii_boundaries> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG1_ascii_boundaries" ; rdfs:comment "LITERAL_LONG1_ascii_boundaries '\\x00\\x26\\x28...'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG1_with_1_squote> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG1_with_1_squote" ; rdfs:comment "LITERAL_LONG1 with 1 squote '''a'b'''" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG1_with_2_squotes> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG1_with_2_squotes" ; rdfs:comment "LITERAL_LONG1 with 2 squotes '''a''b'''" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL2> rdf:type rdft:TestTrigEval ; mf:name "LITERAL2" ; rdfs:comment "LITERAL2 \"x\"" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL2_ascii_boundaries> rdf:type rdft:TestTrigEval ; mf:name "LITERAL2_ascii_boundaries" ; rdfs:comment "LITERAL2_ascii_boundaries '\\x00\\x09\\x0b\\x0c\\x0e\\x21\\x23...'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG2> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG2" ; rdfs:comment "LITERAL_LONG2 \"\"\"x\"\"\"" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG2_ascii_boundaries> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG2_ascii_boundaries" ; rdfs:comment "LITERAL_LONG2_ascii_boundaries '\\x00\\x21\\x23...'" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG2_with_1_squote> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG2_with_1_squote" ; rdfs:comment "LITERAL_LONG2 with 1 squote \"\"\"a\"b\"\"\"" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#LITERAL_LONG2_with_2_squotes> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG2_with_2_squotes" ; rdfs:comment "LITERAL_LONG2 with 2 squotes \"\"\"a\"\"b\"\"\"" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_CHARACTER_TABULATION> rdf:type rdft:TestTrigEval ; mf:name "literal_with_CHARACTER_TABULATION" ; rdfs:comment "literal with CHARACTER TABULATION" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_BACKSPACE> rdf:type rdft:TestTrigEval ; mf:name "literal_with_BACKSPACE" ; rdfs:comment "literal with BACKSPACE" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_LINE_FEED> rdf:type rdft:TestTrigEval ; mf:name "literal_with_LINE_FEED" ; rdfs:comment "literal with LINE FEED" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_CARRIAGE_RETURN> rdf:type rdft:TestTrigEval ; mf:name "literal_with_CARRIAGE_RETURN" ; rdfs:comment "literal with CARRIAGE RETURN" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_FORM_FEED> rdf:type rdft:TestTrigEval ; mf:name "literal_with_FORM_FEED" ; rdfs:comment "literal with FORM FEED" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_REVERSE_SOLIDUS> rdf:type rdft:TestTrigEval ; mf:name "literal_with_REVERSE_SOLIDUS" ; rdfs:comment "literal with REVERSE SOLIDUS" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_escaped_CHARACTER_TABULATION> rdf:type rdft:TestTrigEval ; mf:name "literal_with_escaped_CHARACTER_TABULATION" ; rdfs:comment "literal with escaped CHARACTER TABULATION" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_escaped_BACKSPACE> rdf:type rdft:TestTrigEval ; mf:name "literal_with_escaped_BACKSPACE" ; rdfs:comment "literal with escaped BACKSPACE" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_escaped_LINE_FEED> rdf:type rdft:TestTrigEval ; mf:name "literal_with_escaped_LINE_FEED" ; rdfs:comment "literal with escaped LINE FEED" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_escaped_CARRIAGE_RETURN> rdf:type rdft:TestTrigEval ; mf:name "literal_with_escaped_CARRIAGE_RETURN" ; rdfs:comment "literal with escaped CARRIAGE RETURN" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_escaped_FORM_FEED> rdf:type rdft:TestTrigEval ; mf:name "literal_with_escaped_FORM_FEED" ; rdfs:comment "literal with escaped FORM FEED" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_numeric_escape4> rdf:type rdft:TestTrigEval ; mf:name "literal_with_numeric_escape4" ; rdfs:comment "literal with numeric escape4 \\u" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_with_numeric_escape8> rdf:type rdft:TestTrigEval ; mf:name "literal_with_numeric_escape8" ; rdfs:comment "literal with numeric escape8 \\U" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#IRIREF_datatype> rdf:type rdft:TestTrigEval ; mf:name "IRIREF_datatype" ; rdfs:comment "IRIREF datatype \"\"^^" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#prefixed_name_datatype> rdf:type rdft:TestTrigEval ; mf:name "prefixed_name_datatype" ; rdfs:comment "prefixed name datatype \"\"^^p:t" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#bareword_integer> rdf:type rdft:TestTrigEval ; mf:name "bareword_integer" ; rdfs:comment "bareword integer" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#bareword_decimal> rdf:type rdft:TestTrigEval ; mf:name "bareword_decimal" ; rdfs:comment "bareword decimal" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#bareword_double> rdf:type rdft:TestTrigEval ; mf:name "bareword_double" ; rdfs:comment "bareword double" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#double_lower_case_e> rdf:type rdft:TestTrigEval ; mf:name "double_lower_case_e" ; rdfs:comment "double lower case e" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#negative_numeric> rdf:type rdft:TestTrigEval ; mf:name "negative_numeric" ; rdfs:comment "negative numeric" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#positive_numeric> rdf:type rdft:TestTrigEval ; mf:name "positive_numeric" ; rdfs:comment "positive numeric" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#numeric_with_leading_0> rdf:type rdft:TestTrigEval ; mf:name "numeric_with_leading_0" ; rdfs:comment "numeric with leading 0" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_true> rdf:type rdft:TestTrigEval ; mf:name "literal_true" ; rdfs:comment "literal true" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#literal_false> rdf:type rdft:TestTrigEval ; mf:name "literal_false" ; rdfs:comment "literal false" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#langtagged_non_LONG> rdf:type rdft:TestTrigEval ; mf:name "langtagged_non_LONG" ; rdfs:comment "langtagged non-LONG \"x\"@en" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#langtagged_LONG> rdf:type rdft:TestTrigEval ; mf:name "langtagged_LONG" ; rdfs:comment "langtagged LONG \"\"\"x\"\"\"@en" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#lantag_with_subtag> rdf:type rdft:TestTrigEval ; mf:name "lantag_with_subtag" ; rdfs:comment "lantag with subtag \"x\"@en-us" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#objectList_with_two_objects> rdf:type rdft:TestTrigEval ; mf:name "objectList_with_two_objects" ; rdfs:comment "objectList with two objects … ," ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#predicateObjectList_with_two_objectLists> rdf:type rdft:TestTrigEval ; mf:name "predicateObjectList_with_two_objectLists" ; rdfs:comment "predicateObjectList with two objectLists … ," ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#repeated_semis_at_end> rdf:type rdft:TestTrigEval ; mf:name "repeated_semis_at_end" ; rdfs:comment "repeated semis at end

;; ." ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#repeated_semis_not_at_end> rdf:type rdft:TestTrigEval ; mf:name "repeated_semis_not_at_end" ; rdfs:comment "repeated semis not at end

;;." ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . # original tests-ttl <#trig-syntax-file-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-file-01" ; rdfs:comment "Empty file" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-file-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-file-02" ; rdfs:comment "Only comment" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-file-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-file-03" ; rdfs:comment "One comment, one empty line" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-uri-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-uri-01" ; rdfs:comment "Only IRIs" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-uri-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-uri-02" ; rdfs:comment "IRIs with Unicode escape" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-uri-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-uri-03" ; rdfs:comment "IRIs with long Unicode escape" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-uri-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-uri-04" ; rdfs:comment "Legal IRIs" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-base-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-base-01" ; rdfs:comment "@base" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-base-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-base-02" ; rdfs:comment "BASE" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-base-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-base-03" ; rdfs:comment "@base with relative IRIs" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-base-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-base-04" ; rdfs:comment "base with relative IRIs" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-01" ; rdfs:comment "@prefix" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-02" ; rdfs:comment "PreFIX" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-03" ; rdfs:comment "Empty PREFIX" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-04" ; rdfs:comment "Empty @prefix with % escape" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-05> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-05" ; rdfs:comment "@prefix with no suffix" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-06> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-06" ; rdfs:comment "colon is a legal pname character" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-07> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-07" ; rdfs:comment "dash is a legal pname character" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-08> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-08" ; rdfs:comment "underscore is a legal pname character" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-prefix-09> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-prefix-09" ; rdfs:comment "percents in pnames" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-01" ; rdfs:comment "string literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-02" ; rdfs:comment "langString literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-03" ; rdfs:comment "langString literal with region" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-04" ; rdfs:comment "squote string literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-05> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-05" ; rdfs:comment "squote langString literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-06> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-06" ; rdfs:comment "squote langString literal with region" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-07> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-07" ; rdfs:comment "long string literal with embedded single- and double-quotes" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-08> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-08" ; rdfs:comment "long string literal with embedded newline" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-09> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-09" ; rdfs:comment "squote long string literal with embedded single- and double-quotes" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-10> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-10" ; rdfs:comment "long langString literal with embedded newline" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-string-11> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-string-11" ; rdfs:comment "squote long langString literal with embedded newline" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-str-esc-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-str-esc-01" ; rdfs:comment "string literal with escaped newline" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-str-esc-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-str-esc-02" ; rdfs:comment "string literal with Unicode escape" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-str-esc-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-str-esc-03" ; rdfs:comment "string literal with long Unicode escape" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-pname-esc-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-pname-esc-01" ; rdfs:comment "pname with back-slash escapes" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-pname-esc-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-pname-esc-02" ; rdfs:comment "pname with back-slash escapes (2)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-pname-esc-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-pname-esc-03" ; rdfs:comment "pname with back-slash escapes (3)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-01" ; rdfs:comment "bnode subject" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-02" ; rdfs:comment "bnode object" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-03" ; rdfs:comment "bnode property list object" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-04" ; rdfs:comment "bnode property list object (2)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-05> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-05" ; rdfs:comment "bnode property list subject" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-06> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-06" ; rdfs:comment "labeled bnode subject" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-07> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-07" ; rdfs:comment "labeled bnode subject and object" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-08> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-08" ; rdfs:comment "bare bnode property list" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-09> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-09" ; rdfs:comment "bnode property list" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bnode-10> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-bnode-10" ; rdfs:comment "mixed bnode property list and triple" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-01" ; rdfs:comment "integer literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-02" ; rdfs:comment "negative integer literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-03" ; rdfs:comment "positive integer literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-04" ; rdfs:comment "decimal literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-05> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-05" ; rdfs:comment "decimal literal (no leading digits)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-06> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-06" ; rdfs:comment "negative decimal literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-07> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-07" ; rdfs:comment "positive decimal literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-08> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-08" ; rdfs:comment "integer literal with decimal lexical confusion" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-09> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-09" ; rdfs:comment "double literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-10> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-10" ; rdfs:comment "negative double literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-number-11> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-number-11" ; rdfs:comment "double literal no fraction" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-datatypes-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-datatypes-01" ; rdfs:comment "xsd:byte literal" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-datatypes-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-datatypes-02" ; rdfs:comment "integer as xsd:string" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-kw-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-kw-01" ; rdfs:comment "boolean literal (true)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-kw-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-kw-02" ; rdfs:comment "boolean literal (false)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-kw-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-kw-03" ; rdfs:comment "'a' as keyword" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-01" ; rdfs:comment "object list" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-02" ; rdfs:comment "predicate list with object list" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-03" ; rdfs:comment "predicate list with object list and dangling ';'" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-04" ; rdfs:comment "predicate list with multiple ;;" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-struct-05> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-struct-05" ; rdfs:comment "predicate list with multiple ;;" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-lists-01> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-lists-01" ; rdfs:comment "empty list" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-lists-02> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-lists-02" ; rdfs:comment "mixed list" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-lists-03> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-lists-03" ; rdfs:comment "isomorphic list as subject and object" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-lists-04> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-lists-04" ; rdfs:comment "lists of lists" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-lists-05> rdf:type rdft:TestTrigPositiveSyntax ; mf:name "trig-syntax-lists-05" ; rdfs:comment "mixed lists with embedded lists" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-uri-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-uri-01" ; rdfs:comment "Bad IRI : space (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-uri-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-uri-02" ; rdfs:comment "Bad IRI : bad escape (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-uri-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-uri-03" ; rdfs:comment "Bad IRI : bad long escape (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-uri-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-uri-04" ; rdfs:comment "Bad IRI : character escapes not allowed (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-uri-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-uri-05" ; rdfs:comment "Bad IRI : character escapes not allowed (2) (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-01" ; rdfs:comment "No prefix (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-02" ; rdfs:comment "No prefix (2) (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-03" ; rdfs:comment "@prefix without URI (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-04" ; rdfs:comment "@prefix without prefix name (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-prefix-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-prefix-05" ; rdfs:comment "@prefix without ':' (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-base-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-base-01" ; rdfs:comment "@base without URI (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-base-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-base-02" ; rdfs:comment "@base in wrong case (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-base-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-base-03" ; rdfs:comment "BASE without URI (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-02" ; rdfs:comment "Turtle is not N3 (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-03" ; rdfs:comment "Turtle is not NQuads (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-04" ; rdfs:comment "Turtle does not allow literals-as-subjects (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-05" ; rdfs:comment "Turtle does not allow literals-as-predicates (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-06> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-06" ; rdfs:comment "Turtle does not allow bnodes-as-predicates (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-07> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-07" ; rdfs:comment "Turtle does not allow labeled bnodes-as-predicates (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-kw-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-kw-01" ; rdfs:comment "'A' is not a keyword (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-kw-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-kw-02" ; rdfs:comment "'a' cannot be used as subject (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-kw-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-kw-03" ; rdfs:comment "'a' cannot be used as object (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-kw-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-kw-04" ; rdfs:comment "'true' cannot be used as subject (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-kw-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-kw-05" ; rdfs:comment "'true' cannot be used as object (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-01" ; rdfs:comment "{} fomulae not in Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-02" ; rdfs:comment "= is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-03" ; rdfs:comment "N3 paths not in Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-04" ; rdfs:comment "N3 paths not in Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-05" ; rdfs:comment "N3 is...of not in Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-06> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-06" ; rdfs:comment "N3 paths not in Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-07> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-07" ; rdfs:comment "@keywords is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-08> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-08" ; rdfs:comment "@keywords is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-09> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-09" ; rdfs:comment "=> is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-10> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-10" ; rdfs:comment "<= is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-11> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-11" ; rdfs:comment "@forSome is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-12> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-12" ; rdfs:comment "@forAll is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-n3-extras-13> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-n3-extras-13" ; rdfs:comment "@keywords is not Turtle (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-09> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-09" ; rdfs:comment "extra '.' (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-10> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-10" ; rdfs:comment "extra '.' (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-12> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-12" ; rdfs:comment "subject, predicate, no object (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-13> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-13" ; rdfs:comment "subject, predicate, no object (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-14> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-14" ; rdfs:comment "literal as subject (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-15> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-15" ; rdfs:comment "literal as predicate (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-16> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-16" ; rdfs:comment "bnode as predicate (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-struct-17> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-struct-17" ; rdfs:comment "labeled bnode as predicate (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-lang-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-lang-01" ; rdfs:comment "langString with bad lang (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-esc-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-esc-01" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-esc-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-esc-02" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-esc-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-esc-03" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-esc-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-esc-04" ; rdfs:comment "Bad string escape (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-pname-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-pname-01" ; rdfs:comment "'~' must be escaped in pname (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-pname-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-pname-02" ; rdfs:comment "Bad %-sequence in pname (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-pname-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-pname-03" ; rdfs:comment "Bad unicode escape in pname (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-01" ; rdfs:comment "mismatching string literal open/close (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-02" ; rdfs:comment "mismatching string literal open/close (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-03" ; rdfs:comment "mismatching string literal long/short (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-04" ; rdfs:comment "mismatching long string literal open/close (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-05" ; rdfs:comment "Long literal with missing end (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-06> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-06" ; rdfs:comment "Long literal with extra quote (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-string-07> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-string-07" ; rdfs:comment "Long literal with extra squote (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-num-01> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-num-01" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-num-02> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-num-02" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-num-03> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-num-03" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-num-04> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-num-04" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-syntax-bad-num-05> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-num-05" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-eval-struct-01> rdf:type rdft:TestTrigEval ; mf:name "trig-eval-struct-01" ; rdfs:comment "triple with IRIs" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-eval-struct-02> rdf:type rdft:TestTrigEval ; mf:name "trig-eval-struct-02" ; rdfs:comment "triple with IRIs and embedded whitespace" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-01> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-01" ; rdfs:comment "Blank subject" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-02> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-02" ; rdfs:comment "@prefix and qnames" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-03> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-03" ; rdfs:comment ", operator" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-04> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-04" ; rdfs:comment "; operator" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-05> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-05" ; rdfs:comment "empty [] as subject and object" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-06> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-06" ; rdfs:comment "non-empty [] as subject and object" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-07> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-07" ; rdfs:comment "'a' as predicate" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-08> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-08" ; rdfs:comment "simple collection" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-09> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-09" ; rdfs:comment "empty collection" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-10> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-10" ; rdfs:comment "integer datatyped literal" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-11> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-11" ; rdfs:comment "decimal integer canonicalization" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-12> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-12" ; rdfs:comment "- and _ in names and qnames" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-13> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-13" ; rdfs:comment "tests for rdf:_ and other qnames starting with _" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-14> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-14" ; rdfs:comment "bare : allowed" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-15> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-15" ; rdfs:comment "simple long literal" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-16> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-16" ; rdfs:comment "long literals with escapes" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-17> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-17" ; rdfs:comment "floating point number" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-18> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-18" ; rdfs:comment "empty literals, normal and long variant" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-19> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-19" ; rdfs:comment "positive integer, decimal and doubles" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-20> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-20" ; rdfs:comment "negative integer, decimal and doubles" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-21> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-21" ; rdfs:comment "long literal ending in double quote" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-22> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-22" ; rdfs:comment "boolean literals" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-23> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-23" ; rdfs:comment "comments" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-24> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-24" ; rdfs:comment "no final mewline" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-25> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-25" ; rdfs:comment "repeating a @prefix changes pname definition" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-26> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-26" ; rdfs:comment "Variations on decimal canonicalization" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-subm-27> rdf:type rdft:TestTrigEval ; mf:name "trig-subm-27" ; rdfs:comment "Repeating @base changes base for relative IRI lookup" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-eval-bad-01> rdf:type rdft:TestTrigNegativeEval ; mf:name "trig-eval-bad-01" ; rdfs:comment "Bad IRI : good escape, bad charcater (negative evaluation test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-eval-bad-02> rdf:type rdft:TestTrigNegativeEval ; mf:name "trig-eval-bad-02" ; rdfs:comment "Bad IRI : hex 3C is < (negative evaluation test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-eval-bad-03> rdf:type rdft:TestTrigNegativeEval ; mf:name "trig-eval-bad-03" ; rdfs:comment "Bad IRI : hex 3E is (negative evaluation test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#trig-eval-bad-04> rdf:type rdft:TestTrigNegativeEval ; mf:name "trig-eval-bad-04" ; rdfs:comment "Bad IRI : {abc} (negative evaluation test)" ; rdft:approval rdft:Proposed ; mf:action ; . # tests from Dave Beckett # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c28 <#LITERAL_LONG2_with_REVERSE_SOLIDUS> rdf:type rdft:TestTrigEval ; mf:name "LITERAL_LONG2_with_REVERSE_SOLIDUS" ; rdfs:comment "REVERSE SOLIDUS at end of LITERAL_LONG2" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#trig-syntax-bad-LITERAL2_with_langtag_and_datatype> rdf:type rdft:TestTrigNegativeSyntax ; mf:name "trig-syntax-bad-num-05" ; rdfs:comment "Bad number format (negative test)" ; rdft:approval rdft:Proposed ; mf:action ; . <#two_LITERAL_LONG2s> rdf:type rdft:TestTrigEval ; mf:name "two_LITERAL_LONG2s" ; rdfs:comment "two LITERAL_LONG2s testing quote delimiter overrun" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . <#langtagged_LONG_with_subtag> rdf:type rdft:TestTrigEval ; mf:name "langtagged_LONG_with_subtag" ; rdfs:comment "langtagged LONG with subtag \"\"\"Cheers\"\"\"@en-UK" ; rdft:approval rdft:Proposed ; mf:action ; mf:result ; . # tests from David Robillard # http://www.w3.org/2011/rdf-wg/wiki/Turtle_Candidate_Recommendation_Comments#c21 <#trig-syntax-bad-blank-label-dot-end> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Blank node label must not end in dot" ; mf:name "trig-syntax-bad-blank-label-dot-end" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-number-dot-in-anon> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Dot delimeter may not appear in anonymous nodes" ; mf:name "trig-syntax-bad-number-dot-in-anon" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-ln-dash-start> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Local name must not begin with dash" ; mf:name "trig-syntax-bad-ln-dash-start" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-ln-escape> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Bad hex escape in local name" ; mf:name "trig-syntax-bad-ln-escape" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-ln-escape-start> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Bad hex escape at start of local name" ; mf:name "trig-syntax-bad-ln-escape-start" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-ns-dot-end> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Prefix must not end in dot" ; mf:name "trig-syntax-bad-ns-dot-end" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-ns-dot-start> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Prefix must not start with dot" ; mf:name "trig-syntax-bad-ns-dot-start" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-missing-ns-dot-end> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Prefix must not end in dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)" ; mf:name "trig-syntax-bad-missing-ns-dot-end" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-bad-missing-ns-dot-start> rdf:type rdft:TestTrigNegativeSyntax ; rdfs:comment "Prefix must not start with dot (error in triple, not prefix directive like trig-syntax-bad-ns-dot-end)" ; mf:name "trig-syntax-bad-missing-ns-dot-start" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-ln-dots> rdf:type rdft:TestTrigPositiveSyntax ; rdfs:comment "Dots in pname local names" ; mf:name "trig-syntax-ln-dots" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-ln-colons> rdf:type rdft:TestTrigPositiveSyntax ; rdfs:comment "Colons in pname local names" ; mf:name "trig-syntax-ln-colons" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-ns-dots> rdf:type rdft:TestTrigPositiveSyntax ; rdfs:comment "Dots in namespace names" ; mf:name "trig-syntax-ns-dots" ; rdft:approval rdft:Proposed ; mf:action . <#trig-syntax-blank-label> rdf:type rdft:TestTrigPositiveSyntax ; rdfs:comment "Characters allowed in blank node labels" ; mf:name "trig-syntax-blank-label" ; rdft:approval rdft:Proposed ; mf:action . RDF-Trine-1.007/t/data/trig-2013/negative_numeric.nq000644 000765 000024 00000000321 12164234713 021671 0ustar00gregstaff000000 000000 "-1"^^ . "-1"^^ . RDF-Trine-1.007/t/data/trig-2013/negative_numeric.trig000644 000765 000024 00000000171 12164234713 022223 0ustar00gregstaff000000 000000 { -1 .} { -1 .} RDF-Trine-1.007/t/data/trig-2013/nested_blankNodePropertyLists.nq000644 000765 000024 00000000521 12164234713 024372 0ustar00gregstaff000000 000000 _:b1 _:b2 . _:b2 . _:b1 . _:b3 _:b4 . _:b4 . _:b3 . RDF-Trine-1.007/t/data/trig-2013/nested_blankNodePropertyLists.trig000644 000765 000024 00000000411 12164234713 024717 0ustar00gregstaff000000 000000 {[ [ ] ; ].} {[ [ ] ; ].} RDF-Trine-1.007/t/data/trig-2013/nested_collection.nq000644 000765 000024 00000002027 12164234713 022047 0ustar00gregstaff000000 000000 _:outerEl1 . _:outerEl1 _:innerEl1 . _:innerEl1 "1"^^ . _:innerEl1 . _:outerEl1 . _:outerEl3 . _:outerEl3 _:innerEl3 . _:innerEl3 "1"^^ . _:innerEl3 . _:outerEl3 . RDF-Trine-1.007/t/data/trig-2013/nested_collection.trig000644 000765 000024 00000000177 12164234713 022402 0ustar00gregstaff000000 000000 { ((1)) .} { ((1)) .} RDF-Trine-1.007/t/data/trig-2013/numeric_with_leading_0.nq000644 000765 000024 00000000321 12164234713 022744 0ustar00gregstaff000000 000000 "01"^^ . "01"^^ . RDF-Trine-1.007/t/data/trig-2013/numeric_with_leading_0.trig000644 000765 000024 00000000171 12164234713 023276 0ustar00gregstaff000000 000000 { 01 .} { 01 .} RDF-Trine-1.007/t/data/trig-2013/objectList_with_two_objects.nq000644 000765 000024 00000000466 12164234713 024116 0ustar00gregstaff000000 000000 . . . . RDF-Trine-1.007/t/data/trig-2013/objectList_with_two_objects.trig000644 000765 000024 00000000315 12164234713 024436 0ustar00gregstaff000000 000000 { , .} { , .} RDF-Trine-1.007/t/data/trig-2013/old_style_base.trig000644 000765 000024 00000000226 12164234713 021670 0ustar00gregstaff000000 000000 @base . { .} { .} RDF-Trine-1.007/t/data/trig-2013/old_style_prefix.trig000644 000765 000024 00000000233 12164234713 022251 0ustar00gregstaff000000 000000 @prefix p: . {p:s .} {p:s .} RDF-Trine-1.007/t/data/trig-2013/percent_escaped_localName.nq000644 000765 000024 00000000235 12164234713 023450 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/percent_escaped_localName.trig000644 000765 000024 00000000237 12164234713 024001 0ustar00gregstaff000000 000000 @prefix p: . {p:%25 .} {p:%25 .} RDF-Trine-1.007/t/data/trig-2013/positive_numeric.nq000644 000765 000024 00000000321 12164234713 021731 0ustar00gregstaff000000 000000 "+1"^^ . "+1"^^ . RDF-Trine-1.007/t/data/trig-2013/positive_numeric.trig000644 000765 000024 00000000171 12164234713 022263 0ustar00gregstaff000000 000000 { +1 .} { +1 .} RDF-Trine-1.007/t/data/trig-2013/predicateObjectList_with_two_objectLists.nq000644 000765 000024 00000000472 12164234713 026570 0ustar00gregstaff000000 000000 . . . . RDF-Trine-1.007/t/data/trig-2013/predicateObjectList_with_two_objectLists.trig000644 000765 000024 00000000373 12164234713 027117 0ustar00gregstaff000000 000000 { ; .} { ; .} RDF-Trine-1.007/t/data/trig-2013/prefix_only_IRI.trig000644 000765 000024 00000000232 12164234713 021736 0ustar00gregstaff000000 000000 @prefix p: . {p: .} {p: .} RDF-Trine-1.007/t/data/trig-2013/prefix_reassigned_and_used.nq000644 000765 000024 00000000231 12164234713 023710 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/prefix_reassigned_and_used.trig000644 000765 000024 00000000273 12164234713 024245 0ustar00gregstaff000000 000000 @prefix p: . @prefix p: . {p:s .} {p:s .} RDF-Trine-1.007/t/data/trig-2013/prefix_with_non_leading_extras.trig000644 000765 000024 00000000301 12164234713 025145 0ustar00gregstaff000000 000000 @prefix a·̀ͯ‿.⁀: . {a·̀ͯ‿.⁀:s .} {a·̀ͯ‿.⁀:s .}RDF-Trine-1.007/t/data/trig-2013/prefix_with_PN_CHARS_BASE_character_boundaries.trig000644 000765 000024 00000000550 12164234713 027566 0ustar00gregstaff000000 000000 @prefix AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿿: . { AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿿:o .} { AZazÀÖØöø˿ͰͽͿ῿‌‍⁰↏Ⰰ⿯、퟿豈﷏ﷰ�𐀀󯿿:o .} RDF-Trine-1.007/t/data/trig-2013/prefixed_IRI_object.trig000644 000765 000024 00000000233 12164234713 022535 0ustar00gregstaff000000 000000 @prefix p: . { p:o .} { p:o .} RDF-Trine-1.007/t/data/trig-2013/prefixed_IRI_predicate.trig000644 000765 000024 00000000233 12164234713 023227 0ustar00gregstaff000000 000000 @prefix p: . { p:p .} { p:p .} RDF-Trine-1.007/t/data/trig-2013/prefixed_name_datatype.trig000644 000765 000024 00000000310 12164234713 023373 0ustar00gregstaff000000 000000 @prefix xsd: . { "1"^^xsd:integer .} { "1"^^xsd:integer .} RDF-Trine-1.007/t/data/trig-2013/README000644 000765 000024 00000003152 12164234713 016672 0ustar00gregstaff000000 000000 This README is for the W3C RDF Working Group's TriG test suite. This test suite contains three kinds of tests: Evaluation (rdft:TestTriGEval) - a pair of an input trig file and reference ntriples file. Positive syntax (rdft:TestTriGPositiveSyntax) - an input trig file with no syntax errors. Negative syntax (rdft:TestTriGNegativeSyntax) - an input trig file with at least one syntax error. The manifest.ttl file in this directory lists all of the tests in the RDF WG's TriG test suite. Each test is one of the above tests. All tests have a name (mf:name) and an input (mf:action). The Evaluation tests have an expected result (mf:result). • An implementation passes an Evaluation test if it parses the input into a graph, parses the expecte result into another graph, and those two graphs are isomorphic (see ). • An implementation passes a positive syntax test if it parses the input. • An implementation passes a negative syntax test if it fails to parse the input. The home of the test suite is . Per RFC 3986 section 5.1.3, the base IRI for parsing each file is the retrieval IRI for that file. For example, the tests trig-subm-01 and trig-subm-27 require relative IRI resolution against a base of and respectively. See http://www.w3.org/2011/rdf-wg/wiki/TriG_Test_Suite for more details. Eric Prud'hommeaux - 11 June 2013. Gregg Kellogg - 12 June 2013. RDF-Trine-1.007/t/data/trig-2013/repeated_semis_at_end.trig000644 000765 000024 00000000375 12164234713 023210 0ustar00gregstaff000000 000000 { ;; .} { ;; .} RDF-Trine-1.007/t/data/trig-2013/repeated_semis_not_at_end.nq000644 000765 000024 00000000235 12164234713 023534 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/repeated_semis_not_at_end.trig000644 000765 000024 00000000245 12164234713 024064 0ustar00gregstaff000000 000000 { ;; .} { ;; .} RDF-Trine-1.007/t/data/trig-2013/reserved_escaped_localName.nq000644 000765 000024 00000000303 12164234713 023623 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/reserved_escaped_localName.trig000644 000765 000024 00000000355 12164234713 024161 0ustar00gregstaff000000 000000 @prefix p: . {p:\_\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\%00 .} {p:\_\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\%00 .} RDF-Trine-1.007/t/data/trig-2013/sole_blankNodePropertyList.trig000644 000765 000024 00000000173 12164234713 024221 0ustar00gregstaff000000 000000 {[ ] .} {[ ] .} RDF-Trine-1.007/t/data/trig-2013/SPARQL_style_base.trig000644 000765 000024 00000000224 12164234713 022112 0ustar00gregstaff000000 000000 BASE { .} { .} RDF-Trine-1.007/t/data/trig-2013/SPARQL_style_prefix.trig000644 000765 000024 00000000231 12164234713 022473 0ustar00gregstaff000000 000000 PREFIX p: {p:s .} {p:s .} RDF-Trine-1.007/t/data/trig-2013/trig-eval-bad-01.trig000644 000765 000024 00000000151 12164234713 021531 0ustar00gregstaff000000 000000 # Bad IRI : good escape, bad charcater { .} RDF-Trine-1.007/t/data/trig-2013/trig-eval-bad-02.trig000644 000765 000024 00000000132 12164234713 021531 0ustar00gregstaff000000 000000 # Bad IRI : hex 3C is < { .} RDF-Trine-1.007/t/data/trig-2013/trig-eval-bad-03.trig000644 000765 000024 00000000132 12164234713 021532 0ustar00gregstaff000000 000000 # Bad IRI : hex 3E is > { .} RDF-Trine-1.007/t/data/trig-2013/trig-eval-bad-04.trig000644 000765 000024 00000000113 12164234713 021532 0ustar00gregstaff000000 000000 # Bad IRI { .} RDF-Trine-1.007/t/data/trig-2013/trig-eval-struct-01.nq000644 000765 000024 00000000215 12164234713 022001 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/trig-eval-struct-01.trig000644 000765 000024 00000000221 12164234713 022325 0ustar00gregstaff000000 000000 { .} { .} RDF-Trine-1.007/t/data/trig-2013/trig-eval-struct-02.nq000644 000765 000024 00000000442 12164234713 022004 0ustar00gregstaff000000 000000 . . . . RDF-Trine-1.007/t/data/trig-2013/trig-eval-struct-02.trig000644 000765 000024 00000000436 12164234713 022336 0ustar00gregstaff000000 000000 { ; ; . } { ; ; . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-01.nq000644 000765 000024 00000000411 12164234713 020474 0ustar00gregstaff000000 000000 _:genid1 . _:genid2 . RDF-Trine-1.007/t/data/trig-2013/trig-subm-01.trig000644 000765 000024 00000000101 12164234713 021017 0ustar00gregstaff000000 000000 @prefix : <#> . {[] :x :y .} {[] :x :y .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-02.nq000644 000765 000024 00000001133 12164234713 020477 0ustar00gregstaff000000 000000 . . . . . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-02.trig000644 000765 000024 00000000415 12164234713 021030 0ustar00gregstaff000000 000000 # Test @prefix and qnames @prefix : . @prefix a: . @prefix b: . { :a :b :c . a:a a:b a:c . :a a:a b:a . } { :a :b :c . a:a a:b a:c . :a a:a b:a . }RDF-Trine-1.007/t/data/trig-2013/trig-subm-03.nq000644 000765 000024 00000001111 12164234713 020474 0ustar00gregstaff000000 000000 . . . . . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-03.trig000644 000765 000024 00000000230 12164234713 021024 0ustar00gregstaff000000 000000 # Test , operator @prefix : . { :a :b :c, :d, :e . } { :a :b :c, :d, :e . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-04.nq000644 000765 000024 00000001111 12164234713 020475 0ustar00gregstaff000000 000000 . . . . . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-04.trig000644 000765 000024 00000000234 12164234713 021031 0ustar00gregstaff000000 000000 # Test ; operator @prefix : . { :a :b :c ; :d :e ; :f :g . } { :a :b :c ; :d :e ; :f :g . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-05.nq000644 000765 000024 00000000472 12164234713 020507 0ustar00gregstaff000000 000000 _:genid1 . _:genid2 . _:genid3 . _:genid4 . RDF-Trine-1.007/t/data/trig-2013/trig-subm-05.trig000644 000765 000024 00000000247 12164234713 021036 0ustar00gregstaff000000 000000 # Test empty [] operator; not allowed as predicate @prefix : . { [] :a :b . :c :d [] . } { [] :a :b . :c :d [] . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-06.nq000644 000765 000024 00000001164 12164234713 020507 0ustar00gregstaff000000 000000 _:genid1 . _:genid1 . _:genid2 . _:genid2 . _:genid3 . _:genid3 . _:genid4 . _:genid4 . RDF-Trine-1.007/t/data/trig-2013/trig-subm-06.trig000644 000765 000024 00000000307 12164234713 021034 0ustar00gregstaff000000 000000 # Test non empty [] operator; not allowed as predicate @prefix : . { [ :a :b ] :c :d . :e :f [ :g :h ] . } { [ :a :b ] :c :d . :e :f [ :g :h ] . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-07.nq000644 000765 000024 00000000357 12164234713 020513 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-07.trig000644 000765 000024 00000000170 12164234713 021033 0ustar00gregstaff000000 000000 # 'a' only allowed as a predicate @prefix : . {:a a :b .} {:a a :b .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-08.nq000644 000765 000024 00000001620 12164234713 020506 0ustar00gregstaff000000 000000 _:genid1 "banana" . _:genid1 . _:genid2 "apple" . _:genid2 _:genid1 . _:genid2 . _:genid3 "banana" . _:genid3 . _:genid4 "apple" . _:genid4 _:genid3 . _:genid4 . RDF-Trine-1.007/t/data/trig-2013/trig-subm-08.trig000644 000765 000024 00000000202 12164234713 021030 0ustar00gregstaff000000 000000 @prefix : . {:a :b ( "apple" "banana" ) .} {:a :b ( "apple" "banana" ) .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-09.nq000644 000765 000024 00000000401 12164234713 020503 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-09.trig000644 000765 000024 00000000140 12164234713 021032 0ustar00gregstaff000000 000000 @prefix : . {:a :b ( ) .} {:a :b ( ) .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-10.nq000644 000765 000024 00000001544 12164234713 020504 0ustar00gregstaff000000 000000 _:hasParent . _:genid1 . _:genid1 _:hasParent . _:genid1 "2"^^ . _:hasParent . _:genid3 . _:genid3 _:hasParent . _:genid3 "2"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-10.trig000644 000765 000024 00000000647 12164234713 021036 0ustar00gregstaff000000 000000 # Test integer datatyped literals using an OWL cardinality constraint @prefix owl: . # based on examples in the OWL Reference { _:hasParent a owl:ObjectProperty . [] a owl:Restriction ; owl:onProperty _:hasParent ; owl:maxCardinality 2 . } { _:hasParent a owl:ObjectProperty . [] a owl:Restriction ; owl:onProperty _:hasParent ; owl:maxCardinality 2 . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-11.nq000644 000765 000024 00000002215 12164234713 020501 0ustar00gregstaff000000 000000 "000000"^^ . "0"^^ . "000001"^^ . "2"^^ . "4"^^ . "000000"^^ . "0"^^ . "000001"^^ . "2"^^ . "4"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-11.trig000644 000765 000024 00000001156 12164234713 021033 0ustar00gregstaff000000 000000 { 000000 . 0 . 000001 . 2 . 4 . } { 000000 . 0 . 000001 . 2 . 4 . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-12.nq000644 000765 000024 00000001234 12164234713 020502 0ustar00gregstaff000000 000000 "a" . "b" . "c" . "d" . "a" . "b" . "c" . "d" . RDF-Trine-1.007/t/data/trig-2013/trig-subm-12.trig000644 000765 000024 00000000751 12164234713 021034 0ustar00gregstaff000000 000000 # Tests for - and _ in names, qnames @prefix ex1: . @prefix ex-2: . @prefix ex3_: . @prefix ex4-: . { ex1:foo-bar ex1:foo_bar "a" . ex-2:foo-bar ex-2:foo_bar "b" . ex3_:foo-bar ex3_:foo_bar "c" . ex4-:foo-bar ex4-:foo_bar "d" . } { ex1:foo-bar ex1:foo_bar "a" . ex-2:foo-bar ex-2:foo_bar "b" . ex3_:foo-bar ex3_:foo_bar "c" . ex4-:foo-bar ex4-:foo_bar "d" . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-13.nq000644 000765 000024 00000001270 12164234713 020503 0ustar00gregstaff000000 000000 "1" . "2" . "def" . "678" . "1" . "2" . "def" . "678" . RDF-Trine-1.007/t/data/trig-2013/trig-subm-13.trig000644 000765 000024 00000000622 12164234713 021032 0ustar00gregstaff000000 000000 # Tests for rdf:_ and other qnames starting with _ @prefix rdf: . @prefix ex: . @prefix : . { ex:foo rdf:_1 "1" . ex:foo rdf:_2 "2" . ex:foo :_abc "def" . ex:foo :_345 "678" . } { ex:foo rdf:_1 "1" . ex:foo rdf:_2 "2" . ex:foo :_abc "def" . ex:foo :_345 "678" . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-14.nq000644 000765 000024 00000000442 12164234713 020504 0ustar00gregstaff000000 000000 _:genid1 _:genid2 . . _:genid3 _:genid4 . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-14.trig000644 000765 000024 00000000206 12164234713 021031 0ustar00gregstaff000000 000000 # Test for : allowed @prefix : . { [] : [] . : : : . } { [] : [] . : : : . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-15.nq000644 000765 000024 00000000313 12164234713 020502 0ustar00gregstaff000000 000000 "a long\n\tliteral\nwith\nnewlines" . "a long\n\tliteral\nwith\nnewlines" . RDF-Trine-1.007/t/data/trig-2013/trig-subm-15.trig000644 000765 000024 00000000263 12164234713 021035 0ustar00gregstaff000000 000000 # Test long literal @prefix : . { :a :b """a long literal with newlines""" . } { :a :b """a long literal with newlines""" . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-16.nq000644 000765 000024 00000000720 12164234713 020505 0ustar00gregstaff000000 000000 "\nthis \ris a \U00012451long\t\nliteral\uABCD\n" . "\tThis \uABCDis\r \U00012451another\n\none\n" . "\nthis \ris a \U00012451long\t\nliteral\uABCD\n" . "\tThis \uABCDis\r \U00012451another\n\none\n" . RDF-Trine-1.007/t/data/trig-2013/trig-subm-16.trig000644 000765 000024 00000001475 12164234713 021044 0ustar00gregstaff000000 000000 @prefix : . { ## \U00015678 is a not a legal codepoint ## :a :b """\nthis \ris a \U00015678long\t ## literal\uABCD ## """ . ## ## :d :e """\tThis \uABCDis\r \U00015678another\n ## one ## """ . # \U00015678 is a not a legal codepoint # \U00012451 in Cuneiform numeric ban 3 :a :b """\nthis \ris a \U00012451long\t literal\uABCD """ . :d :e """\tThis \uABCDis\r \U00012451another\n one """ . } { ## \U00015678 is a not a legal codepoint ## :a :b """\nthis \ris a \U00015678long\t ## literal\uABCD ## """ . ## ## :d :e """\tThis \uABCDis\r \U00015678another\n ## one ## """ . # \U00015678 is a not a legal codepoint # \U00012451 in Cuneiform numeric ban 3 :a :b """\nthis \ris a \U00012451long\t literal\uABCD """ . :d :e """\tThis \uABCDis\r \U00012451another\n one """ . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-17.nq000644 000765 000024 00000000337 12164234713 020512 0ustar00gregstaff000000 000000 "1.0"^^ . "1.0"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-17.trig000644 000765 000024 00000000132 12164234713 021032 0ustar00gregstaff000000 000000 @prefix : . {:a :b 1.0 .} {:a :b 1.0 .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-18.nq000644 000765 000024 00000000402 12164234713 020504 0ustar00gregstaff000000 000000 "" . "" . "" . "" . RDF-Trine-1.007/t/data/trig-2013/trig-subm-18.trig000644 000765 000024 00000000174 12164234713 021041 0ustar00gregstaff000000 000000 @prefix : . { :a :b "" . :c :d """""" . } { :a :b "" . :c :d """""" . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-19.nq000644 000765 000024 00000001217 12164234713 020512 0ustar00gregstaff000000 000000 "1.0"^^ . "1"^^ . "1.0e0"^^ . "1.0"^^ . "1"^^ . "1.0e0"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-19.trig000644 000765 000024 00000000213 12164234713 021034 0ustar00gregstaff000000 000000 @prefix : . { :a :b 1.0 . :c :d 1 . :e :f 1.0e0 . } { :a :b 1.0 . :c :d 1 . :e :f 1.0e0 . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-20.nq000644 000765 000024 00000001225 12164234713 020501 0ustar00gregstaff000000 000000 "-1.0"^^ . "-1"^^ . "-1.0e0"^^ . "-1.0"^^ . "-1"^^ . "-1.0e0"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-20.trig000644 000765 000024 00000000221 12164234713 021023 0ustar00gregstaff000000 000000 @prefix : . { :a :b -1.0 . :c :d -1 . :e :f -1.0e0 . } { :a :b -1.0 . :c :d -1 . :e :f -1.0e0 . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-21.nq000644 000765 000024 00000000277 12164234713 020510 0ustar00gregstaff000000 000000 "John said: \"Hello World!\"" . "John said: \"Hello World!\"" . RDF-Trine-1.007/t/data/trig-2013/trig-subm-21.trig000644 000765 000024 00000000247 12164234713 021034 0ustar00gregstaff000000 000000 # Test long literal @prefix : . {:a :b """John said: "Hello World!\"""" .} {:a :b """John said: "Hello World!\"""" .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-22.nq000644 000765 000024 00000000674 12164234713 020512 0ustar00gregstaff000000 000000 "true"^^ . "false"^^ . "true"^^ . "false"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-22.trig000644 000765 000024 00000000171 12164234713 021031 0ustar00gregstaff000000 000000 @prefix : . { :a :b true . :c :d false . } { :a :b true . :c :d false . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-23.nq000644 000765 000024 00000002255 12164234713 020510 0ustar00gregstaff000000 000000 . . . . . . . . . . . . . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-23.trig000644 000765 000024 00000000763 12164234713 021041 0ustar00gregstaff000000 000000 # comment test @prefix : . { :a :b :c . # end of line comment :d # ignore me :e # and me :f # and me . :g :h #ignore me :i, # and me :j . # and me :k :l :m ; #ignore me :n :o ; # and me :p :q . # and me } { :a :b :c . # end of line comment :d # ignore me :e # and me :f # and me . :g :h #ignore me :i, # and me :j . # and me :k :l :m ; #ignore me :n :o ; # and me :p :q . # and me } RDF-Trine-1.007/t/data/trig-2013/trig-subm-24.nq000644 000765 000024 00000000253 12164234713 020505 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-24.trig000644 000765 000024 00000000203 12164234713 021027 0ustar00gregstaff000000 000000 # comment line with no final newline test @prefix : . {:a :b :c .} {:a :b :c .} #foo RDF-Trine-1.007/t/data/trig-2013/trig-subm-25.nq000644 000765 000024 00000000317 12164234713 020507 0ustar00gregstaff000000 000000 . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-25.trig000644 000765 000024 00000000252 12164234713 021034 0ustar00gregstaff000000 000000 @prefix foo: . @prefix foo: . {foo:blah foo:blah foo:blah .} {foo:blah foo:blah foo:blah .} RDF-Trine-1.007/t/data/trig-2013/trig-subm-26.nq000644 000765 000024 00000004707 12164234713 020517 0ustar00gregstaff000000 000000 "2.345"^^ . "1"^^ . "1.0"^^ . "1."^^ . "1.000000000"^^ . "2.3"^^ . "2.234000005"^^ . "2.2340000005"^^ . "2.23400000005"^^ . "2.234000000005"^^ . "2.2340000000005"^^ . "2.23400000000005"^^ . "2.234000000000005"^^ . "2.2340000000000005"^^ . "2.23400000000000005"^^ . "2.234000000000000005"^^ . "2.2340000000000000005"^^ . "2.23400000000000000005"^^ . "2.234000000000000000005"^^ . "2.2340000000000000000005"^^ . "2.23400000000000000000005"^^ . "1.2345678901234567890123457890"^^ . RDF-Trine-1.007/t/data/trig-2013/trig-subm-26.trig000644 000765 000024 00000004713 12164234713 021043 0ustar00gregstaff000000 000000 { "2.345"^^ . "1"^^ . "1.0"^^ . "1."^^ . "1.000000000"^^ . "2.3"^^ . "2.234000005"^^ . "2.2340000005"^^ . "2.23400000005"^^ . "2.234000000005"^^ . "2.2340000000005"^^ . "2.23400000000005"^^ . "2.234000000000005"^^ . "2.2340000000000005"^^ . "2.23400000000000005"^^ . "2.234000000000000005"^^ . "2.2340000000000000005"^^ . "2.23400000000000000005"^^ . "2.234000000000000000005"^^ . "2.2340000000000000000005"^^ . "2.23400000000000000000005"^^ . "1.2345678901234567890123457890"^^ . } RDF-Trine-1.007/t/data/trig-2013/trig-subm-27.nq000644 000765 000024 00000000747 12164234713 020520 0ustar00gregstaff000000 000000 . . . . . RDF-Trine-1.007/t/data/trig-2013/trig-subm-27.trig000644 000765 000024 00000000656 12164234713 021046 0ustar00gregstaff000000 000000 # In-scope base URI is at this point { .} @base . # In-scope base URI is http://example.org/ns/ at this point { .} @base . # In-scope base URI is http://example.org/ns/foo/ at this point { .} @prefix : . {:a4 :b4 :c4 .} @prefix : . {:a5 :b5 :c5 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-base-01.trig000644 000765 000024 00000000035 12164234713 023041 0ustar00gregstaff000000 000000 # @base without URI. @base . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-base-02.trig000644 000765 000024 00000000061 12164234713 023041 0ustar00gregstaff000000 000000 # @base in wrong case. @BASE . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-base-03.trig000644 000765 000024 00000000114 12164234713 023041 0ustar00gregstaff000000 000000 # FULL STOP used after SPARQL BASE BASE . {

.} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-base-04.trig000644 000765 000024 00000000064 12164234713 023046 0ustar00gregstaff000000 000000 # @base inside graph { @base . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-base-05.trig000644 000765 000024 00000000060 12164234713 023043 0ustar00gregstaff000000 000000 # BASE inside graph { BASE }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-blank-label-dot-end.trig000644 000765 000024 00000000056 12164234713 025410 0ustar00gregstaff000000 000000 @prefix : . {_:b1. :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-esc-01.trig000644 000765 000024 00000000105 12164234713 022677 0ustar00gregstaff000000 000000 # Bad string escape { "a\zb" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-esc-02.trig000644 000765 000024 00000000107 12164234713 022702 0ustar00gregstaff000000 000000 # Bad string escape { "\uWXYZ" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-esc-03.trig000644 000765 000024 00000000113 12164234713 022700 0ustar00gregstaff000000 000000 # Bad string escape { "\U0000WXYZ" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-esc-04.trig000644 000765 000024 00000000113 12164234713 022701 0ustar00gregstaff000000 000000 # Bad string escape { "\U0000WXYZ" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-kw-01.trig000644 000765 000024 00000000052 12164234713 022547 0ustar00gregstaff000000 000000 @prefix : . {:s A :C .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-kw-02.trig000644 000765 000024 00000000052 12164234713 022550 0ustar00gregstaff000000 000000 @prefix : . {a :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-kw-03.trig000644 000765 000024 00000000052 12164234713 022551 0ustar00gregstaff000000 000000 @prefix : . {:s :p a .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-kw-04.trig000644 000765 000024 00000000055 12164234713 022555 0ustar00gregstaff000000 000000 @prefix : . {true :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-kw-05.trig000644 000765 000024 00000000055 12164234713 022556 0ustar00gregstaff000000 000000 @prefix : . {:s true :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-lang-01.trig000644 000765 000024 00000000104 12164234713 023045 0ustar00gregstaff000000 000000 # Bad lang tag { "string"@1 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-LITERAL2_with_langtag_and_datatype.trig000644 000765 000024 00000000200 12164234713 030326 0ustar00gregstaff000000 000000 { "value"@en^^ .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-ln-dash-start.trig000644 000765 000024 00000000054 12164234713 024373 0ustar00gregstaff000000 000000 @prefix : . {:s :p :-o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-ln-escape-start.trig000644 000765 000024 00000000055 12164234713 024715 0ustar00gregstaff000000 000000 @prefix : . {:s :p :%2o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-ln-escape.trig000644 000765 000024 00000000055 12164234713 023562 0ustar00gregstaff000000 000000 @prefix : . {:s :p :o%2 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-missing-ns-dot-end.trig000644 000765 000024 00000000037 12164234713 025332 0ustar00gregstaff000000 000000 {valid:s valid:p invalid.:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-missing-ns-dot-start.trig000644 000765 000024 00000000053 12164234713 025717 0ustar00gregstaff000000 000000 {.undefined:s .undefined:p .undefined:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-01.trig000644 000765 000024 00000000122 12164234713 023750 0ustar00gregstaff000000 000000 # {} fomulae not in Turtle @prefix : . { :a :q :c . } :p :z . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-02.trig000644 000765 000024 00000000075 12164234713 023760 0ustar00gregstaff000000 000000 # = is not Turtle @prefix : . {:a = :b .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-03.trig000644 000765 000024 00000000155 12164234713 023760 0ustar00gregstaff000000 000000 # N3 paths @prefix : . @prefix ns: . { :x. ns:p. ns:q :p :z . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-04.trig000644 000765 000024 00000000136 12164234713 023760 0ustar00gregstaff000000 000000 # N3 paths @prefix : . @prefix ns: . {:x^ns:p :p :z .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-05.trig000644 000765 000024 00000000077 12164234713 023765 0ustar00gregstaff000000 000000 # N3 is...of @prefix : . {:z is :p of :x .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-06.trig000644 000765 000024 00000000076 12164234713 023765 0ustar00gregstaff000000 000000 # = is not Turtle @prefix : . {:a.:b.:c .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-07.trig000644 000765 000024 00000000065 12164234713 023764 0ustar00gregstaff000000 000000 # @keywords is not Turtle @keywords a . {x a Item .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-08.trig000644 000765 000024 00000000065 12164234713 023765 0ustar00gregstaff000000 000000 # @keywords is not Turtle @keywords a . {x a Item .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-09.trig000644 000765 000024 00000000076 12164234713 023770 0ustar00gregstaff000000 000000 # => is not Turtle @prefix : . {:s => :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-10.trig000644 000765 000024 00000000076 12164234713 023760 0ustar00gregstaff000000 000000 # <= is not Turtle @prefix : . {:s <= :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-11.trig000644 000765 000024 00000000105 12164234713 023752 0ustar00gregstaff000000 000000 # @forSome is not Turtle @prefix : . @forSome :x . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-12.trig000644 000765 000024 00000000103 12164234713 023751 0ustar00gregstaff000000 000000 # @forAll is not Turtle @prefix : . @forAll :x . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-n3-extras-13.trig000644 000765 000024 00000000064 12164234713 023760 0ustar00gregstaff000000 000000 # @keywords is not Turtle @keywords . {x @a Item .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-ns-dot-end.trig000644 000765 000024 00000000070 12164234713 023660 0ustar00gregstaff000000 000000 @prefix eg. : . {eg.:s eg.:p eg.:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-ns-dot-start.trig000644 000765 000024 00000000070 12164234713 024247 0ustar00gregstaff000000 000000 @prefix .eg : . {.eg:s .eg:p .eg:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-num-01.trig000644 000765 000024 00000000062 12164234713 022726 0ustar00gregstaff000000 000000 { 123.abc .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-num-02.trig000644 000765 000024 00000000057 12164234713 022733 0ustar00gregstaff000000 000000 { 123e .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-num-03.trig000644 000765 000024 00000000061 12164234713 022727 0ustar00gregstaff000000 000000 { 123abc .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-num-04.trig000644 000765 000024 00000000060 12164234713 022727 0ustar00gregstaff000000 000000 { 0x123 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-num-05.trig000644 000765 000024 00000000056 12164234713 022735 0ustar00gregstaff000000 000000 { +-1 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-number-dot-in-anon.trig000644 000765 000024 00000000073 12164234713 025324 0ustar00gregstaff000000 000000 @prefix : . { :s :p [ :p1 27. ] . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-pname-01.trig000644 000765 000024 00000000102 12164234713 023222 0ustar00gregstaff000000 000000 # ~ must be escaped. @prefix : . {:a~b :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-pname-02.trig000644 000765 000024 00000000076 12164234713 023235 0ustar00gregstaff000000 000000 # Bad %-sequence @prefix : . {:a%2 :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-pname-03.trig000644 000765 000024 00000000106 12164234713 023230 0ustar00gregstaff000000 000000 # No \u (x39 is "9") @prefix : . {:a\u0039 :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-01.trig000644 000765 000024 00000000052 12164234713 023423 0ustar00gregstaff000000 000000 # No prefix {:s "x" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-02.trig000644 000765 000024 00000000160 12164234713 023424 0ustar00gregstaff000000 000000 # No prefix @prefix rdf: . { rdf:type :C .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-03.trig000644 000765 000024 00000000045 12164234713 023427 0ustar00gregstaff000000 000000 # @prefix without URI. @prefix ex: . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-04.trig000644 000765 000024 00000000074 12164234713 023432 0ustar00gregstaff000000 000000 # @prefix without prefix name . @prefix . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-05.trig000644 000765 000024 00000000062 12164234713 023430 0ustar00gregstaff000000 000000 # @prefix without : @prefix x . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-06.trig000644 000765 000024 00000000075 12164234713 023435 0ustar00gregstaff000000 000000 # @prefix inside graph { @prefix ex: . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-prefix-07.trig000644 000765 000024 00000000071 12164234713 023432 0ustar00gregstaff000000 000000 # PREFIX inside graph { PREFIX ex: } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-01.trig000644 000765 000024 00000000056 12164234713 023440 0ustar00gregstaff000000 000000 @prefix : . {:s :p "abc' .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-02.trig000644 000765 000024 00000000056 12164234713 023441 0ustar00gregstaff000000 000000 @prefix : . {:s :p 'abc" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-03.trig000644 000765 000024 00000000060 12164234713 023435 0ustar00gregstaff000000 000000 @prefix : . {:s :p '''abc' .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-04.trig000644 000765 000024 00000000062 12164234713 023440 0ustar00gregstaff000000 000000 @prefix : . {:s :p """abc''' .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-05.trig000644 000765 000024 00000000122 12164234713 023436 0ustar00gregstaff000000 000000 # Long literal with missing end @prefix : . { :s :p """abc def }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-06.trig000644 000765 000024 00000000115 12164234713 023441 0ustar00gregstaff000000 000000 # Long literal with 4" @prefix : . {:s :p """abc""""@en .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-string-07.trig000644 000765 000024 00000000115 12164234713 023442 0ustar00gregstaff000000 000000 # Long literal with 4' @prefix : . {:s :p '''abc''''@en .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-02.trig000644 000765 000024 00000000075 12164234713 023460 0ustar00gregstaff000000 000000 # Turtle is not N3 = . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-03.trig000644 000765 000024 00000000151 12164234713 023454 0ustar00gregstaff000000 000000 # Turtle is not NQuads . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-04.trig000644 000765 000024 00000000135 12164234713 023457 0ustar00gregstaff000000 000000 # TriG does not allow literals-as-subjects {"hello" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-05.trig000644 000765 000024 00000000137 12164234713 023462 0ustar00gregstaff000000 000000 # TriG does not allow literals-as-predicates { "hello" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-06.trig000644 000765 000024 00000000130 12164234713 023454 0ustar00gregstaff000000 000000 # Trig does not allow bnodes-as-predicates { [] .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-07.trig000644 000765 000024 00000000131 12164234713 023456 0ustar00gregstaff000000 000000 # TriG does not allow bnodes-as-predicates { _:p .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-09.trig000644 000765 000024 00000000116 12164234713 023463 0ustar00gregstaff000000 000000 # Too many DOT { . .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-10.trig000644 000765 000024 00000000216 12164234713 023454 0ustar00gregstaff000000 000000 # Too many DOT { . . . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-12.trig000644 000765 000024 00000000051 12164234713 023453 0ustar00gregstaff000000 000000 { } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-13.trig000644 000765 000024 00000000051 12164234713 023454 0ustar00gregstaff000000 000000 { } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-14.trig000644 000765 000024 00000000106 12164234713 023456 0ustar00gregstaff000000 000000 # Literal as subject {"abc" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-15.trig000644 000765 000024 00000000110 12164234713 023452 0ustar00gregstaff000000 000000 # Literal as predicate { "abc" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-16.trig000644 000765 000024 00000000103 12164234713 023455 0ustar00gregstaff000000 000000 # BNode as predicate { [] .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-struct-17.trig000644 000765 000024 00000000104 12164234713 023457 0ustar00gregstaff000000 000000 # BNode as predicate { _:a .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-turtle-01.trig000644 000765 000024 00000000000 12164234713 023436 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-uri-01.trig000644 000765 000024 00000000125 12164234713 022726 0ustar00gregstaff000000 000000 # Bad IRI : space. { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-uri-02.trig000644 000765 000024 00000000133 12164234713 022726 0ustar00gregstaff000000 000000 # Bad IRI : bad escape { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-uri-03.trig000644 000765 000024 00000000135 12164234713 022731 0ustar00gregstaff000000 000000 # Bad IRI : bad escape { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-uri-04.trig000644 000765 000024 00000000151 12164234713 022730 0ustar00gregstaff000000 000000 # Bad IRI : character escapes not allowed. { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bad-uri-05.trig000644 000765 000024 00000000151 12164234713 022731 0ustar00gregstaff000000 000000 # Bad IRI : character escapes not allowed. { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-base-01.trig000644 000765 000024 00000000032 12164234713 022312 0ustar00gregstaff000000 000000 @base . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-base-02.trig000644 000765 000024 00000000027 12164234713 022317 0ustar00gregstaff000000 000000 BASE RDF-Trine-1.007/t/data/trig-2013/trig-syntax-base-03.trig000644 000765 000024 00000000052 12164234713 022316 0ustar00gregstaff000000 000000 @base . {

.} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-base-04.trig000644 000765 000024 00000000047 12164234713 022323 0ustar00gregstaff000000 000000 base {

.} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-blank-label.trig000644 000765 000024 00000000227 12164234713 023334 0ustar00gregstaff000000 000000 @prefix : . { _:0b :p :o . # Starts with digit _:_b :p :o . # Starts with underscore _:b.0 :p :o . # Contains dot, ends with digit } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-01.trig000644 000765 000024 00000000053 12164234713 022472 0ustar00gregstaff000000 000000 @prefix : . {[] :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-02.trig000644 000765 000024 00000000053 12164234713 022473 0ustar00gregstaff000000 000000 @prefix : . {:s :p [] .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-03.trig000644 000765 000024 00000000062 12164234713 022474 0ustar00gregstaff000000 000000 @prefix : . {:s :p [ :q :o ] .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-04.trig000644 000765 000024 00000000076 12164234713 022502 0ustar00gregstaff000000 000000 @prefix : . {:s :p [ :q1 :o1 ; :q2 :o2 ] .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-05.trig000644 000765 000024 00000000076 12164234713 022503 0ustar00gregstaff000000 000000 @prefix : . {[ :q1 :o1 ; :q2 :o2 ] :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-06.trig000644 000765 000024 00000000055 12164234713 022501 0ustar00gregstaff000000 000000 @prefix : . {_:a :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-07.trig000644 000765 000024 00000000072 12164234713 022501 0ustar00gregstaff000000 000000 @prefix : . {:s :p _:a . _:a :p :o . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-08.trig000644 000765 000024 00000000055 12164234713 022503 0ustar00gregstaff000000 000000 @prefix : . {[ :p :o ] .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-09.trig000644 000765 000024 00000000075 12164234713 022506 0ustar00gregstaff000000 000000 @prefix : . {[ :p :o1,:2 ] . :s :p :o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-bnode-10.trig000644 000765 000024 00000000122 12164234713 022467 0ustar00gregstaff000000 000000 @prefix : . { :s1 :p :o . [ :p1 :o1 ; :p2 :o2 ] . :s2 :p :o . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-datatypes-01.trig000644 000765 000024 00000000123 12164234713 023377 0ustar00gregstaff000000 000000 @prefix xsd: . {

"123"^^xsd:byte .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-datatypes-02.trig000644 000765 000024 00000000226 12164234713 023404 0ustar00gregstaff000000 000000 @prefix rdf: . @prefix xsd: . {

"123"^^xsd:string .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-file-01.trig000644 000765 000024 00000000000 12164234713 022312 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/trig-2013/trig-syntax-file-02.trig000644 000765 000024 00000000015 12164234713 022321 0ustar00gregstaff000000 000000 #Empty file. RDF-Trine-1.007/t/data/trig-2013/trig-syntax-file-03.trig000644 000765 000024 00000000037 12164234713 022326 0ustar00gregstaff000000 000000 #One comment, one empty line. RDF-Trine-1.007/t/data/trig-2013/trig-syntax-kw-01.trig000644 000765 000024 00000000021 12164234713 022017 0ustar00gregstaff000000 000000 {

true .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-kw-02.trig000644 000765 000024 00000000022 12164234713 022021 0ustar00gregstaff000000 000000 {

false .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-kw-03.trig000644 000765 000024 00000000052 12164234713 022025 0ustar00gregstaff000000 000000 @prefix : . {:s a :C .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-lists-01.trig000644 000765 000024 00000000053 12164234713 022541 0ustar00gregstaff000000 000000 @prefix : . {:s :p () .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-lists-02.trig000644 000765 000024 00000000063 12164234713 022543 0ustar00gregstaff000000 000000 @prefix : . {:s :p (1 "2" :o) .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-lists-03.trig000644 000765 000024 00000000055 12164234713 022545 0ustar00gregstaff000000 000000 @prefix : . {(1) :p (1) .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-lists-04.trig000644 000765 000024 00000000057 12164234713 022550 0ustar00gregstaff000000 000000 @prefix : . {(()) :p (()) .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-lists-05.trig000644 000765 000024 00000000101 12164234713 022537 0ustar00gregstaff000000 000000 @prefix : . {(1 2 (1 2)) :p (( "a") "b" :o) .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-ln-colons.trig000644 000765 000024 00000000165 12164234713 023075 0ustar00gregstaff000000 000000 @prefix : . { :s:1 :p:1 :o:1 . :s::2 :p::2 :o::2 . :3:s :3:p :3 . ::s ::p ::o . ::s: ::p: ::o: . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-ln-dots.trig000644 000765 000024 00000000124 12164234713 022544 0ustar00gregstaff000000 000000 @prefix : . { :s.1 :p.1 :o.1 . :s..2 :p..2 :o..2. :3.s :3.p :3. } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-ns-dots.trig000644 000765 000024 00000000067 12164234713 022561 0ustar00gregstaff000000 000000 @prefix e.g: . {e.g:s e.g:p e.g:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-01.trig000644 000765 000024 00000000020 12164234713 022665 0ustar00gregstaff000000 000000 {

123 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-02.trig000644 000765 000024 00000000021 12164234713 022667 0ustar00gregstaff000000 000000 {

-123 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-03.trig000644 000765 000024 00000000021 12164234713 022670 0ustar00gregstaff000000 000000 {

+123 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-04.trig000644 000765 000024 00000000050 12164234713 022673 0ustar00gregstaff000000 000000 # This is a decimal. {

123.0 . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-05.trig000644 000765 000024 00000000045 12164234713 022700 0ustar00gregstaff000000 000000 # This is a decimal. {

.1 . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-06.trig000644 000765 000024 00000000051 12164234713 022676 0ustar00gregstaff000000 000000 # This is a decimal. {

-123.0 . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-07.trig000644 000765 000024 00000000051 12164234713 022677 0ustar00gregstaff000000 000000 # This is a decimal. {

+123.0 . } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-08.trig000644 000765 000024 00000000044 12164234713 022702 0ustar00gregstaff000000 000000 # This is an integer {

123.} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-09.trig000644 000765 000024 00000000024 12164234713 022701 0ustar00gregstaff000000 000000 {

123.0e1 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-10.trig000644 000765 000024 00000000024 12164234713 022671 0ustar00gregstaff000000 000000 {

-123e-1 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-number-11.trig000644 000765 000024 00000000024 12164234713 022672 0ustar00gregstaff000000 000000 {

123.E+1 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-pname-esc-01.trig000644 000765 000024 00000000124 12164234713 023252 0ustar00gregstaff000000 000000 @prefix : . {:s :p :\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-pname-esc-02.trig000644 000765 000024 00000000133 12164234713 023253 0ustar00gregstaff000000 000000 @prefix : . {:s :p :0123\~\.\-\!\$\&\'\(\)\*\+\,\;\=\/\?\#\@\_\%AA123 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-pname-esc-03.trig000644 000765 000024 00000000064 12164234713 023257 0ustar00gregstaff000000 000000 @prefix : . {:xyz\~ :abc\.: : .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-01.trig000644 000765 000024 00000000036 12164234713 022701 0ustar00gregstaff000000 000000 @prefix : . RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-02.trig000644 000765 000024 00000000033 12164234713 022677 0ustar00gregstaff000000 000000 PreFIX : RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-03.trig000644 000765 000024 00000000052 12164234713 022701 0ustar00gregstaff000000 000000 PREFIX : {:s :p :123 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-04.trig000644 000765 000024 00000000055 12164234713 022705 0ustar00gregstaff000000 000000 @prefix : . {:s :p :%20 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-05.trig000644 000765 000024 00000000050 12164234713 022701 0ustar00gregstaff000000 000000 @prefix : . {: : : .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-06.trig000644 000765 000024 00000000171 12164234713 022706 0ustar00gregstaff000000 000000 # colon is a legal pname character @prefix : . @prefix x: . {:a:b:c x:d:e:f :::: .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-07.trig000644 000765 000024 00000000126 12164234713 022707 0ustar00gregstaff000000 000000 # dash is a legal pname character @prefix x: . {x:a-b-c x:p x:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-08.trig000644 000765 000024 00000000132 12164234713 022705 0ustar00gregstaff000000 000000 # underscore is a legal pname character @prefix x: . {x:_ x:p_1 x:o .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-prefix-09.trig000644 000765 000024 00000000140 12164234713 022705 0ustar00gregstaff000000 000000 # percents @prefix : . @prefix x: . {:a%3E x:%25 :a%3Eb .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-str-esc-01.trig000644 000765 000024 00000000060 12164234713 022761 0ustar00gregstaff000000 000000 { "a\n" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-str-esc-02.trig000644 000765 000024 00000000065 12164234713 022767 0ustar00gregstaff000000 000000 { "a\u0020b" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-str-esc-03.trig000644 000765 000024 00000000071 12164234713 022765 0ustar00gregstaff000000 000000 { "a\U00000020b" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-01.trig000644 000765 000024 00000000063 12164234713 022712 0ustar00gregstaff000000 000000 { "string" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-02.trig000644 000765 000024 00000000066 12164234713 022716 0ustar00gregstaff000000 000000 { "string"@en .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-03.trig000644 000765 000024 00000000071 12164234713 022713 0ustar00gregstaff000000 000000 { "string"@en-uk .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-04.trig000644 000765 000024 00000000063 12164234713 022715 0ustar00gregstaff000000 000000 { 'string' .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-05.trig000644 000765 000024 00000000066 12164234713 022721 0ustar00gregstaff000000 000000 { 'string'@en .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-06.trig000644 000765 000024 00000000071 12164234713 022716 0ustar00gregstaff000000 000000 { 'string'@en-uk .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-07.trig000644 000765 000024 00000000076 12164234713 022724 0ustar00gregstaff000000 000000 { """abc""def''ghi""" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-08.trig000644 000765 000024 00000000070 12164234713 022717 0ustar00gregstaff000000 000000 { """abc def""" .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-09.trig000644 000765 000024 00000000070 12164234713 022720 0ustar00gregstaff000000 000000 { '''abc def''' .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-10.trig000644 000765 000024 00000000073 12164234713 022713 0ustar00gregstaff000000 000000 { """abc def"""@en .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-string-11.trig000644 000765 000024 00000000073 12164234713 022714 0ustar00gregstaff000000 000000 { '''abc def'''@en .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-01.trig000644 000765 000024 00000000062 12164234713 022727 0ustar00gregstaff000000 000000 @prefix : . {:s :p :o1 , :o2 .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-02.trig000644 000765 000024 00000000072 12164234713 022731 0ustar00gregstaff000000 000000 @prefix : . {:s :p1 :o1 ; :p2 :o2 . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-03.trig000644 000765 000024 00000000077 12164234713 022737 0ustar00gregstaff000000 000000 @prefix : . {:s :p1 :o1 ; :p2 :o2 ; . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-04.trig000644 000765 000024 00000000077 12164234713 022740 0ustar00gregstaff000000 000000 @prefix : . {:s :p1 :o1 ;; :p2 :o2 . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-05.trig000644 000765 000024 00000000100 12164234713 022724 0ustar00gregstaff000000 000000 @prefix : . {:s :p1 :o1 ; :p2 :o2 ;; . }RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-06.trig000644 000765 000024 00000000104 12164234713 022731 0ustar00gregstaff000000 000000 # No DOT { } RDF-Trine-1.007/t/data/trig-2013/trig-syntax-struct-07.trig000644 000765 000024 00000000112 12164234713 022731 0ustar00gregstaff000000 000000 # Trailing ; { ;} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-uri-01.trig000644 000765 000024 00000000075 12164234713 022206 0ustar00gregstaff000000 000000 { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-uri-02.trig000644 000765 000024 00000000125 12164234713 022203 0ustar00gregstaff000000 000000 # x53 is capital S { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-uri-03.trig000644 000765 000024 00000000131 12164234713 022201 0ustar00gregstaff000000 000000 # x53 is capital S { .} RDF-Trine-1.007/t/data/trig-2013/trig-syntax-uri-04.trig000644 000765 000024 00000000244 12164234713 022207 0ustar00gregstaff000000 000000 # IRI with all chars in it. { .} RDF-Trine-1.007/t/data/trig-2013/two_LITERAL_LONG2s.nq000644 000765 000024 00000000227 12164234713 021423 0ustar00gregstaff000000 000000 "first long literal" . "second long literal" . RDF-Trine-1.007/t/data/trig-2013/two_LITERAL_LONG2s.trig000644 000765 000024 00000000250 12164234713 021746 0ustar00gregstaff000000 000000 # Test long literal twice to ensure it does not over-quote @prefix : . { :a :b """first long literal""" . :c :d """second long literal""" . } RDF-Trine-1.007/t/data/trig-2013/underscore_in_localName.nq000644 000765 000024 00000000102 12164234713 023154 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/trig-2013/underscore_in_localName.trig000644 000765 000024 00000000123 12164234713 023506 0ustar00gregstaff000000 000000 @prefix p: . {p:s_ .} RDF-Trine-1.007/t/data/rdfxml-w3c/amp-in-url/000755 000765 000024 00000000000 12171744443 020434 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/000755 000765 000024 00000000000 12171744443 020451 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes-intensional/000755 000765 000024 00000000000 12171744442 022771 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/horst-01/000755 000765 000024 00000000000 12171744443 020030 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/Manifest.rdf000644 000765 000024 00000701741 11032731046 020716 0ustar00gregstaff000000 000000 APPROVED APPROVED The claim that xsd:integer is a subClassOF xsd:decimal is not incompatible with using the intensional semantics for datatypes. APPROVED The claim that xsd:integer is a subClassOF xsd:string is incompatible with using the intensional semantics for datatypes. APPROVED A simple datatype production; a language+datatype production. Simply duplicate the constructs under http://www.w3.org/2000/10/rdf-tests/rdfcore/ntriples/test.nt APPROVED A parser is not required to know about well-formed datatyped literals. APPROVED Without datatype knowledge, a 'badly-formed' datatyped literal cannot be detected. APPROVED With appropriate datatype knowledge, a 'badly-formed' datatyped literal can be detected. APPROVED Demonstrating the semantic equivalence of two lexical forms of the same datatyped value. APPROVED As semantic-equivalence-within-type-1; the entailment works both ways. OBSOLETE This test used to claim: Language attributes on a datatyped literal make them distinct for the purposes of non-datatype-aware entailments. There are no longer language tags on datatyped literals. OBSOLETE This test used to claim: Language attributes on a datatyped literal make them distinct for the purposes of non-datatype-aware entailments. There are no longer language tags on datatyped literals. OBSOLETE Obsoleted: datatyped literals have no language tag. OBSOLETE Obsoleted: datatyped literals have no language tag. OBSOLETE Obsoleted: datatyped literals have no language tag. APPROVED Members of different datatypes may be semantically equivalent. APPROVED Where sufficient DT knowledge is available, a range clash may be detected; the document then contains a contradiction. OBSOLETE Language does not affect the denotation of rdf:XMLLiteral. NOTE that this is a change from previous versions of the spec. Langauge tags do not live on XMLLiterals. APPROVED From decisions listed in http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2002Oct/0098.html APPROVED From decisions listed in http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2002Oct/0098.html APPROVED From decisions listed in http://lists.w3.org/Archives/Public/w3c-rdfcore-wg/2002Oct/0098.html APPROVED A plain literal denotes the same thing as its corresponding xsd:string, where one exists. APPROVED rdfs:subClassOf has intensional semantics, not extensional. APPROVED rdfs:subPropertyOf has intensional semantics, not extensional. APPROVED Test that ICEXT(I(rdfs:Literal)) is a subset of LV. APPROVED Does the treatment of literals conform to charmod ? Test for success of legal Normal Form C literal WITHDRAWN Does the treatment of literals conform to charmod ? Test for failure for literal not in Normal Form C This test case has been WITHDRAWN in light of changes to NFC handling in concepts WITHDRAWN Does the treatment of literals conform to charmod ? Test for failure for literal not in Normal Form C This test case has been WITHDRAWN in light of changes to NFC handling in concepts APPROVED A uriref is allowed to match non-US ASCII forms conforming to Unicode Normal Form C. No escaping algorithm is applied. APPROVED A uriref which already has % escaping is permitted. No unescaping algorithm is applied. OBSOLETE Test for failure for uriref not in Normal Form C. APPROVED An international URI ref and its %-escaped form label different nodes in the graph. No model theoretic relationship holds between them. APPROVED An international URI ref and its %-escaped form label different nodes in the graph. No model theoretic relationship holds between them. APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED OBSOLETED APPROVED APPROVED APPROVED APPROVED A surrounding rdf:RDF element is no longer mandatory. OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF OBSOLETE This is again legal RDF APPROVED OBSOLETE APPROVED APPROVED APPROVED APPROVED OBSOLETE rdf:aboutEach no longer valid. OBSOLETE APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED This test shows the treatment of non-ASCII characters in the value of rdf:ID attribute. APPROVED This test shows the treatment of non-ASCII characters in the value of rdf:about attribute. APPROVED The question posed to the RDF WG was: should an RDF document containing multiple rdf:_n properties (with the same n) on an element be rejected as illegal? The WG decided that a parser should accept that case as legal RDF. APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED Like rdfms-empty-property-elements/test001.rdf but with a processing instruction as the only content of the otherwise empty element. APPROVED Like rdfms-empty-property-elements/test001.rdf but with a comment as the only content of the otherwise empty element. APPROVED APPROVED APPROVED APPROVED APPROVED NOT_APPROVED NOT_APPROVED NOT_APPROVED NOT_APPROVED NOT_APPROVED OBSOLETE OBSOLETE OBSOLETE OBSOLETE OBSOLETE OBSOLETE OBSOLETE rdf:bagID is forbidden on property element prop with an rdf:resource or rdf:parseType attribute: the following is in error. OBSOLETE OBSOLETE OBSOLETE Two property attributes and a property element on an rdf:Description. Since the property attributes are not ordered under document order, two different n-triples files corresponding to both possible orderings are permitted. One of test010a and test010b SHOULD pass, at least. OBSOLETE Two property attributes and a property element on an rdf:Description. Since the property attributes are not ordered under document order, two different n-triples files corresponding to both possible orderings are permitted. OBSOLETE Two property attributes and a property element on an rdf:Description. Since the property attributes are not ordered under document order, two different n-triples files corresponding to both possible orderings are permitted. One of test011a and test011b SHOULD pass, at least. OBSOLETE Two property attributes and a property element on an rdf:Description. Since the property attributes are not ordered under document order, two different n-triples files corresponding to both possible orderings are permitted. OBSOLETE Two property attributes and a property element on an rdf:Description. Since the property attributes are not ordered under document order, two different n-triples files corresponding to both possible orderings are permitted. One of test012a and test012b SHOULD pass, at least. OBSOLETE Two property attributes and a property element on an rdf:Description. Since the property attributes are not ordered under document order, two different n-triples files corresponding to both possible orderings are permitted. APPROVED APPROVED OBSOLETE APPROVED APPROVED APPROVED NOT_APPROVED NOT_APPROVED NOT_APPROVED APPROVED The value of rdf:ID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:ID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:ID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:ID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:ID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:bagID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:bagID must match the XML Name production, (as modified by XML Namespaces). APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED allowed with warnings APPROVED allowed with warnings APPROVED allowed with warnings APPROVED APPROVED APPROVED Statement of the MT closure rule. APPROVED Statement of the MT closure rule. APPROVED Statement of the MT closure rule. APPROVED rdf:nodeID can be used to label a blank node. APPROVED rdf:nodeID can be used to label a blank node. These have file scope and are distinct from any unlabelled blank nodes. APPROVED On an rdf:Description or typed node rdf:nodeID behaves similarly to an rdf:about. APPROVED On a property element rdf:nodeID behaves similarly to rdf:resource. APPROVED The value of rdf:nodeID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:nodeID must match the XML Name production, (as modified by XML Namespaces). APPROVED The value of rdf:nodeID must match the XML Name production, (as modified by XML Namespaces). APPROVED Cannot have rdf:nodeID and rdf:ID. APPROVED Cannot have rdf:nodeID and rdf:about. APPROVED Cannot have rdf:nodeID and rdf:resource. APPROVED APPROVED An RDF/XML serlializer is recommended to produce an exception if asked to serialize the following graph since there is no way to represent it in the RDF/XML syntax. An RDF/XML serlializer is recommended to produce an exception if asked to serialize the following graph since there is no way to represent it in the RDF/XML syntax. APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED Plain literals are distinguishable on the basis of language tags. APPROVED Plain literals are distinguishable on the basis of language tags. APPROVED Plain literals are distinguishable on the basis of language tags. APPROVED While it is a superproperty, _:a <rdfs:contains (@@member?)> _:b . does NOT entail _:a <rdf:_n> _:b . for any _n. APPROVED APPROVED NOT_APPROVED NOT_APPROVED NOT_APPROVED Should a property be allowed more than one rdfs:range property? What should the semantics of multiple domain and range properties be? -> Multiple domain and range constraints are permissable and will have conjunctive semantics. test001 describes a property with rdfs:domain the intersection of 2 domains test002 describes a property with rdfs:range the intersection of 2 ranges test003 sample statement test004 entailed description using test001, test002, test003 and the rules for RDF and RDFS entailment (see http://www.w3.org/2000/10/rdf-tests/rdfcore/entailment/ ) APPROVED RDF Semantics defines rdfs:range to have an intensional reading. However, semantic extensions may give an extensional reading to range. The premise/conclusion pair is a non-entailment for RDFS reasoning, but may hold in semantic extensions. APPROVED RDF Semantics defines rdfs:range to have an intensional reading of domain. However, semantic extensions may give an extensional reading to domain. The premise/conclusion pair is a non-entailment for RDFS reasoning, but may hold in semantic extensions. APPROVED Indicating a simple inconsistency drawn from RDFS. RDFS can only produce inconsistencies through badly-formed XMLLiteral datatypes. APPROVED From an inconsistent graph, any entailment can be drawn. This is an example. APPROVED Cycles are permitted in subClassOf; therefore, no error occurs and the following entailment holds trivially. APPROVED Cycles are permitted in subPropertyOf; therefore, no error occurs and the following entailment holds trivially. APPROVED an instance of the Property class may have an rdfs:subClassOf property. the meaning of such a property is defined by the model theory. The wording of the formal resolution is a bit bare, so let me add a few words of explanation. What this means is that a resource can be both a class and a property. This test is encoded as follows: a Property may have a subclass (that is, such an RDF graph is satisfiable) APPROVED The inheritance semantics of the subPropertyOf relationship needs to be clarified. => subProperties inherit conjunctively the domain and range of their superproperties APPROVED RDFCore WG RESOLVED that a reified statement was a stating, not a statement. The following entailment does not, therefore, hold. APPROVED RDFCore WG RESOLVED that a statement does NOT entail its reification. The following entailment does not, therefore, hold. APPROVED RDFCore WG RESOLVED that a reified statement was a stating, not a statement. The following entailment does not, therefore, hold. This is the same as test001, but using RDFS-entailment. APPROVED RDFCore WG RESOLVED that a statement does NOT entail its reification. The following entailment does not, therefore, hold. This is the same as test002, but using RDFS-entailment. APPROVED The case of the language tag is not significant. APPROVED The case of the language tag is not significant. APPROVED APPROVED APPROVED Demonstrating the canonicalisation of XMLLiterals. NOT_APPROVED This test case concerns URIs relative to a non-relative URI scheme base. It's beyond the scope of the WG to deal with this; it has therefore not been approved. APPROVED APPROVED APPROVED APPROVED OBSOLETE This is not valid rdf/xml. The embedding of RDF/XML in other XML formats is beyond the scope of these test cases. Test case withdrawn. APPROVED APPROVED APPROVED APPROVED APPROVED APPROVED WITHDRAWN Test case WITHDRAWN in light of 2396bis APPROVED APPROVED Test output corrected to use correct base URL. NOT_APPROVED This test case is deprecated. The use of mailto: URIs with xml:base is not within the scope of RDFCore's charter to sort out. NOT_APPROVED This test case is deprecated. The use of mailto: URIs with xml:base is not within the scope of RDFCore's charter to sort out. APPROVED A well-formed typed literal is not related to an ill-formed literal. Even if they only differ by whitespace. APPROVED A well-formed typed literal is not related to an ill-formed literal. Even if they only differ by whitespace. APPROVED A simple test for well-formedness of a typed literal. APPROVED An integer with whitespace is ill-formed. RDF-Trine-1.007/t/data/rdfxml-w3c/pfps-10/000755 000765 000024 00000000000 12171744443 017641 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-literals/000755 000765 000024 00000000000 12171744443 022456 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-uris/000755 000765 000024 00000000000 12171744443 021621 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/000755 000765 000024 00000000000 12171744443 024601 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-element-not-mandatory/000755 000765 000024 00000000000 12171744443 023447 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/000755 000765 000024 00000000000 12171744443 023140 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-abouteach/000755 000765 000024 00000000000 12171744443 021517 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/000755 000765 000024 00000000000 12171744443 025447 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-duplicate-member-props/000755 000765 000024 00000000000 12171744443 024144 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/000755 000765 000024 00000000000 12171744443 024416 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/000755 000765 000024 00000000000 12171744443 024356 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/000755 000765 000024 00000000000 12171744443 024313 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-para196/000755 000765 000024 00000000000 12171744443 020747 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/000755 000765 000024 00000000000 12171744443 020731 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/000755 000765 000024 00000000000 12171744443 022232 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-reification-required/000755 000765 000024 00000000000 12171744443 023676 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/000755 000765 000024 00000000000 12171744443 023414 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/000755 000765 000024 00000000000 12171744443 023247 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-uri-substructure/000755 000765 000024 00000000000 12171744442 023132 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/000755 000765 000024 00000000000 12171744442 024132 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/000755 000765 000024 00000000000 12171744443 021226 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-container-membership-superProperty/000755 000765 000024 00000000000 12171744442 026422 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/000755 000765 000024 00000000000 12171744443 022510 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-entailment/000755 000765 000024 00000000000 12171744443 021547 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/000755 000765 000024 00000000000 12171744442 023750 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/000755 000765 000024 00000000000 12171744442 024527 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-subClassOf-a-Property/000755 000765 000024 00000000000 12171744443 023513 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/000755 000765 000024 00000000000 12171744443 024216 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/statement-entailment/000755 000765 000024 00000000000 12171744443 022615 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/tex-01/000755 000765 000024 00000000000 12171744443 017471 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/unrecognised-xml-attributes/000755 000765 000024 00000000000 12171744443 024122 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xml-canon/000755 000765 000024 00000000000 12171744443 020347 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/000755 000765 000024 00000000000 12171744443 020106 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlsch-02/000755 000765 000024 00000000000 12171744443 020170 5ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlsch-02/test001.rdf000644 000765 000024 00000001510 11032731047 022051 0ustar00gregstaff000000 000000 3 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlsch-02/test002.rdf000644 000765 000024 00000001516 11032731047 022060 0ustar00gregstaff000000 000000 3 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlsch-02/test003.rdf000644 000765 000024 00000001532 11032731047 022057 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test001.nt000644 000765 000024 00000000764 11032731047 021647 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### "v" . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test001.rdf000644 000765 000024 00000001346 11032731047 021776 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test002.nt000644 000765 000024 00000000764 11032731047 021650 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### _:j0 . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test002.rdf000644 000765 000024 00000001346 11032731047 021777 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test003.nt000644 000765 000024 00000001040 11032731047 021635 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test003.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test003.rdf000644 000765 000024 00000001265 11032731047 022000 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test004.nt000644 000765 000024 00000001630 11032731047 021643 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test004.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### _:j0 "v" . . _:j0 . . "v" . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test004.rdf000644 000765 000024 00000001353 11032731047 021777 0ustar00gregstaff000000 000000 v RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test006.nt000644 000765 000024 00000001141 11032731047 021642 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test006.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### "v" . . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test006.rdf000644 000765 000024 00000001356 11032731047 022004 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test007.nt000644 000765 000024 00000001034 11032731047 021644 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test007.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test007.rdf000644 000765 000024 00000001260 11032731047 021777 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test008.nt000644 000765 000024 00000001035 11032731047 021646 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test008.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test008.rdf000644 000765 000024 00000001261 11032731047 022001 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test009.nt000644 000765 000024 00000001034 11032731047 021646 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test009.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test009.rdf000644 000765 000024 00000001302 11032731047 021776 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test010.nt000644 000765 000024 00000001044 11032731047 021637 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test010.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test010.rdf000644 000765 000024 00000001322 11032731047 021770 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test011.nt000644 000765 000024 00000001034 11032731047 021637 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test011.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test011.rdf000644 000765 000024 00000001364 11032731047 021777 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test013.nt000644 000765 000024 00000001175 11032731047 021647 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test013.nt,v 1.1 2002/03/08 12:21:41 dajobe Exp $ # ##################################################################### . . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test013.rdf000644 000765 000024 00000001433 11032731047 021776 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test014.nt000644 000765 000024 00000001135 11032731047 021644 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test014.nt,v 1.2 2002/11/15 11:45:42 jgrant Exp $ # ##################################################################### "v" . "v" . RDF-Trine-1.007/t/data/rdfxml-w3c/xmlbase/test014.rdf000644 000765 000024 00000001472 11032731047 022002 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/xml-canon/test001.nt000644 000765 000024 00000001155 11032731047 022103 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence between members of different datatypes. # # $Id: test001.nt,v 1.1 2003/08/18 10:09:29 jgrant Exp $ # ##################################################################### "

"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/xml-canon/test001.rdf000644 000765 000024 00000001274 11032731047 022237 0ustar00gregstaff000000 000000
RDF-Trine-1.007/t/data/rdfxml-w3c/unrecognised-xml-attributes/test001.nt000644 000765 000024 00000001067 11032731047 025660 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/04/13 13:30:00 jgrant Exp $ ################################################################## "blah" . "more" . RDF-Trine-1.007/t/data/rdfxml-w3c/unrecognised-xml-attributes/test001.rdf000644 000765 000024 00000001613 11032731047 026007 0ustar00gregstaff000000 000000 blah more RDF-Trine-1.007/t/data/rdfxml-w3c/unrecognised-xml-attributes/test002.nt000644 000765 000024 00000000762 11032731047 025662 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/04/13 13:30:00 jgrant Exp $ ################################################################## "stuff" . RDF-Trine-1.007/t/data/rdfxml-w3c/unrecognised-xml-attributes/test002.rdf000644 000765 000024 00000001736 11032731047 026016 0ustar00gregstaff000000 000000 stuff RDF-Trine-1.007/t/data/rdfxml-w3c/tex-01/test001.rdf000644 000765 000024 00000001367 11032731047 021364 0ustar00gregstaff000000 000000 a RDF-Trine-1.007/t/data/rdfxml-w3c/tex-01/test002.rdf000644 000765 000024 00000001364 11032731047 021362 0ustar00gregstaff000000 000000 a RDF-Trine-1.007/t/data/rdfxml-w3c/statement-entailment/test001a.nt000644 000765 000024 00000002001 11032731047 024501 0ustar00gregstaff000000 000000 . . . . . . . . . RDF-Trine-1.007/t/data/rdfxml-w3c/statement-entailment/test001b.nt000644 000765 000024 00000000125 11032731047 024507 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/statement-entailment/test002a.nt000644 000765 000024 00000000120 11032731047 024502 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/statement-entailment/test002b.nt000644 000765 000024 00000000557 11032731047 024521 0ustar00gregstaff000000 000000 _:r . _:r . _:r . _:r . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/test001.nt000644 000765 000024 00000002555 11032731047 025757 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Issue rdfs-subPropertyOf-semantics: # The inheritance semantics of the subPropertyOf relationship needs to be clarified. # # => subProperties inherit conjunctively the domain and range of their superproperties # # $Id: test001.nt,v 1.4 2002/04/05 13:25:37 josderoo Exp $ ################################################################## . . . . . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-subPropertyOf-semantics/test002.nt000644 000765 000024 00000002105 11032731047 025747 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Issue rdfs-subPropertyOf-semantics: # The inheritance semantics of the subPropertyOf relationship needs to be clarified. # # => subProperties inherit conjunctively the domain and range of their superproperties # # $Id: test002.nt,v 1.2 2002/04/05 13:25:45 josderoo Exp $ ################################################################## . . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-subClassOf-a-Property/test001.nt000644 000765 000024 00000001300 11032731047 025237 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium (Massachusetts Institute of # Technology Institut National de Recherche en Informatique et en # Automatique Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # The following graph is legal (satisfiable) # # $Id: test001.nt,v 1.1 2002/12/18 15:44:22 jgrant Exp $ ################################################################## . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/test001.nt000644 000765 000024 00000002113 11032731047 026257 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Author: Frank Manola # # $Id: test001.nt,v 1.3 2001/10/01 13:43:50 barstow Exp $ # . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-no-cycles-in-subPropertyOf/test001.rdf000644 000765 000024 00000002706 11032731047 026421 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/test001.nt000644 000765 000024 00000002064 11032731047 025505 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Author: Dan Connolly # # $Id: test001.nt,v 1.3 2001/10/01 13:45:20 barstow Exp $ # . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-no-cycles-in-subClassOf/test001.rdf000644 000765 000024 00000002562 11032731047 025642 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-entailment/test001.nt000644 000765 000024 00000001245 11032731047 023303 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2003/11/13 10:21:45 jgrant Exp $ # ##################################################################### . "<"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-entailment/test002.nt000644 000765 000024 00000001112 11032731047 023275 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2003/11/13 10:21:45 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/nonconclusions005.rdf000644 000765 000024 00000001532 11032731047 026474 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/nonconclusions006.rdf000644 000765 000024 00000001534 11032731047 026477 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/premises005.rdf000644 000765 000024 00000001636 11032731047 025256 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/premises006.rdf000644 000765 000024 00000001640 11032731047 025252 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/test001.nt000644 000765 000024 00000001420 11032731047 024237 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.5 2001/10/17 08:19:32 josderoo Exp $ ################################################################## . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/test001.rdf000644 000765 000024 00000001526 11032731047 024400 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/test002.nt000644 000765 000024 00000001410 11032731047 024237 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.5 2001/10/17 08:21:13 josderoo Exp $ ################################################################## . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-domain-and-range/test002.rdf000644 000765 000024 00000001522 11032731047 024375 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-container-membership-superProperty/not1C.rdf000644 000765 000024 00000000647 11032731047 030102 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfs-container-membership-superProperty/not1P.rdf000644 000765 000024 00000000743 11032731047 030114 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test001.nt000644 000765 000024 00000001053 11032731047 022757 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.2 2002/11/22 11:20:52 jgrant Exp $ # ##################################################################### "chat"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test001.rdf000644 000765 000024 00000001477 11032731047 023123 0ustar00gregstaff000000 000000 chat RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test002.nt000644 000765 000024 00000001055 11032731047 022762 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.3 2003/07/24 15:51:08 jcarroll Exp $ # ##################################################################### "chat"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test002.rdf000644 000765 000024 00000001526 11032731047 023117 0ustar00gregstaff000000 000000 chat RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test003.nt000644 000765 000024 00000000762 11032731047 022767 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test003.nt,v 1.1 2002/04/05 22:22:30 dajobe Exp $ # ##################################################################### "chat" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test003.rdf000644 000765 000024 00000001422 11032731047 023113 0ustar00gregstaff000000 000000 chat RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test004.nt000644 000765 000024 00000000765 11032731047 022773 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test004.nt,v 1.2 2002/12/13 11:32:46 jgrant Exp $ # ##################################################################### "chat"@fr . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test004.rdf000644 000765 000024 00000001440 11032731047 023114 0ustar00gregstaff000000 000000 chat RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test005.nt000644 000765 000024 00000000762 11032731047 022771 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test005.nt,v 1.1 2002/04/05 22:22:30 dajobe Exp $ # ##################################################################### "chat" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test005.rdf000644 000765 000024 00000001403 11032731047 023114 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test006.nt000644 000765 000024 00000000765 11032731047 022775 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test006.nt,v 1.2 2002/12/13 11:32:46 jgrant Exp $ # ##################################################################### "chat"@fr . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test006.rdf000644 000765 000024 00000001444 11032731047 023122 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test007a.nt000644 000765 000024 00000000766 11032731047 023140 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test007a.nt,v 1.1 2002/12/18 15:49:29 jgrant Exp $ # ##################################################################### "chat"@fr . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test007b.nt000644 000765 000024 00000000766 11032731047 023141 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test007b.nt,v 1.1 2002/12/18 15:49:29 jgrant Exp $ # ##################################################################### "chat"@en . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xmllang/test007c.nt000644 000765 000024 00000000763 11032731047 023137 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test007c.nt,v 1.1 2002/12/18 15:49:29 jgrant Exp $ # ##################################################################### "chat" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test001.nt000644 000765 000024 00000001366 11032731047 025673 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/11/22 13:59:59 jcarroll Exp $ ################################################################## "\n \n John\n \n "^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test001.rdf000644 000765 000024 00000001757 11032731047 026031 0ustar00gregstaff000000 000000 John RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test002.nt000644 000765 000024 00000001636 11032731047 025674 0ustar00gregstaff000000 000000 # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/11/22 13:59:59 jcarroll Exp $ ################################################################## "\n Ramifications of\n \n \n \n\t\n\ta\n\tb\n \n 2\n \n to World Peace\n "^^ . "David Hume" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-xml-literal-namespaces/test002.rdf000644 000765 000024 00000002221 11032731047 026015 0ustar00gregstaff000000 000000 Ramifications of a b 2 to World Peace David Hume RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-uri-substructure/error001.nt000644 000765 000024 00000001213 11032731047 025034 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: error001.nt,v 1.2 2002/04/08 13:21:38 bmcbride Exp $ # # An RDF/XML serlializer is recommended to produce an exception if # asked to serialize the following graph since there is no way # to represent it in the RDF/XML syntax. # ##################################################################### _:a "10" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-uri-substructure/test001.nt000644 000765 000024 00000001005 11032731047 024661 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/03/29 15:09:58 bmcbride Exp $ # # Input file for a serialization test # ##################################################################### _:a "10" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-uri-substructure/test001.rdf000644 000765 000024 00000001246 11032731047 025022 0ustar00gregstaff000000 000000 10 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/error001.rdf000644 000765 000024 00000001164 11032731047 025307 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/error002.rdf000644 000765 000024 00000001160 11032731047 025304 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/error003.rdf000644 000765 000024 00000001270 11032731047 025307 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/error004.rdf000644 000765 000024 00000001067 11032731047 025314 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/error005.rdf000644 000765 000024 00000001116 11032731047 025310 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/error006.rdf000644 000765 000024 00000001243 11032731047 025312 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test001.nt000644 000765 000024 00000000735 11032731047 025006 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/07/30 09:46:05 jcarroll Exp $ # ##################################################################### _:j0 _:j0 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test001.rdf000644 000765 000024 00000001223 11032731047 025131 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test002.nt000644 000765 000024 00000001074 11032731047 025004 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/07/30 09:46:05 jcarroll Exp $ # ##################################################################### _:j0A _:j0A . _:j2 _:j1B . _:j1B _:j0A . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test002.rdf000644 000765 000024 00000001707 11032731047 025141 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test003.nt000644 000765 000024 00000000745 11032731047 025011 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test003.nt,v 1.2 2003/07/24 15:51:06 jcarroll Exp $ # ##################################################################### _:j0A "value" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test003.rdf000644 000765 000024 00000001321 11032731047 025132 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test004.nt000644 000765 000024 00000002250 11032731047 025003 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test004.nt,v 1.1 2002/07/30 09:46:05 jcarroll Exp $ # ##################################################################### _:j0 _:j1A . . _:j0 . . _:j1A . _:j2 _:j1A . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-syntax-incomplete/test004.rdf000644 000765 000024 00000001544 11032731047 025142 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/empty.nt000644 000765 000024 00000000656 11032731047 025113 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: empty.nt,v 1.1 2002/12/13 16:48:03 jgrant Exp $ # ##################################################################### RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/test001.nt000644 000765 000024 00000001623 11032731047 025150 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.2 2003/07/24 15:51:04 jcarroll Exp $ # ##################################################################### _:a0 . _:a0 _:a1 . _:a1 . _:a1 _:a2 . _:a2 . _:a2 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/test001.rdf000644 000765 000024 00000002114 11032731047 025276 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/test002.nt000644 000765 000024 00000001127 11032731047 025150 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/12/13 16:48:03 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/test003a.nt000644 000765 000024 00000001021 11032731047 025303 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test003a.nt,v 1.1 2002/12/13 16:48:03 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/test003b.nt000644 000765 000024 00000001017 11032731047 025311 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test003b.nt,v 1.1 2002/12/13 16:48:03 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-seq-representation/test004.nt000644 000765 000024 00000001105 11032731047 025146 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test004.nt,v 1.1 2002/12/13 16:48:04 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-reification-required/test001.nt000644 000765 000024 00000000753 11032731047 025435 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.3 2002/04/05 11:32:03 bmcbride Exp $ # ##################################################################### "10" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-reification-required/test001.rdf000644 000765 000024 00000001412 11032731047 025560 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-001.rdf000644 000765 000024 00000001243 11032731047 024345 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-002.rdf000644 000765 000024 00000001241 11032731047 024344 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-003.rdf000644 000765 000024 00000001247 11032731047 024353 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-004.rdf000644 000765 000024 00000001247 11032731047 024354 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-005.rdf000644 000765 000024 00000001257 11032731047 024356 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-006.rdf000644 000765 000024 00000001255 11032731047 024355 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-007.rdf000644 000765 000024 00000001251 11032731047 024352 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-008.rdf000644 000765 000024 00000001241 11032731047 024352 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-009.rdf000644 000765 000024 00000001257 11032731047 024362 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-010.rdf000644 000765 000024 00000001273 11032731047 024350 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-011.rdf000644 000765 000024 00000001457 11032731047 024355 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-012.rdf000644 000765 000024 00000001437 11032731047 024354 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-013.rdf000644 000765 000024 00000001435 11032731047 024353 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-014.rdf000644 000765 000024 00000001443 11032731047 024353 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-015.rdf000644 000765 000024 00000001443 11032731047 024354 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-016.rdf000644 000765 000024 00000001453 11032731047 024356 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-017.rdf000644 000765 000024 00000001451 11032731047 024355 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-018.rdf000644 000765 000024 00000001445 11032731047 024361 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-019.rdf000644 000765 000024 00000001453 11032731047 024361 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/error-020.rdf000644 000765 000024 00000001467 11032731047 024356 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-001.nt000644 000765 000024 00000000043 11032731047 024036 0ustar00gregstaff000000 000000 # Empty - no triples are generated RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-001.rdf000644 000765 000024 00000001324 11032731047 024173 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-002.nt000644 000765 000024 00000000177 11032731047 024047 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-002.rdf000644 000765 000024 00000001304 11032731047 024172 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-003.nt000644 000765 000024 00000000177 11032731047 024050 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-003.rdf000644 000765 000024 00000001304 11032731047 024173 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-004.nt000644 000765 000024 00000000177 11032731047 024051 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-004.rdf000644 000765 000024 00000001304 11032731047 024174 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-005.nt000644 000765 000024 00000000205 11032731047 024042 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-005.rdf000644 000765 000024 00000001320 11032731047 024173 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-006.nt000644 000765 000024 00000000204 11032731047 024042 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-006.rdf000644 000765 000024 00000001316 11032731047 024201 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-007.nt000644 000765 000024 00000000200 11032731047 024037 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-007.rdf000644 000765 000024 00000001306 11032731047 024201 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-008.nt000644 000765 000024 00000000203 11032731047 024043 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-008.rdf000644 000765 000024 00000001314 11032731047 024201 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-009.nt000644 000765 000024 00000000205 11032731047 024046 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-009.rdf000644 000765 000024 00000001320 11032731047 024177 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-010.nt000644 000765 000024 00000000202 11032731047 024033 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-010.rdf000644 000765 000024 00000001312 11032731047 024170 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-011.nt000644 000765 000024 00000000200 11032731047 024032 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-011.rdf000644 000765 000024 00000001306 11032731047 024174 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-012.nt000644 000765 000024 00000000201 11032731047 024034 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-012.rdf000644 000765 000024 00000001310 11032731047 024170 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-013.nt000644 000765 000024 00000000201 11032731047 024035 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-013.rdf000644 000765 000024 00000001310 11032731047 024171 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-014.nt000644 000765 000024 00000000200 11032731047 024035 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-014.rdf000644 000765 000024 00000001306 11032731047 024177 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-015.nt000644 000765 000024 00000000176 11032731047 024052 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-015.rdf000644 000765 000024 00000001302 11032731047 024174 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-016.nt000644 000765 000024 00000000177 11032731047 024054 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-016.rdf000644 000765 000024 00000001304 11032731047 024177 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-017.nt000644 000765 000024 00000000151 11032731047 024045 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-017.rdf000644 000765 000024 00000001434 11032731047 024204 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-018.nt000644 000765 000024 00000000151 11032731047 024046 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-018.rdf000644 000765 000024 00000001434 11032731047 024205 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-019.nt000644 000765 000024 00000000151 11032731047 024047 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-019.rdf000644 000765 000024 00000001434 11032731047 024206 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-020.nt000644 000765 000024 00000000157 11032731047 024045 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-020.rdf000644 000765 000024 00000001450 11032731047 024174 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-021.nt000644 000765 000024 00000000156 11032731047 024045 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-021.rdf000644 000765 000024 00000001446 11032731047 024202 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-022.nt000644 000765 000024 00000000152 11032731047 024042 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-022.rdf000644 000765 000024 00000001436 11032731047 024202 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-023.nt000644 000765 000024 00000000155 11032731047 024046 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-023.rdf000644 000765 000024 00000001444 11032731047 024202 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-024.nt000644 000765 000024 00000000157 11032731047 024051 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-024.rdf000644 000765 000024 00000001450 11032731047 024200 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-025.nt000644 000765 000024 00000000154 11032731047 024047 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-025.rdf000644 000765 000024 00000001442 11032731047 024202 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-026.nt000644 000765 000024 00000000152 11032731047 024046 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-026.rdf000644 000765 000024 00000001436 11032731047 024206 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-027.nt000644 000765 000024 00000000153 11032731047 024050 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-027.rdf000644 000765 000024 00000001440 11032731047 024202 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-028.nt000644 000765 000024 00000000153 11032731047 024051 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-028.rdf000644 000765 000024 00000001440 11032731047 024203 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-029.nt000644 000765 000024 00000000152 11032731047 024051 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-029.rdf000644 000765 000024 00000001436 11032731047 024211 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-030.nt000644 000765 000024 00000000150 11032731047 024037 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-030.rdf000644 000765 000024 00000001432 11032731047 024175 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-031.nt000644 000765 000024 00000000150 11032731047 024040 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-031.rdf000644 000765 000024 00000001432 11032731047 024176 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-032.nt000644 000765 000024 00000000127 11032731047 024045 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-032.rdf000644 000765 000024 00000001351 11032731047 024177 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-033.nt000644 000765 000024 00000000127 11032731047 024046 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-033.rdf000644 000765 000024 00000001351 11032731047 024200 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-034.nt000644 000765 000024 00000000127 11032731047 024047 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-034.rdf000644 000765 000024 00000001351 11032731047 024201 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-035.nt000644 000765 000024 00000000135 11032731047 024047 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-035.rdf000644 000765 000024 00000001365 11032731047 024207 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-036.nt000644 000765 000024 00000000134 11032731047 024047 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-036.rdf000644 000765 000024 00000001363 11032731047 024206 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-037.nt000644 000765 000024 00000000130 11032731047 024044 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/test-037.rdf000644 000765 000024 00000001353 11032731047 024206 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-001.nt000644 000765 000024 00000000177 11032731047 024036 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-001.rdf000644 000765 000024 00000001322 11032731047 024161 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-002.nt000644 000765 000024 00000000151 11032731047 024027 0ustar00gregstaff000000 000000 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-002.rdf000644 000765 000024 00000001452 11032731047 024166 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-003.nt000644 000765 000024 00000000127 11032731047 024033 0ustar00gregstaff000000 000000 "string" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-names-use/warn-003.rdf000644 000765 000024 00000001367 11032731047 024174 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error001.rdf000644 000765 000024 00000001154 11032731047 022770 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error002.rdf000644 000765 000024 00000001145 11032731047 022771 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error003.rdf000644 000765 000024 00000001260 11032731047 022770 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error004.rdf000644 000765 000024 00000001232 11032731047 022770 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error005.rdf000644 000765 000024 00000001442 11032731047 022774 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error006.rdf000644 000765 000024 00000001162 11032731047 022774 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-rdf-id/error007.rdf000644 000765 000024 00000001266 11032731047 023002 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-para196/test001.nt000644 000765 000024 00000001267 11032731047 022507 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/02/14 19:10:34 dajobe Exp $ # ##################################################################### "permitted" . "also permitted" . "this one also permitted" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-para196/test001.rdf000644 000765 000024 00000002325 11032731047 022635 0ustar00gregstaff000000 000000 permitted also permitted this one also permitted RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test001.nt000644 000765 000024 00000002306 11032731047 026046 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/03/08 10:55:12 dajobe Exp $ # ##################################################################### _:j88091 "val" . _:j88090 _:j88091 . . _:j88090 . . _:j88091 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test001.rdf000644 000765 000024 00000001620 11032731047 026176 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test002.nt000644 000765 000024 00000001100 11032731047 026036 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/03/08 10:55:13 dajobe Exp $ # ##################################################################### "val" . _:j88093 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test002.rdf000644 000765 000024 00000001700 11032731047 026176 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test004.nt000644 000765 000024 00000002300 11032731047 026043 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test004.nt,v 1.1 2002/03/08 10:55:13 dajobe Exp $ # ##################################################################### _:j88101 . . _:j88101 . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test004.rdf000644 000765 000024 00000001655 11032731047 026211 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test005.nt000644 000765 000024 00000002377 11032731047 026062 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test005.nt,v 1.1 2002/03/08 10:55:13 dajobe Exp $ # ##################################################################### "val" . _:j88106 . . _:j88106 . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-not-id-and-resource-attr/test005.rdf000644 000765 000024 00000001674 11032731047 026213 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test001.nt000644 000765 000024 00000000750 11032731047 026112 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.2 2001/10/10 13:10:05 barstow Exp $ # ##################################################################### _:j0 "property value" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test001.rdf000644 000765 000024 00000001512 11032731047 026241 0ustar00gregstaff000000 000000 property value RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test002.nt000644 000765 000024 00000001073 11032731047 026112 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.2 2001/10/10 13:10:05 barstow Exp $ # ##################################################################### _:j0 "property value" . _:j0 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test002.rdf000644 000765 000024 00000001470 11032731047 026245 0ustar00gregstaff000000 000000 property value RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test003.nt000644 000765 000024 00000001034 11032731047 026110 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test003.nt,v 1.2 2001/10/10 13:10:05 barstow Exp $ # ##################################################################### _:j0 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test003.rdf000644 000765 000024 00000001420 11032731047 026241 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test004.nt000644 000765 000024 00000001140 11032731047 026107 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test004.nt,v 1.2 2001/10/10 13:10:05 barstow Exp $ # ##################################################################### _:j0 "some value" . _:j0 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test004.rdf000644 000765 000024 00000001472 11032731047 026251 0ustar00gregstaff000000 000000 some value RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test005.nt000644 000765 000024 00000001034 11032731047 026112 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test005.nt,v 1.2 2001/10/10 13:10:05 barstow Exp $ # ##################################################################### _:j0 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-identity-anon-resources/test005.rdf000644 000765 000024 00000001420 11032731047 026243 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/error001.rdf000644 000765 000024 00000001640 11032731047 026455 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/error002.rdf000644 000765 000024 00000001664 11032731047 026464 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/error003.rdf000644 000765 000024 00000002071 11032731047 026456 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test001.nt000644 000765 000024 00000000747 11032731047 026160 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test001.rdf000644 000765 000024 00000001452 11032731047 026304 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test002.nt000644 000765 000024 00000000713 11032731047 026152 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### "" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test002.rdf000644 000765 000024 00000001353 11032731047 026305 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test003.nt000644 000765 000024 00000001004 11032731047 026145 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### ""^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test003.rdf000644 000765 000024 00000001430 11032731047 026302 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test004.nt000644 000765 000024 00000000715 11032731047 026156 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:a1 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test004.rdf000644 000765 000024 00000001501 11032731047 026302 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test005.nt000644 000765 000024 00000002226 11032731047 026156 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### "" . . . . "" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test005.rdf000644 000765 000024 00000001427 11032731047 026312 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test006.nt000644 000765 000024 00000002232 11032731047 026154 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:a1 . . . . _:a1 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test006.rdf000644 000765 000024 00000001466 11032731047 026316 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test007.nt000644 000765 000024 00000000747 11032731047 026166 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test007.rdf000644 000765 000024 00000001430 11032731047 026306 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test008.nt000644 000765 000024 00000000713 11032731047 026160 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### "" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test008.rdf000644 000765 000024 00000001353 11032731047 026313 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test009.nt000644 000765 000024 00000001004 11032731047 026153 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### ""^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test009.rdf000644 000765 000024 00000001404 11032731047 026311 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test010.nt000644 000765 000024 00000000715 11032731047 026153 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:a1 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test010.rdf000644 000765 000024 00000001404 11032731047 026301 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test011.nt000644 000765 000024 00000002226 11032731047 026153 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### "" . . . . "" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test011.rdf000644 000765 000024 00000001374 11032731047 026310 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test012.nt000644 000765 000024 00000002232 11032731047 026151 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:a1 . . . . _:a1 . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test012.rdf000644 000765 000024 00000001425 11032731047 026306 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test013.nt000644 000765 000024 00000001057 11032731047 026156 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### . "baz" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test013.rdf000644 000765 000024 00000001643 11032731047 026311 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test014.nt000644 000765 000024 00000000773 11032731047 026163 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:a1 . _:a1 "baz" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test014.rdf000644 000765 000024 00000001557 11032731047 026316 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test015.nt000644 000765 000024 00000000773 11032731047 026164 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:a1 . _:a1 "baz" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test015.rdf000644 000765 000024 00000002064 11032731047 026311 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test016.nt000644 000765 000024 00000001033 11032731047 026153 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test016.nt,v 1.1 2002/07/26 04:26:56 jcarroll Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test016.rdf000644 000765 000024 00000001527 11032731047 026315 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test017.nt000644 000765 000024 00000001033 11032731047 026154 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test017.nt,v 1.1 2002/07/26 04:26:56 jcarroll Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-empty-property-elements/test017.rdf000644 000765 000024 00000002017 11032731047 026311 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-duplicate-member-props/test001.nt000644 000765 000024 00000001364 11032731047 025702 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/05/08 13:37:09 jgrant Exp $ # ##################################################################### . . . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-duplicate-member-props/test001.rdf000644 000765 000024 00000001763 11032731047 026037 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/error1.rdf000644 000765 000024 00000001407 11032731047 027347 0ustar00gregstaff000000 000000 abc abc RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test1.nt000644 000765 000024 00000001115 11032731047 027037 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test1.nt,v 1.2 2001/09/06 21:07:20 barstow Exp $ # ##################################################################### "abc" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test1.rdf000644 000765 000024 00000001200 11032731047 027164 0ustar00gregstaff000000 000000 abc RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test2.nt000644 000765 000024 00000001125 11032731047 027041 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test2.nt,v 1.4 2002/07/26 04:06:56 jcarroll Exp $ # ##################################################################### "abc" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test2.rdf000644 000765 000024 00000001263 11032731047 027176 0ustar00gregstaff000000 000000 abc RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test3.nt000644 000765 000024 00000001125 11032731047 027042 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test3.nt,v 1.1 2002/07/26 04:06:57 jcarroll Exp $ # ##################################################################### "abc" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-difference-between-ID-and-about/test3.rdf000644 000765 000024 00000001270 11032731047 027175 0ustar00gregstaff000000 000000 abc RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-abouteach/error001.rdf000644 000765 000024 00000001656 11032731046 023564 0ustar00gregstaff000000 000000 me RDF-Trine-1.007/t/data/rdfxml-w3c/rdfms-abouteach/error002.rdf000644 000765 000024 00000001735 11032731047 023564 0ustar00gregstaff000000 000000 foo me RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0001.nt000644 000765 000024 00000000771 11032731046 024756 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0001.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0001.rdf000644 000765 000024 00000001734 11032731046 025110 0ustar00gregstaff000000 000000 bar RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0003.nt000644 000765 000024 00000001023 11032731046 024747 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0003.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0003.rdf000644 000765 000024 00000002051 11032731046 025103 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0004.nt000644 000765 000024 00000001060 11032731046 024751 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0004.nt,v 1.3 2001/10/04 16:01:45 barstow Exp $ # ##################################################################### "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0004.rdf000644 000765 000024 00000001677 11032731046 025121 0ustar00gregstaff000000 000000 bar RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0005.nt000644 000765 000024 00000001052 11032731046 024753 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0005.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### _:genid . _:genid "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0005.rdf000644 000765 000024 00000002217 11032731046 025111 0ustar00gregstaff000000 000000 bar RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0006.nt000644 000765 000024 00000001042 11032731046 024753 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0006.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0006.rdf000644 000765 000024 00000001710 11032731046 025107 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0009.nt000644 000765 000024 00000000770 11032731046 024765 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0009.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0009.rdf000644 000765 000024 00000001652 11032731046 025117 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0010.nt000644 000765 000024 00000000770 11032731046 024755 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0010.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0010.rdf000644 000765 000024 00000002237 11032731046 025107 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0011.nt000644 000765 000024 00000001412 11032731046 024750 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0011.nt,v 1.3 2001/10/04 16:01:45 barstow Exp $ # ##################################################################### . "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0011.rdf000644 000765 000024 00000002257 11032731046 025112 0ustar00gregstaff000000 000000 bar RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0012.nt000644 000765 000024 00000001412 11032731046 024751 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0012.nt,v 1.3 2001/10/04 16:01:45 barstow Exp $ # ##################################################################### . "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0012.rdf000644 000765 000024 00000002252 11032731046 025106 0ustar00gregstaff000000 000000 bar RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0013.nt000644 000765 000024 00000001412 11032731046 024752 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0013.nt,v 1.3 2001/10/04 16:01:45 barstow Exp $ # ##################################################################### . "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0013.rdf000644 000765 000024 00000002262 11032731046 025110 0ustar00gregstaff000000 000000 bar RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0014.nt000644 000765 000024 00000001412 11032731046 024753 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test0014.nt,v 1.3 2001/10/04 16:01:45 barstow Exp $ # ##################################################################### . "bar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-ns-prefix-confusion/test0014.rdf000644 000765 000024 00000002345 11032731046 025113 0ustar00gregstaff000000 000000

  • bar
  • RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-element-not-mandatory/test001.nt000644 000765 000024 00000000576 11032731046 025210 0ustar00gregstaff000000 000000 # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2003/10/08 13:00:58 jgrant Exp $ # ##################################################################### _:a . _:a "Dogs in Hats" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-element-not-mandatory/test001.rdf000644 000765 000024 00000000541 11032731046 025332 0ustar00gregstaff000000 000000 Dogs in Hats RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/error001.rdf000644 000765 000024 00000001444 11032731046 026641 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/error002.rdf000644 000765 000024 00000001601 11032731046 026635 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test001.nt000644 000765 000024 00000001143 11032731046 026331 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:bag . _:bag "1" . _:bag "2" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test001.rdf000644 000765 000024 00000001424 11032731046 026465 0ustar00gregstaff000000 000000 1 2 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test002.nt000644 000765 000024 00000001275 11032731046 026340 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:bag . _:bag "_1" . _:bag "1" . _:bag "_3" . _:bag "2" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test002.rdf000644 000765 000024 00000002342 11032731046 026466 0ustar00gregstaff000000 000000 _1 1 _3 2 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test003.nt000644 000765 000024 00000001104 11032731046 026330 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:bar . _:bar "1" . _:bar "2" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test003.rdf000644 000765 000024 00000001532 11032731046 026467 0ustar00gregstaff000000 000000 1 2 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test004.nt000644 000765 000024 00000004350 11032731046 026337 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:bar . _:bar "1" . . _:bar . . "1" . _:bar "2"^^ . _:bar _:res . _:res . _:bar _:res2 . . _:bar . . _:res2 . _:res2 "foobar" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test004.rdf000644 000765 000024 00000002032 11032731046 026464 0ustar00gregstaff000000 000000 1 2 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test006.nt000644 000765 000024 00000003170 11032731046 026340 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### . "3" . "foobar" . . "2" . "foobar" . "barfoo" . _:bag . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test006.rdf000644 000765 000024 00000001601 11032731046 026467 0ustar00gregstaff000000 000000 barfoo RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test007.nt000644 000765 000024 00000001157 11032731046 026344 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### _:d1 _:d2 . _:d2 "1" . _:d2 "2" . _:d1 "2" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test007.rdf000644 000765 000024 00000001642 11032731046 026475 0ustar00gregstaff000000 000000 1 2 2 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test008.nt000644 000765 000024 00000001016 11032731046 026337 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id$ # ##################################################################### "1" . "1-again" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-containers-syntax-vs-schema/test008.rdf000644 000765 000024 00000001557 11032731046 026503 0ustar00gregstaff000000 000000 1 1-again RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-uris/test001.nt000644 000765 000024 00000001007 11032731046 023350 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/04/29 09:46:57 dbeckett2 Exp $ # ##################################################################### "2000" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-uris/test001.rdf000644 000765 000024 00000002131 11032731046 023501 0ustar00gregstaff000000 000000 2000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-uris/test002.nt000644 000765 000024 00000001011 11032731046 023344 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/04/29 09:46:57 dbeckett2 Exp $ # ##################################################################### "2000" . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-uris/test002.rdf000644 000765 000024 00000002176 11032731046 023513 0ustar00gregstaff000000 000000 2000 RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-literals/test001.nt000644 000765 000024 00000001062 11032731046 024206 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.1 2002/04/29 10:35:03 jgrant Exp $ # ##################################################################### _:a "D\u00FCrst" . _:a . RDF-Trine-1.007/t/data/rdfxml-w3c/rdf-charmod-literals/test001.rdf000644 000765 000024 00000002014 11032731046 024336 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/pfps-10/test001a.nt000644 000765 000024 00000000751 11032731046 021536 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001a.nt,v 1.1 2003/08/18 09:40:01 jgrant Exp $ # ##################################################################### "a" . RDF-Trine-1.007/t/data/rdfxml-w3c/pfps-10/test001b.nt000644 000765 000024 00000001120 11032731046 021526 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001b.nt,v 1.1 2003/08/18 09:40:01 jgrant Exp $ # ##################################################################### _:x . _:x . RDF-Trine-1.007/t/data/rdfxml-w3c/horst-01/test001.rdf000644 000765 000024 00000001756 11032731046 021724 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/horst-01/test002.rdf000644 000765 000024 00000002001 11032731046 021705 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/horst-01/test003.rdf000644 000765 000024 00000002066 11032731046 021721 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/horst-01/test004.rdf000644 000765 000024 00000002017 11032731046 021716 0ustar00gregstaff000000 000000 RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes-intensional/test001.nt000644 000765 000024 00000001347 11032731046 024530 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # xsd:integer and xsd:decimal are compatible using intensional # datatype semantics. The following is consistent with a # rdfs+d(xsd:integer, xsd:decimal) interpretation: # # $Id: test001.nt,v 1.1 2003/09/03 12:05:35 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes-intensional/test002.nt000644 000765 000024 00000001350 11032731046 024523 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # xsd:string and xsd:integer are incompatible using intensional # datatype semantics. The following is inconsistent with a # rdfs+d(xsd:integer, xsd:string) interpretation: # # $Id: test002.nt,v 1.1 2003/09/03 12:05:35 jgrant Exp $ # ##################################################################### . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test001.nt000644 000765 000024 00000001172 11032731046 022203 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test001.nt,v 1.3 2003/08/18 09:29:18 jgrant Exp $ # ##################################################################### "10"^^ . "10"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test001.rdf000644 000765 000024 00000001651 11032731046 022337 0ustar00gregstaff000000 000000 10 10 RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test002.nt000644 000765 000024 00000001031 11032731046 022176 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002.nt,v 1.1 2002/11/19 14:04:16 jgrant Exp $ # ##################################################################### "flargh"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test002.rdf000644 000765 000024 00000001364 11032731046 022341 0ustar00gregstaff000000 000000 flargh RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test002b.nt000644 000765 000024 00000001216 11032731046 022345 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test002b.nt,v 1.1 2002/12/11 17:03:07 jgrant Exp $ # ##################################################################### _:v . _:v _:c . _:c . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test003a.nt000644 000765 000024 00000001134 11032731046 022344 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence of lexical forms, given datatype knowledge. # # $Id: test003a.nt,v 1.1 2002/11/19 16:50:04 jgrant Exp $ # ##################################################################### "010"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test003b.nt000644 000765 000024 00000001133 11032731046 022344 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence of lexical forms, given datatype knowledge. # # $Id: test003b.nt,v 1.1 2002/11/19 16:50:04 jgrant Exp $ # ##################################################################### "10"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test005a.nt000644 000765 000024 00000001127 11032731046 022350 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence between members of different datatypes. # # $Id: test005a.nt,v 1.1 2002/11/19 17:02:56 jgrant Exp $ # ##################################################################### "10"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test005b.nt000644 000765 000024 00000001131 11032731046 022344 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence between members of different datatypes. # # $Id: test005b.nt,v 1.2 2002/12/11 16:49:41 jgrant Exp $ # ##################################################################### "10.0"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test006.nt000644 000765 000024 00000001310 11032731046 022202 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence between members of different datatypes. # # $Id: test006.nt,v 1.1 2002/12/13 11:22:19 jgrant Exp $ # ##################################################################### "25"^^ . . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test008a.nt000644 000765 000024 00000001033 11032731046 022347 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test008a.nt,v 1.1 2002/12/13 11:53:00 jgrant Exp $ # ##################################################################### "10" . "10" . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test008b.nt000644 000765 000024 00000001031 11032731046 022346 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test008b.nt,v 1.1 2002/12/13 11:53:00 jgrant Exp $ # ##################################################################### _:x . _:x . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test009a.nt000644 000765 000024 00000001107 11032731046 022352 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test009a.nt,v 1.1 2002/12/13 11:53:00 jgrant Exp $ # ##################################################################### "10" . "10"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test009b.nt000644 000765 000024 00000001031 11032731046 022347 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # $Id: test009b.nt,v 1.1 2002/12/13 11:53:00 jgrant Exp $ # ##################################################################### _:x . _:x . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test010.nt000644 000765 000024 00000001235 11032731046 022203 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Semantic equivalence between members of different datatypes. # # $Id: test010.nt,v 1.1 2002/12/13 11:53:00 jgrant Exp $ # ##################################################################### "25" . . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test011a.nt000644 000765 000024 00000001163 11032731046 022345 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Plain literals without language denote the same thing as # the corresponding xsd:strings (where their value spaces intersect). # # $Id: test011a.nt,v 1.1 2003/09/03 12:22:06 jgrant Exp $ # ##################################################################### "a string" . RDF-Trine-1.007/t/data/rdfxml-w3c/datatypes/test011b.nt000644 000765 000024 00000001236 11032731046 022347 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Plain literals without language denote the same thing as # the corresponding xsd:strings (where their value spaces intersect). # # $Id: test011b.nt,v 1.1 2003/09/03 12:22:06 jgrant Exp $ # ##################################################################### "a string"^^ . RDF-Trine-1.007/t/data/rdfxml-w3c/amp-in-url/test001.nt000644 000765 000024 00000001045 11032731046 022165 0ustar00gregstaff000000 000000 # # Copyright World Wide Web Consortium, (Massachusetts Institute of # Technology, Institut National de Recherche en Informatique et en # Automatique, Keio University). # # All Rights Reserved. # # Please see the full Copyright clause at # # # Author: Dan Connolly # # $Id: test001.nt,v 1.2 2001/09/06 21:07:19 barstow Exp $ # ##################################################################### "xxx" . RDF-Trine-1.007/t/data/rdfxml-w3c/amp-in-url/test001.rdf000644 000765 000024 00000002604 11032731046 022321 0ustar00gregstaff000000 000000 xxx RDF-Trine-1.007/t/data/rdfa/test-sd.nt000644 000765 000024 00000015335 11325427731 017334 0ustar00gregstaff000000 000000 . . . . . . . . . . . . . . . . _:g1 . _:g1 . _:g1 "12729"^^ . _:g2 _:g1 . _:g2 . _:g3 . _:g3 _:g2 . _:g4 . _:g4 _:g3 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . _:g4 . RDF-Trine-1.007/t/data/rdfa/test-sd.xhtml000644 000765 000024 00000013463 11325427731 020047 0ustar00gregstaff000000 000000 SPARQL

    RDF-Trine-1.007/t/data/bugs/ttl-with-bom.ttl000644 000765 000024 00000000105 11552456155 020477 0ustar00gregstaff000000 000000 @prefix : . :subject :predicate :object .RDF-Trine-1.007/lib/RDF/000755 000765 000024 00000000000 12171744443 014472 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/Test/000755 000765 000024 00000000000 12171744443 014776 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/Test/RDF/000755 000765 000024 00000000000 12171744443 015411 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/Test/RDF/Trine/000755 000765 000024 00000000000 12171744443 016472 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/Test/RDF/Trine/Store.pm000644 000765 000024 00000077746 12171744402 020144 0ustar00gregstaff000000 000000 =head1 NAME Test::RDF::Trine::Store - A collection of functions to test RDF::Trine::Stores =head1 VERSION This document describes RDF::Trine version 1.007 =head1 SYNOPSIS For example, to test a Memory store, do something like: use Test::RDF::Trine::Store qw(all_store_tests number_of_tests); use Test::More tests => 1 + Test::RDF::Trine::Store::number_of_tests; use RDF::Trine qw(iri variable store literal); use RDF::Trine::Store; my $data = Test::RDF::Trine::Store::create_data; my $store = RDF::Trine::Store::Memory->temporary_store(); isa_ok( $store, 'RDF::Trine::Store::Memory' ); Test::RDF::Trine::Store::all_store_tests($store, $data); =head1 DESCRIPTION This module packages a few functions that you can call to test a L, also if it is outside of the main RDF-Trine distribution. There are different functions that will test different parts of the functionality, but you should run them all at some point, thus for the most part, you would just like to run the C function for quad stores and C for triple stores (i.e. stores that doesn't support named graphs). All the below functions are exported. =cut package Test::RDF::Trine::Store; use Test::More; use Test::Exception; use strict; use warnings; no warnings 'redefine'; use RDF::Trine qw(iri variable store literal statement); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Store::DBI; use RDF::Trine::Namespace qw(xsd); our ($VERSION); BEGIN { $VERSION = '1.007'; } use Log::Log4perl; Log::Log4perl->easy_init if $ENV{TEST_VERBOSE}; our @EXPORT = qw(number_of_tests number_of_triple_tests create_data all_store_tests all_triple_store_tests add_quads add_triples contexts_tests add_statement_tests_simple count_statements_tests_simple count_statements_tests_quads count_statements_tests_triples get_statements_tests_triples get_pattern_tests get_statements_tests_quads remove_statement_tests); =head1 FUNCTIONS =over 4 =item C<< number_of_tests >> Returns the number of tests run with C. =cut sub number_of_tests { return 231; # Remember to update whenever adding tests } =item C<< number_of_triple_tests >> Returns the number of tests run with C. =cut sub number_of_triple_tests { return 109; # Remember to update whenever adding tests } =item C<< create_data >> Returns a hashref with generated test data nodes to be used by other tests. =cut sub create_data { my $ex = RDF::Trine::Namespace->new('http://example.com/'); my @names = ('a' .. 'z'); my @triples; my @quads; my $nil = RDF::Trine::Node::Nil->new(); foreach my $i (@names[0..2]) { my $w = $ex->$i(); foreach my $j (@names[0..2]) { my $x = $ex->$j(); foreach my $k (@names[0..2]) { my $y = $ex->$k(); my $triple = RDF::Trine::Statement->new($w,$x,$y); push(@triples, $triple); foreach my $l (@names[0..2]) { my $z = $ex->$l(); my $quad = RDF::Trine::Statement::Quad->new($w,$x,$y,$z); push(@quads, $quad); } } } } return { ex => $ex, names => \@names, triples => \@triples, quads => \@quads, nil => $nil }; } =item C<< all_store_tests ($store, $data, $todo, $args) >> Will run all available tests for the given store, given the data from C. You may also set a third argument to some true value to mark all tests as TODO in case the store is in development. Finally, an C<$args> hashref can be passed. Valid keys are C (see the function with the same name below) and C if the store should skip duplicate detection, C if the store is a triple store. =cut sub all_store_tests { my ($store, $data, $todo, $args) = @_; $args ||= {}; my $ex = $data->{ex}; my @names = @{$data->{names}}; my @triples = @{$data->{triples}}; my @quads = @{$data->{quads}}; my $nil = $data->{nil}; note "## Testing store " . ref($store); isa_ok( $store, 'RDF::Trine::Store' ); TODO: { local $TODO = ($todo) ? ref($store) . ' functionality is being worked on' : undef; throws_ok { my $st = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, $ex->d); $store->add_statement( $st, $ex->e ); } 'RDF::Trine::Error::MethodInvocationError', 'add_statement throws when called with quad and context'; throws_ok { my $st = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, $ex->d); $store->remove_statement( $st, $ex->e ); } 'RDF::Trine::Error::MethodInvocationError', 'remove_statement throws when called with quad and context'; add_statement_tests_simple( $store, $args, $ex ); update_sleep($args); bulk_add_statement_tests_simple( $store, $args, $ex ); update_sleep($args); literals_tests_simple( $store, $args, $ex ); blank_node_tests_quads( $store, $args, $ex ); count_statements_tests_simple( $store, $args, $ex ); add_quads( $store, $args, @quads ); update_sleep($args); count_statements_tests_quads( $store, $args, $ex ); add_triples( $store, $args, @triples ); update_sleep($args); count_statements_tests_triples( $store, $args, $ex, $nil ); contexts_tests( $store, $args ); get_statements_tests_triples( $store, $args, $ex ); get_pattern_tests( $store, $args, $ex ); get_statements_tests_quads( $store, $args, $ex, $nil ); remove_statement_tests( $store, $args, $ex, @names ); update_sleep($args); } } =item C<< all_triple_store_tests ($store, $data, $todo, $args) >> Will run tests for the given B store, i.e. a store that only accepts triples, given the data from C. You may also set a third argument to some true value to mark all tests as TODO in case the store is in development. For C<$args>, see above. =cut sub all_triple_store_tests { my ($store, $data, $todo, $args) = @_; $args ||= {}; $args->{quads_unsupported} = 1; my $ex = $data->{ex}; my @names = @{$data->{names}}; my @triples = @{$data->{triples}}; my @quads = @{$data->{quads}}; my $nil = $data->{nil}; note "## Testing store " . ref($store); isa_ok( $store, 'RDF::Trine::Store' ); TODO: { local $TODO = ($todo) ? ref($store) . ' functionality is being worked on' : undef; dies_ok { $store->get_contexts; } 'get_context dies'; add_statement_tests_simple( $store, $args, $ex ); update_sleep($args); bulk_add_statement_tests_simple( $store, $args, $ex ); update_sleep($args); literals_tests_simple( $store, $args, $ex ); blank_node_tests_triples( $store, $args, $ex ); count_statements_tests_simple( $store, $args, $ex ); add_triples( $store, $args, @triples ); update_sleep($args); count_statements_tests_triples( $store, $args, $ex, $nil ); get_statements_tests_triples( $store, $args, $ex ); get_pattern_tests( $store, $args, $ex ); } } =item C<< add_quads($store, $args, @quads) >> Helper function to add an array of quads to the given store. =cut sub add_quads { my ($store, $args, @quads) = @_; foreach my $q (@quads) { $store->add_statement( $q ); } } =item C<< add_triples($store, $args, @triples) >> Helper function to add an array of triples to the given store. =cut sub add_triples { my ($store, $args, @triples) = @_; foreach my $t (@triples) { $store->add_statement( $t ); } } =item C<< contexts_tests( $store, $args ) >> Testing contexts (aka. "graphs") =cut sub contexts_tests { note "contexts tests"; my $store = shift; my $args = shift; my $iter = $store->get_contexts(); isa_ok( $iter, 'RDF::Trine::Iterator' ); my %seen; while (my $c = $iter->next) { isa_ok( $c, 'RDF::Trine::Node' ); $seen{ $c->as_string }++; } my $expect = { '' => 1, '' => 1, '' => 1, }; is_deeply( \%seen, $expect, 'expected contexts' ); } =item C<< add_statement_tests_simple( $store, $args, $data->{ex} ) >> Tests to check add_statement. =cut sub add_statement_tests_simple { note "simple add_statement tests"; my ($store, $args, $ex) = @_; my $triple = RDF::Trine::Statement->new($ex->a, $ex->b, $ex->c); my $quad = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, $ex->d); my $etag_before = $store->etag; update_sleep($args); $store->add_statement( $triple, $ex->d ); update_sleep($args); SKIP: { skip 'It is OK to not support etag', 1 unless defined($etag_before); isnt($etag_before, $store->etag, 'Etag has changed'); } is( $store->size, 1, 'store has 1 statement after (triple+context) add' ); TODO: { local $TODO = 'Duplicate detection is unsupported' if $args->{suppress_dupe_tests}; $store->add_statement( $quad ); update_sleep($args); is( $store->size, 1, 'store has 1 statement after duplicate (quad) add' ); } $etag_before = $store->etag; $store->remove_statement( $triple, $ex->d ); update_sleep($args); SKIP: { skip 'It is OK to not support etag', 1 unless defined($etag_before); isnt($etag_before, $store->etag, 'Etag has changed'); } is( $store->size, 0, 'store has 0 statements after (triple+context) remove' ); my $quad2 = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, iri('graph')); $store->add_statement( $quad2 ); update_sleep($args); is( $store->size, 1, 'store has 1 statement after (quad) add' ); my $count = $store->count_statements( undef, undef, undef, iri('graph') ); is( $count, 1, 'expected count of specific-context statements' ); $store->remove_statement( $quad2 ); update_sleep($args); is( $store->size, 0, 'expected zero size after remove statement' ); } =item C<< bulk_add_statement_tests_simple( $store, $args, $data->{ex} ) >> Tests to check add_statement. =cut sub bulk_add_statement_tests_simple { note "bulk add_statement tests"; my ($store, $args, $ex) = @_; $store->_begin_bulk_ops if ($store->can('_begin_bulk_ops')); my $triple = RDF::Trine::Statement->new($ex->a, $ex->b, $ex->c); my $quad = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, $ex->d); $store->add_statement( $triple, $ex->d ); $store->_end_bulk_ops if ($store->can('_end_bulk_ops')); update_sleep($args); is( $store->size, 1, 'store has 1 statement after (triple+context) add' ) ; $store->_begin_bulk_ops if ($store->can('_begin_bulk_ops')); TODO: { local $TODO = 'Duplicate detection is unsupported' if $args->{suppress_dupe_tests}; $store->add_statement( $quad ); update_sleep($args); is( $store->size, 1, 'store has 1 statement after duplicate (quad) add' ) ; } $store->_end_bulk_ops if ($store->can('_end_bulk_ops')); $store->_begin_bulk_ops if ($store->can('_begin_bulk_ops')); $store->remove_statement( $triple, $ex->d ); is( $store->size, 0, 'store has 0 statements after (triple+context) remove' ); my $quad2 = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $ex->c, iri('graph')); $store->add_statement( $quad2 ); $store->_end_bulk_ops if ($store->can('_end_bulk_ops')); update_sleep($args); is( $store->size, 1, 'store has 1 statement after (quad) add' ); my $count = $store->count_statements( undef, undef, undef, iri('graph') ); is( $count, 1, 'expected count of specific-context statements' ); $store->remove_statement( $quad2 ); update_sleep($args); is( $store->size, 0, 'expected zero size after remove statement' ); } =item C<< literals_tests_simple( $store, $args, $data->{ex}) >> Tests to check literals support. =cut sub literals_tests_simple { note "simple tests with literals"; my ($store, $args, $ex) = @_; my $litplain = RDF::Trine::Node::Literal->new('dahut'); my $litlang1 = RDF::Trine::Node::Literal->new('dahu', 'fr' ); my $litlang2 = RDF::Trine::Node::Literal->new('dahut', 'en' ); my $litutf8 = RDF::Trine::Node::Literal->new('blåbærsyltetøy', 'nb' ); my $litstring = RDF::Trine::Node::Literal->new('dahut', undef, $xsd->string); my $litint = RDF::Trine::Node::Literal->new(42, undef, $xsd->integer); my $triple = RDF::Trine::Statement->new($ex->a, $ex->b, $litplain); my $quad = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $litplain, $ex->d); $store->add_statement( $triple, $ex->d ); is( $store->size, 1, 'store has 1 statement after (triple+context) add' ); TODO: { local $TODO = 'Duplicate detection is unsupported' if $args->{suppress_dupe_tests}; $store->add_statement( $quad ); is( $store->size, 1, 'store has 1 statement after duplicate (quad) add' ); } $store->remove_statement( $triple, $ex->d ); is( $store->size, 0, 'store has 0 statements after (triple+context) remove' ); $store->add_statement( $quad ); my $quad2 = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $litlang2, $ex->d); $store->add_statement( $quad2 ); is( $store->size, 2, 'store has 2 statements after (quad) add' ); { my $count = $store->count_statements( undef, undef, $litplain, undef ); is( $count, 1, 'expected 1 plain literal' ); } { my $iter = $store->get_statements( undef, undef, $litplain, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $st = $iter->next; isa_ok( $st, 'RDF::Trine::Statement' ); my $obj = $st->object; isa_ok($obj, 'RDF::Trine::Node::Literal'); is($obj->literal_value, 'dahut', 'expected triple get_statements bound object value' ); } { my $count = $store->count_statements( undef, undef, $litlang2, undef ); is( $count, 1, 'expected 1 language literal' ); } { my $count = $store->count_statements( undef, undef, $litlang1, undef ); is( $count, 0, 'expected 0 language literal' ); } my $quad3 = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $litlang1, $ex->d); $store->add_statement( $quad3 ); is( $store->size, 3, 'store has 3 statements after integer literal add' ); { my $iter = $store->get_statements( undef, undef, $litlang1, undef ); my $st = $iter->next; is($st->object->literal_value, 'dahu', 'expected triple get_statements bound object value' ); is($st->object->literal_value_language, 'fr', 'expected triple get_statements bound object language' ); is($st->object->literal_datatype, undef, 'expected triple get_statements bound object datatype is undef' ); } my $triple2 = RDF::Trine::Statement->new($ex->a, $ex->b, $litstring); $store->add_statement( $triple2 ); is( $store->size, 4, 'store has 4 statements after (triple) add' ); { my $count = $store->count_statements( undef, undef, $litplain, undef ); is( $count, 1, 'expected 1 plain literal' ); } { my $count = $store->count_statements( undef, undef, $litstring, undef ); is( $count, 1, 'expected 1 string literal' ); } { my $iter = $store->get_statements( undef, undef, $litstring, undef ); my $st = $iter->next; is($st->object->literal_value, 'dahut', 'expected triple get_statements bound object value' ); is($st->object->literal_value_language, undef, 'expected triple get_statements bound object language is undef' ); is($st->object->literal_datatype, $xsd->string->value, 'expected triple get_statements bound object datatype is string' ); } SKIP: { skip 'Quad-only test', 1 if $args->{quads_unsupported}; my $count = $store->count_statements( undef, undef, $litstring, $ex->d ); is( $count, 0, 'expected 0 string literal with context' ); } $store->remove_statement($quad); is( $store->size, 3, 'store has 3 statements after plain literal remove' ); my $quad4 = RDF::Trine::Statement::Quad->new($ex->a, $ex->b, $litint, $ex->d); $store->add_statement( $quad4 ); is( $store->size, 4, 'store has 4 statements after integer literal add' ); { my $count = $store->count_statements( $ex->a, $ex->b, undef, undef); is( $count, 4, 'expected 4 triples with all literals' ); } { my $count = $store->count_statements( $ex->a, $ex->b, $litint, undef ); is( $count, 1, 'expected 1 triple with integer literal' ); } { my $count = $store->count_statements( $ex->a, undef, $litlang1, undef ); is( $count, 1, 'expected 1 triple with language literal' ); } $store->remove_statement($triple2); is( $store->size, 3, 'store has 3 statements after string literal remove' ); $store->remove_statements(undef, undef, $litlang2, undef ); is( $store->size, 2, 'expected 2 statements after language remove statements' ); my $triple3 = RDF::Trine::Statement->new($ex->a, $ex->b, $litutf8); $store->add_statement( $triple3 ); is( $store->size, 3, 'store has 3 statements after addition of literal with utf8 chars' ); { my $iter = $store->get_statements( undef, undef, $litutf8, undef ); my $st = $iter->next; isa_ok( $st, 'RDF::Trine::Statement' ); is($st->object->literal_value, 'blåbærsyltetøy', 'expected triple get_statements bound object value with utf8 chars' ); $store->remove_statement($st); is( $store->size, 2, 'store has 2 statements after removal of literal with utf8 chars' ); } $store->remove_statements($ex->a, $ex->b, undef, undef ); is( $store->size, 0, 'expected zero size after remove statements' ); } =item C<< blank_node_tests_quads( $store, $args, $data->{ex} ) >> Tests to check blank node support for quads. =cut sub blank_node_tests_quads { note "quad tests with blank nodes"; my ($store, $args, $ex) = @_; my $blankfoo = RDF::Trine::Node::Blank->new('foo'); my $blankbar = RDF::Trine::Node::Blank->new('bar'); my $triple = RDF::Trine::Statement->new($blankfoo, $ex->b, $ex->c); my $quad = RDF::Trine::Statement::Quad->new($blankfoo, $ex->b, $ex->c, $ex->d); $store->add_statement( $triple, $ex->d ); is( $store->size, 1, 'store has 1 statement after (triple+context) add' ); TODO: { local $TODO = 'Duplicate detection is unsupported' if $args->{suppress_dupe_tests}; $store->add_statement( $quad ); is( $store->size, 1, 'store has 1 statement after duplicate (quad) add' ); } $store->remove_statement( $triple, $ex->d ); is( $store->size, 0, 'store has 0 statements after (triple+context) remove' ); my $quad2 = RDF::Trine::Statement::Quad->new($blankbar, $ex->b, $ex->c, $ex->d); $store->add_statement( $quad2 ); is( $store->size, 1, 'store has 1 statement after (quad) add' ); $store->add_statement( $quad ); is( $store->size, 2, 'store has 2 statements after (quad) add' ); my $triple2 = RDF::Trine::Statement->new($ex->a, $ex->b, $blankfoo); $store->add_statement( $triple2 ); is( $store->size, 3, 'store has 3 statements after (quad) add' ); { my $count = $store->count_statements( undef, undef, undef, $ex->d ); is( $count, 2, 'expected count of specific-context statements' ); } { my $count = $store->count_statements( undef, undef, $blankfoo, $ex->d ); is( $count, 0, 'expected zero of specific-context statements' ); } { my $count = $store->count_statements( undef, undef, $blankfoo, undef ); is( $count, 1, 'expected one object blank node' ); } { my $count = $store->count_statements( $blankbar, undef, $blankfoo, undef ); is( $count, 0, 'expected zero subject-object blank node' ); } { my $count = $store->count_statements( $blankbar, undef, undef, undef ); is( $count, 1, 'expected one subject blank node' ); } { my $count = $store->count_statements( $blankfoo, undef, undef, $ex->d ); is( $count, 1, 'expected one subject-context blank node' ); } { my $count = $store->count_statements( $blankfoo, $ex->b, undef, undef ); is( $count, 1, 'expected one subject-predicate blank node' ); } $store->remove_statements( undef, undef, $blankfoo, undef ); is( $store->size, 2, 'expected two triples after remove statements' ); $store->remove_statement( $quad2 ); is( $store->size, 1, 'expected single triples after remove statement' ); $store->remove_statement( $quad ); is( $store->size, 0, 'expected zero size after remove statement' ); } =item C<< blank_node_tests_triples( $store, $args, $data->{ex} ) >> Tests to check blank node support for triples. =cut sub blank_node_tests_triples { note "triple tests with blank nodes"; my ($store, $args, $ex) = @_; my $blankfoo = RDF::Trine::Node::Blank->new('foo'); my $blankbar = RDF::Trine::Node::Blank->new('bar'); my $triple = RDF::Trine::Statement->new($blankfoo, $ex->b, $ex->c); my $triple2 = RDF::Trine::Statement->new($ex->c, $ex->d, $blankbar); $store->add_statement( $triple ); is( $store->size, 1, 'store has 1 statement after (triple) add' ); TODO: { local $TODO = 'Duplicate detection is unsupported' if $args->{suppress_dupe_tests}; $store->add_statement( $triple ); is( $store->size, 1, 'store has 1 statement after duplicate (triple) add' ); } $store->remove_statement( $triple ); is( $store->size, 0, 'store has 0 statements after (triple) remove' ); $store->add_statement( $triple2 ); is( $store->size, 1, 'store has 1 statement after (triple) add' ); $store->add_statement( $triple ); is( $store->size, 2, 'store has 2 statements after (triple) add' ); my $triple3 = RDF::Trine::Statement->new($ex->a, $ex->b, $blankfoo); $store->add_statement( $triple3 ); is( $store->size, 3, 'store has 3 statements after (triple) add' ); { my $count = $store->count_statements( undef, undef, $blankfoo, undef ); is( $count, 1, 'expected one object blank node' ); } { my $count = $store->count_statements( $blankbar, undef, $blankfoo, undef ); is( $count, 0, 'expected zero subject-object blank node' ); } { my $count = $store->count_statements( $blankfoo, undef, undef, $ex->d ); is( $count, 1, 'expected one subject-context blank node' ); } { my $count = $store->count_statements( $blankfoo, $ex->b, undef, undef ); is( $count, 1, 'expected one subject-predicate blank node' ); } $store->remove_statements( undef, undef, $blankfoo, undef ); is( $store->size, 2, 'expected two triples after remove statements' ); $store->remove_statement( $triple2 ); is( $store->size, 1, 'expected single triples after remove statement' ); $store->remove_statement( $triple ); is( $store->size, 0, 'expected zero size after remove statement' ); } =item C<< count_statements_tests_simple( $store, $args, $data->{ex} ) >> Tests to check that counts are correct. =cut sub count_statements_tests_simple { note " simple count_statements tests"; my ($store, $args, $ex) = @_; { is( $store->size, 0, 'expected zero size before add statement' ); my $st = RDF::Trine::Statement::Quad->new( $ex->a, $ex->b, $ex->c, $ex->d ); $store->add_statement( $st ); is( $store->size, 1, 'size' ); is( $store->count_statements(), 1, 'count_statements()' ); is( $store->count_statements(undef, undef, undef), 1, 'count_statements(fff) with undefs' ); is( $store->count_statements(undef, undef, undef, undef), 1, 'count_statements(ffff) with undefs' ); SKIP: { skip 'Quad-only test', 2 if $args->{quads_unsupported}; is( $store->count_statements(map {variable($_)} qw(s p o)), 1, 'count_statements(fff) with variables' ); is( $store->count_statements(map {variable($_)} qw(s p o g)), 1, 'count_statements(ffff) with variables' ); } # 1-bound is( $store->count_statements($ex->a, undef, undef, undef), 1, 'count_statements(bfff)' ); is( $store->count_statements(undef, $ex->b, undef, undef), 1, 'count_statements(fbff)' ); is( $store->count_statements(undef, undef, $ex->c, undef), 1, 'count_statements(ffbf)' ); is( $store->count_statements(undef, undef, undef, $ex->d), 1, 'count_statements(fffb)' ); # 2-bound # local($::debug) = 1; is( $store->count_statements($ex->a, $ex->b, undef, undef), 1, 'count_statements(bbff)' ); is( $store->count_statements(undef, $ex->b, $ex->c, undef), 1, 'count_statements(fbbf)' ); is( $store->count_statements(undef, undef, $ex->c, $ex->d), 1, 'count_statements(ffbb)' ); is( $store->count_statements($ex->a, undef, undef, $ex->d), 1, 'count_statements(bffb)' ); $store->remove_statement( $st ); is( $store->size, 0, 'size' ); } is( $store->count_statements( $ex->z, undef, undef, undef ), 0, 'count_statements(bfff) empty result set' ); is( $store->count_statements( $ex->z, undef, undef, $ex->x ), 0, 'count_statements(bffb) empty result set' ); } =item C<< count_statements_tests_quads( $store, $args, $data->{ex} ) >> Count statement tests for quads. =cut sub count_statements_tests_quads { note " quad count_statements tests"; my ($store, $args, $ex) = @_; { is( $store->count_statements, 27, 'count_statements()' ); is( $store->count_statements(undef, undef, undef), 27, 'count_statements( fff )' ); is( $store->count_statements(undef, undef, undef, undef), 81, 'count_statements( ffff )' ); is( $store->count_statements( $ex->a, undef, undef ), 9, 'count_statements( bff )' ); is( $store->count_statements( $ex->a, undef, undef, undef ), 27, 'count_statements( bfff )' ); is( $store->count_statements( $ex->a, undef, undef, $ex->a ), 9, 'count_statements( bffb )' ); } } =item C<< count_statements_tests_triples( $store, $args, $data->{ex}, $data->{nil} ) >> More tests for counts, with triples. =cut sub count_statements_tests_triples { note " triple count_statements tests"; my ($store, $args, $ex, $nil) = @_; { is( $store->count_statements, 27, 'count_statements() after triples added' ); is( $store->count_statements(undef, undef, undef), 27, 'count_statements( fff ) after triples added' ); is( $store->count_statements( $ex->a, undef, undef ), 9, 'count_statements( bff )' ); is( $store->count_statements( $ex->a, undef, undef, $nil ), 9, 'count_statements( bffb )' ); SKIP: { skip 'Quad-only test', 2 if $args->{quads_unsupported}; is( $store->count_statements(undef, undef, undef, undef), 108, 'count_statements( ffff ) after triples added' ); is( $store->count_statements( $ex->a, undef, undef, undef ), 27+9, 'count_statements( bfff )' ); } } } =item C<< get_statements_tests_triples( $store, $args, $data->{ex} ) >> Tests for getting statements using triples. =cut sub get_statements_tests_triples { note " triple get_statements tests"; my ($store, $args, $ex) = @_; { my $iter = $store->get_statements( undef, undef, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 27, 'get_statements( fff ) expected result count' ); is( $iter->next, undef, 'triple iterator end-of-stream' ); } { my $iter = $store->get_statements( $ex->a, variable('p'), variable('o') ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { ok( $st->subject->equal( $ex->a ), 'expected triple get_statements bound subject' ); $count++; } is( $count, 9, 'get_statements( bff ) expected result count' ); } { my $iter = $store->get_statements( $ex->d, undef, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 0, 'get_statements( bff ) expected empty results' ); } } =item C<< get_statements_tests_quads( $store, $args, $data->{ex}, $data->{nil} ) >> Tests for getting statements using quads. =cut sub get_statements_tests_quads { note " quad get_statements tests"; my ($store, $args, $ex, $nil) = @_; { my $iter = $store->get_statements( undef, undef, undef, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 108, 'get_statements( ffff ) expected result count' ); is( $iter->next, undef, 'quad iterator end-of-stream' ); } { my $iter = $store->get_statements( $ex->a, , variable('p'), variable('o'), variable('g') ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { ok( $st->subject->equal( $ex->a ), 'expected triple get_statements bound subject' ); $count++; } is( $count, 27+9, 'get_statements( bfff ) expected result count' ); } { my $iter = $store->get_statements( $ex->d, undef, undef, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 0, 'get_statements( bfff ) expected empty results' ); } { my $iter = $store->get_statements( undef, undef, undef, $nil ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 27, 'get_statements( fffb ) expected result count 1' ); } { my $iter = $store->get_statements( undef, undef, undef, $ex->a ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { ok( $st->context->equal( $ex->a ), 'expected triple get_statements bound context' ); $count++; } is( $count, 27, 'get_statements( fffb ) expected result count 2' ); } { my $iter = $store->get_statements( $ex->a, $ex->b, undef, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { ok( $st->subject->equal( $ex->a ), 'expected triple get_statements bound subject' ); ok( $st->predicate->equal( $ex->b ), 'expected triple get_statements bound predicate' ); $count++; } is( $count, 9+3, 'get_statements( bbff ) expected result count' ); } { my $iter = $store->get_statements( $ex->a, $ex->z, undef, undef ); isa_ok( $iter, 'RDF::Trine::Iterator' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 0, 'get_statements( bbff ) expected empty result' ); } } =item C<< get_pattern_tests( $store, $args, $data->{ex} ) >> Tests for getting statements using with get_pattern. =cut sub get_pattern_tests { note " get_pattern tests"; my ($store, $args, $ex) = @_; my $model = RDF::Trine::Model->new($store); my $nil = RDF::Trine::Node::Nil->new(); { my $iter = $model->get_pattern( RDF::Trine::Pattern->new( statement( $ex->a, $ex->b, variable('o1'), $nil, ), statement( $ex->a, $ex->c, variable('o2'), $nil, ), ) ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my $count = 0; while (my $st = $iter->next()) { $count++; } my $expected = 9; is( $count, $expected, 'get_pattern( bbf, bbf ) expected result count' ); is( $iter->next, undef, 'pattern iterator end-of-stream' ); } { my $iter = $model->get_pattern( RDF::Trine::Pattern->new( statement( $ex->a, $ex->b, variable('o1'), $nil, ), statement( $ex->a, $ex->c, literal('DAAAAHUUUT'), $nil, ), ) ); isa_ok( $iter, 'RDF::Trine::Iterator::Bindings' ); my $count = 0; while (my $st = $iter->next()) { $count++; } is( $count, 0, 'get_pattern( bbf, bbu ) expected result count' ); is( $iter->next, undef, 'pattern iterator end-of-stream' ); } } =item C<< remove_statement_tests( $store, $args, $data->{ex}, @{$data->{names}} ); >> Tests for removing statements. =cut sub remove_statement_tests { note " remove_statement tests"; my ($store, $args, $ex, @names) = @_; is( $store->count_statements( undef, undef, undef, undef ), 108, 'store size before quad removal' ); foreach my $i (@names[0..2]) { my $w = $ex->$i(); foreach my $j (@names[0..2]) { my $x = $ex->$j(); foreach my $k (@names[0..2]) { my $y = $ex->$k(); foreach my $l (@names[0..2]) { my $z = $ex->$l(); my $quad = RDF::Trine::Statement::Quad->new($w,$x,$y,$z); $store->remove_statement( $quad ); } } } } update_sleep($args); is( $store->count_statements( undef, undef, undef, undef ), 27, 'quad count after quad removal' ); is( $store->count_statements( undef, undef, undef ), 27, 'triple count after quad removal' ); $store->remove_statements( $ex->a, undef, undef, undef ); update_sleep($args); is( $store->count_statements( undef, undef, undef ), 18, 'triple count after remove_statements( bfff )' ); foreach my $i (@names[0..2]) { my $w = $ex->$i(); foreach my $j (@names[0..2]) { my $x = $ex->$j(); foreach my $k (@names[0..2]) { my $y = $ex->$k(); my $triple = RDF::Trine::Statement->new($w,$x,$y); $store->remove_statement( $triple ); } } } update_sleep($args); is( $store->count_statements( undef, undef, undef, undef ), 0, 'quad count after triple removal' ); } =item C<< update_sleep ( \%args ) >> If C<< $args{ update_sleep } >> is defined, sleeps for that many seconds. This function is called after update operations to aid in testing stores that perform updates asynchronously. =cut sub update_sleep { my $args = shift; if (defined($args->{ update_sleep })) { note ' sleeping ' . $args->{ update_sleep }. ' secs after store update'; sleep($args->{ update_sleep }); } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams and Kjetil Kjernsmo =cut RDF-Trine-1.007/lib/RDF/Trine/000755 000765 000024 00000000000 12171744443 015553 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine.pm000644 000765 000024 00000014106 12171744402 016106 0ustar00gregstaff000000 000000 # RDF::Trine # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine - An RDF Framework for Perl =head1 VERSION This document describes RDF::Trine version 1.007 =head1 SYNOPSIS use RDF::Trine; my $store = RDF::Trine::Store::Memory->new(); my $model = RDF::Trine::Model->new($store); # parse some web data into the model, and print the count of resulting RDF statements RDF::Trine::Parser->parse_url_into_model( 'http://kasei.us/about/foaf.xrdf', $model ); print $model->size . " RDF statements parsed\n"; # Create a namespace object for the foaf vocabulary my $foaf = RDF::Trine::Namespace->new( 'http://xmlns.com/foaf/0.1/' ); # Create a node object for the FOAF name property my $pred = $foaf->name; # alternatively: # my $pred = RDF::Trine::Node::Resource->new('http://xmlns.com/foaf/0.1/name'); # Create an iterator for all the statements in the model with foaf:name as the predicate my $iter = $model->get_statements(undef, $pred, undef); # Now print the results print "Names of things:\n"; while (my $st = $iter->next) { my $s = $st->subject; my $name = $st->object; # $s and $name have string overloading, so will print correctly print "The name of $s is $name\n"; } =head1 DESCRIPTION RDF::Trine provides an Resource Descriptive Framework (RDF) with an emphasis on extensibility, API stability, and the presence of a test suite. The package consists of several components: =over 4 =item * RDF::Trine::Model - RDF model providing access to a triple store. This module would typically be used to access an existing store by a developer looking to "Just get stuff done." =item * RDF::Trine::Parser - RDF parsers for various serialization formats including RDF/XML, Turtle, RDFa, and RDF/JSON. =item * RDF::Trine::Store::Memory - An in-memory, non-persistant triple store. Typically used for temporary data. =item * RDF::Trine::Store::DBI - A triple store for MySQL, PostgreSQL, and SQLite, based on the relational schema used by Redland. Typically used to for large, persistent data. =item * RDF::Trine::Iterator - Iterator classes for variable bindings and RDF statements, used by RDF::Trine::Store, RDF::Trine::Model, and RDF::Query. =item * RDF::Trine::Namespace - A convenience class for easily constructing RDF::Trine::Node::Resource objects from URI namespaces. =back =cut package RDF::Trine; use 5.010; use strict; use warnings; no warnings 'redefine'; use Module::Load::Conditional qw[can_load]; use LWP::UserAgent; our ($debug, @ISA, $VERSION, @EXPORT_OK); BEGIN { $debug = 0; $VERSION = '1.007'; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(iri blank literal variable statement store UNION_GRAPH NIL_GRAPH); unless ($ENV{RDFTRINE_NO_REDLAND}) { can_load( modules => { 'RDF::Redland' => undef, 'RDF::Trine::Store::Redland' => undef, 'RDF::Trine::Parser::Redland' => undef, } ); } } use constant UNION_GRAPH => 'tag:gwilliams@cpan.org,2010-01-01:RT:ALL'; use constant NIL_GRAPH => 'tag:gwilliams@cpan.org,2010-01-01:RT:NIL'; use Log::Log4perl qw(:easy); if (! Log::Log4perl::initialized() ) { Log::Log4perl->easy_init($ERROR); } use RDF::Trine::Graph; use RDF::Trine::Parser; use RDF::Trine::Serializer; use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Namespace; use RDF::Trine::NamespaceMap; use RDF::Trine::Iterator; use RDF::Trine::Store; use RDF::Trine::Error; use RDF::Trine::Model; use RDF::Trine::Parser::Turtle; use RDF::Trine::Parser::TriG; sub _uniq { my %seen; my @data; foreach (@_) { push(@data, $_) unless ($seen{ $_ }++); } return @data; } =head1 FUNCTIONS =over 4 =item C<< iri ( $iri ) >> Returns a RDF::Trine::Node::Resource object with the given IRI value. =cut sub iri { my $iri = shift; return RDF::Trine::Node::Resource->new( $iri ); } =item C<< blank ( $id ) >> Returns a RDF::Trine::Node::Blank object with the given identifier. =cut sub blank { my $id = shift; return RDF::Trine::Node::Blank->new( $id ); } =item C<< literal ( $value, $lang, $dt ) >> Returns a RDF::Trine::Node::Literal object with the given value and optional language/datatype. =cut sub literal { return RDF::Trine::Node::Literal->new( @_ ); } =item C<< variable ( $name ) >> Returns a RDF::Trine::Node::Variable object with the given variable name. =cut sub variable { my $name = shift; return RDF::Trine::Node::Variable->new( $name ); } =item C<< statement ( @nodes ) >> Returns a RDF::Trine::Statement object with the supplied node objects. =cut sub statement { my @nodes = @_; if (scalar(@nodes) == 4) { return RDF::Trine::Statement::Quad->new( @nodes ); } else { return RDF::Trine::Statement->new( @nodes ); } } =item C<< store ( $config ) >> Returns a RDF::Trine::Store object based on the supplied configuration string. See L for more information on store configuration strings. =cut sub store { my $config = shift; return RDF::Trine::Store->new_with_string( $config ); } =item C<< default_useragent ( [ $ua ] ) >> Returns the L object used by default for any operation requiring network requests. Ordinarily, the calling code will obtain the default user agent, and clone it before further configuring it for a specific request, thus leaving the default object untouched. If C<< $ua >> is passed as an argument, sets the global default user agent to this object. =cut { my $_useragent; sub default_useragent { my $class = shift; my $ua = shift || $_useragent; unless (defined($ua)) { $ua = LWP::UserAgent->new( agent => "RDF::Trine/$RDF::Trine::VERSION" ); } $_useragent = $ua; return $ua; }} 1; # Magic true value required at end of module __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Error.pm000644 000765 000024 00000010647 12171744402 017205 0ustar00gregstaff000000 000000 # RDF::Trine::Error # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Error - Error classes for RDF::Trine =head1 VERSION This document describes RDF::Trine::Error version 1.007 =head1 SYNOPSIS use RDF::Trine::Error qw(:try); =head1 DESCRIPTION RDF::Trine::Error provides a class hierarchy of errors that other RDF::Trine classes may throw using the L API. See L for more information. =head1 REQUIRES L =cut package RDF::Trine::Error; use strict; use warnings; no warnings 'redefine'; use Carp qw(carp croak confess); use base qw(Error); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### package RDF::Trine::Error::CompilationError; use base qw(RDF::Trine::Error); package RDF::Trine::Error::QuerySyntaxError; use base qw(RDF::Trine::Error); package RDF::Trine::Error::MethodInvocationError; use base qw(RDF::Trine::Error); package RDF::Trine::Error::SerializationError; use base qw(RDF::Trine::Error); package RDF::Trine::Error::DatabaseError; use base qw(RDF::Trine::Error); package RDF::Trine::Error::ParserError; use base qw(RDF::Trine::Error); package RDF::Trine::Error::ParserError::Explainable; use base qw(RDF::Trine::Error::ParserError); use Module::Load::Conditional qw[can_load]; our $ANSI; BEGIN { $ANSI = can_load( modules => { 'Term::ANSIColor' => undef } ); } sub _get_line { my $self = shift; my $fh = shift; my $line = shift; my $buffer; do { $buffer = $fh->getline; } while (--$line); return $buffer; } package RDF::Trine::Error::ParserError::Tokenized; use base qw(RDF::Trine::Error::ParserError::Explainable); sub explain { my $self = shift; my $fh = shift; seek($fh, 0, 0); my $text = $self->text; my $t = $self->object; my $line = $t->start_line; my $col = $t->start_column; my $buffer = $self->_get_line( $fh, $line ); my $maxlen = length($buffer) - $col; my $len = 1; if ($t->line == $t->start_line) { $len = ($t->column - $t->start_column); } else { $len = $maxlen; } my $tabs = ($buffer =~ tr/\t//); $buffer =~ s/\t/ /g; $col += 3 * $tabs; chomp($text); if ($RDF::Trine::Error::ParserError::Explainable::ANSI) { print STDERR Term::ANSIColor::color('red'); print STDERR "$text:\n"; print STDERR Term::ANSIColor::color('reset'); print STDERR substr($buffer, 0, $col-1); print STDERR Term::ANSIColor::color('red'); print STDERR substr($buffer, $col-1, $len); print STDERR Term::ANSIColor::color('reset'); print STDERR substr($buffer, $col+$len-1); print STDERR " " x ($col-1); print STDERR Term::ANSIColor::color('blue'); print STDERR "^"; if ($len > 1) { print STDERR ("~" x ($len-1)); } print STDERR "\n"; print STDERR Term::ANSIColor::color('reset'); } else { print STDERR "$text:\n"; print STDERR $buffer; print STDERR " " x ($col-1); print STDERR "^"; if ($len > 1) { print STDERR ("~" x ($len-1)); } print STDERR "\n"; } } package RDF::Trine::Error::ParserError::Positioned; use base qw(RDF::Trine::Error::ParserError::Explainable); sub explain { my $self = shift; my $fh = shift; seek($fh, 0, 0); my $text = $self->text; my $pos = $self->value; my ($line, $col) = @$pos; my $buffer = $self->_get_line( $fh, $line ) || ''; my $tabs = ($buffer =~ tr/\t//); $buffer =~ s/\t/ /g; $col += 3 * $tabs; chomp($text); if ($RDF::Trine::Error::ParserError::Explainable::ANSI) { print STDERR Term::ANSIColor::color('red'); print STDERR "$text:\n"; print STDERR Term::ANSIColor::color('reset'); print STDERR $buffer; print STDERR Term::ANSIColor::color('red'); print STDERR " " x ($col-1); print STDERR "^"; print STDERR Term::ANSIColor::color('reset'); print STDERR "\n"; } else { print STDERR "$text:\n"; print STDERR $buffer; print STDERR " " x ($col-1); print STDERR "^"; print STDERR "\n"; } } package RDF::Trine::Error::UnimplementedError; use base qw(RDF::Trine::Error); 1; __END__ =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Exporter/000755 000765 000024 00000000000 12171744443 017363 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Graph.pm000644 000765 000024 00000021504 12171744402 017147 0ustar00gregstaff000000 000000 # RDF::Trine::Graph # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Graph - Materialized RDF Graphs for testing isomorphism =head1 VERSION This document describes RDF::Trine::Graph version 1.007 =head1 SYNOPSIS use RDF::Trine::Graph; my $a = RDF::Trine::Graph->new( $model_a ); my $b = RDF::Trine::Graph->new( $model_b ); print "graphs are " . ($a->equals( $b ) ? "the same" : "different"); =head1 DESCRIPTION RDF::Trine::Graph provdes a mechanism for testing graph isomorphism based on graph triples from either a RDF::Trine::Model or a RDF::Trine::Iterator. Isomorphism testing requires materializing all of a graph's triples in memory, and so should be used carefully in situations with large graphs. =head1 METHODS =over 4 =cut package RDF::Trine::Graph; use strict; use warnings; no warnings 'redefine'; use Algorithm::Combinatorics qw(permutations); our ($VERSION, $debug, $AUTOLOAD); BEGIN { $debug = 0; $VERSION = '1.007'; } use overload '==' => \&RDF::Trine::Graph::_eq, 'eq' => \&RDF::Trine::Graph::_eq, 'le' => \&RDF::Trine::Graph::_le, 'ge' => \&RDF::Trine::Graph::_ge, 'lt' => \&RDF::Trine::Graph::_lt, 'gt' => \&RDF::Trine::Graph::_gt, ; sub _eq { my ($x, $y) = @_; return $x->equals($y); } sub _le { my ($x, $y) = @_; return $x->is_subgraph_of($y); } sub _ge { return _le(@_[1,0]); } sub _lt { my ($x, $y) = @_; # Test::More::diag(sprintf('%s // %s', ref($x), ref($y))); return ($x->size < $y->size) && ($x->is_subgraph_of($y)); } sub _gt { return _lt(@_[1,0]); } use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed); use RDF::Trine::Node; use RDF::Trine::Store; =item C<< new ( $model ) >> =item C<< new ( $iterator ) >> Returns a new graph from the given RDF::Trine::Model or RDF::Trine::Iterator::Graph object. =cut sub new { my $class = shift; unless (blessed($_[0])) { throw RDF::Trine::Error::MethodInvocationError -text => "RDF::Trine::Graph::new must be called with a Model or Iterator argument"; } my %data; if ($_[0]->isa('RDF::Trine::Iterator::Graph')) { my $iter = shift; my $model = RDF::Trine::Model->new( RDF::Trine::Store->temporary_store() ); while (my $st = $iter->next) { $model->add_statement( $st ); } $data{ model } = $model; } elsif ($_[0]->isa('RDF::Trine::Model')) { $data{ model } = shift; } else { throw RDF::Trine::Error::MethodInvocationError -text => "RDF::Trine::Graph::new must be called with a Model or Iterator argument"; } my $self = bless(\%data, $class); } =item C<< equals ( $graph ) >> Returns true if the invocant and $graph represent two equal RDF graphs (e.g. there exists a bijection between the RDF statements of the invocant and $graph). =cut sub equals { my $self = shift; my $graph = shift; undef($self->{error}); return $self->_check_equality($graph) ? 1 : 0; } sub _check_equality { my $self = shift; my $graph = shift; unless (blessed($graph) and $graph->isa('RDF::Trine::Graph')) { $self->{error} = "RDF::Trine::Graph::equals must be called with a Graph argument"; throw RDF::Trine::Error::MethodInvocationError -text => $self->{error}; } my @graphs = ($self, $graph); my ($ba, $nba) = $self->split_blank_statements; my ($bb, $nbb) = $graph->split_blank_statements; if (scalar(@$nba) != scalar(@$nbb)) { my $nbac = scalar(@$nba); my $nbbc = scalar(@$nbb); $self->{error} = "count of non-blank statements didn't match ($nbac != $nbbc)"; return 0; } my $bac = scalar(@$ba); my $bbc = scalar(@$bb); if ($bac != $bbc) { $self->{error} = "count of blank statements didn't match ($bac != $bbc)"; return 0; } for ($nba, $nbb) { @$_ = sort map { $_->as_string } @$_; } foreach my $i (0 .. $#{ $nba }) { unless ($nba->[$i] eq $nbb->[$i]) { $self->{error} = "non-blank triples don't match: " . Dumper($nba->[$i], $nbb->[$i]); return 0; } } return _find_mapping($self, $ba, $bb); } =item C<< is_subgraph_of ( $graph ) >> Returns true if the invocant is a subgraph of $graph. (i.e. there exists an injection of RDF statements from the invocant to $graph.) =cut sub is_subgraph_of { my $self = shift; my $graph = shift; undef($self->{error}); return $self->_check_subgraph($graph) ? 1 : 0; } =item C<< injection_map ( $graph ) >> If the invocant is a subgraph of $graph, returns a mapping of blank node identifiers from the invocant graph to $graph as a hashref. Otherwise returns false. The solution is not always unique; where there exist multiple solutions, the solution returned is arbitrary. =cut sub injection_map { my $self = shift; my $graph = shift; undef($self->{error}); my $map = $self->_check_subgraph($graph); return $map if $map; return; } sub _check_subgraph { my $self = shift; my $graph = shift; unless (blessed($graph) and $graph->isa('RDF::Trine::Graph')) { throw RDF::Trine::Error::MethodInvocationError -text => "RDF::Trine::Graph::equals must be called with a Graph argument"; } my @graphs = ($self, $graph); my ($ba, $nba) = $self->split_blank_statements; my ($bb, $nbb) = $graph->split_blank_statements; if (scalar(@$nba) > scalar(@$nbb)) { $self->{error} = "invocant had too many blank node statements to be a subgraph of argument"; return 0; } elsif (scalar(@$ba) > scalar(@$bb)) { $self->{error} = "invocant had too many non-blank node statements to be a subgraph of argument"; return 0; } my %NBB = map { $_->as_string => 1 } @$nbb; foreach my $st (@$nba) { unless ($NBB{ $st->as_string }) { return 0; } } return _find_mapping($self, $ba, $bb); } sub _find_mapping { my ($self, $ba, $bb) = @_; if (scalar(@$ba) == 0) { return {}; } my %blank_ids_a; foreach my $st (@$ba) { foreach my $n (grep { $_->isa('RDF::Trine::Node::Blank') } $st->nodes) { $blank_ids_a{ $n->blank_identifier }++; } } my %blank_ids_b; foreach my $st (@$bb) { foreach my $n (grep { $_->isa('RDF::Trine::Node::Blank') } $st->nodes) { $blank_ids_b{ $n->blank_identifier }++; } } my %bb_master = map { $_->as_string => 1 } @$bb; my @ka = keys %blank_ids_a; my @kb = keys %blank_ids_b; my $kbp = permutations( \@kb ); my $count = 0; MAPPING: while (my $mapping = $kbp->next) { my %mapping; @mapping{ @ka } = @$mapping; warn "trying mapping: " . Dumper(\%mapping) if ($debug); my %bb = %bb_master; foreach my $st (@$ba) { my @nodes; foreach my $method ($st->node_names) { my $n = $st->$method(); if ($n->isa('RDF::Trine::Node::Blank')) { my $id = $mapping{ $n->blank_identifier }; warn "mapping " . $n->blank_identifier . " to $id\n" if ($debug); push(@nodes, RDF::Trine::Node::Blank->new( $id )); } else { push(@nodes, $n); } } my $class = ref($st); my $mapped_st = $class->new( @nodes )->as_string; warn "checking for '$mapped_st' in " . Dumper(\%bb) if ($debug); if ($bb{ $mapped_st }) { delete $bb{ $mapped_st }; } else { next MAPPING; } } $self->{error} = "found mapping: " . Dumper(\%mapping) if ($debug); return \%mapping; } $self->{error} = "didn't find blank node mapping\n"; return 0; } =item C<< split_blank_statements >> Returns two array refs, containing triples with blank nodes and triples without any blank nodes, respectively. =cut sub split_blank_statements { my $self = shift; my $iter = $self->get_statements; my (@blanks, @nonblanks); while (my $st = $iter->next) { if ($st->has_blanks) { push(@blanks, $st); } else { push(@nonblanks, $st); } } return (\@blanks, \@nonblanks); } =item C<< get_statements >> Returns a RDF::Trine::Iterator::Graph object for the statements in this graph. =cut # The code below actually goes further now and makes RDF::Trine::Graph # into a subclass of RDF::Trine::Model via object delegation. This feature # is undocumented as it's not clear whether this is desirable or not. =begin private =item C<< isa >> =cut sub isa { my ($proto, $queried) = @_; $proto = ref($proto) if ref($proto); return UNIVERSAL::isa($proto, $queried) || RDF::Trine::Model->isa($queried); } =item C<< can >> =cut sub can { my ($proto, $queried) = @_; $proto = ref($proto) if ref($proto); return UNIVERSAL::can($proto, $queried) || RDF::Trine::Model->can($queried); } sub AUTOLOAD { my $self = shift; return if $AUTOLOAD =~ /::DESTROY$/; $AUTOLOAD =~ s/^(.+)::([^:]+)$/$2/; return $self->{model}->$AUTOLOAD(@_); } =end private =item C<< error >> Returns an error string explaining the last failed C<< equal >> call. =cut sub error { my $self = shift; return $self->{error}; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/000755 000765 000024 00000000000 12171744443 017344 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Iterator.pm000644 000765 000024 00000027650 12171744402 017707 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator - Iterator class for SPARQL query results =head1 VERSION This document describes RDF::Trine::Iterator version 1.007. =head1 SYNOPSIS use RDF::Trine::Iterator; my $iterator = RDF::Trine::Iterator->new( \&data, 'bindings', \@names ); while (my $row = $iterator->next) { my @vars = keys %$row; # do something with @vars } =head1 METHODS =over 4 =cut package RDF::Trine::Iterator; use strict; use warnings; no warnings 'redefine'; use Encode; use Data::Dumper; use Log::Log4perl; use Carp qw(carp); use Scalar::Util qw(blessed reftype refaddr); use XML::SAX; use RDF::Trine::Node; use RDF::Trine::Iterator::SAXHandler; use RDF::Trine::Iterator::JSONHandler; our ($VERSION, @ISA, @EXPORT_OK); BEGIN { $VERSION = '1.007'; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(sgrep smap swatch); use overload 'bool' => sub { $_[0] }; use overload '&{}' => sub { my $self = shift; return sub { return $self->next; }; }; } use RDF::Trine::Iterator::Bindings; use RDF::Trine::Iterator::Boolean; use RDF::Trine::Iterator::Graph; =item C =item C Returns a new SPARQL Result interator object. Results must be either an reference to an array containing results or a CODE reference that acts as an iterator, returning successive items when called, and returning undef when the iterator is exhausted. $type should be one of: bindings, boolean, graph. =cut sub new { my $proto = shift; my $class = ref($proto) || $proto; my $stream = shift || sub { undef }; my $type = shift || 'bindings'; my $names = shift || []; my %args = @_; if (ref($stream) and ref($stream) eq 'ARRAY') { my $array = $stream; $stream = sub { return shift(@$array); } } my $open = 0; my $finished = 0; my $row; my $data = { _open => 0, _finished => 0, _type => $type, _names => $names, _stream => $stream, _args => \%args, _count => 0, _row => undef, _peek => [], # _source => Carp::longmess(), }; my $self = bless($data, $class); return $self; } =item C Returns the underlying result type (boolean, graph, bindings). =cut sub type { my $self = shift; return $self->{_type}; } =item C Returns true if the underlying result is a boolean value. =item C Returns true if the underlying result is a set of variable bindings. =item C Returns true if the underlying result is an RDF graph. =cut sub is_boolean { 0 } sub is_bindings { 0 } sub is_graph { 0 } =item C Returns a string representation of the stream data in the specified C<$format>. If C<$format> is missing, defaults to XML serialization. Other options are: http://www.w3.org/2001/sw/DataAccess/json-sparql/ =cut sub to_string { my $self = shift; my $format = shift || 'http://www.w3.org/2005/sparql-results#'; if (ref($format) and $format->isa('RDF::Redland::URI')) { $format = $format->as_string; } if ($format eq 'http://www.w3.org/2001/sw/DataAccess/json-sparql/') { return $self->as_json; } else { return $self->as_xml; } } =item C<< from_string ( $xml ) >> Returns a new iterator using the supplied XML string in the SPARQL XML Results format. =cut sub from_string { my $class = shift; my $string = shift; my $bytes = encode('UTF-8', $string); return $class->from_bytes($bytes); } =item C<< from_bytes ( $xml ) >> Returns a new iterator using the supplied XML byte sequence (note: not character data) in the SPARQL XML Results format. =cut sub from_bytes { my $class = shift; my $string = shift; unless (ref($string)) { my $data = $string; open( my $fh, '<', \$data ); $string = $fh; } my $handler = RDF::Trine::Iterator::SAXHandler->new(); my $p = XML::SAX::ParserFactory->parser(Handler => $handler); $p->parse_file( $string ); my $iter = $handler->iterator; return $iter; } =item C<< from_json ( $json ) >> =cut sub from_json { my $class = shift; my $json = shift; my $p = RDF::Trine::Iterator::JSONHandler->new( @_ ); return $p->parse( $json ); } =item C<< next_result >> =item C<< next >> Returns the next item in the stream. =cut sub next_result { $_[0]->next } sub next { my $self = shift; return if ($self->{_finished}); if (scalar(@{ $self->{_peek} })) { return shift(@{ $self->{_peek} }); } my $stream = $self->{_stream}; my $value = $stream->(); unless (defined($value)) { $self->{_finished} = 1; } $self->{_open} = 1; $self->{_row} = $value; $self->{_count}++ if defined($value); return $value; } =item C<< peek >> Returns the next value from the iterator without consuming it. The value will remain in queue until the next call to C<< next >>. =cut sub peek { my $self = shift; return if ($self->{_finished}); my $value = $self->next; push( @{ $self->{_peek} }, $value ); return $value; } =item C<< current >> Returns the current item in the stream. =cut sub current { my $self = shift; if ($self->open) { return $self->_row; } else { return $self->next; } } =item C<< end >> =item C<< finished >> Returns true if the end of the stream has been reached, false otherwise. =cut sub end { $_[0]->finished } sub finished { my $self = shift; my $v = $self->peek; return 0 if (defined($v)); return $self->{_finished}; } =item C<< open >> Returns true if the first element of the stream has been retrieved, false otherwise. =cut sub open { my $self = shift; return $self->{_open}; } =item C<< close >> Closes the stream. Future attempts to retrieve data from the stream will act as if the stream had been exhausted. =cut sub close { my $self = shift; $self->{_finished} = 1; undef( $self->{ _stream } ); return; } =item C<< concat ( $stream ) >> Returns a new stream resulting from the concatenation of the referant and the argument streams. The new stream uses the stream type, and optional binding names and C<<%args>> from the referant stream. =cut sub concat { my $self = shift; my $stream = shift; my @args = $stream->construct_args(); my $class = ref($self); my @streams = ($self, $stream); my $next = sub { while (@streams) { my $data = $streams[0]->next; unless (defined($data)) { shift(@streams); next; } return $data; } return; }; my $s = $stream->_new( $next, @args ); return $s; } =item C<< seen_count >> Returns the count of elements that have been returned by this iterator at the point of invocation. =cut sub seen_count { my $self = shift; return $self->{_count}; } =item C Returns the boolean value of the first item in the stream. =cut sub get_boolean { my $self = shift; my $data = $self->next; return +$data; } =item C Returns an array containing all the items in the stream. =cut sub get_all { my $self = shift; my @data; while (my $data = $self->next) { push(@data, $data); } return @data; } =begin private =item C Returns a string representation of C<$node> for use in an XML serialization. =end private =cut sub format_node_xml { my $self = shift; # my $bridge = shift; # return unless ($bridge); my $node = shift; my $name = shift; my $node_label; if (!defined $node) { return ''; } elsif ($node->is_resource) { $node_label = $node->uri_value; $node_label =~ s/&/&/g; $node_label =~ s/${node_label}); } elsif ($node->isa('RDF::Trine::Node::Literal')) { $node_label = $node->literal_value; $node_label =~ s/&/&/g; $node_label =~ s/has_language) { my $lang = $node->literal_value_language; $node_label = qq(${node_label}); } elsif ($node->has_datatype) { my $dt = $node->literal_datatype; $node_label = qq(${node_label}); } else { $node_label = qq(${node_label}); } } elsif ($node->isa('RDF::Trine::Node::Blank')) { $node_label = $node->blank_identifier; $node_label =~ s/&/&/g; $node_label =~ s/${node_label}); } else { $node_label = ""; } return qq(${node_label}); } =item C<< construct_args >> Returns the arguments necessary to pass to a stream constructor to re-create this stream (assuming the same closure as the first argument). =cut sub construct_args { my $self = shift; my $type = $self->type; my $args = $self->_args || {}; return ($type, [], %$args); } =item C<< each ( \&callback ) >> Calls the callback function once for each item in the iterator, passing the item as an argument to the function. Any arguments to C<< each >> beyond the callback function will be passed as supplemental arguments to the callback function. =cut sub each { my ($self, $coderef) = (shift, shift); while (my $row = $self->next) { $coderef->($row, @_); } } =begin private =item C<< debug >> Prints debugging information about the stream. =end private =cut sub debug { my $self = shift; my $stream = $self->{_stream}; RDF::Query::_debug_closure( $stream ); } sub _args { my $self = shift; return $self->{_args}; } sub _row { my $self = shift; return $self->{_row}; } sub _names { my $self = shift; return $self->{_names}; } sub _stream { my $self = shift; return $self->{_stream}; } =back =head1 FUNCTIONS =over 4 =item C =cut sub sgrep (&$) { ## no critic (ProhibitSubroutinePrototypes) my $block = shift; my $stream = shift; my @args = $stream->construct_args(); my $class = ref($stream); my $open = 1; my $next; $next = sub { return unless ($open); my $data = $stream->next; unless ($data) { $open = 0; return; } local($_) = $data; my $bool = $block->( $data ); if ($bool) { # warn "[SGREP] TRUE with: " . $data->as_string; if (@_ and $_[0]) { $stream->close; $open = 0; } return $data; } else { # warn "[SGREP] FALSE with: " . $data->as_string; goto &$next; } }; Carp::confess "not a stream: " . Dumper($stream) unless (blessed($stream)); Carp::confess unless ($stream->can('_new')); my $s = $stream->_new( $next, @args ); return $s; } =item C =cut sub smap (&$;$$$) { ## no critic (ProhibitSubroutinePrototypes) my $block = shift; my $stream = shift; my @args = $stream->construct_args(); foreach my $i (0 .. $#args) { last unless (scalar(@_)); my $new = shift; if (defined($new)) { $args[ $i ] = $new; } } my $class = ref($stream); my $open = 1; my $next = sub { return unless ($open); if (@_ and $_[0]) { $stream->close; $open = 0; } my $data = $stream->next; unless ($data) { $open = 0; return; } local($_) = $data; my ($item) = $block->( $data ); return $item; }; return $stream->_new( $next, @args ); } =item C =cut sub swatch (&$) { ## no critic (ProhibitSubroutinePrototypes) my $block = shift; my $stream = shift; my @args = $stream->construct_args(); my $class = ref($stream); my $open = 1; my $next = sub { return unless ($open); if (@_ and $_[0]) { $stream->close; $open = 0; } my $data = $stream->next; unless ($data) { $open = 0; return; } local($_) = $data; $block->( $data ); return $data; }; my $s = $stream->_new( $next, @args ); return $s; } 1; __END__ =back =head1 DEPENDENCIES L L L =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Model/000755 000765 000024 00000000000 12171744443 016613 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Model.pm000644 000765 000024 00000071431 12171744402 017152 0ustar00gregstaff000000 000000 # RDF::Trine::Model # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Model - Model class =head1 VERSION This document describes RDF::Trine::Model version 1.007 =head1 METHODS =over 4 =cut package RDF::Trine::Model; use strict; use warnings; no warnings 'redefine'; our ($VERSION); BEGIN { $VERSION = '1.007'; } use Scalar::Util qw(blessed refaddr); use Log::Log4perl; use RDF::Trine::Error qw(:try); use RDF::Trine qw(variable); use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Store; use RDF::Trine::Model::Dataset; =item C<< new ( $store ) >> Returns a new model over the supplied L or a new temporary model. If you provide an unblessed value, it will be used to create a new rdf store. =cut sub new { my $class = shift; if (@_) { my $store = shift; $store = RDF::Trine::Store->new( $store ) unless (blessed($store)); my %args = @_; my $self = bless({ store => $store, temporary => 0, added => 0, threshold => -1, %args }, $class); } else { return $class->temporary_model; } } =item C<< temporary_model >> Returns a new temporary (non-persistent) model. =cut sub temporary_model { my $class = shift; my $store = RDF::Trine::Store::Memory->new(); # my $store = RDF::Trine::Store::DBI->temporary_store(); my $self = $class->new( $store ); $self->{temporary} = 1; $self->{threshold} = 25_000; return $self; } =item C<< dataset_model ( default => \@dgraphs, named => \@ngraphs ) >> Returns a new model object with the default graph mapped to the union of the graphs named in C<< @dgraphs >>, and with available named graphs named in C<< @ngraphs >>. =cut sub dataset_model { my $self = shift; my $ds = RDF::Trine::Model::Dataset->new( $self ); $ds->push_dataset( @_ ); return $ds; } =item C<< begin_bulk_ops >> Provides a hint to the backend that many update operations are about to occur. The backend may use this hint to, for example, aggregate many operations into a single operation, or delay index maintenence. After the update operations have been executed, C<< end_bulk_ops >> should be called to ensure the updates are committed to the backend. =cut sub begin_bulk_ops { my $self = shift; my $store = $self->_store; if (blessed($store) and $store->can('_begin_bulk_ops')) { $store->_begin_bulk_ops(); } } =item C<< end_bulk_ops >> Provides a hint to the backend that a set of bulk operations have been completed and may be committed to the backend. =cut sub end_bulk_ops { my $self = shift; my $store = $self->_store; if (blessed($store) and $store->can('_end_bulk_ops')) { $store->_end_bulk_ops(); } } =item C<< logger ( [ $logger ] ) >> Returns the logging object responsible for recording data inserts and deletes. If C<< $logger >> is passed as an argument, sets the logger to this object. =cut sub logger { my $self = shift; if (scalar(@_)) { $self->{'logger'} = shift; } return $self->{'logger'}; } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<< $statement >> to the rdf store. =cut sub add_statement { my ($self, @args) = @_; unless ($args[0]->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => 'Argument is not an RDF::Trine::Statement'; } if ($self->{temporary}) { if ($self->{added}++ >= $self->{threshold}) { # warn "*** should upgrade to a DBI store here"; my $store = RDF::Trine::Store::DBI->temporary_store; my $iter = $self->get_statements(undef, undef, undef, undef); if ($store->can('_begin_bulk_ops')) { $store->_begin_bulk_ops(); } while (my $st = $iter->next) { $store->add_statement( $st ); } if ($store->can('_begin_bulk_ops')) { $store->_end_bulk_ops(); } $self->{store} = $store; $self->{temporary} = 0; # warn "*** upgraded to a DBI store"; } } if (my $log = $self->logger) { my ($st, $context) = @args; if (defined($context)) { $st = RDF::Trine::Statement::Quad->new(($st->nodes)[0..2], $context); } $log->add($st); } return $self->_store->add_statement( @args ); } =item C<< add_hashref ( $hashref [, $context] ) >> Add triples represented in an RDF/JSON-like manner to the model. See C<< as_hashref >> for full documentation of the hashref format. =cut sub add_hashref { my $self = shift; my $index = shift; my $context = shift; $self->begin_bulk_ops(); foreach my $s (keys %$index) { my $ts = ( $s =~ /^_:(.*)$/ ) ? RDF::Trine::Node::Blank->new($1) : RDF::Trine::Node::Resource->new($s); foreach my $p (keys %{ $index->{$s} }) { my $tp = RDF::Trine::Node::Resource->new($p); foreach my $O (@{ $index->{$s}->{$p} }) { my $to; # $O should be a hashref, but we can do a little error-correcting. unless (ref $O) { if ($O =~ /^_:/) { $O = { 'value'=>$O, 'type'=>'bnode' }; } elsif ($O =~ /^[a-z0-9._\+-]{1,12}:\S+$/i) { $O = { 'value'=>$O, 'type'=>'uri' }; } elsif ($O =~ /^(.*)\@([a-z]{2})$/) { $O = { 'value'=>$1, 'type'=>'literal', 'lang'=>$2 }; } else { $O = { 'value'=>$O, 'type'=>'literal' }; } } if (lc $O->{'type'} eq 'literal') { $to = RDF::Trine::Node::Literal->new( $O->{'value'}, $O->{'lang'}, $O->{'datatype'}); } else { $to = ( $O->{'value'} =~ /^_:(.*)$/ ) ? RDF::Trine::Node::Blank->new($1) : RDF::Trine::Node::Resource->new($O->{'value'}); } if ($ts and $tp and $to) { my $st = RDF::Trine::Statement->new($ts, $tp, $to); $self->add_statement($st, $context); } } } } $self->end_bulk_ops(); } =item C<< add_iterator ( $iter ) >> Add triples from the statement iteratorto the model. =cut sub add_iterator { my $self = shift; my $iter = shift; $self->begin_bulk_ops(); while (my $st = $iter->next) { $self->add_statement( $st ); } $self->end_bulk_ops(); } =item C<< add_list ( @elements ) >> Adds an rdf:List to the model with the given elements. Returns the node object that is the head of the list. =cut sub add_list { my $self = shift; my @elements = @_; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); if (scalar(@elements) == 0) { return $rdf->nil; } else { my $head = RDF::Query::Node::Blank->new(); my $node = shift(@elements); my $rest = $self->add_list( @elements ); $self->add_statement( RDF::Trine::Statement->new($head, $rdf->first, $node) ); $self->add_statement( RDF::Trine::Statement->new($head, $rdf->rest, $rest) ); return $head; } } =item C<< get_list ( $head ) >> Returns a list of nodes that are elements of the rdf:List represented by the supplied head node. =cut sub get_list { my $self = shift; my $head = shift; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my @elements; my %seen; while (blessed($head) and not($head->isa('RDF::Trine::Node::Resource') and $head->uri_value eq $rdf->nil->uri_value)) { if ($seen{ $head->as_string }++) { throw RDF::Trine::Error -text => "Loop found during rdf:List traversal"; } my @n = $self->objects( $head, $rdf->first ); if (scalar(@n) != 1) { throw RDF::Trine::Error -text => "Invalid structure found during rdf:List traversal"; } push(@elements, @n); ($head) = $self->objects( $head, $rdf->rest ); } return @elements; } =item C<< remove_list ( $head [, orphan_check => 1] ) >> Removes the nodes of type rdf:List that make up the list. Optionally checks each node before removal to make sure that it is not used in any other statements. Returns false if the list was removed completely; returns the first remaining node if the removal was abandoned because of an orphan check. =cut sub remove_list { my $self = shift; my $head = shift; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my %args = @_; my %seen; while (blessed($head) and not($head->isa('RDF::Trine::Node::Resource') and $head->uri_value eq $rdf->nil->uri_value)) { if ($seen{ $head->as_string }++) { throw RDF::Trine::Error -text => "Loop found during rdf:List traversal"; } my $stream = $self->get_statements($head, undef, undef); my %statements; while (my $st = $stream->next) { my $statement_type = { $rdf->first->uri => 'rdf:first', $rdf->rest->uri => 'rdf:rest', $rdf->type->uri => 'rdf:type', }->{$st->predicate->uri} || 'other'; $statement_type = 'other' if $statement_type eq 'rdf:type' && !$st->object->equal($rdf->List); push @{$statements{$statement_type}}, $st; } if ($args{orphan_check}) { return $head if defined $statements{other} && scalar(@{ $statements{other} }) > 0; return $head if $self->count_statements(undef, undef, $head) > 0; } unless (defined $statements{'rdf:first'} and defined $statements{'rdf:rest'} and scalar(@{$statements{'rdf:first'} })==1 and scalar(@{ $statements{'rdf:rest'} })==1) { throw RDF::Trine::Error -text => "Invalid structure found during rdf:List traversal"; } $self->remove_statement($_) foreach (@{$statements{'rdf:first'}}, @{$statements{'rdf:rest'}}, @{$statements{'rdf:type'}}); $head = $statements{'rdf:rest'}->[0]->object; } return; } =item C<< get_sequence ( $seq ) >> Returns a list of nodes that are elements of the rdf:Seq sequence. =cut sub get_sequence { my $self = shift; my $head = shift; my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my @elements; my $i = 1; while (1) { my $method = '_' . $i; my (@elem) = $self->objects( $head, $rdf->$method() ); unless (scalar(@elem)) { last; } if (scalar(@elem) > 1) { my $count = scalar(@elem); throw RDF::Trine::Error -text => "Invalid structure found during rdf:Seq access: $count elements found for element $i"; } my $elem = $elem[0]; last unless (blessed($elem)); push(@elements, $elem); $i++; } return @elements; } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<< $statement >> from the rdf store. =cut sub remove_statement { my $self = shift; my @args = @_; if (my $log = $self->logger) { my ($st, $context) = @args; if (defined($context)) { $st = RDF::Trine::Statement::Quad->new(($st->nodes)[0..2], $context); } $log->delete($st); } return $self->_store->remove_statement( @args ); } =item C<< remove_statements ( $subject, $predicate, $object [, $context] ) >> Removes all statements matching the supplied C<< $statement >> pattern from the rdf store. =cut sub remove_statements { my $self = shift; if (my $log = $self->logger) { $log->delete($_) foreach (@_); } return $self->_store->remove_statements( @_ ); } =item C<< size >> Returns the number of statements in the model. =cut sub size { my $self = shift; $self->end_bulk_ops(); return $self->count_statements(); } =item C<< etag >> If the model is based on a store that has the capability and knowledge to support caching, this method returns a persistent token that will remain consistent as long as the store's data doesn't change. This token is acceptable for use as an HTTP ETag. =cut sub etag { my $self = shift; my $store = $self->_store; if ($store) { return $store->etag; } return; } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the underlying store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { my $self = shift; my $store = $self->_store; if ($store) { return $store->supports( @_ ); } return; } =item C<< count_statements ( $subject, $predicate, $object ) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; $self->end_bulk_ops(); if (scalar(@_) >= 4) { my $graph = $_[3]; if (blessed($graph) and $graph->isa('RDF::Trine::Node::Resource') and $graph->uri_value eq 'tag:gwilliams@cpan.org,2010-01-01:RT:ALL') { $_[3] = undef; } } return $self->_store->count_statements( @_ ); } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns an L of all statements matching the specified subject, predicate and objects from the rdf store. Any of the arguments may be undef to match any value. If three or fewer arguments are given, the statements returned will be matched based on triple semantics (the graph union of triples from all the named graphs). If four arguments are given (even if C<< $context >> is undef), statements will be matched based on quad semantics (the union of all quads in the underlying store). =cut sub get_statements { my $self = shift; $self->end_bulk_ops(); my @pos = qw(subject predicate object graph); foreach my $i (0 .. $#_) { my $n = $_[$i]; next unless defined($n); # undef is OK next if (blessed($n) and $n->isa('RDF::Trine::Node')); # node objects are OK my $pos = $pos[$i]; local($Data::Dumper::Indent) = 0; my $ser = Data::Dumper->Dump([$n], [$pos]); throw RDF::Trine::Error::MethodInvocationError -text => "get_statements called with a value that isn't undef or a node object: $ser"; } if (scalar(@_) >= 4) { my $graph = $_[3]; if (blessed($graph) and $graph->isa('RDF::Trine::Node::Resource') and $graph->uri_value eq 'tag:gwilliams@cpan.org,2010-01-01:RT:ALL') { $_[3] = undef; } } return $self->_store->get_statements( @_ ); } =item C<< get_pattern ( $bgp [, $context] [, %args ] ) >> Returns a stream object of all bindings matching the specified graph pattern. If C<< $context >> is given, restricts BGP matching to only quads with the C<< $context >> value. C<< %args >> may contain an 'orderby' key-value pair to request a specific ordering based on variable name. The value for the 'orderby' key should be an ARRAY reference containing variable name and direction ('ASC' or 'DESC') tuples. A valid C<< %args >> hash, therefore, might look like C<< orderby => [qw(name ASC)] >> (corresponding to a SPARQL-like request to 'ORDER BY ASC(?name)'). =cut sub get_pattern { my $self = shift; my $bgp = shift; my $context = shift; my @args = @_; my %args = @args; $self->end_bulk_ops(); my (@triples) = ($bgp->isa('RDF::Trine::Statement') or $bgp->isa('RDF::Query::Algebra::Filter')) ? $bgp : $bgp->triples; unless (@triples) { throw RDF::Trine::Error::CompilationError -text => 'Cannot call get_pattern() with empty pattern'; } my $store = $self->_store; # while almost all models will delegate get_pattern() to the underlying # store object, in some cases this isn't possible (union models don't have # a single store, so have to fall back to the model-specific get_pattern() # implementation). if (blessed($store) and $store->can('get_pattern')) { return $self->_store->get_pattern( $bgp, $context, @args ); } else { if ($bgp->isa('RDF::Trine::Pattern')) { $bgp = $bgp->sort_for_join_variables(); } my $iter = $self->_get_pattern( $bgp, $context ); if (my $ob = $args{orderby}) { my @order = @$ob; if (scalar(@order) % 2) { throw RDF::Trine::Error::MethodInvocationError -text => "Invalid arguments to orderby argument in get_pattern"; } my @results = $iter->get_all(); my $order_vars = scalar(@order) / 2; my %seen; foreach my $r (@results) { foreach my $var (keys %$r) { $seen{$var}++; } } @results = sort { my $r = 0; foreach my $i (0 .. ($order_vars-1)) { my $var = $order[$i*2]; my $rev = ($order[$i*2+1] =~ /DESC/i); $r = RDF::Trine::Node::compare( $a->{$var}, $b->{$var} ); $r *= -1 if ($rev); last if ($r); } $r; } @results; my @sortedby; foreach my $i (0 .. ($order_vars-1)) { my $var = $order[$i*2]; my $dir = $order[$i*2+1]; push(@sortedby, $var, $dir) if ($seen{$var}); } $iter = RDF::Trine::Iterator::Bindings->new(\@results, undef, sorted_by => \@sortedby); } return $iter; } } =item C<< get_sparql ( $sparql ) >> Returns a stream object of all bindings matching the specified graph pattern. =cut sub get_sparql { my $self = shift; return $self->_store->get_sparql( @_ ); } sub _get_pattern { my $self = shift; my $bgp = shift; my $context = shift; my @args = @_; my (@triples) = ($bgp->isa('RDF::Trine::Statement') or $bgp->isa('RDF::Query::Algebra::Filter')) ? $bgp : $bgp->triples; if (1 == scalar(@triples)) { my $t = shift(@triples); my @nodes = $t->nodes; my %vars; my @names = qw(subject predicate object context); foreach my $n (0 .. $#nodes) { if ($nodes[$n]->isa('RDF::Trine::Node::Variable')) { $vars{ $names[ $n ] } = $nodes[$n]->name; } } if ($context) { $nodes[3] = $context; } my $iter = $self->get_statements( @nodes ); my @vars = values %vars; my $sub = sub { my $row = $iter->next; return unless ($row); my %data = map { $vars{ $_ } => $row->$_() } (keys %vars); return RDF::Trine::VariableBindings->new( \%data ); }; return RDF::Trine::Iterator::Bindings->new( $sub, \@vars ); } else { my $t = pop(@triples); my $rhs = $self->_get_pattern( RDF::Trine::Pattern->new( $t ), $context, @args ); my $lhs = $self->_get_pattern( RDF::Trine::Pattern->new( @triples ), $context, @args ); my @inner; while (my $row = $rhs->next) { push(@inner, $row); } my @results; while (my $row = $lhs->next) { RESULT: foreach my $irow (@inner) { my %keysa; my @keysa = keys %$irow; @keysa{ @keysa } = (1) x scalar(@keysa); my @shared = grep { exists $keysa{ $_ } } (keys %$row); foreach my $key (@shared) { my $val_a = $irow->{ $key }; my $val_b = $row->{ $key }; next unless (defined($val_a) and defined($val_b)); my $equal = $val_a->equal( $val_b ); unless ($equal) { next RESULT; } } my $jrow = { (map { $_ => $irow->{$_} } grep { defined($irow->{$_}) } keys %$irow), (map { $_ => $row->{$_} } grep { defined($row->{$_}) } keys %$row) }; push(@results, RDF::Trine::VariableBindings->new($jrow)); } } my $result = RDF::Trine::Iterator::Bindings->new( \@results, [ $bgp->referenced_variables ] ); return $result; } } =item C<< get_graphs >> =item C<< get_contexts >> Returns an L containing the nodes representing the named graphs in the model. =cut sub get_contexts { my $self = shift; my $store = $self->_store; $self->end_bulk_ops(); my $iter = $store->get_contexts( @_ ); if (wantarray) { return $iter->get_all; } else { return $iter; } } *get_graphs = \&get_contexts; =item C<< as_stream >> Returns an L containing every statement in the model. =cut sub as_stream { my $self = shift; $self->end_bulk_ops(); my $st = RDF::Trine::Statement::Quad->new( map { variable($_) } qw(s p o g) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $self->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); return $stream->as_statements( qw(s p o g) ); } =item C<< as_hashref >> Returns a hashref representing the model in an RDF/JSON-like manner. A graph like this (in Turtle): @prefix ex: . ex:subject1 ex:predicate1 "Foo"@en , "Bar"^^ex:datatype1 . _:bnode1 ex:predicate2 ex:object2 ; ex:predicate3 ; _:bnode3 . Is represented like this as a hashref: { "http://example.com/subject1" => { "http://example.com/predicate1" => [ { 'type'=>'literal', 'value'=>"Foo", 'lang'=>"en" }, { 'type'=>'literal', 'value'=>"Bar", 'datatype'=>"http://example.com/datatype1" }, ], }, "_:bnode1" => { "http://example.com/predicate2" => [ { 'type'=>'uri', 'value'=>"http://example.com/object2" }, ], "http://example.com/predicate2" => [ { 'type'=>'bnode', 'value'=>"_:bnode3" }, ], }, } Note that the type of subjects (resource or blank node) is indicated entirely by the convention of starting blank nodes with "_:". This hashref structure is compatible with RDF/JSON and with the ARC2 library for PHP. =cut sub as_hashref { my $self = shift; $self->end_bulk_ops(); return $self->as_stream->as_hashref; } =item C<< as_graphviz >> Returns a L object of the RDF graph of this model, ignoring graph names/contexts. This method will attempt to load the L module at runtime and will fail if the module is unavailable. =cut sub as_graphviz { my $self = shift; require GraphViz; my $g = GraphViz->new(); my %seen; my $iter = $self->as_stream; while (my $t = $iter->next) { my @nodes; foreach my $pos (qw(subject object)) { my $n = $t->$pos(); my $label = ($n->isa('RDF::Trine::Node::Literal')) ? $n->literal_value : $n->as_string; push(@nodes, $label); unless ($seen{ $label }++) { $g->add_node( $label ); } } $g->add_edge( @nodes, label => $t->predicate->as_string ); } return $g; } =back =head2 Node-Centric Graph API =over 4 =item C<< subjects ( $predicate, $object ) >> Returns a list of the nodes that appear as the subject of statements with the specified C<< $predicate >> and C<< $object >>. Either of the two arguments may be undef to signify a wildcard. =cut sub subjects { my $self = shift; my $pred = shift; my $obj = shift; my $graph = shift; $self->end_bulk_ops(); my $iter = $self->get_statements( undef, $pred, $obj, $graph ); my %nodes; while (my $st = $iter->next) { my $subj = $st->subject; $nodes{ $subj->as_string } = $subj; } if (wantarray) { return values(%nodes); } else { return RDF::Trine::Iterator->new( [values(%nodes)] ); } } =item C<< predicates ( $subject, $object ) >> Returns a list of the nodes that appear as the predicate of statements with the specified C<< $subject >> and C<< $object >>. Either of the two arguments may be undef to signify a wildcard. =cut sub predicates { my $self = shift; my $subj = shift; my $obj = shift; my $graph = shift; $self->end_bulk_ops(); my $iter = $self->get_statements( $subj, undef, $obj, $graph ); my %nodes; while (my $st = $iter->next) { my $pred = $st->predicate; $nodes{ $pred->as_string } = $pred; } if (wantarray) { return values(%nodes); } else { return RDF::Trine::Iterator->new( [values(%nodes)] ); } } =item C<< objects ( $subject, $predicate [, $graph ] [, %options ] ) >> Returns a list of the nodes that appear as the object of statements with the specified C<< $subject >> and C<< $predicate >>. Either of the two arguments may be undef to signify a wildcard. You can further filter objects using the C<< %options >> argument. Keys in C<< %options >> indicate the restriction type and may be 'type', 'language', or 'datatype'. The value of the 'type' key may be one of 'node', 'nil', 'blank', 'resource', 'literal', or 'variable'. The use of either 'language' or 'datatype' restrict objects to literal nodes with a specific language or datatype value, respectively. =cut sub objects { my $self = shift; my $subj = shift; my $pred = shift; my ($graph, %options) = (@_ % 2 == 0) ? (undef, @_) : @_; my $type = $options{type}; $type = 'literal' if ($options{language} or $options{datatype}); if ($options{datatype} and not blessed($options{datatype})) { $options{datatype} = RDF::Trine::Node::Resource->new($options{datatype}); } if (defined $type) { if ($type =~ /^(node|nil|blank|resource|literal|variable)$/) { $type = "is_$type"; } else { throw RDF::Trine::Error::CompilationError -text => "unknown type" } } $self->end_bulk_ops(); my $iter = $self->get_statements( $subj, $pred, undef, $graph ); my %nodes; while (my $st = $iter->next) { my $obj = $st->object; if (defined $type) { next unless $obj->$type; if ($options{language}) { my $lang = $obj->literal_value_language; next unless ($lang and $lang eq $options{language}); } elsif ($options{datatype}) { my $dt = $obj->literal_datatype; next unless ($dt and $dt eq $options{datatype}->uri_value); } } $nodes{ $obj->as_string } = $obj; } if (wantarray) { return values(%nodes); } else { return RDF::Trine::Iterator->new( [values(%nodes)] ); } } =item C<< objects_for_predicate_list ( $subject, @predicates ) >> Given the RDF::Trine::Node objects C<< $subject >> and C<< @predicates >>, finds all matching triples in the model with the specified subject and any of the given predicates, and returns a list of object values (in the partial order given by the ordering of C<< @predicates >>). =cut sub objects_for_predicate_list { my $self = shift; my $node = shift; my @preds = @_; $self->end_bulk_ops(); my @objects; foreach my $p (@preds) { my $iter = $self->get_statements( $node, $p ); while (my $s = $iter->next) { if (not(wantarray)) { return $s->object; } else { push( @objects, $s->object ); } } } return @objects; } =item C<< bounded_description ( $node ) >> Returns an RDF::Trine::Iterator::Graph object over the bounded description triples for C<< $node >> (all triples resulting from a graph traversal starting with C<< node >> and stopping at non-blank nodes). =cut sub bounded_description { my $self = shift; my $node = shift; $self->end_bulk_ops(); my %seen; my @nodes = $node; my @statements; my $sub = sub { return if (not(@statements) and not(@nodes)); while (1) { if (not(@statements)) { my $l = Log::Log4perl->get_logger("rdf.trine.model"); return unless (scalar(@nodes)); my $n = shift(@nodes); # warn "CBD handling node " . $n->sse . "\n"; next if ($seen{ $n->sse }); try { my $st = RDF::Trine::Statement->new( $n, map { variable($_) } qw(p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $sts = $self->get_pattern( $pat, undef, orderby => [ qw(p ASC o ASC) ] ); # my $sts = $stream->as_statements( qw(s p o) ); # my $sts = $self->get_statements( $n ); my @s = grep { not($seen{$_->{'o'}->sse}) } $sts->get_all; # warn "+ " . $_->as_string . "\n" for (@s); push(@statements, map { RDF::Trine::Statement->new($n, @{ $_ }{qw(p o)}) } @s); } catch RDF::Trine::Error::UnimplementedError with { $l->debug('[model] Ignored UnimplementedError in bounded_description: ' . $_[0]->{'-text'}); }; try { my $st = RDF::Trine::Statement->new( (map { variable($_) } qw(s p)), $n ); my $pat = RDF::Trine::Pattern->new( $st ); my $sts = $self->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC) ] ); # my $sts = $stream->as_statements( qw(s p o) ); # my $sts = $self->get_statements( undef, undef, $n ); my @s = grep { not($seen{$_->{'s'}->sse}) and not($_->{'s'}->equal($n)) } $sts->get_all; # warn "- " . $_->as_string . "\n" for (@s); push(@statements, map { RDF::Trine::Statement->new(@{ $_ }{qw(s p)}, $n) } @s); } catch RDF::Trine::Error::UnimplementedError with { $l->debug('[model] Ignored UnimplementedError in bounded_description: ' . $_[0]->{'-text'}); }; $seen{ $n->sse }++ } last if (scalar(@statements)); } return unless (scalar(@statements)); my $st = shift(@statements); if ($st->object->isa('RDF::Trine::Node::Blank') and not($seen{ $st->object->sse })) { # warn "+ CBD pushing " . $st->object->sse . "\n"; push(@nodes, $st->object); } if ($st->subject->isa('RDF::Trine::Node::Blank') and not($seen{ $st->subject->sse })) { # warn "- CBD pushing " . $st->subject->sse . "\n"; push(@nodes, $st->subject); } return $st; }; return RDF::Trine::Iterator::Graph->new( $sub ); } =item C<< as_string >> =cut sub as_string { my $self = shift; $self->end_bulk_ops(); my $iter = $self->get_statements( undef, undef, undef, undef ); my @rows; my @names = qw[subject predicate object context]; while (my $row = $iter->next) { push(@rows, [map {$row->$_()->as_string} @names]); } my @rule = qw(- +); my @headers = (\q"| "); push(@headers, map { $_ => \q" | " } @names); pop @headers; push @headers => (\q" |"); my $table = Text::Table->new(@names); $table->rule(@rule); $table->body_rule(@rule); $table->load(@rows); my $size = scalar(@rows); return join('', $table->rule(@rule), $table->title, $table->rule(@rule), map({ $table->body($_) } 0 .. @rows), $table->rule(@rule) ) . "$size statements\n"; } sub _store { my $self = shift; return $self->{store}; } sub _debug { my $self = shift; my $warn = shift; my $stream = $self->get_statements( undef, undef, undef, undef ); my $l = Log::Log4perl->get_logger("rdf.trine.model"); $l->debug( 'model statements:' ); if ($warn) { warn "Model $self:\n"; } my $count = 0; while (my $s = $stream->next) { $count++; if ($warn) { warn $s->as_string . "\n"; } $l->debug('[model]' . $s->as_string); } if ($warn) { warn "$count statements\n"; } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Namespace.pm000644 000765 000024 00000005626 12171744402 020011 0ustar00gregstaff000000 000000 # RDF::Trine::Namespace # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Namespace - Abbreviated syntax for constructing RDF node objects =head1 VERSION This document describes RDF::Trine::Namespace version 1.007 =head1 SYNOPSIS use RDF::Trine::Namespace qw(rdf); my $foaf = RDF::Trine::Namespace->new( 'http://xmlns.com/foaf/0.1/' ); my $pred = $foaf->name; my $type = $rdf->type; print $pred->as_string; # '[http://xmlns.com/foaf/0.1/name]' =head1 DESCRIPTION This module provides an abbreviated syntax for creating RDF::Trine::Node objects for URIs sharing common namespaces. The module provides a constructor for creating namespace objects which may be used for constructing Node objects. Calling any method (other than 'import', 'new', 'uri' or 'AUTOLOAD') on the namespace object will return a RDF::Trine::Node object representing the URI of the method name appended to the namespace. =head1 METHODS =over 4 =cut package RDF::Trine::Namespace; use strict; use warnings; no warnings 'redefine'; use base qw(XML::Namespace); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### use Carp; use RDF::Trine::Node::Resource; use XML::CommonNS 0.04 (); sub import { my $class = shift; if (@_) { $class->_install_namespaces( 1, @_ ); } } sub _install_namespaces { my $class = shift; my $level = shift; my $pkg = caller( $level ); foreach my $name (@_) { my $uri = (uc($name) eq 'XSD') ? XML::NamespaceFactory->new('http://www.w3.org/2001/XMLSchema#') : XML::CommonNS->uri( uc($name) ); my $ns = $class->new( "$uri" ); no strict 'refs'; ## no critic (ProhibitNoStrict) *{ "${pkg}::${name}" } = \$ns; } } =item C Returns the URI node object for the namespace, with an optional path argument added to the end of it. =cut sub uri { my $self = shift; my $local = shift; unless (defined($local)) { $local = ''; } # we should just call $self->SUPER::uri($local) here, but there's a bug in # XML::Namespace 0.2 that assumes $local eq '' if $local is defined but false (e.g. '0') my $uri = $self->SUPER::uri() . $local; return RDF::Trine::Node::Resource->new( $uri ); } =item C<< uri_value >> Returns the URI/IRI value of this namespace. =cut sub uri_value { my $self = shift; return $self->uri(); } 1; # Magic true value required at end of module __END__ =back =head1 DEPENDENCIES L =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/NamespaceMap.pm000644 000765 000024 00000012724 12171744402 020444 0ustar00gregstaff000000 000000 # RDF::Trine::NamespaceMap # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::NamespaceMap - Collection of Namespaces =head1 VERSION This document describes RDF::Trine::NamespaceMap version 1.007 =head1 SYNOPSIS use RDF::Trine::NamespaceMap; my $map = RDF::Trine::NamespaceMap->new( \%namespaces ); $serializer->serialize_model_to_string( $model, namespaces => $map ); $map->add_mapping( foaf => 'http://xmlns.com/foaf/0.1/' ); my $foaf_namespace = $map->foaf; my $foaf_person = $map->foaf('Person'); =head1 DESCRIPTION This module provides an object to manage multiple namespaces for creating L objects and for serializing. =head1 METHODS =over 4 =cut package RDF::Trine::NamespaceMap; use strict; use warnings; no warnings 'redefine'; use Scalar::Util qw(blessed); use Data::Dumper; ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =item C<< new ( [ \%namespaces ] ) >> Returns a new namespace map object. You can pass a hash reference with mappings from local names to namespace URIs (given as string or L). =cut sub new { my $class = shift; my $map = shift || {}; my $self = bless( {}, $class ); foreach my $name ( keys %$map ) { $self->add_mapping( $name => $map->{$name} ); } return $self; } =item C<< add_mapping ( $name => $uri ) >> Adds a new namespace to the map. The namespace URI can be passed as string or some object, that provides an uri_value method. =cut sub add_mapping { my $self = shift; my $name = shift; if ($name =~ /^(new|uri|can|isa|VERSION|DOES)$/) { # reserved names throw RDF::Trine::Error::MethodInvocationError -text => "Cannot use reserved name '$name' as a namespace prefix"; } my $ns = shift; foreach (qw(1 2)) { # loop twice because the first call to C<> might return a # RDF::Trine::Namespace. Calling C<> on the namespace object # will then return a URI string value. if (blessed($ns) and $ns->can('uri_value')) { $ns = $ns->uri_value; } } $ns = RDF::Trine::Namespace->new( $ns ); $self->{ $name } = $ns; } =item C<< remove_mapping ( $name ) >> Removes a namespace from the map. =cut sub remove_mapping { my $self = shift; my $name = shift; delete $self->{ $name }; } =item C<< namespace_uri ( $name ) >> Returns the namespace object (if any) associated with the given name. =cut sub namespace_uri { my $self = shift; my $name = shift; return $self->{ $name }; } =item C<< uri ( $prefixed_name ) >> Returns a URI (as L) for an abbreviated string such as 'foaf:Person'. =cut sub uri { my $self = shift; my $abbr = shift; my $ns; my $local = ""; if ($abbr =~ m/^([^:]*):(.*)$/) { $ns = $self->{ $1 }; $local = $2; } else { $ns = $self->{ $abbr }; } return unless (blessed($ns)); if ($local ne '') { return $ns->$local(); } else { return $ns->uri_value; } } =item prefix_for C<< uri ($uri) >> Returns the associated prefix (or potentially multiple prefixes, in list context) for the given URI. =cut sub prefix_for { my ($self, $uri) = @_; $uri = $uri->value if ref $uri; my @candidates; while (my ($k, $v) = each %$self) { my $vuri = $v->uri->uri_value; # the input should always be longer than the namespace next if length $vuri > length $uri; # candidate namespace must match exactly my $cns = substr($uri, 0, length $vuri); push @candidates, $k if $cns eq $vuri; } # make sure this behaves correctly when empty return unless @candidates; # if this returns more than one prefix, take the # shortest/lexically lowest one. @candidates = sort @candidates; return wantarray ? @candidates : $candidates[0]; } =item abbreviate C<< uri ($uri) >> Complement to L. Returns the given URI in C format or C if it wasn't matched, therefore the idiom my $str = $nsmap->abbreviate($uri_node) || $uri_node->uri_value; may be useful for certain serialization tasks. =cut sub abbreviate { my ($self, $uri) = @_; $uri = $uri->uri_value if ref $uri; my $prefix = $self->prefix_for($uri); # XXX is this actually the most desirable behaviour? return unless defined $prefix; my $offset = length $self->namespace_uri($prefix)->uri->uri_value; return sprintf('%s:%s', $prefix, substr($uri, $offset)); } sub AUTOLOAD { my $self = shift; our $AUTOLOAD; return if ($AUTOLOAD =~ /:DESTROY$/); my ($name) = ($AUTOLOAD =~ m/^.*:(.*)$/); my $ns = $self->{ $name }; return unless (blessed($ns)); if (scalar(@_)) { my $local = shift(@_); return $ns->$local( @_ ); } else { return $ns; } } 1; # Magic true value required at end of module __END__ =back =head1 WARNING Avoid using the names 'can', 'isa', 'VERSION', and 'DOES' as namespace prefix, because these names are defined as method for every Perl object by default. The method names 'new' and 'uri' are also forbidden. =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Node/000755 000765 000024 00000000000 12171744443 016440 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Node.pm000644 000765 000024 00000015554 12171744402 017003 0ustar00gregstaff000000 000000 # RDF::Trine::Node # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Node - Base class for RDF Nodes =head1 VERSION This document describes RDF::Trine::Node version 1.007 =cut package RDF::Trine::Node; use strict; use warnings; no warnings 'redefine'; our ($VERSION, @ISA, @EXPORT_OK); BEGIN { $VERSION = '1.007'; require Exporter; @ISA = qw(Exporter); @EXPORT_OK = qw(ntriples_escape); } use Scalar::Util qw(blessed refaddr); use RDF::Trine::Node::Nil; use RDF::Trine::Node::Blank; use RDF::Trine::Node::Literal; use RDF::Trine::Node::Resource; use RDF::Trine::Node::Variable; =head1 FUNCTIONS =over 4 =item C<< ntriples_escape ( $value ) >> Returns the passed string value with special characters (control characters, Unicode, etc.) escaped, suitable for printing inside an N-Triples or Turtle encoded literal. =cut sub ntriples_escape { my $class = __PACKAGE__; return $class->_unicode_escape( @_ ); } =back =head1 METHODS =over 4 =item C<< is_node >> Returns true if this object is a RDF node, false otherwise. =cut sub is_node { my $self = shift; return (blessed($self) and $self->isa('RDF::Trine::Node')); } =item C<< is_nil >> Returns true if this object is the nil-valued node. =cut sub is_nil { my $self = shift; return (blessed($self) and $self->isa('RDF::Trine::Node::Nil')); } =item C<< is_blank >> Returns true if this RDF node is a blank node, false otherwise. =cut sub is_blank { my $self = shift; return (blessed($self) and $self->isa('RDF::Trine::Node::Blank')); } =item C<< is_resource >> Returns true if this RDF node is a resource, false otherwise. =cut sub is_resource { my $self = shift; return (blessed($self) and $self->isa('RDF::Trine::Node::Resource')); } =item C<< is_literal >> Returns true if this RDF node is a literal, false otherwise. =cut sub is_literal { my $self = shift; return (blessed($self) and $self->isa('RDF::Trine::Node::Literal')); } =item C<< is_variable >> Returns true if this RDF node is a variable, false otherwise. =cut sub is_variable { my $self = shift; return (blessed($self) and $self->isa('RDF::Trine::Node::Variable')); } =item C<< as_string >> Returns the node in a string form. =cut sub as_string { my $self = shift; Carp::confess unless ($self->can('sse')); return $self->sse; } =item C<< as_ntriples >> Returns the node in a string form suitable for NTriples serialization. =cut sub as_ntriples { return $_[0]->sse; } =item C<< sse >> Returns the SSE serialization of the node. =cut =item C<< equal ( $node ) >> Returns true if the two nodes are equal, false otherwise. =cut sub equal { my $self = shift; my $node = shift; return 0 unless (blessed($node)); return (refaddr($self) == refaddr($node)); } =item C<< compare ( $node_a, $node_b ) >> Returns -1, 0, or 1 if $node_a sorts less than, equal to, or greater than $node_b in the defined SPARQL ordering, respectively. This function may be used as the function argument to C<>. =cut my %order = ( NIL => 0, BLANK => 1, URI => 2, LITERAL => 3, ); sub compare { my $a = shift; my $b = shift; return -1 unless blessed($a); return 1 unless blessed($b); # (Lowest) no value assigned to the variable or expression in this solution. # Blank nodes # IRIs # RDF literals (plain < xsd:string) my $at = $a->type; my $bt = $b->type; if ($a->type ne $b->type) { my $an = $order{ $at }; my $bn = $order{ $bt }; return ($an <=> $bn); } else { return $a->_compare( $b ); } } =item C<< from_sse ( $string, $context ) >> Parses the supplied SSE-encoded string and returns a RDF::Trine::Node object. =cut my $r_PN_CHARS_BASE = qr/([A-Z]|[a-z]|[\x{00C0}-\x{00D6}]|[\x{00D8}-\x{00F6}]|[\x{00F8}-\x{02FF}]|[\x{0370}-\x{037D}]|[\x{037F}-\x{1FFF}]|[\x{200C}-\x{200D}]|[\x{2070}-\x{218F}]|[\x{2C00}-\x{2FEF}]|[\x{3001}-\x{D7FF}]|[\x{F900}-\x{FDCF}]|[\x{FDF0}-\x{FFFD}]|[\x{10000}-\x{EFFFF}])/; my $r_PN_CHARS_U = qr/(_|${r_PN_CHARS_BASE})/; my $r_VARNAME = qr/((${r_PN_CHARS_U}|[0-9])(${r_PN_CHARS_U}|[0-9]|\x{00B7}|[\x{0300}-\x{036F}]|[\x{203F}-\x{2040}])*)/; sub from_sse { my $class = shift; my $context = $_[1]; $_ = $_[0]; if (my ($iri) = m/^<([^>]+)>/o) { s/^<([^>]+)>\s*//; return RDF::Trine::Node::Resource->new( $iri ); } elsif (my ($lit) = m/^"(([^"\\]+|\\([\\"nt]))+)"/o) { my @args; s/^"(([^"\\]+|\\([\\"nt]))+)"//; if (my ($lang) = m/[@](\S+)/) { s/[@](\S+)\s*//; $args[0] = $lang; } elsif (m/^\Q^^\E/) { s/^\Q^^\E//; my ($dt) = $class->from_sse( $_, $context ); $args[1] = $dt->uri_value; } $lit =~ s/\\(.)/eval "\"\\$1\""/ge; return RDF::Trine::Node::Literal->new( $lit, @args ); } elsif (my ($id1) = m/^[(]([^)]+)[)]/) { s/^[(]([^)]+)[)]\s*//; return RDF::Trine::Node::Blank->new( $id1 ); } elsif (my ($id2) = m/^_:(\S+)/) { s/^_:(\S+)\s*//; return RDF::Trine::Node::Blank->new( $id2 ); } elsif (my ($v) = m/^[?](${r_VARNAME})/) { s/^[?](${r_VARNAME})\s*//; return RDF::Trine::Node::Variable->new( $v ); } elsif (my ($pn, $ln) = m/^(\S*):(\S*)/o) { if ($pn eq '') { $pn = '__DEFAULT__'; } if (my $ns = $context->{namespaces}{ $pn }) { s/^(\S+):(\S+)\s*//; return RDF::Trine::Node::Resource->new( join('', $ns, $ln) ); } else { throw RDF::Trine::Error -text => "No such namespace '$pn' while parsing SSE QName: >>$_<<"; } } else { throw RDF::Trine::Error -text => "Cannot parse SSE node from SSE string: >>$_<<"; } } sub _unicode_escape { my $self = shift; my $str = shift; if ($str =~ /\A[^\\\n\t\r"\x{10000}-\x{10ffff}\x{7f}-\x{ffff}\x{00}-\x{08}\x{0b}-\x{0c}\x{0e}-\x{1f}]*\z/sm) { # hot path - no special characters to escape, just printable ascii return $str; } else { # slow path - escape all the special characters my $rslt = ''; while (length($str)) { if (my ($ascii) = $str =~ /^([A-Za-z0-9 \t]+)/) { $rslt .= $ascii; substr($str, 0, length($ascii)) = ''; } else { my $utf8 = substr($str,0,1,''); if ($utf8 eq '\\') { $rslt .= '\\\\'; } elsif ($utf8 =~ /^[\x{10000}-\x{10ffff}]$/) { $rslt .= sprintf('\\U%08X', ord($utf8)); } elsif ($utf8 =~ /^[\x7f-\x{ffff}]$/) { # $rslt = '\\u'.uc(unpack('H4', $uchar->utf16be)) . $rslt; $rslt .= sprintf('\\u%04X', ord($utf8)); } elsif ($utf8 =~ /^[\x00-\x08\x0b-\x0c\x0e-\x1f]$/) { $rslt .= sprintf('\\u%04X', ord($utf8)); } else { $rslt .= $utf8; } } } # $rslt =~ s/\\/\\\\/g; $rslt =~ s/\n/\\n/g; $rslt =~ s/\t/\\t/g; $rslt =~ s/\r/\\r/g; $rslt =~ s/"/\\"/g; return $rslt; } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/000755 000765 000024 00000000000 12171744443 017007 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Parser.pm000644 000765 000024 00000030725 12171744402 017347 0ustar00gregstaff000000 000000 # RDF::Trine::Parser # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser - RDF Parser class =head1 VERSION This document describes RDF::Trine::Parser version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; RDF::Trine::Parser->parse_url_into_model( $url, $model ); my $parser = RDF::Trine::Parser->new( 'turtle' ); $parser->parse_into_model( $base_uri, $rdf, $model ); $parser->parse_file_into_model( $base_uri, 'data.ttl', $model ); =head1 DESCRIPTION RDF::Trine::Parser is a base class for RDF parsers. It may be used as a factory class for constructing parser objects by name or media type with the C<< new >> method, or used to abstract away the logic of choosing a parser based on the media type of RDF content retrieved over the network with the C<< parse_url_into_model >> method. =head1 METHODS =over 4 =cut package RDF::Trine::Parser; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Encode qw(decode); use LWP::MediaTypes; use Module::Load::Conditional qw[can_load]; our ($VERSION); our %file_extensions; our %parser_names; our %canonical_media_types; our %media_types; our %format_uris; our %encodings; BEGIN { $VERSION = '1.007'; can_load( modules => { 'Data::UUID' => undef, 'UUID::Tiny' => undef, } ); } use Scalar::Util qw(blessed); use RDF::Trine::Error qw(:try); use RDF::Trine::Parser::NTriples; use RDF::Trine::Parser::NQuads; use RDF::Trine::Parser::RDFXML; use RDF::Trine::Parser::RDFJSON; use RDF::Trine::Parser::RDFa; =item C<< media_type >> Returns the canonical media type associated with this parser. =cut sub media_type { my $self = shift; my $class = ref($self) || $self; return $canonical_media_types{ $class }; } =item C<< media_types >> Returns the media types associated with this parser. =cut sub media_types { my $self = shift; my @types; foreach my $type (keys %media_types) { my $class = $media_types{ $type }; push(@types, $type) if ($self->isa($class)); } return @types; } =item C<< parser_by_media_type ( $media_type ) >> Returns the parser class appropriate for parsing content of the specified media type. Returns undef if not appropriate parser is found. =cut sub parser_by_media_type { my $proto = shift; my $type = shift; my $class = $media_types{ $type }; return $class; } =item C<< guess_parser_by_filename ( $filename ) >> Returns the best-guess parser class to parse a file with the given filename. Defaults to L if not appropriate parser is found. =cut sub guess_parser_by_filename { my $class = shift; my $file = shift; if ($file =~ m/[.](\w+)$/) { my $ext = $1; return $file_extensions{ $ext } if exists $file_extensions{ $ext }; } return $class->parser_by_media_type( 'application/rdf+xml' ) || 'RDF::Trine::Parser::RDFXML'; } =item C<< new ( $parser_name, @args ) >> Returns a new RDF::Trine::Parser object for the parser with the specified name (e.g. "rdfxml" or "turtle"). If no parser with the specified name is found, throws a RDF::Trine::Error::ParserError exception. Any C<< @args >> will be passed through to the format-specific parser constructor. If C<< @args >> contains the key-value pair C<< (canonicalize => 1) >>, literal value canonicalization will be attempted during parsing with warnings being emitted for invalid lexical forms for recognized datatypes. =cut sub new { my $class = shift; my $name = shift; my $key = lc($name); $key =~ s/[^a-z]//g; if ($name eq 'guess') { throw RDF::Trine::Error::UnimplementedError -text => "guess parser heuristics are not implemented yet"; } elsif (my $class = $parser_names{ $key }) { # re-add name for multiformat (e.g. Redland) parsers return $class->new( name => $key, @_ ); } else { throw RDF::Trine::Error::ParserError -text => "No parser known named $name"; } } =item C<< parse_url_into_model ( $url, $model [, %args] ) >> Retrieves the content from C<< $url >> and attempts to parse the resulting RDF into C<< $model >> using a parser chosen by the associated content media type. If C<< %args >> contains a C<< 'content_cb' >> key with a CODE reference value, that callback function will be called after a successful response as: $content_cb->( $url, $content, $http_response_object ) If C<< %args >> contains a C<< 'useragent' >> key with a LWP::UserAgent object value, that object is used to retrieve the requested URL without any configuration (such as setting the Accept: header) which would ordinarily take place. Otherwise, the default user agent (L) is cloned and configured to retrieve content that will be acceptable to any available parser. =cut sub parse_url_into_model { my $class = shift; my $url = shift; my $model = shift; my %args = @_; my $base = $url; if (defined($args{base})) { $base = $args{base}; } my $ua; if (defined($args{useragent})) { $ua = $args{useragent}; } else { $ua = RDF::Trine->default_useragent->clone; my $accept = $class->default_accept_header; $ua->default_headers->push_header( 'Accept' => $accept ); } my $resp = $ua->get( $url ); if ($url =~ /^file:/) { my $type = guess_media_type($url); $resp->header('Content-Type', $type); } unless ($resp->is_success) { throw RDF::Trine::Error::ParserError -text => $resp->status_line; } my $content = $resp->content; if (my $cb = $args{content_cb}) { $cb->( $url, $content, $resp ); } my $type = $resp->header('content-type'); $type =~ s/^([^\s;]+).*/$1/; my $pclass = $media_types{ $type }; if ($pclass and $pclass->can('new')) { my $data = $content; if (my $e = $encodings{ $pclass }) { $data = decode( $e, $content ); } # pass %args in here too so the constructor can take its pick my $parser = $pclass->new(%args); my $ok = 0; try { $parser->parse_into_model( $base, $data, $model, %args ); $ok = 1; } catch RDF::Trine::Error with {}; return 1 if ($ok); } ### FALLBACK my %options; if (defined $args{canonicalize}) { $options{ canonicalize } = $args{canonicalize}; } my $ok = 0; try { if ($url =~ /[.](x?rdf|owl)$/ or $content =~ m/\x{FEFF}?<[?]xml /smo) { my $parser = RDF::Trine::Parser::RDFXML->new(%options); $parser->parse_into_model( $base, $content, $model, %args ); $ok = 1;; } elsif ($url =~ /[.]ttl$/ or $content =~ m/@(prefix|base)/smo) { my $parser = RDF::Trine::Parser::Turtle->new(%options); my $data = decode('utf8', $content); $parser->parse_into_model( $base, $data, $model, %args ); $ok = 1;; } elsif ($url =~ /[.]trig$/) { my $parser = RDF::Trine::Parser::Trig->new(%options); my $data = decode('utf8', $content); $parser->parse_into_model( $base, $data, $model, %args ); $ok = 1;; } elsif ($url =~ /[.]nt$/) { my $parser = RDF::Trine::Parser::NTriples->new(%options); $parser->parse_into_model( $base, $content, $model, %args ); $ok = 1;; } elsif ($url =~ /[.]nq$/) { my $parser = RDF::Trine::Parser::NQuads->new(%options); $parser->parse_into_model( $base, $content, $model, %args ); $ok = 1;; } elsif ($url =~ /[.]js(?:on)?$/) { my $parser = RDF::Trine::Parser::RDFJSON->new(%options); $parser->parse_into_model( $base, $content, $model, %args ); $ok = 1;; } elsif ($url =~ /[.]x?html?$/) { my $parser = RDF::Trine::Parser::RDFa->new(%options); $parser->parse_into_model( $base, $content, $model, %args ); $ok = 1;; } else { my @types = keys %{ { map { $_ => 1 } values %media_types } }; foreach my $pclass (@types) { my $data = $content; if (my $e = $encodings{ $pclass }) { $data = decode( $e, $content ); } my $parser = $pclass->new(%options); my $ok = 0; try { $parser->parse_into_model( $base, $data, $model, %args ); $ok = 1; } catch RDF::Trine::Error::ParserError with {}; last if ($ok); } } } catch RDF::Trine::Error with { my $e = shift; }; return 1 if ($ok); if ($pclass) { throw RDF::Trine::Error::ParserError -text => "Failed to parse data of type $type from $url"; } else { throw RDF::Trine::Error::ParserError -text => "Failed to parse data from $url"; } } =item C<< parse_into_model ( $base_uri, $data, $model [, context => $context] ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut sub parse_into_model { my $proto = shift; my $self = blessed($proto) ? $proto : $proto->new(); my $uri = shift; if (blessed($uri) and $uri->isa('RDF::Trine::Node::Resource')) { $uri = $uri->uri_value; } my $input = shift; my $model = shift; my %args = @_; my $context = $args{'context'}; my $handler = sub { my $st = shift; if ($context) { my $quad = RDF::Trine::Statement::Quad->new( $st->nodes, $context ); $model->add_statement( $quad ); } else { $model->add_statement( $st ); } }; $model->begin_bulk_ops(); my $s = $self->parse( $uri, $input, $handler ); $model->end_bulk_ops(); return $s; } =item C<< parse_file_into_model ( $base_uri, $fh, $model [, context => $context] ) >> Parses all data read from the filehandle or file C<< $fh >>, using the given C<< $base_uri >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut sub parse_file_into_model { my $proto = shift; my $self = (blessed($proto) or $proto eq __PACKAGE__) ? $proto : $proto->new(); my $uri = shift; if (blessed($uri) and $uri->isa('RDF::Trine::Node::Resource')) { $uri = $uri->uri_value; } my $fh = shift; my $model = shift; my %args = @_; my $context = $args{'context'}; my $handler = sub { my $st = shift; if ($context) { my $quad = RDF::Trine::Statement::Quad->new( $st->nodes, $context ); $model->add_statement( $quad ); } else { $model->add_statement( $st ); } }; $model->begin_bulk_ops(); my $s = $self->parse_file( $uri, $fh, $handler ); $model->end_bulk_ops(); return $s; } =item C<< parse_file ( $base_uri, $fh, $handler ) >> Parses all data read from the filehandle or file C<< $fh >>, using the given C<< $base_uri >>. If C<< $fh >> is a filename, this method can guess the associated parse. For each RDF statement parsed, C<< $handler->( $st ) >> is called. =cut sub parse_file { my $self = shift; my $base = shift; my $fh = shift; my $handler = shift; unless (ref($fh)) { my $filename = $fh; undef $fh; unless ($self->can('parse')) { my $pclass = $self->guess_parser_by_filename( $filename ); $self = $pclass->new() if ($pclass and $pclass->can('new')); } open( $fh, '<:encoding(UTF-8)', $filename ) or throw RDF::Trine::Error::ParserError -text => $!; } if ($self and $self->can('parse')) { my $content = do { local($/) = undef; <$fh> }; return $self->parse( $base, $content, $handler, @_ ); } else { throw RDF::Trine::Error::ParserError -text => "Cannot parse unknown serialization"; } } =item C<< parse ( $base_uri, $rdf, \&handler ) >> =cut =item C<< new_bnode_prefix () >> Returns a new prefix to be used in the construction of blank node identifiers. If either Data::UUID or UUID::Tiny are available, they are used to construct a globally unique bnode prefix. Otherwise, an empty string is returned. =cut sub new_bnode_prefix { my $class = shift; if (defined($Data::UUID::VERSION)) { my $ug = new Data::UUID; my $uuid = $ug->to_string( $ug->create() ); $uuid =~ s/-//g; return 'b' . $uuid; } elsif (defined($UUID::Tiny::VERSION) && ($] < 5.010000)) { # UUID::Tiny 1.03 isn't working nice with thread support in Perl 5.14. When this is fixed, this may be removed and dep added. my $uuid = UUID::Tiny::create_UUID_as_string(UUID::Tiny::UUID_V1()); $uuid =~ s/-//g; return 'b' . $uuid; } else { return ''; } } =item C<< default_accept_header >> Returns the default HTTP Accept header value used in requesting RDF content (e.g. in L) that may be parsed by one of the available RDF::Trine::Parser subclasses. By default, RDF/XML and Turtle are preferred over other media types. =cut sub default_accept_header { # prefer RDF/XML or Turtle, then anything else that we've got a parser for. my $accept = join(',', map { /(turtle|rdf[+]xml)/ ? "$_;q=1.0" : "$_;q=0.9" } keys %media_types); return $accept; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Pattern.pm000644 000765 000024 00000012431 12171744402 017522 0ustar00gregstaff000000 000000 # RDF::Trine::Pattern # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Pattern - Class for basic graph patterns =head1 VERSION This document describes RDF::Trine::Pattern version 1.007 =cut package RDF::Trine::Pattern; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed refaddr); use Carp qw(carp croak confess); use RDF::Trine::Iterator qw(smap); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =head1 METHODS =over 4 =item C<< new ( @triples ) >> Returns a new BasicGraphPattern structure. =cut sub new { my $class = shift; my @triples = @_; foreach my $t (@triples) { unless (blessed($t) and $t->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error -text => "Patterns belonging to a BGP must be triples"; } } return bless( [ @triples ], $class ); } =item C<< construct_args >> Returns a list of arguments that, passed to this class' constructor, will produce a clone of this algebra pattern. =cut sub construct_args { my $self = shift; return ($self->triples); } =item C<< triples >> Returns a list of triples belonging to this BGP. =cut sub triples { my $self = shift; return @$self; } =item C<< type >> =cut sub type { return 'BGP'; } =item C<< sse >> Returns the SSE string for this algebra expression. =cut sub sse { my $self = shift; my $context = shift; return sprintf( '(bgp %s)', join(' ', map { $_->sse( $context ) } $self->triples) ); } =item C<< referenced_variables >> Returns a list of the variable names used in this algebra expression. =cut sub referenced_variables { my $self = shift; return RDF::Trine::_uniq(map { $_->referenced_variables } $self->triples); } =item C<< definite_variables >> Returns a list of the variable names that will be bound after evaluating this algebra expression. =cut sub definite_variables { my $self = shift; return RDF::Trine::_uniq(map { $_->definite_variables } $self->triples); } =item C<< clone >> =cut sub clone { my $self = shift; my $class = ref($self); return $class->new( map { $_->clone } $self->triples ); } =item C<< bind_variables ( \%bound ) >> Returns a new pattern with variables named in %bound replaced by their corresponding bound values. =cut sub bind_variables { my $self = shift; my $class = ref($self); my $bound = shift; return $class->new( map { $_->bind_variables( $bound ) } $self->triples ); } =item C<< subsumes ( $statement ) >> Returns true if the pattern will subsume the $statement when matched against a triple store. =cut sub subsumes { my $self = shift; my $st = shift; my $l = Log::Log4perl->get_logger("rdf.trine.pattern"); my @triples = $self->triples; foreach my $t (@triples) { if ($t->subsumes( $st )) { $l->debug($self->sse . " \x{2292} " . $st->sse); return 1; } } return 0; } =item C<< sort_for_join_variables >> Returns a new pattern object with the subpatterns of the referrant sorted so that they may be joined in order while avoiding cartesian products (if possible). =cut sub sort_for_join_variables { my $self = shift; my $class = ref($self); my @triples = $self->triples; my %triples_by_tid; foreach my $t (@triples) { $triples_by_tid{ refaddr($t) } = $t; } my %triples_with_variable; foreach my $t (@triples) { my $tid = refaddr($t); foreach my $n ($t->nodes) { if ($n->isa('RDF::Trine::Node::Variable')) { my $var = $n->name; $triples_with_variable{ $var }{ $tid }++; } } } foreach my $var (keys %triples_with_variable) { my @tids = sort { $a <=> $b } keys %{ $triples_with_variable{ $var } }; $triples_with_variable{ $var } = \@tids; } my %variables_in_triple; foreach my $var (keys %triples_with_variable) { foreach my $tid (@{ $triples_with_variable{ $var } }) { $variables_in_triple{ $tid }{ $var }++; } } foreach my $tid (keys %variables_in_triple) { my @vars = sort keys %{ $variables_in_triple{ $tid } }; $variables_in_triple{ $tid } = \@vars; } my %used_vars; my %used_tids; my @sorted; my $first = shift(@triples); # start with the first triple in syntactic order push(@sorted, $first); $used_tids{ refaddr($first) }++; foreach my $var (@{ $variables_in_triple{ refaddr($first) } }) { $used_vars{ $var }++; } while (@triples) { my @candidate_tids = grep { not($used_tids{$_}) } map { @{ $triples_with_variable{ $_ } } } (keys %used_vars); last unless scalar(@candidate_tids); my $next_id = shift(@candidate_tids); my $next = $triples_by_tid{ $next_id }; push(@sorted, $next); $used_tids{ refaddr($next) }++; foreach my $var (@{ $variables_in_triple{ refaddr($next) } }) { $used_vars{ $var }++; } @triples = grep { refaddr($_) != $next_id } @triples; } push(@sorted, @triples); return $class->new(@sorted); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/000755 000765 000024 00000000000 12171744443 017664 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Serializer.pm000644 000765 000024 00000020653 12171744402 020223 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer - RDF Serializer class =head1 VERSION This document describes RDF::Trine::Serializer version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer; =head1 DESCRIPTION The RDF::Trine::Serializer class provides an API for serializing RDF graphs (via both model objects and graph iterators) to strings and files. =cut package RDF::Trine::Serializer; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use HTTP::Negotiate qw(choose); our ($VERSION); our %serializer_names; our %format_uris; our %media_types; BEGIN { $VERSION = '1.007'; } use RDF::Trine::Serializer::NQuads; use RDF::Trine::Serializer::NTriples; use RDF::Trine::Serializer::NTriples::Canonical; use RDF::Trine::Serializer::RDFXML; use RDF::Trine::Serializer::RDFJSON; use RDF::Trine::Serializer::Turtle; use RDF::Trine::Serializer::TriG; use RDF::Trine::Serializer::RDFPatch; =head1 METHODS =over 4 =item C<< serializer_names >> Returns a list of valid serializer names for use as arguments to the serializer constructor. =cut sub serializer_names { return keys %serializer_names; } =item C<< new ( $serializer_name, %options ) >> Returns a new RDF::Trine::Serializer object for the serializer with the specified name (e.g. "rdfxml" or "turtle"). If no serializer with the specified name is found, throws a RDF::Trine::Error::SerializationError exception. The valid key-values used in C<< %options >> are specific to a particular serializer implementation. For serializers that support namespace declarations (to allow more concise serialization), use C<< namespaces => \%namespaces >> in C<< %options >>, where the keys of C<< %namespaces >> are namespace names and the values are (partial) URIs. For serializers that support base URI declarations, use C<< base_uri => $base_uri >> . =cut sub new { my $class = shift; my $name = shift; my $key = lc($name); $key =~ s/[^-a-z]//g; if (my $class = $serializer_names{ $key }) { return $class->new( @_ ); } else { throw RDF::Trine::Error::SerializationError -text => "No serializer known named $name"; } } =item C<< negotiate ( request_headers => $request_headers, %options ) >> Returns a two-element list containing an appropriate media type and RDF::Trine::Serializer object as decided by L. If the C<< 'request_headers' >> key-value is supplied, the C<< $request_headers >> is passed to C<< HTTP::Negotiate::choose >>. The option C<< 'restrict' >>, set to a list of serializer names, can be used to limit the serializers to choose from. Finally, an C<<'extends' >> option can be set to a hashref that contains MIME-types as keys and a custom variant as value. This will enable the user to use this negotiator to return a type that isn't supported by any serializers. The subsequent code will have to find out how to return a representation. The rest of C<< %options >> is passed through to the serializer constructor. =cut sub negotiate { my $class = shift; my %options = @_; my $headers = delete $options{ 'request_headers' }; my $restrict = delete $options{ 'restrict' }; my $extend = delete $options{ 'extend' } || {}; my %sclasses; if (ref($restrict) && ref($restrict) eq 'ARRAY') { $sclasses{ $serializer_names{$_} } = 1 for @$restrict; } else { %sclasses = reverse %serializer_names; } my @default_variants; while (my($type, $sclass) = each(%media_types)) { next unless $sclasses{$sclass}; my $qv; # slightly prefer turtle as a readable format to others # try hard to avoid using ntriples as 'text/plain' isn't very useful for conneg if ($type eq 'text/turtle') { $qv = 1.0; } elsif ($type eq 'text/plain') { $qv = 0.2; } else { $qv = 0.99; } $qv -= 0.01 if ($type =~ m#/x-#); # prefer non experimental media types $qv -= 0.01 if ($type =~ m#^application/(?!rdf[+]xml)#); # prefer standard rdf/xml to other application/* formats push(@default_variants, [$type, $qv, $type]); } my %custom_thunks; my @custom_variants; while (my($type,$thunk) = each(%$extend)) { push(@custom_variants, [$thunk, 1.0, $type]); $custom_thunks{ $thunk } = [$type, $thunk]; } # remove variants with media types that are in custom_variants from @variants my @variants = grep { not exists $extend->{ $_->[2] } } @default_variants; push(@variants, @custom_variants); my $stype = choose( \@variants, $headers ); if (defined($stype) and $custom_thunks{ $stype }) { my $thunk = $stype; my $type = $custom_thunks{ $stype }[0]; return ($type, $thunk); } if (defined($stype) and my $sclass = $media_types{ $stype }) { return ($stype, $sclass->new( %options )); } else { throw RDF::Trine::Error::SerializationError -text => "No appropriate serializer found for content-negotiation"; } } =item C<< media_types >> Returns a list of media types appropriate for the format of the serializer. =cut sub media_types { my $self = shift; my $class = ref($self) || $self; my @list; while (my($type, $sclass) = each(%media_types)) { push(@list, $type) if ($sclass eq $class); } my @types = sort @list; return @types; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<< $model >>, printing the results to the supplied filehandle C<<$fh>>. =item C<< serialize_model_to_string ( $model ) >> Serializes the C<< $model >>, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $string = ''; open( my $fh, '>:encoding(UTF-8)', \$string ); $self->serialize_model_to_file( $fh, $model ); close($fh); return $string; } =item C<< serialize_iterator_to_file ( $file, $iterator ) >> Serializes the statement objects produced by C<< $iterator >>, printing the results to the supplied filehandle C<<$fh>>. Note that some serializers may not support the use of this method, or may require the full materialization of the iterator in order to serialize it. If materialization is required, available memeory may constrain the iterators that can be serialized. =cut sub serialize_iterator_to_file { my $self = shift; my $fh = shift; my $iter = shift; my %args = @_; my $model = RDF::Trine::Model->temporary_model; while (my $st = $iter->next) { $model->add_statement( $st ); } return $self->serialize_model_to_file( $fh, $model ); } =item C<< serialize_iterator_to_string ( $iterator ) >> Serializes the statement objects produced by C<< $iterator >>, returning the result as a string. Note that the same constraints apply to this method as to C<< serialize_iterator_to_file >>. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $string = ''; open( my $fh, '>', \$string ); $self->serialize_iterator_to_file( $fh, $iter ); close($fh); return $string; } =back =cut package RDF::Trine::Serializer::FileSink; use strict; use warnings; =begin private =head1 NAME RDF::Trine::Serializer::FileSink =head1 METHODS =over 4 =cut =item C<< new ( $fh ) >> Returns a new serializer sink object backed by a filehandle. =cut sub new { my $class = shift; my $fh = shift; return bless([$fh],$class); } =item C<< emit ( $data ) >> Write the C<< $data >> to the sink. =cut sub emit { my $self = shift; my $data = shift; print {$self->[0]} $data; } =back =cut package RDF::Trine::Serializer::StringSink; use strict; use warnings; use Encode; =head1 NAME RDF::Trine::Serializer::StringSink =head1 METHODS =over 4 =cut =item C<< new () >> Returns a new serializer sink object backed by a string. =cut sub new { my $class = shift; my $string = decode_utf8(""); return bless(\$string,$class); } =item C<< emit ( $data ) >> Write the C<< $data >> to the sink. =cut sub emit { my $self = shift; my $data = shift; $$self .= $data; } =item C<< prepend ( $data ) >> Prepend the C<< $data >> to the underlying string. =cut sub prepend { my $self = shift; my $data = shift; $$self = $data . $$self; } =item C<< string () >> Returns the string value of all data written to the sink. =cut sub string { my $self = shift; return $$self; } =back =end private 1; __END__ =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Statement/000755 000765 000024 00000000000 12171744442 017516 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Statement.pm000644 000765 000024 00000017603 12171744402 020057 0ustar00gregstaff000000 000000 # RDF::Trine::Statement # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Statement - Class for triples and triple patterns =head1 VERSION This document describes RDF::Trine::Statement version 1.007 =cut package RDF::Trine::Statement; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Log::Log4perl; use Carp qw(carp croak confess); use Scalar::Util qw(blessed reftype); use RDF::Trine::Iterator qw(smap sgrep swatch); use URI::Escape qw(uri_unescape); use Encode; ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =head1 METHODS =over 4 =cut =item C Returns a new Triple structure. =cut sub new { my $class = shift; my @nodes = @_; unless (scalar(@nodes) == 3) { throw RDF::Trine::Error::MethodInvocationError -text => "Triple constructor must have three node arguments"; } my @names = qw(subject predicate object); foreach my $i (0 .. 2) { unless (defined($nodes[ $i ])) { $nodes[ $i ] = RDF::Trine::Node::Variable->new($names[ $i ]); } } return bless( [ @nodes ], $class ); } =item C<< construct_args >> Returns a list of arguments that, passed to this class' constructor, will produce a clone of this algebra pattern. =cut sub construct_args { my $self = shift; return ($self->nodes); } =item C<< nodes >> Returns the subject, predicate and object of the triple pattern. =cut sub nodes { my $self = shift; return @$self; } =item C<< node_names >> Returns the method names for accessing the nodes of this statement. =cut sub node_names { return qw(subject predicate object); } =item C<< subject >> Returns the subject node of the triple pattern. =cut sub subject { my $self = shift; if (@_) { $self->[0] = shift; } return $self->[0]; } =item C<< predicate >> Returns the predicate node of the triple pattern. =cut sub predicate { my $self = shift; if (@_) { $self->[1] = shift; } return $self->[1]; } =item C<< object >> Returns the object node of the triple pattern. =cut sub object { my $self = shift; if (@_) { $self->[2] = shift; } return $self->[2]; } =item C<< as_string >> Returns the statement in a string form. =cut sub as_string { my $self = shift; return $self->sse; } =item C<< has_blanks >> Returns true if any of the nodes in this statement are blank nodes. =cut sub has_blanks { my $self = shift; foreach my $node ($self->nodes) { return 1 if $node->isa('RDF::Trine::Node::Blank'); } return 0; } =item C<< sse >> Returns the SSE string for this algebra expression. =cut sub sse { my $self = shift; my $context = shift; return sprintf( '(triple %s %s %s)', $self->subject->sse( $context ), $self->predicate->sse( $context ), $self->object->sse( $context ), ); } =item C<< from_sse ( $string, $context ) >> Parses the supplied SSE-encoded string and returns a RDF::Trine::Statement object. =cut sub from_sse { my $class = shift; my $context = $_[1]; $_ = $_[0]; if (m/^[(]triple/) { s/^[(]triple\s+//; my @nodes; push(@nodes, RDF::Trine::Node->from_sse( $_, $context )); push(@nodes, RDF::Trine::Node->from_sse( $_, $context )); push(@nodes, RDF::Trine::Node->from_sse( $_, $context )); if (m/^\s*[)]/) { s/^\s*[)]//; return RDF::Trine::Statement->new( @nodes ); } else { throw RDF::Trine::Error -text => "Cannot parse end-of-triple from SSE string: >>$_<<"; } } else { throw RDF::Trine::Error -text => "Cannot parse triple from SSE string: >>$_<<"; } } =item C<< type >> Returns the type of this algebra expression. =cut sub type { return 'TRIPLE'; } =item C<< referenced_variables >> Returns a list of the variable names used in this algebra expression. =cut sub referenced_variables { my $self = shift; return RDF::Trine::_uniq(map { $_->name } grep { $_->isa('RDF::Trine::Node::Variable') } $self->nodes); } =item C<< definite_variables >> Returns a list of the variable names that will be bound after evaluating this algebra expression. =cut sub definite_variables { my $self = shift; return $self->referenced_variables; } =item C<< clone >> =cut sub clone { my $self = shift; my $class = ref($self); return $class->new( $self->nodes ); } =item C<< bind_variables ( \%bound ) >> Returns a new algebra pattern with variables named in %bound replaced by their corresponding bound values. =cut sub bind_variables { my $self = shift; my $class = ref($self); my $bound = shift; my @nodes = $self->nodes; foreach my $i (0 .. 2) { my $n = $nodes[ $i ]; if ($n->isa('RDF::Trine::Node::Variable')) { my $name = $n->name; if (my $value = $bound->{ $name }) { $nodes[ $i ] = $value; } } } return $class->new( @nodes ); } =item C<< subsumes ( $statement ) >> Returns true if this statement will subsume the $statement when matched against a triple store. =cut sub subsumes { my $self = shift; my $st = shift; my @nodes = $self->nodes; my @match = $st->nodes; my %bind; my $l = Log::Log4perl->get_logger("rdf.trine.statement"); foreach my $i (0..2) { my $m = $match[ $i ]; if ($nodes[$i]->isa('RDF::Trine::Node::Variable')) { my $name = $nodes[$i]->name; if (exists( $bind{ $name } )) { $l->debug("variable $name has already been bound"); if (not $bind{ $name }->equal( $m )) { $l->debug("-> and " . $bind{$name}->sse . " does not equal " . $m->sse); return 0; } } else { $bind{ $name } = $m; } } else { return 0 unless ($nodes[$i]->equal( $m )); } } return 1; } =item C<< from_redland ( $statement ) >> Given a RDF::Redland::Statement object, returns a perl-native RDF::Trine::Statement object. =cut sub from_redland { my $self = shift; my $rstmt = shift; my $rs = $rstmt->subject; my $rp = $rstmt->predicate; my $ro = $rstmt->object; my $cast = sub { my $node = shift; my $type = $node->type; if ($type == $RDF::Redland::Node::Type_Resource) { my $uri = $node->uri->as_string; if ($uri =~ /%/) { # Redland's parser doesn't properly unescape percent-encoded RDF URI References $uri = decode_utf8(uri_unescape(encode_utf8($uri))); } return RDF::Trine::Node::Resource->new( $uri ); } elsif ($type == $RDF::Redland::Node::Type_Blank) { return RDF::Trine::Node::Blank->new( $node->blank_identifier ); } elsif ($type == $RDF::Redland::Node::Type_Literal) { my $lang = $node->literal_value_language; my $dturi = $node->literal_datatype; my $dt = ($dturi) ? $dturi->as_string : undef; return RDF::Trine::Node::Literal->new( $node->literal_value, $lang, $dt ); } else { croak 'Unknown node type in statement conversion'; } }; my @nodes; foreach my $n ($rs, $rp, $ro) { push(@nodes, $cast->( $n )); } my $st = $self->new( @nodes ); return $st; } =item C<< rdf_compatible >> Returns true if and only if the statement can be expressed in RDF. That is, the subject of the statement must be a resource or blank node; the predicate must be a resource; and the object must be a resource, blank node or literal. RDF::Trine::Statement does allow statements to be created which cannot be expressed in RDF - for instance, statements including variables. =cut sub rdf_compatible { my $self = shift; return unless $self->subject->is_resource || $self->subject->is_blank; return unless $self->predicate->is_resource; return unless $self->object->is_resource || $self->object->is_blank || $self->object->is_literal; return $self; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/000755 000765 000024 00000000000 12171744442 016646 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Store.pm000644 000765 000024 00000032211 12171744402 017177 0ustar00gregstaff000000 000000 # RDF::Trine::Store # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Store - RDF triplestore base class =head1 VERSION This document describes RDF::Trine::Store version 1.007 =head1 DESCRIPTION RDF::Trine::Store provides a base class and common API for implementations of triple/quadstores for use with the RDF::Trine framework. In general, it should be used only be people implementing new stores. For interacting with stores (e.g. to read, insert, and delete triples) the RDF::Trine::Model interface should be used (using the model as an intermediary between the client/user and the underlying store). To be used by the RDF::Trine framework, store implementations must implement a set of required functionality: =over 4 =item * C<< new >> =item * C<< get_statements >> =item * C<< get_contexts >> =item * C<< add_statement >> =item * C<< remove_statement >> =item * C<< count_statements >> =item * C<< supports >> =back Implementations may also provide the following methods if a native implementation would be more efficient than the default provided by RDF::Trine::Store: =over 4 =item * C<< get_pattern >> =item * C<< get_sparql >> =item * C<< remove_statements >> =item * C<< size >> =item * C<< nuke >> =item * C<< _begin_bulk_ops >> =item * C<< _end_bulk_ops >> =back =cut package RDF::Trine::Store; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Log::Log4perl; use Carp qw(carp croak confess); use Scalar::Util qw(blessed reftype); use Module::Load::Conditional qw[can_load]; use RDF::Trine::Store::Memory; use RDF::Trine::Store::Hexastore; use RDF::Trine::Store::SPARQL; ###################################################################### our ($VERSION, $HAVE_REDLAND, %STORE_CLASSES); BEGIN { $VERSION = '1.007'; if ($RDF::Redland::VERSION) { $HAVE_REDLAND = 1; } can_load( modules => { 'RDF::Trine::Store::DBI' => undef, } ); } ###################################################################### =head1 METHODS =over 4 =cut =item C<< new ( $data ) >> Returns a new RDF::Trine::Store object based on the supplied data value. This constructor delegates to one of the following methods depending on the value of C<< $data >>: * C<< new_with_string >> if C<< $data >> is not a reference * C<< new_with_config >> if C<< $data >> is a HASH reference * C<< new_with_object >> if C<< $data >> is a blessed object =cut sub new { my $class = shift; my $data = shift; if (blessed($data)) { return $class->new_with_object($data); } elsif (ref($data)) { return $class->new_with_config($data); } else { return $class->new_with_string($data); } } =item C<< new_with_string ( $config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration string. The format of the string specifies the Store subclass to be instantiated as well as any required constructor arguments. These are separated by a semicolon. An example configuration string for the DBI store would be: DBI;mymodel;DBI:mysql:database=rdf;user;password The format of the constructor arguments (everything after the first ';') is specific to the Store subclass. =cut sub new_with_string { my $proto = shift; my $string = shift; if (defined($string)) { my ($subclass, $config) = split(/;/, $string, 2); my $class = join('::', 'RDF::Trine::Store', $subclass); if (can_load(modules => { $class => 0 }) and $class->can('_new_with_string')) { return $class->_new_with_string( $config ); } else { throw RDF::Trine::Error::UnimplementedError -text => "The class $class doesn't support the use of new_with_string"; } } else { throw RDF::Trine::Error::MethodInvocationError; } } =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. This requires the the Store subclass to be supplied with a C key, while other keys are required by the Store subclasses, please refer to each subclass for specific documentation. An example invocation for the DBI store may be: my $store = RDF::Trine::Store->new_with_config({ storetype => 'DBI', name => 'mymodel', dsn => 'DBI:mysql:database=rdf', username => 'dahut', password => 'Str0ngPa55w0RD' }); =cut sub new_with_config { my $proto = shift; my $config = shift; if (defined($config)) { my $class = $config->{storeclass} || join('::', 'RDF::Trine::Store', $config->{storetype}); if ($class->can('_new_with_config')) { return $class->_new_with_config( $config ); } else { throw RDF::Trine::Error::UnimplementedError -text => "The class $class doesn't support the use of new_with_config"; } } else { throw RDF::Trine::Error::MethodInvocationError; } } =item C<< new_with_object ( $object ) >> Returns a new RDF::Trine::Store object based on the supplied opaque C<< $object >>. If the C<< $object >> is recognized by an available backend as being sufficient to construct a store object, the store object will be returned. Otherwise undef will be returned. =cut sub new_with_object { my $proto = shift; my $obj = shift; foreach my $class (keys %STORE_CLASSES) { if ($class->can('_new_with_object')) { my $s = $class->_new_with_object( $obj ); if ($s) { return $s; } } } return; } =item C<< nuke >> Permanently removes the store and its data. =cut sub nuke {} =item C<< class_by_name ( $name ) >> Returns the class of the storage implementation with the given name. For example, C<< 'Memory' >> would return C<< 'RDF::Trine::Store::Memory' >>. =cut sub class_by_name { my $proto = shift; my $name = shift; foreach my $class (keys %STORE_CLASSES) { if (lc($class) =~ m/::${name}$/i) { return $class; } } return; } =item C<< temporary_store >> Returns a new temporary triplestore (using appropriate default values). =cut sub temporary_store { return RDF::Trine::Store::Memory->new(); } # =item C<< get_pattern ( $bgp [, $context] ) >> # # Returns a stream object of all bindings matching the specified graph pattern. # # =cut sub _get_pattern { my $self = shift; my $bgp = shift; my $context = shift; my @args = @_; my %args = @args; if ($bgp->isa('RDF::Trine::Statement')) { $bgp = RDF::Trine::Pattern->new($bgp); } else { $bgp = $bgp->sort_for_join_variables(); } my %iter_args; my @triples = $bgp->triples; my ($iter); if (1 == scalar(@triples)) { my $t = shift(@triples); my @nodes = $t->nodes; my $size = scalar(@nodes); my %vars; my @names = qw(subject predicate object context); foreach my $n (0 .. $#nodes) { if ($nodes[$n]->isa('RDF::Trine::Node::Variable')) { $vars{ $names[ $n ] } = $nodes[$n]->name; } } my $_iter = $self->get_statements( @nodes ); if ($_iter->finished) { return RDF::Trine::Iterator::Bindings->new( [], [] ); } my @vars = values %vars; my $sub = sub { my $row = $_iter->next; return unless ($row); my %data = map { $vars{ $_ } => $row->$_() } (keys %vars); return RDF::Trine::VariableBindings->new( \%data ); }; $iter = RDF::Trine::Iterator::Bindings->new( $sub, \@vars ); } else { my $t = pop(@triples); my $rhs = $self->get_pattern( RDF::Trine::Pattern->new( $t ), $context, @args ); my $lhs = $self->get_pattern( RDF::Trine::Pattern->new( @triples ), $context, @args ); my @inner; while (my $row = $rhs->next) { push(@inner, $row); } my @results; while (my $row = $lhs->next) { RESULT: foreach my $irow (@inner) { my %keysa; my @keysa = keys %$irow; @keysa{ @keysa } = (1) x scalar(@keysa); my @shared = grep { exists $keysa{ $_ } } (keys %$row); foreach my $key (@shared) { my $val_a = $irow->{ $key }; my $val_b = $row->{ $key }; next unless (defined($val_a) and defined($val_b)); my $equal = $val_a->equal( $val_b ); unless ($equal) { next RESULT; } } my $jrow = { (map { $_ => $irow->{$_} } grep { defined($irow->{$_}) } keys %$irow), (map { $_ => $row->{$_} } grep { defined($row->{$_}) } keys %$row) }; push(@results, RDF::Trine::VariableBindings->new($jrow)); } } $iter = RDF::Trine::Iterator::Bindings->new( \@results, [ $bgp->referenced_variables ] ); } if (my $o = $args{ 'orderby' }) { unless (reftype($o) eq 'ARRAY') { throw RDF::Trine::Error::MethodInvocationError -text => "The orderby argument to get_pattern must be an ARRAY reference"; } my @order; my %order; my @o = @$o; my @sorted_by; my %vars = map { $_ => 1 } $bgp->referenced_variables; if (scalar(@o) % 2 != 0) { throw RDF::Trine::Error::MethodInvocationError -text => "The orderby argument ARRAY to get_pattern must contain an even number of elements"; } while (@o) { my ($k,$dir) = splice(@o, 0, 2, ()); next unless ($vars{ $k }); unless ($dir =~ m/^ASC|DESC$/i) { throw RDF::Trine::Error::MethodInvocationError -text => "The sort direction for key $k must be either 'ASC' or 'DESC' in get_pattern call"; } my $asc = ($dir eq 'ASC') ? 1 : 0; push(@order, $k); $order{ $k } = $asc; push(@sorted_by, $k, $dir); } my @results = $iter->get_all; @results = _sort_bindings( \@results, \@order, \%order ); $iter_args{ sorted_by } = \@sorted_by; return RDF::Trine::Iterator::Bindings->new( \@results, [ $bgp->referenced_variables ], %iter_args ); } else { return $iter; } } sub _sort_bindings { my $res = shift; my $o = shift; my $dir = shift; my @sorted = map { $_->[0] } sort { _sort_mapped_data($a,$b,$o,$dir) } map { _map_sort_data( $_, $o ) } @$res; return @sorted; } sub _sort_mapped_data { my $a = shift; my $b = shift; my $o = shift; my $dir = shift; foreach my $i (1 .. $#{ $a }) { my $av = $a->[ $i ]; my $bv = $b->[ $i ]; my $key = $o->[ $i-1 ]; next unless (defined($av) or defined($bv)); my $cmp = RDF::Trine::Node::compare( $av, $bv ); unless ($dir->{ $key }) { $cmp *= -1; } return $cmp if ($cmp); } return 0; } sub _map_sort_data { my $res = shift; my $o = shift; my @data = ($res, map { $res->{ $_ } } @$o); return \@data; } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements; =item C<< get_contexts >> Returns an RDF::Trine::Iterator over the RDF::Trine::Node objects comprising the set of contexts of the stored quads. =cut sub get_contexts; =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement; =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement; =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { # Fallback implementation my $self = shift; my $iterator = $self->get_statements(@_); while (my $st = $iterator->next) { $self->remove_statement($st); } } =item C<< count_statements ($subject, $predicate, $object) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements; =item C<< size >> Returns the number of statements in the store. =cut sub size { my $self = shift; return $self->count_statements( undef, undef, undef, undef ); } =item C<< etag >> If the store has the capability and knowledge to support caching, returns a persistent token that will remain consistent as long as the store's data doesn't change. This token is acceptable for use as an HTTP ETag. =cut sub etag { return; } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { return; } sub _begin_bulk_ops {} sub _end_bulk_ops {} 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut get_statements() XXX maybe this should instead follow the quad semantics? get_statements( s, p, o ) return (s,p,o,nil) for all distinct (s,p,o) get_statements( s, p, o, g ) return all (s,p,o,g) add_statement( TRIPLE ) add (s, p, o, nil) add_statement( TRIPLE, CONTEXT ) add (s, p, o, context) add_statement( QUAD ) add (s, p, o, g ) add_statement( QUAD, CONTEXT ) throw exception remove_statement( TRIPLE ) remove (s, p, o, nil) remove_statement( TRIPLE, CONTEXT ) remove (s, p, o, context) remove_statement( QUAD ) remove (s, p, o, g) remove_statement( QUAD, CONTEXT ) throw exception count_statements() XXX maybe this should instead follow the quad semantics? count_statements( s, p, o ) count distinct (s,p,o) for all statements (s,p,o,g) count_statements( s, p, o, g ) count (s,p,o,g) RDF-Trine-1.007/lib/RDF/Trine/VariableBindings.pm000644 000765 000024 00000012764 12171744402 021321 0ustar00gregstaff000000 000000 # RDF::Trine::VariableBindings # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::VariableBindings - Variable bindings =head1 VERSION This document describes RDF::Trine::VariableBindings version 1.007 =head1 SYNOPSIS use RDF::Trine qw(literal); use RDF::Trine::VariableBindings; my $vb = RDF::Trine::VariableBindings->new( {} ); $vb->set( foo => literal("bar") ); $vb->set( baz => literal("blee") ); $vb->variables; # qw(foo baz) my $x = RDF::Trine::VariableBindings->new( { foo => literal("bar") } ); $x->set( greeting => literal("hello") ); my $j = $vb->join( $x ); # { foo => "bar", baz => "blee", greeting => "hello" } my @keys = qw(baz greeting); my $p = $j->project( @keys ); # { baz => "blee", greeting => "hello" } print $p->{greeting}->literal_value; # "hello" =head1 DESCRIPTION RDF::Trine::VariableBindings objects provide a mapping from variable names to RDF::Trine::Node objects. The objects may be used as a hash reference, with variable names used as hash keys. =head1 METHODS =over 4 =cut package RDF::Trine::VariableBindings; use strict; use warnings; use overload '""' => sub { $_[0]->as_string }; my %VB_LABELS; use Scalar::Util qw(blessed refaddr); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =item C<< new ( \%bindings ) >> =cut sub new { my $class = shift; my $bindings = shift; my $self = bless( { %$bindings }, $class ); if (blessed($bindings) and $bindings->isa('RDF::Trine::VariableBindings')) { my $addr = refaddr($bindings); if (ref($VB_LABELS{ $addr })) { $VB_LABELS{ refaddr($self) } = { %{ $VB_LABELS{ $addr } } }; } } return $self; } =item C<< set ( $variable_name => $node ) >> =cut sub set { my $self = shift; my $name = shift; my $node = shift; $self->{ $name } = $node; } =item C<< join ( $row ) >> Returns a new VariableBindings object based on the join of this object and C<< $row >>. If the two variable binding objects cannot be joined, returns undef. =cut sub join { my $self = shift; my $class = ref($self); my $rowb = shift; my %keysa; my @keysa = keys %$self; @keysa{ @keysa } = (1) x scalar(@keysa); my @shared = grep { exists $keysa{ $_ } } (keys %$rowb); foreach my $key (@shared) { my $val_a = $self->{ $key }; my $val_b = $rowb->{ $key }; next unless (defined($val_a) and defined($val_b)); my $equal = (refaddr($val_a) == refaddr($val_b)) || $val_a->equal( $val_b ); unless ($equal) { return; } } my $row = { (map { $_ => $self->{$_} } grep { defined($self->{$_}) } keys %$self), (map { $_ => $rowb->{$_} } grep { defined($rowb->{$_}) } keys %$rowb) }; my $joined = $class->new( $row ); $joined->copy_labels_from( $self ); $joined->copy_labels_from( $rowb ); return $joined; } =item C<< variables >> =cut sub variables { my $self = shift; return (keys %$self); } =item C<< project ( @keys ) >> Returns a new binding with values for only the keys listed. =cut sub project { my $self = shift; my $class = ref($self); my @keys = @_; my %data = map { $_ => $self->{ $_ } } @keys; my $p = $class->new( \%data ); my $addr = refaddr($self); if (ref($VB_LABELS{ $addr })) { $VB_LABELS{ refaddr($p) } = { %{ $VB_LABELS{ $addr } } }; } return $p; } =item C<< as_string >> Returns a string representation of the variable bindings. =cut sub as_string { my $self = shift; my @keys = sort keys %$self; my $string = sprintf('{ %s }', CORE::join(', ', map { CORE::join('=', $_, ($self->{$_}) ? $self->{$_}->as_string : '()') } (@keys))); return $string; } =item C<< label ( $label => $value ) >> Sets the named C<< $label >> to C<< $value >> for this variable bindings object. If no C<< $value >> is given, returns the current label value, or undef if none exists. =cut sub label { my $self = shift; my $addr = refaddr($self); my $label_name = shift; if (@_) { my $value = shift; $VB_LABELS{ $addr }{ $label_name } = $value; } my $labels = $VB_LABELS{ $addr }; if (ref($labels)) { my $value = $labels->{ $label_name }; return $value; } else { return; } } =item C<< copy_labels_from ( $vb ) >> Copies the labels from C<< $vb >>, adding them to the labels for this object. =cut sub copy_labels_from { my $self = shift; my $rowa = shift; my $self_labels = $VB_LABELS{ refaddr($self) }; my $a_labels = $VB_LABELS{ refaddr($rowa) }; if ($self_labels or $a_labels) { $self_labels ||= {}; $a_labels ||= {}; my %new_labels = ( %$self_labels, %$a_labels ); if (exists $new_labels{'origin'}) { my %origins; foreach my $o (@{ $self_labels->{'origin'} || [] }) { $origins{ $o }++; } foreach my $o (@{ $a_labels->{'origin'} || [] }) { $origins{ $o }++; } $new_labels{'origin'} = [ keys %origins ]; } $VB_LABELS{ refaddr($self) } = \%new_labels; } } sub _labels { my $self = shift; my $addr = refaddr($self); my $labels = $VB_LABELS{ $addr }; return $labels; } sub DESTROY { my $self = shift; my $addr = refaddr( $self ); delete $VB_LABELS{ $addr }; return; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/DBI/000755 000765 000024 00000000000 12171744442 017244 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Store/DBI.pm000644 000765 000024 00000122162 12171744402 017602 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::DBI - Persistent RDF storage based on DBI =head1 VERSION This document describes RDF::Trine::Store::DBI version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::DBI; my $user = 'me'; my $pass = 'secret'; my $modelname = 'mymodel'; # First, construct a DBI connection to your database my $dsn = "DBI:mysql:database=perlrdf"; my $dbh = DBI->connect( $dsn, $user, $pass ); # Second, create a new Store object with the database connection # and specifying (by name) which model in the Store you want to use my $store = RDF::Trine::Store::DBI->new( $modelname, $dbh ); # Finally, wrap the Store objec into a Model, and use it to access your data my $model = RDF::Trine::Model->new($store); print $model->size . " RDF statements in store\n"; =head1 DESCRIPTION RDF::Trine::Store::DBI provides a persistent triple-store using the L module. =cut package RDF::Trine::Store::DBI; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store); use DBI; use DBIx::Connector; use Carp; use DBI; use Scalar::Util qw(blessed reftype refaddr); use Encode; use Digest::MD5 ('md5'); use Math::BigInt; use Data::Dumper; use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Statement::Quad; use RDF::Trine::Iterator; use Log::Log4perl; use RDF::Trine::Error; use RDF::Trine::Store::DBI::mysql; use RDF::Trine::Store::DBI::SQLite; use RDF::Trine::Store::DBI::Pg; ###################################################################### our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C =item C Returns a new storage object using the supplied arguments to construct a DBI object for the underlying database. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. These keys should also be used: =over =item C The name of the model. =item C The DBI Data Source Name for the underlying database. =item C The username of the database user. =item C The password of the database user. =back =item C Initialize the store with a L object. =cut sub new { my $class = shift; my ($dbh, $conn); my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); my $name = shift || 'model'; my %args; if (scalar(@_) == 0) { $l->trace("trying to construct a temporary model"); my $dsn = "dbi:SQLite:dbname=:memory:"; $conn = DBIx::Connector->new( $dsn, '', '' ); $class = 'RDF::Trine::Store::DBI::SQLite'; } elsif (blessed($_[0]) and $_[0]->isa('DBI::db')) { $l->trace("got a DBD handle"); $dbh = shift; my $name = $dbh->get_info(17); if ($name eq 'MySQL') { $class = 'RDF::Trine::Store::DBI::mysql'; } elsif ($name eq 'PostgreSQL') { $class = 'RDF::Trine::Store::DBI::Pg'; } elsif ($name eq 'SQLite') { $class = 'RDF::Trine::Store::DBI::SQLite'; } } elsif (blessed($_[0]) and $_[0]->isa('DBIx::Connector')) { $conn = shift; } else { my $dsn = shift; my $user = shift; my $pass = shift; if ($dsn =~ /^DBI:mysql:/) { $class = 'RDF::Trine::Store::DBI::mysql'; } elsif ($dsn =~ /^DBI:Pg:/) { $class = 'RDF::Trine::Store::DBI::Pg'; } elsif ($dsn =~ /^DBI:SQLite:/) { $class = 'RDF::Trine::Store::DBI::SQLite'; $user = ''; $pass = ''; } $l->trace("Connecting to $dsn ($user, $pass)"); $conn = DBIx::Connector->new( $dsn, $user, $pass ); unless ($conn) { throw RDF::Trine::Error::DatabaseError -text => "Couldn't connect to database: " . DBI->errstr; } } my $self = bless( { model_name => $name, dbh => $dbh, conn => $conn, statements_table_prefix => 'Statements', %args }, $class ); $self->init(); return $self; } sub _new_with_string { my $class = shift; my $config = shift; my ($model, $dsn, $user, $pass) = split(';', $config); return $class->new( $model, $dsn, $user, $pass ); } sub _new_with_config { my $class = shift; my $config = shift; return $class->new( $config->{name}, $config->{dsn}, $config->{username}, $config->{password} ); } sub _new_with_object { my $class = shift; my $obj = shift; return unless (blessed($obj) and $obj->isa('DBI::db')); return $class->new( $obj ); } =item C<< nuke >> Permanently removes the store and its data. Note that because of this module's use of the Redland schema, removing a store with this method will only delete the Statements table and remove the model's entry in the Models table. The node entries in the Literals, Bnodes, and Resources tables will still exist. =cut sub nuke { my $self = shift; my $dbh = $self->dbh; my $name = $self->model_name; my $id = _mysql_hash( $name ); my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); $dbh->do( "DROP TABLE Statements${id};" ) || do { $l->trace( $dbh->errstr ); return }; $dbh->do( "DELETE FROM Models WHERE ID = ${id}") || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { return; } =item C<< temporary_store >> =cut sub temporary_store { my $class = shift; my $name = 'model_' . sprintf( '%x%x%x%x', map { int(rand(16)) } (1..4) ); my $self = $class->new( $name, @_ ); $self->{ remove_store } = 1; $self->init(); return $self; } =item C<< clear_restrictions >> Clear's the restrictions put on the binding of node types to the different statement positions. By default, the subject position is restricted to resources and blank nodes, and the predicate position to only resources. Calling this method will allow any node type in any statement position. =cut sub clear_restrictions { my $self = shift; foreach my $pos (qw(subject predicate object context)) { $self->{restrictions}{$pos} = []; } return; } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @nodes = @_[0..3]; my $bound = 0; my %bound; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; # warn "count statements with quad" if ($::debug); my $g = $nodes[3]; if (blessed($g) and not($g->is_variable)) { $bound++; $bound{ 3 } = $g; } } my ($subj, $pred, $obj, $context) = @nodes; my $var = 0; my $dbh = $self->dbh; my $st = ($use_quad) ? RDF::Trine::Statement::Quad->new( map { defined($_) ? $_ : RDF::Trine::Node::Variable->new( 'n' . $var++ ) } ($subj, $pred, $obj,$context) ) : RDF::Trine::Statement->new( map { defined($_) ? $_ : RDF::Trine::Node::Variable->new( 'n' . $var++ ) } ($subj, $pred, $obj) ); my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); my @vars = $st->referenced_variables; my $semantics = ($use_quad ? 'quad' : 'triple'); local($self->{context_variable_count}) = 0; local($self->{join_context_nodes}) = 1 if (blessed($context) and $context->is_variable); my $sql = $self->_sql_for_pattern( $st, $context, semantics => $semantics, unique => 1 ); my $sth = $dbh->prepare( $sql ); $sth->execute(); my $sub = sub { NEXTROW: my $row = $sth->fetchrow_hashref; return unless (defined $row); my @triple; my $temp_var_count = 1; my @nodes = ($st->nodes)[ $use_quad ? (0..3) : (0..2) ]; foreach my $node (@nodes) { if ($node->is_variable) { my $nodename = $node->name; my $uri = $self->_column_name( $nodename, 'URI' ); my $name = $self->_column_name( $nodename, 'Name' ); my $value = $self->_column_name( $nodename, 'Value' ); my $node = $self->_column_name( $nodename, 'Node' ); if ($row->{ $node } == 0) { push( @triple, RDF::Trine::Node::Nil->new() ); } elsif (defined( my $u = $row->{ $uri })) { $u = decode('utf8', $u); push( @triple, RDF::Trine::Node::Resource->new( $u ) ); } elsif (defined( my $n = $row->{ $name })) { push( @triple, RDF::Trine::Node::Blank->new( $n ) ); } elsif (defined( my $v = $row->{ $value })) { my @cols = map { $self->_column_name( $nodename, $_ ) } qw(Value Language Datatype); $cols[0] = decode('utf8', $cols[0]); $cols[2] = decode('utf8', $cols[2]); push( @triple, RDF::Trine::Node::Literal->new( @{ $row }{ @cols } ) ); } else { warn "node isn't nil or a resource, blank, or literal?" . Dumper($row); goto NEXTROW; } } else { push(@triple, $node); } } my $st = (@triple == 3) ? RDF::Trine::Statement->new( @triple ) : RDF::Trine::Statement::Quad->new( @triple ); return $st; }; return RDF::Trine::Iterator::Graph->new( $sub ) } sub _column_name { my $self = shift; my @args = @_; my $col = join('_', @args); return $col; } =item C<< get_pattern ( $bgp [, $context] ) >> Returns a stream object of all bindings matching the specified graph pattern. =cut sub get_pattern { my $self = shift; my $pattern = shift; my $context = shift; my %args = @_; my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); $l->trace("get_pattern called for: " . $pattern->sse); if (my $o = $args{ orderby }) { my @ordering = @$o; while (my ($col, $dir) = splice( @ordering, 0, 2, () )) { no warnings 'uninitialized'; unless ($dir =~ /^(ASC|DESC)$/) { throw RDF::Trine::Error::MethodInvocationError -text => "The sort direction for key $col must be either 'ASC' or 'DESC' in get_pattern call"; } } } my $dbh = $self->dbh; my @vars = $pattern->referenced_variables; my %vars = map { $_ => 1 } @vars; my $sql = $self->_sql_for_pattern( $pattern, $context, %args ); $l->debug("get_pattern sql: $sql\n"); my $sth = $dbh->prepare( $sql ); $sth->execute(); my $sub = sub { my $row = $sth->fetchrow_hashref; return unless $row; my %bindings; foreach my $nodename (@vars) { my $uri = $self->_column_name( $nodename, 'URI' ); my $name = $self->_column_name( $nodename, 'Name' ); my $value = $self->_column_name( $nodename, 'Value' ); if (defined( my $u = $row->{ $uri })) { $u = decode('utf8', $u); $bindings{ $nodename } = RDF::Trine::Node::Resource->new( $u ); } elsif (defined( my $n = $row->{ $name })) { $bindings{ $nodename } = RDF::Trine::Node::Blank->new( $n ); } elsif (defined( my $v = $row->{ $value })) { my @cols = map { $self->_column_name( $nodename, $_ ) } qw(Value Language Datatype); my ($val,$lang,$dt) = @{ $row }{ @cols }; $val = decode('utf8', $val); $dt = decode('utf8', $dt); $bindings{ $nodename } = RDF::Trine::Node::Literal->new( $val, $lang, $dt ); } else { $bindings{ $nodename } = undef; } } return RDF::Trine::VariableBindings->new( \%bindings ); }; my @args; if (my $o = $args{ orderby }) { my @ordering = @$o; my @realordering; while (my ($col, $dir) = splice( @ordering, 0, 2, () )) { if (exists $vars{ $col }) { push(@realordering, $col, $dir); } } @args = ( sorted_by => \@realordering ); } return RDF::Trine::Iterator::Bindings->new( $sub, \@vars, @args ) } =item C<< get_contexts >> Returns an RDF::Trine::Iterator over the RDF::Trine::Node objects comprising the set of contexts of the stored quads. =cut sub get_contexts { my $self = shift; my $dbh = $self->dbh; my $stable = $self->statements_table; my $sql = "SELECT DISTINCT Context, r.URI AS URI, b.Name AS Name, l.Value AS Value, l.Language AS Language, l.Datatype AS Datatype FROM ${stable} s LEFT JOIN Resources r ON (r.ID = s.Context) LEFT JOIN Literals l ON (l.ID = s.Context) LEFT JOIN Bnodes b ON (b.ID = s.Context) ORDER BY URI, Name, Value;"; my $sth = $dbh->prepare( $sql ); $sth->execute(); my $sub = sub { while (my $row = $sth->fetchrow_hashref) { return unless defined($row); my $uri = $self->_column_name( 'URI' ); my $name = $self->_column_name( 'Name' ); my $value = $self->_column_name( 'Value' ); my $ctx = $self->_column_name( 'Context' ); if ($row->{ $ctx } == 0) { next; # return RDF::Trine::Node::Nil->new(); } elsif ($row->{ $uri }) { return RDF::Trine::Node::Resource->new( $row->{ $uri } ); } elsif ($row->{ $name }) { return RDF::Trine::Node::Blank->new( $row->{ $name } ); } elsif (defined $row->{ $value }) { my @cols = map { $self->_column_name( $_ ) } qw(Value Language Datatype); return RDF::Trine::Node::Literal->new( @{ $row }{ @cols } ); } else { return; } } return; }; return RDF::Trine::Iterator->new( $sub ); } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $stmt = shift; my $context = shift; my $dbh = $self->dbh; # Carp::confess unless (blessed($stmt)); my $stable = $self->statements_table; my @nodes = $stmt->nodes; my @values = map { $self->_add_node( $_ ) } @nodes; if ($stmt->isa('RDF::Trine::Statement::Quad')) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "add_statement cannot be called with both a quad and a context"; } $context = $stmt->context; } else { push @values, ($context ? $self->_add_node($context) : 0); } my $sql = "SELECT 1 FROM ${stable} WHERE Subject = ? AND Predicate = ? AND Object = ? AND Context = ?"; my $sth = $dbh->prepare( $sql ); $sth->execute( @values ); unless ($sth->fetch) { my $sql = sprintf( "INSERT INTO ${stable} (Subject, Predicate, Object, Context) VALUES (?,?,?,?)" ); my $sth = $dbh->prepare( $sql ); $sth->execute(@values); } } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $stmt = shift; my $context = shift; my $dbh = $self->dbh; my $stable = $self->statements_table; unless (blessed($stmt)) { throw RDF::Trine::Error::MethodInvocationError -text => "no statement passed to remove_statement"; } if ($stmt->isa( 'RDF::Trine::Statement::Quad' )) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "remove_statement cannot be called with both a quad and a context"; } } else { my @nodes = $stmt->nodes; if (blessed($context)) { $stmt = RDF::Trine::Statement::Quad->new( @nodes[0..2], $context ); } else { my $nil = RDF::Trine::Node::Nil->new(); $stmt = RDF::Trine::Statement::Quad->new( @nodes[0..2], $nil ); } } my @nodes = $stmt->nodes; my $sth = $dbh->prepare("DELETE FROM ${stable} WHERE Subject = ? AND Predicate = ? AND Object = ? AND Context = ?"); my @values = map { $self->_mysql_node_hash( $_ ) } (@nodes); $sth->execute( @values ); } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { my $self = shift; my $subj = shift; my $pred = shift; my $obj = shift; my $context = shift; my $dbh = $self->dbh; my $stable = $self->statements_table; my (@where, @bind); my @keys = qw(Subject Predicate Object Context); foreach my $node ($subj, $pred, $obj, $context) { my $key = shift(@keys); if (defined($node)) { push(@bind, $node); push(@where, "${key} = ?"); } } my $where = join(" AND ", @where); my $sth = $dbh->prepare( join(' ', "DELETE FROM ${stable}", ($where ? "WHERE ${where}" : ())) ); my @values = map { $self->_mysql_node_hash( $_ ) } (@bind); $sth->execute( @values ); } sub _add_node { my $self = shift; my $node = shift; my $hash = $self->_mysql_node_hash( $node ); my $dbh = $self->dbh; my @cols; my $table; my %values; return $hash if ($node->is_nil); if ($node->is_blank) { $table = "Bnodes"; @cols = qw(ID Name); @values{ @cols } = ($hash, $node->blank_identifier); } elsif ($node->is_resource) { $table = "Resources"; @cols = qw(ID URI); @values{ @cols } = ($hash, encode('utf8', $node->uri_value)); } elsif ($node->isa('RDF::Trine::Node::Literal')) { $table = "Literals"; @cols = qw(ID Value); @values{ @cols } = ($hash, encode('utf8', $node->literal_value)); if ($node->has_language) { push(@cols, 'Language'); $values{ 'Language' } = $node->literal_value_language; } elsif ($node->has_datatype) { push(@cols, 'Datatype'); $values{ 'Datatype' } = encode('utf8', $node->literal_datatype); } } my $ssql = "SELECT 1 FROM ${table} WHERE " . join(' AND ', map { join(' = ', $_, '?') } @cols); my $sth = $dbh->prepare( $ssql ); my @values = map {"$_"} @values{ @cols }; $sth->execute( @values ); unless ($sth->fetch) { my $sql = "INSERT INTO ${table} (" . join(', ', @cols) . ") VALUES (" . join(',',('?')x scalar(@cols)) . ")"; my $sth = $dbh->prepare( $sql ); $sth->execute( @values ); } return $hash; } =item C<< count_statements ($subject, $predicate, $object) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my @nodes = @_[0..3]; my $bound = 0; my %bound; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; # warn "count statements with quad" if ($::debug); my $g = $nodes[3]; if (blessed($g) and not($g->is_variable)) { $bound++; $bound{ 3 } = $g; } } my ($subj, $pred, $obj, $context) = @nodes; my $dbh = $self->dbh; my $var = 0; my $st = ($use_quad) ? RDF::Trine::Statement::Quad->new( map { defined($_) ? $_ : RDF::Trine::Node::Variable->new( 'n' . $var++ ) } ($subj, $pred, $obj,$context) ) : RDF::Trine::Statement->new( map { defined($_) ? $_ : RDF::Trine::Node::Variable->new( 'n' . $var++ ) } ($subj, $pred, $obj) ); my @vars = $st->referenced_variables; my $semantics = ($use_quad ? 'quad' : 'triple'); my $countkey = ($use_quad) ? 'count' : 'count-distinct'; my $sql = $self->_sql_for_pattern( $st, $context, $countkey => 1, semantics => $semantics ); # $sql =~ s/SELECT\b(.*?)\bFROM/SELECT COUNT(*) AS c FROM/smo; my $count; my $sth = $dbh->prepare( $sql ); $sth->execute(); $sth->bind_columns( \$count ); $sth->fetch; return $count; } =item C Addsd the contents of the specified C<$uri> to the model. If C<$named> is true, the data is added to the model using C<$uri> as the named context. =cut =item C Addsd the contents of C<$data> to the model. If C<$named> is true, the data is added to the model using C<$base_uri> as the named context. =cut =item C<< add_statement ( $statement ) >> Adds the specified C<$statement> to the underlying model. =cut =item C<< remove_statement ( $statement ) >> Removes the specified C<$statement> from the underlying model. =cut =item C<< variable_columns ( $var ) >> Given a variable name, returns the set of column aliases that store the values for the column (values for Literals, URIs, and Blank Nodes). =cut sub variable_columns { my $self = shift; my $var = shift; my $context = shift; ### ORDERING of these is important to enforce the correct sorting of results ### based on the SPARQL spec. Bnodes < IRIs < Literals, but since NULLs sort ### higher than other values, the list needs to be reversed. my $r = $context->{restrict}{$var}; my @cols; push(@cols, 'Value') unless ($r->{literal}); push(@cols, 'URI') unless ($r->{resource}); push(@cols, 'Name') unless ($r->{blank}); return map { "${var}_$_" } @cols; } =item C<< add_variable_values_joins >> Modifies the query by adding LEFT JOINs to the tables in the database that contain the node values (for literals, resources, and blank nodes). =cut my %NODE_TYPE_TABLES = ( resource => ['Resources', 'ljr', 'URI'], literal => ['Literals', 'ljl', qw(Value Language Datatype)], blank => ['Bnodes', 'ljb', qw(Name)] ); sub add_variable_values_joins { my $self = shift; my $context = shift; my $varhash = shift; my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); my @vars = keys %$varhash; my %select_vars = map { $_ => 1 } @vars; my %variable_value_cols; my $vars = $context->{vars}; my $from = $context->{from_tables}; my $where = $context->{where_clauses}; my $stable = $self->statements_table; my @cols; my $uniq_count = 0; my (%seen_vars, %seen_joins); foreach my $var (grep { not $seen_vars{ $_ }++ } (sort (@vars, keys %$vars))) { my $col = $vars->{ $var }; unless ($col) { throw RDF::Trine::Error::CompilationError -text => "*** Nothing is known about the variable ?${var}"; } my $col_table = (split(/[.]/, $col))[0]; my ($count) = ($col_table =~ /\w(\d+)/); $l->info("var: $var\t\tcol: $col\t\tcount: $count\t\tunique count: $uniq_count"); push(@cols, "${col} AS ${var}_Node") if ($select_vars{ $var }); my $restricted = 0; my @used_ljoins; foreach my $type (reverse sort keys %NODE_TYPE_TABLES) { my ($table, $alias, @join_cols) = @{ $NODE_TYPE_TABLES{ $type } }; if ($context->{restrict}{$var}{$type}) { $restricted = 1; next; } else { push(@used_ljoins, "${alias}${uniq_count}.$join_cols[0]"); } foreach my $jc (@join_cols) { my $column_real_name = "${alias}${uniq_count}.${jc}"; my $column_alias_name = "${var}_${jc}"; push(@cols, "${column_real_name} AS ${column_alias_name}"); push( @{ $variable_value_cols{ $var } }, $column_real_name); foreach my $i (0 .. $#{ $where }) { if ($where->[$i] =~ /\b$column_alias_name\b/) { $where->[$i] =~ s/\b${column_alias_name}\b/${column_real_name}/g; } } } } foreach my $i (0 .. $#{ $from }) { my $f = $from->[ $i ]; next if ($from->[ $i ] =~ m/^[()]$/); my ($alias) = ($f =~ m/${stable} (\w\d+)/); #split(/ /, $f))[1]; if ($alias eq $col_table) { # my (@tables, @where); foreach my $type (reverse sort keys %NODE_TYPE_TABLES) { next if ($context->{restrict}{$var}{$type}); my ($vtable, $vname) = @{ $NODE_TYPE_TABLES{ $type } }; my $valias = join('', $vname, $uniq_count); next if ($seen_joins{ $valias }++); # push(@tables, "${vtable} ${valias}"); # push(@where, "${col} = ${valias}.ID"); $f .= " LEFT JOIN ${vtable} ${valias} ON (${col} = ${valias}.ID)"; } # my $join = sprintf("LEFT JOIN (%s) ON (%s)", join(', ', @tables), join(' AND ', @where)); # $from->[ $i ] = join(' ', $f, $join); $from->[ $i ] = $f; next; } } if ($restricted) { # if we're restricting the left-joins to only certain types of nodes, # we need to insure that the rows we're getting back actually have data # in the left-joined columns. otherwise, we might end up with data for # a URI, but only left-join with Bnodes (for example), and end up with # NULL values where we aren't expecting them. _add_where( $context, '(' . join(' OR ', map {"$_ IS NOT NULL"} @used_ljoins) . ')' ); } $uniq_count++; } return (\%variable_value_cols, @cols); } sub _sql_for_pattern { my $self = shift; my $pat = shift; my $ctx_node = shift; my %args = @_; my @disjunction; my @patterns = $pat; my $variables; while (my $p = shift(@patterns)) { if ($p->isa('RDF::Query::Algebra::Union')) { push(@patterns, $p->patterns); } else { my $pvars = join('#', sort $p->referenced_variables); if (@disjunction) { # if we've already got some UNION patterns, make sure the new # pattern has the same referenced variables (otherwise the # columns of the result are going to come out all screwy if ($pvars ne $variables) { throw RDF::Trine::Error::CompilationError -text => 'All patterns in a UNION must reference the same variables.'; } } else { $variables = $pvars; } push(@disjunction, $p); } } my @sql; foreach my $pattern (@disjunction) { my $type = $pattern->type; my $method = "_sql_for_" . lc($type); my $context = $self->_new_context; # warn "*** sql compilation method $method"; if ($self->can($method)) { $self->$method( $pattern, $ctx_node, $context, %args ); push(@sql, $self->_sql_from_context( $context, %args )); } else { throw RDF::Trine::Error::CompilationError ( -text => "Don't know how to turn a $type into SQL" ); } } return join(' UNION ', @sql); } sub _new_context { my $self = shift; my $context = { next_alias => 0, level => 0, statement_table => $self->statements_table, }; return $context; } use constant INDENT => "\t"; sub _sql_from_context { my $self = shift; my $context = shift; my %args = @_; my $vars = $context->{vars}; my $from = $context->{from_tables} || []; my $where = $context->{where_clauses} || []; my $unique = $args{'unique'} ? 1 : 0; my ($varcols, @cols) = $self->add_variable_values_joins( $context, $vars ); unless (@cols) { push(@cols, 1); } my $from_clause; foreach my $f (@$from) { $from_clause .= ",\n" . INDENT if ($from_clause and $from_clause =~ m/[^(]$/ and $f !~ m/^([)]|LEFT JOIN)/); $from_clause .= $f; } my $where_clause = @$where ? "WHERE\n" . INDENT . join(" AND\n" . INDENT, @$where) : ''; if ($args{ count }) { @cols = ('COUNT(*)'); } if ($args{ 'count-distinct' }) { $unique = 1; } if ($args{ 'count' }) { @cols = 'COUNT(*)'; } my @sql = ( "SELECT" . ($unique ? ' DISTINCT' : ''), INDENT . join(",\n" . INDENT, @cols), "FROM", INDENT . $from_clause, $where_clause, ); if (my $o = $args{ orderby }) { my @ordering = @$o; my @sort; while (my ($col, $dir) = splice( @ordering, 0, 2, () )) { if (exists $vars->{ $col }) { push(@sort, map { "$_ $dir" } $self->variable_columns( $col, $context )); } } if (@sort) { push(@sql, "ORDER BY " . join(', ', @sort)); } } # push(@sql, $self->order_by_clause( $varcols, $level ) ); # push(@sql, $self->limit_clause( $options ) ); my $sql = join("\n", grep {length} @sql); if ($args{ 'count-distinct' }) { $sql = "SELECT COUNT(*) FROM ($sql) AS counttable"; } # warn $sql; return $sql; } sub _get_level { return $_[0]{level}; } sub _next_alias { return $_[0]{next_alias}++; } sub _statements_table { return $_[0]{statement_table}; }; sub _add_from { push( @{ $_[0]{from_tables} }, $_[1] ); } sub _add_where { push( @{ $_[0]{where_clauses} }, $_[1] ); } sub _get_var { return $_[0]{vars}{ $_[1] }; } sub _add_var { $_[0]{vars}{ $_[1] } = $_[2]; } sub _add_restriction { my $context = shift; my $var = shift; my @rests = @_; foreach my $r (@rests) { $context->{restrict}{ $var->name }{ $r }++ } } sub _sql_for_filter { my $self = shift; my $filter = shift; my $ctx_node = shift; my $context = shift; my $expr = $filter->expr; my $pattern = $filter->pattern; my $type = $pattern->type; my $method = "_sql_for_" . lc($type); $self->$method( $pattern, $ctx_node, $context ); $self->_sql_for_expr( $expr, $ctx_node, $context, @_ ); } sub _sql_for_expr { my $self = shift; my $expr = shift; my $ctx_node = shift; my $context = shift; ### None of these should affect the context directly, since the expression ### might be a child of another expression (e.g. "isliteral(?node) || isresource(?node)") if ($expr->isa('RDF::Query::Expression::Function')) { my $func = $expr->uri->uri_value; my @args = $expr->arguments; if ($func eq 'sparql:isliteral' and blessed($args[0]) and $args[0]->isa('RDF::Trine::Node::Variable')) { my $node = $args[0]; _add_restriction( $context, $node, qw(blank resource) ); } elsif ($func =~ qr/^sparql:is[iu]ri$/ and blessed($args[0]) and $args[0]->isa('RDF::Trine::Node::Variable')) { my $node = $args[0]; _add_restriction( $context, $node, qw(blank literal) ); } elsif ($func =~ qr/^sparql:isblank$/ and blessed($args[0]) and $args[0]->isa('RDF::Trine::Node::Variable')) { my $node = $args[0]; _add_restriction( $context, $node, qw(literal resource) ); } elsif ($func eq 'sparql:logical-or') { $self->_sql_for_or_expr( $expr, $ctx_node, $context, @_ ); } else { throw RDF::Trine::Error::CompilationError -text => "Unknown function data: " . Dumper($expr); } } elsif ($expr->isa('RDF::Query::Expression::Binary')) { if ($expr->op eq '==') { $self->_sql_for_equality_expr( $expr, $ctx_node, $context, @_ ); } else { throw RDF::Trine::Error::CompilationError -text => "Unknown expr data: " . Dumper($expr); } } else { throw RDF::Trine::Error::CompilationError -text => "Unknown expr data: " . Dumper($expr); } return; } sub _sql_for_or_expr { my $self = shift; my $expr = shift; my $ctx_node = shift; my $context = shift; my @args = $self->_logical_or_operands( $expr ); my @disj; foreach my $e (@args) { my $tmp_ctx = $self->_new_context; $self->_sql_for_expr( $e, $ctx_node, $tmp_ctx, @_ ); my ($var, $val) = %{ $tmp_ctx->{vars} }; my $existing_col = _get_var( $context, $var ); push(@disj, "${existing_col} = $val"); } my $disj = '(' . join(' OR ', @disj) . ')'; _add_where( $context, $disj ); } sub _logical_or_operands { my $self = shift; my $expr = shift; my @args = $expr->operands; my @ops; foreach my $e (@args) { if ($e->isa('RDF::Query::Expression::Function') and $e->uri->uri_value eq 'sparql:logical-or') { push(@ops, $self->_logical_or_operands( $e )); } else { push(@ops, $e); } } return @ops; } sub _sql_for_equality_expr { my $self = shift; my $expr = shift; my $ctx_node = shift; my $context = shift; my @args = $expr->operands; # make sorted[0] be the variable my @sorted = sort { $b->isa('RDF::Trine::Node::Variable') } @args; unless ($sorted[0]->isa('RDF::Trine::Node::Variable')) { throw RDF::Trine::Error::CompilationError -text => "No variable in equality test"; } unless ($sorted[1]->isa('RDF::Trine::Node') and not($sorted[1]->isa('RDF::Trine::Node::Variable'))) { throw RDF::Trine::Error::CompilationError -text => "No RDFNode in equality test"; } my $name = $sorted[0]->name; my $id = $self->_mysql_node_hash( $sorted[1] ); # $self->_add_sql_node_clause( $id, $sorted[0], $context ); if (my $existing_col = _get_var( $context, $name )) { _add_where( $context, "${existing_col} = $id" ); } else { _add_var( $context, $name, $id ); } } sub _sql_for_triple { &_sql_for_statement; } sub _sql_for_quad { &_sql_for_statement; } { my %default_restrictions = ( subject => ['literal'], predicate => [qw(literal blank)], object => [], context => [], ); sub _sql_for_statement { my $self = shift; my $triple = shift; my $ctx = shift; my $context = shift; my %args = @_; my %restrictions = defined $self->{restrictions} ? %{ $self->{restrictions} } : %default_restrictions; my $quad = $triple->isa('RDF::Trine::Statement::Quad'); no warnings 'uninitialized'; if ($args{semantics} eq 'triple') { $quad = 0; } my @posmap = ($quad) ? qw(subject predicate object context) : qw(subject predicate object); my $table = "s" . _next_alias($context); my $stable = _statements_table($context); my $level = _get_level( $context ); _add_from( $context, "${stable} ${table}" ); foreach my $method (@posmap) { my $node = $triple->$method(); next unless defined($node); my $pos = $method; my $col = "${table}.${pos}"; if ($node->isa('RDF::Trine::Node::Variable')) { _add_restriction( $context, $node, @{ $restrictions{ $method } } ); } $self->_add_sql_node_clause( $col, $node, $context ); } unless ($quad) { if (defined($ctx)) { $self->_add_sql_node_clause( "${table}.Context", $ctx, $context ); } elsif ($self->{join_context_nodes}) { $self->_add_sql_node_clause( "${table}.Context", RDF::Trine::Node::Variable->new( 'sql_ctx_' . ++$self->{ context_variable_count } ), $context ); } } }} sub _add_sql_node_clause { my $self = shift; my $col = shift; my $node = shift; my $context = shift; if ($node->isa('RDF::Trine::Node::Variable')) { my $name = $node->name; if (my $existing_col = _get_var( $context, $name )) { _add_where( $context, "$col = ${existing_col}" ); } else { _add_var( $context, $name, $col ); } } elsif ($node->isa('RDF::Trine::Node::Resource')) { my $uri = $node->uri_value; my $id = $self->_mysql_node_hash( $node ); $id =~ s/\D//; _add_where( $context, "${col} = $id" ); } elsif ($node->isa('RDF::Trine::Node::Blank')) { my $id = $self->_mysql_node_hash( $node ); $id =~ s/\D//; _add_where( $context, "${col} = $id" ); # my $id = $node->blank_identifier; # my $b = "b$level"; # _add_from( $context, "Bnodes $b" ); # _add_where( $context, "${col} = ${b}.ID" ); # _add_where( $context, "${b}.Name = '$id'" ); } elsif ($node->isa('RDF::Trine::Node::Literal')) { my $id = $self->_mysql_node_hash( $node ); $id =~ s/\D//; _add_where( $context, "${col} = $id" ); } elsif ($node->is_nil) { _add_where( $context, "${col} = 0" ); } else { throw RDF::Trine::Error::CompilationError( -text => "Unknown node type: " . Dumper($node) ); } } sub _sql_for_bgp { my $self = shift; my $bgp = shift; my $ctx = shift; my $context = shift; foreach my $triple ($bgp->triples) { $self->_sql_for_triple( $triple, $ctx, $context, @_ ); } } sub _sql_for_ggp { my $self = shift; my $ggp = shift; my $ctx = shift; my $context = shift; my @patterns = $ggp->patterns; throw RDF::Trine::Error::CompilationError -text => "Can't compile an empty GroupGraphPattern to SQL" unless (scalar(@patterns));; foreach my $p (@patterns) { my $type = $p->type; my $method = "_sql_for_" . lc($type); $self->$method( $p, $ctx, $context, @_ ); } } =item C<< _mysql_hash ( $data ) >> Returns a hash value for the supplied C<$data> string. This value is computed using the same algorithm that Redland's mysql storage backend uses. =cut sub _mysql_hash; sub _mysql_hash_pp { my $data = encode('utf8', shift); my @data = unpack('C*', md5( $data )); my $sum = Math::BigInt->new('0'); foreach my $count (0 .. 7) { my $data = Math::BigInt->new( $data[ $count ] ); #shift(@data); my $part = $data << (8 * $count); # warn "+ $part\n"; $sum += $part; } # warn "= $sum\n"; $sum =~ s/\D//; # get rid of the extraneous '+' that pops up under perl 5.6 return $sum; } BEGIN { ## no critic eval "use RDF::Trine::XS;"; no strict 'refs'; *{ '_mysql_hash' } = (RDF::Trine::XS->can('hash')) ? \&RDF::Trine::XS::hash : \&_mysql_hash_pp; ## use critic } =item C<< _mysql_node_hash ( $node ) >> Returns a hash value (computed by C<_mysql_hash> for the supplied C<$node>. The hash value is based on the string value of the node and the node type. =cut sub _mysql_node_hash { my $self = shift; my $node = shift; # my @node = @$node; # my ($type, $value) = splice(@node, 0, 2, ()); return 0 unless (blessed($node)); return 0 if ($node->is_nil); my $data; if ($node->isa('RDF::Trine::Node::Resource')) { my $value = $node->uri_value; $data = 'R' . $value; } elsif ($node->isa('RDF::Trine::Node::Blank')) { my $value = $node->blank_identifier; $data = 'B' . $value; } elsif ($node->isa('RDF::Trine::Node::Literal')) { my $value = $node->literal_value; unless (defined($value)) { $value = ''; } my $lang = $node->literal_value_language || ''; my $dt = $node->literal_datatype || ''; no warnings 'uninitialized'; $data = sprintf("L%s<%s>%s", $value, $lang, $dt); # warn "($data)"; } else { return; } my $hash; $hash = _mysql_hash( $data ); return $hash; } =item C<< statements_table >> Returns the name of the Statements table. =cut sub statements_table { my $self = shift; my $model = $self->model_name; my $id = _mysql_hash( $model ); my $prefix = $self->{statements_table_prefix}; return join('', $prefix, $id); } =item C<< statements_prefix >> Returns the prefix for the underlying Statements database table. =cut sub statements_prefix { my $self = shift; return $self->{ statements_table_prefix }; } =item C<< set_statements_prefix ( $prefix ) >> Sets the prefix for the underlying Statements database table. =cut sub set_statements_prefix { my $self = shift; my $prefix = shift; $self->{ statements_table_prefix } = $prefix; } =item C<< model_name >> Returns the name of the underlying model. =cut sub model_name { my $self = shift; # Carp::confess unless (blessed($self)); return $self->{model_name}; } =item C<< make_private_predicate_view ( $prefix, @preds ) >> =cut sub make_private_predicate_view { my $self = shift; my $prefix = shift; my @preds = @_; my $oldtable = $self->statements_table; my $oldpre = $self->statements_prefix; my $model = $self->model_name; my $id = _mysql_hash( $model ); my $stable = join('', $prefix, $oldpre, $id); my $predlist = join(', ', map { $self->_mysql_node_hash( $_ ) } (@preds)); my $sql = "CREATE VIEW ${stable} AS SELECT * FROM ${oldtable} WHERE Predicate NOT IN (${predlist})"; my $dbh = $self->dbh; $dbh->do( $sql ); return $stable; } =item C<< dbh >> Returns the underlying DBI database handle. =cut sub dbh { my $self = shift; if (my $conn = $self->{conn}) { return $conn->dbh; } else { my $dbh = $self->{dbh}; return $dbh; } } sub _debug { my $self = shift; my $dbh = $self->{dbh}; my $name = $self->model_name; my $id = _mysql_hash( $name ); my $table = 'Statements' . $id; my $sth = $dbh->prepare( "SELECT * FROM $table" ); $sth->execute; my $count = 1; while (my $h = $sth->fetchrow_hashref) { my ($s,$p,$o,$g) = @{ $h }{ qw(Subject Predicate Object Context) }; warn sprintf("[%5d] subj=%-20d pred=%-20d obj=%-20d context=%-20d\n", $count++, $s, $p, $o, $g ); } } =item C<< init >> Creates the necessary tables in the underlying database. =cut sub init { my $self = shift; my $dbh = $self->dbh; my $name = $self->model_name; my $id = _mysql_hash( $name ); my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); unless ($self->_table_exists("Literals")) { $dbh->begin_work; $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE Literals ( ID NUMERIC(20) PRIMARY KEY, Value text NOT NULL, Language text NOT NULL DEFAULT '', Datatype text NOT NULL DEFAULT '' ); END $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE Resources ( ID NUMERIC(20) PRIMARY KEY, URI text NOT NULL ); END $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE Bnodes ( ID NUMERIC(20) PRIMARY KEY, Name text NOT NULL ); END $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE Models ( ID NUMERIC(20) PRIMARY KEY, Name text NOT NULL ); END $dbh->commit or warn $dbh->errstr; } unless ($self->_table_exists("Statements${id}")) { $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); return }; CREATE TABLE Statements${id} ( Subject NUMERIC(20) NOT NULL, Predicate NUMERIC(20) NOT NULL, Object NUMERIC(20) NOT NULL, Context NUMERIC(20) NOT NULL DEFAULT 0, PRIMARY KEY (Subject, Predicate, Object, Context) ); END # $dbh->do( "DELETE FROM Models WHERE ID = ${id}") || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; $dbh->do( "INSERT INTO Models (ID, Name) VALUES (${id}, ?)", undef, $name ); } } sub _table_exists { my $self = shift; my $name = shift; my $dbh = $self->dbh; my $type = 'TABLE'; my $sth = $dbh->table_info(undef, undef, $name, 'TABLE'); my $row = $sth->fetchrow_hashref; return ref($row) ? 1 : 0; } sub _cleanup { my $self = shift; if (my $dbh = $self->dbh) { my $name = $self->{model_name}; my $id = _mysql_hash( $name ); if ($self->{ remove_store }) { $dbh->do( "DROP TABLE `Statements${id}`;" ); $dbh->do( "DELETE FROM Models WHERE Name = ?", undef, $name ); } } } sub _begin_bulk_ops { my $self = shift; my $dbh = $self->dbh; $dbh->{AutoCommit} = 0; } sub _end_bulk_ops { my $self = shift; my $dbh = $self->dbh; unless ($dbh->{AutoCommit}) { $dbh->commit; } $dbh->{AutoCommit} = 1; } sub DESTROY { my $self = shift; our $IGNORE_CLEANUP; if ($IGNORE_CLEANUP) { $self->dbh->{InactiveDestroy} = 1; } else { $self->_cleanup; } } 1; # Magic true value required at end of module __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut DROP TABLE Bnodes; DROP TABLE Literals; DROP TABLE Models; DROP TABLE Resources; DROP TABLE Statements15799945864759145248; CREATE TABLE Literals ( ID bigint unsigned PRIMARY KEY, Value longtext NOT NULL, Language text NOT NULL, Datatype text NOT NULL ); CREATE TABLE Resources ( ID bigint unsigned PRIMARY KEY, URI text NOT NULL ); CREATE TABLE Bnodes ( ID bigint unsigned PRIMARY KEY, Name text NOT NULL ); CREATE TABLE Models ( ID bigint unsigned PRIMARY KEY, Name text NOT NULL ); CREATE TABLE Statements15799945864759145248 ( Subject bigint unsigned NOT NULL, Predicate bigint unsigned NOT NULL, Object bigint unsigned NOT NULL, Context bigint unsigned NOT NULL ); INSERT INTO Models (ID,Name) VALUES (15799945864759145248, "model"); RDF-Trine-1.007/lib/RDF/Trine/Store/Dydra.pm000644 000765 000024 00000030015 12171744402 020242 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::Dydra - RDF Store proxy for a Dydra endpoint =head1 VERSION This document describes RDF::Trine::Store::Dydra version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::Dydra; =head1 DESCRIPTION RDF::Trine::Store::Dydra provides a RDF::Trine::Store API to interact with a remote Dydra endpoint. =cut package RDF::Trine::Store::Dydra; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store::SPARQL); use URI::Escape; use Data::Dumper; use List::Util qw(first); use Scalar::Util qw(refaddr reftype blessed); use HTTP::Request::Common (); use JSON; use RDF::Trine::Error qw(:try); ###################################################################### my @pos_names; our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; @pos_names = qw(subject predicate object context); } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new ( $user, $repo, $token ) >> Returns a new storage object that will act as a proxy for the Dydra endpoint for the $repo repository of $user, using the given API $token. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. The following key must also be used: =over =item C The Dydra username. =item C The Dydra API token. =item C The Dydra repository name. =back =cut sub new { my $class = shift; my $user = shift; my $repo = shift; my $token = shift; my $ua = RDF::Trine->default_useragent->clone; my $accept = join(',', "application/sparql-results+json", "application/rdf+xml;q=0.5", "application/x-turtle;q=0.7", "application/json;q=0.4", "text/turtle;q=0.7", "text/xml;q=0.1" ); $ua->default_headers->push_header( 'Accept' => $accept ); $ua->credentials("dydra.com:80", "Application", $token, "X"); $ua->credentials("dydra.com", "Application", $token, "X"); my $base = "http://dydra.com:80"; my $url = "${base}/${user}/${repo}/sparql"; my $self = bless({ ua => $ua, base => $base, url => $url, user => $user, repo => $repo, token => $token, }, $class); # check if this repo already exists, otherwise create it $self->_create_repo( $user, $repo ); return $self; } =item C<< base >> Returns the service base URI ("http://dydra.com:80" by default). =cut sub base { my $self = shift; return $self->{base}; } sub _create_repo { my $self = shift; my $user = shift; my $repo = shift; my $ua = $self->{ua}; my $base = $self->base; my $repourl = "${base}/${user}/repositories"; my $req = HTTP::Request->new(GET => $repourl); $req->header(Accept => "application/json"); $req->header(Host => "dydra.com"); $req->authorization_basic($self->{token}) if (defined $self->{token}); my $resp = $ua->request( $req ); if ($resp->is_success) { my $data = from_json($resp->content); my %repos; foreach my $r (@$data) { $repos{ $r->{name} } = $r; } unless ($repos{ $repo }) { my $req = HTTP::Request::Common::POST( $repourl, [ 'repository[name]' => $repo, ] ); $req->authorization_basic($self->{token}) if (defined $self->{token}); $req->header(Accept => "application/json"); my $resp = $ua->request( $req ); if ($resp->is_success) { # OK } else { my $status = $resp->status_line; warn Dumper($resp); throw RDF::Trine::Error::DatabaseError -text => "Error making remote REST call attempting to create repository '$repo' ($status)"; } } } else { my $status = $resp->status_line; warn Dumper($resp); throw RDF::Trine::Error::DatabaseError -text => "Error making remote REST call in new ($status)"; } } sub _new_with_string { my $class = shift; my $config = shift; return $class->new( $config ); } =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. =cut sub new_with_config { my $proto = shift; my $config = shift; $config->{storetype} = 'Dydra'; return $proto->SUPER::new_with_config( $config ); } sub _new_with_config { my $class = shift; my $config = shift; return $class->new( @{ $config }{qw(user repo token)} ); } sub _config_meta { return { required_keys => [qw(user repo token)], fields => { user => { description => 'Dydra username', type => 'string' }, repo => { description => 'Dydra repository name', type => 'string' }, token => { description => 'Dydra API token', type => 'string' }, } } } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to add_statement"; } if ($st->isa('RDF::Trine::Statement::Quad') and blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "add_statement cannot be called with both a quad and a context"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_add_statements', $st, $context]); } else { my $s = RDF::Trine::Serializer::NTriples->new(); my $ua = $self->{ua}; my $user = $self->{user}; my $repo = $self->{repo}; my $base = $self->base; my $url = "${base}/${user}/${repo}/statements"; if ($st->isa('RDF::Trine::Statement::Quad') or $context) { my $g = $context || $st->context; $url .= '?context=' . uri_escape($g->uri_value); } my $req = HTTP::Request->new(POST => $url); $req->authorization_basic($self->{token}) if (defined $self->{token}); $req->content_type('text/plain'); $req->content($s->statement_as_string($st)); warn "add_statement request: " . Dumper($req); my $resp = $ua->request( $req ); if ($resp->is_success) { return; } else { my $status = $resp->status_line; warn Dumper($resp); throw RDF::Trine::Error::DatabaseError -text => "Error making remote REST call in add_statement ($status)"; } } return; } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to remove_statement"; } if ($st->isa('RDF::Trine::Statement::Quad') and blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "remove_statement cannot be called with both a quad and a context"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_remove_statements', $st, $context]); } else { my $s = RDF::Trine::Serializer::NTriples->new(); my $ua = $self->{ua}; my $user = $self->{user}; my $repo = $self->{repo}; my $base = $self->base; my $data = $s->statement_as_string($st); if ($st->isa('RDF::Trine::Statement::Quad') or $context) { my $g = $context || $st->context; my $uri = $g->uri_value; $data = "GRAPH <$uri> { $data }"; } my $sparql = "DELETE DATA { $data }"; my $url = "${base}/${user}/${repo}/sparql"; my $req = HTTP::Request::Common::POST( $url, [ query => $sparql ] ); $req->authorization_basic($self->{token}) if (defined $self->{token}); my $resp = $ua->request( $req ); warn 'remove_statement: ' . Dumper($req, $resp); if ($resp->is_success) { return; } else { my $status = $resp->status_line; warn Dumper($resp); throw RDF::Trine::Error::DatabaseError -text => "Error making remote REST call in remove_statement ($status)" . Dumper($st); } } return; } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to remove_statements"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_remove_statement_patterns', $st, $context]); } else { warn "do DELETE for remove_statements"; throw RDF::Trine::Error::UnimplementedError -text => "remove_statements not implemented for Dydra stores yet"; } return; } =item C<< count_statements ( $subject, $predicate, $object, $context ) >> Returns a count of all the statements matching the specified subject, predicate, object, and context. Any of the arguments may be undef to match any value. =cut =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { my $self = shift; my %features = map { $_ => 1 } ( 'http://www.w3.org/ns/sparql-service-description#SPARQL10Query', 'http://www.w3.org/ns/sparql-service-description#SPARQL11Query', ); if (@_) { my $f = shift; return $features{ $f }; } else { return keys %features; } } =item C<< get_sparql ( $sparql ) >> Returns an iterator object of all bindings matching the specified SPARQL query. =cut sub get_sparql { my $self = shift; my $sparql = shift; my $ua = $self->{ua}; my $urlchar = ($self->{url} =~ /\?/ ? '&' : '?'); my $url = $self->{url} . $urlchar . 'query=' . uri_escape($sparql); my $response = $ua->get( $url ); if ($response->is_success) { my $content = $response->content; my $iter = RDF::Trine::Iterator->from_json( $content ); return $iter; } else { my $status = $response->status_line; my $endpoint = $self->{url}; warn Dumper($response); throw RDF::Trine::Error::DatabaseError -text => "Error making remote SPARQL call to endpoint $endpoint ($status)"; } } =item C<< size >> Returns the number of statements in the store. =cut sub size { my $self = shift; my $ua = $self->{ua}; my $user = $self->{user}; my $repo = $self->{repo}; my $base = $self->base; my $url = "${base}/${user}/${repo}/size"; my $req = HTTP::Request->new(GET => $url); $req->authorization_basic($self->{token}) if (defined $self->{token}); $req->header(Accept => 'text/plain'); my $resp = $ua->request( $req ); if ($resp->is_success) { warn 'size(): ' . Dumper($req, $resp); return 0+$resp->content; } else { my $status = $resp->status_line; warn 'size() failed: ' . Dumper($resp); throw RDF::Trine::Error::DatabaseError -text => "Error making remote REST call in size ($status)"; } } sub _end_bulk_ops { my $self = shift; if (scalar(@{ $self->{ ops } || []})) { my @ops = splice(@{ $self->{ ops } }); my @aggops = $self->_group_bulk_ops( @ops ); my @sparql; warn '_end_bulk_ops: ' . Dumper(\@aggops); throw RDF::Trine::Error::UnimplementedError -text => "bulk operations not implemented for Dydra stores yet"; } $self->{BulkOps} = 0; } =item C<< nuke >> Permanently removes the store and its data. =cut sub nuke { my $self = shift; my $ua = $self->{ua}; my $user = $self->{user}; my $repo = $self->{repo}; my $base = $self->base; my $url = "${base}/${user}/${repo}"; my $req = HTTP::Request->new(DELETE => $url); $req->authorization_basic($self->{token}) if (defined $self->{token}); my $resp = $ua->request( $req ); if ($resp->is_success) { return; } else { my $status = $resp->status_line; warn 'nuke failed: ' . Dumper($resp); throw RDF::Trine::Error::DatabaseError -text => "Error making remote REST call in remove_statement ($status)"; } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/Hexastore.pm000644 000765 000024 00000055462 12171744402 021156 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::Hexastore - RDF store implemented with the hexastore index =head1 VERSION This document describes RDF::Trine::Store::Hexastore version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::Hexastore; =head1 DESCRIPTION RDF::Trine::Store::Hexastore provides an in-memory triple-store based on six-way indexing as popularized by Hexastore. =cut package RDF::Trine::Store::Hexastore; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store); use Data::Dumper; use RDF::Trine qw(iri); use RDF::Trine::Error; use List::Util qw(first); use Scalar::Util qw(refaddr reftype blessed); use Storable qw(nstore retrieve); use Carp qw(croak); use Time::HiRes qw ( time ); use constant NODES => qw(subject predicate object); use constant NODEMAP => { subject => 0, predicate => 1, object => 2, context => 3 }; use constant OTHERNODES => { subject => [qw(predicate object)], predicate => [qw(subject object)], object => [qw(subject predicate)], }; ###################################################################### our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; } ###################################################################### sub _config_meta { return { required_keys => [], fields => {}, } } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new () >> Returns a new storage object. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. This module also supports initializing the store from a file or URL, in which case, a C key may be used. This holds an arrayref of hashrefs. To load a file, you may give the file name with a C key in the hashref, and to load a URL, use C. See example below. Furthermore, the following keys may be used: =over =item C The syntax of the parsed file or URL. =item C The base URI to be used for a parsed file. =back The following example initializes a Hexastore store based on a local file and a remote URL: my $store = RDF::Trine::Store->new_with_config( {storetype => 'Hexastore', sources => [ { file => 'test-23.ttl', syntax => 'turtle', }, { url => 'http://www.kjetil.kjernsmo.net/foaf', syntax => 'rdfxml', } ]}); =cut sub new { my $class = shift; my $self = bless({}, $class); $self->nuke; # nuke resets the store, thus doing the same thing as init should do return $self; } sub _new_with_string { my ($self, $config) = @_; my ($filename) = $config =~ m/file=(.+)$/; # TODO: It has a Storable part too, for later use. return $self->load($filename); } # TODO: Refactor, almost identical to Memory sub _new_with_config { my $class = shift; my $config = shift; my @sources = @{ $config->{sources} || [] }; my $self = $class->new(); foreach my $source (@sources) { my %args; if (my $g = $source->{graph}) { $args{context} = (blessed($g) ? $g : iri($g)); } if ($source->{url}) { my $parser = RDF::Trine::Parser->new($source->{syntax}); my $model = RDF::Trine::Model->new( $self ); $parser->parse_url_into_model( $source->{url}, $model, %args ); } elsif ($source->{file}) { open(my $fh, "<:encoding(UTF-8)", $source->{file}) || throw RDF::Trine::Error -text => "Couldn't open file $source->{file}"; my $parser = RDF::Trine::Parser->new($source->{syntax}); my $model = RDF::Trine::Model->new( $self ); $parser->parse_file_into_model( $source->{base_uri}, $source->{file}, $model, %args ); } else { throw RDF::Trine::Error::MethodInvocationError -text => "$class needs a url or file argument"; } } return $self; } =item C<< store ( $filename ) >> Write the triples data to a file specified by C<< $filename >>. This data may be read back in with the C<< load >> method. =cut sub store { my $self = shift; my $fname = shift; nstore( $self, $fname ); } =item C<< load ( $filename ) >> Returns a new Hexastore object with triples data from the specified file. =cut sub load { my $class = shift; my $fname = shift; return retrieve($fname); } =item C<< temporary_store >> Returns a temporary (empty) triple store. =cut sub temporary_store { my $class = shift; return $class->new(); } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @nodes = splice(@_, 0, 3); my $context = shift; my %args = @_; my @orderby = (ref($args{orderby})) ? @{$args{orderby}} : (); my $defined = 0; my %variable_map; foreach my $i (0 .. 2) { my $node = $nodes[ $i ]; my $pos = (NODES)[ $i ]; $defined++ if (defined($node) and not($node->isa('RDF::Trine::Node::Variable'))); if (blessed($node) and $node->isa('RDF::Trine::Node::Variable')) { $variable_map{ $node->name } = $pos; } } my @ids = map { $self->_node2id( $_ ) } @nodes; my @names = NODES; my @keys = map { $names[$_], $ids[$_] } (0 .. $#names); if ($defined == 3) { my $index = $self->_index_from_pair( $self->_index_root, @keys[ 0,1 ] ); my $list = $self->_index_from_pair( $index, @keys[ 2,3 ] ); if ($self->_page_contains_node( $list, $ids[2] )) { return RDF::Trine::Iterator::Graph->new( [ RDF::Trine::Statement->new( @nodes ) ] ); } else { return RDF::Trine::Iterator::Graph->new( [] ); } } elsif ($defined == 2) { my @dkeys; my $ukey; foreach my $i (0 .. 2) { if (defined($nodes[ $i ]) and not($nodes[ $i ]->isa('RDF::Trine::Node::Variable'))) { push( @dkeys, $names[$i] ); } else { $ukey = $names[$i]; } } @keys = map { $_ => $self->_node2id( $nodes[ NODEMAP->{ $_ } ] ) } @dkeys; my $index = $self->_index_from_pair( $self->_index_root, @keys[ 0,1 ] ); my $list = $self->_index_from_pair( $index, @keys[ 2,3 ] ); my @local_list = $self->_node_values( $list ); my $sub = sub { return unless (scalar(@local_list)); my $id = shift(@local_list); my %data = map { $_ => $nodes[ NODEMAP->{ $_ } ] } @dkeys; $data{ $ukey } = $self->_id2node( $id ); my $st = RDF::Trine::Statement->new( @data{qw(subject predicate object)} ); return $st; }; return RDF::Trine::Iterator::Graph->new( $sub ); } elsif ($defined == 1) { my $dkey; my @ukeys; my $uvar; my $check_dup = 0; foreach my $i (0 .. 2) { if (defined($nodes[ $i ]) and not($nodes[ $i ]->isa('RDF::Trine::Node::Variable'))) { $dkey = $names[$i]; } else { if (blessed($nodes[ $i ]) and $nodes[ $i ]->isa('RDF::Trine::Node::Variable')) { if (defined($uvar)) { if ($uvar eq $nodes[ $i ]->name) { $check_dup = 1; } } else { $uvar = $nodes[ $i ]->name; } } push( @ukeys, $names[$i] ); } } @keys = ($dkey => $self->_node2id( $nodes[ NODEMAP->{ $dkey } ] )); my $rev = 0; if (@orderby) { $rev = 1 if ($orderby[1] eq 'DESC'); my $sortkey = $variable_map{ $orderby[0] }; if ($sortkey ne $ukeys[0]) { @ukeys = reverse(@ukeys); } } my $index = $self->_index_from_pair( $self->_index_root, @keys ); my $ukeys1 = $self->_index_values_from_key( $index, $ukeys[0] ); my @ukeys1 = $self->_index_values( $ukeys1, $rev ); my @local_list; my $ukey1; my $sub = sub { while (0 == scalar(@local_list)) { return unless (scalar(@ukeys1)); $ukey1 = shift(@ukeys1); # warn '>>>>>>>>> ' . Dumper( $ukeys[0], $ukey1, $data ); my $list = $self->_index_from_pair( $index, $ukeys[0], $ukey1 ); @local_list = $self->_node_values( $list ); if ($check_dup) { @local_list = grep { $_ == $ukey1 } @local_list; } } my $id = shift(@local_list); my %data = ($dkey => $nodes[ NODEMAP->{ $dkey } ]); @data{ @ukeys } = map { $self->_id2node( $_ ) } ($ukey1, $id); my $st = RDF::Trine::Statement->new( @data{qw(subject predicate object)} ); return $st; }; return RDF::Trine::Iterator::Graph->new( $sub ); } else { my $dup_pos; my $dup_var; my %dup_counts; my %dup_var_pos; my $max = 0; foreach my $i (0 .. 2) { if (blessed($nodes[ $i ]) and $nodes[ $i ]->isa('RDF::Trine::Node::Variable')) { my $name = $nodes[ $i ]->name; push( @{ $dup_var_pos{ $name } }, $names[ $i ] ); if (++$dup_counts{ $name } > $max) { $max = $dup_counts{ $name }; $dup_pos = $names[ $i ]; $dup_var = $name; } } } # warn Dumper($dup_pos, $dup_var, $max, \%dup_var_pos); my $rev = 0; my (@order_keys, $final_key); if (@orderby) { $rev = 1 if ($orderby[1] eq 'DESC'); my $sortkey = $variable_map{ $orderby[0] }; my @nodes = ($sortkey, grep { $_ ne $sortkey } NODES); @order_keys = @nodes[0,1]; $final_key = $nodes[2]; } else { $final_key = 'object'; @order_keys = qw(subject predicate); } if ($max > 1) { @order_keys = @{ $dup_var_pos{ $dup_var } }; my %order_keys = map { $_ => 1 } @order_keys; if (3 == scalar(@order_keys)) { $final_key = pop(@order_keys); } else { $final_key = first { not($order_keys{ $_ }) } @names; } } my $subj = $self->_index_values_from_key( $self->_index_root, $order_keys[0] ); my @skeys = $self->_index_values( $subj, $rev ); my ($sid, $pid); my @pkeys; my @local_list; my $sub = sub { while (0 == scalar(@local_list)) { # no more objects. go to next predicate. while (0 == scalar(@pkeys)) { # no more predicates. go to next subject. return unless (scalar(@skeys)); $sid = shift(@skeys); # warn "*** using subject $sid\n"; @pkeys = sort { $a <=> $b } keys %{ $subj->{ $sid }{ $order_keys[1] } }; if ($max >= 2) { @pkeys = grep { $_ == $sid } @pkeys; } } $pid = shift(@pkeys); # warn "*** using predicate $pid\n"; my $index = $self->_index_from_pair( $subj, $sid, $order_keys[1] ); my $list = $self->_node_list_from_id( $index, $pid ); @local_list = $self->_node_values( $list ); if ($max == 3) { @local_list = grep { $_ == $pid } @local_list; } # warn "---> object list: [" . join(', ', @local_list) . "]\n"; } my $id = shift(@local_list); my %data = ( $order_keys[0] => $sid, $order_keys[1] => $pid, $final_key => $id, ); my @nodes = map { $self->_id2node( $_ ) } (@data{qw(subject predicate object)}); my $st = RDF::Trine::Statement->new( @nodes ); return $st; }; return RDF::Trine::Iterator::Graph->new( $sub ); } } =item C<< get_pattern ( $bgp [, $context] ) >> Returns a stream object of all bindings matching the specified graph pattern. =cut sub get_pattern { my $self = shift; my $bgp = shift; if ($bgp->isa('RDF::Trine::Pattern')) { $bgp = $bgp->sort_for_join_variables(); } my @triples = $bgp->triples; if (2 == scalar(@triples)) { my ($t1, $t2) = @triples; my @v1 = $t1->referenced_variables; my %v1 = map { $_ => 1 } @v1; my @v2 = $t2->referenced_variables; my @shared = grep { exists($v1{$_}) } @v2; if (@shared) { # warn 'there is a shared variable -- we can use a merge-join'; # there is a shared variable -- we can use a merge-join my $shrkey = $shared[0]; # warn "- $shrkey\n"; # warn $t2->as_string; my $i1 = $self->SUPER::_get_pattern( RDF::Trine::Pattern->new( $t1 ), undef, orderby => [ $shrkey => 'ASC' ] ); my $i2 = $self->SUPER::_get_pattern( RDF::Trine::Pattern->new( $t2 ), undef, orderby => [ $shrkey => 'ASC' ] ); my $i1current = $i1->next; my $i2current = $i2->next; my @results; while (defined($i1current) and defined($i2current)) { my $i1cur = $i1current->{ $shrkey }; my $i2cur = $i2current->{ $shrkey }; if ($i1current->{ $shrkey }->equal( $i2current->{ $shrkey } )) { my @matching_i2_rows; my $match_value = $i1current->{ $shrkey }; while ($match_value->equal( $i2current->{ $shrkey } )) { push( @matching_i2_rows, $i2current ); unless ($i2current = $i2->next) { # warn "no more from i2"; last; } } while ($match_value->equal( $i1current->{ $shrkey } )) { foreach my $i2_row (@matching_i2_rows) { my $new = $self->_join( $i1current, $i2_row ); push( @results, $new ); } unless ($i1current = $i1->next) { # warn "no more from i1"; last; } } } elsif ($i1current->{ $shrkey }->compare( $i2current->{ $shrkey } ) == -1) { my $i1v = $i1current->{ $shrkey }; my $i2v = $i2current->{ $shrkey }; # warn "keys don't match: $i1v <=> $i2v\n"; $i1current = $i1->next; } else { # ($i1current->{ $shrkey } > $i2current->{ $shrkey }) my $i1v = $i1current->{ $shrkey }; my $i2v = $i2current->{ $shrkey }; # warn "keys don't match: $i1v <=> $i2v\n"; $i2current = $i2->next; } } return RDF::Trine::Iterator::Bindings->new( \@results, [ $bgp->referenced_variables ] ); } else { # warn 'no shared variable -- cartesian product'; # no shared variable -- cartesian product my $i1 = $self->SUPER::_get_pattern( RDF::Trine::Pattern->new( $t1 ) ); my $i2 = $self->SUPER::_get_pattern( RDF::Trine::Pattern->new( $t2 ) ); my @i1; while (my $row = $i1->next) { push(@i1, $row); } my @results; while (my $row2 = $i2->next) { foreach my $row1 (@i1) { push(@results, { %$row1, %$row2 }); } } return RDF::Trine::Iterator::Bindings->new( \@results, [ $bgp->referenced_variables ] ); } } else { return $self->SUPER::_get_pattern( $bgp ); } } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { return; } sub _join { my $self = shift; my $rowa = shift; my $rowb = shift; my %keysa; my @keysa = keys %$rowa; @keysa{ @keysa } = (1) x scalar(@keysa); my @shared = grep { exists $keysa{ $_ } } (keys %$rowb); foreach my $key (@shared) { my $val_a = $rowa->{ $key }; my $val_b = $rowb->{ $key }; next unless (defined($val_a) and defined($val_b)); my $equal = $val_a->equal( $val_b ); unless ($equal) { return; } } my $row = { (map { $_ => $rowa->{$_} } grep { defined($rowa->{$_}) } keys %$rowa), (map { $_ => $rowb->{$_} } grep { defined($rowb->{$_}) } keys %$rowb) }; return $row; } =item C<< get_contexts >> =cut sub get_contexts { croak "Contexts not supported for the Hexastore store"; } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $st = shift; my $added = 0; foreach my $first (NODES) { my $firstnode = $st->$first(); my $id1 = $self->_node2id( $firstnode ); my @others = @{ OTHERNODES->{ $first } }; my @orders = ([@others], [reverse @others]); foreach my $order (@orders) { my ($second, $third) = @$order; my ($id2, $id3) = map { $self->_node2id( $st->$_() ) } ($second, $third); my $list = $self->_get_terminal_list( $first => $id1, $second => $id2 ); if ($self->_add_node_to_page( $list, $id3 )) { $added++; } } } if ($added) { $self->{ size }++; $self->{etag} = time; } } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $st = shift; my @ids = map { $self->_node2id( $st->$_() ) } NODES; # warn "*** removing statement @ids\n"; my $removed = 0; foreach my $first (NODES) { my $firstnode = $st->$first(); my $id1 = $self->_node2id( $firstnode ); my @others = @{ OTHERNODES->{ $first } }; my @orders = ([@others], [reverse @others]); foreach my $order (@orders) { my ($second, $third) = @$order; my ($id2, $id3) = map { $self->_node2id( $st->$_() ) } ($second, $third); my $list = $self->_get_terminal_list( $first => $id1, $second => $id2 ); if ($self->_remove_node_from_page( $list, $id3 )) { $removed++; } # warn "removing $first-$second-$third $id1-$id2-$id3 from list [" . join(', ', @$list) . "]\n"; # warn "\t- remaining: [" . join(', ', @$list) . "]\n"; } } if ($removed) { $self->{ size }--; $self->{etag} = time; } } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =item C<< etag >> Returns an Etag suitable for use in an HTTP Header. =cut sub etag { return $_[0]->{etag}; } =item C<< nuke >> Permanently removes all the data in the store. =cut sub nuke { my $self = shift; $self->{data} = $self->_new_index_page; $self->{node2id} = {}; $self->{id2node} = {}; $self->{next_id} = 1; $self->{size} = 0; $self->{etag} = time; return $self; } =item C<< count_statements ($subject, $predicate, $object) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my @nodes = @_; my @ids = map { $self->_node2id( $_ ) } @nodes; my @names = NODES; my @keys = map { $names[$_], $ids[$_] } (0 .. $#names); my @dkeys; my @ukeys; foreach my $i (0 .. 2) { if (defined($nodes[ $i ])) { push( @dkeys, $names[$i] ); } else { push( @ukeys, $names[$i] ); } } @keys = map { $_ => $self->_node2id( $nodes[ NODEMAP->{ $_ } ] ) } @dkeys; if (0 == scalar(@keys)) { return $self->{ size }; } elsif (2 == scalar(@keys)) { my $index = $self->_index_from_pair( $self->_index_root, @keys ); return $self->_count_statements( $index, @ukeys ); } elsif (4 == scalar(@keys)) { my $index = $self->_index_from_pair( $self->_index_root, @keys[ 0,1 ] ); my $list = $self->_index_from_pair( $index, @keys[ 2,3 ] ); return $self->_node_count( $list ); } else { my $index = $self->_index_from_pair( $self->_index_root, @keys[ 0,1 ] ); my $list = $self->_index_from_pair( $index, @keys[ 2,3 ] ); return ($self->_page_contains_node( $list, $keys[5] )) ? 1 : 0; } } sub _count_statements { my $self = shift; my $data = shift; my @ukeys = @_; if (1 >= scalar(@ukeys)) { return $self->_node_count( $data ); } else { my $count = 0; my $ukey = shift(@ukeys); my $data = $data->{ $ukey }; foreach my $k (keys %$data) { $count += $self->_count_statements( $data->{ $k }, @ukeys ); } return $count; } } sub _node2id { my $self = shift; my $node = shift; return unless (blessed($node)); return if ($node->isa('RDF::Trine::Node::Variable')); if (exists( $self->{ node2id }{ $node->as_string } )) { return $self->{ node2id }{ $node->as_string }; } else { my $id = ($self->{ node2id }{ $node->as_string } = $self->{ next_id }++); $self->{ id2node }{ $id } = $node; return $id } } sub _id2node { my $self = shift; my $id = shift; if (exists( $self->{ id2node }{ $id } )) { return $self->{ id2node }{ $id }; } else { return; } } sub _seen_nodes { my $self = shift; return values %{ $self->{ id2node } }; } ################################################################################ ### The methods below are the only ones that directly access and manipulate the ### index structure. The terminal node lists, however, are manipulated by other ### methods (add_statement, remove_statement, etc.). sub _index_root { my $self = shift; return $self->{'data'}; } sub _get_terminal_list { my $self = shift; my $first = shift; my $id1 = shift; my $second = shift; my $id2 = shift; my $index = $self->_index_from_pair( $self->_index_root, $first, $id1 ); my $page = $self->_index_from_pair( $index, $second, $id2 ); if (ref($page)) { return $page; } else { my ($k1, $k2) = sort { $a->[0] cmp $b->[0] } ([$first, $id1], [$second, $id2]); my $index = $self->_index_from_pair( $self->_index_root, $k1->[0], $k1->[1] ); unless ($index) { $index = $self->_add_index_page( $self->_index_root, $k1->[0], $k1->[1] ); } my $list = $self->_index_from_pair( $index, $k2->[0], $k2->[1] ); unless ($list) { $list = $self->_add_list_page( $index, $k2->[0], $k2->[1] ); } ### my $index2 = $self->_index_from_pair( $self->_index_root, $k2->[0], $k2->[1] ); unless ($index2) { $index2 = $self->_add_index_page( $self->_index_root, $k2->[0], $k2->[1] ); } $self->_add_list_page( $index2, $k1->[0], $k1->[1], $list ); return $list; } } ######################################### ######################################### ######################################### sub _add_list_page { my $self = shift; my $index = shift; my $key = shift; my $value = shift; my $list = shift || $self->_new_list_page; $index->{ $key }{ $value } = $list; } sub _add_index_page { my $self = shift; my $index = shift; my $key = shift; my $value = shift; $index->{ $key }{ $value } = $self->_new_index_page; } sub _index_from_pair { my $self = shift; my $index = shift; my $key = shift; my $val = shift; return $index->{ $key }{ $val }; } sub _node_list_from_id { my $self = shift; my $index = shift; my $id = shift; return $index->{ $id }; } sub _index_values_from_key { my $self = shift; my $index = shift; my $key = shift; return $index->{ $key }; } sub _index_values { my $self = shift; my $index = shift; my $rev = shift; if ($rev) { my @values = sort { $b <=> $a } keys %$index; return @values; } else { my @values = sort { $a <=> $b } keys %$index; return @values; } } ######################################### ######################################### ######################################### sub _node_count { my $self = shift; my $list = shift; return scalar(@{ $list || [] }); } sub _node_values { my $self = shift; my $list = shift; if (ref($list)) { return @$list; } else { return; } } sub _page_contains_node { my $self = shift; my $list = shift; my $id = shift; foreach (@$list) { return 1 if ($_ == $id); } return 0; } sub _add_node_to_page { my $self = shift; my $list = shift; my $id = shift; if ($self->_page_contains_node( $list, $id )) { return 0; } else { @$list = sort { $a <=> $b } (@$list, $id); return 1; } } sub _remove_node_from_page { my $self = shift; my $list = shift; my $id = shift; if ($self->_page_contains_node( $list, $id )) { @$list = grep { $_ != $id } @$list; return 1; } else { return 0; } } sub _new_index_page { return { __type => 'index' }; } sub _new_list_page { return []; } ################################################################################ 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/Memory.pm000644 000765 000024 00000040733 12171744402 020457 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::Memory - Simple in-memory RDF store =head1 VERSION This document describes RDF::Trine::Store::Memory version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::Memory; =head1 DESCRIPTION RDF::Trine::Store::Memory provides an in-memory triple-store. =cut package RDF::Trine::Store::Memory; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store); use Encode; use Set::Scalar; use Data::Dumper; use Digest::SHA; use List::Util qw(first); use Scalar::Util qw(refaddr reftype blessed); use RDF::Trine::Statement::Quad; use RDF::Trine qw(iri); use RDF::Trine::Error; ###################################################################### my @pos_names; our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; @pos_names = qw(subject predicate object context); } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new () >> Returns a new memory-backed storage object. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. This module also supports initializing the store from a file or URL, in which case, a C key may be used. This holds an arrayref of hashrefs. To load a file, you may give the file name with a C key in the hashref, and to load a URL, use C. See example below. Furthermore, the following keys may be used: =over =item C The syntax of the parsed file or URL. =item C The base URI to be used for a parsed file. =item C NOT IMPLEMENTED Use this URI as a graph name for the contents of the file or URL. =back The following example initializes a Memory store based on a local file and a remote URL: my $store = RDF::Trine::Store->new_with_config( { storetype => 'Memory', sources => [ { file => 'test-23.ttl', syntax => 'turtle', }, { url => 'http://www.kjetil.kjernsmo.net/foaf', syntax => 'rdfxml', graph => 'http://example.org/graph/remote-users' } ] }); =cut sub new { my $class = shift; my $self = bless({ size => 0, statements => [], subject => {}, predicate => {}, object => {}, context => {}, ctx_nodes => {}, hash => Digest::SHA->new, }, $class); return $self; } sub _new_with_string { my $class = shift; my $config = shift || ''; my @uris = split(';', $config); my $self = $class->new(); my $model = RDF::Trine::Model->new( $self ); foreach my $u (@uris) { RDF::Trine::Parser->parse_url_into_model( $u, $model ); } return $self; } sub _config_meta { return { required_keys => [] } } sub _new_with_config { my $class = shift; my $config = shift; my @sources = @{$config->{sources}}; my $self = $class->new(); foreach my $source (@sources) { my %args; if (my $g = $source->{graph}) { $args{context} = (blessed($g) ? $g : iri($g)); } if ($source->{url}) { my $parser = RDF::Trine::Parser->new($source->{syntax}); my $model = RDF::Trine::Model->new( $self ); $parser->parse_url_into_model( $source->{url}, $model, %args ); } elsif ($source->{file}) { open(my $fh, "<:encoding(UTF-8)", $source->{file}) || throw RDF::Trine::Error -text => "Couldn't open file $source->{file}"; my $parser = RDF::Trine::Parser->new($source->{syntax}); my $model = RDF::Trine::Model->new( $self ); $parser->parse_file_into_model( $source->{base_uri}, $source->{file}, $model, %args ); } else { throw RDF::Trine::Error::MethodInvocationError -text => "$class needs a url or file argument"; } } return $self; } =item C<< temporary_store >> Returns a temporary (empty) triple store. =cut sub temporary_store { my $class = shift; return $class->new(); } =item C<< get_statements ( $subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @nodes = @_[0..3]; my $bound = 0; my %bound; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; my $g = $nodes[3]; if (blessed($g) and not($g->is_variable)) { $bound++; $bound{ 3 } = $g; } } foreach my $pos (0 .. 2) { my $n = $nodes[ $pos ]; if (blessed($n) and not($n->is_variable)) { $bound++; $bound{ $pos } = $n; } } my $iter = ($use_quad) ? $self->_get_statements_quad( $bound, %bound ) : $self->_get_statements_triple( $bound, %bound ); return $iter; } sub _get_statements_triple { my $self = shift; my $bound = shift; my %bound = @_; my $match_set = Set::Scalar->new( 0 .. $#{ $self->{statements} } ); if ($bound) { # warn "getting $bound-bound statements"; my @pos = sort { $a <=> $b } keys %bound; my @names = @pos_names[ @pos ]; # warn "\tbound nodes are: " . join(', ', @names) . "\n"; my @sets; foreach my $i (0 .. $#pos) { my $pos = $pos[ $i ]; my $node = $bound{ $pos }; my $string = $node->as_string; # warn $node . " has string: '" . $string . "'\n"; my $hash = $self->{$names[$i]}; my $set = $hash->{ $string }; push(@sets, $set); } foreach my $s (@sets) { unless (blessed($s)) { return RDF::Trine::Iterator::Graph->new(); } } # warn "initial set: $i\n"; while (@sets) { my $s = shift(@sets); # warn "new set: $s\n"; $match_set = $match_set->intersection($s); # warn "intersection: $i"; } } my $open = 1; my %seen; my @members = sort { $a <=> $b } $match_set->members; my $sub = sub { while (1) { my $e = shift(@members); unless (defined($e)) { $open = 0; return; } my $st = $self->{statements}[ $e++ ]; unless (blessed($st)) { next; } my @nodes = $st->nodes; my $triple = RDF::Trine::Statement->new( @nodes[0..2] ); if ($seen{ $triple->as_string }++) { # warn "already seen " . $triple->as_string . "\n" if ($::debug); next; } # warn "returning statement from $bound-bound iterator: " . $triple->as_string . "\n"; return $triple; } }; return RDF::Trine::Iterator::Graph->new( $sub ); } sub _get_statements_quad { my $self = shift; my $bound = shift; my %bound = @_; if ($bound == 0) { # warn "getting all statements"; # warn Dumper($self); my $i = 0; my $sub = sub { # warn "quad iter called with i=$i, last=" . $#{ $self->{statements} }; return unless ($i <= $#{ $self->{statements} }); my $st = $self->{statements}[ $i ]; # warn $st; while (not(blessed($st)) and ($i <= $#{ $self->{statements} })) { $st = $self->{statements}[ ++$i ]; # warn "null st. next: $st"; } $i++; return $st; }; # warn "returning all quads sub $sub"; return RDF::Trine::Iterator::Graph->new( $sub ); } my $match_set; if ($bound == 1) { # warn "getting 1-bound statements"; my ($pos) = keys %bound; my $name = $pos_names[ $pos ]; # warn "\tbound node is $name\n"; my $node = $bound{ $pos }; my $string = $node->as_string; $match_set = $self->{$name}{ $string }; # warn "\tmatching statements: $match_set\n"; unless (blessed($match_set)) { return RDF::Trine::Iterator::Graph->new(); } } else { # warn "getting $bound-bound statements"; my @pos = keys %bound; my @names = @pos_names[ @pos ]; # warn "\tbound nodes are: " . join(', ', @names) . "\n"; my @sets; foreach my $i (0 .. $#pos) { my $pos = $pos[ $i ]; my $node = $bound{ $pos }; my $string = $node->as_string; # warn $node . " has string: '" . $string . "'\n"; my $hash = $self->{$names[$i]}; my $set = $hash->{ $string }; push(@sets, $set); } foreach my $s (@sets) { unless (blessed($s)) { return RDF::Trine::Iterator::Graph->new(); } } my $i = shift(@sets); # warn "initial set: $i\n"; while (@sets) { my $s = shift(@sets); # warn "new set: $s\n"; $i = $i->intersection($s); # warn "intersection: $i"; } $match_set = $i; # warn "\tmatching statements: $match_set\n"; } my $open = 1; my @e = $match_set->elements; my $sub = sub { unless (scalar(@e)) { $open = 0; return; } my $e = shift(@e); # warn "quad iterator returning statement $e"; my $st = $self->{statements}[ $e ]; # warn "returning statement from $bound-bound iterator: " . $st->as_string . "\n"; return $st; }; return RDF::Trine::Iterator::Graph->new( $sub ); } =item C<< get_contexts >> Returns an RDF::Trine::Iterator over the RDF::Trine::Node objects comprising the set of contexts of the stored quads. =cut sub get_contexts { my $self = shift; my @ctx = grep { not($_->isa('RDF::Trine::Node::Nil')) } values %{ $self->{ ctx_nodes } }; return RDF::Trine::Iterator->new( \@ctx ); } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $st = shift; my $context = shift; if ($st->isa( 'RDF::Trine::Statement::Quad' )) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "add_statement cannot be called with both a quad and a context"; } } else { my @nodes = $st->nodes; if (blessed($context)) { $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $context ); } else { my $nil = RDF::Trine::Node::Nil->new(); $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $nil ); } } my $count = $self->count_statements( $st->nodes ); if ($count == 0) { $self->{size}++; my $id = scalar(@{ $self->{ statements } }); $self->{hash}->add('+' . encode_utf8($st->as_string)); push( @{ $self->{ statements } }, $st ); foreach my $pos (0 .. $#pos_names) { my $name = $pos_names[ $pos ]; my $node = $st->$name(); my $string = $node->as_string; my $set = $self->{$name}{ $string }; unless (blessed($set)) { $set = Set::Scalar->new(); $self->{$name}{ $string } = $set; } $set->insert( $id ); } my $ctx = $st->context; my $str = $ctx->as_string; unless (exists $self->{ ctx_nodes }{ $str }) { $self->{ ctx_nodes }{ $str } = $ctx; } # } else { # warn "store already has statement " . $st->as_string; } return; } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $st = shift; my $context = shift; if ($st->isa( 'RDF::Trine::Statement::Quad' )) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "remove_statement cannot be called with both a quad and a context"; } } else { my @nodes = $st->nodes; if (blessed($context)) { $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $context ); } else { my $nil = RDF::Trine::Node::Nil->new(); $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $nil ); } } my @nodes = $st->nodes; my $count = $self->count_statements( @nodes[ 0..3 ] ); # warn "remove_statement: count of statement is $count"; if ($count > 0) { $self->{size}--; my $id = $self->_statement_id( $st->nodes ); # warn "removing statement $id: " . $st->as_string . "\n"; $self->{hash}->add('-' . encode_utf8($st->as_string)); $self->{statements}[ $id ] = undef; foreach my $pos (0 .. 3) { my $name = $pos_names[ $pos ]; my $node = $st->$name(); my $str = $node->as_string; my $set = $self->{$name}{ $str }; $set->delete( $id ); if ($set->size == 0) { if ($pos == 3) { delete $self->{ ctx_nodes }{ $str }; } delete $self->{$name}{ $str }; } } } return; } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { my $self = shift; my $subj = shift; my $pred = shift; my $obj = shift; my $context = shift; my $iter = $self->get_statements( $subj, $pred, $obj, $context ); while (my $st = $iter->next) { $self->remove_statement( $st ); } } =item C<< count_statements ( $subject, $predicate, $object, $context ) >> Returns a count of all the statements matching the specified subject, predicate, object, and context. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my @nodes = @_[0..3]; my $bound = 0; my %bound; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; # warn "count statements with quad" if ($::debug); my $g = $nodes[3]; if (blessed($g) and not($g->is_variable)) { $bound++; $bound{ 3 } = $g; } } foreach my $pos (0 .. 2) { my $n = $nodes[ $pos ]; # unless (blessed($n)) { # $n = RDF::Trine::Node::Nil->new(); # $nodes[ $pos ] = $n; # } if (blessed($n) and not($n->is_variable)) { $bound++; $bound{ $pos } = $n; } } # warn "use quad: $use_quad\n" if ($::debug); # warn "bound: $bound\n" if ($::debug); if ($use_quad) { if ($bound == 0) { # warn "counting all statements"; return $self->size; } elsif ($bound == 1) { my ($pos) = keys %bound; my $name = $pos_names[ $pos ]; my $set = $self->{$name}{ $bound{ $pos }->as_string }; # warn Dumper($set) if ($::debug); unless (blessed($set)) { return 0; } return $set->size; } else { my @pos = keys %bound; my @names = @pos_names[ @pos ]; my @sets; foreach my $i (0 .. $#names) { my $pos = $pos[ $i ]; my $setname = $names[ $i ]; my $data = $self->{ $setname }; my $node = $bound{ $pos }; my $str = $node->as_string; my $set = $data->{ $str }; push( @sets, $set ); } foreach my $s (@sets) { # warn "set: " . Dumper($s) if ($::debug); unless (blessed($s)) { # warn "*** returning zero" if ($::debug); return 0; } } my $i = shift(@sets); while (@sets) { my $s = shift(@sets); $i = $i->intersection($s); } return $i->size; } } else { # use_quad is false here # we're counting distinct (s,p,o) triples from the quadstore my $count = 0; my $iter = $self->get_statements( @nodes[ 0..2 ] ); while (my $st = $iter->next) { # warn $st->as_string if ($::debug); $count++; } return $count; } } =item C<< etag >> If the store has the capability and knowledge to support caching, returns a persistent token that will remain consistent as long as the store's data doesn't change. This token is acceptable for use as an HTTP ETag. =cut sub etag { my $self = shift; return $self->{hash}->hexdigest; } =item C<< size >> Returns the number of statements in the store. =cut sub size { my $self = shift; my $size = $self->{size}; return $size; } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { return; } sub _statement_id { my $self = shift; my @nodes = @_; foreach my $pos (0 .. 3) { my $n = $nodes[ $pos ]; # unless (blessed($n)) { # $n = RDF::Trine::Node::Nil->new(); # $nodes[ $pos ] = $n; # } } my ($subj, $pred, $obj, $context) = @nodes; my @pos = (0 .. 3); my @names = @pos_names[ @pos ]; my @sets; foreach my $i (0 .. $#names) { my $pos = $pos[ $i ]; my $setname = $names[ $i ]; my $data = $self->{ $setname }; my $node = $nodes[ $pos ]; my $str = $node->as_string; my $set = $data->{ $str }; push( @sets, $set ); } foreach my $s (@sets) { unless (blessed($s)) { return -1; } } my $i = shift(@sets); while (@sets) { my $s = shift(@sets); $i = $i->intersection($s); } if ($i->size == 1) { my ($id) = $i->members; return $id; } else { return -1; } } # sub _debug { # my $self = shift; # my $size = scalar(@{ $self->{statements} }); # warn "Memory quad-store contains " . $size . " statements:\n"; # foreach my $st (@{ $self->{statements} }) { # if (blessed($st)) { # warn $st->as_string . "\n"; # } # } # } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/Redis.pm000644 000765 000024 00000034434 12171744402 020256 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::Redis - RDF Store for Redis =head1 VERSION This document describes RDF::Trine::Store::Redis version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::Redis; =head1 DESCRIPTION RDF::Trine::Store::Redis provides a RDF::Trine::Store API to interact with a Redis server. =cut package RDF::Trine::Store::Redis; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store); use Redis; use Cache::LRU; use URI::Escape; use Data::Dumper; use Digest::MD5 qw(md5_base64); use List::Util qw(first); use List::MoreUtils qw(zip); use Scalar::Util qw(refaddr reftype blessed); use HTTP::Request::Common (); use JSON; use RDF::Trine::Error qw(:try); ###################################################################### our $CACHING = 1; my @pos_names; our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; @pos_names = qw(subject predicate object context); } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new ( $server ) >> Returns a new storage object. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. The following key must also be used: =over =item foo description =back =cut sub new { my $class = shift; my %args = @_; my $size = delete $args{cache_size}; $size = 128 unless (defined($size) and $size > 0); my $r = Redis->new( %args ); my $cache = Cache::LRU->new( size => $size ); my $self = bless({ conn => $r, cache => $cache, cache_size => $size }, $class); return $self; } =item C<< conn >> Returns the Redis connection object. =cut sub conn { my $self = shift; return $self->{conn}; } =item C<< cache >> Returns the Cache::LRU object used to cache frequently used redis data. =cut sub cache { my $self = shift; return $self->{cache}; } sub _new_with_string { my $class = shift; my $config = shift; return $class->new( $config ); } =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. =cut sub new_with_config { my $proto = shift; my $config = shift; $config->{storetype} = 'Redis'; return $proto->SUPER::new_with_config( $config ); } sub _new_with_config { my $class = shift; my $config = shift; return $class->new( server => $config->{server}, cache_size => $config->{cache_size} ); } sub _config_meta { return { required_keys => [qw(server)], fields => { server => { description => 'server:port', type => 'string' }, cache_size => { description => 'cache size', type => 'int' }, } } } sub _id_node { my $self = shift; my @id = @_; my $r = $self->conn; my $p = RDF::Trine::Parser::NTriples->new(); my @nodes; foreach my $id (@id) { my $bucket = int($id / 1000); my $hid = $id % 1000; my $key = "R:n.v:$bucket"; my $nt = $r->hget($key, $hid); my $node = $p->parse_node( $nt ); push(@nodes, $node); } return @nodes; } sub _get_node_id { my $self = shift; my @node = @_; my $r = $self->conn; my $s = RDF::Trine::Serializer::NTriples->new(); my @str = map { $s->serialize_node( $_ ) } @node; my @ids; foreach my $nt (@str) { my $md5 = md5_base64($nt); my $key = "R:n.i:$md5"; my $id = $r->get($key); push(@ids, $id); } return wantarray ? @ids : $ids[0]; } sub _get_or_set_node_id { my $self = shift; my $node = shift; my $r = $self->conn; my $s = RDF::Trine::Serializer::NTriples->new(); my $nt = $s->serialize_node( $node ); my $md5 = md5_base64($nt); my $idkey = "R:n.i:$md5"; my $id = $r->get( $idkey ); return $id if (defined($id)); $id = $r->incr( 'RT:node.next' ); $r->set($idkey, $id); my $bucket = int($id / 1000); my $hid = $id % 1000; my $valkey = "R:n.v:$bucket"; $r->hset( $valkey, $hid, $nt ); return $id; } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to add_statement"; } if ($st->isa('RDF::Trine::Statement::Quad') and blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "add_statement cannot be called with both a quad and a context"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_add_statements', $st, $context]); } else { my $r = $self->conn; my @nodes = $st->nodes; $nodes[3] = $context if ($context); @nodes = map { defined($_) ? $_ : RDF::Trine::Node::Nil->new } @nodes[0..3]; my @ids = map { $self->_get_or_set_node_id($_) } @nodes; my $key = join(':', @ids); my @keys = qw(s p o g); $r->hmset( "RT:spog:$key", zip @keys, @ids ); $r->sadd( "RT:sset:$ids[0]", $key ); $r->sadd( "RT:pset:$ids[1]", $key ); $r->sadd( "RT:oset:$ids[2]", $key ); $r->sadd( "RT:gset:$ids[3]", $key ); } return; } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to remove_statement"; } if ($st->isa('RDF::Trine::Statement::Quad') and blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "remove_statement cannot be called with both a quad and a context"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_remove_statements', $st, $context]); } else { my $r = $self->conn; my @nodes = $st->nodes; $nodes[3] = $context if ($context); @nodes = map { defined($_) ? $_ : RDF::Trine::Node::Nil->new } @nodes[0..3]; my @ids = $self->_get_node_id(@nodes); foreach my $i (@ids) { return unless defined($i); } my $key = join(':', @ids); $r->del( "RT:spog:$key" ); $r->srem( "RT:sset:$ids[0]", $key ); $r->srem( "RT:pset:$ids[1]", $key ); $r->srem( "RT:oset:$ids[2]", $key ); $r->srem( "RT:gset:$ids[3]", $key ); } return; } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { my $self = shift; my @nodes = @_[0..3]; my $st = RDF::Trine::Statement->new( @nodes[0..2] ); my $context = $nodes[3]; if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_remove_statement_patterns', $st, $context]); } else { my @strs = map { (not(blessed($_)) or $_->is_variable) ? '*' : $self->_get_or_set_node_id($_) } @nodes; my $key = 'RT:spog:' . join(':', @strs); my $r = $self->conn; foreach my $k ($r->keys($key)) { my ($sid, $pid, $oid, $gid) = $k =~ m/RT:spog:(\d+):(\d+):(\d+):(\d+)/; $r->srem( "RT:sset:$sid", $_ ) for ($r->smembers("RT:sset:$sid")); $r->srem( "RT:pset:$pid", $_ ) for ($r->smembers("RT:pset:$pid")); $r->srem( "RT:oset:$oid", $_ ) for ($r->smembers("RT:oset:$oid")); $r->srem( "RT:gset:$gid", $_ ) for ($r->smembers("RT:gset:$gid")); $r->del( $k ); } } return; } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @nodes = @_; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; } elsif (scalar(@nodes) != 3) { $#nodes = 3; $use_quad = 1; } my @var_map = qw(s p o g); my %var_map = map { $var_map[$_] => $_ } (0 .. $#var_map); my @node_map; foreach my $i (0 .. $#nodes) { if (not(blessed($nodes[$i])) or $nodes[$i]->is_variable) { $nodes[$i] = RDF::Trine::Node::Variable->new( $var_map[ $i ] ); } } my $sub; if ($use_quad) { my $r = $self->conn; my @skeys; my @indexes = qw(s p o g); foreach my $i (0 .. $#indexes) { my $index = $indexes[$i]; my $n = $nodes[$i]; unless ($n->is_variable) { my $id = $self->_get_node_id($n); unless (defined($id)) { return RDF::Trine::Iterator::Graph->new( [] ); } my $key = "RT:${index}set:$id"; push(@skeys, $key); } } if (@skeys) { my @keys = $r->sinter(@skeys); $sub = sub { return unless (scalar(@keys)); my $key = shift(@keys); my @data = split(':', $key); my @nodes = $self->_id_node( @data[0..3] ); my $st = RDF::Trine::Statement::Quad->new( @nodes ); return $st; }; } else { my @strs = map { ($_->is_variable) ? '*' : $self->_get_node_id($_) } @nodes; my $key = 'RT:spog:' . join(':', @strs); my @keys = $r->keys($key); $sub = sub { return unless (scalar(@keys)); my $key = shift(@keys); (undef, undef, my @data) = split(':', $key); my @nodes = $self->_id_node( @data ); my $st = RDF::Trine::Statement::Quad->new( @nodes ); return $st; }; } } else { my $r = $self->conn; my @skeys; my @indexes = qw(s p o); foreach my $i (0 .. $#indexes) { my $index = $indexes[$i]; my $n = $nodes[$i]; unless ($n->is_variable) { my $id = $self->_get_node_id($n); unless (defined($id)) { return RDF::Trine::Iterator::Graph->new( [] ); } my $key = "RT:${index}set:$id"; push(@skeys, $key); } } if (@skeys) { my @keys = $r->sinter(@skeys); my %keys; foreach (@keys) { s/:[^:]+$//; $keys{ $_ }++; } @keys = keys %keys; $sub = sub { return unless (scalar(@keys)); my $key = shift(@keys); my @data = split(':', $key); my @nodes = $self->_id_node( @data[0..2] ); my $st = RDF::Trine::Statement->new( @nodes ); return $st; }; } else { my @strs = map { ($_->is_variable) ? '*' : $self->_get_node_id($_) } @nodes[0..2]; my $key = 'RT:spog:' . join(':', @strs, '*'); my %triples; foreach ($r->keys($key)) { s/:[^:]+$//; $triples{ $_ }++; } my @keys = keys %triples; $sub = sub { return unless (scalar(@keys)); my $key = shift(@keys); my ($ids) = $key =~ m/^RT:spog:(.*)$/; my @data = split(':', $ids); my @nodes = $self->_id_node( @data ); my $st = RDF::Trine::Statement->new( @nodes ); return $st; }; } } return RDF::Trine::Iterator::Graph->new( $sub ); } =item C<< count_statements ( $subject, $predicate, $object, $context ) >> Returns a count of all the statements matching the specified subject, predicate, object, and context. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; # warn "count statements with quad" if ($::debug); } my @nodes = @_; my @strs; foreach my $n (@nodes[0..3]) { if (not(blessed($n)) or $n->is_variable) { push(@strs, '*'); } else { my $id = $self->_get_node_id($n); unless (defined($id)) { return 0; } push(@strs, $id); } } if ($use_quad) { my $key = 'RT:spog:' . join(':', @strs); my $r = $self->conn; my @keys = $r->keys($key); return scalar(@keys); } else { my $key = 'RT:spog:' . join(':', @strs); my $r = $self->conn; my @keys = $r->keys($key); my %keys; foreach (@keys) { s/:[^:]+$//; $keys{ $_ }++; } @keys = keys %keys; return scalar(@keys); } } =item C<< get_contexts >> Returns an RDF::Trine::Iterator over the RDF::Trine::Node objects comprising the set of contexts of the stored quads. =cut sub get_contexts { my $self = shift; my $r = $self->conn; my @keys = $r->keys('RT:spog:*'); my %graphs; foreach (@keys) { s/^.*://; $graphs{ $_ }++; } my @nodes = grep { not($_->isa('RDF::Trine::Node::Nil')) } $self->_id_node(keys %graphs); return RDF::Trine::Iterator->new( \@nodes ); } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { my $self = shift; my %features = map { $_ => 1 } ( # 'http://www.w3.org/ns/sparql-service-description#SPARQL10Query', # 'http://www.w3.org/ns/sparql-service-description#SPARQL11Query', ); if (@_) { my $f = shift; return $features{ $f }; } else { return keys %features; } } # =item C<< get_sparql ( $sparql ) >> # # Returns an iterator object of all bindings matching the specified SPARQL query. # # =cut # # sub get_sparql { # my $self = shift; # my $sparql = shift; # throw RDF::Trine::Error::UnimplementedError -text => "get_sparql not implemented for Redis stores yet"; # } sub _bulk_ops { return 0; } sub _begin_bulk_ops { return 0; } sub _end_bulk_ops { my $self = shift; if (scalar(@{ $self->{ ops } || []})) { my @ops = splice(@{ $self->{ ops } }); my @aggops = $self->_group_bulk_ops( @ops ); my @sparql; warn '_end_bulk_ops: ' . Dumper(\@aggops); throw RDF::Trine::Error::UnimplementedError -text => "bulk operations not implemented for Redis stores yet"; } $self->{BulkOps} = 0; } =item C<< nuke >> Permanently removes the store and its data. =cut sub nuke { my $self = shift; my $r = $self->conn; $r->del('RT:node.next'); foreach my $k ($r->keys('R:n.i:*')) { $r->del($k); } foreach my $k ($r->keys('R:n.v:*')) { $r->del($k); } foreach my $k ($r->keys('RT:spog:*')) { $r->del($k); } $r->del($_) foreach ($r->keys('RT:sset:*')); $r->del($_) foreach ($r->keys('RT:pset:*')); $r->del($_) foreach ($r->keys('RT:oset:*')); $r->del($_) foreach ($r->keys('RT:gset:*')); $self->{cache} = Cache::LRU->new( size => $self->{cache_size} ); } sub _dump { my $self = shift; my $r = $self->conn; my @keys = $r->keys('RT:spog:*'); warn "--------------------------------------\n"; warn '*** DUMP Redis statements:'; warn "$_\n" foreach (@keys); } 1; __END__ =back =head1 REDIS DATA LAYOUT ... =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/Redland.pm000644 000765 000024 00000026136 12171744402 020561 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::Redland - Redland-backed RDF store for RDF::Trine =head1 VERSION This document describes RDF::Trine::Store::Redland version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::Redland; =head1 DESCRIPTION RDF::Trine::Store::Redland provides an RDF::Trine::Store interface to the Redland RDF store. =cut package RDF::Trine::Store::Redland; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store); use Encode; use Data::Dumper; use RDF::Redland 1.00; use Scalar::Util qw(refaddr reftype blessed); use RDF::Trine::Error; ###################################################################### our $NIL_TAG; our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; $NIL_TAG = 'tag:gwilliams@cpan.org,2010-01-01:RT:NIL'; } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new ( $store ) >> Returns a new storage object using the supplied RDF::Redland::Model object. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. The following keys may also be used: =over =item C The name of the storage factory (currently C, C, C, C, C, C, C, C or C). =item C The name of the storage. =item C Any other options to be passed to L as a hashref. =back =item C Initialize the store with a L object. =cut sub new { my $class = shift; my $model = shift; my $self = bless({ model => $model, }, $class); return $self; } sub _new_with_string { my $class = shift; my $config = shift; my ($store_name, $name, $opts) = split(/;/, $config, 3); my $store = RDF::Redland::Storage->new( $store_name, $name, $opts ); my $model = RDF::Redland::Model->new( $store, '' ); return $class->new( $model ); } sub _new_with_config { my $class = shift; my $config = shift; my $store = RDF::Redland::Storage->new( $config->{store_name}, $config->{name}, $config->{options} ); my $model = RDF::Redland::Model->new( $store, '' ); return $class->new( $model ); } sub _new_with_object { my $class = shift; my $obj = shift; return unless (blessed($obj) and $obj->isa('RDF::Redland::Model')); return $class->new( $obj ); } sub _config_meta { return { required_keys => [qw(store_name name options)], fields => { store_name => { description => 'Redland Storage Type', type => 'string' }, name => { description => 'Storage Name', type => 'string' }, options => { description => 'Options String', type => 'string' }, }, } } =item C<< temporary_store >> Returns a temporary (empty) triple store. =cut sub temporary_store { my $class = shift; return $class->_new_with_string( "hashes;test;new='yes',hash-type='memory',contexts='yes'" ); } =item C<< get_statements ( $subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @nodes = @_[0..3]; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; } my @rnodes; foreach my $pos (0 .. ($use_quad ? 3 : 2)) { my $n = $nodes[ $pos ]; if (blessed($n) and not($n->is_variable)) { push(@rnodes, _cast_to_redland($n)); } else { push(@rnodes, undef); } } my $iter = ($use_quad) ? $self->_get_statements_quad( @rnodes ) : $self->_get_statements_triple( @rnodes ); return $iter; } sub _get_statements_triple { my $self = shift; my @rnodes = @_; # warn '_get_statements_triple: ' . Dumper(\@rnodes); my $st = RDF::Redland::Statement->new( @rnodes[0..2] ); my $iter = $self->_model->find_statements( $st ); my %seen; my $sub = sub { while (1) { return unless $iter; return if $iter->end; my $st = $iter->current; if ($seen{ $st->as_string }++) { $iter->next; next; } my @nodes = map { _cast_to_local($st->$_()) } qw(subject predicate object); $iter->next; return RDF::Trine::Statement->new( @nodes ); } }; return RDF::Trine::Iterator::Graph->new( $sub ); } sub _get_statements_quad { my $self = shift; my @rnodes = @_; # warn '_get_statements_quad: ' . Dumper(\@rnodes); my $ctx = $rnodes[3]; my $ctx_local; if ($ctx) { # warn "-> context " . $ctx->as_string; $ctx_local = _cast_to_local( $ctx ); } my $st = RDF::Redland::Statement->new( @rnodes[0..2] ); my $iter = $self->_model->find_statements( $st, $ctx ); my $nil = RDF::Trine::Node::Nil->new(); my $sub = sub { return unless $iter; return if $iter->end; my $st = $iter->current; my $c = $iter->context; my @nodes = map { _cast_to_local($st->$_()) } qw(subject predicate object); if ($ctx) { push(@nodes, $ctx_local); } elsif ($c) { push(@nodes, _cast_to_local($c)); } else { push(@nodes, $nil); } $iter->next; # warn Dumper(\@nodes); return RDF::Trine::Statement::Quad->new( @nodes ); }; return RDF::Trine::Iterator::Graph->new( $sub ); } =item C<< get_contexts >> Returns an RDF::Trine::Iterator over the RDF::Trine::Node objects comprising the set of contexts of the stored quads. =cut sub get_contexts { my $self = shift; my @ctxs = $self->_model->contexts(); return RDF::Trine::Iterator->new( sub { my $n = shift(@ctxs); return _cast_to_local($n) } ); } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $st = shift; my $context = shift; my $nil = RDF::Trine::Node::Nil->new(); if ($st->isa( 'RDF::Trine::Statement::Quad' )) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "add_statement cannot be called with both a quad and a context"; } } else { my @nodes = $st->nodes; if (blessed($context)) { $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $context ); } else { $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $nil ); } } my $model = $self->_model; my @nodes = $st->nodes; my @rnodes = map { _cast_to_redland($_) } @nodes; my $rst = RDF::Redland::Statement->new( @rnodes[0..2] ); $model->add_statement( $rst, $rnodes[3] ); } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $st = shift; my $context = shift; if ($st->isa( 'RDF::Trine::Statement::Quad' )) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "remove_statement cannot be called with both a quad and a context"; } } else { my @nodes = $st->nodes; if (blessed($context)) { $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $context ); } else { my $nil = RDF::Trine::Node::Nil->new(); $st = RDF::Trine::Statement::Quad->new( @nodes[0..2], $nil ); } } my @nodes = $st->nodes; my @rnodes = map { _cast_to_redland($_) } @nodes; $self->_model->remove_statement( @rnodes ); } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { my $self = shift; my $subj = shift; my $pred = shift; my $obj = shift; my $context = shift; my $iter = $self->get_statements( $subj, $pred, $obj, $context ); while (my $st = $iter->next) { $self->remove_statement( $st ); } } =item C<< count_statements ( $subject, $predicate, $object, $context ) >> Returns a count of all the statements matching the specified subject, predicate, object, and context. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my @nodes = @_; if (scalar(@nodes) < 4) { # warn "restricting count_statements to triple semantics"; my @rnodes = map { _cast_to_redland($_) } @nodes[0..2]; my $st = RDF::Redland::Statement->new( @rnodes ); my $iter = $self->_model->find_statements( $st ); my $count = 0; my %seen; while ($iter and my $st = $iter->current) { unless ($seen{ $st->as_string }++) { $count++; } $iter->next; } return $count; } else { my @rnodes = map { _cast_to_redland($_) } @nodes; my $st = RDF::Redland::Statement->new( @rnodes[0..2] ); my $iter = $self->_model->find_statements( $st, $rnodes[3] ); my $count = 0; while ($iter and my $st = $iter->current) { $count++; my $ctx = $iter->context; $iter->next; } return $count; } } =item C<< size >> Returns the number of statements in the store. =cut sub size { my $self = shift; return $self->_model->size; } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { return; } sub _model { my $self = shift; return $self->{model}; } sub _cast_to_redland { my $node = shift; return unless (blessed($node)); if ($node->isa('RDF::Trine::Statement')) { my @nodes = map { _cast_to_redland( $_ ) } $node->nodes; return RDF::Redland::Statement->new( @nodes ); } elsif ($node->isa('RDF::Trine::Node::Resource')) { return RDF::Redland::Node->new_from_uri( $node->uri_value ); } elsif ($node->isa('RDF::Trine::Node::Blank')) { return RDF::Redland::Node->new_from_blank_identifier( $node->blank_identifier ); } elsif ($node->isa('RDF::Trine::Node::Literal')) { my $lang = $node->literal_value_language; my $dt = $node->literal_datatype; my $value = $node->literal_value; return RDF::Redland::Node->new_literal( "$value", $dt, $lang ); } elsif ($node->isa('RDF::Trine::Node::Nil')) { return RDF::Redland::Node->new_from_uri( $NIL_TAG ); } else { return; } } sub _cast_to_local { my $node = shift; return unless (blessed($node)); my $type = $node->type; if ($type == $RDF::Redland::Node::Type_Resource) { my $uri = $node->uri->as_string; if ($uri eq $NIL_TAG) { return RDF::Trine::Node::Nil->new(); } else { return RDF::Trine::Node::Resource->new( $uri ); } } elsif ($type == $RDF::Redland::Node::Type_Blank) { return RDF::Trine::Node::Blank->new( $node->blank_identifier ); } elsif ($type == $RDF::Redland::Node::Type_Literal) { my $lang = $node->literal_value_language; my $dturi = $node->literal_datatype; my $dt = ($dturi) ? $dturi->as_string : undef; return RDF::Trine::Node::Literal->new( decode('utf8', $node->literal_value), $lang, $dt ); } else { return; } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/SPARQL.pm000644 000765 000024 00000035663 12171744402 020217 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::SPARQL - RDF Store proxy for a SPARQL endpoint =head1 VERSION This document describes RDF::Trine::Store::SPARQL version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::SPARQL; =head1 DESCRIPTION RDF::Trine::Store::SPARQL provides a RDF::Trine::Store API to interact with a remote SPARQL endpoint. =cut package RDF::Trine::Store::SPARQL; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store); use URI::Escape; use Data::Dumper; use List::Util qw(first); use Scalar::Util qw(refaddr reftype blessed); use RDF::Trine::Error qw(:try); ###################################################################### my @pos_names; our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; @pos_names = qw(subject predicate object context); } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new ( $url ) >> Returns a new storage object that will act as a proxy for the SPARQL endpoint accessible via the supplied C<$url>. =item C Returns a new storage object configured with a hashref with certain keys as arguments. The C key must be C for this backend. The following key must also be used: =over =item C The URL of the remote endpoint. =back =cut sub new { my $class = shift; my $url = shift; my $u = RDF::Trine->default_useragent->clone; $u->default_headers->push_header( 'Accept' => "application/sparql-results+xml;q=0.9,application/rdf+xml;q=0.5,text/turtle;q=0.7,text/xml" ); my $self = bless({ ua => $u, url => $url, }, $class); return $self; } sub _new_with_string { my $class = shift; my $config = shift; return $class->new( $config ); } =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. =cut sub new_with_config { my $proto = shift; my $config = shift; $config->{storetype} = 'SPARQL'; return $proto->SUPER::new_with_config( $config ); } sub _new_with_config { my $class = shift; my $config = shift; return $class->new( $config->{url} ); } sub _config_meta { return { required_keys => [qw(url)], fields => { url => { description => 'Endpoint URL', type => 'string' }, } } } =item C<< get_statements ( $subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @nodes = @_[0..3]; my $bound = 0; my %bound; my $use_quad = 0; if (scalar(@_) >= 4) { my $g = $nodes[3]; if (blessed($g) and not($g->is_variable) and not($g->is_nil)) { $use_quad = 1; $bound++; $bound{ 3 } = $g; } } my @var_map = qw(s p o g); my %var_map = map { $var_map[$_] => $_ } (0 .. $#var_map); my @node_map; foreach my $i (0 .. $#nodes) { if (not(blessed($nodes[$i])) or $nodes[$i]->is_variable) { $nodes[$i] = RDF::Trine::Node::Variable->new( $var_map[ $i ] ); } } my $node_count = ($use_quad) ? 4 : 3; my $st_class = ($use_quad) ? 'RDF::Trine::Statement::Quad' : 'RDF::Trine::Statement'; my @triple = @nodes[ 0..2 ]; my $iter; if ($use_quad) { my @vars = grep { $_->is_variable } @nodes; my $names = join(' ', map { '?' . $_->name } @vars); my $nodes = join(' ', map { ($_->is_variable) ? '?' . $_->name : $_->as_ntriples } @triple); my $g = $nodes[3]->is_variable ? '?g' : $nodes[3]->as_ntriples; $iter = $self->get_sparql( <<"END" ); SELECT $names WHERE { GRAPH $g { $nodes } } END } else { my @vars = grep { $_->is_variable } @triple; my $names = join(' ', map { '?' . $_->name } @vars); my $nodes = join(' ', map { ($_->is_variable) ? '?' . $_->name : $_->as_ntriples } @triple); $iter = $self->get_sparql( <<"END" ); SELECT $names WHERE { $nodes } END } my $sub = sub { my $row = $iter->next; return unless $row; my @triple; foreach my $i (0 .. ($node_count-1)) { if ($nodes[$i]->is_variable) { $triple[$i] = $row->{ $nodes[$i]->name }; } else { $triple[$i] = $nodes[$i]; } } my $triple = $st_class->new( @triple ); return $triple; }; return RDF::Trine::Iterator::Graph->new( $sub ); } =item C<< get_pattern ( $bgp [, $context] ) >> Returns an iterator object of all bindings matching the specified graph pattern. =cut sub get_pattern { my $self = shift; my $bgp = shift; my $context = shift; my @args = @_; my %args = @args; if ($bgp->isa('RDF::Trine::Statement')) { $bgp = RDF::Trine::Pattern->new($bgp); } my %iter_args; my @triples = grep { $_->type eq 'TRIPLE' } $bgp->triples; my @quads = grep { $_->type eq 'QUAD' } $bgp->triples; my @tripless; foreach my $t (@triples) { my @nodes = $t->nodes; my @nodess; foreach my $n (@nodes) { push(@nodess, ($n->is_variable ? '?' . $n->name : $n->as_ntriples)); } push(@tripless, join(' ', @nodess) . ' .'); } my $triples = join("\n\t", @tripless); my $quads = ''; if (@quads) { return $self->SUPER::get_pattern( $bgp, $context, @args ); throw RDF::Trine::Error::UnimplementedError -text => "SPARQL get_pattern quad support not implemented"; } my $sparql = <<"END"; SELECT * WHERE { $triples $quads } END if (my $o = delete $args{orderby}) { my @order; while (@$o) { my ($k,$order) = splice(@$o,0,2,()); push(@order, "${order}(?$k)"); } if (@order) { $sparql .= "ORDER BY " . join(' ', @order); } } my $iter = $self->get_sparql( $sparql ); return $iter; } =item C<< get_contexts >> Returns an RDF::Trine::Iterator over the RDF::Trine::Node objects comprising the set of contexts of the stored quads. =cut sub get_contexts { my $self = shift; my $sparql = 'SELECT DISTINCT ?g WHERE { GRAPH ?g {} }'; my $iter = $self->get_sparql( $sparql ); my $sub = sub { my $row = $iter->next; return unless $row; my $g = $row->{g}; return $g; }; return RDF::Trine::Iterator->new( $sub ); } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to add_statement"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_add_statements', $st, $context]); } else { my $sparql = $self->_add_statements_sparql( [ $st, $context ] ); my $iter = $self->_get_post_iterator( $sparql ); my $row = $iter->next; } return; } sub _add_statements_sparql { my $self = shift; my @parts; foreach my $op (@_) { my $st = $op->[0]; my $context = $op->[1]; if ($st->isa('RDF::Trine::Statement::Quad')) { push(@parts, 'GRAPH ' . $st->context->as_ntriples . ' { ' . join(' ', map { $_->as_ntriples } ($st->nodes)[0..2]) . ' }'); } else { push(@parts, join(' ', map { $_->as_ntriples } $st->nodes) . ' .'); } } my $sparql = sprintf( 'INSERT DATA { %s }', join("\n\t", @parts) ); return $sparql; } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statement { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to remove_statement"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_remove_statements', $st, $context]); } else { my $sparql = $self->_remove_statements_sparql( [ $st, $context ] ); my $iter = $self->_get_post_iterator( $sparql ); my $row = $iter->next; } return; } sub _remove_statements_sparql { my $self = shift; my @parts; foreach my $op (@_) { my $st = $op->[0]; my $context = $op->[1]; if ($st->isa('RDF::Trine::Statement::Quad')) { push(@parts, 'GRAPH ' . $st->context->as_ntriples . ' { ' . join(' ', map { $_->as_ntriples } ($st->nodes)[0..2]) . ' }'); } else { push(@parts, join(' ', map { $_->as_ntriples } $st->nodes) . ' .'); } } my $sparql = sprintf( 'DELETE DATA { %s }', join("\n\t", @parts) ); return $sparql; } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes the specified C<$statement> from the underlying model. =cut sub remove_statements { my $self = shift; my $st = shift; my $context = shift; unless (blessed($st) and $st->isa('RDF::Trine::Statement')) { throw RDF::Trine::Error::MethodInvocationError -text => "Not a valid statement object passed to remove_statements"; } if ($self->_bulk_ops) { push(@{ $self->{ ops } }, ['_remove_statement_patterns', $st, $context]); } else { my $sparql = $self->_remove_statement_patterns_sparql( [ $st, $context ] ); my $iter = $self->_get_post_iterator( $sparql ); my $row = $iter->next; } return; } sub _remove_statement_patterns_sparql { my $self = shift; my @parts; foreach my $op (@_) { my $st = $op->[0]; my $context = $op->[1]; my $sparql; if ($st->isa('RDF::Trine::Statement::Quad')) { push(@parts, 'GRAPH ' . $st->context->as_ntriples . ' { ' . join(' ', map { $_->is_variable ? '?' . $_->name : $_->as_ntriples } ($st->nodes)[0..2]) . ' }'); } else { push(@parts, join(' ', map { $_->is_variable ? '?' . $_->name : $_->as_ntriples } $st->nodes) . ' .'); } } my $sparql = sprintf( 'DELETE WHERE { %s }', join("\n\t", @parts)); return $sparql; } =item C<< count_statements ( $subject, $predicate, $object, $context ) >> Returns a count of all the statements matching the specified subject, predicate, object, and context. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my @nodes = @_[0..3]; my $bound = 0; my %bound; my $use_quad = 0; if (scalar(@_) >= 4) { $use_quad = 1; # warn "count statements with quad" if ($::debug); my $g = $nodes[3]; if (blessed($g) and not($g->is_variable)) { $bound++; $bound{ 3 } = $g; } } foreach my $i (0 .. $#nodes) { my $node = $nodes[$i]; unless (defined($node)) { $nodes[$i] = RDF::Trine::Node::Variable->new( "rt__" . $pos_names[$i] ); } } my $sparql; my $triple = join(' ', map { $_->is_variable ? '?' . $_->name : $_->as_ntriples } @nodes[0..2]); if ($use_quad) { my $nodes; if ($nodes[3]->isa('RDF::Trine::Node::Variable')) { $nodes = "GRAPH ?rt__graph { $triple }"; } elsif ($nodes[3]->isa('RDF::Trine::Node::Nil')) { $nodes = join(' ', map { $_->is_variable ? '?' . $_->name : $_->as_ntriples } @nodes[0..2]); } else { my $graph = $nodes[3]->is_variable ? '?' . $nodes[3]->name : $nodes[3]->as_ntriples; $nodes = "GRAPH $graph { $triple }"; } $sparql = "SELECT (COUNT(*) AS ?count) WHERE { $nodes }"; } else { $sparql = "SELECT (COUNT(*) AS ?count) WHERE { $triple }"; } my $iter = $self->get_sparql( $sparql ); my $row = $iter->next; my $count = $row->{count}; return unless ($count); return $count->literal_value; # # # # # # # XXX try to send a COUNT() query and fall back if it fails # my $iter = $self->get_statements( @_ ); # my $count = 0; # while (my $st = $iter->next) { # $count++; # } # return $count; } =item C<< size >> Returns the number of statements in the store. =cut sub size { my $self = shift; return $self->count_statements( undef, undef, undef, undef ); } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { my $self = shift; my %features = map { $_ => 1 } ( 'http://www.w3.org/ns/sparql-service-description#SPARQL10Query', 'http://www.w3.org/ns/sparql-service-description#SPARQL11Query', 'http://www.w3.org/ns/sparql-service-description#SPARQL11Update', ); if (@_) { my $f = shift; return $features{ $f }; } else { return keys %features; } } =item C<< get_sparql ( $sparql ) >> Returns an iterator object of all bindings matching the specified SPARQL query. =cut sub get_sparql { my $self = shift; my $sparql = shift; my $handler = RDF::Trine::Iterator::SAXHandler->new(); my $p = XML::SAX::ParserFactory->parser(Handler => $handler); my $ua = $self->{ua}; # warn $sparql; my $urlchar = ($self->{url} =~ /\?/ ? '&' : '?'); my $url = $self->{url} . $urlchar . 'query=' . uri_escape($sparql); my $response = $ua->get( $url ); if ($response->is_success) { $p->parse_string( $response->content ); return $handler->iterator; } else { my $status = $response->status_line; my $endpoint = $self->{url}; # warn "url: $url\n"; # warn $sparql; warn Dumper($response); throw RDF::Trine::Error -text => "Error making remote SPARQL call to endpoint $endpoint ($status)"; } } sub _get_post_iterator { my $self = shift; my $sparql = shift; my $handler = RDF::Trine::Iterator::SAXHandler->new(); my $p = XML::SAX::ParserFactory->parser(Handler => $handler); my $ua = $self->{ua}; # warn $sparql; my $url = $self->{url}; my $response = $ua->post( $url, query => $sparql ); if ($response->is_success) { $p->parse_string( $response->content ); return $handler->iterator; } else { my $status = $response->status_line; my $endpoint = $self->{url}; # warn "url: $url\n"; # warn $sparql; warn Dumper($response); throw RDF::Trine::Error -text => "Error making remote SPARQL call to endpoint $endpoint ($status)"; } } sub _bulk_ops { my $self = shift; return $self->{BulkOps}; } sub _begin_bulk_ops { my $self = shift; $self->{BulkOps} = 1; } sub _end_bulk_ops { my $self = shift; if (scalar(@{ $self->{ ops } || []})) { my @ops = splice(@{ $self->{ ops } }); my @aggops = $self->_group_bulk_ops( @ops ); my @sparql; foreach my $aggop (@aggops) { my ($type, @ops) = @$aggop; my $method = "${type}_sparql"; push(@sparql, $self->$method( @ops )); } my $sparql = join(";\n", @sparql); my $iter = $self->_get_post_iterator( $sparql ); my $row = $iter->next; } $self->{BulkOps} = 0; } sub _group_bulk_ops { my $self = shift; return unless (scalar(@_)); my @ops = @_; my @bulkops; my $op = shift(@ops); my $type = $op->[0]; push(@bulkops, [$type, [ @{$op}[1 .. $#{ $op }] ]]); while (scalar(@ops)) { my $op = shift(@ops); my $type = $op->[0]; if ($op->[0] eq $bulkops[ $#bulkops ][0]) { push( @{ $bulkops[ $#bulkops ][1] }, [ @{$op}[1 .. $#{ $op }] ] ); } else { push(@bulkops, [$type, [ @{$op}[1 .. $#{ $op }] ]]); } } return @bulkops; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/DBI/mysql.pm000644 000765 000024 00000014757 12171744402 020761 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::DBI::mysql - Mysql subclass of DBI store =head1 VERSION This document describes RDF::Trine::Store::DBI::mysql version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::DBI::mysql; =head1 DESCRIPTION =cut package RDF::Trine::Store::DBI::mysql; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store::DBI); use Scalar::Util qw(blessed reftype refaddr); our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; } sub _config_meta { return { required_keys => [qw(dsn username password name)], fields => { name => { description => 'Model Name', type => 'string' }, dsn => { description => 'DSN', type => 'string', template => 'DBI:mysql:database=[%database%]' }, database => { description => 'Database Name', type => 'string' }, username => { description => 'Username', type => 'string' }, password => { description => 'Password', type => 'password' }, driver => { description => 'Driver', type => 'string', value => 'mysql' }, }, } } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. =cut sub new_with_config { my $proto = shift; my $config = shift; $config->{storetype} = 'DBI::mysql'; return $proto->SUPER::new_with_config( $config ); } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the underlying model. =cut sub add_statement { my $self = shift; my $stmt = shift; my $context = shift; my $dbh = $self->dbh; # Carp::confess unless (blessed($stmt)); my $stable = $self->statements_table; unless (blessed($stmt) and $stmt->can('nodes')) { Carp::confess "No statement passed to add_statement"; } my @nodes = $stmt->nodes; foreach my $n (@nodes) { $self->_add_node( $n ); } my @values = map { $self->_mysql_node_hash( $_ ) } @nodes; if ($stmt->isa('RDF::Trine::Statement::Quad')) { if (blessed($context)) { throw RDF::Trine::Error::MethodInvocationError -text => "add_statement cannot be called with both a quad and a context"; } $context = $stmt->context; } else { my $cid = do { if ($context) { $self->_add_node( $context ); $self->_mysql_node_hash( $context ); } else { 0 } }; push(@values, $cid); } my $sql = sprintf( "INSERT IGNORE INTO ${stable} (Subject, Predicate, Object, Context) VALUES (?,?,?,?)" ); my $sth = $dbh->prepare( $sql ); $sth->execute(@values); } sub _add_node { my $self = shift; my $node = shift; my $hash = $self->_mysql_node_hash( $node ); my $dbh = $self->dbh; my @cols; my $table; my %values; # Carp::confess unless (blessed($node)); if ($node->is_blank) { $table = "Bnodes"; @cols = qw(ID Name); @values{ @cols } = ($hash, $node->blank_identifier); } elsif ($node->is_resource) { $table = "Resources"; @cols = qw(ID URI); @values{ @cols } = ($hash, $node->uri_value); } elsif ($node->isa('RDF::Trine::Node::Literal')) { $table = "Literals"; @cols = qw(ID Value); @values{ @cols } = ($hash, $node->literal_value); $values{ 'Datatype' } = ''; $values{ 'Language' } = ''; if ($node->has_language) { push(@cols, 'Language'); $values{ 'Language' } = $node->literal_value_language; } elsif ($node->has_datatype) { push(@cols, 'Datatype'); $values{ 'Datatype' } = $node->literal_datatype; } } my $sql = "INSERT IGNORE INTO ${table} (" . join(', ', @cols) . ") VALUES (" . join(',',('?')x scalar(@cols)) . ")"; my $sth = $dbh->prepare( $sql ); $sth->execute( map "$_", @values{ @cols } ); return $hash; } =item C<< init >> Creates the necessary tables in the underlying database. =cut sub init { my $self = shift; my $dbh = $self->dbh; my $name = $self->model_name; my $id = RDF::Trine::Store::DBI::_mysql_hash( $name ); local($dbh->{AutoCommit}) = 0; unless ($self->_table_exists("Literals")) { $dbh->begin_work; $dbh->do( <<"END" ) || do { $dbh->rollback; return }; CREATE TABLE IF NOT EXISTS Literals ( ID bigint unsigned PRIMARY KEY, Value longtext NOT NULL, Language text NOT NULL, Datatype text NOT NULL ) CHARACTER SET utf8 COLLATE utf8_bin; END $dbh->do( <<"END" ) || do { $dbh->rollback; return }; CREATE TABLE IF NOT EXISTS Resources ( ID bigint unsigned PRIMARY KEY, URI text NOT NULL ); END $dbh->do( <<"END" ) || do { $dbh->rollback; return }; CREATE TABLE IF NOT EXISTS Bnodes ( ID bigint unsigned PRIMARY KEY, Name text NOT NULL ); END $dbh->do( <<"END" ) || do { $dbh->rollback; return }; CREATE TABLE IF NOT EXISTS Models ( ID bigint unsigned PRIMARY KEY, Name text NOT NULL ); END $dbh->commit or warn $dbh->errstr; } unless ($self->_table_exists("Statements${id}")) { $dbh->do( <<"END" ) || do { $dbh->rollback; return }; CREATE TABLE IF NOT EXISTS Statements${id} ( Subject bigint unsigned NOT NULL, Predicate bigint unsigned NOT NULL, Object bigint unsigned NOT NULL, Context bigint unsigned NOT NULL DEFAULT 0, PRIMARY KEY (Subject, Predicate, Object, Context) ); END # $dbh->do( "DROP TABLE IF EXISTS Statements${id}" ) || do { $dbh->rollback; return }; # $dbh->do( "CREATE INDEX idx_${name}_spog ON Statements${id} (Subject,Predicate,Object,Context);", undef, $name ); # || do { $dbh->rollback; return }; $dbh->do( "CREATE INDEX `idx_${name}_pogs` ON Statements${id} (Predicate,Object,Context,Subject);", undef, $name ); # || do { $dbh->rollback; return }; $dbh->do( "CREATE INDEX `idx_${name}_opcs` ON Statements${id} (Object,Predicate,Context,Subject);", undef, $name ); # || do { $dbh->rollback; return }; $dbh->do( "CREATE INDEX `idx_${name}_cpos` ON Statements${id} (Context,Predicate,Object,Subject);", undef, $name ); # || do { $dbh->rollback; return }; # $dbh->do( "DELETE FROM Models WHERE ID = ${id}") || do { $dbh->rollback; return }; $dbh->do( "INSERT INTO Models (ID, Name) VALUES (${id}, ?)", undef, $name ); $dbh->commit; } } 1; # Magic true value required at end of module __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/DBI/Pg.pm000644 000765 000024 00000007333 12171744402 020152 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::DBI::Pg - PostgreSQL subclass of DBI store =head1 VERSION This document describes RDF::Trine::Store::DBI::Pg version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::DBI::Pg; =head1 DESCRIPTION =cut package RDF::Trine::Store::DBI::Pg; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store::DBI); use Scalar::Util qw(blessed reftype refaddr); our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; } sub _config_meta { return { required_keys => [qw(dsn username password name)], fields => { name => { description => 'Model Name', type => 'string' }, dsn => { description => 'DSN', type => 'string', template => 'DBI:Pg:dbname=[%database%]' }, database => { description => 'Database Name', type => 'string' }, username => { description => 'Username', type => 'string' }, password => { description => 'Password', type => 'password' }, driver => { description => 'Driver', type => 'string', value => 'Pg' }, }, } } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. =cut sub new_with_config { my $proto = shift; my $config = shift; $config->{storetype} = 'DBI::Pg'; return $proto->SUPER::new_with_config( $config ); } sub _column_name { my $self = shift; my @args = @_; my $col = lc(join('_', @args)); return $col; } =item C<< init >> Creates the necessary tables in the underlying database. =cut sub init { my $self = shift; my $dbh = $self->dbh; my $name = $self->model_name; my $id = RDF::Trine::Store::DBI::_mysql_hash( $name ); my $l = Log::Log4perl->get_logger("rdf.trine.store.dbi"); unless ($self->_table_exists("literals")) { $dbh->begin_work; $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE literals ( ID NUMERIC(20) PRIMARY KEY, Value text NOT NULL, Language text NOT NULL DEFAULT '', Datatype text NOT NULL DEFAULT '' ); END $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE resources ( ID NUMERIC(20) PRIMARY KEY, URI text NOT NULL ); END $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE bnodes ( ID NUMERIC(20) PRIMARY KEY, Name text NOT NULL ); END $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; CREATE TABLE models ( ID NUMERIC(20) PRIMARY KEY, Name text NOT NULL ); END $dbh->commit or warn $dbh->errstr; } unless ($self->_table_exists("statements${id}")) { $dbh->do( <<"END" ) || do { $l->trace( $dbh->errstr ); return }; CREATE TABLE statements${id} ( Subject NUMERIC(20) NOT NULL, Predicate NUMERIC(20) NOT NULL, Object NUMERIC(20) NOT NULL, Context NUMERIC(20) NOT NULL DEFAULT 0, PRIMARY KEY (Subject, Predicate, Object, Context) ); END # $dbh->do( "DELETE FROM Models WHERE ID = ${id}") || do { $l->trace( $dbh->errstr ); $dbh->rollback; return }; $dbh->do( "INSERT INTO Models (ID, Name) VALUES (${id}, ?)", undef, $name ); } } 1; # Magic true value required at end of module __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Store/DBI/SQLite.pm000644 000765 000024 00000005726 12171744402 020751 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Store::DBI::SQLite - SQLite subclass of DBI store =head1 VERSION This document describes RDF::Trine::Store::DBI::SQLite version 1.007 =head1 SYNOPSIS use RDF::Trine::Store::DBI::SQLite; =head1 DESCRIPTION =cut package RDF::Trine::Store::DBI::SQLite; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Store::DBI); use Scalar::Util qw(blessed reftype refaddr); our $VERSION; BEGIN { $VERSION = "1.007"; my $class = __PACKAGE__; $RDF::Trine::Store::STORE_CLASSES{ $class } = $VERSION; } sub _config_meta { return { required_keys => [qw(dsn username password name)], fields => { name => { description => 'Model Name', type => 'string' }, dsn => { description => 'DSN', type => 'string', template => 'DBI:SQLite:dbname=[%filename%]' }, filename => { description => 'SQLite Database Filename', type => 'filename' }, username => { description => 'Username', type => 'string', value => '' }, password => { description => 'Password', type => 'password', value => '' }, driver => { description => 'Driver', type => 'string', value => 'SQLite' }, }, } } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C<< new_with_config ( \%config ) >> Returns a new RDF::Trine::Store object based on the supplied configuration hashref. =cut sub new_with_config { my $proto = shift; my $config = shift; $config->{storetype} = 'DBI::SQLite'; my $exists = (-r $config->{filename}); my $self = $proto->SUPER::new_with_config( $config ); unless ($exists) { $self->init(); } return $self; } =item C<< init >> Creates the necessary tables in the underlying database. =cut sub init { my $self = shift; my $dbh = $self->dbh; my $name = $self->model_name; $self->SUPER::init(); my $id = RDF::Trine::Store::DBI::_mysql_hash( $name ); my $table = "Statements${id}"; unless ($self->_table_exists($table)) { $dbh->begin_work; $dbh->do( "CREATE INDEX idx_${name}_spog ON Statements${id} (Subject,Predicate,Object,Context);" ) || do { $dbh->rollback; return }; $dbh->do( "CREATE INDEX idx_${name}_pogs ON Statements${id} (Predicate,Object,Context,Subject);" ) || do { $dbh->rollback; return }; $dbh->do( "CREATE INDEX idx_${name}_opcs ON Statements${id} (Object,Predicate,Context,Subject);" ) || do { $dbh->rollback; return }; $dbh->do( "CREATE INDEX idx_${name}_cpos ON Statements${id} (Context,Predicate,Object,Subject);" ) || do { $dbh->rollback; return }; $dbh->commit; } } 1; # Magic true value required at end of module __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Statement/Quad.pm000644 000765 000024 00000007343 12171744402 020751 0ustar00gregstaff000000 000000 # RDF::Trine::Statement::Quad # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Statement::Quad - Class for quads and quad patterns =head1 VERSION This document describes RDF::Trine::Statement::Quad version 1.007 =cut package RDF::Trine::Statement::Quad; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Statement); use Scalar::Util qw(blessed); use Carp qw(croak); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C Returns a new Quad structure. =cut sub new { my $class = shift; my @nodes = @_; unless (scalar(@nodes) == 4) { throw RDF::Trine::Error::MethodInvocationError -text => "Quad constructor must have four node arguments"; } my @names = qw(subject predicate object context); foreach my $i (0 .. 3) { unless (defined($nodes[ $i ])) { $nodes[ $i ] = RDF::Trine::Node::Variable->new($names[ $i ]); } } return bless( [ @nodes ], $class ); } =item C<< nodes >> Returns the subject, predicate and object of the triple pattern. =cut sub nodes { my $self = shift; return @$self; } =item C<< node_names >> Returns the method names for accessing the nodes of this statement. =cut sub node_names { return qw(subject predicate object context); } =item C<< graph >> =item C<< context >> Returns the graph node of the quad pattern. =cut sub context { my $self = shift; if (@_) { $self->[3] = shift; } return $self->[3]; } *graph = \&context; =item C<< sse >> Returns the SSE string for this algebra expression. =cut sub sse { my $self = shift; my $context = shift; my @nodes = $self->nodes; my @sse = map { $_->sse( $context ) } (@nodes); return sprintf( '(quad %s %s %s %s)', @sse ); } =item C<< type >> Returns the type of this algebra expression. =cut sub type { return 'QUAD'; } =item C<< clone >> =cut sub clone { my $self = shift; my $class = ref($self); return $class->new( $self->nodes ); } =item C<< from_redland ( $statement, $name ) >> Given a RDF::Redland::Statement object and a graph name, returns a perl-native RDF::Trine::Statement::Quad object. =cut sub from_redland { my $self = shift; my $rstmt = shift; my $graph = shift; my $rs = $rstmt->subject; my $rp = $rstmt->predicate; my $ro = $rstmt->object; my $cast = sub { my $node = shift; my $type = $node->type; if ($type == $RDF::Redland::Node::Type_Resource) { return RDF::Trine::Node::Resource->new( $node->uri->as_string ); } elsif ($type == $RDF::Redland::Node::Type_Blank) { return RDF::Trine::Node::Blank->new( $node->blank_identifier ); } elsif ($type == $RDF::Redland::Node::Type_Literal) { my $lang = $node->literal_value_language; my $dturi = $node->literal_datatype; my $dt = ($dturi) ? $dturi->as_string : undef; return RDF::Trine::Node::Literal->new( $node->literal_value, $lang, $dt ); } else { croak 'Unknown node type in statement conversion'; } }; my @nodes; foreach my $n ($rs, $rp, $ro) { push(@nodes, $cast->( $n )); } my $st = $self->new( @nodes, $graph ); return $st; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/NQuads.pm000644 000765 000024 00000010752 12171744402 021415 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::NQuads # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::NQuads - N-Quads Serializer =head1 VERSION This document describes RDF::Trine::Serializer::NQuads version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::NQuads; my $serializer = RDF::Trine::Serializer::NQuads->new(); =head1 DESCRIPTION The RDF::Trine::Serializer::NQuads class provides an API for serializing RDF graphs to the N-Quads syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::NQuads; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Data::Dumper; use Scalar::Util qw(blessed); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'nquads' } = __PACKAGE__; $RDF::Trine::Serializer::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' } = __PACKAGE__; foreach my $type (qw(text/x-nquads)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new >> Returns a new N-Quads serializer object. =cut sub new { my $class = shift; my %args = @_; my $self = bless( {}, $class); return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to N-Quads, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $file = shift; my $model = shift; my $iter = $model->as_stream; while (my $st = $iter->next) { print {$file} $self->_statement_as_string( $st ); } } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to N-Quads, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $iter = $model->as_stream; my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->_statement_as_string( $st ); } return $string; } =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to N-Quads, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $file = shift; my $iter = shift; while (my $st = $iter->next) { print {$file} $self->_statement_as_string( $st ); } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to N-Quads, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->_statement_as_string( $st ); } return $string; } sub _serialize_bounded_description { my $self = shift; my $model = shift; my $node = shift; my $seen = shift || {}; return '' if ($seen->{ $node->sse }++); my $iter = $model->get_statements( $node, undef, undef ); my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->_statement_as_string( $st ); if ($nodes[2]->isa('RDF::Trine::Node::Blank')) { $string .= $self->_serialize_bounded_description( $model, $nodes[2], $seen ); } } return $string; } sub _statement_as_string { my $self = shift; my $st = shift; my @nodes; if ($st->type eq 'TRIPLE') { @nodes = $st->nodes; } else { my $g = $st->context; if ($g->is_nil) { @nodes = ($st->nodes)[0..2]; } else { @nodes = $st->nodes; } } return join(' ', map { $_->as_ntriples } @nodes) . " .\n"; } =item C<< statement_as_string ( $st ) >> Returns a string with the supplied RDF::Trine::Statement::Quad object serialized as N-Quads, ending in a DOT and newline. =cut sub statement_as_string { my $self = shift; my $st = shift; my @nodes = $st->nodes; return join(' ', map { $_->as_ntriples } @nodes[0..3]) . " .\n"; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/NTriples/000755 000765 000024 00000000000 12171744443 021424 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Serializer/NTriples.pm000644 000765 000024 00000012161 12171744402 021756 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::NTriples # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::NTriples - N-Triples Serializer =head1 VERSION This document describes RDF::Trine::Serializer::NTriples version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::NTriples; my $serializer = RDF::Trine::Serializer::NTriples->new(); =head1 DESCRIPTION The RDF::Trine::Serializer::NTriples class provides an API for serializing RDF graphs to the N-Triples syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::NTriples; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Data::Dumper; use Scalar::Util qw(blessed); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'ntriples' } = __PACKAGE__; $RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/N-Triples' } = __PACKAGE__; foreach my $type (qw(text/plain)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new >> Returns a new N-Triples serializer object. =cut sub new { my $class = shift; my %args = @_; my $self = bless( {}, $class); return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to N-Triples, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $file = shift; my $model = shift; my $st = RDF::Trine::Statement->new( map { RDF::Trine::Node::Variable->new($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); while (my $st = $iter->next) { print {$file} $self->statement_as_string( $st ); } } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to N-Triples, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $st = RDF::Trine::Statement->new( map { RDF::Trine::Node::Variable->new($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->statement_as_string( $st ); } return $string; } =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to N-Triples, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $file = shift; my $iter = shift; while (my $st = $iter->next) { print {$file} $self->statement_as_string( $st ); } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to N-Triples, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->statement_as_string( $st ); } return $string; } sub _serialize_bounded_description { my $self = shift; my $model = shift; my $node = shift; my $seen = shift || {}; return '' if ($seen->{ $node->sse }++); my $iter = $model->get_statements( $node, undef, undef ); my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->statement_as_string( $st ); if ($nodes[2]->isa('RDF::Trine::Node::Blank')) { $string .= $self->_serialize_bounded_description( $model, $nodes[2], $seen ); } } return $string; } =item C<< statement_as_string ( $st ) >> Returns a string with the supplied RDF::Trine::Statement object serialized as N-Triples, ending in a DOT and newline. =cut sub statement_as_string { my $self = shift; my $st = shift; my @nodes = $st->nodes; return join(' ', map { $_->as_ntriples } @nodes[0..2]) . " .\n"; } =item C<< serialize_node ( $node ) >> Returns a string containing the N-Triples serialization of C<< $node >>. =cut sub serialize_node { my $self = shift; my $node = shift; return $node->as_ntriples; } 1; __END__ =back =head1 NOTES As described in L, N-Triples serialization will decode any L that is included in the IRI, and serialize it using unicode codepoint escapes. =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/RDFJSON.pm000644 000765 000024 00000005307 12171744402 021327 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::RDFJSON # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::RDFJSON - RDF/JSON Serializer =head1 VERSION This document describes RDF::Trine::Serializer::RDF/JSON version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::RDFJSON; my $serializer = RDF::Trine::Serializer::RDFJSON->new(); =head1 DESCRIPTION The RDF::Trine::Serializer::Turtle class provides an API for serializing RDF graphs to the RDF/JSON syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::RDFJSON; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use JSON; use Data::Dumper; use Scalar::Util qw(blessed); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'rdfjson' } = __PACKAGE__; foreach my $type (qw(application/json application/x-rdf+json)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new >> Returns a new serializer object. =cut sub new { my $class = shift; my %args = @_; my $self = bless( {}, $class); return $self; } =item C<< serialize_model_to_file ( $file, $model [,\%json_options] ) >> Serializes the C<$model> to RDF/JSON, printing the results to the supplied C<$file> handle. C<%json_options> is an options hash suitable for JSON::to_json. =cut sub serialize_model_to_file { my $self = shift; my $file = shift; my $model = shift; my $opts = shift; my $string = to_json($model->as_hashref, $opts); print {$file} $string; } =item C<< serialize_model_to_string ( $model [,\%json_options] ) >> Serializes the C<$model> to RDF/JSON, returning the result as a string. C<%json_options> is an options hash suitable for JSON::to_json. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $opts = shift; my $string = to_json($model->as_hashref, $opts); return $string; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Toby Inkster Gregory Williams =head1 COPYRIGHT Copyright (c) 2010 Toby Inkster. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/RDFPatch.pm000644 000765 000024 00000011255 12171744402 021614 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::RDFPatch # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::RDFPatch - RDF-Patch Serializer =head1 VERSION This document describes RDF::Trine::Serializer::RDFPatch version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::RDFPatch; my $serializer = RDF::Trine::Serializer::RDFPatch->new(); =head1 DESCRIPTION The RDF::Trine::Serializer::RDFPatch class provides an API for serializing RDF graphs to the RDF-Patch syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::RDFPatch; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Data::Dumper; use Scalar::Util qw(blessed); use List::Util qw(min); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); use RDF::Trine::Exporter::RDFPatch; ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'rdfpatch' } = __PACKAGE__; # $RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/RDF-Patch' } = __PACKAGE__; foreach my $type (qw(application/rdf-patch)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new >> Returns a new RDF-Patch serializer object. =cut sub new { my $class = shift; my %args; if (@_) { if (scalar(@_) == 1 and reftype($_[0]) eq 'HASH') { my $ns = shift; %args = ( namespaces => $ns ); } else { %args = @_; } } my $self = bless({ args => [ %args ] }, $class); return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to RDF-Patch, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $fh = shift; my $model = shift; my $sink = RDF::Trine::Serializer::FileSink->new( $fh ); my $e = RDF::Trine::Exporter::RDFPatch->new( @{ $self->{args} }, sink => $sink ); my $st = RDF::Trine::Statement->new( map { RDF::Trine::Node::Variable->new($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); while (my $st = $iter->next) { $e->add( $st ); } } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to RDF-Patch, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $sink = RDF::Trine::Serializer::StringSink->new(); my $e = RDF::Trine::Exporter::RDFPatch->new( @{ $self->{args} }, sink => $sink ); my $st = RDF::Trine::Statement->new( map { RDF::Trine::Node::Variable->new($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); while (my $st = $iter->next) { $e->add( $st ); } return $sink->string; } =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to RDF-Patch, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $fh = shift; my $iter = shift; my $sink = RDF::Trine::Serializer::FileSink->new( $fh ); my $e = RDF::Trine::Exporter::RDFPatch->new( @{ $self->{args} }, sink => $sink ); while (my $st = $iter->next) { $e->add( $st ); } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to RDF-Patch, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $sink = RDF::Trine::Serializer::StringSink->new(); my $e = RDF::Trine::Exporter::RDFPatch->new( @{ $self->{args} }, sink => $sink ); while (my $st = $iter->next) { $e->add( $st ); } return $sink->string; } 1; __END__ =back =head1 NOTES As described in L, serialization will decode any L that is included in the IRI, and serialize it using unicode codepoint escapes. =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/RDFXML.pm000644 000765 000024 00000021322 12171744402 021211 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::RDFXML # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::RDFXML - RDF/XML Serializer =head1 VERSION This document describes RDF::Trine::Serializer::RDFXML version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::RDFXML; my $serializer = RDF::Trine::Serializer::RDFXML->new( namespaces => { ex => 'http://example/' } ); print $serializer->serialize_model_to_string($model); =head1 DESCRIPTION The RDF::Trine::Serializer::Turtle class provides an API for serializing RDF graphs to the RDF/XML syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::RDFXML; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Data::Dumper; use Scalar::Util qw(blessed); use RDF::Trine qw(variable); use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'rdfxml' } = __PACKAGE__; $RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/RDF_XML' } = __PACKAGE__; foreach my $type (qw(application/rdf+xml)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new ( namespaces => \%namespaces, base_uri => $baseuri ) >> Returns a new RDF/XML serializer object. =cut sub new { my $class = shift; my %args = @_; my $self = bless( { namespaces => { 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' => 'rdf' } }, $class); if (my $ns = $args{namespaces}) { my %ns = %{ $ns }; my %nsmap; while (my ($ns, $uri) = each(%ns)) { for (1..2) { $uri = $uri->uri_value if (blessed($uri)); } $nsmap{ $uri } = $ns; } @{ $self->{namespaces} }{ keys %nsmap } = values %nsmap; } if ($args{base}) { $self->{base_uri} = $args{base}; } if ($args{base_uri}) { $self->{base_uri} = $args{base_uri}; } if ($args{scoped_namespaces}) { $self->{scoped_namespaces} = $args{scoped_namespaces}; } return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to RDF/XML, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $fh = shift; my $model = shift; my $st = RDF::Trine::Statement->new( map { variable($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); # my $iter = $model->as_stream; $self->serialize_iterator_to_file( $fh, $iter ); return 1; } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to RDF/XML, returning the result as a string. =cut =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to RDF/XML, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $fh = shift; my $iter = shift; my $ns = $self->_top_xmlns(); my $base_uri = ''; if ($self->{base_uri}) { $base_uri = "xml:base=\"$self->{base_uri}\" "; } print {$fh} qq[\n\n]; my $st = $iter->next; my @statements; push(@statements, $st) if blessed($st); while (@statements) { my $st = shift(@statements); my @samesubj; push(@samesubj, $st); my $subj = $st->subject; while (my $row = $iter->next) { if ($row->subject->equal( $subj )) { push(@samesubj, $row); } else { push(@statements, $row); last; } } print {$fh} $self->_statements_same_subject_as_string( @samesubj ); } print {$fh} qq[\n]; } sub _statements_same_subject_as_string { my $self = shift; my @statements = @_; my $s = $statements[0]->subject; my $id; if ($s->isa('RDF::Trine::Node::Blank')) { my $b = $s->blank_identifier; $id = qq[rdf:nodeID="$b"]; } else { my $i = $s->uri_value; for ($i) { s/&/&/g; s/{namespaces} }; my $string = ''; foreach my $st (@statements) { my (undef, $p, $o) = $st->nodes; my %used_namespaces; my ($ns, $ln); try { ($ns,$ln) = $p->qname; } catch RDF::Trine::Error with { my $uri = $p->uri_value; throw RDF::Trine::Error::SerializationError -text => "Can't turn predicate $uri into a QName."; }; $used_namespaces{ $ns }++; unless (exists $namespaces{ $ns }) { $namespaces{ $ns } = 'ns' . $counter++; } my $prefix = $namespaces{ $ns }; my $nsdecl = ''; if ($self->{scoped_namespaces}) { $nsdecl = qq[ xmlns:$prefix="$ns"]; } if ($o->isa('RDF::Trine::Node::Literal')) { my $lv = $o->literal_value; for ($lv) { s/&/&/g; s/literal_value_language; my $dt = $o->literal_datatype; my $tag = join(':', $prefix, $ln); if ($lang) { $string .= qq[\t<${tag}${nsdecl} xml:lang="${lang}">${lv}\n]; } elsif ($dt) { $string .= qq[\t<${tag}${nsdecl} rdf:datatype="${dt}">${lv}\n]; } else { $string .= qq[\t<${tag}${nsdecl}>${lv}\n]; } } elsif ($o->isa('RDF::Trine::Node::Blank')) { my $b = $o->blank_identifier; for ($b) { s/&/&/g; s/\n]; } else { my $u = $o->uri_value; for ($u) { s/&/&/g; s/\n]; } } $string .= qq[\n]; # rdf namespace is already defined in the tag, so ignore it here my %seen = %{ $self->{namespaces} }; my @ns; foreach my $uri (sort { $namespaces{$a} cmp $namespaces{$b} } grep { not($seen{$_}) } (keys %namespaces)) { my $ns = $namespaces{$uri}; my $str = ($ns eq '') ? qq[xmlns="$uri"] : qq[xmlns:${ns}="$uri"]; push(@ns, $str); } my $ns = join(' ', @ns); if ($ns) { return qq[\n] . $string; } else { return qq[\n] . $string; } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to RDF/XML, returning the result as a string. =cut sub _serialize_bounded_description { my $self = shift; my $model = shift; my $node = shift; my $seen = {}; my $ns = $self->_top_xmlns(); my $base_uri = ''; if ($self->{base_uri}) { $base_uri = "xml:base=\"$self->{base_uri}\" "; } my $string = qq[\n\n]; $string .= $self->__serialize_bounded_description( $model, $node, $seen ); $string .= qq[\n]; return $string; } sub __serialize_bounded_description { my $self = shift; my $model = shift; my $node = shift; my $seen = shift || {}; return '' if ($seen->{ $node->sse }++); my $string = ''; my $st = RDF::Trine::Statement->new( $node, map { RDF::Trine::Node::Variable->new($_) } qw(p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $iter = $model->get_pattern( $pat, undef, orderby => [ qw(p ASC o ASC) ] ); my @bindings = $iter->get_all; if (@bindings) { my @samesubj = map { RDF::Trine::Statement->new( $node, $_->{p}, $_->{o} ) } @bindings; my @blanks = grep { blessed($_) and $_->isa('RDF::Trine::Node::Blank') } map { $_->{o} } @bindings; $string .= $self->_statements_same_subject_as_string( @samesubj ); foreach my $object (@blanks) { $string .= $self->__serialize_bounded_description( $model, $object, $seen ); } } return $string; } sub _top_xmlns { my $self = shift; my $namespaces = $self->{namespaces}; my @keys = sort { $namespaces->{$a} cmp $namespaces->{$b} } keys %$namespaces; return '' if ($self->{scoped_namespaces}); my @ns; foreach my $v (@keys) { next if ($v eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $k = $namespaces->{$v}; if (blessed($v)) { $v = $v->uri_value; } my $str = ($k eq '') ? qq[xmlns="$v"] : qq[xmlns:$k="$v"]; push(@ns, $str); } my $ns = join(' ', @ns); if (length($ns)) { $ns = " $ns"; } return $ns; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/TriG.pm000644 000765 000024 00000016737 12171744402 021100 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::TriG # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::TriG - TriG Serializer =head1 VERSION This document describes RDF::Trine::Serializer::TriG version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::TriG; my $serializer = RDF::Trine::Serializer::TriG->new(); =head1 DESCRIPTION The RDF::Trine::Serializer::TriG class provides an API for serializing RDF graphs to the TriG syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::TriG; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Encode; use Data::Dumper; use Scalar::Util qw(blessed refaddr reftype); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'trig' } = __PACKAGE__; # $RDF::Trine::Serializer::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' } = __PACKAGE__; # foreach my $type (qw(text/x-nquads)) { # $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; # } } ###################################################################### =item C<< new >> Returns a new TriG serializer object. =cut sub new { my $class = shift; my $ns = {}; my $base_uri; my @args = @_; my $ttl = RDF::Trine::Serializer::Turtle->new(@args); if (@_) { if (scalar(@_) == 1 and reftype($_[0]) eq 'HASH') { $ns = shift; } else { my %args = @_; if (exists $args{ base }) { $base_uri = $args{ base }; } if (exists $args{ base_uri }) { $base_uri = $args{ base_uri }; } if (exists $args{ namespaces }) { $ns = $args{ namespaces }; } } } my %rev; while (my ($ns, $uri) = each(%{ $ns })) { if (blessed($uri)) { $uri = $uri->uri_value; if (blessed($uri)) { $uri = $uri->uri_value; } } $rev{ $uri } = $ns; } my $self = bless( { ns => \%rev, base_uri => $base_uri, ttl => $ttl, }, $class ); return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to TriG, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $file = shift; my $model = shift; my %ns = reverse(%{ $self->{ns} }); my @nskeys = sort keys %ns; if (@nskeys) { foreach my $ns (sort @nskeys) { my $uri = $ns{ $ns }; print $file "\@prefix $ns: <$uri> .\n"; } print $file "\n"; } my $s = $self->{ttl}; my $count = $model->count_statements(undef, undef, undef, RDF::Trine::Node::Nil->new()); if ($count) { my $iter = $model->get_statements(undef, undef, undef, RDF::Trine::Node::Nil->new()); print $file "{\n\t"; my $ttl = $s->serialize_iterator_to_string($iter); $ttl =~ s/\n/\n\t/g; print {$file} $ttl; print $file "}\n\n"; } my $graphs = $model->get_graphs; while (my $g = $graphs->next) { my $iter = $model->get_statements(undef, undef, undef, $g); print $file sprintf("%s {\n", $self->node_as_concise_string($g)); my $ttl = $s->serialize_iterator_to_string($iter); $ttl =~ s/\n/\n\t/g; print $file $ttl; print $file "}\n\n"; } } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to TriG, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $iter = $model->as_stream; my $data = ''; open(my $fh, '>:encoding(UTF-8)', \$data); $self->serialize_model_to_file($fh, $model); close($fh); return decode('UTF-8', $data); } =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to TriG, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $file = shift; my $iter = shift; my %ns = reverse(%{ $self->{ns} }); my @nskeys = sort keys %ns; if (@nskeys) { foreach my $ns (sort @nskeys) { my $uri = $ns{ $ns }; print $file "\@prefix $ns: <$uri> .\n"; } print $file "\n"; } my $g; my $in_graph = 0; my $s = $self->{ttl}; while (my $st = $iter->next) { my $new_graph = $st->isa('RDF::Trine::Statement::Quad') ? $st->graph : RDF::Trine::Node::Nil->new(); if (not($in_graph)) { $g = $new_graph; if ($g->is_nil) { print $file "{\n" } else { print $file sprintf("%s {\n", $s->node_as_concise_string($g)); } } elsif (not($g->equal($new_graph))) { $g = $new_graph; print $file sprintf("}\n\n%s {\n", $s->node_as_concise_string($g)); } $in_graph = 1; print {$file} "\t" . $self->_statement_as_string( $st ); } if ($in_graph) { print $file "}\n"; } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to TriG, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $data = ''; open(my $fh, '>:encoding(UTF-8)', \$data); $self->serialize_iterator_to_file($fh, $iter); close($fh); return decode('UTF-8', $data); } sub _statement_as_string { my $self = shift; my $st = shift; my @nodes; my $s = $self->{ttl}; @nodes = ($st->nodes)[0..2]; return join(' ', map { $s->node_as_concise_string($_) } @nodes) . " .\n"; } =item C<< statement_as_string ( $st ) >> Returns a string with the supplied RDF::Trine::Statement::Quad object serialized as TriG, ending in a DOT and newline. =cut sub statement_as_string { my $self = shift; my $st = shift; my @nodes = $st->nodes; return join(' ', map { $_->as_ntriples } @nodes[0..3]) . " .\n"; } sub _node_concise_string { my $self = shift; my $obj = shift; if ($obj->is_literal and $obj->has_datatype) { my $dt = $obj->literal_datatype; if ($dt =~ m<^http://www.w3.org/2001/XMLSchema#(integer|double|decimal)$> and $obj->is_canonical_lexical_form) { my $value = $obj->literal_value; return $value; } else { my $dtr = iri($dt); my $literal = $obj->literal_value; my $qname; try { my ($ns,$local) = $dtr->qname; if (blessed($self) and exists $self->{ns}{$ns}) { $qname = join(':', $self->{ns}{$ns}, $local); $self->{used_ns}{ $self->{ns}{$ns} }++; } } catch RDF::Trine::Error with {}; if ($qname) { my $escaped = $obj->_unicode_escape( $literal ); return qq["$escaped"^^$qname]; } } } elsif ($obj->isa('RDF::Trine::Node::Resource')) { my $value; try { my ($ns,$local) = $obj->qname; if (blessed($self) and exists $self->{ns}{$ns}) { $value = join(':', $self->{ns}{$ns}, $local); $self->{used_ns}{ $self->{ns}{$ns} }++; } } catch RDF::Trine::Error with {} otherwise {}; if ($value) { return $value; } } return; } =item C<< node_as_concise_string >> Returns a string representation using common Turtle syntax shortcuts (e.g. for numeric literals). =cut sub node_as_concise_string { my $self = shift; my $obj = shift; my $str = $self->_node_concise_string( $obj ); if (defined($str)) { return $str; } else { return $obj->as_ntriples; } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/TSV.pm000644 000765 000024 00000011676 12171744402 020704 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::TSV # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::TSV - TSV Serializer =head1 VERSION This document describes RDF::Trine::Store version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::TSV; my $serializer = RDF::Trine::Serializer::TSV->new(); =head1 DESCRIPTION The RDF::Trine::Serializer::TSV class provides an API for serializing RDF graphs to the TSV syntax. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::TSV; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Data::Dumper; use Scalar::Util qw(blessed); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'tsv' } = __PACKAGE__; $RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/TSV' } = __PACKAGE__; foreach my $type (qw(text/tsv)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new >> Returns a new TSV serializer object. =cut sub new { my $class = shift; my %args = @_; my $self = bless( {}, $class); return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to TSV, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $file = shift; my $model = shift; my $st = RDF::Trine::Statement->new( map { RDF::Trine::Node::Variable->new($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); print {$file} join("\t", qw(s p o)); while (my $st = $iter->next) { print {$file} $self->statement_as_string( $st ); } } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to TSV, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $st = RDF::Trine::Statement->new( map { RDF::Trine::Node::Variable->new($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); my $string = join("\t", qw(s p o)) . "\n"; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->statement_as_string( $st ); } return $string; } =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to TSV, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $file = shift; my $iter = shift; # TODO: must print the header line corresponding to the bindings in the entire iterator... while (my $st = $iter->next) { print {$file} $self->statement_as_string( $st ); } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to TSV, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; # TODO: must print the header line corresponding to the bindings in the entire iterator... my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->statement_as_string( $st ); } return $string; } sub _serialize_bounded_description { my $self = shift; my $model = shift; my $node = shift; my $seen = shift || {}; # TODO: must print the header line, but only on the first (non-recursive) call to _serialize_bounded_description return '' if ($seen->{ $node->sse }++); my $iter = $model->get_statements( $node, undef, undef ); my $string = ''; while (my $st = $iter->next) { my @nodes = $st->nodes; $string .= $self->statement_as_string( $st ); if ($nodes[2]->isa('RDF::Trine::Node::Blank')) { $string .= $self->_serialize_bounded_description( $model, $nodes[2], $seen ); } } return $string; } =item C<< statement_as_string ( $st ) >> Returns a string with the nodes of the given RDF::Trine::Statement serialized in N-Triples format, separated by tab characters. =cut sub statement_as_string { my $self = shift; my $st = shift; my @nodes = $st->nodes; return join("\t", map { $_->as_ntriples } @nodes[0..2]) . "\n"; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/Turtle.pm000644 000765 000024 00000043002 12171744402 021473 0ustar00gregstaff000000 000000 # RDF::Trine::Serializer::Turtle # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Serializer::Turtle - Turtle Serializer =head1 VERSION This document describes RDF::Trine::Serializer::Turtle version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::Turtle; my $serializer = RDF::Trine::Serializer::Turtle->new( namespaces => { ex => 'http://example/' } ); print $serializer->serialize_model_to_string($model); =head1 DESCRIPTION The RDF::Trine::Serializer::Turtle class provides an API for serializing RDF graphs to the Turtle syntax. XSD numeric types are serialized as bare literals, and where possible the more concise syntax is used for rdf:Lists. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::Turtle; use strict; use warnings; use base qw(RDF::Trine::Serializer); use URI; use Carp; use Encode; use Data::Dumper; use Scalar::Util qw(blessed refaddr reftype); use RDF::Trine qw(variable iri); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); use RDF::Trine::Namespace qw(rdf); ###################################################################### our ($VERSION, $debug); BEGIN { $debug = 0; $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'turtle' } = __PACKAGE__; $RDF::Trine::Serializer::format_uris{ 'http://www.w3.org/ns/formats/Turtle' } = __PACKAGE__; foreach my $type (qw(application/x-turtle application/turtle text/turtle text/rdf+n3)) { $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< new ( namespaces => \%namespaces, base_uri => $base_uri ) >> Returns a new Turtle serializer object. =cut sub new { my $class = shift; my $ns = {}; my $base_uri; if (@_) { if (scalar(@_) == 1 and reftype($_[0]) eq 'HASH') { $ns = shift; } else { my %args = @_; if (exists $args{ base }) { $base_uri = $args{ base }; } if (exists $args{ base_uri }) { $base_uri = $args{ base_uri }; } if (exists $args{ namespaces }) { $ns = $args{ namespaces }; } } } my %rev; while (my ($ns, $uri) = each(%{ $ns })) { if (blessed($uri)) { $uri = $uri->uri_value; if (blessed($uri)) { $uri = $uri->uri_value; } } $rev{ $uri } = $ns; } my $self = bless( { ns => \%rev, base_uri => $base_uri, }, $class ); return $self; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to Turtle, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $fh = shift; my $model = shift; my $sink = RDF::Trine::Serializer::FileSink->new($fh); my $st = RDF::Trine::Statement->new( map { variable($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); $self->serialize_iterator( $sink, $iter, seen => {}, level => 0, tab => "\t", @_, model => $model ); return 1; } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to Turtle, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $sink = RDF::Trine::Serializer::StringSink->new(); my $st = RDF::Trine::Statement->new( map { variable($_) } qw(s p o) ); my $pat = RDF::Trine::Pattern->new( $st ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(s ASC p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); $self->serialize_iterator( $sink, $iter, seen => {}, level => 0, tab => "\t", @_, model => $model, string => 1 ); return $sink->string; } =item C<< serialize_iterator_to_file ( $file, $iter ) >> Serializes the iterator to Turtle, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $fh = shift; my $iter = shift; my %args = @_; my $sink = RDF::Trine::Serializer::FileSink->new($fh); $self->serialize_iterator( $sink, $iter, %args ); return 1; } =item C<< serialize_iterator ( $sink, $iter ) >> Serializes the iterator to Turtle, printing the results to the supplied sink object. =cut sub serialize_iterator { my $self = shift; my $sink = shift; my $iter = shift; my %args = @_; my $seen = $args{ seen } || {}; my $level = $args{ level } || 0; my $tab = $args{ tab } || "\t"; my $indent = $tab x $level; my %ns = reverse(%{ $self->{ns} }); my @nskeys = sort keys %ns; unless ($sink->can('prepend')) { if (@nskeys) { foreach my $ns (sort @nskeys) { my $uri = $ns{ $ns }; $sink->emit("\@prefix $ns: <$uri> .\n"); } $sink->emit("\n"); } } if ($self->{base_uri}) { $sink->emit("\@base <$self->{base_uri}> .\n\n"); } my $last_subj; my $last_pred; my $open_triple = 0; while (my $st = $iter->next) { # warn "------------------\n"; # warn $st->as_string . "\n"; my $subj = $st->subject; my $pred = $st->predicate; my $obj = $st->object; # we're abusing the seen hash here as the key isn't really a node value, # but since it isn't a valid node string being used it shouldn't collide # with real data. we set this here so that later on when we check for # single-owner bnodes (when attempting to use the [...] concise syntax), # bnodes that have already been serialized as the 'head' of a statement # aren't considered as single-owner. This is because the output string # is acting as a second ownder of the node -- it's already been emitted # as something like '_:foobar', so it can't also be output as '[...]'. $seen->{ ' heads' }{ $subj->as_string }++; if (my $model = $args{model}) { if (my $head = $self->_statement_describes_list($model, $st)) { warn "found a rdf:List head " . $head->as_string . " for the subject in statement " . $st->as_string if ($debug); if ($model->count_statements(undef, undef, $head)) { # the rdf:List appears as the object of a statement, and so # will be serialized whenever we get to serializing that # statement warn "next" if ($debug); next; } } } if ($seen->{ $subj->as_string }) { warn "next on seen subject " . $st->as_string if ($debug); next; } if ($subj->equal( $last_subj )) { # continue an existing subject if ($pred->equal( $last_pred )) { # continue an existing predicate $sink->emit(qq[, ]); $self->_serialize_object_to_file( $sink, $obj, $seen, $level, $tab, %args ); } else { # start a new predicate $sink->emit(qq[ ;\n${indent}$tab]); $self->_turtle( $sink, $pred, 1, $seen, $level, $tab, %args ); $sink->emit(' '); $self->_serialize_object_to_file( $sink, $obj, $seen, $level, $tab, %args ); } } else { # start a new subject if ($open_triple) { $sink->emit(qq[ .\n${indent}]); } $open_triple = 1; $self->_turtle( $sink, $subj, 0, $seen, $level, $tab, %args ); warn '-> ' . $pred->as_string if ($debug); $sink->emit(' '); $self->_turtle( $sink, $pred, 1, $seen, $level, $tab, %args ); $sink->emit(' '); $self->_serialize_object_to_file( $sink, $obj, $seen, $level, $tab, %args ); } } continue { if (blessed($last_subj) and not($last_subj->equal($st->subject))) { # warn "marking " . $st->subject->as_string . " as seen"; $seen->{ $last_subj->as_string }++; } # warn "setting last subject to " . $st->subject->as_string; $last_subj = $st->subject; $last_pred = $st->predicate; } if ($open_triple) { $sink->emit(qq[ .\n]); } if ($sink->can('prepend')) { my @used_nskeys = keys %{ $self->{used_ns} }; if (@used_nskeys) { my $string = ''; foreach my $ns (sort @used_nskeys) { my $uri = $ns{ $ns }; $string .= "\@prefix $ns: <$uri> .\n"; } $string .= "\n"; $sink->prepend($string); } } } =item C<< serialize_iterator_to_string ( $iter ) >> Serializes the iterator to Turtle, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $sink = RDF::Trine::Serializer::StringSink->new(); $self->serialize_iterator( $sink, $iter, seen => {}, level => 0, tab => "\t", @_, string => 1 ); return $sink->string; } =item C<< serialize_node ( $node ) >> Returns a string containing the Turtle serialization of C<< $node >>. =cut sub serialize_node { my $self = shift; my $node = shift; return $self->node_as_concise_string( $node ); } sub _serialize_object_to_file { my $self = shift; my $sink = shift; my $subj = shift; my $seen = shift; my $level = shift; my $tab = shift; my %args = @_; my $indent = $tab x $level; if (my $model = $args{model}) { if ($subj->isa('RDF::Trine::Node::Blank')) { if ($self->_check_valid_rdf_list( $subj, $model )) { # warn "node is a valid rdf:List: " . $subj->as_string . "\n"; return $self->_turtle_rdf_list( $sink, $subj, $model, $seen, $level, $tab, %args ); } else { my $count = $model->count_statements( undef, undef, $subj ); my $rec = $model->count_statements( $subj, undef, $subj ); warn "count=$count, rec=$rec for node " . $subj->as_string if ($debug); if ($count == 1 and $rec == 0) { unless ($seen->{ $subj->as_string }++ or $seen->{ ' heads' }{ $subj->as_string }) { my $pat = RDF::Trine::Pattern->new( RDF::Trine::Statement->new($subj, variable('p'), variable('o')) ); my $stream = $model->get_pattern( $pat, undef, orderby => [ qw(p ASC o ASC) ] ); my $iter = $stream->as_statements( qw(s p o) ); my $last_pred; my $triple_count = 0; $sink->emit("["); while (my $st = $iter->next) { my $pred = $st->predicate; my $obj = $st->object; # continue an existing subject if ($pred->equal( $last_pred )) { # continue an existing predicate $sink->emit(qq[, ]); $self->_serialize_object_to_file( $sink, $obj, $seen, $level, $tab, %args ); # $self->_turtle( $fh, $obj, 2, $seen, $level, $tab, %args ); } else { # start a new predicate if ($triple_count == 0) { $sink->emit(qq[\n${indent}${tab}${tab}]); } else { $sink->emit(qq[ ;\n${indent}$tab${tab}]); } $self->_turtle( $sink, $pred, 1, $seen, $level, $tab, %args ); $sink->emit(' '); $self->_serialize_object_to_file( $sink, $obj, $seen, $level+1, $tab, %args ); } $last_pred = $pred; $triple_count++; } if ($triple_count) { $sink->emit("\n${indent}${tab}"); } $sink->emit("]"); return; } } } } } $self->_turtle( $sink, $subj, 2, $seen, $level, $tab, %args ); } sub _statement_describes_list { my $self = shift; my $model = shift; my $st = shift; my $subj = $st->subject; my $pred = $st->predicate; my $obj = $st->object; if ($model->count_statements($subj, $rdf->first) and $model->count_statements($subj, $rdf->rest)) { # warn $subj->as_string . " looks like a rdf:List element"; if (my $head = $self->_node_belongs_to_valid_list( $model, $subj )) { return $head; } } return; } sub _node_belongs_to_valid_list { my $self = shift; my $model = shift; my $node = shift; while ($model->count_statements( undef, $rdf->rest, $node )) { my $iter = $model->get_statements( undef, $rdf->rest, $node ); my $s = $iter->next; my $ancestor = $s->subject; unless (blessed($ancestor)) { # warn "failed to get an expected rdf:List element ancestor"; return 0; } ($node) = $ancestor; # warn "stepping back to rdf:List element ancestor " . $node->as_string; } if ($self->_check_valid_rdf_list( $node, $model )) { return $node; } else { return; } } sub _check_valid_rdf_list { my $self = shift; my $head = shift; my $model = shift; # warn '--------------------------'; # warn "checking if node " . $head->as_string . " is a valid rdf:List\n"; my $headrest = $model->count_statements( undef, $rdf->rest, $head ); if ($headrest) { # warn "\tnode " . $head->as_string . " seems to be the middle of an rdf:List\n"; return 0; } my %list_elements; my $node = $head; until ($node->equal( $rdf->nil )) { $list_elements{ $node->as_string }++; unless ($node->isa('RDF::Trine::Node::Blank')) { # warn "\tnode " . $node->as_string . " isn't a blank node\n"; return 0; } my $first = $model->count_statements( $node, $rdf->first ); unless ($first == 1) { # warn "\tnode " . $node->as_string . " has $first rdf:first links when 1 was expected\n"; return 0; } my $rest = $model->count_statements( $node, $rdf->rest ); unless ($rest == 1) { # warn "\tnode " . $node->as_string . " has $rest rdf:rest links when 1 was expected\n"; return 0; } my $in = $model->count_statements( undef, undef, $node ); unless ($in < 2) { # warn "\tnode " . $node->as_string . " has $in incoming links when 2 were expected\n"; return 0; } if (not($head->equal( $node ))) { # It's OK for the head of a list to have any outgoing links (e.g. (1 2) ex:p "o" # but internal list elements should have only the expected links of rdf:first, # rdf:rest, and optionally an rdf:type rdf:List my $out = $model->count_statements( $node ); unless ($out == 2 or $out == 3) { # warn "\tnode " . $node->as_string . " has $out outgoing links when 2 or 3 were expected\n"; return 0; } if ($out == 3) { my $type = $model->count_statements( $node, $rdf->type, $rdf->List ); unless ($type == 1) { # warn "\tnode " . $node->as_string . " has more outgoing links than expected\n"; return 0; } } } my @links = $model->objects_for_predicate_list( $node, $rdf->first, $rdf->rest ); foreach my $l (@links) { if ($list_elements{ $l->as_string }) { warn $node->as_string . " is repeated in the list" if ($debug); return 0; } } ($node) = $model->objects_for_predicate_list( $node, $rdf->rest ); unless (blessed($node)) { # warn "\tno valid rdf:rest object found"; return 0; } # warn "\tmoving on to rdf:rest object " . $node->as_string . "\n"; } # warn "\tlooks like a valid rdf:List\n"; return 1; } sub _turtle_rdf_list { my $self = shift; my $sink = shift; my $head = shift; my $model = shift; my $seen = shift; my $level = shift; my $tab = shift; my %args = @_; my $node = $head; my $count = 0; $sink->emit('('); until ($node->equal( $rdf->nil )) { if ($count) { $sink->emit(' '); } my ($value) = $model->objects_for_predicate_list( $node, $rdf->first ); $self->_serialize_object_to_file( $sink, $value, $seen, $level, $tab, %args ); $seen->{ $node->as_string }++; ($node) = $model->objects_for_predicate_list( $node, $rdf->rest ); $count++; } $sink->emit(')'); } sub _node_concise_string { my $self = shift; my $obj = shift; if ($obj->is_literal and $obj->has_datatype) { my $dt = $obj->literal_datatype; if ($dt =~ m<^http://www.w3.org/2001/XMLSchema#(integer|double|decimal)$> and $obj->is_canonical_lexical_form) { my $value = $obj->literal_value; return $value; } else { my $dtr = iri($dt); my $literal = $obj->literal_value; my $qname; try { my ($ns,$local) = $dtr->qname; if (blessed($self) and exists $self->{ns}{$ns}) { $qname = join(':', $self->{ns}{$ns}, $local); $self->{used_ns}{ $self->{ns}{$ns} }++; } } catch RDF::Trine::Error with {}; if ($qname) { my $escaped = $obj->_unicode_escape( $literal ); return qq["$escaped"^^$qname]; } } } elsif ($obj->isa('RDF::Trine::Node::Resource')) { my $value; try { my ($ns,$local) = $obj->qname; if (blessed($self) and exists $self->{ns}{$ns}) { $value = join(':', $self->{ns}{$ns}, $local); $self->{used_ns}{ $self->{ns}{$ns} }++; } } catch RDF::Trine::Error with {} otherwise {}; if ($value) { return $value; } } return; } =item C<< node_as_concise_string >> Returns a string representation using common Turtle syntax shortcuts (e.g. for numeric literals). =cut sub node_as_concise_string { my $self = shift; my $obj = shift; my $str = $self->_node_concise_string( $obj ); if (defined($str)) { return $str; } else { return $obj->as_ntriples; } } sub _turtle { my $self = shift; my $sink = shift; my $obj = shift; my $pos = shift; my $seen = shift; my $level = shift; my $tab = shift; my %args = @_; if ($obj->isa('RDF::Trine::Node::Resource') and $pos == 1 and $obj->uri_value eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { $sink->emit('a'); return; } elsif ($obj->isa('RDF::Trine::Node::Blank') and $pos == 0) { if (my $model = $args{ model }) { my $count = $model->count_statements( undef, undef, $obj ); my $rec = $model->count_statements( $obj, undef, $obj ); # XXX if $count == 1, then it would be better to ignore this triple for now, since it's a 'single-owner' bnode, and better serialized as a '[ ... ]' bnode in the object position as part of the 'owning' triple if ($count < 1 and $rec == 0) { $sink->emit('[]'); return; } } } elsif (defined(my $str = $self->_node_concise_string( $obj ))) { $sink->emit($str); return; } $sink->emit($obj->as_ntriples); return; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Serializer/NTriples/Canonical.pm000644 000765 000024 00000020104 12171744402 023641 0ustar00gregstaff000000 000000 =head1 NAME RDF::Trine::Serializer::NTriples::Canonical - Canonical representation of an RDF model =head1 VERSION This document describes RDF::Trine::Serializer::NTriples::Canonical version 1.007 =head1 SYNOPSIS use RDF::Trine::Serializer::NTriples::Canonical; my $serializer = RDF::Trine::Serializer::NTriples->new( onfail=>'truncate' ); $serializer->serialize_model_to_file(FH, $model); =head1 DESCRIPTION This module produces a canonical string representation of an RDF graph. If the graph contains blank nodes, sometimes there is no canonical representation that can be produced. The 'onfail' option allows you to decide what is done in those circumstances: =over 8 =item * truncate - drop problematic triples and only serialize a subgraph. =item * append - append problematic triples to the end of graph. The result will be non-canonical. This is the default behaviour. =item * space - As with 'append', but leave a blank line separating the canonical and non-canonical portions of the graph. =item * die - cause a fatal error. =back Other than the 'onfail' option, this package has exactly the same interface as L, providing C and C methods. This package will be considerably slower than the non-canonicalising serializer though, so should only be used for small to medium-sized graphs, and only when you need canonicalisation (e.g. for side-by-side comparison of two graphs to check they're isomorphic; or creating a canonical representation for digital signing). =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Serializer::NTriples::Canonical; use 5.010; use strict; use warnings; use Carp; use RDF::Trine; use base qw(RDF::Trine::Serializer::NTriples); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Serializer::serializer_names{ 'ntriples-canonical' } = __PACKAGE__; # foreach my $type (qw(text/plain)) { # $RDF::Trine::Serializer::media_types{ $type } = __PACKAGE__; # } } ###################################################################### =item C<< new ( [ onfail => $rule ] ) >> Returns a new Canonical N-Triples serializer object. If specified, the value of the 'onfail' argument dictates the handling of blank nodes with no canonical representation. The allowable rule values are 'truncate', 'append', 'space', and 'die', and their respective behaviour is described in L above. =cut sub new { my $class = shift; my %opts = (onfail => ''); while (@_) { my $field = lc shift; my $value = shift; $opts{$field} = $value; } return bless \%opts, $class; } =item C<< serialize_model_to_file ( $fh, $model ) >> Serializes the C<$model> to canonical NTriples, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_model_to_file { my $self = shift; my $file = shift; my $model = shift; my $string = $self->serialize_model_to_string($model); print {$file} $string; } =item C<< serialize_model_to_string ( $model ) >> Serializes the C<$model> to canonical NTriples, returning the result as a string. =cut sub serialize_model_to_string { my $self = shift; my $model = shift; my $blankNodes = {}; my @statements; my $stream = $model->as_stream; while (my $ST = $stream->next) { push @statements, { 'trine' => $ST }; if ($ST->subject->isa('RDF::Trine::Node::Blank')) { $blankNodes->{ $ST->subject->blank_identifier }->{'trine'} = $ST->subject; } if ($ST->object->isa('RDF::Trine::Node::Blank')) { $blankNodes->{ $ST->object->blank_identifier }->{'trine'} = $ST->object; } } my %lexCounts; foreach my $st (@statements) { # Really need to canonicalise typed literals as per XSD. $st->{'lex'} = sprintf('%s %s %s', ($st->{'trine'}->subject->isa('RDF::Trine::Node::Blank') ? '~' : $st->{'trine'}->subject->as_ntriples), $st->{'trine'}->predicate->as_ntriples, ($st->{'trine'}->object->isa('RDF::Trine::Node::Blank') ? '~' : $st->{'trine'}->object->as_ntriples) ); $lexCounts{ $st->{'lex'} }++; } my $blankNodeCount = scalar keys %$blankNodes; my $blankNodeLength = length "$blankNodeCount"; my $blankNodePattern = '_:g%0'.$blankNodeLength.'d'; my $hardNodePattern = '_:h%0'.$blankNodeLength.'d'; @statements = sort { $a->{'lex'} cmp $b->{'lex'} } @statements; my $genSymCounter = 1; foreach my $st (@statements) { next unless $lexCounts{ $st->{'lex'} } == 1; if ($st->{'trine'}->object->isa('RDF::Trine::Node::Blank')) { unless (defined $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'}) { $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'} = sprintf($blankNodePattern, $genSymCounter); $genSymCounter++; } my $b = $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'}; $st->{'lex'} =~ s/\~$/$b/; } if ($st->{'trine'}->subject->isa('RDF::Trine::Node::Blank')) { unless (defined $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'}) { $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'} = sprintf($blankNodePattern, $genSymCounter); $genSymCounter++; } my $b = $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'}; $st->{'lex'} =~ s/^\~/$b/; } } foreach my $st (@statements) { if ($st->{'lex'} =~ /\~$/) { if (defined $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'}) { my $b = $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'}; $st->{'lex'} =~ s/\~$/$b/; } } if ($st->{'lex'} =~ /^\~/) { if (defined $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'}) { my $b = $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'}; $st->{'lex'} =~ s/^\~/$b/; } } } @statements = sort { $a->{'lex'} cmp $b->{'lex'} } @statements; my @canonicalStatements; my @otherStatements; foreach my $st (@statements) { if ($st->{'lex'} =~ /(^\~)|(\~$)/) { if (lc $self->{'onfail'} eq 'die') { croak "Model could not be canonicalised"; } elsif (lc $self->{'onfail'} eq 'truncate') { next; } if ($st->{'lex'} =~ /\~$/) { unless (defined $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'}) { $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'} = sprintf($hardNodePattern, $genSymCounter); $genSymCounter++; } my $b = $blankNodes->{ $st->{'trine'}->object->blank_identifier }->{'lex'}; $st->{'lex'} =~ s/\~$/$b/; } if ($st->{'lex'} =~ /^\~/) { unless (defined $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'}) { $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'} = sprintf($hardNodePattern, $genSymCounter); $genSymCounter++; } my $b = $blankNodes->{ $st->{'trine'}->subject->blank_identifier }->{'lex'}; $st->{'lex'} =~ s/^\~/$b/; } push @otherStatements, $st; } else { push @canonicalStatements, $st; } } my $rv = ''; foreach my $st (@canonicalStatements) { $rv .= $st->{'lex'} . " .\r\n"; } $rv .= "\r\n" if (defined($self->{'onfail'}) && (lc $self->{'onfail'} eq 'space')); foreach my $st (@otherStatements) { $rv .= $st->{'lex'} . " .\r\n"; } return $rv; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO I, Jeremey J Carroll, Digital Media Systems Laboratory, HB Laboratories Bristol. HPL-2003-142, 23 July 2003. L. L, L. L. =head1 AUTHOR Toby Inkster, Etobyink@cpan.orgE =head1 COPYRIGHT AND LICENSE Copyright (c) 2010 Toby Inkster This library is free software; you can redistribute it and/or modify it under the same terms as Perl itself, either Perl version 5.8.1 or, at your option, any later version of Perl 5 you may have available. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/NQuads.pm000644 000765 000024 00000006663 12171744402 020546 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::NQuads # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::NQuads - N-Quads Parser =head1 VERSION This document describes RDF::Trine::Parser::NQuads version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'nquads' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::NQuads; use strict; use warnings; use utf8; use base qw(RDF::Trine::Parser::NTriples); use Carp; use Encode qw(decode); use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed reftype); use RDF::Trine qw(literal); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Parser::parser_names{ 'nquads' } = __PACKAGE__; $RDF::Trine::Parser::format_uris{ 'http://sw.deri.org/2008/07/n-quads/#n-quads' } = __PACKAGE__; foreach my $ext (qw(nq)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } my $class = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'text/x-nquads'; foreach my $type (qw(text/x-nquads)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } } ###################################################################### =item C<< parse_into_model ( $base_uri, $data, $model ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. For each RDF triple or quad parsed, will call C<< $model->add_statement( $statement ) >>. =cut sub parse_into_model { my $proto = shift; my $self = blessed($proto) ? $proto : $proto->new(); my $uri = shift; if (blessed($uri) and $uri->isa('RDF::Trine::Node::Resource')) { $uri = $uri->uri_value; } my $input = shift; my $model = shift; my %args = @_; if (my $context = $args{'context'}) { throw RDF::Trine::Error::ParserError -text => "Cannot pass a context node to N-Quads parse_into_model method"; } my $handler = sub { my $st = shift; $model->add_statement( $st ); }; return $self->parse( $uri, $input, $handler ); } sub _emit_statement { my $self = shift; my $handler = shift; my $nodes = shift; my $lineno = shift; my $st; if ($self->{canonicalize}) { if ($nodes->[2]->isa('RDF::Trine::Node::Literal') and $nodes->[2]->has_datatype) { my $value = $nodes->[2]->literal_value; my $dt = $nodes->[2]->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $nodes->[2] = literal( $canon, undef, $dt ); } } if (scalar(@$nodes) == 3) { $st = RDF::Trine::Statement->new( @$nodes ); } elsif (scalar(@$nodes) == 4) { $st = RDF::Trine::Statement::Quad->new( @$nodes ); } else { # warn Dumper($nodes); throw RDF::Trine::Error::ParserError -text => qq[Not valid N-Quads data at line $lineno]; } $handler->( $st ); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/NTriples.pm000644 000765 000024 00000021152 12171744402 021101 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::NTriples # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::NTriples - N-Triples Parser =head1 VERSION This document describes RDF::Trine::Parser::NTriples version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'ntriples' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::NTriples; use strict; use warnings; use utf8; use base qw(RDF::Trine::Parser); use Carp; use Encode qw(decode); use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed reftype); use RDF::Trine qw(literal); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Parser::parser_names{ 'ntriples' } = __PACKAGE__; foreach my $ext (qw(nt)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } my $class = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'text/plain'; foreach my $type (qw(text/plain)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } $RDF::Trine::Parser::format_uris{ 'http://www.w3.org/ns/formats/N-Triples' } = __PACKAGE__; } ###################################################################### =item C<< new >> =cut sub new { my $class = shift; my $self = bless( {@_}, $class); return $self; } =item C<< parse_into_model ( $base_uri, $data, $model [, context => $context] ) >> Parses the C<< $data >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =item C<< parse_file_into_model ( $base_uri, $fh, $model [, context => $context] ) >> Parses all data read from the filehandle C<< $fh >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut =item C<< parse ( $base_uri, $rdf, \&handler ) >> =cut sub parse { my $self = shift; my $base = shift; my $string = shift; my $handler = shift; open( my $fh, '<:encoding(UTF-8)', \$string ); return $self->parse_file( $base, $fh, $handler ); } =item C<< parse_node ( $string, $base ) >> Returns the RDF::Trine::Node object corresponding to the node whose N-Triples serialization is found at the beginning of C<< $string >>. =cut sub parse_node { my $self = shift; my $string = shift; my $uri = shift; my $n = $self->_eat_node( $uri, 0, $string ); return $n; } =item C<< parse_file ( $base, $fh, \&handler ) >> =cut sub parse_file { my $self = shift; my $base = shift; my $fh = shift; my $handler = shift; unless (ref($fh)) { my $filename = $fh; undef $fh; open( $fh, '<:encoding(UTF-8)', $filename ) or throw RDF::Trine::Error::ParserError -text => $!; } my $lineno = 0; no warnings 'uninitialized'; while (defined(my $line = <$fh>)) { LINE: ($line, my @extra) = split(/\r\n|\r|\n/, $line, 2); $lineno++; next unless (defined($line) and length($line)); next unless ($line =~ /\S/); chomp($line); $line =~ s/^\s*//; $line =~ s/\s*$//; next if ($line =~ /^#/); my @nodes = (); try { while (my $n = $self->_eat_node( $base, $lineno, $line )) { push(@nodes, $n); $line =~ s/^\s*//; } }; $line =~ s/^\s//g; unless ($line eq '.') { # Carp::cluck 'N-Triples parser failed: ' . Dumper(\@nodes, $line); throw RDF::Trine::Error::ParserError -text => "Missing expected '.' at line $lineno"; } $self->_emit_statement( $handler, \@nodes, $lineno ); if (@extra) { $line = shift(@extra); goto LINE; } } } sub _emit_statement { my $self = shift; my $handler = shift; my $nodes = shift; my $lineno = shift; my $st; if (scalar(@$nodes) == 3) { if ($self->{canonicalize}) { if ($nodes->[2]->isa('RDF::Trine::Node::Literal') and $nodes->[2]->has_datatype) { my $value = $nodes->[2]->literal_value; my $dt = $nodes->[2]->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $nodes->[2] = literal( $canon, undef, $dt ); } } $st = RDF::Trine::Statement->new( @$nodes ); # } elsif (scalar(@$nodes) == 4) { # $st = RDF::Trine::Statement::Quad->new( @$nodes ); } else { # warn Dumper($nodes); throw RDF::Trine::Error::ParserError -text => qq[Not valid N-Triples data at line $lineno]; } $handler->( $st ); } sub _eat_node { my $self = shift; my $base = shift; my $lineno = shift; $_[0] =~ s/^\s*//; return unless length($_[0]); my $char = substr($_[0], 0, 1); return if ($char eq '.'); if ($char eq '<') { my ($uri) = $_[0] =~ m/^<([^>]*)>/; substr($_[0], 0, length($uri)+2) = ''; return RDF::Trine::Node::Resource->new( _unescape($uri, $lineno) ); } elsif ($char eq '_') { my ($name) = $_[0] =~ m/^_:([A-Za-z][A-Za-z0-9]*)/; substr($_[0], 0, length($name)+2) = ''; return RDF::Trine::Node::Blank->new( $name ); } elsif ($char eq '"') { substr($_[0], 0, 1) = ''; my $value = decode('utf8', ''); while (length($_[0]) and substr($_[0], 0, 1) ne '"') { while ($_[0] =~ m/^([^"\\]+)/) { $value .= $1; substr($_[0],0,length($1)) = ''; } if (substr($_[0],0,1) eq '\\') { while ($_[0] =~ m/^\\(.)/) { if ($1 eq 't') { $value .= "\t"; substr($_[0],0,2) = ''; } elsif ($1 eq 'r') { $value .= "\r"; substr($_[0],0,2) = ''; } elsif ($1 eq 'n') { $value .= "\n"; substr($_[0],0,2) = ''; } elsif ($1 eq '"') { $value .= '"'; substr($_[0],0,2) = ''; } elsif ($1 eq '\\') { $value .= "\\"; substr($_[0],0,2) = ''; } elsif ($1 eq 'u') { $_[0] =~ m/^\\u([0-9A-Fa-f]{4})/ or throw RDF::Trine::Error::ParserError -text => qq[Bad N-Triples \\u escape at line $lineno, near "$_[0]"]; $value .= chr(oct('0x' . $1)); substr($_[0],0,6) = ''; } elsif ($1 eq 'U') { $_[0] =~ m/^\\U([0-9A-Fa-f]{8})/ or throw RDF::Trine::Error::ParserError -text => qq[Bad N-Triples \\U escape at line $lineno, near "$_[0]"]; $value .= chr(oct('0x' . $1)); substr($_[0],0,10) = ''; } else { throw RDF::Trine::Error::ParserError -text => qq[Not valid N-Triples escape character '\\$1' at line $lineno, near "$_[0]"]; } } } } if (substr($_[0],0,1) eq '"') { substr($_[0],0,1) = ''; } else { throw RDF::Trine::Error::ParserError -text => qq[Ending double quote not found at line $lineno]; } if ($_[0] =~ m/^@([a-z]+(-[a-zA-Z0-9]+)*)/) { my $lang = $1; substr($_[0],0,1+length($lang)) = ''; return RDF::Trine::Node::Literal->new($value, $lang); } elsif (substr($_[0],0,3) eq '^^<') { substr($_[0],0,3) = ''; my ($uri) = $_[0] =~ m/^([^>]*)>/; substr($_[0], 0, length($uri)+1) = ''; return RDF::Trine::Node::Literal->new($value, undef, $uri); } else { return RDF::Trine::Node::Literal->new($value); } } else { throw RDF::Trine::Error::ParserError -text => qq[Not valid N-Triples node start character '$char' at line $lineno, near "$_[0]"]; } } sub _unescape { my $string = shift; my $lineno = shift; my $value = ''; while (length($string)) { while ($string =~ m/^([^\\]+)/) { $value .= $1; substr($string,0,length($1)) = ''; } if (length($string)) { while ($string =~ m/^\\(.)/) { if ($1 eq 't') { $value .= "\t"; substr($string,0,2) = ''; } elsif ($1 eq 'r') { $value .= "\r"; substr($string,0,2) = ''; } elsif ($1 eq 'n') { $value .= "\n"; substr($string,0,2) = ''; } elsif ($1 eq '"') { $value .= '"'; substr($string,0,2) = ''; } elsif ($1 eq '\\') { $value .= "\\"; substr($string,0,2) = ''; } elsif ($1 eq 'u') { $string =~ m/^\\u([0-9A-F]{4})/ or throw RDF::Trine::Error::ParserError -text => qq[Bad N-Triples \\u escape at line $lineno, near "$_[0]"]; $value .= chr(oct('0x' . $1)); substr($string,0,6) = ''; } elsif ($1 eq 'U') { $string =~ m/^\\U([0-9A-F]{8})/ or throw RDF::Trine::Error::ParserError -text => qq[Bad N-Triples \\U escape at line $lineno, near "$_[0]"]; $value .= chr(oct('0x' . $1)); substr($string,0,10) = ''; } else { die $string; } } } } return $value; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/RDFa.pm000644 000765 000024 00000006562 12171744402 020125 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::RDFa # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::RDFa - RDFa Parser =head1 VERSION This document describes RDF::Trine::Parser::RDFa version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'rdfxml' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::RDFa; use strict; use warnings; use base qw(RDF::Trine::Parser); use Carp; use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed reftype); use Module::Load::Conditional qw[can_load]; use RDF::Trine qw(literal); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION, $HAVE_RDFA_PARSER); BEGIN { $VERSION = '1.007'; if (can_load( modules => { 'RDF::RDFa::Parser' => 0.30 })) { $HAVE_RDFA_PARSER = 1; $RDF::Trine::Parser::parser_names{ 'rdfa' } = __PACKAGE__; foreach my $ext (qw(html xhtml htm)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } my $class = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'application/xhtml+xml'; foreach my $type (qw(application/xhtml+xml text/html)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } $RDF::Trine::Parser::format_uris{ 'http://www.w3.org/ns/formats/RDFa' } = __PACKAGE__; } } ###################################################################### =item C<< new ( options => \%options ) >> Returns a new RDFa parser object with the supplied options. =cut sub new { my $class = shift; my %args = @_; unless ($HAVE_RDFA_PARSER) { throw RDF::Trine::Error -text => "Failed to load RDF::RDFa::Parser >= 0.30"; } my $self = bless( { %args }, $class); return $self; } =item C<< parse_into_model ( $base_uri, $data, $model [, context => $context] ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut =item C<< parse ( $base_uri, $rdf, \&handler ) >> =cut sub parse { my $self = shift; my $base = shift; my $string = shift; my $handler = shift; my $parser = RDF::RDFa::Parser->new($string, $base, $self->{'options'}); $parser->set_callbacks({ ontriple => sub { my ($p, $el, $st) = @_; if (reftype($handler) eq 'CODE') { if ($self->{canonicalize}) { my $o = $st->object; if ($o->isa('RDF::Trine::Node::Literal') and $o->has_datatype) { my $value = $o->literal_value; my $dt = $o->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $o = literal( $canon, undef, $dt ); $st->object( $o ); } } $handler->( $st ); } return 1; } }); $parser->consume; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/RDFJSON.pm000644 000765 000024 00000012522 12171744402 020447 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::RDFJSON # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::RDFJSON - RDF/JSON RDF Parser =head1 VERSION This document describes RDF::Trine::Parser::RDFJSON version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'RDF/JSON' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::RDFJSON; use strict; use warnings; no warnings 'redefine'; no warnings 'once'; use base qw(RDF::Trine::Parser); use URI; use Log::Log4perl; use RDF::Trine qw(literal); use RDF::Trine::Statement; use RDF::Trine::Namespace; use RDF::Trine::Node; use RDF::Trine::Error qw(:try); use Scalar::Util qw(blessed looks_like_number); use JSON; our ($VERSION, $rdf, $xsd); our ($r_boolean, $r_comment, $r_decimal, $r_double, $r_integer, $r_language, $r_lcharacters, $r_line, $r_nameChar_extra, $r_nameStartChar_minus_underscore, $r_scharacters, $r_ucharacters, $r_booltest, $r_nameStartChar, $r_nameChar, $r_prefixName, $r_qname, $r_resource_test, $r_nameChar_test); BEGIN { $VERSION = '1.007'; $RDF::Trine::Parser::parser_names{ 'rdfjson' } = __PACKAGE__; foreach my $ext (qw(json js)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } my $class = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'application/json'; foreach my $type (qw(application/json application/x-rdf+json)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } } =item C<< new >> Returns a new RDFJSON parser. =cut sub new { my $class = shift; my %args = @_; my $prefix = ''; if (defined($args{ bnode_prefix })) { $prefix = $args{ bnode_prefix }; } else { $prefix = $class->new_bnode_prefix(); } my $self = bless({ bindings => {}, bnode_id => 0, bnode_prefix => $prefix, @_ }, $class); return $self; } =item C<< parse_into_model ( $base_uri, $data, $model [, context => $context] ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut sub parse_into_model { my $proto = shift; my $self = blessed($proto) ? $proto : $proto->new(); my $uri = shift; if (blessed($uri) and $uri->isa('RDF::Trine::Node::Resource')) { $uri = $uri->uri_value; } my $input = shift; my $model = shift; my %args = @_; my $context = $args{'context'}; my $opts = $args{'json_opts'}; my $handler = sub { my $st = shift; if ($context) { my $quad = RDF::Trine::Statement::Quad->new( $st->nodes, $context ); $model->add_statement( $quad ); } else { $model->add_statement( $st ); } }; return $self->parse( $uri, $input, $handler, $opts ); } =item C<< parse ( $base_uri, $rdf, \&handler ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. Calls the C<< triple >> method for each RDF triple parsed. This method does nothing by default, but can be set by using one of the default C<< parse_* >> methods. =cut sub parse { my $self = shift; my $uri = shift; my $input = shift; my $handler = shift; my $opts = shift; my $index = eval { from_json($input, $opts) }; if ($@) { throw RDF::Trine::Error::ParserError -text => "$@"; } foreach my $s (keys %$index) { my $ts = ( $s =~ /^_:(.*)$/ ) ? RDF::Trine::Node::Blank->new($self->{bnode_prefix} . $1) : RDF::Trine::Node::Resource->new($s, $uri); foreach my $p (keys %{ $index->{$s} }) { my $tp = RDF::Trine::Node::Resource->new($p, $uri); foreach my $O (@{ $index->{$s}->{$p} }) { my $to; # $O should be a hashref, but we can do a little error-correcting. unless (ref $O) { if ($O =~ /^_:/) { $O = { 'value'=>$O, 'type'=>'bnode' }; } elsif ($O =~ /^[a-z0-9._\+-]{1,12}:\S+$/i) { $O = { 'value'=>$O, 'type'=>'uri' }; } elsif ($O =~ /^(.*)\@([a-z]{2})$/) { $O = { 'value'=>$1, 'type'=>'literal', 'lang'=>$2 }; } else { $O = { 'value'=>$O, 'type'=>'literal' }; } } if (lc $O->{'type'} eq 'literal') { $to = RDF::Trine::Node::Literal->new( $O->{'value'}, $O->{'lang'}, $O->{'datatype'}); } else { $to = ( $O->{'value'} =~ /^_:(.*)$/ ) ? RDF::Trine::Node::Blank->new($self->{bnode_prefix} . $1) : RDF::Trine::Node::Resource->new($O->{'value'}, $uri); } if ( $ts && $tp && $to ) { if ($self->{canonicalize}) { if ($to->isa('RDF::Trine::Node::Literal') and $to->has_datatype) { my $value = $to->literal_value; my $dt = $to->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $to = literal( $canon, undef, $dt ); } } my $st = RDF::Trine::Statement->new($ts, $tp, $to); $handler->($st); } } } } return; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Toby Inkster Gregory Williams =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/RDFXML.pm000644 000765 000024 00000061271 12171744402 020343 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::RDFXML # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::RDFXML - RDF/XML Parser =head1 VERSION This document describes RDF::Trine::Parser::RDFXML version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'rdfxml' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::RDFXML; use strict; use warnings; use base qw(RDF::Trine::Parser); use URI; use Carp; use Encode; use XML::SAX; use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed); use Module::Load::Conditional qw[can_load]; use RDF::Trine qw(literal); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION, $HAS_XML_LIBXML); BEGIN { $VERSION = '1.007'; $RDF::Trine::Parser::parser_names{ 'rdfxml' } = __PACKAGE__; foreach my $ext (qw(rdf xrdf rdfx)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } my $class = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'application/rdf+xml'; foreach my $type (qw(application/rdf+xml application/octet-stream)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } $RDF::Trine::Parser::format_uris{ 'http://www.w3.org/ns/formats/RDF_XML' } = __PACKAGE__; $HAS_XML_LIBXML = can_load( modules => { 'XML::LibXML' => 1.70, } ); } ###################################################################### =item C<< new >> =cut sub new { my $class = shift; my %args = @_; $class = ref($class) || $class; my $prefix = ''; if (defined($args{ BNodePrefix })) { $prefix = delete $args{ BNodePrefix }; } elsif (defined($args{ bnode_prefix })) { $prefix = delete $args{ bnode_prefix }; } else { $prefix = $class->new_bnode_prefix(); } my $saxhandler = RDF::Trine::Parser::RDFXML::SAXHandler->new( %args, bnode_prefix => $prefix ); my $p = XML::SAX::ParserFactory->parser(Handler => $saxhandler); my $self = bless( { saxhandler => $saxhandler, parser => $p, %args, }, $class); return $self; } =item C<< parse_into_model ( $base_uri, $data, $model [, context => $context] ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut sub parse_into_model { my $proto = shift; my $self = blessed($proto) ? $proto : $proto->new(); my $uri = shift; if (blessed($uri) and $uri->isa('RDF::Trine::Node::Resource')) { $uri = $uri->uri_value; } my $input = shift; my $model = shift; my %args = @_; my $context = $args{'context'}; my $handler = sub { my $st = shift; if ($context) { my $quad = RDF::Trine::Statement::Quad->new( $st->nodes, $context ); $model->add_statement( $quad ); } else { $model->add_statement( $st ); } }; $self->{saxhandler}->set_handler( $handler ); return $self->parse( $uri, $input, $handler ); } =item C<< parse ( $base_uri, $rdf, \&handler ) >> =cut sub parse { my $self = shift; my $base = shift; my $string = shift; my $handler = shift; unless ($string) { throw RDF::Trine::Error::ParserError -text => "No RDF/XML content supplied to parser."; } if ($base) { unless (blessed($base)) { $base = RDF::Trine::Node::Resource->new( $base ); } $self->{saxhandler}->push_base( $base ); } if ($handler) { $self->{saxhandler}->set_handler( $handler ); } eval { if (ref($string)) { $self->{parser}->parse_file( $string ); } else { $string = encode('UTF-8', $string, Encode::FB_CROAK); $self->{parser}->parse_string( $string ); } }; if ($@) { throw RDF::Trine::Error::ParserError -text => "$@"; } my $nodes = $self->{saxhandler}{nodes}; if ($nodes and scalar(@$nodes)) { warn Dumper($nodes); throw RDF::Trine::Error::ParserError -text => "node stack isn't empty after parse"; } my $expect = $self->{saxhandler}{expect}; if ($expect and scalar(@$expect) > 2) { warn Dumper($expect); throw RDF::Trine::Error::ParserError -text => "expect stack isn't empty after parse"; } } =item C<< parse_file ( $base_uri, $fh, \&handler ) >> Parses all data read from the filehandle C<< $fh >>, using the given C<< $base_uri >>. For each RDF statement parsed, C<< $handler->( $st ) >> is called. Note: The filehandle should NOT be opened with the ":encoding(UTF-8)" IO layer, as this is known to cause problems for XML::SAX. =cut sub parse_file { my $self = shift; my $base = shift; my $fh = shift; my $handler = shift; unless (ref($fh)) { my $filename = $fh; undef $fh; open( $fh, '<', $filename ) or throw RDF::Trine::Error::ParserError -text => $!; } if ($base) { unless (blessed($base)) { $base = RDF::Trine::Node::Resource->new( $base ); } $self->{saxhandler}->push_base( $base ); } if ($handler) { $self->{saxhandler}->set_handler( $handler ); } eval { $self->{parser}->parse_file( $fh ); }; if ($@) { throw RDF::Trine::Error::ParserError -text => "$@"; } my $nodes = $self->{saxhandler}{nodes}; if ($nodes and scalar(@$nodes)) { warn Dumper($nodes); throw RDF::Trine::Error::ParserError -text => "node stack isn't empty after parse"; } my $expect = $self->{saxhandler}{expect}; if ($expect and scalar(@$expect) > 2) { warn Dumper($expect); throw RDF::Trine::Error::ParserError -text => "expect stack isn't empty after parse"; } } package RDF::Trine::Parser::RDFXML::SAXHandler; use strict; use warnings; use base qw(XML::SAX::Base); use Data::Dumper; use Scalar::Util qw(blessed); use RDF::Trine::Namespace qw(rdf); use constant NIL => 0x00; use constant SUBJECT => 0x01; use constant PREDICATE => 0x02; use constant OBJECT => 0x04; use constant LITERAL => 0x08; use constant COLLECTION => 0x16; sub new { my $class = shift; my %args = @_; my $prefix = ''; if (defined($args{ BNodePrefix })) { $prefix = $args{ BNodePrefix }; } elsif (defined($args{ bnode_prefix })) { $prefix = $args{ bnode_prefix }; } my $self = bless( { expect => [ SUBJECT, NIL ], base => [], depth => 0, characters => '', prefix => $prefix, counter => 0, nodes => [], chars_ok => 0, }, $class ); if (my $ns = $args{ namespaces }) { $self->{namespaces} = $ns; } if (my $base = $args{ base }) { $self->push_base( $base ); } return $self; } sub new_expect { my $self = shift; my $new = shift; unshift( @{ $self->{expect} }, $new ); } sub old_expect { my $self = shift; shift( @{ $self->{expect} } ); } sub expect { my $self = shift; if (scalar(@{ $self->{expect} }) == 0) { Carp::cluck '********* expect stack is empty'; } return $self->{expect}[0]; } sub peek_expect { my $self = shift; return $self->{expect}[1]; } =begin private =item C<< start_element >> =cut sub start_element { my $self = shift; my $el = shift; my $l = Log::Log4perl->get_logger("rdf.trine.parser.rdfxml"); $l->trace('start_element ' . $el->{Name}); $self->{depth}++; unless ($self->expect == LITERAL) { $self->handle_scoped_values( $el ); } if ($self->{depth} == 1 and $el->{NamespaceURI} eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#' and $el->{LocalName} eq 'RDF') { # ignore the wrapping rdf:RDF element } else { my $prefix = $el->{Prefix}; my $expect = $self->expect; if ($expect == NIL) { $self->new_expect( $expect = SUBJECT ); } if ($expect == SUBJECT or $expect == OBJECT) { my $ns = $self->get_namespace( $prefix ); my $local = $el->{LocalName}; my $uri = join('', $ns, $local); my $node = $self->new_resource( $uri ); $l->trace("-> expect SUBJECT or OBJECT"); if ($self->expect == OBJECT) { if (defined($self->{characters}) and length(my $string = $self->{characters})) { if ($string =~ /\S/) { die "character data found before object element"; } } delete($self->{characters}); # get rid of any whitespace we saw before the element } my $node_id = $self->node_id( $el ); if ($self->peek_expect == COLLECTION) { my $list = $self->new_bnode; $l->trace("adding an OBJECT to a COLLECTION " . $list->sse . "\n"); if (my $last = $self->{ collection_last }[0]) { my $st = RDF::Trine::Statement->new( $last, $rdf->rest, $list ); $self->assert( $st ); } $self->{ collection_last }[0] = $list; my $st = RDF::Trine::Statement->new( $list, $rdf->first, $node_id ); $self->assert( $st ); $self->{ collection_head }[0] ||= $list; } elsif ($self->expect == OBJECT) { my $nodes = $self->{nodes}; my $st = RDF::Trine::Statement->new( @{ $nodes }[ $#{$nodes} - 1, $#{$nodes} ], $node_id ); $self->assert( $st ); } if ($uri eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#Description') { $l->trace("got rdf:Description of " . $node_id->as_string); } else { my $type = $node; $l->trace("got object node " . $node_id->as_string . " of type " . $node->as_string); # emit an rdf:type statement my $st = RDF::Trine::Statement->new( $node_id, $rdf->type, $node ); $self->assert( $st ); } push( @{ $self->{nodes} }, $node_id ); $self->parse_literal_property_attributes( $el, $node_id ); $self->new_expect( PREDICATE ); unshift(@{ $self->{seqs} }, 0); $l->trace('unshifting seq counter: ' . Dumper($self->{seqs})); } elsif ($self->expect == COLLECTION) { $l->logdie("-> expect COLLECTION"); } elsif ($self->expect == PREDICATE) { my $ns = $self->get_namespace( $prefix ); my $local = $el->{LocalName}; my $uri = join('', $ns, $local); my $node = $self->new_resource( $uri ); $l->trace("-> expect PREDICATE"); if ($node->uri_value eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#li') { my $id = ++(${ $self }{seqs}[0]); $node = $self->new_resource( 'http://www.w3.org/1999/02/22-rdf-syntax-ns#_' . $id ); } push( @{ $self->{nodes} }, $node ); if (my $data = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}datatype'}) { $self->{datatype} = $data->{Value}; } if (my $data = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}ID'}) { my $id = $data->{Value}; unshift(@{ $self->{reify_id} }, $id); } else { unshift(@{ $self->{reify_id} }, undef); } if (my $pt = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}parseType'}) { if ($pt->{Value} eq 'Resource') { # fake an enclosing object scope my $node = $self->new_bnode; my $nodes = $self->{nodes}; push( @$nodes, $node ); my $st = RDF::Trine::Statement->new( @{ $nodes }[ $#{$nodes} - 2 .. $#{$nodes} ] ); $self->assert( $st ); $self->new_expect( PREDICATE ); } elsif ($pt->{Value} eq 'Literal') { $self->{datatype} = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral'; my $depth = $self->{depth}; $self->{literal_depth} = $depth - 1; $self->new_expect( LITERAL ); } elsif ($pt->{Value} eq 'Collection') { my $depth = $self->{depth}; unshift( @{ $self->{ collection_head } }, undef ); unshift( @{ $self->{ collection_last } }, undef ); $self->new_expect( COLLECTION ); $self->new_expect( OBJECT ); } } elsif (my $data = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}resource'}) { # stash the uri away so that we can use it when we get the end_element call for this predicate my $uri = $self->new_resource( $data->{Value} ); $self->parse_literal_property_attributes( $el, $uri ); $self->{'rdf:resource'} = $uri; $self->new_expect( OBJECT ); $self->{chars_ok} = 1; } elsif (my $ndata = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}nodeID'}) { my $node_name = $ndata->{Value}; # stash the bnode away so that we can use it when we get the end_element call for this predicate my $bnode = $self->get_named_bnode( $node_name ); $self->parse_literal_property_attributes( $el, $uri ); $self->{'rdf:resource'} = $bnode; # the key 'rdf:resource' is a bit misused here, but both rdf:resource and rdf:nodeID use it for the same purpose, so... $self->new_expect( OBJECT ); $self->{chars_ok} = 1; } elsif (my $node = $self->parse_literal_property_attributes( $el )) { # fake an enclosing object scope my $nodes = $self->{nodes}; push( @$nodes, $node ); my $st = RDF::Trine::Statement->new( @{ $nodes }[ $#{$nodes} - 2 .. $#{$nodes} ] ); $self->assert( $st ); $self->new_expect( PREDICATE ); } else { $self->new_expect( OBJECT ); $self->{chars_ok} = 1; } } elsif ($self->expect == LITERAL) { my $tag; if ($el->{Prefix}) { $tag = join(':', @{ $el }{qw(Prefix LocalName)}); } else { $tag = $el->{LocalName}; } $self->{characters} .= '<' . $tag; my $attr = $el->{Attributes}; if (my $ns = $el->{NamespaceURI}) { my $abbr = $el->{Prefix}; unless ($self->{defined_literal_namespaces}{$abbr}{$ns}) { $self->{characters} .= ' xmlns'; if (length($abbr)) { $self->{characters} .= ':' . $abbr; } $self->{characters} .= '="' . $ns . '"'; $self->{defined_literal_namespaces}{$abbr}{$ns}++; } } if (%$attr) { foreach my $k (keys %$attr) { $self->{characters} .= ' '; my $el = $attr->{ $k }; my $prop; if ($el->{Prefix}) { $prop = join(':', @{ $el }{qw(Prefix LocalName)}); } else { $prop = $el->{LocalName}; } $self->{characters} .= $prop . '="' . $el->{Value} . '"'; } } $self->{characters} .= '>'; } else { die "not sure what type of token is expected"; } # warn "GOT: $uri\n"; # warn 'start_element: ' . Dumper($el); # warn 'namespaces: ' . Dumper($self->{_namespaces}); } } =item C<< end_element >> =cut sub end_element { my $self = shift; my $el = shift; $self->{depth}--; my $l = Log::Log4perl->get_logger("rdf.trine.parser.rdfxml"); $l->trace("($self->{depth}) end_element " . $el->{Name}); my $cleanup = 0; my $expect = $self->expect; if ($expect == SUBJECT) { $l->trace("-> expect SUBJECT"); $self->old_expect; $cleanup = 1; $self->{chars_ok} = 0; shift(@{ $self->{reify_id} }); } elsif ($expect == PREDICATE) { $l->trace("-> expect PREDICATE"); $self->old_expect; if ($self->expect == PREDICATE) { # we're closing a parseType=Resource block, so take off the extra implicit node. pop( @{ $self->{nodes} } ); } else { $l->trace('shifting seq counter: ' . Dumper($self->{seqs})); shift(@{ $self->{seqs} }); } $cleanup = 1; $self->{chars_ok} = 0; } elsif ($expect == OBJECT or ($expect == LITERAL and $self->{literal_depth} == $self->{depth})) { if (exists $self->{'rdf:resource'}) { $l->trace("-> predicate used rdf:resource or rdf:nodeID\n"); my $uri = delete $self->{'rdf:resource'}; my $nodes = $self->{nodes}; my $st = RDF::Trine::Statement->new( @{ $nodes }[ $#{$nodes} - 1, $#{$nodes} ], $uri ); delete $self->{characters}; $self->assert( $st ); } $l->trace("-> expect OBJECT"); $self->old_expect; if (defined($self->{characters})) { my $string = $self->{characters}; my $literal = $self->new_literal( $string ); $l->trace('node stack: ' . Dumper($self->{nodes})); my $nodes = $self->{nodes}; my $st = RDF::Trine::Statement->new( @{ $nodes }[ $#{$nodes} - 1, $#{$nodes} ], $literal ); $self->assert( $st ); delete($self->{characters}); delete $self->{datatype}; delete $self->{defined_literal_namespaces}; } if ($self->expect == COLLECTION) { # We were expecting an object, but got an end_element instead. # after poping the OBJECT expectation, we see we were expecting objects in a COLLECTION. # so we're ending the COLLECTION here: $self->old_expect; my $nodes = $self->{nodes}; my $head = $self->{ collection_head }[0] || $rdf->nil; my @nodes = (@{ $nodes }[ $#{$nodes} - 1, $#{$nodes} ], $head); my $st = RDF::Trine::Statement->new( @nodes ); $self->assert( $st ); if (my $last = $self->{ collection_last }[0]) { my @nodes = ( $last, $rdf->rest, $rdf->nil ); my $st = RDF::Trine::Statement->new( @nodes ); $self->assert( $st ); } shift( @{ $self->{ collection_last } } ); shift( @{ $self->{ collection_head } } ); } $cleanup = 1; $self->{chars_ok} = 0; shift(@{ $self->{reify_id} }); } elsif ($expect == COLLECTION) { shift( @{ $self->{collections} } ); $self->old_expect; $l->trace("-> expect COLLECTION"); } elsif ($expect == LITERAL) { my $tag; if ($el->{Prefix}) { $tag = join(':', @{ $el }{qw(Prefix LocalName)}); } else { $tag = $el->{LocalName}; } $self->{characters} .= ''; $cleanup = 0; } else { die "how did we get here?"; } if ($cleanup) { pop( @{ $self->{nodes} } ); $self->pop_namespace_pad(); $self->pop_language(); $self->pop_base(); } } sub characters { my $self = shift; my $data = shift; my $expect = $self->expect; my $l = Log::Log4perl->get_logger("rdf.trine.parser.rdfxml"); if ($expect == LITERAL or ($expect == OBJECT and $self->{chars_ok})) { $l->trace("got character data ($expect): <<$data->{Data}>>\n"); my $chars = $data->{Data}; $self->{characters} .= $chars; } } sub parse_literal_property_attributes { my $self = shift; my $el = shift; my $node_id = shift || $self->new_bnode; my @keys = grep { not(m<[{][}](xmlns|about)>) } grep { not(m<[{]http://www.w3.org/1999/02/22-rdf-syntax-ns#[}](resource|about|ID|datatype|nodeID)>) } grep { not(m<[{]http://www.w3.org/XML/1998/namespace[}](base|lang)>) } keys %{ $el->{Attributes} }; my $asserted = 0; unshift(@{ $self->{reify_id} }, undef); # don't reify any of these triples foreach my $k (@keys) { my $data = $el->{Attributes}{ $k }; my $ns = $data->{NamespaceURI}; unless ($ns) { my $prefix = $data->{Prefix}; next unless (length($ns)); $ns = $self->get_namespace( $prefix ); } next if ($ns eq 'http://www.w3.org/XML/1998/namespace'); next if ($ns eq 'http://www.w3.org/2000/xmlns/'); my $local = $data->{LocalName}; my $uri = join('', $ns, $local); my $value = $data->{Value}; my $pred = $self->new_resource( $uri ); if ($uri eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#type') { # rdf:type is a special case -- it produces a resource instead of a literal my $res = $self->new_resource( $value ); my $st = RDF::Trine::Statement->new( $node_id, $pred, $res ); $self->assert( $st ); } else { my $lit = $self->new_literal( $value ); my $st = RDF::Trine::Statement->new( $node_id, $pred, $lit ); $self->assert( $st ); } $asserted++; } shift(@{ $self->{reify_id} }); return ($asserted ? $node_id : 0); } sub set_handler { my $self = shift; my $handler = shift; $self->{sthandler} = $handler; } sub assert { my $self = shift; my $st = shift; my $l = Log::Log4perl->get_logger("rdf.trine.parser.rdfxml"); $l->debug('[rdfxml parser] ' . $st->as_string); if ($self->{sthandler}) { if ($self->{canonicalize}) { my $o = $st->object; if ($o->isa('RDF::Trine::Node::Literal') and $o->has_datatype) { my $value = $o->literal_value; my $dt = $o->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $o = literal( $canon, undef, $dt ); $st->object( $o ); } } $self->{sthandler}->( $st ); if (defined(my $id = $self->{reify_id}[0])) { my $stid = $self->new_resource( "#$id" ); my $tst = RDF::Trine::Statement->new( $stid, $rdf->type, $rdf->Statement ); my $sst = RDF::Trine::Statement->new( $stid, $rdf->subject, $st->subject ); my $pst = RDF::Trine::Statement->new( $stid, $rdf->predicate, $st->predicate ); my $ost = RDF::Trine::Statement->new( $stid, $rdf->object, $st->object ); foreach ($tst, $sst, $pst, $ost) { $self->{sthandler}->( $_ ); } $self->{reify_id}[0] = undef; # now that we've used this reify ID, get rid of it (because we don't want it used again) } } } sub node_id { my $self = shift; my $el = shift; if ($el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about'}) { my $uri = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}about'}{Value}; return $self->new_resource( $uri ); } elsif ($el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}ID'}) { my $uri = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}ID'}{Value}; return $self->new_resource( '#' . $uri ); } elsif ($el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}nodeID'}) { my $name = $el->{Attributes}{'{http://www.w3.org/1999/02/22-rdf-syntax-ns#}nodeID'}{Value}; return $self->get_named_bnode( $name ); } else { return $self->new_bnode; } } sub handle_scoped_values { my $self = shift; my $el = shift; my %new; { # xml:base my $base = ''; if (exists($el->{Attributes}{'{http://www.w3.org/XML/1998/namespace}base'})) { my $uri = $el->{Attributes}{'{http://www.w3.org/XML/1998/namespace}base'}{Value}; $base = $self->new_resource( $uri ); } $self->push_base( $base ); } { # language my $lang = ''; if (exists($el->{Attributes}{'{http://www.w3.org/XML/1998/namespace}lang'})) { $lang = $el->{Attributes}{'{http://www.w3.org/XML/1998/namespace}lang'}{Value}; } $self->push_language( $lang ); } { # namespaces my @ns = grep { m<^[{]http://www.w3.org/2000/xmlns/[}]> } (keys %{ $el->{Attributes} }); foreach my $n (@ns) { my ($prefix) = substr($n, 31); my $value = $el->{Attributes}{$n}{Value}; $new{ $prefix } = $value; if (blessed(my $ns = $self->{namespaces})) { unless ($ns->namespace_uri($prefix)) { $ns->add_mapping( $prefix => $value ); } } } if (exists($el->{Attributes}{'{}xmlns'})) { my $value = $el->{Attributes}{'{}xmlns'}{Value}; $new{ '' } = $value; } $self->push_namespace_pad( \%new ); } } sub push_base { my $self = shift; my $base = shift; if ($base) { my $uri = (blessed($base) and $base->isa('URI')) ? $base : new URI ($base->uri_value ); $uri->fragment( undef ); $base = RDF::Trine::Node::Resource->new( "$uri" ); } unshift( @{ $self->{base} }, $base ); } sub pop_base { my $self = shift; shift( @{ $self->{base} } ); } sub get_base { my $self = shift; foreach my $level (0 .. $#{ $self->{base} }) { my $base = $self->{base}[ $level ]; if (length($base)) { return $base; } } return (); } sub push_language { my $self = shift; my $lang = shift; unshift( @{ $self->{language} }, $lang ); } sub pop_language { my $self = shift; shift( @{ $self->{language} } ); } sub get_language { my $self = shift; foreach my $level (0 .. $#{ $self->{language} }) { my $lang = $self->{language}[ $level ]; if (length($lang)) { return $lang; } } return ''; } sub push_namespace_pad { my $self = shift; my $pad = shift; unshift( @{ $self->{_namespaces} }, $pad ); } sub pop_namespace_pad { my $self = shift; shift( @{ $self->{_namespaces} } ); } sub get_namespace { my $self = shift; my $prefix = shift; foreach my $level (0 .. $#{ $self->{_namespaces} }) { my $pad = $self->{_namespaces}[ $level ]; if (exists($pad->{ $prefix })) { my $uri = $pad->{ $prefix }; return $uri; } } throw RDF::Trine::Error::ParserError -text => "Unknown namespace: $prefix"; } sub new_bnode { my $self = shift; if (my $prefix = $self->{prefix}) { my $id = $prefix . ++$self->{counter}; return RDF::Trine::Node::Blank->new( $id ); } else { return RDF::Trine::Node::Blank->new(); } } sub new_literal { my $self = shift; my $string = shift; my @args = (undef, undef); if (my $dt = $self->{datatype}) { # datatype $args[1] = $dt; if ($dt eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral') { if ($HAS_XML_LIBXML) { eval { if ($string =~ m/^load_xml(string => $string); my $canon = $doc->toStringEC14N(1); $string = $canon; } }; if ($@) { warn "Cannot canonicalize XMLLiteral: $@" . Dumper($string); } } } } elsif (my $lang = $self->get_language) { $args[0] = $lang; } my $literal = RDF::Trine::Node::Literal->new( $string, @args ); } sub new_resource { my $self = shift; my $uri = shift; my @base = $self->get_base; my $res = RDF::Trine::Node::Resource->new( $uri, @base ); return $res; } sub get_named_bnode { my $self = shift; my $name = shift; return ($self->{named_bnodes}{ $name } ||= $self->new_bnode); } 1; __END__ =end private =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/Redland.pm000644 000765 000024 00000014546 12171744402 020723 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::Redland # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::Redland - RDF Parser using the Redland library =head1 VERSION This document describes RDF::Trine::Parser::Redland version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; use RDF::Trine::Parser::Redland; # to overwrite internal dispatcher # Redland does turtle, ntriples, trig and rdfa as well my $parser = RDF::Trine::Parser->new( 'rdfxml' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::Redland; use strict; use warnings; use base qw(RDF::Trine::Parser); use Carp; use Data::Dumper; use Log::Log4perl; use Scalar::Util qw(blessed reftype); use RDF::Trine qw(literal); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION, $HAVE_REDLAND_PARSER, %FORMATS); BEGIN { %FORMATS = ( rdfxml => [ 'RDF::Trine::Parser::Redland::RDFXML', 'http://www.w3.org/ns/formats/RDF_XML', [qw(application/rdf+xml)], [qw(rdf xrdf rdfx)] ], ntriples => [ 'RDF::Trine::Parser::Redland::NTriples', 'http://www.w3.org/ns/formats/data/N-Triples', [qw(text/plain)], [qw(nt)] ], turtle => [ 'RDF::Trine::Parser::Redland::Turtle', 'http://www.w3.org/ns/formats/Turtle', [qw(application/x-turtle application/turtle text/turtle)], [qw(ttl)] ], trig => [ 'RDF::Trine::Parser::Redland::Trig', undef, [], [qw(trig)] ], librdfa => [ 'RDF::Trine::Parser::Redland::RDFa', 'http://www.w3.org/ns/formats/data/RDFa', [], #[qw(application/xhtml+xml)], [], #[qw(html xhtml)] ], ); $VERSION = '1.007'; for my $format (keys %FORMATS) { $RDF::Trine::Parser::parser_names{$format} = $FORMATS{$format}[0]; $RDF::Trine::Parser::format_uris{ $FORMATS{$format}[1] } = $FORMATS{$format}[0] if defined $FORMATS{$format}[1]; map { $RDF::Trine::Parser::media_types{$_} = $FORMATS{$format}[0] } (@{$FORMATS{$format}[2]}); map { $RDF::Trine::Parser::file_extensions{$_} = $FORMATS{$format}[0] } (@{$FORMATS{$format}[3]}); } unless ($ENV{RDFTRINE_NO_REDLAND}) { ## no critic eval "use RDF::Redland 1.000701;"; unless ($@) { $HAVE_REDLAND_PARSER = 1; } ## use critic } } ###################################################################### =item C<< new ( options => \%options ) >> Returns a new Redland parser object with the supplied options. Use the C option to tell Redland which parser it should use. =cut sub new { my $class = shift; my %args = @_; unless ($HAVE_REDLAND_PARSER) { throw RDF::Trine::Error -text => "Failed to load RDF::Redland >= 1.0.7.1"; } unless (defined $args{name}) { throw RDF::Trine::Error -text => "Redland parser needs to know which format it's parsing!"; } unless ($FORMATS{$args{name}}) { throw RDF::Trine::Error -text => "Unrecognized format name $args{name} for Redland parser"; } my $parser = RDF::Redland::Parser->new($args{name}) or throw RDF::Trine::Error -text => "Could not load a Redland $args{name} parser."; #warn "sup dawgs"; my $self = bless( { %args }, $class); return $self; } =item C<< parse_into_model ( $base_uri, $data, $model [, context => $context] ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. For each RDF statement parsed, will call C<< $model->add_statement( $statement ) >>. =cut =item C<< parse ( $base_uri, $rdf, \&handler ) >> =cut sub parse { my $self = shift; my $base = shift; my $string = shift; my $handler = shift; my $parser = RDF::Redland::Parser->new($self->{name}); my $null_base = 'urn:uuid:1d1e755d-c622-4610-bae8-40261157687b'; if ($base and blessed($base) and $base->isa('URI')) { $base = $base->as_string; } $base = RDF::Redland::URI->new(defined $base ? $base : $null_base); my $stream = eval { $parser->parse_string_as_stream($string, $base) }; if ($@) { throw RDF::Trine::Error::ParserError -text => $@; } while ($stream and !$stream->end) { #my $context = $stream->context; #warn $context; my $stmt = RDF::Trine::Statement->from_redland($stream->current); if ($self->{canonicalize}) { my $o = $stmt->object; # basically copied from RDF::Trine::Parser::Turtle if ($o->isa('RDF::Trine::Node::Literal') and $o->has_datatype) { my $value = $o->literal_value; my $dt = $o->literal_datatype; my $canon = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); $o = literal( $canon, undef, $dt ); $stmt->object($o); } } # run handler $handler->($stmt) if ($handler and reftype($handler) eq 'CODE'); $stream->next; } undef $stream; if (my $map = $self->{ namespaces }) { my %seen = $parser->namespaces_seen; while (my ($ns, $uri) = each(%seen)) { $map->add_mapping( $ns => $uri->as_string ); } } return; } package RDF::Trine::Parser::Redland::RDFXML; use strict; use warnings; use base qw(RDF::Trine::Parser::Redland); sub new { shift->SUPER::new( @_, name => 'rdfxml' ) } package RDF::Trine::Parser::Redland::NTriples; use strict; use warnings; use base qw(RDF::Trine::Parser::Redland); sub new { shift->SUPER::new( @_, name => 'ntriples' ) } package RDF::Trine::Parser::Redland::Turtle; use strict; use warnings; use base qw(RDF::Trine::Parser::Redland); sub new { shift->SUPER::new( @_, name => 'turtle' ) } package RDF::Trine::Parser::Redland::Trig; use strict; use warnings; use base qw(RDF::Trine::Parser::Redland); sub new { shift->SUPER::new( @_, name => 'trig' ) } package RDF::Trine::Parser::Redland::RDFa; use strict; use warnings; use base qw(RDF::Trine::Parser::Redland); sub new { shift->SUPER::new( @_, name => 'librdfa' ) } 1; __END__ =back =head1 ENVIRONMENT VARIABLES Set C to something true to disable the Redland parsers. =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/TriG.pm000644 000765 000024 00000014035 12171744402 020210 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::TriG # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::TriG - TriG RDF Parser =head1 VERSION This document describes RDF::Trine::Parser::TriG version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'trig' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION ... =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::TriG; use 5.010; use strict; use warnings; no warnings 'redefine'; no warnings 'once'; use base qw(RDF::Trine::Parser::Turtle); use RDF::Trine::Parser::Turtle::Constants; use RDF::Trine qw(literal); our ($VERSION); BEGIN { $VERSION = '1.007'; $RDF::Trine::Parser::parser_names{ 'trig' } = __PACKAGE__; foreach my $ext (qw(trig)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } # foreach my $type (qw(application/x-turtle application/turtle text/turtle)) { # $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; # } } sub _assert_triple { my $self = shift; my $subj = shift; my $pred = shift; my $obj = shift; my $graph = $self->{graph}; if ($self->{canonicalize} and blessed($obj) and $obj->isa('RDF::Trine::Node::Literal')) { $obj = $obj->canonicalize; } my $st = RDF::Trine::Statement::Quad->new( $subj, $pred, $obj, $graph ); if (my $code = $self->{handle_triple}) { $code->( $st ); } my $count = ++$self->{triple_count}; } sub _statement { my $self = shift; my $l = shift; my $t = shift; my $type = $t->type; # warn '--> ' . decrypt_constant($type); if ($type == LBRACE) { return $self->_graph($l, $t); } elsif ($type == LBRACKET) { return $self->_graph($l, $t); } elsif ($type == BNODE) { return $self->_graph($l, $t); } elsif ($type == EQUALS) { return $self->_graph($l, $t); } elsif ($type == IRI) { return $self->_graph($l, $t); } elsif ($type == PREFIXNAME) { return $self->_graph($l, $t); } elsif ($type == WS) {} elsif ($type == PREFIX or $type == SPARQLPREFIX) { $t = $self->_get_token_type($l, PREFIXNAME); my $name = $t->value; $name =~ s/:$//; $t = $self->_get_token_type($l, IRI); my $r = RDF::Trine::Node::Resource->new($t->value, $self->{baseURI}); my $iri = $r->uri_value; if ($type == PREFIX) { $t = $self->_get_token_type($l, DOT); } $self->{map}->add_mapping( $name => $iri ); if (my $ns = $self->{namespaces}) { unless ($ns->namespace_uri($name)) { $ns->add_mapping( $name => $iri ); } } } elsif ($type == BASE or $type == SPARQLBASE) { $t = $self->_get_token_type($l, IRI); my $r = RDF::Trine::Node::Resource->new($t->value, $self->{baseURI}); my $iri = $r->uri_value; if ($type == BASE) { $t = $self->_get_token_type($l, DOT); } $self->{baseURI} = $iri; } else { $self->_throw_error("Expecting statement but got " . decrypt_constant($type), $t, $l); } } sub _graph { my $self = shift; my $l = shift; my $t = shift; my $type = $t->type; if ($type == IRI or $type == PREFIXNAME) { $self->{graph} = $self->_token_to_node($t); my $old_token = $t; $t = $self->_next_nonws($l); unless (defined($t)) { $l->_throw_error("Unexpected EOF after graph"); } } elsif ($type == BNODE) { $self->{graph} = $self->_token_to_node($t); $t = $self->_next_nonws($l); } elsif ($type == LBRACKET) { $t = $self->_get_token_type($l, RBRACKET); $t = $self->_next_nonws($l); $self->{graph} = RDF::Trine::Node::Blank->new(); } else { $self->{graph} = RDF::Trine::Node::Nil->new(); } if ($t->type == EQUALS) { $t = $self->_next_nonws($l); } if ($t->type != LBRACE) { $self->_throw_error("Expecting LBRACE but got " . decrypt_constant($type), $t, $l); } $t = $self->_next_nonws($l); while (1) { my $type = $t->type; unless ($type == LBRACKET or $type == LPAREN or $type == IRI or $type == PREFIXNAME or $type == BNODE) { $self->_unget_token($t); last; } $self->_triple($l, $t); $t = $self->_next_nonws($l); if ($t->type == RBRACE) { $self->_unget_token($t); last; } elsif ($t->type == DOT) { $t = $self->_next_nonws($l); next; } } $t = $self->_get_token_type($l, RBRACE); $t = $self->_next_nonws($l); return unless defined($t); unless ($t->type == DOT) { $self->_unget_token($t); } } sub _triple { my $self = shift; my $l = shift; my $t = shift; my $type = $t->type; # subject my $subj; if ($type == LBRACKET) { $subj = RDF::Trine::Node::Blank->new(); my $t = $self->_next_nonws($l); if ($t->type != RBRACKET) { $self->_unget_token($t); $self->_predicateObjectList( $l, $subj ); $t = $self->_get_token_type($l, RBRACKET); $t = $self->_next_nonws($l); return unless defined($t); $self->_unget_token($t); if ($t->type == DOT) { return; } } } elsif ($type == LPAREN) { my $t = $self->_next_nonws($l); if ($t->type == RPAREN) { $subj = RDF::Trine::Node::Resource->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'); } else { $subj = RDF::Trine::Node::Blank->new(); my @objects = $self->_object($l, $t); while (1) { my $t = $self->_next_nonws($l); if ($t->type == RPAREN) { last; } else { push(@objects, $self->_object($l, $t)); } } $self->_assert_list($subj, @objects); } } elsif (not($type==IRI or $type==PREFIXNAME or $type==BNODE)) { $self->_throw_error("Expecting resource or bnode but got " . decrypt_constant($type), $t, $l); } else { $subj = $self->_token_to_node($t); } # warn "Subject: $subj\n"; #predicateObjectList $self->_predicateObjectList($l, $subj); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/Turtle/000755 000765 000024 00000000000 12171744442 020265 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Parser/Turtle.pm000644 000765 000024 00000032352 12171744402 020624 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::Turtle # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::Turtle - Turtle RDF Parser =head1 VERSION This document describes RDF::Trine::Parser::Turtle version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser; my $parser = RDF::Trine::Parser->new( 'turtle' ); $parser->parse_into_model( $base_uri, $data, $model ); =head1 DESCRIPTION This module implements a parser for the Turtle RDF format. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Parser::Turtle; use utf8; use 5.010; use strict; use warnings; use Scalar::Util qw(blessed); use base qw(RDF::Trine::Parser); use RDF::Trine::Error qw(:try); use Data::Dumper; use RDF::Trine::Parser::Turtle::Constants; use RDF::Trine::Parser::Turtle::Lexer; use RDF::Trine::Parser::Turtle::Token; our $VERSION; BEGIN { $VERSION = '1.007'; foreach my $ext (qw(ttl)) { $RDF::Trine::Parser::file_extensions{ $ext } = __PACKAGE__; } $RDF::Trine::Parser::parser_names{ 'turtle' } = __PACKAGE__; my $class = __PACKAGE__; $RDF::Trine::Parser::encodings{ $class } = 'utf8'; $RDF::Trine::Parser::format_uris{ 'http://www.w3.org/ns/formats/Turtle' } = __PACKAGE__; $RDF::Trine::Parser::canonical_media_types{ $class } = 'text/turtle'; foreach my $type (qw(application/x-turtle application/turtle text/turtle)) { $RDF::Trine::Parser::media_types{ $type } = __PACKAGE__; } } my $rdf = RDF::Trine::Namespace->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#'); my $xsd = RDF::Trine::Namespace->new('http://www.w3.org/2001/XMLSchema#'); =item C<< new ( [ namespaces => $map ] ) >> Returns a new Turtle parser. =cut sub new { my $class = shift; my %args = @_; return bless({ %args, stack => [] }, $class); } =item C<< parse ( $base_uri, $rdf, \&handler ) >> Parses the C<< $data >>, using the given C<< $base_uri >>. Calls the C<< triple >> method for each RDF triple parsed. This method does nothing by default, but can be set by using one of the default C<< parse_* >> methods. =cut sub parse { my $self = shift; local($self->{baseURI}) = shift; my $string = shift; # warn 'parse() content: ' . Dumper($string); # XXX local($self->{handle_triple}) = shift; require Encode; $string = Encode::encode("utf-8", $string); open(my $fh, '<:encoding(UTF-8)', \$string); my $l = RDF::Trine::Parser::Turtle::Lexer->new($fh); $self->_parse($l); } =item C<< parse_file ( $base_uri, $fh, $handler ) >> Parses all data read from the filehandle or file C<< $fh >>, using the given C<< $base_uri >>. If C<< $fh >> is a filename, this method can guess the associated parse. For each RDF statement parses C<< $handler >> is called. =cut sub parse_file { my $self = shift; local($self->{baseURI}) = shift; my $fh = shift; local($self->{handle_triple}) = shift; unless (ref($fh)) { my $filename = $fh; undef $fh; unless ($self->can('parse')) { my $pclass = $self->guess_parser_by_filename( $filename ); $self = $pclass->new() if ($pclass and $pclass->can('new')); } open( $fh, '<:encoding(UTF-8)', $filename ) or throw RDF::Trine::Error::ParserError -text => $!; } my $l = RDF::Trine::Parser::Turtle::Lexer->new($fh); $self->_parse($l); } =item C<< parse_node ( $string, $base ) >> Returns the RDF::Trine::Node object corresponding to the node whose N-Triples serialization is found at the beginning of C<< $string >>. =cut sub parse_node { my $self = shift; my $string = shift; local($self->{baseURI}) = shift; open(my $fh, '<:encoding(UTF-8)', \$string); my $l = RDF::Trine::Parser::Turtle::Lexer->new($fh); my $t = $self->_next_nonws($l); my $node = $self->_object($l, $t); return $node; } sub _parse { my $self = shift; my $l = shift; $l->check_for_bom; $self->{map} = RDF::Trine::NamespaceMap->new(); while (my $t = $self->_next_nonws($l)) { $self->_statement($l, $t); } } ################################################################################ sub _unget_token { my $self = shift; my $t = shift; push(@{ $self->{ stack } }, $t); } sub _next_nonws { my $self = shift; my $l = shift; if (scalar(@{ $self->{ stack } })) { return pop(@{ $self->{ stack } }); } while (1) { my $t = $l->get_token; return unless ($t); my $type = $t->type; # next if ($type == WS or $type == COMMENT); # warn decrypt_constant($type) . "\n"; return $t; } } sub _get_token_type { my $self = shift; my $l = shift; my $type = shift; my $t = $self->_next_nonws($l); unless ($t) { $l->_throw_error(sprintf("Expecting %s but got EOF", decrypt_constant($type))); return; } unless ($t->type eq $type) { $self->_throw_error(sprintf("Expecting %s but got %s", decrypt_constant($type), decrypt_constant($t->type)), $t, $l); } return $t; } sub _statement { my $self = shift; my $l = shift; my $t = shift; my $type = $t->type; # when (WS) {} if ($type == PREFIX or $type == SPARQLPREFIX) { $t = $self->_get_token_type($l, PREFIXNAME); my $name = $t->value; $name =~ s/:$//; $t = $self->_get_token_type($l, IRI); my $r = RDF::Trine::Node::Resource->new($t->value, $self->{baseURI}); my $iri = $r->uri_value; if ($type == PREFIX) { $t = $self->_get_token_type($l, DOT); # $t = $self->_next_nonws($l); # if ($t and $t->type != DOT) { # $self->_unget_token($t); # } } $self->{map}->add_mapping( $name => $iri ); if (my $ns = $self->{namespaces}) { unless ($ns->namespace_uri($name)) { $ns->add_mapping( $name => $iri ); } } } elsif ($type == BASE or $type == SPARQLBASE) { $t = $self->_get_token_type($l, IRI); my $r = RDF::Trine::Node::Resource->new($t->value, $self->{baseURI}); my $iri = $r->uri_value; if ($type == BASE) { $t = $self->_get_token_type($l, DOT); # $t = $self->_next_nonws($l); # if ($t and $t->type != DOT) { # $self->_unget_token($t); # } } $self->{baseURI} = $iri; } else { $self->_triple( $l, $t ); $t = $self->_get_token_type($l, DOT); } # } } sub _triple { my $self = shift; my $l = shift; my $t = shift; my $type = $t->type; # subject my $subj; my $bnode_plist = 0; if ($type == LBRACKET) { $bnode_plist = 1; $subj = RDF::Trine::Node::Blank->new(); my $t = $self->_next_nonws($l); if ($t->type != RBRACKET) { $self->_unget_token($t); $self->_predicateObjectList( $l, $subj ); $t = $self->_get_token_type($l, RBRACKET); } } elsif ($type == LPAREN) { my $t = $self->_next_nonws($l); if ($t->type == RPAREN) { $subj = RDF::Trine::Node::Resource->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'); } else { $subj = RDF::Trine::Node::Blank->new(); my @objects = $self->_object($l, $t); while (1) { my $t = $self->_next_nonws($l); if ($t->type == RPAREN) { last; } else { push(@objects, $self->_object($l, $t)); } } $self->_assert_list($subj, @objects); } } elsif (not($type==IRI or $type==PREFIXNAME or $type==BNODE)) { $self->_throw_error("Expecting resource or bnode but got " . decrypt_constant($type), $t, $l); } else { $subj = $self->_token_to_node($t); } # warn "Subject: $subj\n"; # XXX if ($bnode_plist) { #predicateObjectList? $t = $self->_next_nonws($l); $self->_unget_token($t); if ($t->type != DOT) { $self->_predicateObjectList($l, $subj); } } else { #predicateObjectList $self->_predicateObjectList($l, $subj); } } sub _assert_list { my $self = shift; my $subj = shift; my @objects = @_; my $head = $subj; while (@objects) { my $obj = shift(@objects); $self->_assert_triple($head, $rdf->first, $obj); my $next = scalar(@objects) ? RDF::Trine::Node::Blank->new() : $rdf->nil; $self->_assert_triple($head, $rdf->rest, $next); $head = $next; } } sub _predicateObjectList { my $self = shift; my $l = shift; my $subj = shift; my $t = $self->_next_nonws($l); while (1) { my $type = $t->type; unless ($type==IRI or $type==PREFIXNAME or $type==A) { $self->_throw_error("Expecting verb but got " . decrypt_constant($type), $t, $l); } my $pred = $self->_token_to_node($t); $self->_objectList($l, $subj, $pred); $t = $self->_next_nonws($l); last unless ($t); if ($t->type == SEMICOLON) { my $sc = $t; SEMICOLON_REPEAT: $t = $self->_next_nonws($l); unless ($t) { $l->_throw_error("Expecting token after semicolon, but got EOF"); } goto SEMICOLON_REPEAT if ($t->type == SEMICOLON); if ($t->type == IRI or $t->type == PREFIXNAME or $t->type == A) { next; } else { $self->_unget_token($t); return; } } else { $self->_unget_token($t); return; } } } sub _objectList { my $self = shift; my $l = shift; my $subj = shift; my $pred = shift; # warn "objectList: " . Dumper($subj, $pred); # XXX while (1) { my $t = $self->_next_nonws($l); last unless ($t); my $obj = $self->_object($l, $t); $self->_assert_triple($subj, $pred, $obj); $t = $self->_next_nonws($l); if ($t and $t->type == COMMA) { next; } else { $self->_unget_token($t); return; } } } sub _assert_triple { my $self = shift; my $subj = shift; my $pred = shift; my $obj = shift; if ($self->{canonicalize} and blessed($obj) and $obj->isa('RDF::Trine::Node::Literal')) { $obj = $obj->canonicalize; } my $t = RDF::Trine::Statement->new($subj, $pred, $obj); if ($self->{handle_triple}) { $self->{handle_triple}->( $t ); } } sub _object { my $self = shift; my $l = shift; my $t = shift; my $tcopy = $t; my $obj; my $type = $t->type; if ($type==LBRACKET) { $obj = RDF::Trine::Node::Blank->new(); my $t = $self->_next_nonws($l); unless ($t) { $self->_throw_error("Expecting object but got only opening bracket", $tcopy, $l); } if ($t->type != RBRACKET) { $self->_unget_token($t); $self->_predicateObjectList( $l, $obj ); $t = $self->_get_token_type($l, RBRACKET); } } elsif ($type == LPAREN) { my $t = $self->_next_nonws($l); unless ($t) { $self->_throw_error("Expecting object but got only opening paren", $tcopy, $l); } if ($t->type == RPAREN) { $obj = RDF::Trine::Node::Resource->new('http://www.w3.org/1999/02/22-rdf-syntax-ns#nil'); } else { $obj = RDF::Trine::Node::Blank->new(); my @objects = $self->_object($l, $t); while (1) { my $t = $self->_next_nonws($l); if ($t->type == RPAREN) { last; } else { push(@objects, $self->_object($l, $t)); } } $self->_assert_list($obj, @objects); } } elsif (not($type==IRI or $type==PREFIXNAME or $type==STRING1D or $type==STRING3D or $type==STRING1S or $type==STRING3S or $type==BNODE or $type==INTEGER or $type==DECIMAL or $type==DOUBLE or $type==BOOLEAN)) { $self->_throw_error("Expecting object but got " . decrypt_constant($type), $t, $l); } else { if ($type==STRING1D or $type==STRING3D or $type==STRING1S or $type==STRING3S) { my $value = $t->value; my $t = $self->_next_nonws($l); my $dt; my $lang; if ($t) { if ($t->type == HATHAT) { my $t = $self->_next_nonws($l); if ($t->type == IRI or $t->type == PREFIXNAME) { $dt = $self->_token_to_node($t); } } elsif ($t->type == LANG) { $lang = $t->value; } else { $self->_unget_token($t); } } $obj = RDF::Trine::Node::Literal->new($value, $lang, $dt); } else { $obj = $self->_token_to_node($t, $type); } } return $obj; } sub _token_to_node { my $self = shift; my $t = shift; my $type = shift || $t->type; if ($type eq A) { return $rdf->type; } elsif ($type eq IRI) { return RDF::Trine::Node::Resource->new($t->value, $self->{baseURI}); } elsif ($type eq INTEGER) { return RDF::Trine::Node::Literal->new($t->value, undef, $xsd->integer); } elsif ($type eq DECIMAL) { return RDF::Trine::Node::Literal->new($t->value, undef, $xsd->decimal); } elsif ($type eq DOUBLE) { return RDF::Trine::Node::Literal->new($t->value, undef, $xsd->double); } elsif ($type eq BOOLEAN) { return RDF::Trine::Node::Literal->new($t->value, undef, $xsd->boolean); } elsif ($type eq PREFIXNAME) { my ($ns, $local) = @{ $t->args }; $ns =~ s/:$//; my $prefix = $self->{map}->namespace_uri($ns); unless (blessed($prefix)) { $self->_throw_error("Use of undeclared prefix '$ns'", $t); } my $iri = $prefix->uri($local); return $iri; } elsif ($type eq BNODE) { return RDF::Trine::Node::Blank->new($t->value); } elsif ($type eq STRING1D) { return RDF::Trine::Node::Literal->new($t->value); } elsif ($type eq STRING1S) { return RDF::Trine::Node::Literal->new($t->value); } else { $self->_throw_error("Converting $type to node not implemented", $t); } } sub _throw_error { my $self = shift; my $message = shift; my $t = shift; my $l = shift; my $line = $t->start_line; my $col = $t->start_column; # Carp::cluck "$message at $line:$col"; my $text = "$message at $line:$col"; if (defined($t->value)) { $text .= " (near '" . $t->value . "')"; } RDF::Trine::Error::ParserError::Tokenized->throw( -text => $text, -object => $t, ); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/Turtle/Constants.pm000644 000765 000024 00000003231 12171744402 022572 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::Turtle::Constants # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::Turtle::Constants - Constant definitions for use in parsing Turtle, TriG, and N-Triples =head1 VERSION This document describes RDF::Trine::Parser::Turtle::Constants version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser::Constants; =head1 METHODS =over 4 =cut package RDF::Trine::Parser::Turtle::Constants; use strict; use warnings; use 5.010; our $VERSION; our @EXPORT; BEGIN { $VERSION = '1.007'; @EXPORT = qw( LBRACKET RBRACKET LPAREN RPAREN DOT SEMICOLON COMMA HATHAT A BOOLEAN PREFIXNAME IRI BNODE DOUBLE DECIMAL INTEGER WS COMMENT STRING3D STRING3S STRING1D STRING1S BASE PREFIX SPARQLBASE SPARQLPREFIX LANG LBRACE RBRACE EQUALS decrypt_constant ) }; use base 'Exporter'; { my %mapping; my %reverse; BEGIN { my $cx = 0; foreach my $name (grep { $_ ne 'decrypt_constant' } @EXPORT) { my $value = ++$cx; $reverse{ $value } = $name; $mapping{ $name } = $value; } } use constant +{ %mapping }; =item C<< decrypt_constant ( $type ) >> Returns the token name for the given toke type. =cut sub decrypt_constant { my $num = +shift; $reverse{$num} } }; 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Toby Inkster C<< >> =head1 COPYRIGHT Copyright (c) 2012 Toby Inkster. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/Turtle/Lexer.pm000644 000765 000024 00000047643 12171744402 021714 0ustar00gregstaff000000 000000 # RDF::Trine::Parser::Turtle::Lexer # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Parser::Turtle::Lexer - Tokenizer for parsing Turtle, TriG, and N-Triples =head1 VERSION This document describes RDF::Trine::Parser::Turtle::Lexer version 1.007 =head1 SYNOPSIS use RDF::Trine::Parser::Lexer; my $l = RDF::Trine::Parser::Lexer->new( file => $fh ); while (my $t = $l->get_token) { ... } =head1 METHODS =over 4 =cut package RDF::Trine::Parser::Turtle::Lexer; use RDF::Trine::Parser::Turtle::Constants; use 5.010; use strict; use warnings; use Moose; use Data::Dumper; use RDF::Trine::Error; our $VERSION; BEGIN { $VERSION = '1.007'; } my $r_nameChar_extra = qr'[-0-9\x{B7}\x{0300}-\x{036F}\x{203F}-\x{2040}]'o; my $r_nameStartChar_minus_underscore = qr'[A-Za-z\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{02FF}\x{0370}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{00010000}-\x{000EFFFF}]'o; my $r_nameStartChar = qr/[A-Za-z_\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{02FF}\x{0370}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]/; my $r_nameChar = qr/${r_nameStartChar}|[-0-9\x{b7}\x{0300}-\x{036f}\x{203F}-\x{2040}]/; my $r_prefixName = qr/(?:(?!_)${r_nameStartChar})(?:$r_nameChar)*/; my $r_nameChar_test = qr"(?:$r_nameStartChar|$r_nameChar_extra)"; my $r_double = qr'[+-]?([0-9]+\.[0-9]*[eE][+-]?[0-9]+|\.[0-9]+[eE][+-]?[0-9]+|[0-9]+[eE][+-]?[0-9]+)'; my $r_decimal = qr'[+-]?(([0-9]+\.[0-9]+)|\.([0-9])+)'; my $r_integer = qr'[+-]?[0-9]+'; my $r_PN_CHARS_U = qr/[_A-Za-z_\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{02FF}\x{0370}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]/; my $r_PN_CHARS = qr"${r_PN_CHARS_U}|[-0-9\x{00B7}\x{0300}-\x{036F}\x{203F}-\x{2040}]"; my $r_bnode_id = qr"(?:${r_PN_CHARS_U}|[0-9])((${r_PN_CHARS}|[.])*${r_PN_CHARS})?"; my $r_PN_CHARS_BASE = qr/([A-Z]|[a-z]|[\x{00C0}-\x{00D6}]|[\x{00D8}-\x{00F6}]|[\x{00F8}-\x{02FF}]|[\x{0370}-\x{037D}]|[\x{037F}-\x{1FFF}]|[\x{200C}-\x{200D}]|[\x{2070}-\x{218F}]|[\x{2C00}-\x{2FEF}]|[\x{3001}-\x{D7FF}]|[\x{F900}-\x{FDCF}]|[\x{FDF0}-\x{FFFD}]|[\x{10000}-\x{EFFFF}])/; # my $r_PN_CHARS_U = qr/([_]|${r_PN_CHARS_BASE})/; # my $r_PN_CHARS = qr/${r_PN_CHARS_U}|-|[0-9]|\x{00B7}|[\x{0300}-\x{036F}]|[\x{203F}-\x{2040}]/; my $r_PN_PREFIX = qr/(${r_PN_CHARS_BASE}((${r_PN_CHARS}|[.])*${r_PN_CHARS})?)/; my $r_PN_LOCAL_ESCAPED = qr{(\\([-~.!&'()*+,;=/?#@%_\$]))|%[0-9A-Fa-f]{2}}; my $r_PN_LOCAL = qr/((${r_PN_CHARS_U}|[:0-9]|${r_PN_LOCAL_ESCAPED})((${r_PN_CHARS}|${r_PN_LOCAL_ESCAPED}|[:.])*(${r_PN_CHARS}|[:]|${r_PN_LOCAL_ESCAPED}))?)/; my $r_PN_LOCAL_BNODE = qr/((${r_PN_CHARS_U}|[0-9])((${r_PN_CHARS}|[.])*${r_PN_CHARS})?)/; my $r_PNAME_NS = qr/((${r_PN_PREFIX})?:)/; my $r_PNAME_LN = qr/(${r_PNAME_NS}${r_PN_LOCAL})/; has file => ( is => 'ro', isa => 'FileHandle', required => 1, ); has linebuffer => ( is => 'rw', isa => 'Str', default => '', ); has line => ( is => 'rw', isa => 'Int', default => 1, ); has column => ( is => 'rw', isa => 'Int', default => 1, ); has buffer => ( is => 'rw', isa => 'Str', default => '', ); has start_column => ( is => 'rw', isa => 'Int', default => -1, ); has start_line => ( is => 'rw', isa => 'Int', default => -1, ); sub BUILDARGS { my $class = shift; if (scalar(@_) == 1) { return { file => shift }; } else { return $class->SUPER::BUILDARGS(@_); } } =item C<< new_token ( $type, @values ) >> Returns a new token with the given type and optional values, capturing the current line and column of the input data. =cut sub new_token { my $self = shift; my $type = shift; my $start_line = $self->start_line; my $start_col = $self->start_column; my $line = $self->line; my $col = $self->column; return RDF::Trine::Parser::Turtle::Token->fast_constructor( $type, $start_line, $start_col, $line, $col, \@_, ); } my %CHAR_TOKEN = ( '.' => DOT, ';' => SEMICOLON, '[' => LBRACKET, ']' => RBRACKET, '(' => LPAREN, ')' => RPAREN, '{' => LBRACE, '}' => RBRACE, ',' => COMMA, '=' => EQUALS, ); my %METHOD_TOKEN = ( # q[#] => '_get_comment', q[@] => '_get_keyword', q[<] => '_get_iriref', q[_] => '_get_bnode', q['] => '_get_single_literal', q["] => '_get_double_literal', q[:] => '_get_pname', (map {$_ => '_get_number'} (0 .. 9, '-', '+')) ); =item C<< get_token >> Returns the next token present in the input. =cut sub get_token { my $self = shift; while (1) { unless (length($self->{buffer})) { $self->fill_buffer; } # warn "getting token with buffer: " . Dumper($self->{buffer}); my $c = $self->_peek_char(); return unless (defined($c) and length($c)); $self->start_column( $self->column ); $self->start_line( $self->line ); if ($c eq '.' and $self->{buffer} =~ $r_decimal) { return $self->_get_number(); } if (defined(my $name = $CHAR_TOKEN{$c})) { $self->_get_char; return $self->new_token($name); } elsif (defined(my $method = $METHOD_TOKEN{$c})) { return $self->$method() } elsif ($c eq '#') { # we're ignoring comment tokens, but we could return them here instead of falling through to the 'next': $self->_get_comment(); next; } elsif ($c =~ /[ \r\n\t]/) { while (defined($c) and length($c) and $c =~ /[\t\r\n ]/) { $self->_get_char; $c = $self->_peek_char; } # we're ignoring whitespace tokens, but we could return them here instead of falling through to the 'next': # return $self->new_token(WS); next; } elsif ($c =~ /[A-Za-z\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{02FF}\x{0370}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]/) { if ($self->{buffer} =~ /^a(?!:)\s/) { $self->_get_char; return $self->new_token(A); } elsif ($self->{buffer} =~ /^(?:true|false)(?!:)\b/) { my $bool = $self->_read_length($+[0]); return $self->new_token(BOOLEAN, $bool); } elsif ($self->{buffer} =~ /^BASE(?!:)\b/i) { $self->_read_length(4); return $self->new_token(SPARQLBASE); } elsif ($self->{buffer} =~ /^PREFIX(?!:)\b/i) { $self->_read_length(6); return $self->new_token(SPARQLPREFIX); } else { return $self->_get_pname; } } elsif ($c eq '^') { $self->_read_word('^^'); return $self->new_token(HATHAT); } else { # Carp::cluck sprintf("Unexpected byte '$c' (0x%02x)", ord($c)); return $self->_throw_error(sprintf("Unexpected byte '%s' (0x%02x)", $c, ord($c))); } warn 'byte: ' . Dumper($c); } } =begin private =cut =item C<< fill_buffer >> Fills the internal parse buffer with a new line from the input source. =cut sub fill_buffer { my $self = shift; unless (length($self->buffer)) { my $line = $self->file->getline; if (defined($line)) { $self->{buffer} .= $line; } } } =item C<< check_for_bom >> Checks the input buffer for a Unicode BOM, and consumes it if it is present. =cut sub check_for_bom { my $self = shift; my $c = $self->_peek_char(); if (defined($c) and $c eq "\x{FEFF}") { $self->_get_char; } } sub _get_char_safe { my $self = shift; my $char = shift; my $c = $self->_get_char; if ($c ne $char) { $self->_throw_error("Expected '$char' but got '$c'"); } return $c; } sub _get_char_fill_buffer { my $self = shift; if (length($self->{buffer}) == 0) { $self->fill_buffer; if (length($self->{buffer}) == 0) { return; } } my $c = substr($self->{buffer}, 0, 1, ''); if ($c eq "\n") { # $self->{linebuffer} = ''; $self->{line} = 1+$self->{line}; $self->{column} = 1; } else { # $self->{linebuffer} .= $c; $self->{column} = 1+$self->{column}; } return $c; } sub _get_char { my $self = shift; my $c = substr($self->{buffer}, 0, 1, ''); if ($c eq "\n") { # $self->{linebuffer} = ''; $self->{line} = 1+$self->{line}; $self->{column} = 1; } else { # $self->{linebuffer} .= $c; $self->{column} = 1+$self->{column}; } return $c; } sub _peek_char { my $self = shift; if (length($self->{buffer}) == 0) { $self->fill_buffer; if (length($self->{buffer}) == 0) { return; } } my $c = substr($self->{buffer}, 0, 1); return $c; } sub _read_word { my $self = shift; my $word = shift; while (length($self->{buffer}) < length($word)) { $self->fill_buffer; } if (substr($self->{buffer}, 0, length($word)) ne $word) { $self->_throw_error("Expected '$word'"); } my $lines = ($word =~ tr/\n//); my $lastnl = rindex($word, "\n"); my $cols = length($word) - $lastnl - 1; $self->{lines} += $lines; if ($lines) { $self->{column} = $cols; } else { $self->{column} += $cols; } substr($self->{buffer}, 0, length($word), ''); } sub _read_length { my $self = shift; my $len = shift; while (length($self->{buffer}) < $len) { $self->fill_buffer; } my $word = substr($self->{buffer}, 0, $len, ''); my $lines = ($word =~ tr/\n//); my $lastnl = rindex($word, "\n"); my $cols = length($word) - $lastnl - 1; $self->{lines} += $lines; if ($lines) { $self->{column} = $cols; } else { $self->{column} += $cols; } return $word; } sub _get_pname { my $self = shift; my $prefix = ''; if ($self->{buffer} =~ $r_PNAME_LN) { my $ln = $self->_read_length($+[0]); my ($ns,$local) = ($ln =~ /^([^:]*:)(.*)$/); no warnings 'uninitialized'; $local =~ s{\\([-~.!&'()*+,;=:/?#@%_\$])}{$1}g; return $self->new_token(PREFIXNAME, $ns, $local); } else { $self->{buffer} =~ $r_PNAME_NS; my $ns = $self->_read_length($+[0]); return $self->new_token(PREFIXNAME, $ns); } } sub _get_iriref { my $self = shift; $self->_get_char_safe(q[<]); my $iri = ''; while (1) { my $c = $self->_peek_char; last unless defined($c); if (substr($self->{buffer}, 0, 1) eq '\\') { $self->_get_char_safe('\\'); my $esc = $self->_get_char; if ($esc eq '\\') { $iri .= "\\"; } elsif ($esc eq 'U') { my $codepoint = $self->_read_length(8); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $iri .= chr(hex($codepoint)); } elsif ($esc eq 'u') { my $codepoint = $self->_read_length(4); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } my $char = chr(hex($codepoint)); if ($char =~ /[<>" {}|\\^`]/) { $self->_throw_error(sprintf("Bad IRI character: '%s' (0x%x)", $char, ord($char))); } $iri .= $char; } else { $self->_throw_error("Unrecognized iri escape '$esc'"); } } elsif ($self->{buffer} =~ /^[^<>\x00-\x20\\"{}|^`]+/) { $iri .= $self->_read_length($+[0]); } elsif (substr($self->{buffer}, 0, 1) eq '>') { last; } else { $self->_throw_error("Got '$c' while expecting IRI character"); } } $self->_get_char_safe(q[>]); return $self->new_token(IRI, $iri); } sub _get_bnode { my $self = shift; $self->_read_word('_:'); unless ($self->{buffer} =~ /^${r_bnode_id}/o) { $self->_throw_error("Expected: name"); } my $name = substr($self->{buffer}, 0, $+[0]); $self->_read_word($name); return $self->new_token(BNODE, $name); } sub _get_number { my $self = shift; if ($self->{buffer} =~ /^${r_double}/) { return $self->new_token(DOUBLE, $self->_read_length($+[0])); } elsif ($self->{buffer} =~ /^${r_decimal}/) { return $self->new_token(DECIMAL, $self->_read_length($+[0])); } elsif ($self->{buffer} =~ /^${r_integer}/) { return $self->new_token(INTEGER, $self->_read_length($+[0])); } else { $self->_throw_error("Expected number"); } } sub _get_comment { my $self = shift; $self->_get_char_safe('#'); my $comment = ''; my $c = $self->_peek_char; while (length($c) and $c !~ /[\r\n]/) { $comment .= $self->_get_char; $c = $self->_peek_char; } if (length($c) and $c =~ /[\r\n]/) { $self->_get_char; } return $self->new_token(COMMENT, $comment); } sub _get_double_literal { my $self = shift; my $c = $self->_peek_char(); $self->_get_char_safe(q["]); if (substr($self->{buffer}, 0, 2) eq q[""]) { # #x22 #x22 #x22 lcharacter* #x22 #x22 #x22 $self->_read_word(q[""]); my $quote_count = 0; my $string = ''; while (1) { if (length($self->{buffer}) == 0) { $self->fill_buffer; if (length($self->{buffer}) == 0) { $self->_throw_error("Found EOF in string literal"); } } if (substr($self->{buffer}, 0, 1) eq '"') { my $c = $self->_get_char; $quote_count++; if ($quote_count == 3) { last; } } else { if ($quote_count) { $string .= '"' foreach (1..$quote_count); $quote_count = 0; } if (substr($self->{buffer}, 0, 1) eq '\\') { my $c = $self->_get_char; # $self->_get_char_safe('\\'); my $esc = $self->_get_char_fill_buffer; if ($esc eq '\\'){ $string .= "\\" } elsif ($esc eq '"'){ $string .= '"' } elsif ($esc eq "'"){ $string .= "'" } elsif ($esc eq 'r'){ $string .= "\r" } elsif ($esc eq 't'){ $string .= "\t" } elsif ($esc eq 'n'){ $string .= "\n" } elsif ($esc eq 'b'){ $string .= "\b" } elsif ($esc eq 'f'){ $string .= "\f" } elsif ($esc eq '>'){ $string .= ">" } elsif ($esc eq 'U'){ my $codepoint = $self->_read_length(8); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } elsif ($esc eq 'u'){ my $codepoint = $self->_read_length(4); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } else { $self->_throw_error("Unrecognized string escape '$esc'"); } } else { $self->{buffer} =~ /^[^"\\]+/; $string .= $self->_read_length($+[0]); } } } return $self->new_token(STRING3D, $string); } else { ### #x22 scharacter* #x22 my $string = ''; while (1) { if (substr($self->{buffer}, 0, 1) eq '\\') { my $c = $self->_peek_char; $self->_get_char_safe('\\'); my $esc = $self->_get_char; if ($esc eq '\\'){ $string .= "\\" } elsif ($esc eq '"'){ $string .= '"' } elsif ($esc eq "'"){ $string .= "'" } elsif ($esc eq 'r'){ $string .= "\r" } elsif ($esc eq 't'){ $string .= "\t" } elsif ($esc eq 'n'){ $string .= "\n" } elsif ($esc eq 'b'){ $string .= "\b" } elsif ($esc eq 'f'){ $string .= "\f" } elsif ($esc eq '>'){ $string .= ">" } elsif ($esc eq 'U'){ my $codepoint = $self->_read_length(8); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } elsif ($esc eq 'u'){ my $codepoint = $self->_read_length(4); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } else { $self->_throw_error("Unrecognized string escape '$esc'"); } } elsif ($self->{buffer} =~ /^[^"\\]+/) { $string .= $self->_read_length($+[0]); } elsif (substr($self->{buffer}, 0, 1) eq '"') { last; } else { $self->_throw_error("Got '$c' while expecting string character"); } } $self->_get_char_safe(q["]); return $self->new_token(STRING1D, $string); } } sub _get_single_literal { my $self = shift; my $c = $self->_peek_char(); $self->_get_char_safe("'"); if (substr($self->{buffer}, 0, 2) eq q['']) { # #x22 #x22 #x22 lcharacter* #x22 #x22 #x22 $self->_read_word(q['']); my $quote_count = 0; my $string = ''; while (1) { if (length($self->{buffer}) == 0) { $self->fill_buffer; if (length($self->{buffer}) == 0) { $self->_throw_error("Found EOF in string literal"); } } if (substr($self->{buffer}, 0, 1) eq "'") { my $c = $self->_get_char; $quote_count++; if ($quote_count == 3) { last; } } else { if ($quote_count) { $string .= "'" foreach (1..$quote_count); $quote_count = 0; } if (substr($self->{buffer}, 0, 1) eq '\\') { my $c = $self->_get_char; # $self->_get_char_safe('\\'); my $esc = $self->_get_char_fill_buffer; if ($esc eq '\\'){ $string .= "\\" } elsif ($esc eq '"'){ $string .= '"' } elsif ($esc eq "'"){ $string .= "'" } elsif ($esc eq 'r'){ $string .= "\r" } elsif ($esc eq 't'){ $string .= "\t" } elsif ($esc eq 'n'){ $string .= "\n" } elsif ($esc eq 'b'){ $string .= "\b" } elsif ($esc eq 'f'){ $string .= "\f" } elsif ($esc eq '>'){ $string .= ">" } elsif ($esc eq 'U'){ my $codepoint = $self->_read_length(8); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } elsif ($esc eq 'u'){ my $codepoint = $self->_read_length(4); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } else { $self->_throw_error("Unrecognized string escape '$esc'"); } } else { $self->{buffer} =~ /^[^'\\]+/; $string .= $self->_read_length($+[0]); } } } return $self->new_token(STRING3S, $string); } else { ### #x22 scharacter* #x22 my $string = ''; while (1) { if (substr($self->{buffer}, 0, 1) eq '\\') { my $c = $self->_peek_char; $self->_get_char_safe('\\'); my $esc = $self->_get_char; if ($esc eq '\\'){ $string .= "\\" } elsif ($esc eq '"'){ $string .= '"' } elsif ($esc eq "'"){ $string .= "'" } elsif ($esc eq 'r'){ $string .= "\r" } elsif ($esc eq 't'){ $string .= "\t" } elsif ($esc eq 'n'){ $string .= "\n" } elsif ($esc eq 'b'){ $string .= "\b" } elsif ($esc eq 'f'){ $string .= "\f" } elsif ($esc eq '>'){ $string .= ">" } elsif ($esc eq 'U'){ my $codepoint = $self->_read_length(8); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } elsif ($esc eq 'u'){ my $codepoint = $self->_read_length(4); unless ($codepoint =~ /^[0-9A-Fa-f]+$/) { $self->_throw_error("Bad unicode escape codepoint '$codepoint'"); } $string .= chr(hex($codepoint)); } else { $self->_throw_error("Unrecognized string escape '$esc'"); } } elsif ($self->{buffer} =~ /^[^'\\]+/) { $string .= $self->_read_length($+[0]); } elsif (substr($self->{buffer}, 0, 1) eq "'") { last; } else { $self->_throw_error("Got '$c' while expecting string character"); } } $self->_get_char_safe(q[']); return $self->new_token(STRING1S, $string); } } sub _get_keyword { my $self = shift; $self->_get_char_safe('@'); if ($self->{buffer} =~ /^base/) { $self->_read_word('base'); return $self->new_token(BASE); } elsif ($self->{buffer} =~ /^prefix/) { $self->_read_word('prefix'); return $self->new_token(PREFIX); } else { if ($self->{buffer} =~ /^[a-zA-Z]+(-[a-zA-Z0-9]+)*\b/) { my $lang = $self->_read_length($+[0]); return $self->new_token(LANG, $lang); } else { $self->_throw_error("Expected keyword or language tag"); } } } sub _throw_error { my $self = shift; my $error = shift; my $line = $self->line; my $col = $self->column; # Carp::cluck "$line:$col: $error: " . Dumper($self->{buffer}); RDF::Trine::Error::ParserError::Positioned->throw( -text => "$error at $line:$col", -value => [$line, $col], ); } __PACKAGE__->meta->make_immutable; 1; __END__ =end private =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Parser/Turtle/Token.pm000644 000765 000024 00000001332 12054230225 021667 0ustar00gregstaff000000 000000 package RDF::Trine::Parser::Turtle::Token; use 5.010; use strict; use warnings; use MooseX::ArrayRef; has type => ( is => 'ro', ); has start_line => ( is => 'ro', ); has start_column => ( is => 'ro', ); has line => ( is => 'ro', ); has column => ( is => 'ro', ); has args => ( is => 'ro', ); =begin private =item C<< value >> Returns the token value. =cut sub value { my $self = shift; my $args = $self->args; return $args->[0]; } =item C<< fast_constructor ( $type, $line, $col, \@args ) >> Returns a new token object. =cut # This constructor relies on the list of attributes not changing order! sub fast_constructor { my $class = shift; bless \@_, $class; } __PACKAGE__->meta->make_immutable; 1; =end private RDF-Trine-1.007/lib/RDF/Trine/Node/Blank.pm000644 000765 000024 00000006574 12171744402 020034 0ustar00gregstaff000000 000000 # RDF::Trine::Node::Blank # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Node::Blank - RDF Node class for blank nodes =head1 VERSION This document describes RDF::Trine::Node::Blank version 1.007 =cut package RDF::Trine::Node::Blank; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Node); use Data::Dumper; use Scalar::Util qw(blessed); use Carp qw(carp croak confess); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### use overload '""' => sub { $_[0]->sse }, ; =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C Returns a new Blank structure. =cut my $COUNTER = 0; sub new { my $class = shift; my $name = shift; unless (defined($name)) { $name = 'r' . time() . 'r' . $COUNTER++; } my $r_PN_CHARS_U = qr/[_A-Za-z_\x{00C0}-\x{00D6}\x{00D8}-\x{00F6}\x{00F8}-\x{02FF}\x{0370}-\x{037D}\x{037F}-\x{1FFF}\x{200C}-\x{200D}\x{2070}-\x{218F}\x{2C00}-\x{2FEF}\x{3001}-\x{D7FF}\x{F900}-\x{FDCF}\x{FDF0}-\x{FFFD}\x{10000}-\x{EFFFF}]/; my $r_PN_CHARS = qr"${r_PN_CHARS_U}|[-0-9\x{00B7}\x{0300}-\x{036F}\x{203F}-\x{2040}]"; my $r_bnode_id = qr"(?:${r_PN_CHARS_U}|[0-9])((${r_PN_CHARS}|[.])*${r_PN_CHARS})?"; unless ($name =~ /^${r_bnode_id}$/o) { throw RDF::Trine::Error::SerializationError -text => "Bad blank node identifier: $name"; } return $class->_new( $name ); } sub _new { my $class = shift; my $name = shift; return bless( [ 'BLANK', $name ], $class ); } =item C<< blank_identifier >> Returns the identifier of the blank node. =cut sub blank_identifier { my $self = shift; return $self->[1]; } =item C<< value >> Returns the blank identifier. =cut sub value { my $self = shift; return $self->blank_identifier; } =item C<< sse >> Returns the SSE string for this blank node. =cut sub sse { my $self = shift; my $id = $self->blank_identifier; return qq(_:${id}); } =item C<< as_ntriples >> Returns the node in a string form suitable for NTriples serialization. =cut sub as_ntriples { my $self = shift; my $id = $self->blank_identifier; return qq(_:${id}); } =item C<< as_string >> Returns a string representation of the node. =cut sub as_string { my $self = shift; return '(' . $self->blank_identifier . ')'; } =item C<< type >> Returns the type string of this node. =cut sub type { return 'BLANK'; } =item C<< equal ( $node ) >> Returns true if the two nodes are equal, false otherwise. =cut sub equal { my $self = shift; my $node = shift; return 0 unless (blessed($node) and $node->isa('RDF::Trine::Node::Blank')); return ($self->blank_identifier eq $node->blank_identifier); } # called to compare two nodes of the same type sub _compare { my $a = shift; my $b = shift; return ($a->blank_identifier cmp $b->blank_identifier); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Node/Literal.pm000644 000765 000024 00000037430 12171744402 020374 0ustar00gregstaff000000 000000 # RDF::Trine::Node::Literal # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Node::Literal - RDF Node class for literals =head1 VERSION This document describes RDF::Trine::Node::Literal version 1.007 =cut package RDF::Trine::Node::Literal; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Node); use RDF::Trine::Error; use Data::Dumper; use Scalar::Util qw(blessed looks_like_number); use Carp qw(carp croak confess); ###################################################################### our ($VERSION, $USE_XMLLITERALS, $USE_FORMULAE); BEGIN { $VERSION = '1.007'; eval "use RDF::Trine::Node::Literal::XML;"; ## no critic (ProhibitStringyEval) $USE_XMLLITERALS = (RDF::Trine::Node::Literal::XML->can('new')) ? 1 : 0; eval "use RDF::Trine::Node::Formula;"; ## no critic (ProhibitStringyEval) $USE_FORMULAE = (RDF::Trine::Node::Formula->can('new')) ? 1 : 0; } ###################################################################### use overload '""' => sub { $_[0]->sse }, ; =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C Returns a new Literal structure. =cut sub new { my $class = shift; my $literal = shift; my $lang = shift; my $dt = shift; my $canon = shift; unless (defined($literal)) { throw RDF::Trine::Error::MethodInvocationError -text => "Literal constructor called with an undefined value"; } if (blessed($dt) and $dt->isa('RDF::Trine::Node::Resource')) { $dt = $dt->uri_value; } if ($dt and $canon) { $literal = $class->canonicalize_literal_value( $literal, $dt ); } if ($USE_XMLLITERALS and defined($dt) and $dt eq 'http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral') { return RDF::Trine::Node::Literal::XML->new( $literal, $lang, $dt ); } elsif ($USE_FORMULAE and defined($dt) and $dt eq RDF::Trine::Node::Formula->literal_datatype) { return RDF::Trine::Node::Formula->new( $literal ); } else { return $class->_new( $literal, $lang, $dt ); } } sub _new { my $class = shift; my $literal = shift; my $lang = shift; my $dt = shift; my $self; if ($lang and $dt) { throw RDF::Trine::Error::MethodInvocationError ( -text => "Literal values cannot have both language and datatype" ); } if ($lang) { $self = [ $literal, lc($lang), undef ]; } elsif ($dt) { if (blessed($dt)) { $dt = $dt->uri_value; } $self = [ $literal, undef, $dt ]; } else { $self = [ $literal ]; } return bless($self, $class); } =item C<< literal_value >> Returns the string value of the literal. =cut sub literal_value { my $self = shift; if (@_) { $self->[0] = shift; } return $self->[0]; } =item C<< literal_value_language >> Returns the language tag of the ltieral. =cut sub literal_value_language { my $self = shift; return $self->[1]; } =item C<< literal_datatype >> Returns the datatype of the literal. =cut sub literal_datatype { my $self = shift; return $self->[2]; } =item C<< value >> Returns the literal value. =cut sub value { my $self = shift; return $self->literal_value; } =item C<< sse >> Returns the SSE string for this literal. =cut sub sse { my $self = shift; my $literal = $self->literal_value; my $escaped = $self->_unicode_escape( $literal ); $literal = $escaped; if (defined(my $lang = $self->literal_value_language)) { return qq("${literal}"\@${lang}); } elsif (defined(my $dt = $self->literal_datatype)) { return qq("${literal}"^^<${dt}>); } else { return qq("${literal}"); } } =item C<< as_string >> Returns a string representation of the node. =cut sub as_string { my $self = shift; my $string = '"' . $self->literal_value . '"'; if (defined(my $dt = $self->literal_datatype)) { $string .= '^^<' . $dt . '>'; } elsif (defined(my $lang = $self->literal_value_language)) { $string .= '@' . $lang; } return $string; } =item C<< as_ntriples >> Returns the node in a string form suitable for NTriples serialization. =cut sub as_ntriples { my $self = shift; my $literal = $self->literal_value; my $escaped = $self->_unicode_escape( $literal ); $literal = $escaped; if (defined(my $lang = $self->literal_value_language)) { return qq("${literal}"\@${lang}); } elsif (defined(my $dt = $self->literal_datatype)) { return qq("${literal}"^^<${dt}>); } else { return qq("${literal}"); } } =item C<< type >> Returns the type string of this node. =cut sub type { return 'LITERAL'; } =item C<< has_language >> Returns true if this literal is language-tagged, false otherwise. =cut sub has_language { my $self = shift; return defined($self->literal_value_language) ? 1 : 0; } =item C<< has_datatype >> Returns true if this literal is datatyped, false otherwise. =cut sub has_datatype { my $self = shift; return defined($self->literal_datatype) ? 1 : 0; } =item C<< equal ( $node ) >> Returns true if the two nodes are equal, false otherwise. =cut sub equal { my $self = shift; my $node = shift; return 0 unless (blessed($node) and $node->isa('RDF::Trine::Node::Literal')); return 0 unless ($self->literal_value eq $node->literal_value); if ($self->literal_datatype or $node->literal_datatype) { no warnings 'uninitialized'; return 0 unless ($self->literal_datatype eq $node->literal_datatype); } if ($self->literal_value_language or $node->literal_value_language) { no warnings 'uninitialized'; return 0 unless ($self->literal_value_language eq $node->literal_value_language); } return 1; } # called to compare two nodes of the same type sub _compare { my $a = shift; my $b = shift; if ($a->literal_value ne $b->literal_value) { return ($a->literal_value cmp $b->literal_value); } # the nodes have the same lexical value if ($a->has_language and $b->has_language) { return ($a->literal_value_language cmp $b->literal_value_language); } if ($a->has_datatype and $b->has_datatype) { return ($a->literal_datatype cmp $b->literal_datatype); } elsif ($a->has_datatype) { return 1; } elsif ($b->has_datatype) { return -1; } return 0; } =item C<< canonicalize >> Returns a new literal node object whose value is in canonical form (where applicable). =cut sub canonicalize { my $self = shift; my $class = ref($self); my $dt = $self->literal_datatype; my $lang = $self->literal_value_language; my $value = $self->value; if (defined $dt) { $value = RDF::Trine::Node::Literal->canonicalize_literal_value( $value, $dt, 1 ); } return $class->new($value, $lang, $dt); } =item C<< canonicalize_literal_value ( $string, $datatype, $warn ) >> If C<< $datatype >> is a recognized datatype, returns the canonical lexical representation of the value C<< $string >>. Otherwise returns C<< $string >>. Currently, xsd:integer, xsd:decimal, and xsd:boolean are canonicalized. Additionally, invalid lexical forms for xsd:float, xsd:double, and xsd:dateTime will trigger a warning. =cut sub canonicalize_literal_value { my $self = shift; my $value = shift; my $dt = shift; my $warn = shift; if ($dt eq 'http://www.w3.org/2001/XMLSchema#integer') { if ($value =~ m/^([-+])?(\d+)$/) { my $sign = $1 || ''; my $num = $2; $sign = '' if ($sign eq '+'); $num =~ s/^0+(\d)/$1/; return "${sign}${num}"; } else { warn "Bad lexical form for xsd:integer: '$value'" if ($warn); } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#decimal') { if ($value =~ m/^([-+])?((\d+)([.]\d*)?)$/) { my $sign = $1 || ''; my $num = $2; my $int = $3; my $frac = $4; $sign = '' if ($sign eq '+'); $num =~ s/^0+(.)/$1/; $num =~ s/[.](\d)0+$/.$1/; if ($num =~ /^[.]/) { $num = "0$num"; } if ($num !~ /[.]/) { $num = "${num}.0"; } return "${sign}${num}"; } elsif ($value =~ m/^([-+])?([.]\d+)$/) { my $sign = $1 || ''; my $num = $2; $sign = '' if ($sign eq '+'); $num =~ s/^0+(.)/$1/; return "${sign}${num}"; } else { warn "Bad lexical form for xsd:deciaml: '$value'" if ($warn); $value = sprintf('%f', $value); } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#float') { if ($value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/) { my $sign = $1; my $inf = $4; my $nan = $5; no warnings 'uninitialized'; $sign = '' if ($sign eq '+'); return "${sign}$inf" if ($inf); return $nan if ($nan); $value = sprintf('%E', $value); $value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/; $sign = $1; $inf = $4; $nan = $5; my $num = $2; my $exp = $3; $num =~ s/[.](\d+?)0+/.$1/; $exp =~ tr/e/E/; $exp =~ s/E[+]/E/; $exp =~ s/E(-?)0+([1-9])$/E$1$2/; $exp =~ s/E(-?)0+$/E${1}0/; return "${sign}${num}${exp}"; } else { warn "Bad lexical form for xsd:float: '$value'" if ($warn); $value = sprintf('%E', $value); $value =~ s/E[+]/E/; $value =~ s/E0+(\d)/E$1/; $value =~ s/(\d)0+E/$1E/; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#double') { if ($value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/) { my $sign = $1; my $inf = $4; my $nan = $5; no warnings 'uninitialized'; $sign = '' if ($sign eq '+'); return "${sign}$inf" if ($inf); return $nan if ($nan); $value = sprintf('%E', $value); $value =~ m/^(?:([-+])?(?:(\d+(?:\.\d*)?|\.\d+)([Ee][-+]?\d+)?|(INF)))|(NaN)$/; $sign = $1; $inf = $4; $nan = $5; my $num = $2; my $exp = $3; $num =~ s/[.](\d+?)0+/.$1/; $exp =~ tr/e/E/; $exp =~ s/E[+]/E/; $exp =~ s/E(-?)0+([1-9])$/E$1$2/; $exp =~ s/E(-?)0+$/E${1}0/; return "${sign}${num}${exp}"; } else { warn "Bad lexical form for xsd:double: '$value'" if ($warn); $value = sprintf('%E', $value); $value =~ s/E[+]/E/; $value =~ s/E0+(\d)/E$1/; $value =~ s/(\d)0+E/$1E/; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#boolean') { if ($value =~ m/^(true|false|0|1)$/) { $value = 'true' if ($value eq '1'); $value = 'false' if ($value eq '0'); return $value; } else { warn "Bad lexical form for xsd:boolean: '$value'" if ($warn); } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#dateTime') { if ($value =~ m/^-?([1-9]\d{3,}|0\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0\d|1[0-3]):[0-5]\d|14:00))?$/) { # XXX need to canonicalize the dateTime return $value; } else { warn "Bad lexical form for xsd:boolean: '$value'" if ($warn); } } return $value; } =item C<< is_canonical_lexical_form >> =cut sub is_canonical_lexical_form { my $self = shift; my $value = $self->literal_value; my $dt = $self->literal_datatype; unless ($dt =~ qr<^http://www.w3.org/2001/XMLSchema#(integer|decimal|float|double|boolean|dateTime|non(Positive|Negative)Integer|(positive|negative)Integer|long|int|short|byte|unsigned(Long|Int|Short|Byte))>) { return '0E0'; # zero but true (it's probably ok, but we don't recognize the datatype) } if ($dt =~ m) { if ($value =~ m/^([-+])?(\d+)$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#decimal') { if ($value =~ m/^([-+])?((\d+)[.]\d+)$/) { return 1; } elsif ($value =~ m/^([-+])?([.]\d+)$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#float') { if ($value =~ m/^[-+]?(\d+\.\d*|\.\d+)([Ee][-+]?\d+)?|[-+]?INF|NaN$/) { return 1; } elsif ($value =~ m/^[-+]?(\d+(\.\d*)?|\.\d+)([Ee][-+]?\d+)|[-+]?INF|NaN$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#double') { if ($value =~ m/^[-+]?((\d+(\.\d*))|(\.\d+))([Ee][-+]?\d+)?|[-+]?INF|NaN$/) { return 1; } elsif ($value =~ m/^[-+]?((\d+(\.\d*)?)|(\.\d+))([Ee][-+]?\d+)|[-+]?INF|NaN$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#boolean') { if ($value =~ m/^(true|false)$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#dateTime') { if ($value =~ m/^-?([1-9]\d{3,}|0\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0\d|1[0-3]):[0-5]\d|14:00))?$/) { return 1; } else { return 0; } } return 0; } =item C<< is_valid_lexical_form >> Returns true if the node is of a recognized datatype and has a valid lexical form for that datatype. If the lexical form is invalid, returns false. If the datatype is unrecognized, returns zero-but-true. =cut sub is_valid_lexical_form { my $self = shift; my $value = $self->literal_value; my $dt = $self->literal_datatype; unless ($dt =~ qr<^http://www.w3.org/2001/XMLSchema#(integer|decimal|float|double|boolean|dateTime|non(Positive|Negative)Integer|(positive|negative)Integer|long|int|short|byte|unsigned(Long|Int|Short|Byte))>) { return '0E0'; # zero but true (it's probably ok, but we don't recognize the datatype) } if ($dt =~ m) { if ($value =~ m/^([-+])?(\d+)$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#decimal') { if ($value =~ m/^([-+])?((\d+)([.]\d*)?)$/) { return 1; } elsif ($value =~ m/^([-+])?([.]\d+)$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#float') { if ($value =~ m/^[-+]?(\d+(\.\d*)?|\.\d+)([Ee][-+]?\d+)?|[-+]?INF|NaN$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#double') { if ($value =~ m/^[-+]?((\d+(\.\d*)?)|(\.\d+))([Ee][-+]?\d+)?|[-+]?INF|NaN$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#boolean') { if ($value =~ m/^(true|false|0|1)$/) { return 1; } else { return 0; } } elsif ($dt eq 'http://www.w3.org/2001/XMLSchema#dateTime') { if ($value =~ m/^-?([1-9]\d{3,}|0\d{3})-(0[1-9]|1[0-2])-(0[1-9]|[12]\d|3[01])T(([01]\d|2[0-3]):[0-5]\d:[0-5]\d(\.\d+)?|(24:00:00(\.0+)?))(Z|(\+|-)((0\d|1[0-3]):[0-5]\d|14:00))?$/) { return 1; } else { return 0; } } return 0; } =item C<< is_numeric_type >> Returns true if the literal is a known (xsd) numeric type. =cut sub is_numeric_type { my $self = shift; return 0 unless ($self->has_datatype); my $type = $self->literal_datatype; if ($type =~ qr<^http://www.w3.org/2001/XMLSchema#(integer|decimal|float|double|non(Positive|Negative)Integer|(positive|negative)Integer|long|int|short|byte|unsigned(Long|Int|Short|Byte))>) { return 1; } else { return 0; } } =item C<< numeric_value >> Returns the numeric value of the literal (even if the literal isn't a known numeric type. =cut sub numeric_value { my $self = shift; if ($self->is_numeric_type) { my $value = $self->literal_value; if (looks_like_number($value)) { my $v = 0 + eval "$value"; ## no critic (ProhibitStringyEval) return $v; } else { throw RDF::Query::Error::TypeError -text => "Literal with numeric type does not appear to have numeric value."; } } elsif (not $self->has_datatype) { if (looks_like_number($self->literal_value)) { return 0+$self->literal_value; } else { return; } } elsif ($self->literal_datatype eq 'http://www.w3.org/2001/XMLSchema#boolean') { return ($self->literal_value eq 'true') ? 1 : 0; } else { return; } } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Node/Nil.pm000644 000765 000024 00000004747 12171744402 017527 0ustar00gregstaff000000 000000 # RDF::Trine::Node::Nil # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Node::Nil - RDF Node class for the nil node =head1 VERSION This document describes RDF::Trine::Node::Nil version 1.007 =cut package RDF::Trine::Node::Nil; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Node); use Data::Dumper; use Scalar::Util qw(blessed refaddr); use Carp qw(carp croak confess); ###################################################################### my $NIL_NODE; our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### use overload '""' => sub { $_[0]->sse }, ; =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C<< new () >> Returns the nil-valued node. =cut sub new { my $class = shift; if (blessed($NIL_NODE)) { return $NIL_NODE; } else { $NIL_NODE = bless({}, $class); return $NIL_NODE; } } =item C<< is_nil >> Returns true if this object is the nil-valued node. =cut sub is_nil { my $self = shift; return (refaddr($self) == refaddr($NIL_NODE)); } =item C<< sse >> Returns the SSE string for this nil node. =cut sub sse { my $self = shift; return '(nil)'; } =item C<< as_ntriples >> Returns the N-Triples serialization of the nil node's IRI . =cut sub as_ntriples { my $self = shift; return sprintf('<%s>', &RDF::Trine::NIL_GRAPH()); } =item C<< type >> Returns the type string of this node. =cut sub type { return 'NIL'; } =item C<< value >> Returns the empty string. =cut sub value { my $self = shift; return ''; } =item C<< equal ( $node ) >> Returns true if the two nodes are equal, false otherwise. =cut sub equal { my $self = shift; my $node = shift; return 0 unless (blessed($node)); if ($self->isa('RDF::Trine::Node::Nil') and $node->isa('RDF::Trine::Node::Nil')) { return 1; } else { return 0; } } # called to compare two nodes of the same type sub _compare { return 0; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Node/Resource.pm000644 000765 000024 00000015612 12171744402 020565 0ustar00gregstaff000000 000000 # RDF::Trine::Node::Resource # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Node::Resource - RDF Node class for IRI resources =head1 VERSION This document describes RDF::Trine::Node::Resource version 1.007 =cut package RDF::Trine::Node::Resource; use utf8; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Node); use URI 1.52; use Encode; use Data::Dumper; use Scalar::Util qw(blessed reftype refaddr); use Carp qw(carp croak confess); ###################################################################### our ($VERSION, %sse, %ntriples); BEGIN { $VERSION = '1.007'; } ###################################################################### use overload '""' => sub { $_[0]->sse }, ; =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C Returns a new Resource structure. =cut sub new { my $class = shift; my $uri = shift; my $base_uri = shift; unless (defined($uri)) { throw RDF::Trine::Error::MethodInvocationError -text => "Resource constructor called with an undefined value"; } if (defined($base_uri)) { $base_uri = (blessed($base_uri) and $base_uri->isa('RDF::Trine::Node::Resource')) ? $base_uri->uri_value : "$base_uri"; my @chars; my $i = 0; if ("${base_uri}${uri}" =~ /!/) { # replace occurrences of '!' in $base_uri and $uri with '!(\d)!' and set $chars[$1] = '!' for ($base_uri, $uri) { s/!/$chars[$i] = '!'; sprintf('!%d!', $i++)/eg; } } # swap unicode chars for "!${i}!" and add the char to $chars[$i++] for ($uri, $base_uri) { s/([^\x{00}-\x{127}]+)/$chars[$i] = $1; sprintf('!%d!', $i++)/eg; } $uri = URI->new_abs($uri, $base_uri)->as_string; # put back the unicode characters where they belong $uri =~ s/!(\d+)!/$chars[$1]/eg; } utf8::upgrade($uri); if ($uri eq &RDF::Trine::NIL_GRAPH) { return RDF::Trine::Node::Nil->new(); } if ($uri =~ /([<>" {}|\\^`])/) { throw RDF::Trine::Error -text => sprintf("Bad IRI character: '%s' (0x%x)", $1, ord($1)); } return bless( [ 'URI', $uri ], $class ); } =item C<< uri_value >> Returns the URI/IRI value of this resource. =cut sub uri_value { my $self = shift; return $self->[1]; } =item C<< value >> Returns the URI/IRI value. =cut sub value { my $self = shift; return $self->uri_value; } =item C<< uri ( $uri ) >> Returns the URI value of this resource, optionally updating the URI. =cut sub uri { my $self = shift; if (@_) { $self->[1] = shift; delete $sse{ refaddr($self) }; delete $ntriples{ refaddr($self) }; } return $self->[1]; } =item C<< sse >> Returns the SSE string for this resource. =cut sub sse { my $self = shift; my $context = shift; if ($context) { my $uri = $self->uri_value; my $ns = $context->{namespaces} || {}; my %ns = %$ns; foreach my $k (keys %ns) { my $v = $ns{ $k }; if (index($uri, $v) == 0) { my $qname = join(':', $k, substr($uri, length($v))); return $qname; } } } my $ra = refaddr($self); if ($sse{ $ra }) { return $sse{ $ra }; } else { my $string = URI->new( $self->uri_value )->canonical; my $sse = '<' . $string . '>'; $sse{ $ra } = $sse; return $sse; } # my $string = $uri; # my $escaped = $self->_unicode_escape( $string ); # return '<' . $escaped . '>'; } =item C<< as_string >> Returns a string representation of the node. =cut sub as_string { my $self = shift; return '<' . $self->uri_value . '>'; } =item C<< as_ntriples >> Returns the node in a string form suitable for NTriples serialization. If the IRI contains punycode, it will be decoded and serialized as unicode codepoints. =cut sub as_ntriples { my $self = shift; my $context = shift; my $ra = refaddr($self); if ($ntriples{ $ra }) { return $ntriples{ $ra }; } else { my $uri = $self->uri_value; $uri = URI->new($uri)->as_iri; my @chars = split(//, $uri); my $string = ''; while (scalar(@chars)) { my $c = shift(@chars); my $o = ord($c); if ($o < 0x8) { $string .= sprintf("\\u%04X", $o); } elsif ($o == 0x9) { $string .= "\\t"; } elsif ($o == 0xA) { $string .= "\\n"; } elsif ($o < 0xC) { $string .= sprintf("\\u%04X", $o); } elsif ($o == 0xD) { $string .= "\\r"; } elsif ($o < 0x1F) { $string .= sprintf("\\u%04X", $o); } elsif ($o < 0x21) { $string .= $c; } elsif ($o == 0x22) { $string .= "\""; } elsif ($o < 0x5B) { $string .= $c; } elsif ($o == 0x5C) { $string .= "\\"; } elsif ($o < 0x7E) { $string .= $c; } elsif ($o < 0xFFFF) { $string .= sprintf("\\u%04X", $o); } else { $string .= sprintf("\\U%08X", $o); } } my $ntriples = '<' . $string . '>'; $ntriples{ $ra } = $ntriples; return $ntriples; } } =item C<< type >> Returns the type string of this node. =cut sub type { return 'URI'; } =item C<< equal ( $node ) >> Returns true if the two nodes are equal, false otherwise. =cut sub equal { my $self = shift; my $node = shift; return 0 unless defined($node); return 1 if (refaddr($self) == refaddr($node)); return 0 unless (blessed($node) and $node->isa('RDF::Trine::Node::Resource')); my $uri1 = URI->new($self->uri_value)->as_iri; my $uri2 = URI->new($node->uri_value)->as_iri; return ($uri1 eq $uri2); } # called to compare two nodes of the same type sub _compare { my $a = shift; my $b = shift; return ($a->uri_value cmp $b->uri_value); } =item C<< qname >> If the IRI can be split into a namespace and local part for construction of a QName, returns a list containing these two parts. Otherwise throws an exception. =cut sub qname { my $p = shift; my $uri = $p->uri_value; our $r_PN_CHARS_BASE ||= qr/([A-Z]|[a-z]|[\x{00C0}-\x{00D6}]|[\x{00D8}-\x{00F6}]|[\x{00F8}-\x{02FF}]|[\x{0370}-\x{037D}]|[\x{037F}-\x{1FFF}]|[\x{200C}-\x{200D}]|[\x{2070}-\x{218F}]|[\x{2C00}-\x{2FEF}]|[\x{3001}-\x{D7FF}]|[\x{F900}-\x{FDCF}]|[\x{FDF0}-\x{FFFD}]|[\x{10000}-\x{EFFFF}])/; our $r_PN_CHARS_U ||= qr/(_|${r_PN_CHARS_BASE})/; our $r_PN_CHARS ||= qr/${r_PN_CHARS_U}|-|[0-9]|\x{00B7}|[\x{0300}-\x{036F}]|[\x{203F}-\x{2040}]/; our $r_PN_LOCAL ||= qr/((${r_PN_CHARS_U})((${r_PN_CHARS}|[.])*${r_PN_CHARS})?)/; if ($uri =~ m/${r_PN_LOCAL}$/) { my $ln = $1; my $ns = substr($uri, 0, length($uri)-length($ln)); return ($ns, $ln); } else { throw RDF::Trine::Error -text => "Can't turn IRI $uri into a QName."; } } sub DESTROY { my $self = shift; delete $sse{ refaddr($self) }; delete $ntriples{ refaddr($self) }; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Node/Variable.pm000644 000765 000024 00000005171 12171744402 020522 0ustar00gregstaff000000 000000 # RDF::Trine::Node::Variable # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Node::Variable - RDF Node class for variables =head1 VERSION This document describes RDF::Trine::Node::Variable version 1.007 =cut package RDF::Trine::Node::Variable; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Node); use Data::Dumper; use Scalar::Util qw(blessed); use Carp qw(carp croak confess); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### use overload '""' => sub { $_[0]->sse }, ; =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut =item C Returns a new Variable structure. =cut sub new { my $class = shift; my $name = shift; return bless( [ $name ], $class ); } =item C<< name >> Returns the name of the variable. =cut sub name { my $self = shift; return $self->[0]; } =item C<< sse >> Returns the SSE string for this variable. =cut sub sse { my $self = shift; my $name = $self->name; return qq(?${name}); } =item C<< as_string >> Returns a string representation of the node. =cut sub as_string { my $self = shift; return '?' . $self->name; } =item C<< value >> Returns the variable name. =cut sub value { my $self = shift; return $self->name; } =item C<< as_ntriples >> Returns the node in a string form suitable for NTriples serialization. =cut sub as_ntriples { my $self = shift; throw RDF::Trine::Error::UnimplementedError -text => "Variable nodes aren't allowed in NTriples"; } =item C<< type >> Returns the type string of this node. =cut sub type { return 'VAR'; } =item C<< equal ( $node ) >> Returns true if the two nodes are equal, false otherwise. =cut sub equal { my $self = shift; my $node = shift; return 0 unless (blessed($node) and $node->isa('RDF::Trine::Node')); return 0 unless ($self->type eq $node->type); return ($self->name eq $node->name); } # called to compare two nodes of the same type sub _compare { my $a = shift; my $b = shift; return ($a->name cmp $b->name); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Model/Dataset.pm000644 000765 000024 00000024006 12171744402 020533 0ustar00gregstaff000000 000000 # RDF::Trine::Model::Dataset # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Model::Dataset - Model for SPARQL datasets =head1 VERSION This document describes RDF::Trine::Model::Dataset version 1.007 =head1 STATUS This module's API and functionality should be considered unstable. In the future, this module may change in backwards-incompatible ways, or be removed entirely. If you need functionality that this module provides, please L. =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Model::Dataset; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Model); use Scalar::Util qw(blessed); use RDF::Trine::Model; our ($VERSION); BEGIN { $VERSION = '1.007'; } ################################################################################ =item C<< new ( $model ) >> Returns a new dataset-model over the supplied model. =cut sub new { my $class = shift; my $model = shift; my $self = bless({ model => $model, stack => [] }, $class); } =item C<< push_dataset ( default => \@graphs, named => \@graphs ) >> Creates a new dataset view over the underlying model. =cut sub push_dataset { my $self = shift; my %dataset = @_; my @dgraphs = @{ $dataset{ default } || [] }; unshift(@{ $self->{ stack } }, { default => {}, named => {} }); foreach my $graph (@dgraphs) { my $name = blessed($graph) ? $graph->uri_value : $graph; $graph = blessed($graph) ? $graph : RDF::Trine::Node::Resource->new( $graph ); $self->{stack}[0]{default}{$name} = $graph; } my @ngraphs = @{ $dataset{ named } || [] }; foreach my $graph (@ngraphs) { my $name = blessed($graph) ? $graph->uri_value : $graph; $graph = blessed($graph) ? $graph : RDF::Trine::Node::Resource->new( $graph ); $self->{stack}[0]{named}{$name} = $graph; } return 1; } =item C<< pop_dataset >> Removes the last pushed dataset view. =cut sub pop_dataset { my $self = shift; shift(@{ $self->{ stack } }); return 1; } =item C<< temporary_model >> Returns a new temporary (non-persistent) model. =cut sub temporary_model { my $class = shift; my $model = RDF::Trine::Model->temporary_model; return $class->new( $model ); } =item C<< add_hashref ( $hashref [, $context] ) >> Add triples represented in an RDF/JSON-like manner to the model. =cut sub add_hashref { my $self = shift; return $self->model->add_hashref( @_ ); } =item C<< size >> Returns the number of statements in the model. =cut sub size { my $self = shift; return $self->count_statements( undef, undef, undef, undef ); } =item C<< supports ( [ $feature ] ) >> If C<< $feature >> is specified, returns true if the feature is supported by the underlying store, false otherwise. If C<< $feature >> is not specified, returns a list of supported features. =cut sub supports { my $self = shift; my $store = $self->_store; if ($store) { return $store->supports( @_ ); } return; } =item C<< count_statements ( $subject, $predicate, $object ) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; return $self->model->count_statements( @_ ) unless (scalar(@{ $self->{stack} })); my $use_quad = (scalar(@_) >= 4); if ($use_quad) { # warn "counting quads with dataset"; my $quad = $_[3]; if (blessed($quad) and $quad->isa('RDF::Trine::Node::Nil')) { # warn "- default graph query"; # warn "- " . join(', ', keys %{ $self->{stack}[0] }); my $count = 0; foreach my $g (values %{ $self->{stack}[0]{default} }) { $count += $self->model->count_statements( @_[0..2], $g ); # warn "$count statments in graph " . $g->uri_value; } return $count; } elsif (not(defined($quad)) or (blessed($quad) and $quad->isa('RDF::Trine::Node::Variable'))) { my $iter = $self->get_contexts; my $count = 0; while (my $g = $iter->next) { $count += $self->model->count_statements( @_[0..2], $g ); } return $count; } else { my $name = blessed($quad) ? $quad->uri_value : $quad; if ($self->{stack}[0]{named}{ $name }) { return $self->model->count_statements( @_[0..2], $quad ); } else { return 0; } } } else { my %seen; my $count = 0; my $iter = $self->get_statements( @_[0..2], undef ); while (my $st = $iter->next) { warn 'counting triples in dataset: ' . $st->as_string; $count++ unless ($seen{ join(' ', map { $_->as_string } (map { $st->$_() } qw(subject predicate object)) ) }++); } return $count; } } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<< $statement >> to the rdf store. =cut sub add_statement { my $self = shift; return $self->model->add_statement( @_ ); } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<< $statement >> from the rdf store. =cut sub remove_statement { my $self = shift; return $self->model->remove_statement( @_ ); } =item C<< remove_statements ( $subject, $predicate, $object [, $context] ) >> Removes all statements matching the supplied C<< $statement >> pattern from the rdf store. =cut sub remove_statements { my $self = shift; return $self->model->remove_statements( @_ ); } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns an iterator of all statements matching the specified subject, predicate and objects from the rdf store. Any of the arguments may be undef to match any value. If three or fewer arguments are given, the statements returned will be matched based on triple semantics (the graph union of triples from all the named graphs). If four arguments are given (even if C<< $context >> is undef), statements will be matched based on quad semantics (the union of all quads in the underlying store). =cut sub get_statements { my $self = shift; return $self->model->get_statements( @_ ) unless (scalar(@{ $self->{stack} })); my $bound = 0; my $use_quad = (scalar(@_) >= 4); my $nil = RDF::Trine::Node::Nil->new(); if ($use_quad) { my $quad = $_[3]; if (blessed($quad) and not($quad->isa('RDF::Trine::Node::Variable')) and not($quad->isa('RDF::Trine::Node::Nil'))) { if (exists($self->{stack}[0]{named}{$quad->uri_value})) { return $self->model->get_statements( @_ ); } else { return RDF::Trine::Iterator::Graph->new([]); } } else { my @iters; foreach my $g (values %{ $self->{stack}[0]{default} }) { my $iter = $self->model->get_statements( @_[0..2], $g ); my $code = sub { my $st = $iter->next; return unless $st; my @nodes = $st->nodes; $nodes[3] = $nil; my $quad = RDF::Trine::Statement::Quad->new( @nodes ); return $quad; }; push(@iters, RDF::Trine::Iterator::Graph->new( $code )); } if (not(defined($quad)) or $quad->isa('RDF::Trine::Node::Variable')) { my $graphs = $self->get_contexts; while (my $g = $graphs->next) { next if ($g->isa('RDF::Trine::Node::Nil')); push(@iters, $self->model->get_statements( @_[0..2], $g )); } } my %seen; my $code = sub { while (1) { return unless scalar(@iters); my $st = $iters[0]->next; if ($st) { if ($seen{ $st->as_string }++) { next; } return $st; } else { shift(@iters); } } }; my $iter = RDF::Trine::Iterator::Graph->new( $code ); return $iter; } } else { my %seen; my @iters; my $iter = $self->get_statements( @_[0..2], $nil ); push(@iters, $iter); my $giter = $self->get_contexts; while (my $g = $giter->next) { my $iter = $self->get_statements( @_[0..2], $g ); push(@iters, $iter); } my $code = sub { while (1) { return unless scalar(@iters); my $st = $iters[0]->next; if ($st) { my @nodes = (map { $st->$_() } qw(subject predicate object)); next if ($seen{ join(' ', map { $_->as_string } @nodes ) }++); return RDF::Trine::Statement->new( @nodes ); } else { shift(@iters); } } }; return RDF::Trine::Iterator::Graph->new( $code ); } } =item C<< get_pattern ( $bgp [, $context] [, %args ] ) >> Returns a stream object of all bindings matching the specified graph pattern. =cut sub get_pattern { my $self = shift; return $self->model->get_pattern( @_ ) unless (scalar(@{ $self->{stack} })); my $use_quad = (scalar(@_) >= 4); if ($use_quad) { my $quad = $_[3]; if (blessed($quad) and not($quad->isa('RDF::Trine::Node::Variable')) and not($quad->isa('RDF::Trine::Node::Nil'))) { return $self->model->get_pattern( @_ ); } else { return $self->SUPER::get_pattern( @_ ); } } else { return $self->model->get_pattern( @_ ); } } =item C<< get_sparql ( $sparql ) >> Returns a stream object of all bindings matching the specified graph pattern. =cut sub get_sparql { my $self = shift; return $self->model->get_sparql( @_ ) unless (scalar(@{ $self->{stack} })); throw RDF::Trine::Error::UnimplementedError -text => "Cannot execute SPARQL queries against a complex dataset model"; } =item C<< get_graphs >> =item C<< get_contexts >> Returns an iterator containing the nodes representing the named graphs in the model. =cut sub get_contexts { my $self = shift; return $self->model->get_contexts unless (scalar(@{ $self->{stack} })); my @nodes = values %{ $self->{stack}[0]{named} }; if (wantarray) { return @nodes; } else { return RDF::Trine::Iterator->new( \@nodes ); } } *get_graphs = \&get_contexts; =item C<< model >> Returns the underlying model object. =cut sub model { my $self = shift; return $self->{model}; } sub _store { my $self = shift; return $self->model->_store; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Model/StatementFilter.pm000644 000765 000024 00000011260 12171744402 022256 0ustar00gregstaff000000 000000 # RDF::Trine::Model::StatementFilter # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Model::StatementFilter - Model for filtering statements based on a user-specified criteria =head1 VERSION This document describes RDF::Trine::Model::StatementFilter version 1.007 =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Model::StatementFilter; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use base qw(RDF::Trine::Model); use Scalar::Util qw(blessed reftype); use RDF::Trine::Node; use RDF::Trine::Pattern; use RDF::Trine::Iterator qw(sgrep); our ($VERSION); BEGIN { $VERSION = '1.007'; } ################################################################################ =item C<< new ( $store ) >> Returns a new statement-filter model. =cut sub new { my $class = shift; my $self = $class->SUPER::new( @_ ); $self->{rules} = []; return $self; } =item C<< count_statements ($subject, $predicate, $object) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my $s = shift; my $p = shift; my $o = shift; my $c = shift; my $count = 0; my $i = $self->get_statements( $s, $p, $o, $c ); while (my $s = $i->next) { $count++; } return $count; } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects from all of the rdf stores. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my $s = shift; my $p = shift; my $o = shift; my $c = shift; my $stream = sgrep { $self->apply_rules($_) } $self->SUPER::get_statements( $s, $p, $o, $c ); return $stream; } =item C<< get_pattern ( $bgp [, $context] ) >> Returns a stream object of all bindings matching the specified graph pattern. =cut sub get_pattern { my $self = shift; my $bgp = shift; my $context = shift; my %args = @_; if (my $o = $args{ orderby }) { my @ordering = @$o; while (my ($col, $dir) = splice( @ordering, 0, 2, () )) { no warnings 'uninitialized'; unless ($dir =~ /^(ASC|DESC)$/) { throw RDF::Trine::Error -text => 'Direction must be ASC or DESC in get_pattern call'; } } } my @rules = $self->rules; if (@rules) { my (@triples) = ($bgp->isa('RDF::Trine::Statement')) ? $bgp : $bgp->triples; unless (@triples) { throw RDF::Trine::Error::CompilationError -text => 'Cannot call get_pattern() with empty pattern'; } my @streams; foreach my $triple (@triples) { my @vars = map { $_->name } grep { $_->isa('RDF::Trine::Node::Variable') } $triple->nodes; Carp::confess "not a statement object: " . Dumper($triple) unless ($triple->isa('RDF::Trine::Statement')); my $stream = $self->get_statements( $triple->nodes, $context ); my $binds = $stream->as_bindings( $triple->nodes )->project( @vars ); push(@streams, $binds); } if (@streams) { while (@streams > 1) { my $a = shift(@streams); my $b = shift(@streams); unshift(@streams, RDF::Trine::Iterator::Bindings->join_streams( $a, $b )); } } else { push(@streams, RDF::Trine::Iterator::Bindings->new([{}], [])); } my $stream = shift(@streams); return $stream; } else { return $self->SUPER::get_pattern( $bgp, $context, %args ); } } =item C<< apply_rules ( $statement ) >> =cut sub apply_rules { my $self = shift; my $st = shift; my @rules = $self->rules; foreach my $rule (@rules) { return 0 unless ($rule->( $st )); } return 1; } =item C<< rules >> Returns a list of all rules in the inferencing model. =cut sub rules { my $self = shift; return @{ $self->{rules} }; } =item C<< add_rule ( \&rule ) >> Adds a rule to the inferencing model. The rule should be a CODE reference that, when passed a statement object, will return true if the statement should be allowed in the model, false if it should be filtered out. =cut sub add_rule { my $self = shift; my $rule = shift; throw RDF::Trine::Error -text => "Filter must be a CODE reference" unless (reftype($rule) eq 'CODE'); push( @{ $self->{rules} }, $rule ); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Model/Union.pm000644 000765 000024 00000007401 12171744402 020236 0ustar00gregstaff000000 000000 # RDF::Trine::Model::Union # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Model::Union - Union models for joining multiple stores together =head1 VERSION This document describes RDF::Trine::Model::Union version 1.007 =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Model::Union; use strict; use warnings; no warnings 'redefine'; use base qw(RDF::Trine::Model); use Scalar::Util qw(blessed); use RDF::Trine::Node; use RDF::Trine::Store; our ($VERSION); BEGIN { $VERSION = '1.007'; } ################################################################################ =item C<< new ( @stores ) >> Returns a new union-model over the list of supplied rdf stores. =cut sub new { my $class = shift; my @stores = @_; my $self = bless({ stores => \@stores }, $class); } =item C<< add_statement ( $statement [, $context] ) >> Adds the specified C<$statement> to the first rdf store. =cut sub add_statement { my $self = shift; my @iterators; my ($store) = $self->_stores; $store->add_statement( @_ ); } =item C<< remove_statement ( $statement [, $context]) >> Removes the specified C<$statement> from all of the rdf stores. =cut sub remove_statement { my $self = shift; foreach my $store ($self->_stores) { $store->remove_statement( @_ ); } } =item C<< remove_statements ( $subject, $predicate, $object [, $context]) >> Removes all statements matching the supplied C<$statement> pattern from all of the rdf stores. =cut sub remove_statements { my $self = shift; foreach my $store ($self->_stores) { $store->remove_statements( @_ ); } } =item C<< count_statements ($subject, $predicate, $object) >> Returns a count of all the statements matching the specified subject, predicate and objects. Any of the arguments may be undef to match any value. =cut sub count_statements { my $self = shift; my $count = 0; foreach my $store ($self->_stores) { $count += $store->count_statements( @_ ); } return $count; } =item C<< get_statements ($subject, $predicate, $object [, $context] ) >> Returns a stream object of all statements matching the specified subject, predicate and objects from all of the rdf stores. Any of the arguments may be undef to match any value. =cut sub get_statements { my $self = shift; my @iterators; foreach my $store ($self->_stores) { my $i = $store->get_statements( @_ ); push(@iterators, $i); # my @data; # while (my $d = $i->next) { # warn '++++++++++++++++++ ' . $d->as_string; # # } # # my $m = $i->materialize; # push(@iterators, $m); } while (@iterators > 1) { my $i = shift(@iterators); my $j = shift(@iterators); unshift(@iterators, $i->concat( $j )); } return $iterators[0]->unique; } # =item C<< get_pattern ( $bgp [, $context] ) >> # # Returns a stream object of all bindings matching the specified graph pattern. # # =cut # # sub get_pattern { # my $self = shift; # my @iterators; # foreach my $store ($self->_stores) { # push(@iterators, $store->get_pattern( @_ )); # } # while (@iterators > 1) { # my $i = shift(@iterators); # my $j = shift(@iterators); # unshift(@iterators, $i->concat( $j )); # } # return $iterators[0]; # } sub _stores { my $self = shift; return @{ $self->{stores} }; } sub _store { my $self = shift; return; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/Bindings/000755 000765 000024 00000000000 12171744442 021100 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Iterator/Bindings.pm000644 000765 000024 00000035376 12171744402 021450 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::Bindings # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::Bindings - Iterator class for bindings query results =head1 VERSION This document describes RDF::Trine::Iterator::Bindings version 1.007 =head1 SYNOPSIS use RDF::Trine::Iterator::Bindings; my $iterator = RDF::Trine::Iterator::Bindings->new( \&data, \@names ); while (my $row = $iterator->next) { # $row is a HASHref containing variable name -> RDF Term bindings my @vars = keys %$row; print $row->{ 'var' }->as_string; } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Iterator::Bindings; use utf8; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use JSON 2.0; use Text::Table; use Log::Log4perl; use Scalar::Util qw(blessed reftype); use RDF::Trine::Iterator::Bindings::Materialized; use RDF::Trine::Serializer::Turtle; use RDF::Trine::Iterator qw(smap); use base qw(RDF::Trine::Iterator); use Carp qw(croak); our ($VERSION); BEGIN { $VERSION = '1.007'; } =item C =item C Returns a new SPARQL Result interator object. Results must be either a reference to an array containing results or a CODE reference that acts as an iterator, returning successive items when called, and returning undef when the iterator is exhausted. =cut sub new { my $class = shift; my $stream = shift || sub { undef }; my $names = shift || []; my %args = @_; my $type = 'bindings'; my $self = $class->SUPER::new( $stream, $type, $names, %args ); my $s = $args{ sorted_by } || []; $self->{sorted_by} = $s; return $self; } sub _new { my $class = shift; my $stream = shift; my $type = shift; my $names = shift; my %args = @_; return $class->new( $stream, $names, %args ); } =item C<< materialize >> Returns a materialized version of the current binding iterator. The materialization process will leave this iterator empty. The materialized iterator that is returned should be used for any future need for the iterator's data. =cut sub materialize { my $self = shift; my @data = $self->get_all; my @args = $self->construct_args; return $self->_mclass->_new( \@data, @args ); } sub _mclass { return 'RDF::Trine::Iterator::Bindings::Materialized'; } =item C<< project ( @columns ) >> Returns a new stream that projects the current bindings to only the given columns. =cut sub project { my $self = shift; my $class = ref($self); my @proj = @_; my $sub = sub { my $row = $self->next; return unless ($row); my $p = { map { $_ => $row->{ $_ } } @proj }; return $p; }; my $args = $self->_args(); my $proj = $class->new( $sub, [@proj], %$args ); return $proj; } =item C Performs a natural, nested loop join of the two streams, returning a new stream of joined results. =cut sub join_streams { my $self = shift; my $a = shift; my $b = shift; # my $bridge = shift; my %args = @_; # Carp::confess unless ($a->isa('RDF::Trine::Iterator::Bindings')); # Carp::confess unless ($b->isa('RDF::Trine::Iterator::Bindings')); my $l = Log::Log4perl->get_logger("rdf.trine.iterator.bindings"); my @join_sorted_by; if (my $o = $args{ orderby }) { my $req_sort = join(',', map { $_->[1]->name => $_->[0] } @$o); my $a_sort = join(',', $a->sorted_by); my $b_sort = join(',', $b->sorted_by); if ($l->is_debug) { $l->debug('---------------------------'); $l->debug('REQUESTED SORT in JOIN: ' . Dumper($req_sort)); $l->debug('JOIN STREAM SORTED BY: ' . Dumper($a_sort)); $l->debug('JOIN STREAM SORTED BY: ' . Dumper($b_sort)); } my $actual_sort; if (substr( $a_sort, 0, length($req_sort) ) eq $req_sort) { $l->debug("first stream is already sorted. using it in the outer loop."); } elsif (substr( $b_sort, 0, length($req_sort) ) eq $req_sort) { $l->debug("second stream is already sorted. using it in the outer loop."); ($a,$b) = ($b,$a); } else { my $a_common = join('!', $a_sort, $req_sort); my $b_common = join('!', $b_sort, $req_sort); if ($a_common =~ qr[^([^!]+)[^!]*!\1]) { # shared prefix between $a_sort and $req_sort? $l->debug("first stream is closely sorted ($1)."); } elsif ($b_common =~ qr[^([^!]+)[^!]*!\1]) { # shared prefix between $b_sort and $req_sort? $l->debug("second stream is closely sorted ($1)."); ($a,$b) = ($b,$a); } } @join_sorted_by = ($a->sorted_by, $b->sorted_by); } my $stream = $self->nested_loop_join( $a, $b, %args ); $l->debug("JOINED stream is sorted by: " . join(',', @join_sorted_by)); $stream->{sorted_by} = \@join_sorted_by; return $stream; } =item C<< nested_loop_join ( $outer, $inner ) >> Performs a natural, nested loop join of the two streams, returning a new stream of joined results. Note that the values from the C<< $inner >> iterator are fully materialized for this join, and the results of the join are in the order of values from the C<< $outer >> iterator. This suggests that: * If sorting needs to be preserved, the C<< $outer >> iterator should be used to determine the result ordering. * If one iterator is much smaller than the other, it should likely be used as the C<< $inner >> iterator since materialization will require less total memory. =cut sub nested_loop_join { my $self = shift; my $astream = shift; my $bstream = shift; # my $bridge = shift; my %args = @_; # Carp::confess unless ($astream->isa('RDF::Trine::Iterator::Bindings')); # Carp::confess unless ($bstream->isa('RDF::Trine::Iterator::Bindings')); my $l = Log::Log4perl->get_logger("rdf.trine.iterator.bindings"); my @names = RDF::Trine::_uniq( map { $_->binding_names() } ($astream, $bstream) ); my $a = $astream->project( @names ); my $b = $bstream->project( @names ); my @data = $b->get_all(); no warnings 'uninitialized'; my $inner_index; my $rowa; my $need_new_a = 1; my $sub = sub { OUTER: while (1) { if ($need_new_a) { $l->debug("### fetching new outer tuple"); $rowa = $a->next; $inner_index = 0; $need_new_a = 0; } $l->debug("OUTER: " . Dumper($rowa)); return unless ($rowa); LOOP: while ($inner_index <= $#data) { my $rowb = $data[ $inner_index++ ]; $l->debug("- INNER[ $inner_index ]: " . Dumper($rowb)); $l->debug("[--JOIN--] " . join(' ', map { my $row = $_; '{' . join(', ', map { join('=', $_, ($row->{$_}) ? $row->{$_}->as_string : '(undef)') } (keys %$row)) . '}' } ($rowa, $rowb))); my %keysa = map {$_=>1} (keys %$rowa); my @shared = grep { $keysa{ $_ } } (keys %$rowb); foreach my $key (@shared) { my $val_a = $rowa->{ $key }; my $val_b = $rowb->{ $key }; my $defined = 0; foreach my $n ($val_a, $val_b) { $defined++ if (defined($n)); } if ($defined == 2) { my $equal = $val_a->equal( $val_b ); unless ($equal) { $l->debug("can't join because mismatch of $key (" . join(' <==> ', map {$_->as_string} ($val_a, $val_b)) . ")"); next LOOP; } } } my $row = { (map { $_ => $rowa->{$_} } grep { defined($rowa->{$_}) } keys %$rowa), (map { $_ => $rowb->{$_} } grep { defined($rowb->{$_}) } keys %$rowb) }; if ($l->is_debug) { $l->debug("JOINED:"); foreach my $key (keys %$row) { $l->debug("$key\t=> " . $row->{ $key }->as_string); } } return $row; } $need_new_a = 1; } }; my $args = $astream->_args; return $astream->_new( $sub, 'bindings', \@names, %$args ); } =item C<< sorted_by >> =cut sub sorted_by { my $self = shift; my $sorted = $self->{sorted_by}; return @$sorted; } =item C<< binding_value_by_name ( $name ) >> Returns the binding of the named variable in the current result. =cut sub binding_value_by_name { my $self = shift; my $name = shift; my $row = ($self->open) ? $self->current : $self->next; if (exists( $row->{ $name } )) { return $row->{ $name }; } else { # warn "No variable named '$name' is present in query results.\n"; return; } } =item C<< binding_value ( $i ) >> Returns the binding of the $i-th variable in the current result. =cut sub binding_value { my $self = shift; my $val = shift; my @names = $self->binding_names; return $self->binding_value_by_name( $names[ $val ] ); } =item C Returns a list of the binding values from the current result. =cut sub binding_values { my $self = shift; my $row = ($self->open) ? $self->current : $self->next; return @{ $row }{ $self->binding_names }; } =item C Returns a list of the binding names. =cut sub binding_names { my $self = shift; my $names = $self->{_names}; return @$names; } =item C Returns the name of the $i-th result column. =cut sub binding_name { my $self = shift; my $val = shift; my $names = $self->{_names}; return $names->[ $val ]; } =item C Returns the number of variable bindings in the current result. =cut sub bindings_count { my $self = shift; my $names = $self->{_names}; return scalar( @$names ) if (scalar(@$names)); return 0; } =item C Returns true if the underlying result is a set of variable bindings. =cut sub is_bindings { my $self = shift; return 1; } =item C Returns a JSON serialization of the stream data. =cut sub as_json { my $self = shift; my $max_result_size = shift || 0; my $width = $self->bindings_count; # my $bridge = $self->bridge; my @variables; for (my $i=0; $i < $width; $i++) { my $name = $self->binding_name($i); push(@variables, $name) if $name; } my $count = 0; my @sorted = $self->sorted_by; my $order = scalar(@sorted) ? JSON::true : JSON::false; my $dist = $self->_args->{distinct} ? JSON::true : JSON::false; my $data = { head => { vars => \@variables }, results => { ordered => $order, distinct => $dist, bindings => [] }, }; my @bindings; while (my $row = $self->next) { my %row = map { format_node_json($row->{$_}, $_) } (keys %$row); push(@{ $data->{results}{bindings} }, \%row); last if ($max_result_size and ++$count >= $max_result_size); } return to_json( $data ); } =item C Returns an XML serialization of the stream data. =cut sub as_xml { my $self = shift; my $max_result_size = shift || 0; my $string = ''; open( my $fh, '>', \$string ); $self->print_xml( $fh, $max_result_size ); close($fh); return $string; } =item C Returns a string table serialization of the stream data. =cut sub as_string { my $self = shift; my $max_result_size = shift || 0; my $rescount = shift; my @names = $self->binding_names; my $headers = \@names; my @rows; my $count = 0; while (my $row = $self->next) { push(@rows, [ map { blessed($_) ? RDF::Trine::Serializer::Turtle->node_as_concise_string($_) : '' } @{ $row }{ @names } ]); last if ($max_result_size and ++$count >= $max_result_size); } if (ref($rescount)) { $$rescount = scalar(@rows); } my @rule = qw(- +); my @headers = (\q"| "); push(@headers, map { $_ => \q" | " } @$headers); pop @headers; push @headers => (\q" |"); if ('ARRAY' eq ref $rows[0]) { if (@$headers == @{ $rows[0] }) { my $table = Text::Table->new(@headers); $table->rule(@rule); $table->body_rule(@rule); $table->load(@rows); return join('', $table->rule(@rule), $table->title, $table->rule(@rule), map({ $table->body($_) } 0 .. @rows), $table->rule(@rule) ); } else { die("make_table() rows must be an AoA with rows being same size as headers"); } } else { return ''; } } =item C<< as_statements ( @names ) >> Returns a L with the statements of the stream. =cut sub as_statements { my $self = shift; my @names = @_; my $sub = sub { my $row = $self->next; return unless (defined $row); my @values = @{ $row }{ @names }; my $statement = (scalar(@values) == 3 or not(defined($values[3]))) ? RDF::Trine::Statement->new( @values[ 0 .. 2 ] ) : RDF::Trine::Statement::Quad->new( @values ); return $statement; }; return RDF::Trine::Iterator::Graph->new( $sub ) } =item C<< print_xml ( $fh, $max_size ) >> Prints an XML serialization of the stream data to the filehandle $fh. =cut sub print_xml { my $self = shift; my $fh = shift; my $max_result_size = shift || 0; my $width = $self->bindings_count; my @variables; for (my $i=0; $i < $width; $i++) { my $name = $self->binding_name($i); push(@variables, $name) if $name; } print {$fh} <<"END"; END my $t = join("\n", map { qq(\t) } @variables); if ($t) { print {$fh} "${t}\n"; } print {$fh} <<"END"; END my $count = 0; while (my $row = $self->next) { my @row; print {$fh} "\t\t\n"; for (my $i = 0; $i < $width; $i++) { my $name = $self->binding_name($i); my $value = $row->{ $name }; print {$fh} "\t\t\t" . $self->format_node_xml($value, $name) . "\n"; } print {$fh} "\t\t\n"; last if ($max_result_size and ++$count >= $max_result_size); } print {$fh} "\n"; print {$fh} "\n"; } =begin private =item C Returns a string representation of C<$node> for use in a JSON serialization. =end private =cut sub format_node_json { # my $bridge = shift; # return unless ($bridge); my $node = shift; my $name = shift; my $node_label; if(!defined $node) { return; } elsif ($node->isa('RDF::Trine::Node::Resource')) { $node_label = $node->uri_value; return $name => { type => 'uri', value => $node_label }; } elsif ($node->isa('RDF::Trine::Node::Literal')) { $node_label = $node->literal_value; return $name => { type => 'literal', value => $node_label }; } elsif ($node->isa('RDF::Trine::Node::Blank')) { $node_label = $node->blank_identifier; return $name => { type => 'bnode', value => $node_label }; } else { return; } } =item C<< construct_args >> Returns the arguments necessary to pass to the stream constructor _new to re-create this stream (assuming the same closure as the first argument). =cut sub construct_args { my $self = shift; my $type = $self->type; my @names = $self->binding_names; my $args = $self->_args || {}; return ($type, \@names, %{ $args }); } 1; __END__ =back =head1 DEPENDENCIES L L =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/Boolean.pm000644 000765 000024 00000006672 12171744402 021267 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::Boolean # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::Boolean - Iterator class for boolean query results =head1 VERSION This document describes RDF::Trine::Iterator::Boolean version 1.007 =head1 SYNOPSIS use RDF::Trine::Iterator::Boolean; my $iterator = RDF::Trine::Iterator::Boolean->new( [1] ); my $bool = $iterator->get_boolean; if ($bool) { print "Yes.\n"; } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Iterator::Boolean; use strict; use warnings; no warnings 'redefine'; use JSON 2.0; use base qw(RDF::Trine::Iterator); our ($VERSION); BEGIN { $VERSION = '1.007'; } =item C =item C Returns a new SPARQL Result interator object. Results must be either an reference to an array containing results or a CODE reference that acts as an iterator, returning successive items when called, and returning undef when the iterator is exhausted. $type should be one of: bindings, boolean, graph. =cut sub new { my $class = shift; my $stream = shift || sub { undef }; my %args = @_; my $type = 'boolean'; return $class->SUPER::new( $stream, $type, [], %args ); } sub _new { my $class = shift; my $stream = shift; my $type = shift; my $names = shift; my %args = @_; return $class->new( $stream, %args ); } =item C Returns true if the underlying result is a boolean value. =cut sub is_boolean { my $self = shift; return 1; } =item C Returns a string serialization of the stream data. =cut sub as_string { my $self = shift; my $value = $self->get_boolean ? 'true' : 'false'; return $value; } =item C Returns an XML serialization of the stream data. =cut sub as_xml { my $self = shift; my $value = $self->get_boolean ? 'true' : 'false'; my $xml = <<"END"; ${value} END return $xml; } =item C<< print_xml ( $fh, $max_size ) >> Prints an XML serialization of the stream data to the filehandle $fh. =cut sub print_xml { my $self = shift; my $fh = shift; print {$fh} $self->as_xml; } =item C Returns a JSON serialization of the stream data. =cut sub as_json { my $self = shift; my $max_result_size = shift || 0; my $value = $self->get_boolean ? JSON::true : JSON::false; my $data = { head => { vars => [] }, boolean => $value }; return to_json( $data ); } =item C<< construct_args >> Returns the arguments necessary to pass to the stream constructor _new to re-create this stream (assuming the same closure as the first =cut sub construct_args { my $self = shift; my $type = $self->type; my $args = $self->_args || {}; return ($type, [], %{ $args }); } 1; __END__ =back =head1 DEPENDENCIES L L =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/Graph/000755 000765 000024 00000000000 12171744442 020404 5ustar00gregstaff000000 000000 RDF-Trine-1.007/lib/RDF/Trine/Iterator/Graph.pm000644 000765 000024 00000022752 12171744402 020746 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::Graph # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::Graph - Iterator class for graph query results =head1 VERSION This document describes RDF::Trine::Iterator::Graph version 1.007 =head1 SYNOPSIS use RDF::Trine::Iterator::Graph; my $iterator = RDF::Trine::Iterator::Graph->new( \&data ); while (my $st = $iterator->next) { # $st is a RDF::Trine::Statement object print $st->as_string; } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Iterator::Graph; use strict; use warnings; no warnings 'redefine'; use JSON; use List::Util qw(max); use Scalar::Util qw(blessed); use RDF::Trine::Iterator qw(sgrep); use RDF::Trine::Iterator::Graph::Materialized; use base qw(RDF::Trine::Iterator); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =item C =item C Returns a new SPARQL Result interator object. Results must be either an reference to an array containing results or a CODE reference that acts as an iterator, returning successive items when called, and returning undef when the iterator is exhausted. $type should be one of: bindings, boolean, graph. =cut sub new { my $class = shift; my $stream = shift || sub { undef }; # Carp::confess unless (scalar(@_) % 2 == 0); my %args = @_; my $type = 'graph'; return $class->SUPER::new( $stream, $type, [], %args ); } sub _new { my $class = shift; my $stream = shift; my $type = shift; my $names = shift; my %args = @_; return $class->new( $stream, %args ); } =item C<< as_bindings ( $s, $p, $o ) >> Returns the iterator as a Bindings iterator, using the supplied triple nodes to determine the variable bindings. =cut sub as_bindings { my $self = shift; my @nodes = @_; my @names = qw(subject predicate object context); my %bindings; foreach my $i (0 .. $#names) { if (not($nodes[ $i ]) or not($nodes[ $i ]->isa('RDF::Trine::Node::Variable'))) { $nodes[ $i ] = RDF::Trine::Node::Variable->new( $names[ $i ] ); } } foreach my $i (0 .. $#nodes) { my $n = $nodes[ $i ]; $bindings{ $n->name } = $names[ $i ]; } my $context = $nodes[ 3 ]->name; my $sub = sub { my $statement = $self->next; return unless ($statement); my %values = map { my $method = $bindings{ $_ }; $_ => $statement->$method() } grep { ($statement->isa('RDF::Trine::Statement::Quad')) ? 1 : ($_ ne $context) } (keys %bindings); return \%values; }; return RDF::Trine::Iterator::Bindings->new( $sub, [ keys %bindings ] ); } =item C<< materialize >> Returns a materialized version of the current graph iterator. The materialization process will leave this iterator empty. The materialized iterator that is returned should be used for any future need for the iterator's data. =cut sub materialize { my $self = shift; my @data = $self->get_all; my @args = $self->construct_args; return $self->_mclass->_new( \@data, @args ); } sub _mclass { return 'RDF::Trine::Iterator::Graph::Materialized'; } =item C<< unique >> Returns a Graph iterator that ensures the returned statements are unique. While the underlying RDF graph is the same regardless of uniqueness, the iterator's serialization methods assume the results are unique, and so use this method before serialization. Uniqueness is opt-in for efficiency concerns -- this method requires O(n) memory, and so may have noticeable effects on large graphs. =cut sub unique { my $self = shift; my %seen; no warnings 'uninitialized'; my $stream = sgrep( sub { my $s = $_; my $str = $s->as_string; not($seen{ $str }++) }, $self); return $stream; } =item C Returns true if the underlying result is an RDF graph. =cut sub is_graph { my $self = shift; return 1; } =item C Returns a string table serialization of the stream data. =cut sub as_string { my $self = shift; my $max_result_size = shift || 0; my $rescount = shift; my @names = qw(subject predicate object); my $headers = \@names; my @rows; my $count = 0; while (my $row = $self->next) { push(@rows, [ map { blessed($_) ? $_->as_string : '' } map { $row->$_() } qw(subject predicate object) ]); last if ($max_result_size and ++$count >= $max_result_size); } # my $rows = [ map { [ map { blessed($_) ? $_->as_string : '' } @{$_}{ @names } ] } @nodes ]; if (ref($rescount)) { $$rescount = scalar(@rows); } my @rule = qw(- +); my @headers = (\q"| "); push(@headers, map { $_ => \q" | " } @$headers); pop @headers; push @headers => (\q" |"); if ('ARRAY' eq ref $rows[0]) { if (@$headers == @{ $rows[0] }) { my $table = Text::Table->new(@headers); $table->rule(@rule); $table->body_rule(@rule); $table->load(@rows); return join('', $table->rule(@rule), $table->title, $table->rule(@rule), map({ $table->body($_) } 0 .. @rows), $table->rule(@rule) ); } else { die("make_table() rows must be an AoA with rows being same size as headers"); } } else { return ''; } } =item C Returns an XML serialization of the stream data. =cut sub as_xml { my $self = shift; my $max_result_size = shift || 0; my $string = ''; open( my $fh, '>', \$string ); $self->print_xml( $fh, $max_result_size ); return $string; } =item C<< print_xml ( $fh, $max_size ) >> Prints an XML serialization of the stream data to the filehandle $fh. =cut sub print_xml { my $self = shift; my $fh = shift; my $max_result_size = shift || 0; my $graph = $self->unique(); my $count = 0; print {$fh} <<"END"; END while (my $stmt = $graph->next) { if ($max_result_size) { last if ($count++ >= $max_result_size); } my $p = $stmt->predicate->uri_value; my $pos = max( rindex( $p, '/' ), rindex( $p, '#' ) ); my $ns = substr($p,0,$pos+1); my $local = substr($p, $pos+1); my $subject = $stmt->subject; my $subjstr = ($subject->is_resource) ? 'rdf:about="' . $subject->uri_value . '"' : 'rdf:nodeID="' . $subject->blank_identifier . '"'; my $object = $stmt->object; print {$fh} qq[\n]; if ($object->is_resource) { my $uri = $object->uri_value; print {$fh} qq[\t<${local} xmlns="${ns}" rdf:resource="$uri"/>\n]; } elsif ($object->isa('RDF::Trine::Node::Blank')) { my $id = $object->blank_identifier; print {$fh} qq[\t<${local} xmlns="${ns}" rdf:nodeID="$id"/>\n]; } else { my $value = $object->literal_value; # escape < and & and ' and " and > $value =~ s/&/&/g; $value =~ s/'/'/g; $value =~ s/"/"/g; $value =~ s//>/g; my $tag = qq[${local} xmlns="${ns}"]; if (defined($object->literal_value_language)) { my $lang = $object->literal_value_language; $tag .= qq[ xml:lang="${lang}"]; } elsif (defined($object->literal_datatype)) { my $dt = $object->literal_datatype; $tag .= qq[ rdf:datatype="${dt}"]; } print {$fh} qq[\t<${tag}>${value}\n]; } print {$fh} qq[\n]; } print {$fh} "\n"; } =item C Returns a JSON serialization of the stream data. =cut sub as_json { my $self = shift; my $max_result_size = shift; throw RDF::Trine::Error::SerializationError ( -text => 'There is no JSON serialization specified for graph query results' ); } =item C<< as_hashref >> Returns a hashref representing the model in an RDF/JSON-like manner. See C<< as_hashref >> at L for full documentation of the hashref format. =cut sub as_hashref { my $self = shift; my $index = {}; while (my $statement = $self->next) { my $s = $statement->subject->isa('RDF::Trine::Node::Blank') ? ('_:'.$statement->subject->blank_identifier) : $statement->subject->uri ; my $p = $statement->predicate->uri ; my $o = {}; if ($statement->object->isa('RDF::Trine::Node::Literal')) { $o->{'type'} = 'literal'; $o->{'value'} = $statement->object->literal_value; $o->{'lang'} = $statement->object->literal_value_language if $statement->object->has_language; $o->{'datatype'} = $statement->object->literal_datatype if $statement->object->has_datatype; } else { $o->{'type'} = $statement->object->isa('RDF::Trine::Node::Blank') ? 'bnode' : 'uri'; $o->{'value'} = $statement->object->isa('RDF::Trine::Node::Blank') ? ('_:'.$statement->object->blank_identifier) : $statement->object->uri ; } push @{ $index->{$s}->{$p} }, $o; } return $index; } =item C<< construct_args >> Returns the arguments necessary to pass to the stream constructor _new to re-create this stream (assuming the same closure as the first =cut sub construct_args { my $self = shift; my $type = $self->type; my $args = $self->_args || {}; return ($type, [], %{ $args }); } 1; __END__ =back =head1 DEPENDENCIES L L =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/JSONHandler.pm000644 000765 000024 00000006462 12171744402 021754 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::JSONHandler # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::JSONHandler - JSON Handler for parsing SPARQL JSON Results format =head1 VERSION This document describes RDF::Trine::Iterator::JSONHandler version 1.007 =head1 STATUS This module's API and functionality should be considered unstable. In the future, this module may change in backwards-incompatible ways, or be removed entirely. If you need functionality that this module provides, please L. =head1 SYNOPSIS use RDF::Trine::Iterator::JSONHandler; my $handler = RDF::Trine::Iterator::JSONHandler->new(); my $iter = $handler->parse( $json ); =head1 METHODS =over 4 =cut package RDF::Trine::Iterator::JSONHandler; use strict; use warnings; use Scalar::Util qw(refaddr); use JSON; use Data::Dumper; use RDF::Trine::VariableBindings; our ($VERSION); BEGIN { $VERSION = '1.007'; } =item C<< new >> Returns a new JSON SPARQL Results parser object. =cut sub new { my $class = shift; my %args = %{ shift || {} }; return bless(\%args, $class); } =item C<< parse ( $json ) >> Returns a RDF::Trine::Iterator object containing the data from the supplied JSON in JSON SPARQL Results format. =cut sub parse { my $self = shift; my $json = shift; my $data = from_json($json, {utf8 => 1}); my $head = $data->{head}; my $vars = $head->{vars}; my $res = $data->{results}; if (defined(my $bool = $data->{boolean})) { my $value = ($bool) ? 1 : 0; return RDF::Trine::Iterator::Boolean->new([$value]); } elsif (my $binds = $res->{bindings}) { my @results; foreach my $b (@$binds) { my %data; foreach my $v (@$vars) { if (defined(my $value = $b->{ $v })) { my $type = $value->{type}; if ($type eq 'uri') { my $data = $value->{value}; $data{ $v } = RDF::Trine::Node::Resource->new( $data ); } elsif ($type eq 'bnode') { my $data = $value->{value}; $data{ $v } = RDF::Trine::Node::Blank->new( $data ); } elsif ($type eq 'literal') { my $data = $value->{value}; if (my $lang = $value->{'xml:lang'}) { $data{ $v } = RDF::Trine::Node::Literal->new( $data, $lang ); } else { $data{ $v } = RDF::Trine::Node::Literal->new( $data ); } } elsif ($type eq 'typed-literal') { my $data = $value->{value}; my $dt = $value->{datatype}; if ($self->{canonicalize}) { $data = RDF::Trine::Node::Literal->canonicalize_literal_value( $data, $dt, 0 ); } $data{ $v } = RDF::Trine::Node::Literal->new( $data, undef, $dt ); } else { warn Dumper($data, $b); throw RDF::Trine::Error -text => "Unknown node type $type during parsing of SPARQL JSON Results"; } } } push(@results, RDF::Trine::VariableBindings->new( \%data )); } return RDF::Trine::Iterator::Bindings->new( \@results ); } warn '*** ' . Dumper($data); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/SAXHandler.pm000644 000765 000024 00000015746 12171744402 021643 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::SAXHandler # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::SAXHandler - SAX Handler for parsing SPARQL XML Results format =head1 VERSION This document describes RDF::Trine::Iterator::SAXHandler version 1.007 =head1 STATUS This module's API and functionality should be considered unstable. In the future, this module may change in backwards-incompatible ways, or be removed entirely. If you need functionality that this module provides, please L. =head1 SYNOPSIS use RDF::Trine::Iterator::SAXHandler; my $handler = RDF::Trine::Iterator::SAXHandler->new(); my $p = XML::SAX::ParserFactory->parser(Handler => $handler); $p->parse_file( $string ); my $iter = $handler->iterator; =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Iterator::SAXHandler; use strict; use warnings; use Scalar::Util qw(refaddr); use base qw(XML::SAX::Base); use Data::Dumper; use RDF::Trine::VariableBindings; our ($VERSION); BEGIN { $VERSION = '1.007'; } my %strings; my %tagstack; my %results; my %values; my %bindings; my %booleans; my %variables; my %has_head; my %has_end; my %result_count; my %result_handlers; my %config; my %expecting_string = map { $_ => 1 } qw(boolean bnode uri literal); =item C<< new ( [ \&handler ] ) >> Returns a new XML::SAX handler object. If C<< &handler >> is supplied, it will be called with a variable bindings object as each is parsed, bypassing the normal process of collecting the results for retrieval via an iterator object. =cut sub new { my $class = shift; my $self = $class->SUPER::new(); if (@_) { my $addr = refaddr( $self ); my $code = shift; my $args = shift || {}; $result_handlers{ $addr } = $code; $config{ $addr } = { %$args }; } return $self; } =item C<< iterator >> Returns the RDF::Trine::Iterator object after parsing is complete. =cut sub iterator { my $self = shift; my $addr = refaddr( $self ); if (exists( $booleans{ $addr })) { return $self->iterator_class->new( [$booleans{ $addr }] ); } else { my $vars = delete $variables{ $addr }; my $results = delete $results{ $addr }; return $self->iterator_class->new( $results, $vars ); } } # =item C<< has_head >> # # Returns true if the element has been completely parsed, false otherwise. # # =cut # # sub has_head { # my $self = shift; # my $addr = refaddr( $self ); # return ($has_head{ $addr }) ? 1 : 0; # } # # =item C<< has_end >> # # Returns true if the element (the entire iterator) has been completely # parsed, false otherwise. # # =cut # # sub has_end { # my $self = shift; # my $addr = refaddr( $self ); # return ($has_end{ $addr }) ? 1 : 0; # } =item C<< iterator_class >> Returns the iterator class appropriate for the parsed results (either ::Iterator::Boolean or ::Iterator::Bindings). =cut sub iterator_class { my $self = shift; my $addr = refaddr( $self ); if (exists( $booleans{ $addr })) { return 'RDF::Trine::Iterator::Boolean'; } else { return 'RDF::Trine::Iterator::Bindings'; } } =item C<< iterator_args >> Returns the arguments suitable for passing to the iterator constructor after the iterator data. =cut sub iterator_args { my $self = shift; my $addr = refaddr( $self ); if (exists( $booleans{ $addr })) { return; } else { my $vars = $variables{ $addr }; return ($vars); } } =item C<< pull_result >> Returns the next result from the iterator, if available (if it has been parsed yet). Otherwise, returns the empty list. =cut sub pull_result { my $self = shift; my $addr = refaddr( $self ); if (exists( $booleans{ $addr })) { if (exists($booleans{ $addr })) { return [$booleans{ $addr }]; } } else { if (scalar(@{ $results{ $addr } || [] })) { my $result = shift( @{ $results{ $addr } } ); return $result; } } return; } =begin private =item C<< start_element >> =cut sub start_element { my $self = shift; my $el = shift; my $tag = $el->{LocalName}; my $addr = refaddr( $self ); unshift( @{ $tagstack{ $addr } }, [$tag, $el] ); if ($expecting_string{ $tag }) { $strings{ $addr } = ''; } } =item C<< end_element >> =cut sub end_element { my $self = shift; my $class = ref($self); my $eel = shift; my $addr = refaddr( $self ); my $string = $strings{ $addr }; my $taginfo = shift( @{ $tagstack{ $addr } } ); my ($tag, $el) = @$taginfo; if ($tag eq 'head') { $has_head{ $addr } = 1; if (my $code = $result_handlers{ $addr }) { if ($config{ $addr }{ variables }) { $code->( $variables{ $addr } ); } } } elsif ($tag eq 'sparql') { $has_end{ $addr } = 1; } elsif ($tag eq 'variable') { push( @{ $variables{ $addr } }, $el->{Attributes}{'{}name'}{Value}); } elsif ($tag eq 'boolean') { $booleans{ $addr } = ($string eq 'true') ? 1 : 0; } elsif ($tag eq 'binding') { my $name = $el->{Attributes}{'{}name'}{Value}; my $value = delete( $values{ $addr } ); $bindings{ $addr }{ $name } = $value; } elsif ($tag eq 'result') { my $result = delete( $bindings{ $addr } ) || {}; $result_count{ $addr }++; my $vb = RDF::Trine::VariableBindings->new( $result ); if (my $code = $result_handlers{ $addr }) { $code->( $vb ); } else { push( @{ $results{ $addr } }, $vb ); } } elsif ($tag eq 'bnode') { $values{ $addr } = RDF::Trine::Node::Blank->new( $string ); } elsif ($tag eq 'uri') { $values{ $addr } = RDF::Trine::Node::Resource->new( $string ); } elsif ($tag eq 'literal') { my ($lang, $dt); if (my $dtinf = $el->{Attributes}{'{}datatype'}) { $dt = $dtinf->{Value}; } elsif (my $langinf = $el->{Attributes}{'{http://www.w3.org/XML/1998/namespace}lang'}) { $lang = $langinf->{Value}; } $values{ $addr } = RDF::Trine::Node::Literal->new( $string, $lang, $dt ); } } =item C<< characters >> =cut sub characters { my $self = shift; my $data = shift; my $addr = refaddr( $self ); my $tag = $self->_current_tag; if ($expecting_string{ $tag }) { my $chars = $data->{Data}; $strings{ $addr } .= $chars; } } sub _current_tag { my $self = shift; my $addr = refaddr( $self ); return $tagstack{ $addr }[0][0]; } sub DESTROY { my $self = shift; my $addr = refaddr( $self ); delete $strings{ $addr }; delete $results{ $addr }; delete $tagstack{ $addr }; delete $values{ $addr }; delete $bindings{ $addr }; delete $booleans{ $addr }; delete $variables{ $addr }; delete $has_head{ $addr }; delete $has_end{ $addr }; delete $result_count{ $addr }; delete $result_handlers{ $addr }; delete $config{ $addr }; } 1; __END__ =end private =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/Graph/Materialized.pm000644 000765 000024 00000005334 12171744402 023355 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::Graph::Materialized # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::Graph::Materialized - Materialized graph class =head1 VERSION This document describes RDF::Trine::Iterator::Graph::Materialized version 1.007 =head1 SYNOPSIS use RDF::Trine::Iterator; my $iterator = RDF::Trine::Iterator::Graph::Materialized->new( \@data ); while (my $statement = $iterator->next) { # do something with $statement } my $iterator = RDF::Trine::Iterator::Graph->new( \&code ); my $miter = $iterator->materialize; while (my $statement = $miter->next) { # do something with $statement } $miter->reset; # start the iteration again while (my $statement = $miter->next) { # ... } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Iterator::Graph::Materialized; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Scalar::Util qw(reftype); use base qw(RDF::Trine::Iterator::Graph); our ($VERSION); BEGIN { $VERSION = '1.007'; } =item C<< new ( \@results, %args ) >> Returns a new materialized graph interator. Results must be a reference to an array containing individual results. =cut sub new { my $class = shift; my $data = shift || []; Carp::confess unless (scalar(@_) % 2 == 0); my %args = @_; if (reftype($data) eq 'CODE') { my @data; while (my $d = $data->()) { push(@data,$d); } $data = \@data; } Carp::confess unless (reftype($data) eq 'ARRAY'); my $type = 'graph'; my $index = 0; my $stream = sub { my $data = $data->[ $index++ ]; unless (defined($data)) { $index = 0; } return $data; }; my $self = $class->SUPER::new( $stream, %args ); $self->{_data} = $data; $self->{_index} = \$index; return $self; } =item C<< reset >> Returns the iterator to its starting position. =cut sub reset { my $self = shift; ${ $self->{_index} } = 0; } =item C<< next >> Returns the next item in the iterator. =cut sub next { my $self = shift; my $data = $self->SUPER::next; unless (defined($data)) { $self->{_finished} = 0; } return $data; } =item C<< length >> Returns the number of elements in the iterator. =cut sub length { my $self = shift; return scalar(@{ $self->{ _data } }); } 1; =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Iterator/Bindings/Materialized.pm000644 000765 000024 00000005673 12171744402 024057 0ustar00gregstaff000000 000000 # RDF::Trine::Iterator::Bindings::Materialized # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Iterator::Bindings::Materialized - Materialized bindings class =head1 VERSION This document describes RDF::Trine::Iterator::Bindings::Materialized version 1.007 =head1 SYNOPSIS use RDF::Trine::Iterator; my $iterator = RDF::Trine::Iterator::Bindings::Materialized->new( \@data, \@names ); while (my $row = $iterator->next) { my @vars = keys %$row; # do something with @vars } my $iterator = RDF::Trine::Iterator::Bindings->new( \&code, \@names ); my $miter = $iterator->materialize; while (my $row = $miter->next) { my @vars = keys %$row; # do something with @vars } $miter->reset; # start the iteration again while (my $row = $miter->next) { # ... } =head1 METHODS Beyond the methods documented below, this class inherits methods from the L class. =over 4 =cut package RDF::Trine::Iterator::Bindings::Materialized; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use base qw(RDF::Trine::Iterator::Bindings); use Scalar::Util qw(blessed reftype); our ($VERSION); BEGIN { $VERSION = '1.007'; } =item C<< new ( \@results, \@names, %args ) >> Returns a new materialized bindings interator. Results must be a reference to an array containing individual results. =cut sub new { my $class = shift; my $data = shift || []; my $names = shift || []; Carp::confess unless (scalar(@_) % 2 == 0); my %args = @_; if (reftype($data) eq 'CODE') { my @rows; while (my $row = $data->()) { push(@rows, $row); } $data = \@rows; } Carp::confess "not an ARRAY: " . Dumper($data) unless (reftype($data) eq 'ARRAY'); my $type = 'bindings'; my $index = 0; my $stream = sub { my $data = $data->[ $index++ ]; unless (defined($data)) { $index = 0; } return $data; }; my $self = $class->SUPER::new( $stream, $names, %args ); $self->{_data} = $data; $self->{_index} = \$index; return $self; } =item C<< reset >> Returns the iterator to its starting position. =cut sub reset { my $self = shift; ${ $self->{_index} } = 0; } =item C<< next >> Returns the next item in the iterator. =cut sub next { my $self = shift; my $data = $self->SUPER::next; unless (defined($data)) { $self->{_finished} = 0; } return $data; } =item C<< length >> Returns the number of elements in the iterator. =cut sub length { my $self = shift; return scalar(@{ $self->{ _data } }); } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Exporter/CSV.pm000644 000765 000024 00000006633 12171744402 020357 0ustar00gregstaff000000 000000 # RDF::Trine::Exporter::CSV # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Exporter::CSV - Export RDF data to CSV =head1 VERSION This document describes RDF::Trine::Exporter::CSV version 1.007 =head1 SYNOPSIS use RDF::Trine::Exporter::CSV; =head1 DESCRIPTION The RDF::Trine::Exporter::CSV class provides an API for serializing RDF data to CSV strings and files. =cut package RDF::Trine::Exporter::CSV; use strict; use warnings; no warnings 'redefine'; use Data::Dumper; use Text::CSV; use Scalar::Util qw(blessed); use RDF::Trine::Error qw(:try); our ($VERSION); BEGIN { $VERSION = '1.007'; } =head1 METHODS =over 4 =item C<< new ( sep_char => $sep_char, quote => $bool ) >> Returns a new RDF::Trine::Exporter::CSV object. If C<< $sep_char >> is provided, it is used as the separator character in CSV serialization, otherwise a comma (",") is used. =cut sub new { my $class = shift; my %args = @_; my $sep = $args{ sep_char } || ','; my $quote = $args{ quote }; my $csv = Text::CSV->new ( { binary => 1, sep_char => $sep } ); my $self = bless( { %args, csv => $csv }, $class ); return $self; } =item C<< serialize_iterator_to_file ( $file, $iterator ) >> Serializes the bindings objects produced by C<< $iterator >>, printing the results to the supplied filehandle C<<$fh>>. =cut sub serialize_iterator_to_file { my $self = shift; my $file = shift; my $iter = shift; unless (blessed($iter) and ($iter->isa('RDF::Trine::Iterator::Bindings') or $iter->isa('RDF::Trine::Iterator::Graph'))) { my $type = ref($iter); $type =~ s/^RDF::Trine::Iterator:://; throw RDF::Trine::Error::MethodInvocationError -text => "CSV Exporter must be called with a Graph or VariableBindings iterator, not a $type iterator"; } my $type = ($iter->isa('RDF::Trine::Iterator::Bindings')) ? 'bindings' : 'graph'; my $csv = $self->{csv}; my $quote = $self->{quote}; my @keys; while (my $row = $iter->next) { unless (scalar(@keys)) { @keys = ($type eq 'bindings') ? (sort keys %$row) : qw(subject predicate object); $csv->print( $file, \@keys ); print {$file} "\n"; } my @data; foreach my $k (@keys) { my $v = ($type eq 'bindings') ? $row->{$k} : $row->$k(); if ($quote) { push(@data, $v->as_string); } elsif (blessed($v)) { if ($v->isa('RDF::Trine::Node::Resource')) { push(@data, $v->uri_value); } elsif ($v->isa('RDF::Trine::Node::Blank')) { push(@data, $v->blank_identifier); } elsif ($v->isa('RDF::Trine::Node::Literal')) { push(@data, $v->literal_value); } } else { push(@data, ''); } } $csv->print( $file, \@data ); print {$file} "\n"; } } =item C<< serialize_iterator_to_string ( $iterator ) >> Serializes the bindings objects produced by C<< $iterator >>, returning the result as a string. =cut sub serialize_iterator_to_string { my $self = shift; my $iter = shift; my $string = ''; open( my $fh, '>', \$string ); $self->serialize_iterator_to_file( $fh, $iter ); close($fh); return $string; } 1; __END__ =back =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/lib/RDF/Trine/Exporter/RDFPatch.pm000644 000765 000024 00000011017 12171744402 021307 0ustar00gregstaff000000 000000 # RDF::Trine::Exporter::RDFPatch # ----------------------------------------------------------------------------- =head1 NAME RDF::Trine::Exporter::RDFPatch - RDF-Patch Export =head1 VERSION This document describes RDF::Trine::Exporter::RDFPatch version 1.007 =head1 SYNOPSIS use RDF::Trine::Exporter::RDFPatch; my $serializer = RDF::Trine::Exporter::RDFPatch->new(); =head1 DESCRIPTION The RDF::Trine::Exporter::RDFPatch class provides an API for serializing RDF graphs to the RDF-Patch syntax. =head1 METHODS =over 4 =cut package RDF::Trine::Exporter::RDFPatch; use strict; use warnings; use URI; use Carp; use Data::Dumper; use Scalar::Util qw(blessed); use List::Util qw(min); use RDF::Trine::Node; use RDF::Trine::Statement; use RDF::Trine::Error qw(:try); ###################################################################### our ($VERSION); BEGIN { $VERSION = '1.007'; } ###################################################################### =item C<< new ( sink => $sink ) >> Returns a new RDF-Patch exporter object. =cut sub new { my $class = shift; my $ns = {}; my %args = @_; if (exists $args{ namespaces }) { $ns = $args{ namespaces }; } my $sink = $args{sink}; my %rev; while (my ($ns, $uri) = each(%{ $ns })) { if (blessed($uri)) { $uri = $uri->uri_value; if (blessed($uri)) { $uri = $uri->uri_value; } } $rev{ $uri } = $ns; } my $self = bless( { first => 1, ns => \%rev, last => [], sink => $sink, }, $class ); return $self; } sub _sink { my $self = shift; return $self->{sink}; } =item C<< comment ( $c ) >> Serializes a comment with the given string. =cut sub comment { my $self = shift; my $c = shift; $self->_sink->emit("# $c\n"); } =item C<< add ( $st ) >> Serializes an add/insert operation for the given statement object. =cut sub add { my $self = shift; my $st = shift; if ($self->{first}) { my $header = $self->_header(); $self->_sink->emit($header); $self->{first} = 0; } $self->_sink->emit('A '); $self->_sink->emit($self->statement_as_string( $st )); $self->_sink->emit(" .\n"); } =item C<< delete ( $st ) >> Serializes a delete operation for the given statement object. =cut sub delete { my $self = shift; my $st = shift; if ($self->{first}) { my $header = $self->_header(); $self->_sink->emit($header); $self->{first} = 0; } $self->_sink->emit('D '); $self->_sink->emit($self->statement_as_string( $st )); $self->_sink->emit(" .\n"); } sub _header { my $self = shift; my %ns = reverse(%{ $self->{ns} }); my @nskeys = sort keys %ns; my $header = ''; if (@nskeys) { foreach my $ns (sort @nskeys) { my $uri = $ns{ $ns }; $header .= "\@prefix $ns: <$uri> .\n"; } $header .= "\n"; } return $header; } =item C<< statement_as_string ( $st ) >> Returns a string with the supplied RDF::Trine::Statement object serialized as RDF-Patch, ending in a DOT and newline. =cut sub statement_as_string { my $self = shift; my $st = shift; my @nodes = $st->nodes; my @str_nodes = map { $self->node_as_concise_string($_) } @nodes; if (1) { foreach my $i (0 .. min(scalar(@nodes), scalar(@{$self->{'last'}}))) { if (defined($self->{'last'}[$i]) and $nodes[$i]->equal( $self->{'last'}[$i])) { $str_nodes[$i] = 'R'; } } @{ $self->{'last'} } = @nodes; } return join(' ', @str_nodes); } =item C<< node_as_concise_string >> Returns a string representation using RDF-Patch syntax shortcuts (e.g. PrefixNames). =cut sub node_as_concise_string { my $self = shift; my $obj = shift; if ($obj->isa('RDF::Trine::Node::Resource')) { my $value; try { my ($ns,$local) = $obj->qname; if (blessed($self) and exists $self->{ns}{$ns}) { $value = join(':', $self->{ns}{$ns}, $local); $self->{used_ns}{ $self->{ns}{$ns} }++; } } catch RDF::Trine::Error with {} otherwise {}; if ($value) { return $value; } } return $obj->as_ntriples; } 1; __END__ =back =head1 NOTES As described in L, serialization will decode any L that is included in the IRI, and serialize it using unicode codepoint escapes. =head1 BUGS Please report any bugs or feature requests to through the GitHub web interface at L. =head1 SEE ALSO L =head1 AUTHOR Gregory Todd Williams C<< >> =head1 COPYRIGHT Copyright (c) 2006-2012 Gregory Todd Williams. This program is free software; you can redistribute it and/or modify it under the same terms as Perl itself. =cut RDF-Trine-1.007/inc/Module/000755 000765 000024 00000000000 12171744443 015307 5ustar00gregstaff000000 000000 RDF-Trine-1.007/inc/Module/Install/000755 000765 000024 00000000000 12171744443 016715 5ustar00gregstaff000000 000000 RDF-Trine-1.007/inc/Module/Install.pm000644 000765 000024 00000030135 12171744431 017252 0ustar00gregstaff000000 000000 #line 1 package Module::Install; # For any maintainers: # The load order for Module::Install is a bit magic. # It goes something like this... # # IF ( host has Module::Install installed, creating author mode ) { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to installed version of inc::Module::Install # 3. The installed version of inc::Module::Install loads # 4. inc::Module::Install calls "require Module::Install" # 5. The ./inc/ version of Module::Install loads # } ELSE { # 1. Makefile.PL calls "use inc::Module::Install" # 2. $INC{inc/Module/Install.pm} set to ./inc/ version of Module::Install # 3. The ./inc/ version of Module::Install loads # } use 5.005; use strict 'vars'; use Cwd (); use File::Find (); use File::Path (); use vars qw{$VERSION $MAIN}; BEGIN { # All Module::Install core packages now require synchronised versions. # This will be used to ensure we don't accidentally load old or # different versions of modules. # This is not enforced yet, but will be some time in the next few # releases once we can make sure it won't clash with custom # Module::Install extensions. $VERSION = '1.06'; # Storage for the pseudo-singleton $MAIN = undef; *inc::Module::Install::VERSION = *VERSION; @inc::Module::Install::ISA = __PACKAGE__; } sub import { my $class = shift; my $self = $class->new(@_); my $who = $self->_caller; #------------------------------------------------------------- # all of the following checks should be included in import(), # to allow "eval 'require Module::Install; 1' to test # installation of Module::Install. (RT #51267) #------------------------------------------------------------- # Whether or not inc::Module::Install is actually loaded, the # $INC{inc/Module/Install.pm} is what will still get set as long as # the caller loaded module this in the documented manner. # If not set, the caller may NOT have loaded the bundled version, and thus # they may not have a MI version that works with the Makefile.PL. This would # result in false errors or unexpected behaviour. And we don't want that. my $file = join( '/', 'inc', split /::/, __PACKAGE__ ) . '.pm'; unless ( $INC{$file} ) { die <<"END_DIE" } Please invoke ${\__PACKAGE__} with: use inc::${\__PACKAGE__}; not: use ${\__PACKAGE__}; END_DIE # This reportedly fixes a rare Win32 UTC file time issue, but # as this is a non-cross-platform XS module not in the core, # we shouldn't really depend on it. See RT #24194 for detail. # (Also, this module only supports Perl 5.6 and above). eval "use Win32::UTCFileTime" if $^O eq 'MSWin32' && $] >= 5.006; # If the script that is loading Module::Install is from the future, # then make will detect this and cause it to re-run over and over # again. This is bad. Rather than taking action to touch it (which # is unreliable on some platforms and requires write permissions) # for now we should catch this and refuse to run. if ( -f $0 ) { my $s = (stat($0))[9]; # If the modification time is only slightly in the future, # sleep briefly to remove the problem. my $a = $s - time; if ( $a > 0 and $a < 5 ) { sleep 5 } # Too far in the future, throw an error. my $t = time; if ( $s > $t ) { die <<"END_DIE" } Your installer $0 has a modification time in the future ($s > $t). This is known to create infinite loops in make. Please correct this, then run $0 again. END_DIE } # Build.PL was formerly supported, but no longer is due to excessive # difficulty in implementing every single feature twice. if ( $0 =~ /Build.PL$/i ) { die <<"END_DIE" } Module::Install no longer supports Build.PL. It was impossible to maintain duel backends, and has been deprecated. Please remove all Build.PL files and only use the Makefile.PL installer. END_DIE #------------------------------------------------------------- # To save some more typing in Module::Install installers, every... # use inc::Module::Install # ...also acts as an implicit use strict. $^H |= strict::bits(qw(refs subs vars)); #------------------------------------------------------------- unless ( -f $self->{file} ) { foreach my $key (keys %INC) { delete $INC{$key} if $key =~ /Module\/Install/; } local $^W; require "$self->{path}/$self->{dispatch}.pm"; File::Path::mkpath("$self->{prefix}/$self->{author}"); $self->{admin} = "$self->{name}::$self->{dispatch}"->new( _top => $self ); $self->{admin}->init; @_ = ($class, _self => $self); goto &{"$self->{name}::import"}; } local $^W; *{"${who}::AUTOLOAD"} = $self->autoload; $self->preload; # Unregister loader and worker packages so subdirs can use them again delete $INC{'inc/Module/Install.pm'}; delete $INC{'Module/Install.pm'}; # Save to the singleton $MAIN = $self; return 1; } sub autoload { my $self = shift; my $who = $self->_caller; my $cwd = Cwd::cwd(); my $sym = "${who}::AUTOLOAD"; $sym->{$cwd} = sub { my $pwd = Cwd::cwd(); if ( my $code = $sym->{$pwd} ) { # Delegate back to parent dirs goto &$code unless $cwd eq $pwd; } unless ($$sym =~ s/([^:]+)$//) { # XXX: it looks like we can't retrieve the missing function # via $$sym (usually $main::AUTOLOAD) in this case. # I'm still wondering if we should slurp Makefile.PL to # get some context or not ... my ($package, $file, $line) = caller; die <<"EOT"; Unknown function is found at $file line $line. Execution of $file aborted due to runtime errors. If you're a contributor to a project, you may need to install some Module::Install extensions from CPAN (or other repository). If you're a user of a module, please contact the author. EOT } my $method = $1; if ( uc($method) eq $method ) { # Do nothing return; } elsif ( $method =~ /^_/ and $self->can($method) ) { # Dispatch to the root M:I class return $self->$method(@_); } # Dispatch to the appropriate plugin unshift @_, ( $self, $1 ); goto &{$self->can('call')}; }; } sub preload { my $self = shift; unless ( $self->{extensions} ) { $self->load_extensions( "$self->{prefix}/$self->{path}", $self ); } my @exts = @{$self->{extensions}}; unless ( @exts ) { @exts = $self->{admin}->load_all_extensions; } my %seen; foreach my $obj ( @exts ) { while (my ($method, $glob) = each %{ref($obj) . '::'}) { next unless $obj->can($method); next if $method =~ /^_/; next if $method eq uc($method); $seen{$method}++; } } my $who = $self->_caller; foreach my $name ( sort keys %seen ) { local $^W; *{"${who}::$name"} = sub { ${"${who}::AUTOLOAD"} = "${who}::$name"; goto &{"${who}::AUTOLOAD"}; }; } } sub new { my ($class, %args) = @_; delete $INC{'FindBin.pm'}; { # to suppress the redefine warning local $SIG{__WARN__} = sub {}; require FindBin; } # ignore the prefix on extension modules built from top level. my $base_path = Cwd::abs_path($FindBin::Bin); unless ( Cwd::abs_path(Cwd::cwd()) eq $base_path ) { delete $args{prefix}; } return $args{_self} if $args{_self}; $args{dispatch} ||= 'Admin'; $args{prefix} ||= 'inc'; $args{author} ||= ($^O eq 'VMS' ? '_author' : '.author'); $args{bundle} ||= 'inc/BUNDLES'; $args{base} ||= $base_path; $class =~ s/^\Q$args{prefix}\E:://; $args{name} ||= $class; $args{version} ||= $class->VERSION; unless ( $args{path} ) { $args{path} = $args{name}; $args{path} =~ s!::!/!g; } $args{file} ||= "$args{base}/$args{prefix}/$args{path}.pm"; $args{wrote} = 0; bless( \%args, $class ); } sub call { my ($self, $method) = @_; my $obj = $self->load($method) or return; splice(@_, 0, 2, $obj); goto &{$obj->can($method)}; } sub load { my ($self, $method) = @_; $self->load_extensions( "$self->{prefix}/$self->{path}", $self ) unless $self->{extensions}; foreach my $obj (@{$self->{extensions}}) { return $obj if $obj->can($method); } my $admin = $self->{admin} or die <<"END_DIE"; The '$method' method does not exist in the '$self->{prefix}' path! Please remove the '$self->{prefix}' directory and run $0 again to load it. END_DIE my $obj = $admin->load($method, 1); push @{$self->{extensions}}, $obj; $obj; } sub load_extensions { my ($self, $path, $top) = @_; my $should_reload = 0; unless ( grep { ! ref $_ and lc $_ eq lc $self->{prefix} } @INC ) { unshift @INC, $self->{prefix}; $should_reload = 1; } foreach my $rv ( $self->find_extensions($path) ) { my ($file, $pkg) = @{$rv}; next if $self->{pathnames}{$pkg}; local $@; my $new = eval { local $^W; require $file; $pkg->can('new') }; unless ( $new ) { warn $@ if $@; next; } $self->{pathnames}{$pkg} = $should_reload ? delete $INC{$file} : $INC{$file}; push @{$self->{extensions}}, &{$new}($pkg, _top => $top ); } $self->{extensions} ||= []; } sub find_extensions { my ($self, $path) = @_; my @found; File::Find::find( sub { my $file = $File::Find::name; return unless $file =~ m!^\Q$path\E/(.+)\.pm\Z!is; my $subpath = $1; return if lc($subpath) eq lc($self->{dispatch}); $file = "$self->{path}/$subpath.pm"; my $pkg = "$self->{name}::$subpath"; $pkg =~ s!/!::!g; # If we have a mixed-case package name, assume case has been preserved # correctly. Otherwise, root through the file to locate the case-preserved # version of the package name. if ( $subpath eq lc($subpath) || $subpath eq uc($subpath) ) { my $content = Module::Install::_read($subpath . '.pm'); my $in_pod = 0; foreach ( split //, $content ) { $in_pod = 1 if /^=\w/; $in_pod = 0 if /^=cut/; next if ($in_pod || /^=cut/); # skip pod text next if /^\s*#/; # and comments if ( m/^\s*package\s+($pkg)\s*;/i ) { $pkg = $1; last; } } } push @found, [ $file, $pkg ]; }, $path ) if -d $path; @found; } ##################################################################### # Common Utility Functions sub _caller { my $depth = 0; my $call = caller($depth); while ( $call eq __PACKAGE__ ) { $depth++; $call = caller($depth); } return $call; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _read { local *FH; open( FH, '<', $_[0] ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_NEW sub _read { local *FH; open( FH, "< $_[0]" ) or die "open($_[0]): $!"; my $string = do { local $/; }; close FH or die "close($_[0]): $!"; return $string; } END_OLD sub _readperl { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; $string =~ s/(\n)\n*__(?:DATA|END)__\b.*\z/$1/s; $string =~ s/\n\n=\w+.+?\n\n=cut\b.+?\n+/\n\n/sg; return $string; } sub _readpod { my $string = Module::Install::_read($_[0]); $string =~ s/(?:\015{1,2}\012|\015|\012)/\n/sg; return $string if $_[0] =~ /\.pod\z/; $string =~ s/(^|\n=cut\b.+?\n+)[^=\s].+?\n(\n=\w+|\z)/$1$2/sg; $string =~ s/\n*=pod\b[^\n]*\n+/\n\n/sg; $string =~ s/\n*=cut\b[^\n]*\n+/\n\n/sg; $string =~ s/^\n+//s; return $string; } # Done in evals to avoid confusing Perl::MinimumVersion eval( $] >= 5.006 ? <<'END_NEW' : <<'END_OLD' ); die $@ if $@; sub _write { local *FH; open( FH, '>', $_[0] ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_NEW sub _write { local *FH; open( FH, "> $_[0]" ) or die "open($_[0]): $!"; foreach ( 1 .. $#_ ) { print FH $_[$_] or die "print($_[0]): $!"; } close FH or die "close($_[0]): $!"; } END_OLD # _version is for processing module versions (eg, 1.03_05) not # Perl versions (eg, 5.8.1). sub _version ($) { my $s = shift || 0; my $d =()= $s =~ /(\.)/g; if ( $d >= 2 ) { # Normalise multipart versions $s =~ s/(\.)(\d{1,3})/sprintf("$1%03d",$2)/eg; } $s =~ s/^(\d+)\.?//; my $l = $1 || 0; my @v = map { $_ . '0' x (3 - length $_) } $s =~ /(\d{1,3})\D?/g; $l = $l . '.' . join '', @v if @v; return $l + 0; } sub _cmp ($$) { _version($_[1]) <=> _version($_[2]); } # Cloned from Params::Util::_CLASS sub _CLASS ($) { ( defined $_[0] and ! ref $_[0] and $_[0] =~ m/^[^\W\d]\w*(?:::\w+)*\z/s ) ? $_[0] : undef; } 1; # Copyright 2008 - 2012 Adam Kennedy. RDF-Trine-1.007/inc/Module/Install/AuthorTests.pm000644 000765 000024 00000002215 12171744431 021535 0ustar00gregstaff000000 000000 #line 1 package Module::Install::AuthorTests; use 5.005; use strict; use Module::Install::Base; use Carp (); #line 16 use vars qw{$VERSION $ISCORE @ISA}; BEGIN { $VERSION = '0.002'; $ISCORE = 1; @ISA = qw{Module::Install::Base}; } #line 42 sub author_tests { my ($self, @dirs) = @_; _add_author_tests($self, \@dirs, 0); } #line 56 sub recursive_author_tests { my ($self, @dirs) = @_; _add_author_tests($self, \@dirs, 1); } sub _wanted { my $href = shift; sub { /\.t$/ and -f $_ and $href->{$File::Find::dir} = 1 } } sub _add_author_tests { my ($self, $dirs, $recurse) = @_; return unless $Module::Install::AUTHOR; my @tests = $self->tests ? (split / /, $self->tests) : 't/*.t'; # XXX: pick a default, later -- rjbs, 2008-02-24 my @dirs = @$dirs ? @$dirs : Carp::confess "no dirs given to author_tests"; @dirs = grep { -d } @dirs; if ($recurse) { require File::Find; my %test_dir; File::Find::find(_wanted(\%test_dir), @dirs); $self->tests( join ' ', @tests, map { "$_/*.t" } sort keys %test_dir ); } else { $self->tests( join ' ', @tests, map { "$_/*.t" } sort @dirs ); } } #line 107 1; RDF-Trine-1.007/inc/Module/Install/Base.pm000644 000765 000024 00000002147 12171744431 020126 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Base; use strict 'vars'; use vars qw{$VERSION}; BEGIN { $VERSION = '1.06'; } # Suspend handler for "redefined" warnings BEGIN { my $w = $SIG{__WARN__}; $SIG{__WARN__} = sub { $w }; } #line 42 sub new { my $class = shift; unless ( defined &{"${class}::call"} ) { *{"${class}::call"} = sub { shift->_top->call(@_) }; } unless ( defined &{"${class}::load"} ) { *{"${class}::load"} = sub { shift->_top->load(@_) }; } bless { @_ }, $class; } #line 61 sub AUTOLOAD { local $@; my $func = eval { shift->_top->autoload } or return; goto &$func; } #line 75 sub _top { $_[0]->{_top}; } #line 90 sub admin { $_[0]->_top->{admin} or Module::Install::Base::FakeAdmin->new; } #line 106 sub is_admin { ! $_[0]->admin->isa('Module::Install::Base::FakeAdmin'); } sub DESTROY {} package Module::Install::Base::FakeAdmin; use vars qw{$VERSION}; BEGIN { $VERSION = $Module::Install::Base::VERSION; } my $fake; sub new { $fake ||= bless(\@_, $_[0]); } sub AUTOLOAD {} sub DESTROY {} # Restore warning handler BEGIN { $SIG{__WARN__} = $SIG{__WARN__}->(); } 1; #line 159 RDF-Trine-1.007/inc/Module/Install/Can.pm000644 000765 000024 00000006157 12171744431 017762 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Can; use strict; use Config (); use ExtUtils::MakeMaker (); use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # check if we can load some module ### Upgrade this to not have to load the module if possible sub can_use { my ($self, $mod, $ver) = @_; $mod =~ s{::|\\}{/}g; $mod .= '.pm' unless $mod =~ /\.pm$/i; my $pkg = $mod; $pkg =~ s{/}{::}g; $pkg =~ s{\.pm$}{}i; local $@; eval { require $mod; $pkg->VERSION($ver || 0); 1 }; } # Check if we can run some command sub can_run { my ($self, $cmd) = @_; my $_cmd = $cmd; return $_cmd if (-x $_cmd or $_cmd = MM->maybe_command($_cmd)); for my $dir ((split /$Config::Config{path_sep}/, $ENV{PATH}), '.') { next if $dir eq ''; require File::Spec; my $abs = File::Spec->catfile($dir, $cmd); return $abs if (-x $abs or $abs = MM->maybe_command($abs)); } return; } # Can our C compiler environment build XS files sub can_xs { my $self = shift; # Ensure we have the CBuilder module $self->configure_requires( 'ExtUtils::CBuilder' => 0.27 ); # Do we have the configure_requires checker? local $@; eval "require ExtUtils::CBuilder;"; if ( $@ ) { # They don't obey configure_requires, so it is # someone old and delicate. Try to avoid hurting # them by falling back to an older simpler test. return $self->can_cc(); } # Do we have a working C compiler my $builder = ExtUtils::CBuilder->new( quiet => 1, ); unless ( $builder->have_compiler ) { # No working C compiler return 0; } # Write a C file representative of what XS becomes require File::Temp; my ( $FH, $tmpfile ) = File::Temp::tempfile( "compilexs-XXXXX", SUFFIX => '.c', ); binmode $FH; print $FH <<'END_C'; #include "EXTERN.h" #include "perl.h" #include "XSUB.h" int main(int argc, char **argv) { return 0; } int boot_sanexs() { return 1; } END_C close $FH; # Can the C compiler access the same headers XS does my @libs = (); my $object = undef; eval { local $^W = 0; $object = $builder->compile( source => $tmpfile, ); @libs = $builder->link( objects => $object, module_name => 'sanexs', ); }; my $result = $@ ? 0 : 1; # Clean up all the build files foreach ( $tmpfile, $object, @libs ) { next unless defined $_; 1 while unlink; } return $result; } # Can we locate a (the) C compiler sub can_cc { my $self = shift; my @chunks = split(/ /, $Config::Config{cc}) or return; # $Config{cc} may contain args; try to find out the program part while (@chunks) { return $self->can_run("@chunks") || (pop(@chunks), next); } return; } # Fix Cygwin bug on maybe_command(); if ( $^O eq 'cygwin' ) { require ExtUtils::MM_Cygwin; require ExtUtils::MM_Win32; if ( ! defined(&ExtUtils::MM_Cygwin::maybe_command) ) { *ExtUtils::MM_Cygwin::maybe_command = sub { my ($self, $file) = @_; if ($file =~ m{^/cygdrive/}i and ExtUtils::MM_Win32->can('maybe_command')) { ExtUtils::MM_Win32->maybe_command($file); } else { ExtUtils::MM_Unix->maybe_command($file); } } } } 1; __END__ #line 236 RDF-Trine-1.007/inc/Module/Install/Fetch.pm000644 000765 000024 00000004627 12171744431 020312 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Fetch; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub get_file { my ($self, %args) = @_; my ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; if ( $scheme eq 'http' and ! eval { require LWP::Simple; 1 } ) { $args{url} = $args{ftp_url} or (warn("LWP support unavailable!\n"), return); ($scheme, $host, $path, $file) = $args{url} =~ m|^(\w+)://([^/]+)(.+)/(.+)| or return; } $|++; print "Fetching '$file' from $host... "; unless (eval { require Socket; Socket::inet_aton($host) }) { warn "'$host' resolve failed!\n"; return; } return unless $scheme eq 'ftp' or $scheme eq 'http'; require Cwd; my $dir = Cwd::getcwd(); chdir $args{local_dir} or return if exists $args{local_dir}; if (eval { require LWP::Simple; 1 }) { LWP::Simple::mirror($args{url}, $file); } elsif (eval { require Net::FTP; 1 }) { eval { # use Net::FTP to get past firewall my $ftp = Net::FTP->new($host, Passive => 1, Timeout => 600); $ftp->login("anonymous", 'anonymous@example.com'); $ftp->cwd($path); $ftp->binary; $ftp->get($file) or (warn("$!\n"), return); $ftp->quit; } } elsif (my $ftp = $self->can_run('ftp')) { eval { # no Net::FTP, fallback to ftp.exe require FileHandle; my $fh = FileHandle->new; local $SIG{CHLD} = 'IGNORE'; unless ($fh->open("|$ftp -n")) { warn "Couldn't open ftp: $!\n"; chdir $dir; return; } my @dialog = split(/\n/, <<"END_FTP"); open $host user anonymous anonymous\@example.com cd $path binary get $file $file quit END_FTP foreach (@dialog) { $fh->print("$_\n") } $fh->close; } } else { warn "No working 'ftp' program available!\n"; chdir $dir; return; } unless (-f $file) { warn "Fetching failed: $@\n"; chdir $dir; return; } return if exists $args{size} and -s $file != $args{size}; system($args{run}) if exists $args{run}; unlink($file) if $args{remove}; print(((!exists $args{check_for} or -e $args{check_for}) ? "done!" : "failed! ($!)"), "\n"); chdir $dir; return !$?; } 1; RDF-Trine-1.007/inc/Module/Install/Makefile.pm000644 000765 000024 00000027437 12171744431 021002 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Makefile; use strict 'vars'; use ExtUtils::MakeMaker (); use Module::Install::Base (); use Fcntl qw/:flock :seek/; use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub Makefile { $_[0] } my %seen = (); sub prompt { shift; # Infinite loop protection my @c = caller(); if ( ++$seen{"$c[1]|$c[2]|$_[0]"} > 3 ) { die "Caught an potential prompt infinite loop ($c[1]|$c[2]|$_[0])"; } # In automated testing or non-interactive session, always use defaults if ( ($ENV{AUTOMATED_TESTING} or -! -t STDIN) and ! $ENV{PERL_MM_USE_DEFAULT} ) { local $ENV{PERL_MM_USE_DEFAULT} = 1; goto &ExtUtils::MakeMaker::prompt; } else { goto &ExtUtils::MakeMaker::prompt; } } # Store a cleaned up version of the MakeMaker version, # since we need to behave differently in a variety of # ways based on the MM version. my $makemaker = eval $ExtUtils::MakeMaker::VERSION; # If we are passed a param, do a "newer than" comparison. # Otherwise, just return the MakeMaker version. sub makemaker { ( @_ < 2 or $makemaker >= eval($_[1]) ) ? $makemaker : 0 } # Ripped from ExtUtils::MakeMaker 6.56, and slightly modified # as we only need to know here whether the attribute is an array # or a hash or something else (which may or may not be appendable). my %makemaker_argtype = ( C => 'ARRAY', CONFIG => 'ARRAY', # CONFIGURE => 'CODE', # ignore DIR => 'ARRAY', DL_FUNCS => 'HASH', DL_VARS => 'ARRAY', EXCLUDE_EXT => 'ARRAY', EXE_FILES => 'ARRAY', FUNCLIST => 'ARRAY', H => 'ARRAY', IMPORTS => 'HASH', INCLUDE_EXT => 'ARRAY', LIBS => 'ARRAY', # ignore '' MAN1PODS => 'HASH', MAN3PODS => 'HASH', META_ADD => 'HASH', META_MERGE => 'HASH', PL_FILES => 'HASH', PM => 'HASH', PMLIBDIRS => 'ARRAY', PMLIBPARENTDIRS => 'ARRAY', PREREQ_PM => 'HASH', CONFIGURE_REQUIRES => 'HASH', SKIP => 'ARRAY', TYPEMAPS => 'ARRAY', XS => 'HASH', # VERSION => ['version',''], # ignore # _KEEP_AFTER_FLUSH => '', clean => 'HASH', depend => 'HASH', dist => 'HASH', dynamic_lib=> 'HASH', linkext => 'HASH', macro => 'HASH', postamble => 'HASH', realclean => 'HASH', test => 'HASH', tool_autosplit => 'HASH', # special cases where you can use makemaker_append CCFLAGS => 'APPENDABLE', DEFINE => 'APPENDABLE', INC => 'APPENDABLE', LDDLFLAGS => 'APPENDABLE', LDFROM => 'APPENDABLE', ); sub makemaker_args { my ($self, %new_args) = @_; my $args = ( $self->{makemaker_args} ||= {} ); foreach my $key (keys %new_args) { if ($makemaker_argtype{$key}) { if ($makemaker_argtype{$key} eq 'ARRAY') { $args->{$key} = [] unless defined $args->{$key}; unless (ref $args->{$key} eq 'ARRAY') { $args->{$key} = [$args->{$key}] } push @{$args->{$key}}, ref $new_args{$key} eq 'ARRAY' ? @{$new_args{$key}} : $new_args{$key}; } elsif ($makemaker_argtype{$key} eq 'HASH') { $args->{$key} = {} unless defined $args->{$key}; foreach my $skey (keys %{ $new_args{$key} }) { $args->{$key}{$skey} = $new_args{$key}{$skey}; } } elsif ($makemaker_argtype{$key} eq 'APPENDABLE') { $self->makemaker_append($key => $new_args{$key}); } } else { if (defined $args->{$key}) { warn qq{MakeMaker attribute "$key" is overriden; use "makemaker_append" to append values\n}; } $args->{$key} = $new_args{$key}; } } return $args; } # For mm args that take multiple space-seperated args, # append an argument to the current list. sub makemaker_append { my $self = shift; my $name = shift; my $args = $self->makemaker_args; $args->{$name} = defined $args->{$name} ? join( ' ', $args->{$name}, @_ ) : join( ' ', @_ ); } sub build_subdirs { my $self = shift; my $subdirs = $self->makemaker_args->{DIR} ||= []; for my $subdir (@_) { push @$subdirs, $subdir; } } sub clean_files { my $self = shift; my $clean = $self->makemaker_args->{clean} ||= {}; %$clean = ( %$clean, FILES => join ' ', grep { length $_ } ($clean->{FILES} || (), @_), ); } sub realclean_files { my $self = shift; my $realclean = $self->makemaker_args->{realclean} ||= {}; %$realclean = ( %$realclean, FILES => join ' ', grep { length $_ } ($realclean->{FILES} || (), @_), ); } sub libs { my $self = shift; my $libs = ref $_[0] ? shift : [ shift ]; $self->makemaker_args( LIBS => $libs ); } sub inc { my $self = shift; $self->makemaker_args( INC => shift ); } sub _wanted_t { } sub tests_recursive { my $self = shift; my $dir = shift || 't'; unless ( -d $dir ) { die "tests_recursive dir '$dir' does not exist"; } my %tests = map { $_ => 1 } split / /, ($self->tests || ''); require File::Find; File::Find::find( sub { /\.t$/ and -f $_ and $tests{"$File::Find::dir/*.t"} = 1 }, $dir ); $self->tests( join ' ', sort keys %tests ); } sub write { my $self = shift; die "&Makefile->write() takes no arguments\n" if @_; # Check the current Perl version my $perl_version = $self->perl_version; if ( $perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; } # Make sure we have a new enough MakeMaker require ExtUtils::MakeMaker; if ( $perl_version and $self->_cmp($perl_version, '5.006') >= 0 ) { # This previous attempted to inherit the version of # ExtUtils::MakeMaker in use by the module author, but this # was found to be untenable as some authors build releases # using future dev versions of EU:MM that nobody else has. # Instead, #toolchain suggests we use 6.59 which is the most # stable version on CPAN at time of writing and is, to quote # ribasushi, "not terminally fucked, > and tested enough". # TODO: We will now need to maintain this over time to push # the version up as new versions are released. $self->build_requires( 'ExtUtils::MakeMaker' => 6.59 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.59 ); } else { # Allow legacy-compatibility with 5.005 by depending on the # most recent EU:MM that supported 5.005. $self->build_requires( 'ExtUtils::MakeMaker' => 6.36 ); $self->configure_requires( 'ExtUtils::MakeMaker' => 6.36 ); } # Generate the MakeMaker params my $args = $self->makemaker_args; $args->{DISTNAME} = $self->name; $args->{NAME} = $self->module_name || $self->name; $args->{NAME} =~ s/-/::/g; $args->{VERSION} = $self->version or die <<'EOT'; ERROR: Can't determine distribution version. Please specify it explicitly via 'version' in Makefile.PL, or set a valid $VERSION in a module, and provide its file path via 'version_from' (or 'all_from' if you prefer) in Makefile.PL. EOT if ( $self->tests ) { my @tests = split ' ', $self->tests; my %seen; $args->{test} = { TESTS => (join ' ', grep {!$seen{$_}++} @tests), }; } elsif ( $Module::Install::ExtraTests::use_extratests ) { # Module::Install::ExtraTests doesn't set $self->tests and does its own tests via harness. # So, just ignore our xt tests here. } elsif ( -d 'xt' and ($Module::Install::AUTHOR or $ENV{RELEASE_TESTING}) ) { $args->{test} = { TESTS => join( ' ', map { "$_/*.t" } grep { -d $_ } qw{ t xt } ), }; } if ( $] >= 5.005 ) { $args->{ABSTRACT} = $self->abstract; $args->{AUTHOR} = join ', ', @{$self->author || []}; } if ( $self->makemaker(6.10) ) { $args->{NO_META} = 1; #$args->{NO_MYMETA} = 1; } if ( $self->makemaker(6.17) and $self->sign ) { $args->{SIGN} = 1; } unless ( $self->is_admin ) { delete $args->{SIGN}; } if ( $self->makemaker(6.31) and $self->license ) { $args->{LICENSE} = $self->license; } my $prereq = ($args->{PREREQ_PM} ||= {}); %$prereq = ( %$prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->requires) ); # Remove any reference to perl, PREREQ_PM doesn't support it delete $args->{PREREQ_PM}->{perl}; # Merge both kinds of requires into BUILD_REQUIRES my $build_prereq = ($args->{BUILD_REQUIRES} ||= {}); %$build_prereq = ( %$build_prereq, map { @$_ } # flatten [module => version] map { @$_ } grep $_, ($self->configure_requires, $self->build_requires) ); # Remove any reference to perl, BUILD_REQUIRES doesn't support it delete $args->{BUILD_REQUIRES}->{perl}; # Delete bundled dists from prereq_pm, add it to Makefile DIR my $subdirs = ($args->{DIR} || []); if ($self->bundles) { my %processed; foreach my $bundle (@{ $self->bundles }) { my ($mod_name, $dist_dir) = @$bundle; delete $prereq->{$mod_name}; $dist_dir = File::Basename::basename($dist_dir); # dir for building this module if (not exists $processed{$dist_dir}) { if (-d $dist_dir) { # List as sub-directory to be processed by make push @$subdirs, $dist_dir; } # Else do nothing: the module is already present on the system $processed{$dist_dir} = undef; } } } unless ( $self->makemaker('6.55_03') ) { %$prereq = (%$prereq,%$build_prereq); delete $args->{BUILD_REQUIRES}; } if ( my $perl_version = $self->perl_version ) { eval "use $perl_version; 1" or die "ERROR: perl: Version $] is installed, " . "but we need version >= $perl_version"; if ( $self->makemaker(6.48) ) { $args->{MIN_PERL_VERSION} = $perl_version; } } if ($self->installdirs) { warn qq{old INSTALLDIRS (probably set by makemaker_args) is overriden by installdirs\n} if $args->{INSTALLDIRS}; $args->{INSTALLDIRS} = $self->installdirs; } my %args = map { ( $_ => $args->{$_} ) } grep {defined($args->{$_} ) } keys %$args; my $user_preop = delete $args{dist}->{PREOP}; if ( my $preop = $self->admin->preop($user_preop) ) { foreach my $key ( keys %$preop ) { $args{dist}->{$key} = $preop->{$key}; } } my $mm = ExtUtils::MakeMaker::WriteMakefile(%args); $self->fix_up_makefile($mm->{FIRST_MAKEFILE} || 'Makefile'); } sub fix_up_makefile { my $self = shift; my $makefile_name = shift; my $top_class = ref($self->_top) || ''; my $top_version = $self->_top->VERSION || ''; my $preamble = $self->preamble ? "# Preamble by $top_class $top_version\n" . $self->preamble : ''; my $postamble = "# Postamble by $top_class $top_version\n" . ($self->postamble || ''); local *MAKEFILE; open MAKEFILE, "+< $makefile_name" or die "fix_up_makefile: Couldn't open $makefile_name: $!"; eval { flock MAKEFILE, LOCK_EX }; my $makefile = do { local $/; }; $makefile =~ s/\b(test_harness\(\$\(TEST_VERBOSE\), )/$1'inc', /; $makefile =~ s/( -I\$\(INST_ARCHLIB\))/ -Iinc$1/g; $makefile =~ s/( "-I\$\(INST_LIB\)")/ "-Iinc"$1/g; $makefile =~ s/^(FULLPERL = .*)/$1 "-Iinc"/m; $makefile =~ s/^(PERL = .*)/$1 "-Iinc"/m; # Module::Install will never be used to build the Core Perl # Sometimes PERL_LIB and PERL_ARCHLIB get written anyway, which breaks # PREFIX/PERL5LIB, and thus, install_share. Blank them if they exist $makefile =~ s/^PERL_LIB = .+/PERL_LIB =/m; #$makefile =~ s/^PERL_ARCHLIB = .+/PERL_ARCHLIB =/m; # Perl 5.005 mentions PERL_LIB explicitly, so we have to remove that as well. $makefile =~ s/(\"?)-I\$\(PERL_LIB\)\1//g; # XXX - This is currently unused; not sure if it breaks other MM-users # $makefile =~ s/^pm_to_blib\s+:\s+/pm_to_blib :: /mg; seek MAKEFILE, 0, SEEK_SET; truncate MAKEFILE, 0; print MAKEFILE "$preamble$makefile$postamble" or die $!; close MAKEFILE or die $!; 1; } sub preamble { my ($self, $text) = @_; $self->{preamble} = $text . $self->{preamble} if defined $text; $self->{preamble}; } sub postamble { my ($self, $text) = @_; $self->{postamble} ||= $self->admin->postamble; $self->{postamble} .= $text if defined $text; $self->{postamble} } 1; __END__ #line 544 RDF-Trine-1.007/inc/Module/Install/Metadata.pm000644 000765 000024 00000043277 12171744431 021005 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Metadata; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } my @boolean_keys = qw{ sign }; my @scalar_keys = qw{ name module_name abstract version distribution_type tests installdirs }; my @tuple_keys = qw{ configure_requires build_requires requires recommends bundles resources }; my @resource_keys = qw{ homepage bugtracker repository }; my @array_keys = qw{ keywords author }; *authors = \&author; sub Meta { shift } sub Meta_BooleanKeys { @boolean_keys } sub Meta_ScalarKeys { @scalar_keys } sub Meta_TupleKeys { @tuple_keys } sub Meta_ResourceKeys { @resource_keys } sub Meta_ArrayKeys { @array_keys } foreach my $key ( @boolean_keys ) { *$key = sub { my $self = shift; if ( defined wantarray and not @_ ) { return $self->{values}->{$key}; } $self->{values}->{$key} = ( @_ ? $_[0] : 1 ); return $self; }; } foreach my $key ( @scalar_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} = shift; return $self; }; } foreach my $key ( @array_keys ) { *$key = sub { my $self = shift; return $self->{values}->{$key} if defined wantarray and !@_; $self->{values}->{$key} ||= []; push @{$self->{values}->{$key}}, @_; return $self; }; } foreach my $key ( @resource_keys ) { *$key = sub { my $self = shift; unless ( @_ ) { return () unless $self->{values}->{resources}; return map { $_->[1] } grep { $_->[0] eq $key } @{ $self->{values}->{resources} }; } return $self->{values}->{resources}->{$key} unless @_; my $uri = shift or die( "Did not provide a value to $key()" ); $self->resources( $key => $uri ); return 1; }; } foreach my $key ( grep { $_ ne "resources" } @tuple_keys) { *$key = sub { my $self = shift; return $self->{values}->{$key} unless @_; my @added; while ( @_ ) { my $module = shift or last; my $version = shift || 0; push @added, [ $module, $version ]; } push @{ $self->{values}->{$key} }, @added; return map {@$_} @added; }; } # Resource handling my %lc_resource = map { $_ => 1 } qw{ homepage license bugtracker repository }; sub resources { my $self = shift; while ( @_ ) { my $name = shift or last; my $value = shift or next; if ( $name eq lc $name and ! $lc_resource{$name} ) { die("Unsupported reserved lowercase resource '$name'"); } $self->{values}->{resources} ||= []; push @{ $self->{values}->{resources} }, [ $name, $value ]; } $self->{values}->{resources}; } # Aliases for build_requires that will have alternative # meanings in some future version of META.yml. sub test_requires { shift->build_requires(@_) } sub install_requires { shift->build_requires(@_) } # Aliases for installdirs options sub install_as_core { $_[0]->installdirs('perl') } sub install_as_cpan { $_[0]->installdirs('site') } sub install_as_site { $_[0]->installdirs('site') } sub install_as_vendor { $_[0]->installdirs('vendor') } sub dynamic_config { my $self = shift; my $value = @_ ? shift : 1; if ( $self->{values}->{dynamic_config} ) { # Once dynamic we never change to static, for safety return 0; } $self->{values}->{dynamic_config} = $value ? 1 : 0; return 1; } # Convenience command sub static_config { shift->dynamic_config(0); } sub perl_version { my $self = shift; return $self->{values}->{perl_version} unless @_; my $version = shift or die( "Did not provide a value to perl_version()" ); # Normalize the version $version = $self->_perl_version($version); # We don't support the really old versions unless ( $version >= 5.005 ) { die "Module::Install only supports 5.005 or newer (use ExtUtils::MakeMaker)\n"; } $self->{values}->{perl_version} = $version; } sub all_from { my ( $self, $file ) = @_; unless ( defined($file) ) { my $name = $self->name or die( "all_from called with no args without setting name() first" ); $file = join('/', 'lib', split(/-/, $name)) . '.pm'; $file =~ s{.*/}{} unless -e $file; unless ( -e $file ) { die("all_from cannot find $file from $name"); } } unless ( -f $file ) { die("The path '$file' does not exist, or is not a file"); } $self->{values}{all_from} = $file; # Some methods pull from POD instead of code. # If there is a matching .pod, use that instead my $pod = $file; $pod =~ s/\.pm$/.pod/i; $pod = $file unless -e $pod; # Pull the different values $self->name_from($file) unless $self->name; $self->version_from($file) unless $self->version; $self->perl_version_from($file) unless $self->perl_version; $self->author_from($pod) unless @{$self->author || []}; $self->license_from($pod) unless $self->license; $self->abstract_from($pod) unless $self->abstract; return 1; } sub provides { my $self = shift; my $provides = ( $self->{values}->{provides} ||= {} ); %$provides = (%$provides, @_) if @_; return $provides; } sub auto_provides { my $self = shift; return $self unless $self->is_admin; unless (-e 'MANIFEST') { warn "Cannot deduce auto_provides without a MANIFEST, skipping\n"; return $self; } # Avoid spurious warnings as we are not checking manifest here. local $SIG{__WARN__} = sub {1}; require ExtUtils::Manifest; local *ExtUtils::Manifest::manicheck = sub { return }; require Module::Build; my $build = Module::Build->new( dist_name => $self->name, dist_version => $self->version, license => $self->license, ); $self->provides( %{ $build->find_dist_packages || {} } ); } sub feature { my $self = shift; my $name = shift; my $features = ( $self->{values}->{features} ||= [] ); my $mods; if ( @_ == 1 and ref( $_[0] ) ) { # The user used ->feature like ->features by passing in the second # argument as a reference. Accomodate for that. $mods = $_[0]; } else { $mods = \@_; } my $count = 0; push @$features, ( $name => [ map { ref($_) ? ( ref($_) eq 'HASH' ) ? %$_ : @$_ : $_ } @$mods ] ); return @$features; } sub features { my $self = shift; while ( my ( $name, $mods ) = splice( @_, 0, 2 ) ) { $self->feature( $name, @$mods ); } return $self->{values}->{features} ? @{ $self->{values}->{features} } : (); } sub no_index { my $self = shift; my $type = shift; push @{ $self->{values}->{no_index}->{$type} }, @_ if $type; return $self->{values}->{no_index}; } sub read { my $self = shift; $self->include_deps( 'YAML::Tiny', 0 ); require YAML::Tiny; my $data = YAML::Tiny::LoadFile('META.yml'); # Call methods explicitly in case user has already set some values. while ( my ( $key, $value ) = each %$data ) { next unless $self->can($key); if ( ref $value eq 'HASH' ) { while ( my ( $module, $version ) = each %$value ) { $self->can($key)->($self, $module => $version ); } } else { $self->can($key)->($self, $value); } } return $self; } sub write { my $self = shift; return $self unless $self->is_admin; $self->admin->write_meta; return $self; } sub version_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->version( ExtUtils::MM_Unix->parse_version($file) ); # for version integrity check $self->makemaker_args( VERSION_FROM => $file ); } sub abstract_from { require ExtUtils::MM_Unix; my ( $self, $file ) = @_; $self->abstract( bless( { DISTNAME => $self->name }, 'ExtUtils::MM_Unix' )->parse_abstract($file) ); } # Add both distribution and module name sub name_from { my ($self, $file) = @_; if ( Module::Install::_read($file) =~ m/ ^ \s* package \s* ([\w:]+) \s* ; /ixms ) { my ($name, $module_name) = ($1, $1); $name =~ s{::}{-}g; $self->name($name); unless ( $self->module_name ) { $self->module_name($module_name); } } else { die("Cannot determine name from $file\n"); } } sub _extract_perl_version { if ( $_[0] =~ m/ ^\s* (?:use|require) \s* v? ([\d_\.]+) \s* ; /ixms ) { my $perl_version = $1; $perl_version =~ s{_}{}g; return $perl_version; } else { return; } } sub perl_version_from { my $self = shift; my $perl_version=_extract_perl_version(Module::Install::_read($_[0])); if ($perl_version) { $self->perl_version($perl_version); } else { warn "Cannot determine perl version info from $_[0]\n"; return; } } sub author_from { my $self = shift; my $content = Module::Install::_read($_[0]); if ($content =~ m/ =head \d \s+ (?:authors?)\b \s* ([^\n]*) | =head \d \s+ (?:licen[cs]e|licensing|copyright|legal)\b \s* .*? copyright .*? \d\d\d[\d.]+ \s* (?:\bby\b)? \s* ([^\n]*) /ixms) { my $author = $1 || $2; # XXX: ugly but should work anyway... if (eval "require Pod::Escapes; 1") { # Pod::Escapes has a mapping table. # It's in core of perl >= 5.9.3, and should be installed # as one of the Pod::Simple's prereqs, which is a prereq # of Pod::Text 3.x (see also below). $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $Pod::Escapes::Name2character_number{$1} ? chr($Pod::Escapes::Name2character_number{$1}) : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } elsif (eval "require Pod::Text; 1" && $Pod::Text::VERSION < 3) { # Pod::Text < 3.0 has yet another mapping table, # though the table name of 2.x and 1.x are different. # (1.x is in core of Perl < 5.6, 2.x is in core of # Perl < 5.9.3) my $mapping = ($Pod::Text::VERSION < 2) ? \%Pod::Text::HTML_Escapes : \%Pod::Text::ESCAPES; $author =~ s{ E<( (\d+) | ([A-Za-z]+) )> } { defined $2 ? chr($2) : defined $mapping->{$1} ? $mapping->{$1} : do { warn "Unknown escape: E<$1>"; "E<$1>"; }; }gex; } else { $author =~ s{E}{<}g; $author =~ s{E}{>}g; } $self->author($author); } else { warn "Cannot determine author info from $_[0]\n"; } } #Stolen from M::B my %license_urls = ( perl => 'http://dev.perl.org/licenses/', apache => 'http://apache.org/licenses/LICENSE-2.0', apache_1_1 => 'http://apache.org/licenses/LICENSE-1.1', artistic => 'http://opensource.org/licenses/artistic-license.php', artistic_2 => 'http://opensource.org/licenses/artistic-license-2.0.php', lgpl => 'http://opensource.org/licenses/lgpl-license.php', lgpl2 => 'http://opensource.org/licenses/lgpl-2.1.php', lgpl3 => 'http://opensource.org/licenses/lgpl-3.0.html', bsd => 'http://opensource.org/licenses/bsd-license.php', gpl => 'http://opensource.org/licenses/gpl-license.php', gpl2 => 'http://opensource.org/licenses/gpl-2.0.php', gpl3 => 'http://opensource.org/licenses/gpl-3.0.html', mit => 'http://opensource.org/licenses/mit-license.php', mozilla => 'http://opensource.org/licenses/mozilla1.1.php', open_source => undef, unrestricted => undef, restrictive => undef, unknown => undef, ); sub license { my $self = shift; return $self->{values}->{license} unless @_; my $license = shift or die( 'Did not provide a value to license()' ); $license = __extract_license($license) || lc $license; $self->{values}->{license} = $license; # Automatically fill in license URLs if ( $license_urls{$license} ) { $self->resources( license => $license_urls{$license} ); } return 1; } sub _extract_license { my $pod = shift; my $matched; return __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ L(?i:ICEN[CS]E|ICENSING)\b.*?) (=head \d.*|=cut.*|)\z /xms ) || __extract_license( ($matched) = $pod =~ m/ (=head \d \s+ (?:C(?i:OPYRIGHTS?)|L(?i:EGAL))\b.*?) (=head \d.*|=cut.*|)\z /xms ); } sub __extract_license { my $license_text = shift or return; my @phrases = ( '(?:under )?the same (?:terms|license) as (?:perl|the perl (?:\d )?programming language)' => 'perl', 1, '(?:under )?the terms of (?:perl|the perl programming language) itself' => 'perl', 1, 'Artistic and GPL' => 'perl', 1, 'GNU general public license' => 'gpl', 1, 'GNU public license' => 'gpl', 1, 'GNU lesser general public license' => 'lgpl', 1, 'GNU lesser public license' => 'lgpl', 1, 'GNU library general public license' => 'lgpl', 1, 'GNU library public license' => 'lgpl', 1, 'GNU Free Documentation license' => 'unrestricted', 1, 'GNU Affero General Public License' => 'open_source', 1, '(?:Free)?BSD license' => 'bsd', 1, 'Artistic license 2\.0' => 'artistic_2', 1, 'Artistic license' => 'artistic', 1, 'Apache (?:Software )?license' => 'apache', 1, 'GPL' => 'gpl', 1, 'LGPL' => 'lgpl', 1, 'BSD' => 'bsd', 1, 'Artistic' => 'artistic', 1, 'MIT' => 'mit', 1, 'Mozilla Public License' => 'mozilla', 1, 'Q Public License' => 'open_source', 1, 'OpenSSL License' => 'unrestricted', 1, 'SSLeay License' => 'unrestricted', 1, 'zlib License' => 'open_source', 1, 'proprietary' => 'proprietary', 0, ); while ( my ($pattern, $license, $osi) = splice(@phrases, 0, 3) ) { $pattern =~ s#\s+#\\s+#gs; if ( $license_text =~ /\b$pattern\b/i ) { return $license; } } return ''; } sub license_from { my $self = shift; if (my $license=_extract_license(Module::Install::_read($_[0]))) { $self->license($license); } else { warn "Cannot determine license info from $_[0]\n"; return 'unknown'; } } sub _extract_bugtracker { my @links = $_[0] =~ m#L<( https?\Q://rt.cpan.org/\E[^>]+| https?\Q://github.com/\E[\w_]+/[\w_]+/issues| https?\Q://code.google.com/p/\E[\w_\-]+/issues/list )>#gx; my %links; @links{@links}=(); @links=keys %links; return @links; } sub bugtracker_from { my $self = shift; my $content = Module::Install::_read($_[0]); my @links = _extract_bugtracker($content); unless ( @links ) { warn "Cannot determine bugtracker info from $_[0]\n"; return 0; } if ( @links > 1 ) { warn "Found more than one bugtracker link in $_[0]\n"; return 0; } # Set the bugtracker bugtracker( $links[0] ); return 1; } sub requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+(v?[\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->requires( $module => $version ); } } sub test_requires_from { my $self = shift; my $content = Module::Install::_readperl($_[0]); my @requires = $content =~ m/^use\s+([^\W\d]\w*(?:::\w+)*)\s+([\d\.]+)/mg; while ( @requires ) { my $module = shift @requires; my $version = shift @requires; $self->test_requires( $module => $version ); } } # Convert triple-part versions (eg, 5.6.1 or 5.8.9) to # numbers (eg, 5.006001 or 5.008009). # Also, convert double-part versions (eg, 5.8) sub _perl_version { my $v = $_[-1]; $v =~ s/^([1-9])\.([1-9]\d?\d?)$/sprintf("%d.%03d",$1,$2)/e; $v =~ s/^([1-9])\.([1-9]\d?\d?)\.(0|[1-9]\d?\d?)$/sprintf("%d.%03d%03d",$1,$2,$3 || 0)/e; $v =~ s/(\.\d\d\d)000$/$1/; $v =~ s/_.+$//; if ( ref($v) ) { # Numify $v = $v + 0; } return $v; } sub add_metadata { my $self = shift; my %hash = @_; for my $key (keys %hash) { warn "add_metadata: $key is not prefixed with 'x_'.\n" . "Use appopriate function to add non-private metadata.\n" unless $key =~ /^x_/; $self->{values}->{$key} = $hash{$key}; } } ###################################################################### # MYMETA Support sub WriteMyMeta { die "WriteMyMeta has been deprecated"; } sub write_mymeta_yaml { my $self = shift; # We need YAML::Tiny to write the MYMETA.yml file unless ( eval { require YAML::Tiny; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.yml\n"; YAML::Tiny::DumpFile('MYMETA.yml', $meta); } sub write_mymeta_json { my $self = shift; # We need JSON to write the MYMETA.json file unless ( eval { require JSON; 1; } ) { return 1; } # Generate the data my $meta = $self->_write_mymeta_data or return 1; # Save as the MYMETA.yml file print "Writing MYMETA.json\n"; Module::Install::_write( 'MYMETA.json', JSON->new->pretty(1)->canonical->encode($meta), ); } sub _write_mymeta_data { my $self = shift; # If there's no existing META.yml there is nothing we can do return undef unless -f 'META.yml'; # We need Parse::CPAN::Meta to load the file unless ( eval { require Parse::CPAN::Meta; 1; } ) { return undef; } # Merge the perl version into the dependencies my $val = $self->Meta->{values}; my $perl = delete $val->{perl_version}; if ( $perl ) { $val->{requires} ||= []; my $requires = $val->{requires}; # Canonize to three-dot version after Perl 5.6 if ( $perl >= 5.006 ) { $perl =~ s{^(\d+)\.(\d\d\d)(\d*)}{join('.', $1, int($2||0), int($3||0))}e } unshift @$requires, [ perl => $perl ]; } # Load the advisory META.yml file my @yaml = Parse::CPAN::Meta::LoadFile('META.yml'); my $meta = $yaml[0]; # Overwrite the non-configure dependency hashs delete $meta->{requires}; delete $meta->{build_requires}; delete $meta->{recommends}; if ( exists $val->{requires} ) { $meta->{requires} = { map { @$_ } @{ $val->{requires} } }; } if ( exists $val->{build_requires} ) { $meta->{build_requires} = { map { @$_ } @{ $val->{build_requires} } }; } return $meta; } 1; RDF-Trine-1.007/inc/Module/Install/Scripts.pm000644 000765 000024 00000001011 12171744431 020670 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Scripts; use strict 'vars'; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } sub install_script { my $self = shift; my $args = $self->makemaker_args; my $exe = $args->{EXE_FILES} ||= []; foreach ( @_ ) { if ( -f $_ ) { push @$exe, $_; } elsif ( -d 'script' and -f "script/$_" ) { push @$exe, "script/$_"; } else { die("Cannot find script '$_'"); } } } 1; RDF-Trine-1.007/inc/Module/Install/Win32.pm000644 000765 000024 00000003403 12171744431 020152 0ustar00gregstaff000000 000000 #line 1 package Module::Install::Win32; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = 'Module::Install::Base'; $ISCORE = 1; } # determine if the user needs nmake, and download it if needed sub check_nmake { my $self = shift; $self->load('can_run'); $self->load('get_file'); require Config; return unless ( $^O eq 'MSWin32' and $Config::Config{make} and $Config::Config{make} =~ /^nmake\b/i and ! $self->can_run('nmake') ); print "The required 'nmake' executable not found, fetching it...\n"; require File::Basename; my $rv = $self->get_file( url => 'http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe', ftp_url => 'ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe', local_dir => File::Basename::dirname($^X), size => 51928, run => 'Nmake15.exe /o > nul', check_for => 'Nmake.exe', remove => 1, ); die <<'END_MESSAGE' unless $rv; ------------------------------------------------------------------------------- Since you are using Microsoft Windows, you will need the 'nmake' utility before installation. It's available at: http://download.microsoft.com/download/vc15/Patch/1.52/W95/EN-US/Nmake15.exe or ftp://ftp.microsoft.com/Softlib/MSLFILES/Nmake15.exe Please download the file manually, save it to a directory in %PATH% (e.g. C:\WINDOWS\COMMAND\), then launch the MS-DOS command line shell, "cd" to that directory, and run "Nmake15.exe" from there; that will create the 'nmake.exe' file needed by this module. You may then resume the installation process described in README. ------------------------------------------------------------------------------- END_MESSAGE } 1; RDF-Trine-1.007/inc/Module/Install/WriteAll.pm000644 000765 000024 00000002376 12171744431 021003 0ustar00gregstaff000000 000000 #line 1 package Module::Install::WriteAll; use strict; use Module::Install::Base (); use vars qw{$VERSION @ISA $ISCORE}; BEGIN { $VERSION = '1.06'; @ISA = qw{Module::Install::Base}; $ISCORE = 1; } sub WriteAll { my $self = shift; my %args = ( meta => 1, sign => 0, inline => 0, check_nmake => 1, @_, ); $self->sign(1) if $args{sign}; $self->admin->WriteAll(%args) if $self->is_admin; $self->check_nmake if $args{check_nmake}; unless ( $self->makemaker_args->{PL_FILES} ) { # XXX: This still may be a bit over-defensive... unless ($self->makemaker(6.25)) { $self->makemaker_args( PL_FILES => {} ) if -f 'Build.PL'; } } # Until ExtUtils::MakeMaker support MYMETA.yml, make sure # we clean it up properly ourself. $self->realclean_files('MYMETA.yml'); if ( $args{inline} ) { $self->Inline->write; } else { $self->Makefile->write; } # The Makefile write process adds a couple of dependencies, # so write the META.yml files after the Makefile. if ( $args{meta} ) { $self->Meta->write; } # Experimental support for MYMETA if ( $ENV{X_MYMETA} ) { if ( $ENV{X_MYMETA} eq 'JSON' ) { $self->Meta->write_mymeta_json; } else { $self->Meta->write_mymeta_yaml; } } return 1; } 1; RDF-Trine-1.007/extra/mysql.sql000644 000765 000024 00000001016 11573504053 016314 0ustar00gregstaff000000 000000 CREATE TABLE IF NOT EXISTS Literals ( ID bigint unsigned PRIMARY KEY, Value longtext NOT NULL, Language text NOT NULL DEFAULT "", Datatype text NOT NULL DEFAULT "", INDEX (Value(32)) ) CHARACTER SET utf8 COLLATE utf8_bin; CREATE TABLE IF NOT EXISTS Resources ( ID bigint unsigned PRIMARY KEY, URI text NOT NULL, INDEX (URI(64)) ); CREATE TABLE IF NOT EXISTS Bnodes ( ID bigint unsigned PRIMARY KEY, Name text NOT NULL ); CREATE TABLE IF NOT EXISTS Models ( ID bigint unsigned PRIMARY KEY, Name text NOT NULL ); RDF-Trine-1.007/examples/foaf_labels.pl000755 000765 000024 00000004274 11351761665 017737 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; =head1 DESCRIPTION This example script shows how to create a new RDF store based on a SQLite database, load RDF data into the store from a file, and retrieve data from the store matching a statement pattern. =cut use RDF::Trine; use LWP::Simple qw(get); # The temporary_store method will return a RDF::Trine::Store object # based on a SQLite database created in a temporary file. my $store = RDF::Trine::Store::DBI->temporary_store(); # If you want to keep the SQLite database file around and use it # again later, you should use the regular new() constructor of the # RDF::Trine::Store::DBI class. If you create a new store using the # new() method, you'll need to call $store->init() once, immediately # after creating the store -- this will create all the necessary # database tables that the store will need. # now wrap the store in a model: my $model = RDF::Trine::Model->new( $store ); # Now we'll load the RDF data for the FOAF vocabulary from its URL: my $url = 'http://xmlns.com/foaf/0.1/index.rdf'; RDF::Trine::Parser->parse_url_into_model( $url, $model ); # $model now contains all the FOAF data. To look up specific triples # from this data, use the get_statements() and get_pattern() methods # of the model object: # Get all labels of things (triples matching "?thing rdfs:label ?label"): # [ Note that get_statements() can take undef as a value in any position that # [ you don't care to specify. Here, we're looking to restrict the retrieval to # [ to triples with a specific predicate, so the subject and object positions # [ (first and third, respectively) are undef. my $label = RDF::Trine::Node::Resource->new('http://www.w3.org/2000/01/rdf-schema#label'); my $iterator = $model->get_statements(undef, $label, undef); # Now we'll loop over all the matching statements and print them out: while (my $statement = $iterator->next) { my $thing = $statement->subject; my $label = $statement->object; # $thing and $label are RDF::Trine::Node objects. To get a string suitable # for printing, use the as_string() method: my $thing_string = $thing->as_string; my $label_string = $label->as_string; print "$thing_string has label $label_string\n"; } RDF-Trine-1.007/bin/graph.pl000755 000765 000024 00000000733 11552456155 015527 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; use RDF::Trine; use GraphViz; use File::Spec; my $model = RDF::Trine::Model->temporary_model; foreach my $file (@ARGV) { my $pclass = RDF::Trine::Parser->guess_parser_by_filename($file) || 'RDF::Trine::Parser::RDFXML'; my $p = $pclass->new; open(my $fh, '<', $file) or die $!; my $base = 'file://' . File::Spec->rel2abs($file); $p->parse_file_into_model( $base, $fh, $model ); } my $g = $model->as_graphviz; print $g->as_png; RDF-Trine-1.007/bin/rdf_init_store.pl000755 000765 000024 00000001407 11012352221 017413 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use RDF::Trine::Store::DBI; unless (@ARGV) { print <<"END"; USAGE: $0 server-type dbname username password model-name [host] server-type can be either 'mysql', 'pg' or 'sqlite' END exit; } my $server = shift; my $dbname = shift; my $user = shift; my $pass = shift; my $model = shift; my $host = shift; my $dsn; if ($server eq 'mysql') { $dsn = "DBI:mysql:database=${dbname}"; } elsif ($server eq 'sqlite') { $dsn = "DBI:SQLite:dbname=${dbname}"; } elsif ($server eq 'pg') { $dsn = "DBI:Pg:dbname=${dbname}"; if ($host) { $dsn .= ';host=' . $host; } } else { warn "Unknown server type: $server\n"; exit; } my $store = RDF::Trine::Store::DBI->new($model, $dsn, $user, $pass); $store->init; RDF-Trine-1.007/bin/rdf_parse_turtle.pl000755 000765 000024 00000001262 12164234713 017762 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use File::Spec; use lib qw(lib); use Data::Dumper; use FindBin qw($Bin); use LWP::Simple qw(get); use RDF::Trine::Parser::Turtle; use RDF::Trine::Error qw(:try); my $url = shift; my $data; if ($url =~ m#^http://#) { $data = get($url); } else { my $file = File::Spec->rel2abs( $url ); $data = do { open( my $fh, '<:encoding(UTF-8)', $file ); local($/) = undef; <$fh> }; $url = 'file://' . $file; } try { my $parser = RDF::Trine::Parser::Turtle->new; $parser->parse( $url, $data, sub { my $st = shift; print $st->as_string . "\n" } ); } otherwise { my $e = shift; warn "*** parse error: $e"; } RDF-Trine-1.007/bin/rdf_parse_xml.pl000755 000765 000024 00000001540 12164234713 017242 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use File::Spec; use lib qw(lib); use Data::Dumper; use FindBin qw($Bin); use LWP::Simple qw(get); use RDF::Trine::Model; use RDF::Trine::Store::DBI; use RDF::Trine::Parser::RDFXML; use RDF::Trine::Serializer::NTriples; my $url = shift; my $data; if ($url =~ m#^http://#) { $data = get($url); } else { my $file = File::Spec->rel2abs( $url ); $data = do { open( my $fh, '<:encoding(UTF-8)', $file ); local($/) = undef; <$fh> }; $url = 'file://' . $file; } my $model = RDF::Trine::Model->new( RDF::Trine::Store::DBI->temporary_store ); my $parser = RDF::Trine::Parser::RDFXML->new( BNodePrefix => 'genid' ); $parser->parse_into_model( $url, $data, $model ); my $s = RDF::Trine::Serializer::NTriples->new(); my $nt = $s->serialize_model_to_string( $model ); print $nt; RDF-Trine-1.007/bin/rdf_store_add_file.pl000755 000765 000024 00000003755 11552456155 020233 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use File::Spec; use File::Slurp; use LWP::UserAgent; use RDF::Trine; use RDF::Trine::Store::DBI; use RDF::Trine::Statement; unless (@ARGV >= 6) { print <<"END"; USAGE: $0 server-type dbname username password model-name file base [host] server-type can be either 'mysql' or 'sqlite' END exit; } my $server = shift; my $dbname = shift; my $user = shift; my $pass = shift; my $model = shift; my $file = shift; my $base = shift; my $host = shift; my $dsn; if ($server eq 'mysql') { $dsn = "DBI:mysql:database=${dbname}"; } elsif ($server eq 'sqlite') { $dsn = "DBI:SQLite:dbname=${dbname}"; } elsif ($server eq 'pg') { $dsn = "DBI:Pg:dbname=${dbname}"; if ($host) { $dsn .= ';host=' . $host; } } else { warn "Unknown server type: $server\n"; exit; } my $data; my $store = RDF::Trine::Store::DBI->new($model, $dsn, $user, $pass); if ($file =~ qr[^http(s?)://]) { my $ua = LWP::UserAgent->new; $ua->agent( "RDF::Trine/${RDF::Trine::VERSION}" ); $ua->default_header( 'Accept' => 'application/turtle,application/x-turtle,application/rdf+xml' ); my $resp = $ua->get( $file ); if ($resp->is_success) { $data = $resp->content; } else { die $resp->status_line; } unless ($base) { $base = $file; } } else { $data = read_file( $file ); unless ($base) { my $abs = File::Spec->rel2abs( $file ); $base = 'file://' . $abs; } } # my $format = 'guess'; # my $baseuri = RDF::Redland::URI->new( $base ); # my $basenode = RDF::Trine::Node::Resource->new( $base ); # my $parser = RDF::Redland::Parser->new( $format ); # my $stream = $parser->parse_string_as_stream( $data, $baseuri ); # while ($stream and !$stream->end) { # my $statement = $stream->current; # my $stmt = RDF::Trine::Statement->from_redland( $statement ); # $store->add_statement( $stmt, $basenode ); # $stream->next; # } # my $parser = RDF::Trine::Parser::RDFXML->new(); my $m = RDF::Trine::Model->new( $store ); $parser->parse_into_model( $base, $data, $m ); RDF-Trine-1.007/bin/rdf_store_makeprivate.pl000755 000765 000024 00000001677 10765576511 021021 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use File::Spec; use File::Slurp; use RDF::Redland; use LWP::UserAgent; use Data::Dumper; use RDF::Trine; use RDF::Trine::Store::DBI; use RDF::Trine::Statement; unless (@ARGV >= 4) { print <<"END"; USAGE: $0 server-type dbname username password model-name server-type can be either 'mysql' or 'sqlite' END exit; } my $server = shift; my $dbname = shift; my $user = shift; my $pass = shift; my $model = shift; my $dsn; if ($server eq 'mysql') { $dsn = "DBI:mysql:database=${dbname}"; } elsif ($server eq 'sqlite') { $dsn = "DBI:sqlite:database=${dbname}"; } else { warn "Unknown server type: $server\n"; exit; } my $foaf = RDF::Trine::Namespace->new('http://xmlns.com/foaf/0.1/'); my $store = RDF::Trine::Store::DBI->new($model, $dsn, $user, $pass); my @preds = ( $foaf->mbox, $foaf->phone, ); my $table = $store->make_private_predicate_view( 'private_', @preds ); RDF-Trine-1.007/bin/rdf_store_serialize.pl000755 000765 000024 00000002333 11232635367 020461 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; no warnings 'redefine'; use File::Spec; use File::Slurp; use RDF::Redland; use LWP::UserAgent; use Data::Dumper; use RDF::Trine; use RDF::Trine::Model; use RDF::Trine::Serializer::NTriples; use RDF::Trine::Store::DBI; use RDF::Trine::Statement; unless (@ARGV >= 4) { print <<"END"; USAGE: $0 server-type dbname username password model-name [host] server-type can be either 'mysql' or 'sqlite' END exit; } my $server = shift; my $dbname = shift; my $user = shift; my $pass = shift; my $modelname = shift; my $host = shift; my $dsn; if ($server eq 'mysql') { $dsn = "DBI:mysql:database=${dbname}"; } elsif ($server eq 'sqlite') { $dsn = "DBI:SQLite:dbname=${dbname}"; } elsif ($server eq 'pg') { $dsn = "DBI:Pg:dbname=${dbname}"; if ($host) { $dsn .= ';host=' . $host; } } else { warn "Unknown server type: $server\n"; exit; } my $store = RDF::Trine::Store::DBI->new($modelname, $dsn, $user, $pass); my $model = RDF::Trine::Model->new($store); my $serializer = RDF::Trine::Serializer::NTriples->new(); $serializer->serialize_model_to_file( \*STDOUT, $model ); if (0) { my $iter = $store->get_statements(); while (my $s = $iter->next) { print $s->as_string . "\n"; } } RDF-Trine-1.007/bin/rdf_transcode.pl000755 000765 000024 00000002646 12164234713 017242 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; use threads qw(yield); use threads::shared; use Storable qw(freeze thaw); use RDF::Trine; use Getopt::Long; use Time::HiRes qw(usleep); my %namespaces; my $in = 'ntriples'; my $out = 'rdfxml'; my $result = GetOptions ("in=s" => \$in, "out=s" => \$out, "define=s" => \%namespaces, "D=s" => \%namespaces); unless (@ARGV) { print <<"END"; Usage: $0 -i in_format -o out_format rdf_data.filename END exit; } my $file = shift or die "An RDF filename must be given"; open( my $fh, '<:encoding(UTF-8)', $file ) or die $!; my $done :shared; my $st :shared; $done = 0; my $parser = RDF::Trine::Parser->new($in); my $serializer = RDF::Trine::Serializer->new($out, namespaces => \%namespaces); my $handler = sub { my $s = shift; lock($st); $st = freeze($s); cond_broadcast($st); }; my $thr = async { $parser->parse_file( 'http://base/', $fh, $handler ); # warn "done parsing"; lock($st); $st = undef; $done = 1; # warn "broadcasting finish state"; cond_broadcast($st); }; my $iter = RDF::Trine::Iterator::Graph->new( sub { while (1) { lock($st); if ($done) { # warn "got finish state"; return; } cond_wait($st); if (defined($st)) { my $s = thaw($st); $st = undef; return $s; } usleep(10); } } ); binmode(\*STDOUT, ':encoding(UTF-8)'); # warn "serializing to STDOUT"; $serializer->serialize_iterator_to_file( \*STDOUT, $iter ); # warn "done"; $thr->join(); RDF-Trine-1.007/bin/srx2csv000755 000765 000024 00000001427 12164234713 015421 0ustar00gregstaff000000 000000 #!/usr/bin/perl -l use strict; use warnings; use RDF::Trine; use Text::CSV; use Scalar::Util qw(reftype blessed); my $fh; if (scalar(@ARGV) and -r $ARGV[0]) { my $file = shift; open($fh, '<:encoding(UTF-8)', $file) or die $!; } else { $fh = \*STDIN; } my $csv = Text::CSV->new ( { binary => 1 } ); my $handler = RDF::Trine::Iterator::SAXHandler->new( sub { our @keys; my $vb = shift; if (reftype($vb) eq 'ARRAY') { @keys = @$vb; $csv->print( \*STDOUT, \@keys ); } else { print_vb( $csv, $vb ) } }, { variables => 1 } ); my $p = XML::SAX::ParserFactory->parser(Handler => $handler); $p->parse_file( $fh ); sub print_vb { our @keys; my $csv = shift; my $vb = shift; $csv->print( \*STDOUT, [ map { blessed($_) ? $_->value : '' } @{ $vb }{ @keys } ] ); } RDF-Trine-1.007/bin/srx2table000755 000765 000024 00000000530 12164234713 015707 0ustar00gregstaff000000 000000 #!/usr/bin/perl use strict; use warnings; use RDF::Trine; my $data; if (scalar(@ARGV) and -r $ARGV[0]) { my $file = shift; $data = do { local($/) = undef; open(my $fh, '<:encoding(UTF-8)', $file) or die $!; <$fh> }; } else { local($/) = undef; $data = <>; } my $iter = RDF::Trine::Iterator->from_string( $data ); print $iter->as_string;