ld4l-open_annotation_rdf 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +10 -6
- data/Gemfile +3 -0
- data/README.md +5 -0
- data/ld4l-open_annotation_rdf.gemspec +4 -8
- data/lib/ld4l/open_annotation_rdf.rb +1 -26
- data/lib/ld4l/open_annotation_rdf/annotation.rb +28 -30
- data/lib/ld4l/open_annotation_rdf/annotation_generic_body.rb +12 -0
- data/lib/ld4l/open_annotation_rdf/comment_annotation.rb +3 -6
- data/lib/ld4l/open_annotation_rdf/comment_body.rb +4 -4
- data/lib/ld4l/open_annotation_rdf/semantic_tag_annotation.rb +3 -6
- data/lib/ld4l/open_annotation_rdf/semantic_tag_body.rb +3 -3
- data/lib/ld4l/open_annotation_rdf/tag_annotation.rb +3 -5
- data/lib/ld4l/open_annotation_rdf/tag_body.rb +7 -7
- data/lib/ld4l/open_annotation_rdf/version.rb +1 -1
- data/spec/ld4l/open_annotation_rdf/annotation_spec.rb +79 -70
- data/spec/ld4l/open_annotation_rdf/comment_annotation_spec.rb +46 -40
- data/spec/ld4l/open_annotation_rdf/comment_body_spec.rb +46 -43
- data/spec/ld4l/open_annotation_rdf/configuration_spec.rb +5 -5
- data/spec/ld4l/open_annotation_rdf/semantic_tag_annotation_spec.rb +46 -42
- data/spec/ld4l/open_annotation_rdf/semantic_tag_body_spec.rb +24 -31
- data/spec/ld4l/open_annotation_rdf/tag_annotation_spec.rb +46 -42
- data/spec/ld4l/open_annotation_rdf/tag_body_spec.rb +28 -35
- data/spec/ld4l/open_annotation_rdf_spec.rb +1 -1
- data/spec/spec_helper.rb +1 -2
- metadata +13 -69
- data/lib/ld4l/open_annotation_rdf/vocab/cnt.rb +0 -6
- data/lib/ld4l/open_annotation_rdf/vocab/dctypes.rb +0 -5
- data/lib/ld4l/open_annotation_rdf/vocab/oa.rb +0 -23
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 4aa0556da41076b2f34c5e42dba07eae18293ab9
|
4
|
+
data.tar.gz: 602276cae0e89de7fb57d8c37ba15b9194d678b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 4386b653e3aaa928613de1373228e541bb49d0aaee20681561eb367ec9c85e01a5e23616e1fea7d27f7389320b4f01b575dc4c25e431a92d3e66f0979c0eec62
|
7
|
+
data.tar.gz: 6728d645af71a8b61d67a574d413fc2fd2f377060b69bf1f992ed2b0bfe419f880fd4714da1a46c95bff0560a6ffe363906b1cef4ebc8b99c6ad13d7bacaaca0
|
data/.travis.yml
CHANGED
@@ -1,12 +1,16 @@
|
|
1
1
|
language: ruby
|
2
2
|
bundler_args: --without debug
|
3
3
|
script: "bundle exec rspec spec"
|
4
|
+
sudo: false
|
5
|
+
cache: bundler
|
4
6
|
rvm:
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
7
|
+
- 2.1
|
8
|
+
- 2.2.2
|
9
|
+
- 2.2.4
|
10
|
+
- 2.3.1
|
11
|
+
- jruby-9.0.4.0
|
12
|
+
- rbx
|
10
13
|
matrix:
|
11
14
|
allow_failures:
|
12
|
-
- rvm: jruby-
|
15
|
+
- rvm: jruby-9.0.4.0
|
16
|
+
- rvm: rbx
|
data/Gemfile
CHANGED
data/README.md
CHANGED
@@ -25,6 +25,11 @@ Or install it yourself as:
|
|
25
25
|
$ gem install ld4l-open_annotation_rdf
|
26
26
|
|
27
27
|
|
28
|
+
## Primary Dependencies
|
29
|
+
|
30
|
+
* [ActiveTriples 0.10.0](https://github.com/ActiveTriples/ActiveTriples/tree/v0.10.0)
|
31
|
+
* [RDF 2.0.2](https://github.com/ruby-rdf/rdf/tree/2.0.2)
|
32
|
+
|
28
33
|
## Usage
|
29
34
|
|
30
35
|
**Caveat:** This gem is part of the LD4L Project and is being used in that context. There is no guarantee that the
|
@@ -13,23 +13,19 @@ Gem::Specification.new do |spec|
|
|
13
13
|
spec.description = %q{LD4L Open Annotation RDF provides tools for modeling a annotations based on the Open Annotation ontology and persisting to a triplestore.}
|
14
14
|
spec.homepage = "https://github.com/ld4l/open_annotation_rdf"
|
15
15
|
spec.license = "APACHE2"
|
16
|
-
spec.required_ruby_version = '>= 1
|
16
|
+
spec.required_ruby_version = '>= 2.1'
|
17
17
|
|
18
18
|
spec.files = `git ls-files -z`.split("\x0")
|
19
19
|
spec.test_files = spec.files.grep(%r{^(test|spec|features)/})
|
20
20
|
|
21
|
-
spec.add_dependency('rdf'
|
22
|
-
|
23
|
-
spec.add_dependency('active-triples', '~> 0.5', '~> 0.6', '~>0.8.2')
|
21
|
+
spec.add_dependency('rdf')
|
22
|
+
spec.add_dependency('active-triples')
|
24
23
|
spec.add_dependency('active_triples-local_name')
|
25
|
-
spec.add_dependency('ld4l-foaf_rdf'
|
24
|
+
spec.add_dependency('ld4l-foaf_rdf')
|
26
25
|
|
27
|
-
spec.add_development_dependency('pry')
|
28
|
-
spec.add_development_dependency('pry-byebug')
|
29
26
|
spec.add_development_dependency('rdoc')
|
30
27
|
spec.add_development_dependency('rspec')
|
31
28
|
spec.add_development_dependency('coveralls')
|
32
|
-
spec.add_development_dependency('guard-rspec')
|
33
29
|
spec.add_development_dependency('webmock')
|
34
30
|
|
35
31
|
spec.extra_rdoc_files = [
|
@@ -4,9 +4,6 @@ require 'active_triples/local_name'
|
|
4
4
|
require 'linkeddata'
|
5
5
|
require 'ld4l/foaf_rdf'
|
6
6
|
require 'ld4l/open_annotation_rdf/version'
|
7
|
-
require 'ld4l/open_annotation_rdf/vocab/oa'
|
8
|
-
require 'ld4l/open_annotation_rdf/vocab/cnt'
|
9
|
-
require 'ld4l/open_annotation_rdf/vocab/dctypes'
|
10
7
|
|
11
8
|
|
12
9
|
module LD4L
|
@@ -29,38 +26,16 @@ module LD4L
|
|
29
26
|
yield(configuration)
|
30
27
|
end
|
31
28
|
|
32
|
-
|
33
|
-
# RDF vocabularies
|
34
|
-
autoload :OA, 'ld4l/open_annotation_rdf/vocab/oa'
|
35
|
-
autoload :CNT, 'ld4l/open_annotation_rdf/vocab/cnt'
|
36
|
-
autoload :DCTYPES, 'ld4l/open_annotation_rdf/vocab/dctypes'
|
37
|
-
|
38
|
-
|
39
29
|
# autoload classes
|
40
30
|
autoload :Configuration, 'ld4l/open_annotation_rdf/configuration'
|
41
31
|
autoload :Annotation, 'ld4l/open_annotation_rdf/annotation'
|
32
|
+
autoload :AnnotationGenericBody, 'ld4l/open_annotation_rdf/annotation_generic_body'
|
42
33
|
autoload :CommentAnnotation, 'ld4l/open_annotation_rdf/comment_annotation'
|
43
34
|
autoload :CommentBody, 'ld4l/open_annotation_rdf/comment_body'
|
44
35
|
autoload :TagAnnotation, 'ld4l/open_annotation_rdf/tag_annotation'
|
45
36
|
autoload :TagBody, 'ld4l/open_annotation_rdf/tag_body'
|
46
37
|
autoload :SemanticTagAnnotation, 'ld4l/open_annotation_rdf/semantic_tag_annotation'
|
47
38
|
autoload :SemanticTagBody, 'ld4l/open_annotation_rdf/semantic_tag_body'
|
48
|
-
|
49
|
-
def self.class_from_string(class_name, container_class=Kernel)
|
50
|
-
container_class = container_class.name if container_class.is_a? Module
|
51
|
-
container_parts = container_class.split('::')
|
52
|
-
(container_parts + class_name.split('::')).flatten.inject(Kernel) do |mod, class_name|
|
53
|
-
if mod == Kernel
|
54
|
-
Object.const_get(class_name)
|
55
|
-
elsif mod.const_defined? class_name.to_sym
|
56
|
-
mod.const_get(class_name)
|
57
|
-
else
|
58
|
-
container_parts.pop
|
59
|
-
class_from_string(class_name, container_parts.join('::'))
|
60
|
-
end
|
61
|
-
end
|
62
|
-
end
|
63
|
-
|
64
39
|
end
|
65
40
|
end
|
66
41
|
|
@@ -7,45 +7,30 @@ module LD4L
|
|
7
7
|
|
8
8
|
@body = nil
|
9
9
|
|
10
|
-
configure :type =>
|
10
|
+
configure :type => RDF::Vocab::OA.Annotation,
|
11
11
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
12
12
|
:repository => :default
|
13
13
|
|
14
|
-
property :hasTarget, :predicate =>
|
15
|
-
property :hasBody, :predicate =>
|
16
|
-
property :annotatedBy, :predicate =>
|
17
|
-
property :annotatedAt, :predicate =>
|
18
|
-
property :motivatedBy, :predicate =>
|
14
|
+
property :hasTarget, :predicate => RDF::Vocab::OA.hasTarget # :type => URI
|
15
|
+
property :hasBody, :predicate => RDF::Vocab::OA.hasBody
|
16
|
+
property :annotatedBy, :predicate => RDF::Vocab::OA.annotatedBy, :class_name => LD4L::FoafRDF::Person
|
17
|
+
property :annotatedAt, :predicate => RDF::Vocab::OA.annotatedAt, :cast => false # :type => xsd:dateTime # the time Annotation was created
|
18
|
+
property :motivatedBy, :predicate => RDF::Vocab::OA.motivatedBy, :cast => false # comes from RDF::Vocab::OA ontology
|
19
19
|
|
20
20
|
def self.resume(uri_or_str)
|
21
21
|
# Let ActiveTriples::Resource validate uri_or_str when creating new Annotation
|
22
22
|
a = new(uri_or_str)
|
23
|
+
return nil if a.nil?
|
23
24
|
|
24
|
-
# get motivatedBy
|
25
|
-
m = a.get_values(:motivatedBy)
|
26
|
-
m = m.to_a if Object.const_defined?("ActiveTriples::Relation") && m.kind_of?(ActiveTriples::Relation)
|
27
|
-
|
28
|
-
# TODO: Should m's class be validated? I've seen it be RDF::Vocabulary::Term and RDF::URI. For now, removing the validation.
|
29
|
-
return a unless m.kind_of?(Array) && m.size > 0
|
30
|
-
# return a unless m.kind_of?(Array) && m.size > 0 && (m.first.kind_of?(RDF::Vocabulary::Term) || m.first.kind_of?(RDF::URI)
|
31
|
-
|
32
|
-
# motivatedBy is set
|
33
|
-
m_uri = m.first
|
34
25
|
# currently only support commenting and tagging
|
35
|
-
|
36
|
-
return
|
26
|
+
m = motivated_by a
|
27
|
+
return LD4L::OpenAnnotationRDF::CommentAnnotation.new(uri_or_str) if m.include? RDF::Vocab::OA.commenting
|
37
28
|
|
38
29
|
# Tagging can be TagAnnotation or SemanticTagAnnotation. Only way to tell is by checking type of body.
|
39
|
-
|
40
|
-
|
41
|
-
return
|
42
|
-
|
43
|
-
ta = LD4L::OpenAnnotationRDF::TagAnnotation.new(uri_or_str)
|
44
|
-
tb = ta.getBody
|
45
|
-
return ta if tb.type.include?(RDFVocabularies::OA.Tag)
|
46
|
-
|
47
|
-
# can't match to a known annotation type, so return as generic annotation
|
48
|
-
return a
|
30
|
+
return a unless m.include? RDF::Vocab::OA.tagging
|
31
|
+
b = body_resource a
|
32
|
+
return LD4L::OpenAnnotationRDF::TagAnnotation.new(uri_or_str) if b.type.include? RDF::Vocab::OA.Tag
|
33
|
+
LD4L::OpenAnnotationRDF::SemanticTagAnnotation.new(uri_or_str)
|
49
34
|
end
|
50
35
|
|
51
36
|
##
|
@@ -98,8 +83,8 @@ module LD4L
|
|
98
83
|
repo = ActiveTriples::Repositories.repositories[repository]
|
99
84
|
query = RDF::Query.new({
|
100
85
|
:annotation => {
|
101
|
-
RDF.type =>
|
102
|
-
|
86
|
+
RDF.type => RDF::Vocab::OA.Annotation,
|
87
|
+
RDF::Vocab::OA.hasTarget => target_uri,
|
103
88
|
}
|
104
89
|
})
|
105
90
|
annotations = []
|
@@ -107,6 +92,19 @@ module LD4L
|
|
107
92
|
results.each { |r| annotations << r.to_hash[:annotation] }
|
108
93
|
annotations
|
109
94
|
end
|
95
|
+
|
96
|
+
private
|
97
|
+
def self::motivated_by annotation
|
98
|
+
m = annotation.get_values(:motivatedBy).to_a
|
99
|
+
return nil unless m.kind_of?(Array) && (m.size > 0)
|
100
|
+
m
|
101
|
+
end
|
102
|
+
|
103
|
+
def self::body_resource annotation
|
104
|
+
body_uris = annotation.hasBody
|
105
|
+
return nil if body_uris.nil? || body_uris.size < 1
|
106
|
+
AnnotationGenericBody.new(body_uris.first) # TODO: a full implementation of OA could have multiple bodies
|
107
|
+
end
|
110
108
|
end
|
111
109
|
end
|
112
110
|
end
|
@@ -0,0 +1,12 @@
|
|
1
|
+
module LD4L
|
2
|
+
module OpenAnnotationRDF
|
3
|
+
class AnnotationGenericBody < ActiveTriples::Resource
|
4
|
+
|
5
|
+
class << self; attr_reader :localname_prefix end
|
6
|
+
@localname_prefix="a"
|
7
|
+
|
8
|
+
configure :base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
9
|
+
:repository => :default
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
@@ -4,13 +4,10 @@ module LD4L
|
|
4
4
|
|
5
5
|
@localname_prefix="ca"
|
6
6
|
|
7
|
-
configure :type =>
|
7
|
+
configure :type => RDF::Vocab::OA.Annotation,
|
8
8
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
9
9
|
:repository => :default
|
10
10
|
|
11
|
-
property :hasBody, :predicate => RDFVocabularies::OA.hasBody, :class_name => LD4L::OpenAnnotationRDF::CommentBody
|
12
|
-
|
13
|
-
|
14
11
|
##
|
15
12
|
# Create a comment annotation body and set the hasBody property to it.
|
16
13
|
#
|
@@ -53,8 +50,8 @@ module LD4L
|
|
53
50
|
|
54
51
|
# set motivatedBy
|
55
52
|
m = get_values(:motivatedBy)
|
56
|
-
m = m.to_a if Object.const_defined?("
|
57
|
-
set_value(:motivatedBy,
|
53
|
+
m = m.to_a if Object::ActiveTriples.const_defined?("Relation") && m.kind_of?(ActiveTriples::Relation)
|
54
|
+
set_value(:motivatedBy, RDF::Vocab::OA.commenting) unless m.kind_of?(Array) && m.size > 0
|
58
55
|
|
59
56
|
# resume CommentBody if it exists
|
60
57
|
comment_uri = get_values(:hasBody).first
|
@@ -5,18 +5,18 @@ module LD4L
|
|
5
5
|
class << self; attr_reader :localname_prefix end
|
6
6
|
@localname_prefix="cb"
|
7
7
|
|
8
|
-
configure :type =>
|
8
|
+
configure :type => RDF::Vocab::CNT.ContentAsText,
|
9
9
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
10
10
|
:repository => :default
|
11
11
|
|
12
|
-
property :content, :predicate =>
|
13
|
-
property :format, :predicate => RDF::DC.format, :cast => false # :type => XSD.string
|
12
|
+
property :content, :predicate => RDF::Vocab::CNT.chars, :cast => false # :type => XSD.string
|
13
|
+
property :format, :predicate => RDF::Vocab::DC.format, :cast => false # :type => XSD.string
|
14
14
|
|
15
15
|
def initialize(*args)
|
16
16
|
super(*args)
|
17
17
|
|
18
18
|
t = get_values(:type)
|
19
|
-
t <<
|
19
|
+
t << RDF::Vocab::DCMIType.Text
|
20
20
|
set_value(:type,t)
|
21
21
|
end
|
22
22
|
end
|
@@ -4,13 +4,10 @@ module LD4L
|
|
4
4
|
|
5
5
|
@localname_prefix = "sta"
|
6
6
|
|
7
|
-
configure :type =>
|
7
|
+
configure :type => RDF::Vocab::OA.Annotation,
|
8
8
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
9
9
|
:repository => :default
|
10
10
|
|
11
|
-
property :hasBody, :predicate => RDFVocabularies::OA.hasBody, :class_name => LD4L::OpenAnnotationRDF::SemanticTagBody
|
12
|
-
|
13
|
-
|
14
11
|
# USAGE: Use setTerm to set the hasBody property to be the URI of the controlled vocabulary term that
|
15
12
|
# is the annotation.
|
16
13
|
|
@@ -59,8 +56,8 @@ module LD4L
|
|
59
56
|
|
60
57
|
# set motivatedBy
|
61
58
|
m = get_values(:motivatedBy)
|
62
|
-
m = m.to_a if Object.const_defined?("
|
63
|
-
set_value(:motivatedBy,
|
59
|
+
m = m.to_a if Object::ActiveTriples.const_defined?("Relation") && m.kind_of?(ActiveTriples::Relation)
|
60
|
+
set_value(:motivatedBy, RDF::Vocab::OA.tagging) unless m.kind_of?(Array) && m.size > 0
|
64
61
|
|
65
62
|
# resume SemanticTagBody if it exists
|
66
63
|
term_uri = get_values(:hasBody).first
|
@@ -8,7 +8,7 @@ module LD4L
|
|
8
8
|
# USAGE: When creating a semantic tag body, use the URI of the controlled vocabulary term as the RDF Subject URI
|
9
9
|
# for an instance of this class.
|
10
10
|
|
11
|
-
configure :type =>
|
11
|
+
configure :type => RDF::Vocab::OA.SemanticTag,
|
12
12
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
13
13
|
:repository => :default
|
14
14
|
|
@@ -30,8 +30,8 @@ module LD4L
|
|
30
30
|
repo = ActiveTriples::Repositories.repositories[repository]
|
31
31
|
query = RDF::Query.new({
|
32
32
|
:annotation => {
|
33
|
-
RDF.type =>
|
34
|
-
|
33
|
+
RDF.type => RDF::Vocab::OA.Annotation,
|
34
|
+
RDF::Vocab::OA.hasBody => term_uri,
|
35
35
|
}
|
36
36
|
})
|
37
37
|
annotations = []
|
@@ -4,12 +4,10 @@ module LD4L
|
|
4
4
|
|
5
5
|
@localname_prefix="ta"
|
6
6
|
|
7
|
-
configure :type =>
|
7
|
+
configure :type => RDF::Vocab::OA.Annotation,
|
8
8
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
9
9
|
:repository => :default
|
10
10
|
|
11
|
-
property :hasBody, :predicate => RDFVocabularies::OA.hasBody, :class_name => LD4L::OpenAnnotationRDF::TagBody
|
12
|
-
|
13
11
|
# TODO: Should a tag be destroyed when the last annotation referencing the tag is destroyed?
|
14
12
|
|
15
13
|
##
|
@@ -102,8 +100,8 @@ module LD4L
|
|
102
100
|
|
103
101
|
# set motivatedBy
|
104
102
|
m = get_values(:motivatedBy)
|
105
|
-
m = m.to_a if Object.const_defined?("
|
106
|
-
set_value(:motivatedBy,
|
103
|
+
m = m.to_a if Object::ActiveTriples.const_defined?("Relation") && m.kind_of?(ActiveTriples::Relation)
|
104
|
+
set_value(:motivatedBy, RDF::Vocab::OA.tagging) unless m.kind_of?(Array) && m.size > 0
|
107
105
|
|
108
106
|
# resume TagBody if it exists
|
109
107
|
tag_uri = get_values(:hasBody).first
|
@@ -5,11 +5,11 @@ module LD4L
|
|
5
5
|
class << self; attr_reader :localname_prefix end
|
6
6
|
@localname_prefix="tb"
|
7
7
|
|
8
|
-
configure :type =>
|
8
|
+
configure :type => RDF::Vocab::OA.Tag,
|
9
9
|
:base_uri => LD4L::OpenAnnotationRDF.configuration.base_uri,
|
10
10
|
:repository => :default
|
11
11
|
|
12
|
-
property :tag, :predicate =>
|
12
|
+
property :tag, :predicate => RDF::Vocab::CNT.chars, :cast => false # :type => XSD.string
|
13
13
|
|
14
14
|
##
|
15
15
|
# Get a list of annotations using the tag value.
|
@@ -31,8 +31,8 @@ module LD4L
|
|
31
31
|
repo = ActiveTriples::Repositories.repositories[repository]
|
32
32
|
query = RDF::Query.new({
|
33
33
|
:annotation => {
|
34
|
-
RDF.type =>
|
35
|
-
|
34
|
+
RDF.type => RDF::Vocab::OA.Annotation,
|
35
|
+
RDF::Vocab::OA.hasBody => tag_uri,
|
36
36
|
}
|
37
37
|
})
|
38
38
|
results = query.execute(repo)
|
@@ -57,8 +57,8 @@ module LD4L
|
|
57
57
|
repo = ActiveTriples::Repositories.repositories[repository]
|
58
58
|
query = RDF::Query.new({
|
59
59
|
:tagbody => {
|
60
|
-
RDF.type =>
|
61
|
-
|
60
|
+
RDF.type => RDF::Vocab::OA.Tag,
|
61
|
+
RDF::Vocab::CNT.chars => tag_value,
|
62
62
|
}
|
63
63
|
})
|
64
64
|
|
@@ -76,7 +76,7 @@ module LD4L
|
|
76
76
|
super(*args)
|
77
77
|
|
78
78
|
t = get_values(:type)
|
79
|
-
t <<
|
79
|
+
t << RDF::Vocab::CNT.ContentAsText
|
80
80
|
set_value(:type,t)
|
81
81
|
end
|
82
82
|
end
|
@@ -2,6 +2,10 @@ require 'spec_helper'
|
|
2
2
|
|
3
3
|
describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
4
4
|
|
5
|
+
after do
|
6
|
+
ActiveTriples::Repositories.repositories[LD4L::OpenAnnotationRDF::CommentAnnotation.repository].clear!
|
7
|
+
end
|
8
|
+
|
5
9
|
subject { LD4L::OpenAnnotationRDF::Annotation.new }
|
6
10
|
|
7
11
|
describe 'rdf_subject' do
|
@@ -21,9 +25,9 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
21
25
|
|
22
26
|
describe 'when changing subject' do
|
23
27
|
before do
|
24
|
-
subject << RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland'))
|
25
|
-
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.isPartOf, subject.rdf_subject)
|
26
|
-
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.relation, 'http://example.org/moomin_land')
|
28
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, RDF::Literal('Comet in Moominland'))
|
29
|
+
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.isPartOf, subject.rdf_subject)
|
30
|
+
subject << RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.relation, 'http://example.org/moomin_land')
|
27
31
|
subject.set_subject! RDF::URI('http://example.org/moomin')
|
28
32
|
end
|
29
33
|
|
@@ -33,15 +37,15 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
33
37
|
end
|
34
38
|
|
35
39
|
it 'should update graph subjects' do
|
36
|
-
expect(subject.has_statement?(RDF::Statement.new(subject.rdf_subject, RDF::DC.title, RDF::Literal('Comet in Moominland')))).to be true
|
40
|
+
expect(subject.has_statement?(RDF::Statement.new(subject.rdf_subject, RDF::Vocab::DC.title, RDF::Literal('Comet in Moominland')))).to be true
|
37
41
|
end
|
38
42
|
|
39
43
|
it 'should update graph objects' do
|
40
|
-
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.isPartOf, subject.rdf_subject))).to be true
|
44
|
+
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.isPartOf, subject.rdf_subject))).to be true
|
41
45
|
end
|
42
46
|
|
43
47
|
it 'should leave other uris alone' do
|
44
|
-
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::DC.relation, 'http://example.org/moomin_land'))).to be true
|
48
|
+
expect(subject.has_statement?(RDF::Statement.new(RDF::URI('http://example.org/moomin_comics'), RDF::Vocab::DC.relation, 'http://example.org/moomin_land'))).to be true
|
45
49
|
end
|
46
50
|
end
|
47
51
|
|
@@ -62,8 +66,8 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
62
66
|
# -------------------------------------------------
|
63
67
|
|
64
68
|
describe 'type' do
|
65
|
-
it "should be an
|
66
|
-
expect(subject.type.first.value).to eq
|
69
|
+
it "should be an RDF::Vocab::OA.Annotation" do
|
70
|
+
expect(subject.type.first.value).to eq RDF::Vocab::OA.Annotation.value
|
67
71
|
end
|
68
72
|
end
|
69
73
|
|
@@ -150,14 +154,14 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
150
154
|
end
|
151
155
|
|
152
156
|
it "should be settable" do
|
153
|
-
subject.motivatedBy =
|
154
|
-
expect(subject.motivatedBy.first).to eq
|
157
|
+
subject.motivatedBy = RDF::Vocab::OA.describing
|
158
|
+
expect(subject.motivatedBy.first).to eq RDF::Vocab::OA.describing
|
155
159
|
end
|
156
160
|
|
157
161
|
it "should be changeable" do
|
158
|
-
subject.motivatedBy =
|
159
|
-
subject.motivatedBy =
|
160
|
-
expect(subject.motivatedBy.first).to eq
|
162
|
+
subject.motivatedBy = RDF::Vocab::OA.describing
|
163
|
+
subject.motivatedBy = RDF::Vocab::OA.classifying
|
164
|
+
expect(subject.motivatedBy.first).to eq RDF::Vocab::OA.classifying
|
161
165
|
end
|
162
166
|
end
|
163
167
|
|
@@ -190,12 +194,12 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
190
194
|
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
191
195
|
expect(a.annotatedBy.first).to eq a_person
|
192
196
|
expect(a.annotatedAt.first).to eq a_time
|
193
|
-
expect(a.motivatedBy.first).to eq
|
197
|
+
expect(a.motivatedBy.first).to eq RDF::Vocab::OA.commenting
|
194
198
|
|
195
199
|
b = a.getBody
|
196
200
|
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::CommentBody)
|
197
|
-
expect(b.type).to include
|
198
|
-
expect(b.type).to include
|
201
|
+
expect(b.type).to include RDF::Vocab::DCMIType.Text
|
202
|
+
expect(b.type).to include RDF::Vocab::CNT.ContentAsText
|
199
203
|
expect(b.content).to eq ["This is a comment."]
|
200
204
|
expect(b.format.first).to eq "text/plain"
|
201
205
|
end
|
@@ -216,12 +220,12 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
216
220
|
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
217
221
|
expect(a.annotatedBy.first).to eq a_person
|
218
222
|
expect(a.annotatedAt.first).to eq a_time
|
219
|
-
expect(a.motivatedBy.first).to eq
|
223
|
+
expect(a.motivatedBy.first).to eq RDF::Vocab::OA.tagging
|
220
224
|
|
221
225
|
b = a.getBody
|
222
226
|
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::TagBody)
|
223
|
-
expect(b.type).to include
|
224
|
-
expect(b.type).to include
|
227
|
+
expect(b.type).to include RDF::Vocab::OA.Tag
|
228
|
+
expect(b.type).to include RDF::Vocab::CNT.ContentAsText
|
225
229
|
expect(b.tag).to eq ["good"]
|
226
230
|
end
|
227
231
|
|
@@ -241,11 +245,11 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
241
245
|
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
242
246
|
expect(a.annotatedBy.first).to eq a_person
|
243
247
|
expect(a.annotatedAt.first).to eq a_time
|
244
|
-
expect(a.motivatedBy.first).to eq
|
248
|
+
expect(a.motivatedBy.first).to eq RDF::Vocab::OA.tagging
|
245
249
|
|
246
250
|
b = a.getBody
|
247
251
|
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::SemanticTagBody)
|
248
|
-
expect(b.type).to include
|
252
|
+
expect(b.type).to include RDF::Vocab::OA.SemanticTag
|
249
253
|
expect(b.rdf_subject.to_s).to eq('http://example.org/term/3')
|
250
254
|
end
|
251
255
|
end
|
@@ -274,12 +278,12 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
274
278
|
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
275
279
|
expect(a.annotatedBy.first).to eq a_person
|
276
280
|
expect(a.annotatedAt.first).to eq a_time
|
277
|
-
expect(a.motivatedBy.first).to eq
|
281
|
+
expect(a.motivatedBy.first).to eq RDF::Vocab::OA.commenting
|
278
282
|
|
279
283
|
b = a.getBody
|
280
284
|
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::CommentBody)
|
281
|
-
expect(b.type).to include
|
282
|
-
expect(b.type).to include
|
285
|
+
expect(b.type).to include RDF::Vocab::DCMIType.Text
|
286
|
+
expect(b.type).to include RDF::Vocab::CNT.ContentAsText
|
283
287
|
expect(b.content).to eq ["BLANK NODE COMMENT"]
|
284
288
|
expect(b.format.first).to eq "text/plain"
|
285
289
|
end
|
@@ -306,12 +310,12 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
306
310
|
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
307
311
|
expect(a.annotatedBy.first).to eq a_person
|
308
312
|
expect(a.annotatedAt.first).to eq a_time
|
309
|
-
expect(a.motivatedBy.first).to eq
|
313
|
+
expect(a.motivatedBy.first).to eq RDF::Vocab::OA.tagging
|
310
314
|
|
311
315
|
b = a.getBody
|
312
316
|
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::TagBody)
|
313
|
-
expect(b.type).to include
|
314
|
-
expect(b.type).to include
|
317
|
+
expect(b.type).to include RDF::Vocab::OA.Tag
|
318
|
+
expect(b.type).to include RDF::Vocab::CNT.ContentAsText
|
315
319
|
expect(b.tag).to eq ["BLANK_NODE_TAG"]
|
316
320
|
end
|
317
321
|
|
@@ -337,11 +341,11 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
337
341
|
expect(a.hasTarget.first.rdf_subject.to_s).to eq "http://example.org/bibref/br3"
|
338
342
|
expect(a.annotatedBy.first).to eq a_person
|
339
343
|
expect(a.annotatedAt.first).to eq a_time
|
340
|
-
expect(a.motivatedBy.first).to eq
|
344
|
+
expect(a.motivatedBy.first).to eq RDF::Vocab::OA.tagging
|
341
345
|
|
342
346
|
b = a.getBody
|
343
347
|
expect(b).to be_a_kind_of(LD4L::OpenAnnotationRDF::SemanticTagBody)
|
344
|
-
expect(b.type).to include
|
348
|
+
expect(b.type).to include RDF::Vocab::OA.SemanticTag
|
345
349
|
expect(b.rdf_subject.to_s).to eq('http://example.org/term/3')
|
346
350
|
end
|
347
351
|
end
|
@@ -371,16 +375,17 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
371
375
|
it "populates LD4L::OpenAnnotationRDF::CommentAnnotation properly" do
|
372
376
|
expect(@comment_anno.rdf_subject.to_s).to eq @anno_url
|
373
377
|
expect(@comment_anno).to be_a LD4L::OpenAnnotationRDF::CommentAnnotation
|
374
|
-
expect(@comment_anno.type).to include(
|
375
|
-
expect(@comment_anno.motivatedBy).to include(
|
378
|
+
expect(@comment_anno.type).to include(RDF::Vocab::OA.Annotation)
|
379
|
+
expect(@comment_anno.motivatedBy).to include(RDF::Vocab::OA.commenting)
|
376
380
|
expect(@comment_anno.hasTarget.first.rdf_subject).to eq RDF::URI.new("http://searchworks.stanford.edu/view/666")
|
377
381
|
end
|
378
382
|
it "populates Comment bodies properly" do
|
379
|
-
body = @comment_anno.hasBody.first
|
383
|
+
# body = @comment_anno.hasBody.first
|
384
|
+
body = @comment_anno.getBody
|
380
385
|
expect(body).to be_a LD4L::OpenAnnotationRDF::CommentBody
|
381
386
|
expect(body.content.first).to eq @comment_value
|
382
|
-
expect(body.type).to include(
|
383
|
-
expect(body.type).to include(
|
387
|
+
expect(body.type).to include(RDF::Vocab::CNT.ContentAsText)
|
388
|
+
expect(body.type).to include(RDF::Vocab::DCMIType.Text)
|
384
389
|
end
|
385
390
|
end
|
386
391
|
|
@@ -408,17 +413,18 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
408
413
|
it "populates LD4L::OpenAnnotationRDF::TagAnnotation properly" do
|
409
414
|
expect(@tag_anno.rdf_subject.to_s).to eq @anno_url
|
410
415
|
expect(@tag_anno).to be_a LD4L::OpenAnnotationRDF::TagAnnotation
|
411
|
-
expect(@tag_anno.type).to include(
|
412
|
-
expect(@tag_anno.motivatedBy).to include(
|
416
|
+
expect(@tag_anno.type).to include(RDF::Vocab::OA.Annotation)
|
417
|
+
expect(@tag_anno.motivatedBy).to include(RDF::Vocab::OA.tagging)
|
413
418
|
expect(@tag_anno.hasTarget.first.rdf_subject).to eq RDF::URI.new("http://searchworks.stanford.edu/view/666")
|
414
419
|
end
|
415
420
|
it "populates Tag bodies properly" do
|
416
|
-
body = @tag_anno.hasBody.first
|
421
|
+
# body = @tag_anno.hasBody.first
|
422
|
+
body = @tag_anno.getBody
|
417
423
|
expect(body).to be_a LD4L::OpenAnnotationRDF::TagBody
|
418
424
|
expect(body.tag.first).to eq @tag_value
|
419
|
-
expect(body.type).to include(
|
420
|
-
expect(body.type).to include(
|
421
|
-
expect(body.type).to include(
|
425
|
+
expect(body.type).to include(RDF::Vocab::OA.Tag)
|
426
|
+
expect(body.type).to include(RDF::Vocab::CNT.ContentAsText)
|
427
|
+
expect(body.type).to include(RDF::Vocab::DCMIType.Text)
|
422
428
|
end
|
423
429
|
end
|
424
430
|
|
@@ -440,15 +446,16 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
440
446
|
it "populates LD4L::OpenAnnotationRDF::TagAnnotation properly" do
|
441
447
|
expect(@semantic_tag_anno.rdf_subject.to_s).to eq @anno_url
|
442
448
|
expect(@semantic_tag_anno).to be_a LD4L::OpenAnnotationRDF::SemanticTagAnnotation
|
443
|
-
expect(@semantic_tag_anno.type).to include(
|
444
|
-
expect(@semantic_tag_anno.motivatedBy).to include(
|
449
|
+
expect(@semantic_tag_anno.type).to include(RDF::Vocab::OA.Annotation)
|
450
|
+
expect(@semantic_tag_anno.motivatedBy).to include(RDF::Vocab::OA.tagging)
|
445
451
|
expect(@semantic_tag_anno.hasTarget.first.rdf_subject).to eq RDF::URI.new("http://searchworks.stanford.edu/view/666")
|
446
452
|
end
|
447
453
|
it "populates Tag bodies properly" do
|
448
|
-
body = @semantic_tag_anno.hasBody.first
|
454
|
+
# body = @semantic_tag_anno.hasBody.first
|
455
|
+
body = @semantic_tag_anno.getBody
|
449
456
|
expect(body.rdf_subject.to_s).to eq @term_url
|
450
457
|
expect(body).to be_a LD4L::OpenAnnotationRDF::SemanticTagBody
|
451
|
-
expect(body.type).to include(
|
458
|
+
expect(body.type).to include(RDF::Vocab::OA.SemanticTag)
|
452
459
|
end
|
453
460
|
end
|
454
461
|
end
|
@@ -476,7 +483,7 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
476
483
|
|
477
484
|
context "when it is saved" do
|
478
485
|
before do
|
479
|
-
subject.motivatedBy =
|
486
|
+
subject.motivatedBy = RDF::Vocab::OA.commenting
|
480
487
|
subject.persist!
|
481
488
|
end
|
482
489
|
|
@@ -486,7 +493,7 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
486
493
|
|
487
494
|
context "and then modified" do
|
488
495
|
before do
|
489
|
-
subject.motivatedBy =
|
496
|
+
subject.motivatedBy = RDF::Vocab::OA.tagging
|
490
497
|
end
|
491
498
|
|
492
499
|
it "should return true" do
|
@@ -499,7 +506,7 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
499
506
|
end
|
500
507
|
|
501
508
|
it "should reset the motivatedBy" do
|
502
|
-
expect(subject.motivatedBy.first.to_s).to eq
|
509
|
+
expect(subject.motivatedBy.first.to_s).to eq RDF::Vocab::OA.commenting.to_s
|
503
510
|
end
|
504
511
|
|
505
512
|
it "should be persisted" do
|
@@ -521,7 +528,7 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
521
528
|
# Create inmemory repository
|
522
529
|
@repo = RDF::Repository.new
|
523
530
|
ActiveTriples::Repositories.repositories[:default] = @repo
|
524
|
-
subject.motivatedBy =
|
531
|
+
subject.motivatedBy = RDF::Vocab::OA.commenting
|
525
532
|
result
|
526
533
|
end
|
527
534
|
|
@@ -535,7 +542,7 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
535
542
|
|
536
543
|
it "should delete from the repository" do
|
537
544
|
subject.reload
|
538
|
-
expect(subject.motivatedBy.first.to_s).to eq
|
545
|
+
expect(subject.motivatedBy.first.to_s).to eq RDF::Vocab::OA.commenting.to_s
|
539
546
|
subject.motivatedBy = []
|
540
547
|
expect(subject.motivatedBy).to eq []
|
541
548
|
subject.persist!
|
@@ -549,7 +556,7 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
549
556
|
|
550
557
|
describe '#destroy!' do
|
551
558
|
before do
|
552
|
-
subject << RDF::Statement(RDF::DC.LicenseDocument, RDF::DC.title, 'LICENSE')
|
559
|
+
subject << RDF::Statement(RDF::Vocab::DC.LicenseDocument, RDF::Vocab::DC.title, 'LICENSE')
|
553
560
|
end
|
554
561
|
|
555
562
|
subject { LD4L::OpenAnnotationRDF::Annotation.new('123') }
|
@@ -615,11 +622,11 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
615
622
|
|
616
623
|
context 'with unmodeled data' do
|
617
624
|
before do
|
618
|
-
subject << RDF::Statement(subject.rdf_subject, RDF::DC.contributor, 'Tove Jansson')
|
619
|
-
subject << RDF::Statement(subject.rdf_subject, RDF::DC.relation, RDF::URI('http://example.org/moomi'))
|
625
|
+
subject << RDF::Statement(subject.rdf_subject, RDF::Vocab::DC.contributor, 'Tove Jansson')
|
626
|
+
subject << RDF::Statement(subject.rdf_subject, RDF::Vocab::DC.relation, RDF::URI('http://example.org/moomi'))
|
620
627
|
node = RDF::Node.new
|
621
|
-
subject << RDF::Statement(RDF::URI('http://example.org/moomi'), RDF::DC.relation, node)
|
622
|
-
subject << RDF::Statement(node, RDF::DC.title, 'bnode')
|
628
|
+
subject << RDF::Statement(RDF::URI('http://example.org/moomi'), RDF::Vocab::DC.relation, node)
|
629
|
+
subject << RDF::Statement(node, RDF::Vocab::DC.title, 'bnode')
|
623
630
|
end
|
624
631
|
|
625
632
|
after do
|
@@ -628,21 +635,21 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
628
635
|
end
|
629
636
|
|
630
637
|
it 'should include data with URIs as attribute names' do
|
631
|
-
expect(subject.attributes[RDF::DC.contributor.to_s]).to eq ['Tove Jansson']
|
638
|
+
expect(subject.attributes[RDF::Vocab::DC.contributor.to_s]).to eq ['Tove Jansson']
|
632
639
|
end
|
633
640
|
|
634
641
|
it 'should return generic Resources' do
|
635
|
-
expect(subject.attributes[RDF::DC.relation.to_s].first).to be_a ActiveTriples::Resource
|
642
|
+
expect(subject.attributes[RDF::Vocab::DC.relation.to_s].first).to be_a ActiveTriples::Resource
|
636
643
|
end
|
637
644
|
|
638
645
|
it 'should build deep data for Resources' do
|
639
|
-
expect(subject.attributes[RDF::DC.relation.to_s].first.get_values(RDF::DC.relation).
|
640
|
-
first.get_values(RDF::DC.title)).to eq ['bnode']
|
646
|
+
expect(subject.attributes[RDF::Vocab::DC.relation.to_s].first.get_values(RDF::Vocab::DC.relation).
|
647
|
+
first.get_values(RDF::Vocab::DC.title)).to eq ['bnode']
|
641
648
|
end
|
642
649
|
|
643
650
|
it 'should include deep data in serializable_hash' do
|
644
|
-
expect(subject.serializable_hash[RDF::DC.relation.to_s].first.get_values(RDF::DC.relation).
|
645
|
-
first.get_values(RDF::DC.title)).to eq ['bnode']
|
651
|
+
expect(subject.serializable_hash[RDF::Vocab::DC.relation.to_s].first.get_values(RDF::Vocab::DC.relation).
|
652
|
+
first.get_values(RDF::Vocab::DC.title)).to eq ['bnode']
|
646
653
|
end
|
647
654
|
end
|
648
655
|
|
@@ -719,13 +726,13 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
719
726
|
|
720
727
|
describe 'editing the graph' do
|
721
728
|
it 'should write properties when statements are added' do
|
722
|
-
subject << RDF::Statement.new(subject.rdf_subject,
|
729
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::Vocab::OA.motivatedBy, 'commenting')
|
723
730
|
expect(subject.motivatedBy).to include 'commenting'
|
724
731
|
end
|
725
732
|
|
726
733
|
it 'should delete properties when statements are removed' do
|
727
|
-
subject << RDF::Statement.new(subject.rdf_subject,
|
728
|
-
subject.delete RDF::Statement.new(subject.rdf_subject,
|
734
|
+
subject << RDF::Statement.new(subject.rdf_subject, RDF::Vocab::OA.motivatedBy, 'commenting')
|
735
|
+
subject.delete RDF::Statement.new(subject.rdf_subject, RDF::Vocab::OA.motivatedBy, 'commenting')
|
729
736
|
expect(subject.motivatedBy).to eq []
|
730
737
|
end
|
731
738
|
end
|
@@ -734,18 +741,18 @@ describe 'LD4L::OpenAnnotationRDF::Annotation' do
|
|
734
741
|
before do
|
735
742
|
class DummyPerson < ActiveTriples::Resource
|
736
743
|
configure :type => RDF::URI('http://example.org/Person')
|
737
|
-
property :foafname, :predicate => RDF::FOAF.name
|
738
|
-
property :publications, :predicate => RDF::FOAF.publications, :class_name => 'DummyDocument'
|
739
|
-
property :knows, :predicate => RDF::FOAF.knows, :class_name => DummyPerson
|
744
|
+
property :foafname, :predicate => RDF::Vocab::FOAF.name
|
745
|
+
property :publications, :predicate => RDF::Vocab::FOAF.publications, :class_name => 'DummyDocument'
|
746
|
+
property :knows, :predicate => RDF::Vocab::FOAF.knows, :class_name => DummyPerson
|
740
747
|
end
|
741
748
|
|
742
749
|
class DummyDocument < ActiveTriples::Resource
|
743
750
|
configure :type => RDF::URI('http://example.org/Document')
|
744
|
-
property :title, :predicate => RDF::DC.title
|
745
|
-
property :creator, :predicate => RDF::DC.creator, :class_name => 'DummyPerson'
|
751
|
+
property :title, :predicate => RDF::Vocab::DC.title
|
752
|
+
property :creator, :predicate => RDF::Vocab::DC.creator, :class_name => 'DummyPerson'
|
746
753
|
end
|
747
754
|
|
748
|
-
LD4L::OpenAnnotationRDF::Annotation.property :item, :predicate => RDF::DC.relation, :class_name => DummyDocument
|
755
|
+
LD4L::OpenAnnotationRDF::Annotation.property :item, :predicate => RDF::Vocab::DC.relation, :class_name => DummyDocument
|
749
756
|
end
|
750
757
|
|
751
758
|
subject { LD4L::OpenAnnotationRDF::Annotation.new }
|
@@ -800,8 +807,10 @@ END
|
|
800
807
|
document1.creator = [person1, person2]
|
801
808
|
document2.creator = person1
|
802
809
|
person1.knows = person2
|
810
|
+
person2.knows = person1
|
803
811
|
subject.item = [document1]
|
804
|
-
expect(subject.item.first.creator.first.knows.first.foafname)
|
812
|
+
expect(subject.item.first.creator.first.knows.first.foafname)
|
813
|
+
.to satisfy { |names| ['Alice', 'Bob'].include? names.first }
|
805
814
|
end
|
806
815
|
end
|
807
816
|
end
|