| line | stmt | bran | cond | sub | pod | time | code | 
| 1 |  |  |  |  |  |  | package RDF::Helper; | 
| 2 | 11 |  |  | 11 |  | 569961 | use 5.10.1; | 
|  | 11 |  |  |  |  | 28 |  | 
| 3 | 11 |  |  | 11 |  | 5001 | use Moose; | 
|  | 11 |  |  |  |  | 3314994 |  | 
|  | 11 |  |  |  |  | 69 |  | 
| 4 |  |  |  |  |  |  | our $VERSION = '1.99_02'; | 
| 5 |  |  |  |  |  |  |  | 
| 6 | 11 |  |  | 11 |  | 58351 | use RDF::Helper::Statement; | 
|  | 11 |  |  |  |  | 31 |  | 
|  | 11 |  |  |  |  | 454 |  | 
| 7 | 11 |  |  | 11 |  | 5979 | use RDF::Helper::Object; | 
|  | 11 |  |  |  |  | 29 |  | 
|  | 11 |  |  |  |  | 3977 |  | 
| 8 |  |  |  |  |  |  |  | 
| 9 |  |  |  |  |  |  | has backend => ( | 
| 10 |  |  |  |  |  |  | does     => 'RDF::Helper::API', | 
| 11 |  |  |  |  |  |  | is       => 'ro', | 
| 12 |  |  |  |  |  |  | required => 1, | 
| 13 |  |  |  |  |  |  | handles  => 'RDF::Helper::API', | 
| 14 |  |  |  |  |  |  | ); | 
| 15 |  |  |  |  |  |  |  | 
| 16 |  |  |  |  |  |  | sub BUILDARGS { | 
| 17 | 11 |  |  | 11 | 1 | 6541117 | my $this  = shift; | 
| 18 | 11 |  |  |  |  | 109 | my $args  = $this->SUPER::BUILDARGS(@_); | 
| 19 | 11 | 50 |  |  |  | 138 | return $args if $args->{backend}; | 
| 20 |  |  |  |  |  |  |  | 
| 21 | 11 |  |  |  |  | 31 | my $class = delete $args->{BaseInterface}; | 
| 22 |  |  |  |  |  |  |  | 
| 23 |  |  |  |  |  |  | $class = 'RDF::Redland' | 
| 24 |  |  |  |  |  |  | if (!$class | 
| 25 |  |  |  |  |  |  | && $args->{Model} | 
| 26 | 11 | 0 | 33 |  |  | 37 | && $args->{Model}->isa('RDF::Redland::Model') ); | 
|  |  |  | 0 |  |  |  |  | 
| 27 |  |  |  |  |  |  |  | 
| 28 | 11 |  |  |  |  | 22 | given ($class) { | 
| 29 | 11 |  |  |  |  | 79 | when (qr/RDF::Helper::.*/) { } | 
| 30 | 11 |  |  |  |  | 37 | when ('RDF::Redland') { $class = 'RDF::Helper::RDFRedland'; }; | 
|  | 0 |  |  |  |  | 0 |  | 
| 31 | 11 |  |  |  |  | 21 | default { $class = 'RDF::Helper::RDFTrine' } | 
|  | 11 |  |  |  |  | 39 |  | 
| 32 |  |  |  |  |  |  | } | 
| 33 |  |  |  |  |  |  |  | 
| 34 | 11 |  |  |  |  | 61 | Class::MOP::load_class($class); | 
| 35 | 0 |  |  |  |  |  | my $backend = $class->new(%$args); | 
| 36 | 0 |  |  |  |  |  | return { backend => $backend }; | 
| 37 |  |  |  |  |  |  | } | 
| 38 |  |  |  |  |  |  |  | 
| 39 |  |  |  |  |  |  | 1; | 
| 40 |  |  |  |  |  |  | __END__ | 
| 41 |  |  |  |  |  |  |  | 
| 42 |  |  |  |  |  |  | =head1 NAME | 
| 43 |  |  |  |  |  |  |  | 
| 44 |  |  |  |  |  |  | RDF::Helper - Provide a consistent, high-level API for working with RDF with Perl | 
| 45 |  |  |  |  |  |  |  | 
| 46 |  |  |  |  |  |  | =head1 SYNOPSIS | 
| 47 |  |  |  |  |  |  |  | 
| 48 |  |  |  |  |  |  | use RDF::Helper; | 
| 49 |  |  |  |  |  |  |  | 
| 50 |  |  |  |  |  |  | my $rdf = RDF::Helper->new( | 
| 51 |  |  |  |  |  |  | BaseInterface => 'RDF::Trine', | 
| 52 |  |  |  |  |  |  | namespaces => { | 
| 53 |  |  |  |  |  |  | dct => 'http://purl.org/dc/terms/', | 
| 54 |  |  |  |  |  |  | rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#", | 
| 55 |  |  |  |  |  |  | '#default' => "http://purl.org/rss/1.0/", | 
| 56 |  |  |  |  |  |  | } | 
| 57 |  |  |  |  |  |  | ); | 
| 58 |  |  |  |  |  |  |  | 
| 59 |  |  |  |  |  |  | =head1 DESCRIPTION | 
| 60 |  |  |  |  |  |  |  | 
| 61 |  |  |  |  |  |  | This module intends to simplify, normalize and extend Perl's existing | 
| 62 |  |  |  |  |  |  | facilites for interacting with RDF data. | 
| 63 |  |  |  |  |  |  |  | 
| 64 |  |  |  |  |  |  | RDF::Helper's goal is to offer a syntactic sugar which will enable | 
| 65 |  |  |  |  |  |  | developers to work more efficiently. To achieve this, it implements | 
| 66 |  |  |  |  |  |  | methods to work with RDF in a way that would be familiar to Perl | 
| 67 |  |  |  |  |  |  | programmers who are less experienced with RDF. | 
| 68 |  |  |  |  |  |  |  | 
| 69 |  |  |  |  |  |  | It builds on L<RDF::Trine>, which in turn provides the low-level API | 
| 70 |  |  |  |  |  |  | which is closer to RDF. | 
| 71 |  |  |  |  |  |  |  | 
| 72 |  |  |  |  |  |  | =head1 CONSTRUCTOR OPTIONS | 
| 73 |  |  |  |  |  |  |  | 
| 74 |  |  |  |  |  |  | my $rdf = RDF::Helper->new( | 
| 75 |  |  |  |  |  |  | BaseInterface => 'RDF::Trine', | 
| 76 |  |  |  |  |  |  | namespaces => { | 
| 77 |  |  |  |  |  |  | dc => 'http://purl.org/dc/terms/', | 
| 78 |  |  |  |  |  |  | rdf => "http://www.w3.org/1999/02/22-rdf-syntax-ns#", | 
| 79 |  |  |  |  |  |  | '#default' => "http://purl.org/rss/1.0/", | 
| 80 |  |  |  |  |  |  | }, | 
| 81 |  |  |  |  |  |  | ExpandQNames => 1 | 
| 82 |  |  |  |  |  |  | ); | 
| 83 |  |  |  |  |  |  |  | 
| 84 |  |  |  |  |  |  | =head2 BaseInterface | 
| 85 |  |  |  |  |  |  |  | 
| 86 |  |  |  |  |  |  | The C<BaseInterface> option expects a string that corresponds to the | 
| 87 |  |  |  |  |  |  | class name of the underlying Perl RDF library that will be used by | 
| 88 |  |  |  |  |  |  | this instance of the Helper. L<RDF::Trine> is the default, but | 
| 89 |  |  |  |  |  |  | C<RDF::Redland> is retained as an option for historical reasons, but | 
| 90 |  |  |  |  |  |  | may be removed in the future. | 
| 91 |  |  |  |  |  |  |  | 
| 92 |  |  |  |  |  |  | =head2 Model | 
| 93 |  |  |  |  |  |  |  | 
| 94 |  |  |  |  |  |  | The C<Model> option expects a blessed instance object of the RDF model | 
| 95 |  |  |  |  |  |  | that will be operated on with this instance of the Helper. Obviously, | 
| 96 |  |  |  |  |  |  | the type of object passed should correspond to the L<BaseInterface> | 
| 97 |  |  |  |  |  |  | used (L<RDF::Trine::Model> for a BaseInterface of L<RDF::Trine>, | 
| 98 |  |  |  |  |  |  | etc.). If this option is omitted, a new, in-memory model will be | 
| 99 |  |  |  |  |  |  | created. | 
| 100 |  |  |  |  |  |  |  | 
| 101 |  |  |  |  |  |  | =head2 namespaces | 
| 102 |  |  |  |  |  |  |  | 
| 103 |  |  |  |  |  |  | The C<namespaces> option expects a hash reference of prefix/value | 
| 104 |  |  |  |  |  |  | pairs for the namespaces that will be used with this instance of the | 
| 105 |  |  |  |  |  |  | Helper. The special '#default' prefix is reserved for setting the | 
| 106 |  |  |  |  |  |  | default namespace. | 
| 107 |  |  |  |  |  |  |  | 
| 108 |  |  |  |  |  |  | For convenience, the L<RDF::Helper::Constants> class will export a | 
| 109 |  |  |  |  |  |  | number of useful constants that can be used to set the namespaces for | 
| 110 |  |  |  |  |  |  | common grammars: | 
| 111 |  |  |  |  |  |  |  | 
| 112 |  |  |  |  |  |  | use RDF::Helper; | 
| 113 |  |  |  |  |  |  | use RDF::Helper::Constants qw(:rdf :rss1 :foaf); | 
| 114 |  |  |  |  |  |  |  | 
| 115 |  |  |  |  |  |  | my $rdf = RDF::Helper->new( | 
| 116 |  |  |  |  |  |  | BaseInterface => 'RDF::Trine', | 
| 117 |  |  |  |  |  |  | namespaces => { | 
| 118 |  |  |  |  |  |  | rdf => RDF_NS, | 
| 119 |  |  |  |  |  |  | rss => RSS1_NS, | 
| 120 |  |  |  |  |  |  | foaf => FOAF_NS | 
| 121 |  |  |  |  |  |  | }, | 
| 122 |  |  |  |  |  |  | ExpandQNames => 1 | 
| 123 |  |  |  |  |  |  | ); | 
| 124 |  |  |  |  |  |  |  | 
| 125 |  |  |  |  |  |  | =head2 ExpandQNames | 
| 126 |  |  |  |  |  |  |  | 
| 127 |  |  |  |  |  |  | Setting a non-zero value for the C<ExpandQNames> option configures the | 
| 128 |  |  |  |  |  |  | current instance of the Helper to allow for qualified URIs to be used | 
| 129 |  |  |  |  |  |  | in the arguments to many of the Helper's convenience methods. For | 
| 130 |  |  |  |  |  |  | example, given the L<namespaces> option for the previous example, with | 
| 131 |  |  |  |  |  |  | C<ExpandQNames> turned on, the following will work as expected. | 
| 132 |  |  |  |  |  |  |  | 
| 133 |  |  |  |  |  |  | $rdf->assert_resource( $uri, 'rdf:type', 'foaf:Person' ); | 
| 134 |  |  |  |  |  |  |  | 
| 135 |  |  |  |  |  |  | With C<ExpandQNames> turned off, you would have to pass the full URI | 
| 136 |  |  |  |  |  |  | for both the C<rdf:type> predicate, and the C<foaf:Person> object to | 
| 137 |  |  |  |  |  |  | achieve the same result. | 
| 138 |  |  |  |  |  |  |  | 
| 139 |  |  |  |  |  |  | =head2 base_uri | 
| 140 |  |  |  |  |  |  |  | 
| 141 |  |  |  |  |  |  | If specified, this option sets what the base URI will be when working | 
| 142 |  |  |  |  |  |  | with so called abbreviated URIs, like C<#me>.  If you do not specify | 
| 143 |  |  |  |  |  |  | an explicit base_uri option, then one will be created automatically | 
| 144 |  |  |  |  |  |  | for you.  See | 
| 145 |  |  |  |  |  |  | L<http://www.w3.org/TR/rdf-syntax-grammar/#section-Syntax-ID-xml-base> | 
| 146 |  |  |  |  |  |  | for more information on abbreviated URIs. | 
| 147 |  |  |  |  |  |  |  | 
| 148 |  |  |  |  |  |  | =head1 METHODS | 
| 149 |  |  |  |  |  |  |  | 
| 150 |  |  |  |  |  |  | =head2 new_resource | 
| 151 |  |  |  |  |  |  |  | 
| 152 |  |  |  |  |  |  | $res = $rdf->new_resource($uri) | 
| 153 |  |  |  |  |  |  |  | 
| 154 |  |  |  |  |  |  | Creates and returns a new resource object that represents the supplied | 
| 155 |  |  |  |  |  |  | URI.  In many cases this is not necessary as the methods available in | 
| 156 |  |  |  |  |  |  | L<RDF::Helper> will automatically convert a string URI to the | 
| 157 |  |  |  |  |  |  | appropriate object type in the back-end RDF implementation. | 
| 158 |  |  |  |  |  |  |  | 
| 159 |  |  |  |  |  |  | =head2 new_literal | 
| 160 |  |  |  |  |  |  |  | 
| 161 |  |  |  |  |  |  | $lit = $rdf->new_literal($text) | 
| 162 |  |  |  |  |  |  | $lit = $rdf->new_literal($text, $lang) | 
| 163 |  |  |  |  |  |  | $lit = $rdf->new_literal($text, $lang, $type) | 
| 164 |  |  |  |  |  |  |  | 
| 165 |  |  |  |  |  |  | Creates and returns a new literal text object that represents the | 
| 166 |  |  |  |  |  |  | supplied string.  In many cases this is not necessary as the methods | 
| 167 |  |  |  |  |  |  | available in L<RDF::Helper> will automatically convert the value to | 
| 168 |  |  |  |  |  |  | the appropriate object type in the back-end RDF implementation. | 
| 169 |  |  |  |  |  |  |  | 
| 170 |  |  |  |  |  |  | When it is necessary to explicitly create a literal object is when you | 
| 171 |  |  |  |  |  |  | want to specify the language or datatype of the text string.  The | 
| 172 |  |  |  |  |  |  | datatype argument expects a Resource object or a string URI. | 
| 173 |  |  |  |  |  |  |  | 
| 174 |  |  |  |  |  |  | =head2 new_bnode | 
| 175 |  |  |  |  |  |  |  | 
| 176 |  |  |  |  |  |  | $bnode = $rdf->new_bnode() | 
| 177 |  |  |  |  |  |  |  | 
| 178 |  |  |  |  |  |  | Creates and returns a new "Blank Node" that can be used as the subject | 
| 179 |  |  |  |  |  |  | or object in a new statement. | 
| 180 |  |  |  |  |  |  |  | 
| 181 |  |  |  |  |  |  | =head2 assert_literal | 
| 182 |  |  |  |  |  |  |  | 
| 183 |  |  |  |  |  |  | $rdf->assert_literal($subject, $predicate, $object) | 
| 184 |  |  |  |  |  |  |  | 
| 185 |  |  |  |  |  |  | This method will assert, or "insert", a new statement whose value, or "object", is a literal. | 
| 186 |  |  |  |  |  |  |  | 
| 187 |  |  |  |  |  |  | Both the subject and predicate arguments can either take a URI object, a URI string. | 
| 188 |  |  |  |  |  |  |  | 
| 189 |  |  |  |  |  |  | Additionally, if you used the L</ExpandQNames> option when creating | 
| 190 |  |  |  |  |  |  | the L<RDF::Helper> object, you can use QNames in place of the subject | 
| 191 |  |  |  |  |  |  | and predicate values.  For example, "rdf:type" would be properly | 
| 192 |  |  |  |  |  |  | expanded to its full URI value. | 
| 193 |  |  |  |  |  |  |  | 
| 194 |  |  |  |  |  |  | =head2 assert_resource | 
| 195 |  |  |  |  |  |  |  | 
| 196 |  |  |  |  |  |  | $rdf->assert_resource($subject, $predicate, $object) | 
| 197 |  |  |  |  |  |  |  | 
| 198 |  |  |  |  |  |  | This method will assert, or "insert", a new statement whose value, or "object", is a resource. | 
| 199 |  |  |  |  |  |  |  | 
| 200 |  |  |  |  |  |  | The subject, predicate and object arguments can either take a URI object, or a URI string. | 
| 201 |  |  |  |  |  |  |  | 
| 202 |  |  |  |  |  |  | Like L</assert_literal>, if you used the L</ExpandQNames> option when | 
| 203 |  |  |  |  |  |  | creating the L<RDF::Helper> object, you can use QNames in place of any | 
| 204 |  |  |  |  |  |  | of the arguments to this method.  For example, "rdf:type" would be | 
| 205 |  |  |  |  |  |  | properly expanded to its full URI value. | 
| 206 |  |  |  |  |  |  |  | 
| 207 |  |  |  |  |  |  | =head2 remove_statements | 
| 208 |  |  |  |  |  |  |  | 
| 209 |  |  |  |  |  |  | $count = $rdf->remove_statements() | 
| 210 |  |  |  |  |  |  | $count = $rdf->remove_statements($subject) | 
| 211 |  |  |  |  |  |  | $count = $rdf->remove_statements($subject, $predicate) | 
| 212 |  |  |  |  |  |  | $count = $rdf->remove_statements($subject, $predicate, $object) | 
| 213 |  |  |  |  |  |  |  | 
| 214 |  |  |  |  |  |  | This method is used to remove statements from the back-end RDF model | 
| 215 |  |  |  |  |  |  | whose constituent parts match the supplied arguments.  Any of the | 
| 216 |  |  |  |  |  |  | arguments can be omitted, or passed in as C<undef>, which means any | 
| 217 |  |  |  |  |  |  | value for that triple part will be matched and removed. | 
| 218 |  |  |  |  |  |  |  | 
| 219 |  |  |  |  |  |  | For instance, if values for the predicate and object are given, but | 
| 220 |  |  |  |  |  |  | the subject is left as "undef", then any statement will be removed | 
| 221 |  |  |  |  |  |  | that matches the supplied predicate and object.  If no arguments are | 
| 222 |  |  |  |  |  |  | supplied, then all statements in the RDF model will be removed. | 
| 223 |  |  |  |  |  |  |  | 
| 224 |  |  |  |  |  |  | The number of statements that were removed in this operation is returned. | 
| 225 |  |  |  |  |  |  |  | 
| 226 |  |  |  |  |  |  | =head2 update_node | 
| 227 |  |  |  |  |  |  |  | 
| 228 |  |  |  |  |  |  | $rdf->update_node($subject, $predicate, $object, $new_object) | 
| 229 |  |  |  |  |  |  |  | 
| 230 |  |  |  |  |  |  | This method is used when you wish to change the object value of an | 
| 231 |  |  |  |  |  |  | existing statement.  This method acts as an intelligent wrapper around | 
| 232 |  |  |  |  |  |  | the L</update_literal> and L</update_resource> methods, and will try | 
| 233 |  |  |  |  |  |  | to auto-detect what type of object is currently in the datastore, and | 
| 234 |  |  |  |  |  |  | will try to set the new value accordingly.  If it can't make that | 
| 235 |  |  |  |  |  |  | determination it will fallback to L</update_literal>. | 
| 236 |  |  |  |  |  |  |  | 
| 237 |  |  |  |  |  |  | Keep in mind that if you need to change a statement from having a | 
| 238 |  |  |  |  |  |  | Resource to a Literal, or vice versa, as its object, then you may need | 
| 239 |  |  |  |  |  |  | to invoke the appropriate update method directly. | 
| 240 |  |  |  |  |  |  |  | 
| 241 |  |  |  |  |  |  | =head2 update_literal | 
| 242 |  |  |  |  |  |  |  | 
| 243 |  |  |  |  |  |  | $rdf->update_literal($subject, $predicate, $object, $new_object) | 
| 244 |  |  |  |  |  |  |  | 
| 245 |  |  |  |  |  |  | Updates an existing statement's literal object value to a new one. | 
| 246 |  |  |  |  |  |  | For more information on the operation of this method, see | 
| 247 |  |  |  |  |  |  | L</update_node>. | 
| 248 |  |  |  |  |  |  |  | 
| 249 |  |  |  |  |  |  | =head2 update_resource | 
| 250 |  |  |  |  |  |  |  | 
| 251 |  |  |  |  |  |  | $rdf->update_resource($subject, $predicate, $object, $new_object) | 
| 252 |  |  |  |  |  |  |  | 
| 253 |  |  |  |  |  |  | Updates an existing statement's resource object value to a new one. | 
| 254 |  |  |  |  |  |  | For more information on the operation of this method, see | 
| 255 |  |  |  |  |  |  | L</update_node>. | 
| 256 |  |  |  |  |  |  |  | 
| 257 |  |  |  |  |  |  | =head2 get_statements | 
| 258 |  |  |  |  |  |  |  | 
| 259 |  |  |  |  |  |  | @stmts = $rdf->get_statements() | 
| 260 |  |  |  |  |  |  | @stmts = $rdf->get_statements($subject) | 
| 261 |  |  |  |  |  |  | @stmts = $rdf->get_statements($subject, $predicate) | 
| 262 |  |  |  |  |  |  | @stmts = $rdf->get_statements($subject, $predicate, $object) | 
| 263 |  |  |  |  |  |  |  | 
| 264 |  |  |  |  |  |  | This method is used to fetch and return statements from the back-end | 
| 265 |  |  |  |  |  |  | RDF model whose constituent parts match the supplied arguments.  Any | 
| 266 |  |  |  |  |  |  | of the arguments can be omitted, or passed in as C<undef>, which means | 
| 267 |  |  |  |  |  |  | any value for that triple part will be matched and returned. | 
| 268 |  |  |  |  |  |  |  | 
| 269 |  |  |  |  |  |  | For instance, if values for the predicate and object are given, but | 
| 270 |  |  |  |  |  |  | the subject is left as "undef", then any statement will be returned | 
| 271 |  |  |  |  |  |  | that matches the supplied predicate and object.  If no arguments are | 
| 272 |  |  |  |  |  |  | supplied, then all statements in the RDF model will be returned. | 
| 273 |  |  |  |  |  |  |  | 
| 274 |  |  |  |  |  |  | Depending on which back-end type being used, different object types | 
| 275 |  |  |  |  |  |  | will be returned.  For instance, if L<RDF::Trine> is used, then all | 
| 276 |  |  |  |  |  |  | the returned objects will be of type L<RDF::Trine::Statement>. | 
| 277 |  |  |  |  |  |  |  | 
| 278 |  |  |  |  |  |  | =head2 get_triples | 
| 279 |  |  |  |  |  |  |  | 
| 280 |  |  |  |  |  |  | @stmts = $rdf->get_triples() | 
| 281 |  |  |  |  |  |  | @stmts = $rdf->get_triples($subject) | 
| 282 |  |  |  |  |  |  | @stmts = $rdf->get_triples($subject, $predicate) | 
| 283 |  |  |  |  |  |  | @stmts = $rdf->get_triples($subject, $predicate, $object) | 
| 284 |  |  |  |  |  |  |  | 
| 285 |  |  |  |  |  |  | This method functions in the same way as L</get_statements>, except | 
| 286 |  |  |  |  |  |  | instead of the statements being represented as objects, the | 
| 287 |  |  |  |  |  |  | statement's values are broken down into plain strings and returned as | 
| 288 |  |  |  |  |  |  | an anonymous array.  Therefore, an individual element of the returned | 
| 289 |  |  |  |  |  |  | array may look like this: | 
| 290 |  |  |  |  |  |  |  | 
| 291 |  |  |  |  |  |  | [ "http://some/statement/uri", "http://some/predicate/uri", "some object value" ] | 
| 292 |  |  |  |  |  |  |  | 
| 293 |  |  |  |  |  |  |  | 
| 294 |  |  |  |  |  |  | =head2 resourcelist | 
| 295 |  |  |  |  |  |  |  | 
| 296 |  |  |  |  |  |  | @subjects = $rdf->resourcelist() | 
| 297 |  |  |  |  |  |  | @subjects = $rdf->resourcelist($predicate) | 
| 298 |  |  |  |  |  |  | @subjects = $rdf->resourcelist($predicate, $object) | 
| 299 |  |  |  |  |  |  |  | 
| 300 |  |  |  |  |  |  | This method returns the unique list of subject URIs from within the | 
| 301 |  |  |  |  |  |  | RDF model that optionally match the predicate and/or object arguments. | 
| 302 |  |  |  |  |  |  | Like in L</get_statements>, either or all of the arguments to this | 
| 303 |  |  |  |  |  |  | method can be C<undef>. | 
| 304 |  |  |  |  |  |  |  | 
| 305 |  |  |  |  |  |  | =head2 exists | 
| 306 |  |  |  |  |  |  |  | 
| 307 |  |  |  |  |  |  | $result = $rdf->exists() | 
| 308 |  |  |  |  |  |  | $result = $rdf->exists($subject) | 
| 309 |  |  |  |  |  |  | $result = $rdf->exists($subject, $predicate) | 
| 310 |  |  |  |  |  |  | $result = $rdf->exists($subject, $predicate, $object) | 
| 311 |  |  |  |  |  |  |  | 
| 312 |  |  |  |  |  |  | Returns a boolean value indicating if any statements exist in the RDF | 
| 313 |  |  |  |  |  |  | model that matches the supplied arguments. | 
| 314 |  |  |  |  |  |  |  | 
| 315 |  |  |  |  |  |  | =head2 count | 
| 316 |  |  |  |  |  |  |  | 
| 317 |  |  |  |  |  |  | $count = $rdf->count() | 
| 318 |  |  |  |  |  |  | $count = $rdf->count($subject) | 
| 319 |  |  |  |  |  |  | $count = $rdf->count($subject, $predicate) | 
| 320 |  |  |  |  |  |  | $count = $rdf->count($subject, $predicate, $object) | 
| 321 |  |  |  |  |  |  |  | 
| 322 |  |  |  |  |  |  | Returns the number of statements that exist in the RDF model that | 
| 323 |  |  |  |  |  |  | matches the supplied arguments.  If no arguments are supplied, it | 
| 324 |  |  |  |  |  |  | returns the total number of statements in the model are returned. | 
| 325 |  |  |  |  |  |  |  | 
| 326 |  |  |  |  |  |  | =head2 include_model | 
| 327 |  |  |  |  |  |  |  | 
| 328 |  |  |  |  |  |  | $rdf->include_model($model) | 
| 329 |  |  |  |  |  |  |  | 
| 330 |  |  |  |  |  |  | Include the contents of another, already opened, RDF model into the | 
| 331 |  |  |  |  |  |  | current model. | 
| 332 |  |  |  |  |  |  |  | 
| 333 |  |  |  |  |  |  | =head2 include_rdfxml | 
| 334 |  |  |  |  |  |  |  | 
| 335 |  |  |  |  |  |  | $rdf->include_rdfxml(xml => $xml_string) | 
| 336 |  |  |  |  |  |  | $rdf->include_rdfxml(filename => $file_path) | 
| 337 |  |  |  |  |  |  |  | 
| 338 |  |  |  |  |  |  | This method will import the RDF statements contained in an RDF/XML | 
| 339 |  |  |  |  |  |  | document, either from a file or a string, into the current RDF model. | 
| 340 |  |  |  |  |  |  | If a L</base_uri> was specified in the L<RDF::Helper> | 
| 341 |  |  |  |  |  |  | L<constructor|/"CONSTRUCTOR OPTIONS">, then that URI is used as the | 
| 342 |  |  |  |  |  |  | base for when the supplied RDF/XML is imported.  For instance, if the | 
| 343 |  |  |  |  |  |  | hash notation is used to reference an RDF node | 
| 344 |  |  |  |  |  |  | (e.g. C<E<lt>rdf:Description rdf:about="#dahut"/E<gt>>), the | 
| 345 |  |  |  |  |  |  | L</base_uri> will be prepended to the C<rdf:about> URI. | 
| 346 |  |  |  |  |  |  |  | 
| 347 |  |  |  |  |  |  | =head2 serialize | 
| 348 |  |  |  |  |  |  |  | 
| 349 |  |  |  |  |  |  | $string = $rdf->serialize() | 
| 350 |  |  |  |  |  |  | $string = $rdf->serialize(format => 'ntriple') | 
| 351 |  |  |  |  |  |  | $rdf->serialize(filename => 'out.rdf') | 
| 352 |  |  |  |  |  |  | $rdf->serialize(filename => 'out.n3', format => 'ntriple') | 
| 353 |  |  |  |  |  |  |  | 
| 354 |  |  |  |  |  |  | Serializes the back-end RDF model to a string, using the specified | 
| 355 |  |  |  |  |  |  | format type, or defaulting to abbreviated RDF/XML.  The serialization | 
| 356 |  |  |  |  |  |  | types depends on which RDF back-end is in use.  The L<RDF::Trine> | 
| 357 |  |  |  |  |  |  | support within L<RDF::Helper> supports the following serialization | 
| 358 |  |  |  |  |  |  | types: | 
| 359 |  |  |  |  |  |  |  | 
| 360 |  |  |  |  |  |  | =over 4 | 
| 361 |  |  |  |  |  |  |  | 
| 362 |  |  |  |  |  |  | =item * ntriples | 
| 363 |  |  |  |  |  |  | =item * nquads | 
| 364 |  |  |  |  |  |  | =item * rdfxml | 
| 365 |  |  |  |  |  |  | =item * rdfjson | 
| 366 |  |  |  |  |  |  | =item * ntriples-canonical | 
| 367 |  |  |  |  |  |  | =item * turtle | 
| 368 |  |  |  |  |  |  |  | 
| 369 |  |  |  |  |  |  | =back | 
| 370 |  |  |  |  |  |  |  | 
| 371 |  |  |  |  |  |  | =head2 new_query | 
| 372 |  |  |  |  |  |  |  | 
| 373 |  |  |  |  |  |  | $query_object = $obj->new_query( $query, [$base_uri, $lang_uri, $lang_name] ); | 
| 374 |  |  |  |  |  |  |  | 
| 375 |  |  |  |  |  |  | Returns an instance of the class defined by the L<QueryInterface> | 
| 376 |  |  |  |  |  |  | argument passed to the constructor (or the default class for the base | 
| 377 |  |  |  |  |  |  | interface if none is explicityly set) that can be used to query the | 
| 378 |  |  |  |  |  |  | currently selected model. | 
| 379 |  |  |  |  |  |  |  | 
| 380 |  |  |  |  |  |  | =head1 PERLISH CONVENIENCE METHODS | 
| 381 |  |  |  |  |  |  |  | 
| 382 |  |  |  |  |  |  | =head2 property_hash | 
| 383 |  |  |  |  |  |  |  | 
| 384 |  |  |  |  |  |  | $hash_ref = $rdf->property_hash($subject) | 
| 385 |  |  |  |  |  |  |  | 
| 386 |  |  |  |  |  |  | For instances when you don't know what properties are bound to an RDF | 
| 387 |  |  |  |  |  |  | node, or when it is too cumbersome to iterate over the results of a | 
| 388 |  |  |  |  |  |  | L</get_triples> method call, this method can be used to return all the | 
| 389 |  |  |  |  |  |  | properties and values bound to an RDF node as a hash reference.  The | 
| 390 |  |  |  |  |  |  | key name will be the predicate URI (QName-encoded if a matching | 
| 391 |  |  |  |  |  |  | namespace is found), and the value will be the object value of the | 
| 392 |  |  |  |  |  |  | given predicate.  Multiple object values for the same predicate URI | 
| 393 |  |  |  |  |  |  | will be returned as an array reference. | 
| 394 |  |  |  |  |  |  |  | 
| 395 |  |  |  |  |  |  | It is important to note that this is a read-only dump from the RDF | 
| 396 |  |  |  |  |  |  | model.  For a "live" alternative to this, see L</tied_property_hash>. | 
| 397 |  |  |  |  |  |  |  | 
| 398 |  |  |  |  |  |  | =head2 deep_prophash | 
| 399 |  |  |  |  |  |  |  | 
| 400 |  |  |  |  |  |  | $hashref = $rdf->deep_prophash($subject) | 
| 401 |  |  |  |  |  |  |  | 
| 402 |  |  |  |  |  |  | This method is similar to the L</property_hash> method, except this | 
| 403 |  |  |  |  |  |  | method will recurse over children nodes, in effect creating a nested | 
| 404 |  |  |  |  |  |  | hashref datastructure representing a node and all of its associations. | 
| 405 |  |  |  |  |  |  |  | 
| 406 |  |  |  |  |  |  | B<Note:> This method performs no checks to ensure that it doesn't get | 
| 407 |  |  |  |  |  |  | stuck in a deep recursion loop, so be careful when using this. | 
| 408 |  |  |  |  |  |  |  | 
| 409 |  |  |  |  |  |  | =head2 tied_property_hash | 
| 410 |  |  |  |  |  |  |  | 
| 411 |  |  |  |  |  |  | $hash_ref = $rdf->tied_property_hash($subject) | 
| 412 |  |  |  |  |  |  | $hash_ref = $rdf->tied_property_hash($subject, \%options) | 
| 413 |  |  |  |  |  |  |  | 
| 414 |  |  |  |  |  |  | Like L</property_hash>, this method returns a hash reference | 
| 415 |  |  |  |  |  |  | containing the predicates and objects bound to the given subject URI. | 
| 416 |  |  |  |  |  |  | This method differs however in that any changes to the hash will | 
| 417 |  |  |  |  |  |  | immediately be represented in the RDF model.  So if a new value is | 
| 418 |  |  |  |  |  |  | assigned to an existing hash key, if a new key is added, or a key is | 
| 419 |  |  |  |  |  |  | deleted from the hash, that will transparently be represented as | 
| 420 |  |  |  |  |  |  | updates, assertions or removal operations against the model. | 
| 421 |  |  |  |  |  |  |  | 
| 422 |  |  |  |  |  |  | Optionally a hash can be passed to this method when tieing a property | 
| 423 |  |  |  |  |  |  | hash to give additional instructions to the | 
| 424 |  |  |  |  |  |  | L<RDF::Helper::RDFRedland::TiedPropertyHash> object.  Please see the | 
| 425 |  |  |  |  |  |  | documentation in that class for more information. | 
| 426 |  |  |  |  |  |  |  | 
| 427 |  |  |  |  |  |  | =head2 get_object | 
| 428 |  |  |  |  |  |  |  | 
| 429 |  |  |  |  |  |  | $obj = $rdf->get_object($subject, %options) | 
| 430 |  |  |  |  |  |  | $obj = $rdf->get_object($subject, \%options) | 
| 431 |  |  |  |  |  |  |  | 
| 432 |  |  |  |  |  |  | Returns an instance of L<RDF::Helper::Object> bound to the given | 
| 433 |  |  |  |  |  |  | subject URI.  This exposes that RDF node as an object-oriented class | 
| 434 |  |  |  |  |  |  | interface, allowing you to interact with and change that RDF node and | 
| 435 |  |  |  |  |  |  | its properties using standard Perl-like accessor methods.  For more | 
| 436 |  |  |  |  |  |  | information on the use of this method, please see | 
| 437 |  |  |  |  |  |  | L<RDF::Helper::Object>. | 
| 438 |  |  |  |  |  |  |  | 
| 439 |  |  |  |  |  |  |  | 
| 440 |  |  |  |  |  |  | =head2 arrayref2rdf | 
| 441 |  |  |  |  |  |  |  | 
| 442 |  |  |  |  |  |  | $obj->arrayref2rdf(\@list, $subject, $predicate); | 
| 443 |  |  |  |  |  |  | $obj->arrayref2rdf(\@list, undef, $predicate); | 
| 444 |  |  |  |  |  |  |  | 
| 445 |  |  |  |  |  |  | Asserts a list of triples with the the subject C<$subject>, predicate | 
| 446 |  |  |  |  |  |  | C<$predicate> and object(s) contained in C<\@list>. It the subject is | 
| 447 |  |  |  |  |  |  | undefined, a new blank node will be used. | 
| 448 |  |  |  |  |  |  |  | 
| 449 |  |  |  |  |  |  | =head2 hashref2rdf | 
| 450 |  |  |  |  |  |  |  | 
| 451 |  |  |  |  |  |  | $object->hashref2rdf( \%hash ); | 
| 452 |  |  |  |  |  |  | $object->hashref2rdf( \%hash, $subject ); | 
| 453 |  |  |  |  |  |  |  | 
| 454 |  |  |  |  |  |  | This method is the reverse of L</property_hash> and L</deep_prophash> | 
| 455 |  |  |  |  |  |  | in that it accpets a Perl hash reference and unwinds it into a setions | 
| 456 |  |  |  |  |  |  | of triples in the RDF store. If the C<$subject> is missing or | 
| 457 |  |  |  |  |  |  | undefined a new blank node will be used. | 
| 458 |  |  |  |  |  |  |  | 
| 459 |  |  |  |  |  |  |  | 
| 460 |  |  |  |  |  |  | =head2 hashlist_from_statement | 
| 461 |  |  |  |  |  |  |  | 
| 462 |  |  |  |  |  |  | @list = $rdf->hashlist_from_statement() | 
| 463 |  |  |  |  |  |  | @list = $rdf->hashlist_from_statement($subject) | 
| 464 |  |  |  |  |  |  | @list = $rdf->hashlist_from_statement($subject, $predicate) | 
| 465 |  |  |  |  |  |  | @list = $rdf->hashlist_from_statement($subject, $predicate, $object) | 
| 466 |  |  |  |  |  |  |  | 
| 467 |  |  |  |  |  |  | Accepting a sparsely populated triple pattern as its argument, this | 
| 468 |  |  |  |  |  |  | methods return a list of subject/hash reference pairs for all | 
| 469 |  |  |  |  |  |  | statements that match the pattern. Each member in the list will have | 
| 470 |  |  |  |  |  |  | the following structure: | 
| 471 |  |  |  |  |  |  |  | 
| 472 |  |  |  |  |  |  | [ $subject, $hash_reference ] | 
| 473 |  |  |  |  |  |  |  | 
| 474 |  |  |  |  |  |  | =head1 ACCESSOR METHODS | 
| 475 |  |  |  |  |  |  |  | 
| 476 |  |  |  |  |  |  | =head2 model | 
| 477 |  |  |  |  |  |  |  | 
| 478 |  |  |  |  |  |  | $model = $rdf->model() | 
| 479 |  |  |  |  |  |  | $rdf->model($new_model) | 
| 480 |  |  |  |  |  |  |  | 
| 481 |  |  |  |  |  |  | An accessor method that can be used to retrieve or set the back-end | 
| 482 |  |  |  |  |  |  | RDF model that this L<RDF::Helper> instance uses. | 
| 483 |  |  |  |  |  |  |  | 
| 484 |  |  |  |  |  |  | =head2 query_interface | 
| 485 |  |  |  |  |  |  |  | 
| 486 |  |  |  |  |  |  | $iface = $rdf->query_interface() | 
| 487 |  |  |  |  |  |  | $rdf->query_interface($iface) | 
| 488 |  |  |  |  |  |  |  | 
| 489 |  |  |  |  |  |  | Accessor method that is used to either set or retrieve the current | 
| 490 |  |  |  |  |  |  | class name that should be used for composing and performing queries. | 
| 491 |  |  |  |  |  |  |  | 
| 492 |  |  |  |  |  |  | =head1 SEE ALSO | 
| 493 |  |  |  |  |  |  |  | 
| 494 |  |  |  |  |  |  | L<RDF::Helper::Object>; L<RDF::Trine>, L<RDF::Redland>; L<RDF::Query> | 
| 495 |  |  |  |  |  |  |  | 
| 496 |  |  |  |  |  |  |  | 
| 497 |  |  |  |  |  |  | =head1 SUPPORT | 
| 498 |  |  |  |  |  |  |  | 
| 499 |  |  |  |  |  |  | There is a mailing list at L<http://lists.perlrdf.org/listinfo/dev>. | 
| 500 |  |  |  |  |  |  |  | 
| 501 |  |  |  |  |  |  | A bunch of people are also hanging out in C<#perlrdf> on C<irc.perl.org>. | 
| 502 |  |  |  |  |  |  |  | 
| 503 |  |  |  |  |  |  |  | 
| 504 |  |  |  |  |  |  | =head1 AUTHOR | 
| 505 |  |  |  |  |  |  |  | 
| 506 |  |  |  |  |  |  | Kip Hampton, E<lt>khampton@totalcinema.com<gt> | 
| 507 |  |  |  |  |  |  |  | 
| 508 |  |  |  |  |  |  | =head1 COPYRIGHT AND LICENSE | 
| 509 |  |  |  |  |  |  |  | 
| 510 |  |  |  |  |  |  | Copyright 2004-2011 by Kip Hampton, Chris Prather, Mike Nachbaur | 
| 511 |  |  |  |  |  |  |  | 
| 512 |  |  |  |  |  |  | This library is free software; you can redistribute it and/or modify | 
| 513 |  |  |  |  |  |  | it under the same terms as Perl itself. | 
| 514 |  |  |  |  |  |  |  | 
| 515 |  |  |  |  |  |  | =cut |