triannon 0.5.4 → 0.5.5

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 4bc729d85bad88af4e64d97bb59bcb387cf24bcd
4
- data.tar.gz: c64868417a72673f936d3ab09e465bd3027f5b28
3
+ metadata.gz: bfed3de76ceff6faec0e84730e6d0e66177c0e2c
4
+ data.tar.gz: 08d53c74dc0facd2974a95640101e971eadcf0df
5
5
  SHA512:
6
- metadata.gz: 1bc829a33741ab23ca40e69d981f1701b2ce0556618274f107727dee8403a7481d12cfe3eefb207d761d275ec7dcdbda9cc1f4cb0e488e67617154edd917e544
7
- data.tar.gz: 2e8440b488dde0e2dfb9f826979da480552209614cd5150108fb6be57bf17b2f28ca525e387bd4178502e4cfc02e3fe1683bd1e47e07b332fbd3f2f2736ace9c
6
+ metadata.gz: c0d4eb37e3692bdf5b25b94bf931fe581ed3653cc1d417a0e74aeedbf33f92c2cdd3ae4b548db8a4f03fe0c5b2d5fe025c7c094bf922e09c892bc40877b67f97
7
+ data.tar.gz: 0910a11f4e22e70d90a14538918a7f73f142d7adc6fb7cde4f1e3f50a4f1e39dc24c5caac307089d4620d54d0d7c0d7b13d393e1ca7c964b48e3116504b91172
data/README.md CHANGED
@@ -12,9 +12,9 @@ Run tests:
12
12
  $ rake
13
13
  ```
14
14
 
15
- ## Installation
15
+ ## Installation into Rails app
16
16
 
17
- Add this line to your gemfile
17
+ Add this line to your Rails app gemfile
18
18
 
19
19
  ```ruby
20
20
  gem 'triannon'
@@ -38,69 +38,68 @@ Edit the `config/triannon.yml` file:
38
38
  * `solr_url:` Points to the baseurl of Solr instance configured for Triannon
39
39
  * `triannon_base_url:` Used as the base url for all annotations hosted by your Triannon server. Identifiers from the LDP server will be appended to this base-url. Generally something like "https://your-triannon-rails-box/annotations", as "/annotations" is added to the path by the Triannon gem
40
40
 
41
- Generate the root annotations container on the LDP server
41
+ Generate the root annotations container on your LDP server
42
42
 
43
43
  ```console
44
44
  $ rake triannon:create_root_container
45
45
  ```
46
46
 
47
- # Client Interactions with Triannon
47
+ ## Client Interactions with Triannon
48
48
 
49
49
  ### Get a list of annos
50
50
  NOTE: implementation of Annotation Lists is coming!
51
- GET: http://(host)/
52
- GET: http://(host)/annotations
51
+ * `GET`: `http://(host)/`
52
+ * `GET`: `http://(host)/annotations`
53
53
 
54
54
  ### Get a particular anno
55
- GET: http://(host)/annotations/(anno_id)
56
- * use HTTP Accept header with mime type to indicate desired format
57
- ** default: jsonld
58
- *** indicate desired context url in the HTTP Accept header thus:
59
- **** Accept: application/ld+json; profile="http://www.w3.org/ns/oa-context-20130208.json"
60
- **** Accept: application/ld+json; profile="http://iiif.io/api/presentation/2/context.json"
61
-
62
- ** also supports turtle, rdfxml, json, html
63
- *** indicated desired context url for jsonld as json in the HTTP Link header thus:
64
- **** Accept: application/json
65
- **** Link: http://www.w3.org/ns/oa.json; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"
66
- ***** note that the "type" part is optional and refers to the type of the rel, which is the reference for all json-ld contexts.
67
- ** see https://github.com/sul-dlss/triannon/blob/master/app/controllers/triannon/annotations_controller.rb #show method for mime formats accepted
55
+ `GET`: `http://(host)/annotations/(anno_id)`
56
+
57
+ * use HTTP `Accept` header with mime type to indicate desired format
58
+ * default: jsonld
59
+ * indicate desired context url in the HTTP Accept header thus:
60
+ * `Accept`: `application/ld+json; profile="http://www.w3.org/ns/oa-context-20130208.json"`
61
+ * `Accept`: `application/ld+json; profile="http://iiif.io/api/presentation/2/context.json"`
62
+ * also supports turtle, rdfxml, json, html
63
+ * indicated desired context url for jsonld as json in the HTTP Link header thus:
64
+ * `Accept`: `application/json`
65
+ * `Link`: `http://www.w3.org/ns/oa.json; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"`
66
+ * note that the "type" part is optional and refers to the type of the rel, which is the reference for all json-ld contexts.
67
+ * see https://github.com/sul-dlss/triannon/blob/master/app/controllers/triannon/annotations_controller.rb #show method for mime formats accepted
68
68
 
