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