ld4l-open_annotation_rdf 0.0.9 → 0.0.10
Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dead51a1f44d03f97a677dbefc02627755cde61f
|
4
|
+
data.tar.gz: c112a5480577c43081b804fedd85ee2ec26da318
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6e0930ad32df385a13d6c6ea9b70c3b2793dcabeefa5d32bd51de3e11d72aeecce613eb5488cd2dd3669f8fa555cc1e683ff2c6ee08b80db9d07518d6cfbb7dc
|
7
|
+
data.tar.gz: 5aa4a659b04fd50778cde628597470700bb75c9bb90a58535b3c81f827811c8b85c6b769ed971f785a1c28206336fe9d2513c0ad4aea62a3c60ed71b25930dc8
|
@@ -23,7 +23,9 @@ module LD4L
|
|
23
23
|
|
24
24
|
# get motivatedBy
|
25
25
|
m = a.get_values(:motivatedBy)
|
26
|
-
|
26
|
+
# TODO: Should m's class be validated? I've seen it be RDF::Vocabulary::Term and RDF::URI. For now, removing the validation.
|
27
|
+
return a unless m.kind_of?(Array) && m.size > 0
|
28
|
+
# return a unless m.kind_of?(Array) && m.size > 0 && (m.first.kind_of?(RDF::Vocabulary::Term) || m.first.kind_of?(RDF::URI)
|
27
29
|
|
28
30
|
# motivatedBy is set
|
29
31
|
m_uri = m.first
|
@@ -4,10 +4,14 @@ module LD4L
|
|
4
4
|
|
5
5
|
@localname_prefix = "sta"
|
6
6
|
|
7
|
+
property :hasBody, :predicate => RDFVocabularies::OA.hasBody, :class_name => LD4L::OpenAnnotationRDF::SemanticTagBody
|
8
|
+
|
9
|
+
|
7
10
|
# USAGE: Use setTerm to set the hasBody property to be the URI of the controlled vocabulary term that
|
8
11
|
# is the annotation.
|
9
12
|
|
10
13
|
# TODO: Should a semantic tag be destroyed when the last annotation referencing the term is destroyed?
|
14
|
+
# TODO: What if other triples have been attached beyond the type?
|
11
15
|
|
12
16
|
##
|
13
17
|
# Set the hasBody property to the URI of the controlled vocabulary term that is the annotation and
|
@@ -173,79 +173,285 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
173
173
|
LD4L::FoafRDF::Person.new('p4')
|
174
174
|
end
|
175
175
|
|
176
|
-
|
177
|
-
|
178
|
-
|
179
|
-
|
180
|
-
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
|
185
|
-
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
|
198
|
-
|
199
|
-
|
200
|
-
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
208
|
-
|
209
|
-
|
210
|
-
|
211
|
-
|
212
|
-
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
|
221
|
-
|
222
|
-
|
223
|
-
|
224
|
-
|
225
|
-
|
226
|
-
|
227
|
-
|
228
|
-
|
229
|
-
|
230
|
-
|
231
|
-
|
232
|
-
|
233
|
-
|
234
|
-
|
235
|
-
|
236
|
-
|
237
|
-
|
238
|
-
|
239
|
-
|
240
|
-
|
241
|
-
|
242
|
-
|
243
|
-
|
244
|
-
|
245
|
-
|
246
|
-
|
247
|
-
|
248
|
-
|
176
|
+
context "when annotation body is persisted" do
|
177
|
+
it "should resume an instance of CommentAnnotation and its body" do
|
178
|
+
a_time = Time::now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")
|
179
|
+
ca = LD4L::OpenAnnotationRDF::CommentAnnotation.new('ca_1')
|
180
|
+
ca.hasTarget = RDF::URI("http://example.org/bibref/br3")
|
181
|
+
ca.setComment("This is a comment.")
|
182
|
+
ca.annotatedBy = a_person
|
183
|
+
ca.annotatedAt = a_time
|
184
|
+
ca.persist!
|
185
|
+
expect(ca).to be_persisted
|
186
|
+
uri = ca.rdf_subject
|
187
|
+
|
188
|
+
a = LD4L::OpenAnnotationRDF::Annotation.resume(uri)
|
189
|
+
expect(a).to be_a_kind_of(LD4L::OpenAnnotationRDF::CommentAnnotation)
|
190
|
+
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
191
|
+
expect(a.annotatedBy.first).to eq a_person
|
192
|
+
expect(a.annotatedAt.first).to eq a_time
|
193
|
+
expect(a.motivatedBy.first).to eq RDFVocabularies::OA.commenting
|
194
|
+
|
195
|
+
b = a.getBody
|
196
|
+
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::CommentBody)
|
197
|
+
expect(b.type).to include RDFVocabularies::DCTYPES.Text
|
198
|
+
expect(b.type).to include RDFVocabularies::CNT.ContentAsText
|
199
|
+
expect(b.content).to eq ["This is a comment."]
|
200
|
+
expect(b.format.first).to eq "text/plain"
|
201
|
+
end
|
202
|
+
|
203
|
+
it "should resume an instance of TagAnnotation and its body" do
|
204
|
+
a_time = Time::now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")
|
205
|
+
ta = LD4L::OpenAnnotationRDF::TagAnnotation.new('ta_2')
|
206
|
+
ta.hasTarget = RDF::URI("http://example.org/bibref/br3")
|
207
|
+
ta.setTag("good")
|
208
|
+
ta.annotatedBy = a_person
|
209
|
+
ta.annotatedAt = a_time
|
210
|
+
ta.persist!
|
211
|
+
expect(ta).to be_persisted
|
212
|
+
uri = ta.rdf_subject
|
213
|
+
|
214
|
+
a = LD4L::OpenAnnotationRDF::Annotation.resume(uri)
|
215
|
+
expect(a).to be_a_kind_of(LD4L::OpenAnnotationRDF::TagAnnotation)
|
216
|
+
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
217
|
+
expect(a.annotatedBy.first).to eq a_person
|
218
|
+
expect(a.annotatedAt.first).to eq a_time
|
219
|
+
expect(a.motivatedBy.first).to eq RDFVocabularies::OA.tagging
|
220
|
+
|
221
|
+
b = a.getBody
|
222
|
+
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::TagBody)
|
223
|
+
expect(b.type).to include RDFVocabularies::OA.Tag
|
224
|
+
expect(b.type).to include RDFVocabularies::CNT.ContentAsText
|
225
|
+
expect(b.tag).to eq ["good"]
|
226
|
+
end
|
227
|
+
|
228
|
+
it "should resume an instance of SemanticTagAnnotation and its body" do
|
229
|
+
a_time = Time::now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")
|
230
|
+
sta = LD4L::OpenAnnotationRDF::SemanticTagAnnotation.new('sta_3')
|
231
|
+
sta.hasTarget = RDF::URI("http://example.org/bibref/br3")
|
232
|
+
sta.setTerm('http://example.org/term/3')
|
233
|
+
sta.annotatedBy = a_person
|
234
|
+
sta.annotatedAt = a_time
|
235
|
+
sta.persist!
|
236
|
+
expect(sta).to be_persisted
|
237
|
+
uri = sta.rdf_subject
|
238
|
+
|
239
|
+
a = LD4L::OpenAnnotationRDF::Annotation.resume(uri)
|
240
|
+
expect(a).to be_a_kind_of(LD4L::OpenAnnotationRDF::SemanticTagAnnotation)
|
241
|
+
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
242
|
+
expect(a.annotatedBy.first).to eq a_person
|
243
|
+
expect(a.annotatedAt.first).to eq a_time
|
244
|
+
expect(a.motivatedBy.first).to eq RDFVocabularies::OA.tagging
|
245
|
+
|
246
|
+
b = a.getBody
|
247
|
+
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::SemanticTagBody)
|
248
|
+
expect(b.type).to include RDFVocabularies::OA.SemanticTag
|
249
|
+
expect(b.rdf_subject.to_s).to eq('http://example.org/term/3')
|
250
|
+
end
|
251
|
+
end
|
252
|
+
|
253
|
+
context "when annotation body is a blank node" do
|
254
|
+
it "should resume an instance of CommentAnnotation and a blank node body" do
|
255
|
+
a_time = Time::now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")
|
256
|
+
ca = LD4L::OpenAnnotationRDF::CommentAnnotation.new('ca_1')
|
257
|
+
ca.hasTarget = RDF::URI("http://example.org/bibref/br3")
|
258
|
+
|
259
|
+
cb = LD4L::OpenAnnotationRDF::CommentBody.new # create body as blank node
|
260
|
+
cb.content = "BLANK NODE COMMENT"
|
261
|
+
cb.format = "text/plain"
|
262
|
+
cb.persist!
|
263
|
+
expect(cb).to be_persisted
|
264
|
+
|
265
|
+
ca.hasBody = cb
|
266
|
+
ca.annotatedBy = a_person
|
267
|
+
ca.annotatedAt = a_time
|
268
|
+
ca.persist!
|
269
|
+
expect(ca).to be_persisted
|
270
|
+
uri = ca.rdf_subject
|
271
|
+
|
272
|
+
a = LD4L::OpenAnnotationRDF::Annotation.resume(uri)
|
273
|
+
expect(a).to be_a_kind_of(LD4L::OpenAnnotationRDF::CommentAnnotation)
|
274
|
+
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
275
|
+
expect(a.annotatedBy.first).to eq a_person
|
276
|
+
expect(a.annotatedAt.first).to eq a_time
|
277
|
+
expect(a.motivatedBy.first).to eq RDFVocabularies::OA.commenting
|
278
|
+
|
279
|
+
b = a.getBody
|
280
|
+
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::CommentBody)
|
281
|
+
expect(b.type).to include RDFVocabularies::DCTYPES.Text
|
282
|
+
expect(b.type).to include RDFVocabularies::CNT.ContentAsText
|
283
|
+
expect(b.content).to eq ["BLANK NODE COMMENT"]
|
284
|
+
expect(b.format.first).to eq "text/plain"
|
285
|
+
end
|
286
|
+
|
287
|
+
it "should resume an instance of TagAnnotation and a blank node body" do
|
288
|
+
a_time = Time::now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")
|
289
|
+
ta = LD4L::OpenAnnotationRDF::TagAnnotation.new('ta_4')
|
290
|
+
ta.hasTarget = RDF::URI("http://example.org/bibref/br3")
|
291
|
+
ta.annotatedBy = a_person
|
292
|
+
ta.annotatedAt = a_time
|
293
|
+
|
294
|
+
tb = LD4L::OpenAnnotationRDF::TagBody.new # create body as blank node
|
295
|
+
tb.tag = "BLANK_NODE_TAG"
|
296
|
+
tb.persist!
|
297
|
+
expect(tb).to be_persisted
|
298
|
+
|
299
|
+
ta.hasBody = tb
|
300
|
+
ta.persist!
|
301
|
+
expect(ta).to be_persisted
|
302
|
+
uri = ta.rdf_subject
|
303
|
+
|
304
|
+
a = LD4L::OpenAnnotationRDF::Annotation.resume(uri)
|
305
|
+
expect(a).to be_a_kind_of(LD4L::OpenAnnotationRDF::TagAnnotation)
|
306
|
+
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
307
|
+
expect(a.annotatedBy.first).to eq a_person
|
308
|
+
expect(a.annotatedAt.first).to eq a_time
|
309
|
+
expect(a.motivatedBy.first).to eq RDFVocabularies::OA.tagging
|
310
|
+
|
311
|
+
b = a.getBody
|
312
|
+
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::TagBody)
|
313
|
+
expect(b.type).to include RDFVocabularies::OA.Tag
|
314
|
+
expect(b.type).to include RDFVocabularies::CNT.ContentAsText
|
315
|
+
expect(b.tag).to eq ["BLANK_NODE_TAG"]
|
316
|
+
end
|
317
|
+
|
318
|
+
it "should resume an instance of SemanticTagAnnotation and body object is missing" do
|
319
|
+
|
320
|
+
|
321
|
+
# SKIPPED FOR REWRITE FOR BLANK NODE
|
322
|
+
# pending ("rewrite for blank node")
|
323
|
+
|
324
|
+
|
325
|
+
a_time = Time::now.strftime("%Y-%m-%dT%H:%M:%S.%L%z")
|
326
|
+
sta = LD4L::OpenAnnotationRDF::SemanticTagAnnotation.new('sta_3')
|
327
|
+
sta.hasTarget = RDF::URI("http://example.org/bibref/br3")
|
328
|
+
sta.hasBody = RDF::URI('http://example.org/term/3') # don't create a cooresponding body object
|
329
|
+
sta.annotatedBy = a_person
|
330
|
+
sta.annotatedAt = a_time
|
331
|
+
sta.persist!
|
332
|
+
expect(sta).to be_persisted
|
333
|
+
uri = sta.rdf_subject
|
334
|
+
|
335
|
+
a = LD4L::OpenAnnotationRDF::Annotation.resume(uri)
|
336
|
+
expect(a).to be_a_kind_of(LD4L::OpenAnnotationRDF::SemanticTagAnnotation)
|
337
|
+
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
338
|
+
expect(a.annotatedBy.first).to eq a_person
|
339
|
+
expect(a.annotatedAt.first).to eq a_time
|
340
|
+
expect(a.motivatedBy.first).to eq RDFVocabularies::OA.tagging
|
341
|
+
|
342
|
+
b = a.getBody
|
343
|
+
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::SemanticTagBody)
|
344
|
+
expect(b.type).to include RDFVocabularies::OA.SemanticTag
|
345
|
+
expect(b.rdf_subject.to_s).to eq('http://example.org/term/3')
|
346
|
+
end
|
347
|
+
end
|
348
|
+
|
349
|
+
context "when loading from graph" do
|
350
|
+
context "and has blank node for body" do
|
351
|
+
context "and triples represent a comment annotation" do
|
352
|
+
before(:each) do
|
353
|
+
@anno_url = "http://my_oa_store/COMMENT_ANNO"
|
354
|
+
@comment_value = "This is a comment."
|
355
|
+
ttl = "<#{@anno_url}> a <http://www.w3.org/ns/oa#Annotation>;
|
356
|
+
<http://www.w3.org/ns/oa#hasBody> [
|
357
|
+
a <http://purl.org/dc/dcmitype/Text>,
|
358
|
+
<http://www.w3.org/2011/content#ContentAsText>;
|
359
|
+
<http://www.w3.org/2011/content#chars> \"#{@comment_value}\" ;
|
360
|
+
<http://purl.org/dc/terms/format> \"text/plain\"
|
361
|
+
];
|
362
|
+
<http://www.w3.org/ns/oa#hasTarget> <http://searchworks.stanford.edu/view/666>;
|
363
|
+
<http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#commenting> ."
|
364
|
+
|
365
|
+
anno_graph = RDF::Graph.new.from_ttl ttl
|
366
|
+
r = ActiveTriples::Repositories.repositories[:default]
|
367
|
+
r << anno_graph
|
368
|
+
anno_uri = RDF::URI.new(@anno_url)
|
369
|
+
@comment_anno = LD4L::OpenAnnotationRDF::Annotation.resume(anno_uri)
|
370
|
+
end
|
371
|
+
it "populates LD4L::OpenAnnotationRDF::TagAnnotation properly" do
|
372
|
+
expect(@comment_anno.rdf_subject.to_s).to eq @anno_url
|
373
|
+
expect(@comment_anno).to be_a LD4L::OpenAnnotationRDF::CommentAnnotation
|
374
|
+
expect(@comment_anno.type).to include(RDFVocabularies::OA.Annotation)
|
375
|
+
expect(@comment_anno.motivatedBy).to include(RDFVocabularies::OA.commenting)
|
376
|
+
expect(@comment_anno.hasTarget.first.rdf_subject).to eq RDF::URI.new("http://searchworks.stanford.edu/view/666")
|
377
|
+
end
|
378
|
+
it "populates Tag bodies properly" do
|
379
|
+
body = @comment_anno.hasBody.first
|
380
|
+
expect(body).to be_a LD4L::OpenAnnotationRDF::CommentBody
|
381
|
+
expect(body.content.first).to eq @comment_value
|
382
|
+
expect(body.type).to include(RDFVocabularies::CNT.ContentAsText)
|
383
|
+
expect(body.type).to include(RDFVocabularies::DCTYPES.Text)
|
384
|
+
end
|
385
|
+
end
|
386
|
+
|
387
|
+
context "and triples represent a tag annotation" do
|
388
|
+
before(:each) do
|
389
|
+
@anno_url = "http://my_oa_store/TAG_ANNO"
|
390
|
+
@tag_value = "blue"
|
391
|
+
ttl = "<#{@anno_url}> a <http://www.w3.org/ns/oa#Annotation>;
|
392
|
+
<http://www.w3.org/ns/oa#hasBody> [
|
393
|
+
a <http://purl.org/dc/dcmitype/Text>,
|
394
|
+
<http://www.w3.org/2011/content#ContentAsText>,
|
395
|
+
<http://www.w3.org/ns/oa#Tag>;
|
396
|
+
<http://www.w3.org/2011/content#chars> \"#{@tag_value}\" ;
|
397
|
+
<http://purl.org/dc/terms/format> \"text/plain\"
|
398
|
+
];
|
399
|
+
<http://www.w3.org/ns/oa#hasTarget> <http://searchworks.stanford.edu/view/666>;
|
400
|
+
<http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#tagging> ."
|
401
|
+
|
402
|
+
anno_graph = RDF::Graph.new.from_ttl ttl
|
403
|
+
r = ActiveTriples::Repositories.repositories[:default]
|
404
|
+
r << anno_graph
|
405
|
+
anno_uri = RDF::URI.new(@anno_url)
|
406
|
+
@tag_anno = LD4L::OpenAnnotationRDF::Annotation.resume(anno_uri)
|
407
|
+
end
|
408
|
+
it "populates LD4L::OpenAnnotationRDF::TagAnnotation properly" do
|
409
|
+
expect(@tag_anno.rdf_subject.to_s).to eq @anno_url
|
410
|
+
expect(@tag_anno).to be_a LD4L::OpenAnnotationRDF::TagAnnotation
|
411
|
+
expect(@tag_anno.type).to include(RDFVocabularies::OA.Annotation)
|
412
|
+
expect(@tag_anno.motivatedBy).to include(RDFVocabularies::OA.tagging)
|
413
|
+
expect(@tag_anno.hasTarget.first.rdf_subject).to eq RDF::URI.new("http://searchworks.stanford.edu/view/666")
|
414
|
+
end
|
415
|
+
it "populates Tag bodies properly" do
|
416
|
+
body = @tag_anno.hasBody.first
|
417
|
+
expect(body).to be_a LD4L::OpenAnnotationRDF::TagBody
|
418
|
+
expect(body.tag.first).to eq @tag_value
|
419
|
+
expect(body.type).to include(RDFVocabularies::OA.Tag)
|
420
|
+
expect(body.type).to include(RDFVocabularies::CNT.ContentAsText)
|
421
|
+
expect(body.type).to include(RDFVocabularies::DCTYPES.Text)
|
422
|
+
end
|
423
|
+
end
|
424
|
+
|
425
|
+
context "and triples represent a semantic tag annotation" do
|
426
|
+
before(:each) do
|
427
|
+
@anno_url = "http://my_oa_store/SEMANTIC_TAG_ANNO"
|
428
|
+
@term_url = "http://example.org/terms/foo"
|
429
|
+
ttl = "<#{@anno_url}> a <http://www.w3.org/ns/oa#Annotation>;
|
430
|
+
<http://www.w3.org/ns/oa#hasBody> <#{@term_url}>;
|
431
|
+
<http://www.w3.org/ns/oa#hasTarget> <http://searchworks.stanford.edu/view/666>;
|
432
|
+
<http://www.w3.org/ns/oa#motivatedBy> <http://www.w3.org/ns/oa#tagging> ."
|
433
|
+
|
434
|
+
anno_graph = RDF::Graph.new.from_ttl ttl
|
435
|
+
r = ActiveTriples::Repositories.repositories[:default]
|
436
|
+
r << anno_graph
|
437
|
+
anno_uri = RDF::URI.new(@anno_url)
|
438
|
+
@semantic_tag_anno = LD4L::OpenAnnotationRDF::Annotation.resume(anno_uri)
|
439
|
+
end
|
440
|
+
it "populates LD4L::OpenAnnotationRDF::TagAnnotation properly" do
|
441
|
+
expect(@semantic_tag_anno.rdf_subject.to_s).to eq @anno_url
|
442
|
+
expect(@semantic_tag_anno).to be_a LD4L::OpenAnnotationRDF::SemanticTagAnnotation
|
443
|
+
expect(@semantic_tag_anno.type).to include(RDFVocabularies::OA.Annotation)
|
444
|
+
expect(@semantic_tag_anno.motivatedBy).to include(RDFVocabularies::OA.tagging)
|
445
|
+
expect(@semantic_tag_anno.hasTarget.first.rdf_subject).to eq RDF::URI.new("http://searchworks.stanford.edu/view/666")
|
446
|
+
end
|
447
|
+
it "populates Tag bodies properly" do
|
448
|
+
body = @semantic_tag_anno.hasBody.first
|
449
|
+
expect(body.rdf_subject.to_s).to eq @term_url
|
450
|
+
expect(body).to be_a LD4L::OpenAnnotationRDF::SemanticTagBody
|
451
|
+
expect(body.type).to include(RDFVocabularies::OA.SemanticTag)
|
452
|
+
end
|
453
|
+
end
|
454
|
+
end
|
249
455
|
end
|
250
456
|
end
|
251
457
|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ld4l-open_annotation_rdf
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.10
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- E. Lynette Rayle
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-01-
|
11
|
+
date: 2015-01-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: rdf
|
@@ -226,3 +226,4 @@ test_files:
|
|
226
226
|
- spec/ld4l/open_annotation_rdf/tag_body_spec.rb
|
227
227
|
- spec/ld4l/open_annotation_rdf_spec.rb
|
228
228
|
- spec/spec_helper.rb
|
229
|
+
has_rdoc:
|