69
69
  #### JSON-LD context
70
70
  You can request IIIF or OA context for jsonld.
71
71
 
72
72
  The correct way:
73
- GET: http://(host)/annotations/(anno_id)
74
- * use HTTP Accept header with mime type and context url:
75
- ** Accept: application/ld+json; profile="http://www.w3.org/ns/oa-context-20130208.json"
76
- ** Accept: application/ld+json; profile="http://iiif.io/api/presentation/2/context.json"
73
+ * use HTTP `Accept` header with mime type and context url:
74
+ * `Accept`: `application/ld+json; profile="http://www.w3.org/ns/oa-context-20130208.json"`
75
+ * `Accept`: `application/ld+json; profile="http://iiif.io/api/presentation/2/context.json"`
77
76
 
78
77
  You can also use either of these methods (with the correct HTTP Accept header):
79
78
 
80
- GET: http://(host)/annotations/iiif/(anno_id)
81
- GET: http://(host)/annotations/(anno_id)?jsonld_context=iiif
79
+ * `GET`: `http://(host)/annotations/iiif/(anno_id)`
80
+ * `GET`: `http://(host)/annotations/(anno_id)?jsonld_context=iiif`
82
81
 
83
- GET: http://(host)/annotations/oa/(anno_id)
84
- GET: http://(host)/annotations/(anno_id)?jsonld_context=oa
82
+ * `GET`:` http://(host)/annotations/oa/(anno_id)`
83
+ * `GET`: `http://(host)/annotations/(anno_id)?jsonld_context=oa`
85
84
 
86
85
  Note that OA (Open Annotation) is the default context if none is specified.
87
86
 
88
87
  ### Create an anno
89
- POST: http://(host)/annotations
88
+ `POST`: `http://(host)/annotations`
90
89
  * the body of the HTTP request should contain the annotation, as jsonld, turtle, or rdfxml
91
- * the Content-Type header should be the mime type matching the body
90
+ * the `Content-Type` header should be the mime type matching the body
92
91
  * the anno to be created should NOT already have an assigned @id
93
- * to get a particular format back, use the HTTP Accept header
94
- ** to get a particular context for jsonld, do one of the following:
95
- **** Accept: application/ld+json; profile="http://www.w3.org/ns/oa-context-20130208.json"
96
- **** Accept: application/ld+json; profile="http://iiif.io/api/presentation/2/context.json"
97
- ** to get a particular jsonld context for jsonld as json, specify it in the HTTP Link header thus:
98
- **** Accept: application/json
99
- **** Link: http://www.w3.org/ns/oa.json; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"
100
- ***** note that the "type" part is optional and refers to the type of the rel, which is the reference for all json-ld contexts.
92
+ * to get a particular format back, use the HTTP `Accept` header
93
+ * to get a particular context for jsonld, do one of the following:
94
+ * `Accept`: `application/ld+json; profile="http://www.w3.org/ns/oa-context-20130208.json"`
95
+ * `Accept`: `application/ld+json; profile="http://iiif.io/api/presentation/2/context.json"`
96
+ * to get a particular jsonld context for jsonld as json, specify it in the HTTP Link header thus:
97
+ * `Accept`: `application/json`
98
+ * `Link`: `http://www.w3.org/ns/oa.json; rel="http://www.w3.org/ns/json-ld#context"; type="application/ld+json"`
99
+ * note that the "type" part is optional and refers to the type of the rel, which is the reference for all json-ld contexts.
101
100
 
102
101
  ### Delete an anno
103
- DELETE: http://(host)/annotations/(anno_id)
102
+ `DELETE`: `http://(host)/annotations/(anno_id)`
104
103
 
105
104
 
106
105
  ## Running the application in development
@@ -124,16 +123,25 @@ rake triannon:solr_jetty_setup
124
123
  $ rake engine_cart:generate # (first run only)
125
124
  ```
126
125
 
127
- ##### Configure spec/internal/config/triannon.yml as specified above
126
+ #### Start jetty
128
127
  ```console
129
- $ vi spec/internal/config/triannon.yml
128
+ $ rake jetty:start
130
129
  ```
131
130
 
132
131
  ##### Generate root annotations container
133
132
  ```console
133
+ $ cd spec/internal
134
134
  $ rake triannon:create_root_container
135
+ $ cd ../..
135
136
  ```
136
137
 
138
+ ##### Configure spec/internal/config/triannon.yml as specified above
139
+ You might not need to change the file.
140
+ ```console
141
+ $ vi spec/internal/config/triannon.yml
142
+ ```
143
+
144
+
137
145
  # Run the test app
138
146
  ```console
139
147
  $ rake jetty:start
@@ -74,34 +74,35 @@ module Triannon
74
74
 
75
75
  if @annotation.save
76
76
  default_format_jsonld # NOTE: this must be here and not in before_filter or we get Missing template errors
77
+ flash[:notice] = "Annotation #{@annotation.id} was successfully created."
77
78
  respond_to do |format|
78
79
  format.jsonld {
79
80
  context_url = context_url_from_link ? context_url_from_link : context_url_from_accept
80
81
  if context_url && context_url == Triannon::JsonldContext::IIIF_CONTEXT_URL
81
- render :json => @annotation.jsonld_iiif, status: 201, content_type: "application/ld+json", notice: "Annotation #{@annotation.id} was successfully created."
82
+ render :json => @annotation.jsonld_iiif, status: 201, content_type: "application/ld+json"
82
83
  else
83
- render :json => @annotation.jsonld_oa, status: 201, content_type: "application/ld+json", notice: "Annotation #{@annotation.id} was successfully created."
84
+ render :json => @annotation.jsonld_oa, status: 201, content_type: "application/ld+json"
84
85
  end
85
86
  }
86
87
  format.ttl {
87
88
  accept_return_type = mime_type_from_accept(["application/x-turtle", "text/turtle"])
88
- render :body => @annotation.graph.to_ttl, status: 201, notice: "Annotation #{@annotation.id} was successfully created.", content_type: accept_return_type if accept_return_type }
89
+ render :body => @annotation.graph.to_ttl, status: 201, content_type: accept_return_type if accept_return_type }
89
90
  format.rdfxml {
90
91
  accept_return_type = mime_type_from_accept(["application/rdf+xml", "text/rdf+xml", "text/rdf"])
91
- render :body => @annotation.graph.to_rdfxml, status: 201, notice: "Annotation #{@annotation.id} was successfully created.", content_type: accept_return_type if accept_return_type }
92
+ render :body => @annotation.graph.to_rdfxml, status: 201, content_type: accept_return_type if accept_return_type }
92
93
  format.json {
93
94
  accept_return_type = mime_type_from_accept(["application/json", "text/x-json", "application/jsonrequest"])
94
95
  context_url = context_url_from_link ? context_url_from_link : context_url_from_accept
95
96
  if context_url && context_url == Triannon::JsonldContext::IIIF_CONTEXT_URL
96
- render :json => @annotation.jsonld_iiif, status: 201, notice: "Annotation #{@annotation.id} was successfully created.", content_type: accept_return_type if accept_return_type
97
+ render :json => @annotation.jsonld_iiif, status: 201, content_type: accept_return_type if accept_return_type
97
98
  else
98
- render :json => @annotation.jsonld_oa, status: 201, notice: "Annotation #{@annotation.id} was successfully created.", content_type: accept_return_type if accept_return_type
99
+ render :json => @annotation.jsonld_oa, status: 201, content_type: accept_return_type if accept_return_type
99
100
  end
100
101
  }
101
102
  format.xml {
102
103
  accept_return_type = mime_type_from_accept(["application/xml", "text/xml", "application/x-xml"])
103
- render :body => @annotation.graph.to_rdfxml, status: 201, notice: "Annotation #{@annotation.id} was successfully created.", content_type: accept_return_type if accept_return_type }
104
- format.html { render :show, location: @annotation, status: 201, content_type: "text/html", notice: "Annotation #{@annotation.id} was successfully created." }
104
+ render :body => @annotation.graph.to_rdfxml, status: 201, content_type: accept_return_type if accept_return_type }
105
+ format.html { redirect_to @annotation }
105
106
  end
106
107
  else
107
108
  render :new, status: 400
@@ -58,6 +58,10 @@ module Triannon
58
58
  raise Triannon::ExternalReferenceError, "Incoming annotations may not have http://triannon.stanford.edu/ns/externalReference as a predicate."
59
59
  end
60
60
 
61
+ if @anno.graph.id_as_url && @anno.graph.id_as_url.size > 0
62
+ raise Triannon::ExternalReferenceError, "Incoming new annotations may not have an existing id (yet)."
63
+ end
64
+
61
65
  # TODO: special case if the Annotation object already has an id --
62
66
  # see https://github.com/sul-dlss/triannon/issues/84
63
67
 
@@ -94,12 +94,13 @@ module Triannon
94
94
 
95
95
  # Canned Query methods ----------------------------------------------------------------
96
96
 
97
- # @return [String] the id of this annotation as a url string
97
+ # @return [String] the id of this annotation as a url string, or nil if it is a Node
98
98
  def id_as_url
99
99
  solution = @graph.query self.class.anno_query
100
100
  if solution && solution.size == 1
101
- solution.first.s.to_s
102
- # TODO: raise exception if not a URI or missing?
101
+ rdf_resource = solution.first.s
102
+ rdf_resource.to_s if rdf_resource.is_a?(RDF::URI)
103
+ # TODO: raise exception if not a URI?
103
104
  end
104
105
  end
105
106
 
@@ -1,3 +1,3 @@
1
1
  module Triannon
2
- VERSION = "0.5.4"
2
+ VERSION = "0.5.5"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: triannon
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.5.4
4
+ version: 0.5.5
5
5
  platform: ruby
6
6
  authors:
7
7
  - Chris Beer
@@ -10,7 +10,7 @@ authors:
10
10
  autorequire:
11
11
  bindir: bin
12
12
  cert_chain: []
13
- date: 2015-03-10 00:00:00.000000000 Z
13
+ date: 2015-03-12 00:00:00.000000000 Z
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency
16
16
  name: rails
@@ -18,14 +18,14 @@ dependencies:
18
18
  requirements:
19
19
  - - "~>"
20
20
  - !ruby/object:Gem::Version
21
- version: 4.2.0
21
+ version: '4.2'
22
22
  type: :runtime
23
23
  prerelease: false
24
24
  version_requirements: !ruby/object:Gem::Requirement
25
25
  requirements:
26
26
  - - "~>"
27
27
  - !ruby/object:Gem::Version
28
- version: 4.2.0
28
+ version: '4.2'
29
29
  - !ruby/object:Gem::Dependency
30
30
  name: linkeddata
31
31
  requirement: !ruby/object:Gem::Requirement
@@ -184,16 +184,16 @@ dependencies:
184
184
  name: engine_cart
185
185
  requirement: !ruby/object:Gem::Requirement
186
186
  requirements:
187
- - - "~>"
187
+ - - ">="
188
188
  - !ruby/object:Gem::Version
189
- version: '0.4'
189
+ version: '0'
190
190
  type: :development
191
191
  prerelease: false
192
192
  version_requirements: !ruby/object:Gem::Requirement
193
193
  requirements:
194
- - - "~>"
194
+ - - ">="
195
195
  - !ruby/object:Gem::Version
196
- version: '0.4'
196
+ version: '0'
197
197
  - !ruby/object:Gem::Dependency
198
198
  name: jettywrapper
199
199
  requirement: !ruby/object:Gem::Requirement