triannon-client 0.1.0 → 0.2.0.pre.0.rc1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.env_example +1 -1
- data/.travis.yml +1 -2
- data/README.md +12 -3
- data/bin/test.sh +8 -9
- data/lib/triannon-client.rb +8 -3
- data/lib/triannon-client/triannon_client.rb +180 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/n-quads_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/n-triples_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/rdf_json_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/rdf_n3_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/trig_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/trix_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/turtle_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/x-ld_json_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_application/x-trig_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_text/n3_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_text/rdf_n3_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_text/rdf_turtle_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/cannot_get_an_open_annotation_by_ID_with_content_type_text/x-nquads_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/ld_json_.yml +4946 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/n-quads_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/n-triples_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/rdf_json_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/rdf_n3_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/rdf_xml_.yml +2565 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/trig_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/trix_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/turtle_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/x-ld_json_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/x-trig_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_application/x-turtle_.yml +2566 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_text/n3_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_text/rdf_n3_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_text/rdf_turtle_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_text/turtle_.yml +2566 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/gets_an_open_annotation_by_ID_with_content_type_text/x-nquads_.yml +4088 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_accepting_JSON-LD_content.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_accepting_a_default_JSON-LD_content.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_using_a_default_JSON-LD_content.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/ld_json_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/n-quads_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/n-triples_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/rdf_json_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/rdf_n3_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/rdf_xml_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/trig_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/trix_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/turtle_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/x-ld_json_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/x-trig_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_application/x-turtle_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_text/n3_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_text/rdf_n3_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_text/rdf_turtle_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_text/turtle_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_content_type_text/x-nquads_.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_optional_content_type_parameter.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_content_type/requests_an_open_annotation_by_ID_with_turtle_content_type_parameter.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/checks_the_annotation_ID.yml +2561 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/logs_exceptions.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/raises_an_argument_error_with_a_nil_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/raises_an_argument_error_with_an_empty_string_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/raises_an_argument_error_with_an_integer_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/returns_an_EMPTY_RDF_graph_for_a_500_server_response.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/returns_an_EMPTY_RDF_graph_with_a_valid_ID_for_NO_annotation_on_the_server.yml +3623 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/with_no_content_type/returns_an_RDF_graph_with_a_valid_ID_for_an_annotation_on_the_server.yml +4946 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/checks_the_annotation_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/logs_exceptions.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/raises_an_argument_error_with_a_nil_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/raises_an_argument_error_with_an_empty_string_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/raises_an_argument_error_with_an_integer_ID.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/requests_an_open_annotation_by_ID_accepting_a_default_JSON-LD_content.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/returns_an_EMPTY_RDF_graph_for_a_500_server_response.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/returns_an_EMPTY_RDF_graph_with_a_valid_ID_for_NO_annotation_on_the_server.yml +3328 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_annotation/without_content_type/returns_an_RDF_graph_with_a_valid_ID_for_an_annotation_on_the_server.yml +4946 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_iiif_annotation/requests_an_open_annotation_by_ID_using_a_IIIF_profile.yml +2746 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_iiif_annotation/returns_an_RDF_Graph_of_an_open_annotation.yml +2746 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_oa_annotation/requests_an_open_annotation_by_ID_using_an_OA_profile.yml +4946 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/GET_annotation_by_ID_/_get_oa_annotation/returns_an_RDF_Graph_of_an_open_annotation.yml +4946 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/deletes_an_open_annotation_that_exists.yml +2548 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/fails_to_delete_an_open_annotation_that_does_NOT_exist.yml +123 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/returns_false_for_a_500_response_to_a_DELETE_request.yml +64 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/returns_true_for_a_200_response_to_a_DELETE_request.yml +64 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/returns_true_for_a_202_response_to_a_DELETE_request.yml +64 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/returns_true_for_a_204_response_to_a_DELETE_request.yml +64 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_delete_annotation/validates_the_annotation_ID.yml +64 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_get_annotations/returns_an_RDF_Graph.yml +295 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_get_annotations/returns_an_RDF_Graph_that_contains_an_AnnotationList.yml +295 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_get_annotations/returns_an_annotation_list_with_an_annotation_created_by_a_prior_POST.yml +2795 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_post_annotation/does_not_raise_an_error_when_submitting_a_valid_open_annotation.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/_post_annotation/returns_a_RestClient_Response_object.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_annotation_id/returns_a_String_ID_from_the_RDF_URI_of_an_annotation.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_annotation_id/returns_a_String_ID_that_is_not_empty.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_annotation_uri/returns_an_RDF_URI_from_an_RDF_Graph_of_an_annotation.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_annotation_uri/returns_an_RDF_URI_that_is_a_valid_URI.yml +2550 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_response2graph/accepts_a_RestClient_Response_instance.yml +4898 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_response2graph/raises_ArgumentError_when_given_an_empty_String.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_response2graph/raises_ArgumentError_when_given_nil.yml +2502 -0
- data/spec/fixtures/vcr_cassettes/TriannonClient/response_processing_utilities/_response2graph/returns_an_RDF_Graph.yml +2502 -0
- data/spec/lib/triannon-client/triannon_client_spec.rb +502 -0
- data/spec/spec_helper.rb +12 -1
- data/triannon-client.gemspec +5 -2
- metadata +234 -7
- data/Gemfile.lock +0 -203
- data/lib/triannon-client/triannon-client.rb +0 -135
- data/spec/lib/triannon-client/triannon-client_spec.rb +0 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f0c1db12b26befc300bf3361898e2b563aa30665
|
4
|
+
data.tar.gz: 74d9163686393f4d6e9e94b9794c436763d89f4c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 6b401b1b4607a4ca99d4bd05c7330fd92696b5e846f6f9a69cdb4b7acda23a4bd019311926769edb1d1f3ba5e0b40da04b50198fd5d601c50e28aa0276da55a0
|
7
|
+
data.tar.gz: 5757bdfcc9b73fba5bea1ec3d069bd46d352a303e0129bb7b077c2f189f7b051c4a8d2d1cf11b621864004dbf3a1f745a78186fc9da70b3934be6e9757b1ca99
|
data/.env_example
CHANGED
@@ -11,7 +11,7 @@ export DEBUG=false
|
|
11
11
|
export TRIANNON_LOG_FILE='log/triannon_client.log'
|
12
12
|
|
13
13
|
# Configure the triannon service
|
14
|
-
export TRIANNON_HOST='
|
14
|
+
export TRIANNON_HOST='http://localhost:3000'
|
15
15
|
export TRIANNON_USER=''
|
16
16
|
export TRIANNON_PASS=''
|
17
17
|
|
data/.travis.yml
CHANGED
data/README.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
[![Build Status](https://travis-ci.org/sul-dlss/triannon-client.svg?branch=master)](https://travis-ci.org/sul-dlss/triannon-client) [![Coverage Status](https://coveralls.io/repos/sul-dlss/triannon-client/badge.png)](https://coveralls.io/r/sul-dlss/triannon-client) [![Dependency Status](https://gemnasium.com/sul-dlss/triannon-client.svg)](https://gemnasium.com/sul-dlss/triannon-client) [![Gem Version](https://badge.fury.io/rb/triannon-client.svg)](http://badge.fury.io/rb/triannon-client)
|
2
2
|
|
3
|
+
|
4
|
+
# Under construction!
|
5
|
+
|
6
|
+
Use at your own risk!
|
7
|
+
|
8
|
+
|
3
9
|
# Triannon Client
|
4
10
|
|
5
11
|
A client for the triannon service, see also
|
@@ -47,7 +53,7 @@ tc = TriannonClient::TriannonClient.new
|
|
47
53
|
|
48
54
|
```ruby
|
49
55
|
# return an RDF::Graph
|
50
|
-
graph = tc.
|
56
|
+
graph = tc.get_annotations
|
51
57
|
```
|
52
58
|
|
53
59
|
### Get a particular annotation
|
@@ -76,8 +82,11 @@ tc.post_annotation(open_annotation_jsonld)
|
|
76
82
|
|
77
83
|
### Delete an annotation
|
78
84
|
|
79
|
-
|
80
|
-
|
85
|
+
```ruby
|
86
|
+
uri = RDF::URI.parse('http://your.triannon-server.com/annotations/5314746b-f1eb-473a-a273-46c1afe5f530')
|
87
|
+
id = tc.annotation_id(uri) #=> 5314746b-f1eb-473a-a273-46c1afe5f530
|
88
|
+
tc.delete_annotation(id)
|
89
|
+
```
|
81
90
|
|
82
91
|
## Development
|
83
92
|
|
data/bin/test.sh
CHANGED
@@ -2,15 +2,14 @@
|
|
2
2
|
|
3
3
|
set -e
|
4
4
|
|
5
|
-
|
6
|
-
mv .env .env_bak
|
7
|
-
fi
|
8
|
-
|
5
|
+
[[ -s .env ]] && mv .env .env_bak
|
9
6
|
cp .env_example .env
|
10
|
-
.binstubs/rspec
|
11
|
-
#.binstubs/cucumber --strict
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
|
8
|
+
# The `|| echo ''` enables the bash script to continue after rspec failure
|
9
|
+
EXIT=0
|
10
|
+
.binstubs/rspec --color || EXIT=1
|
11
|
+
#.binstubs/cucumber --strict || EXIT=1
|
12
|
+
|
13
|
+
[[ -s .env_bak ]] && mv .env_bak .env
|
14
|
+
exit $EXIT
|
16
15
|
|
data/lib/triannon-client.rb
CHANGED
@@ -1,17 +1,23 @@
|
|
1
1
|
require 'dotenv'
|
2
2
|
Dotenv.load
|
3
|
+
# The pry dependency must be available when the client is configured to
|
4
|
+
# run in debug mode, where it will fall into a pry console for rescue blocks.
|
3
5
|
require 'pry'
|
4
6
|
require 'pry-doc'
|
5
7
|
# require rest client prior to linkeddata, so the latter can use it.
|
6
8
|
require 'rest-client'
|
9
|
+
# If a proxy is present, RestClient needs explicit configuration to use it.
|
10
|
+
# (The ruby stdlib http client will use a proxy automatically.)
|
7
11
|
RestClient.proxy = ENV['http_proxy'] unless ENV['http_proxy'].nil?
|
8
12
|
RestClient.proxy = ENV['HTTP_PROXY'] unless ENV['HTTP_PROXY'].nil?
|
9
13
|
require 'linkeddata'
|
10
14
|
require_relative 'triannon-client/configuration'
|
11
|
-
require_relative 'triannon-client/
|
15
|
+
require_relative 'triannon-client/triannon_client'
|
12
16
|
|
17
|
+
# TriannonClient is a utility wrapper on RestClient and RDF::Graph for
|
18
|
+
# working with open annotations in a Triannon server, see
|
19
|
+
# https://github.com/sul-dlss/triannon
|
13
20
|
module TriannonClient
|
14
|
-
|
15
21
|
# configuration at the module level, see
|
16
22
|
# http://brandonhilkert.com/blog/ruby-gem-configuration-patterns/
|
17
23
|
|
@@ -30,5 +36,4 @@ module TriannonClient
|
|
30
36
|
def self.configure
|
31
37
|
yield(configuration)
|
32
38
|
end
|
33
|
-
|
34
39
|
end
|
@@ -0,0 +1,180 @@
|
|
1
|
+
module TriannonClient
|
2
|
+
class TriannonClient
|
3
|
+
# Triannon may not support all content types in RDF::Format.content_types,
|
4
|
+
# but the client code is more generic using this as a reasonable set; this
|
5
|
+
# allows triannon to evolve support for anything supported by RDF::Format.
|
6
|
+
CONTENT_ERROR = 'content_type not found in RDF::Format.content_types'
|
7
|
+
CONTENT_TYPES = RDF::Format.content_types.keys
|
8
|
+
|
9
|
+
JSONLD_TYPE = 'application/ld+json'
|
10
|
+
PROFILE_IIIF = 'http://iiif.io/api/presentation/2/context.json'
|
11
|
+
PROFILE_OA = 'http://www.w3.org/ns/oa-context-20130208.json'
|
12
|
+
CONTENT_TYPE_IIIF = "#{JSONLD_TYPE}; profile=\"#{PROFILE_IIIF}\""
|
13
|
+
CONTENT_TYPE_OA = "#{JSONLD_TYPE}; profile=\"#{PROFILE_OA}\""
|
14
|
+
|
15
|
+
attr_reader :config
|
16
|
+
attr_accessor :site
|
17
|
+
|
18
|
+
def initialize
|
19
|
+
# Configure triannon-app service
|
20
|
+
@config = ::TriannonClient.configuration
|
21
|
+
@site = RestClient::Resource.new(
|
22
|
+
@config.host,
|
23
|
+
user: @config.user,
|
24
|
+
password: @config.pass,
|
25
|
+
open_timeout: 5,
|
26
|
+
read_timeout: 30
|
27
|
+
)
|
28
|
+
end
|
29
|
+
|
30
|
+
# Delete an annotation
|
31
|
+
# @param id [String] an annotation ID
|
32
|
+
# @response [true|false] true when successful
|
33
|
+
def delete_annotation(id)
|
34
|
+
check_id(id)
|
35
|
+
begin
|
36
|
+
response = @site["/annotations/#{id}"].delete
|
37
|
+
# HTTP DELETE response codes: A successful response SHOULD be
|
38
|
+
# 200 (OK) if the response includes an entity describing the status,
|
39
|
+
# 202 (Accepted) if the action has not yet been enacted, or
|
40
|
+
# 204 (No Content) if the action has been enacted but the response
|
41
|
+
# does not include an entity.
|
42
|
+
[200, 202, 204].include? response.code
|
43
|
+
rescue => e
|
44
|
+
binding.pry if @config.debug
|
45
|
+
@config.logger.error("Failed to DELETE annotation: #{id}, #{e.message}")
|
46
|
+
false
|
47
|
+
end
|
48
|
+
end
|
49
|
+
|
50
|
+
# POST and open annotation to triannon; the response contains an ID
|
51
|
+
# @param oa [JSON-LD] a json-ld object with an open annotation context
|
52
|
+
# @return response [RestClient::Response|nil]
|
53
|
+
def post_annotation(oa)
|
54
|
+
post_data = {
|
55
|
+
'commit' => 'Create Annotation',
|
56
|
+
'annotation' => {'data' => oa}
|
57
|
+
}
|
58
|
+
response = nil
|
59
|
+
tries = 0
|
60
|
+
begin
|
61
|
+
tries += 1
|
62
|
+
# TODO: add Accept content type, somehow?
|
63
|
+
response = @site["/annotations/"].post post_data, :content_type => JSONLD_TYPE, :accept => JSONLD_TYPE
|
64
|
+
rescue => e
|
65
|
+
sleep 1*tries
|
66
|
+
retry if tries < 3
|
67
|
+
response = e.response
|
68
|
+
binding.pry if @config.debug
|
69
|
+
@config.logger.error("Failed to POST annotation: #{response.code}: #{response.body}")
|
70
|
+
end
|
71
|
+
return response
|
72
|
+
end
|
73
|
+
|
74
|
+
# Get annotations
|
75
|
+
# @param content_type [String] HTTP mime type (defaults to 'application/ld+json')
|
76
|
+
# @response [RDF::Graph] RDF::Graph of open annotations (can be empty on failure)
|
77
|
+
def get_annotations(content_type=JSONLD_TYPE)
|
78
|
+
check_content_type(content_type)
|
79
|
+
begin
|
80
|
+
response = @site['/annotations'].get({:accept => content_type})
|
81
|
+
# TODO: switch yard for different response.code?
|
82
|
+
# TODO: log a failure for a response.code == 404
|
83
|
+
response2graph(response)
|
84
|
+
rescue => e
|
85
|
+
binding.pry if @config.debug
|
86
|
+
@config.logger.error("Failed to GET annotations: #{e.message}")
|
87
|
+
RDF::Graph.new # return an empty graph
|
88
|
+
end
|
89
|
+
end
|
90
|
+
|
91
|
+
# Get an annotation (with a default annotation context)
|
92
|
+
# @param id [String] String representation of an annotation ID
|
93
|
+
# @param content_type [String] HTTP mime type (defaults to 'application/ld+json')
|
94
|
+
# @response [RDF::Graph] RDF::Graph of the annotation (can be empty on failure)
|
95
|
+
def get_annotation(id, content_type=JSONLD_TYPE)
|
96
|
+
check_id(id)
|
97
|
+
check_content_type(content_type)
|
98
|
+
uri = "/annotations/#{id}"
|
99
|
+
begin
|
100
|
+
response = @site[uri].get({:accept => content_type})
|
101
|
+
# TODO: switch yard for different response.code?
|
102
|
+
response2graph(response)
|
103
|
+
rescue => e
|
104
|
+
# response = e.response
|
105
|
+
binding.pry if @config.debug
|
106
|
+
@config.logger.error("Failed to GET annotation: #{id}, #{e.message}")
|
107
|
+
RDF::Graph.new # return an empty graph
|
108
|
+
end
|
109
|
+
end
|
110
|
+
|
111
|
+
# Get an annotation using a IIIF context
|
112
|
+
# @param id [String] String representation of an annotation ID
|
113
|
+
# @response [RDF::Graph] RDF::Graph of the annotation (can be empty on failure)
|
114
|
+
def get_iiif_annotation(id)
|
115
|
+
get_annotation(id, CONTENT_TYPE_IIIF)
|
116
|
+
end
|
117
|
+
|
118
|
+
# Get an annotation using an open annotation context
|
119
|
+
# @param id [String] String representation of an annotation ID
|
120
|
+
# @response [RDF::Graph] RDF::Graph of the annotation (can be empty on failure)
|
121
|
+
def get_oa_annotation(id)
|
122
|
+
get_annotation(id, CONTENT_TYPE_OA)
|
123
|
+
end
|
124
|
+
|
125
|
+
# Parse a Triannon response into an RDF::Graph
|
126
|
+
# @param response [RestClient::Response] A RestClient::Response from Triannon
|
127
|
+
# @response graph [RDF::Graph] An RDF::Graph instance
|
128
|
+
def response2graph(response)
|
129
|
+
unless response.is_a? RestClient::Response
|
130
|
+
raise ArgumentError, 'response must be a RestClient::Response'
|
131
|
+
end
|
132
|
+
content_type = response.headers[:content_type]
|
133
|
+
check_content_type(content_type)
|
134
|
+
g = RDF::Graph.new
|
135
|
+
begin
|
136
|
+
format = RDF::Format.for(:content_type => content_type)
|
137
|
+
format.reader.new(response) do |reader|
|
138
|
+
reader.each_statement {|s| g << s }
|
139
|
+
end
|
140
|
+
rescue
|
141
|
+
binding.pry if @config.debug
|
142
|
+
@config.logger.error("Failed to parse response into RDF::Graph: #{e.message}")
|
143
|
+
end
|
144
|
+
g
|
145
|
+
end
|
146
|
+
|
147
|
+
# query an annotation graph to extract a URI for the first open annotation
|
148
|
+
# @param graph [RDF::Graph] An RDF::Graph of an open annotation
|
149
|
+
# @response uri [RDF::URI|nil] A URI for an open annotation
|
150
|
+
def annotation_uri(graph)
|
151
|
+
raise ArgumentError, 'graph is not an RDF::Graph' unless graph.instance_of? RDF::Graph
|
152
|
+
q = [:s, RDF.type, RDF::Vocab::OA.Annotation]
|
153
|
+
graph.query(q).collect {|s| s.subject }.first
|
154
|
+
end
|
155
|
+
|
156
|
+
# extract an annotation ID from the URI
|
157
|
+
# @param uri [RDF::URI] An RDF::URI for an annotation
|
158
|
+
# @response id [String|nil] An ID for an annotation
|
159
|
+
def annotation_id(uri)
|
160
|
+
raise ArgumentError, 'uri is not an RDF::URI' unless uri.instance_of? RDF::URI
|
161
|
+
uri.path.split('/').last
|
162
|
+
end
|
163
|
+
|
164
|
+
|
165
|
+
private
|
166
|
+
|
167
|
+
def check_content_type(content_type)
|
168
|
+
type = content_type.split(';').first # strip off any parameters
|
169
|
+
raise ArgumentError, CONTENT_ERROR unless CONTENT_TYPES.include? type
|
170
|
+
end
|
171
|
+
|
172
|
+
def check_id(id)
|
173
|
+
raise ArgumentError, 'ID must be a String' unless id.instance_of? String
|
174
|
+
raise ArgumentError, 'Invalid ID' if id.nil? || id.empty?
|
175
|
+
end
|
176
|
+
|
177
|
+
end
|
178
|
+
|
179
|
+
end
|
180
|
+
|
@@ -0,0 +1,4088 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: http://localhost:3000/annotations/
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: commit=Create%20Annotation&annotation[data]=%7B%22%40context%22%3A%22http%3A%2F%2Fiiif.io%2Fapi%2Fpresentation%2F2%2Fcontext.json%22%2C%22%40graph%22%3A%5B%7B%22%40id%22%3A%22_%3Ag70349699654640%22%2C%22%40type%22%3A%5B%22dctypes%3AText%22%2C%22cnt%3AContentAsText%22%5D%2C%22chars%22%3A%22I%20love%20this!%22%2C%22format%22%3A%22text%2Fplain%22%2C%22language%22%3A%22en%22%7D%2C%7B%22%40type%22%3A%22oa%3AAnnotation%22%2C%22motivation%22%3A%22oa%3Acommenting%22%2C%22on%22%3A%22http%3A%2F%2Fpurl.stanford.edu%2Fkq131cs7229%22%2C%22resource%22%3A%22_%3Ag70349699654640%22%7D%5D%7D
|
9
|
+
headers:
|
10
|
+
Accept:
|
11
|
+
- application/ld+json
|
12
|
+
Accept-Encoding:
|
13
|
+
- gzip, deflate
|
14
|
+
Content-Type:
|
15
|
+
- application/x-www-form-urlencoded
|
16
|
+
Content-Length:
|
17
|
+
- '580'
|
18
|
+
User-Agent:
|
19
|
+
- Ruby
|
20
|
+
response:
|
21
|
+
status:
|
22
|
+
code: 201
|
23
|
+
message: 'Created '
|
24
|
+
headers:
|
25
|
+
X-Frame-Options:
|
26
|
+
- SAMEORIGIN
|
27
|
+
X-Xss-Protection:
|
28
|
+
- 1; mode=block
|
29
|
+
X-Content-Type-Options:
|
30
|
+
- nosniff
|
31
|
+
Content-Type:
|
32
|
+
- application/ld+json; charset=utf-8
|
33
|
+
Etag:
|
34
|
+
- W/"f113b0552ba9dbec937aeba328b64bb1"
|
35
|
+
Cache-Control:
|
36
|
+
- max-age=0, private, must-revalidate
|
37
|
+
X-Request-Id:
|
38
|
+
- 11e54218-2a3d-4b0f-8897-942728ada5da
|
39
|
+
X-Runtime:
|
40
|
+
- '2.558069'
|
41
|
+
Server:
|
42
|
+
- WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
|
43
|
+
Date:
|
44
|
+
- Tue, 05 May 2015 19:18:18 GMT
|
45
|
+
Content-Length:
|
46
|
+
- '431'
|
47
|
+
Connection:
|
48
|
+
- Keep-Alive
|
49
|
+
Set-Cookie:
|
50
|
+
- _internal_session=dW9OVzkrMjZ2U2FSdWZmbXY3UnFIKzBDanVUTzBqN0JxR0tnOVdRUjExMk9pZEx5Rnp1SCtPYXczczYxaTdBMDR6M2tMTTNhT0VwM251RW9NakNXU1RKd3QzUktETllaRlRUeGxMZmVTc1RBcFNlbEhiT3hvWThUbUFhakZJYU1lbnZyekIrOTBSN2xtYlJUMUozeCthVEs4T3lzT1k1K1pib1pxajUxYTh0TURhb0NMVWN6KzVNejVLOW9BZEVOMDFVZXZRNVNqVDc4aHZ2MG9PMW4ydXhQQ2NPNWZJNk5xc0ZPM3BzYzA5ST0tLXFaOFh6MkJDSWgyZ3o3VzRoN0EvZkE9PQ%3D%3D--d9f7edfc721e0d55f30eea241672fd520c12ef69;
|
51
|
+
path=/; HttpOnly
|
52
|
+
- request_method=POST; path=/
|
53
|
+
body:
|
54
|
+
encoding: UTF-8
|
55
|
+
string: '{"@context":"http://www.w3.org/ns/oa-context-20130208.json","@graph":[{"@id":"_:g70090571180100","@type":["dctypes:Text","cnt:ContentAsText"],"chars":"I
|
56
|
+
love this!","format":"text/plain","language":"en"},{"@id":"http://your.triannon-server.com/annotations/875190ee-1fa4-4298-916b-147d1cbce91f","@type":"oa:Annotation","hasBody":"_:g70090571180100","hasTarget":"http://purl.stanford.edu/kq131cs7229","motivatedBy":"oa:commenting"}]}'
|
57
|
+
http_version:
|
58
|
+
recorded_at: Tue, 05 May 2015 19:18:18 GMT
|
59
|
+
- request:
|
60
|
+
method: get
|
61
|
+
uri: http://www.w3.org/ns/oa-context-20130208.json
|
62
|
+
body:
|
63
|
+
encoding: US-ASCII
|
64
|
+
string: ''
|
65
|
+
headers:
|
66
|
+
Accept:
|
67
|
+
- application/ld+json, application/json
|
68
|
+
Accept-Encoding:
|
69
|
+
- gzip, deflate
|
70
|
+
User-Agent:
|
71
|
+
- Ruby
|
72
|
+
response:
|
73
|
+
status:
|
74
|
+
code: 307
|
75
|
+
message: Temporary Redirect
|
76
|
+
headers:
|
77
|
+
Date:
|
78
|
+
- Tue, 05 May 2015 19:18:18 GMT
|
79
|
+
Server:
|
80
|
+
- Apache/2
|
81
|
+
Location:
|
82
|
+
- http://www.w3.org/ns/oa.jsonld
|
83
|
+
Cache-Control:
|
84
|
+
- max-age=21600
|
85
|
+
Expires:
|
86
|
+
- Wed, 06 May 2015 01:18:18 GMT
|
87
|
+
Content-Length:
|
88
|
+
- '240'
|
89
|
+
Content-Type:
|
90
|
+
- text/html; charset=iso-8859-1
|
91
|
+
body:
|
92
|
+
encoding: UTF-8
|
93
|
+
string: |
|
94
|
+
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
95
|
+
<html><head>
|
96
|
+
<title>307 Temporary Redirect</title>
|
97
|
+
</head><body>
|
98
|
+
<h1>Temporary Redirect</h1>
|
99
|
+
<p>The document has moved <a href="http://www.w3.org/ns/oa.jsonld">here</a>.</p>
|
100
|
+
</body></html>
|
101
|
+
http_version:
|
102
|
+
recorded_at: Tue, 05 May 2015 19:18:18 GMT
|
103
|
+
- request:
|
104
|
+
method: get
|
105
|
+
uri: http://www.w3.org/ns/oa.jsonld
|
106
|
+
body:
|
107
|
+
encoding: US-ASCII
|
108
|
+
string: ''
|
109
|
+
headers:
|
110
|
+
Accept:
|
111
|
+
- application/ld+json, application/json
|
112
|
+
Accept-Encoding:
|
113
|
+
- gzip, deflate
|
114
|
+
Cookie:
|
115
|
+
- ''
|
116
|
+
User-Agent:
|
117
|
+
- Ruby
|
118
|
+
response:
|
119
|
+
status:
|
120
|
+
code: 200
|
121
|
+
message: OK
|
122
|
+
headers:
|
123
|
+
Date:
|
124
|
+
- Tue, 05 May 2015 19:18:18 GMT
|
125
|
+
Server:
|
126
|
+
- Apache/2
|
127
|
+
Last-Modified:
|
128
|
+
- Tue, 06 May 2014 11:14:49 GMT
|
129
|
+
Etag:
|
130
|
+
- '"b533-4f8b95b2a9c40"'
|
131
|
+
Accept-Ranges:
|
132
|
+
- bytes
|
133
|
+
Content-Length:
|
134
|
+
- '46387'
|
135
|
+
Cache-Control:
|
136
|
+
- max-age=21600
|
137
|
+
Expires:
|
138
|
+
- Wed, 06 May 2015 01:18:18 GMT
|
139
|
+
P3p:
|
140
|
+
- policyref="http://www.w3.org/2014/08/p3p.xml"
|
141
|
+
Access-Control-Allow-Origin:
|
142
|
+
- "*"
|
143
|
+
Content-Type:
|
144
|
+
- application/ld+json
|
145
|
+
body:
|
146
|
+
encoding: UTF-8
|
147
|
+
string: |+
|
148
|
+
{
|
149
|
+
"@context": {
|
150
|
+
"oa": "http://www.w3.org/ns/oa#",
|
151
|
+
"cnt": "http://www.w3.org/2011/content#",
|
152
|
+
"dc": "http://purl.org/dc/elements/1.1/",
|
153
|
+
"dcterms": "http://purl.org/dc/terms/",
|
154
|
+
"dctypes": "http://purl.org/dc/dcmitype/",
|
155
|
+
"foaf": "http://xmlns.com/foaf/0.1/",
|
156
|
+
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
157
|
+
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
|
158
|
+
"skos": "http://www.w3.org/2004/02/skos/core#",
|
159
|
+
"owl": "http://www.w3.org/2002/07/owl#",
|
160
|
+
"prov": "http://www.w3.org/ns/prov#",
|
161
|
+
"trig": "http://www.w3.org/2004/03/trix/rdfg-1/",
|
162
|
+
"xsd": "http://www.w3.org/2001/XMLSchema#",
|
163
|
+
|
164
|
+
|
165
|
+
"hasBody" : {"@type":"@id", "@id" : "oa:hasBody"},
|
166
|
+
"hasTarget" : {"@type":"@id", "@id" : "oa:hasTarget"},
|
167
|
+
"hasSource" : {"@type":"@id", "@id" : "oa:hasSource"},
|
168
|
+
"hasSelector" : {"@type":"@id", "@id" : "oa:hasSelector"},
|
169
|
+
"hasState" : {"@type":"@id", "@id" : "oa:hasState"},
|
170
|
+
"hasScope" : {"@type":"@id", "@id" : "oa:hasScope"},
|
171
|
+
"annotatedBy" : {"@type":"@id", "@id" : "oa:annotatedBy"},
|
172
|
+
"serializedBy" : {"@type":"@id", "@id" : "oa:serializedBy"},
|
173
|
+
"motivatedBy" : {"@type":"@id", "@id" : "oa:motivatedBy"},
|
174
|
+
"equivalentTo" : {"@type":"@id", "@id" : "oa:equivalentTo"},
|
175
|
+
"styledBy" : {"@type":"@id", "@id" : "oa:styledBy"},
|
176
|
+
"cachedSource" : {"@type":"@id", "@id" : "oa:cachedSource"},
|
177
|
+
"conformsTo" : {"@type":"@id", "@id" : "dcterms:conformsTo"},
|
178
|
+
"default" : {"@type":"@id", "@id" : "oa:default"},
|
179
|
+
"item" : {"@type":"@id", "@id" : "oa:item"},
|
180
|
+
"first": {"@type":"@id", "@id" : "rdf:first"},
|
181
|
+
"rest": {"@type":"@id", "@id" : "rdf:rest", "@container" : "@list"},
|
182
|
+
|
183
|
+
"annotatedAt" : { "@type": "xsd:dateTimeStamp", "@id": "oa:annotatedAt" },
|
184
|
+
"end" : { "@type": "xsd:nonNegativeInteger", "@id": "oa:end" },
|
185
|
+
"exact" : "oa:exact",
|
186
|
+
"prefix" : "oa:prefix",
|
187
|
+
"serializedAt" : { "@type": "xsd:dateTimeStamp", "@id": "oa:serializedAt" },
|
188
|
+
"start" : { "@type": "xsd:nonNegativeInteger", "@id": "oa:start" },
|
189
|
+
"styleClass" : "oa:styleClass",
|
190
|
+
"suffix" : "oa:suffix",
|
191
|
+
"when" : { "@type": "xsd:dateTimeStamp", "@id": "oa:when" },
|
192
|
+
|
193
|
+
"chars" : "cnt:chars",
|
194
|
+
"bytes" : "cnt:bytes",
|
195
|
+
"format" : "dc:format",
|
196
|
+
"language" : "dc:language",
|
197
|
+
"value" : "rdf:value",
|
198
|
+
"label" : "rdfs:label",
|
199
|
+
"name" : "foaf:name",
|
200
|
+
"mbox" : "foaf:mbox"
|
201
|
+
|
202
|
+
},
|
203
|
+
"@graph": [
|
204
|
+
{
|
205
|
+
"@id": "oa:annotatedBy",
|
206
|
+
"@type": "owl:ObjectProperty",
|
207
|
+
"rdfs:comment": {
|
208
|
+
"@language": "en",
|
209
|
+
"@value": "The object of the relationship is a resource that identifies the agent responsible for creating the Annotation. This may be either a human or software agent. \n\nThere SHOULD be exactly 1 oa:annotatedBy relationship per Annotation, but MAY be 0 or more than 1, as the Annotation may be anonymous, or multiple agents may have worked together on it.\n\nIt is RECOMMENDED to use these and other FOAF terms to describe agents: foaf:Person, prov:SoftwareAgent, foaf:Organization, foaf:name, foaf:mbox, foaf:openid, foaf:homepage"
|
210
|
+
},
|
211
|
+
"rdfs:domain": {
|
212
|
+
"@id": "oa:Annotation"
|
213
|
+
},
|
214
|
+
"rdfs:isDefinedBy": {
|
215
|
+
"@id": "oa:"
|
216
|
+
},
|
217
|
+
"rdfs:label": {
|
218
|
+
"@language": "en",
|
219
|
+
"@value": "annotatedBy"
|
220
|
+
},
|
221
|
+
"rdfs:subPropertyOf": {
|
222
|
+
"@id": "prov:wasAttributedTo"
|
223
|
+
}
|
224
|
+
},
|
225
|
+
{
|
226
|
+
"@id": "oa:commenting",
|
227
|
+
"@type": [
|
228
|
+
"oa:Motivation",
|
229
|
+
"owl:NamedIndividual"
|
230
|
+
],
|
231
|
+
"rdfs:comment": {
|
232
|
+
"@language": "en",
|
233
|
+
"@value": "The motivation that represents a commentary about or review of the target resource(s). For example to provide a commentary about a particular PDF."
|
234
|
+
},
|
235
|
+
"skos:inScheme": {
|
236
|
+
"@id": "oa:motivationScheme"
|
237
|
+
},
|
238
|
+
"skos:prefLabel": {
|
239
|
+
"@language": "en",
|
240
|
+
"@value": "commenting"
|
241
|
+
}
|
242
|
+
},
|
243
|
+
{
|
244
|
+
"@id": "oa:SvgSelector",
|
245
|
+
"@type": "owl:Class",
|
246
|
+
"rdfs:comment": {
|
247
|
+
"@language": "en",
|
248
|
+
"@value": "A Selector which selects an area specified as an SVG shape.\n\nThe SVG document should either be retrievable by resolving the URI of this resource, or be included as an Embedded Resource using cnt:Content.\n\nIt is RECOMMENDED that the document contain only a single shape element and that element SHOULD be one of: path, rect, circle, ellipse, polyline, polygon or g. The g element SHOULD ONLY be used to construct a multi-element group, for example to define a donut shape requiring an outer circle and a clipped inner circle.\n\nThe dimensions of both the shape and the SVG canvas MUST be relative to the dimensions of the Source resource. For example, given an image which is 600 pixels by 400 pixels, and the desired section is a circle of 100 pixel radius at the center of the image, then the SVG element would be: <circle cx=\"300\" cy=\"200\" r=\"100\"/>\n\nIt is NOT RECOMMENDED to include style information within the SVG element, nor Javascript, animation, text or other non shape oriented information. Clients SHOULD ignore such information if present."
|
249
|
+
},
|
250
|
+
"rdfs:isDefinedBy": {
|
251
|
+
"@id": "oa:"
|
252
|
+
},
|
253
|
+
"rdfs:label": {
|
254
|
+
"@language": "en",
|
255
|
+
"@value": "SvgSelector"
|
256
|
+
},
|
257
|
+
"rdfs:subClassOf": {
|
258
|
+
"@id": "oa:Selector"
|
259
|
+
}
|
260
|
+
},
|
261
|
+
{
|
262
|
+
"@id": "oa:Selector",
|
263
|
+
"@type": "owl:Class",
|
264
|
+
"rdfs:comment": {
|
265
|
+
"@language": "en",
|
266
|
+
"@value": "A resource which describes the segment of interest in a representation of a Source resource, indicated with oa:hasSelector from the Specific Resource. \n\nThis class is not used directly in Annotations, only its subclasses are.\n\nThe nature of the Selector will be dependent on the type of the representation for which the segment is conveyed. The specific type of selector should be indicated using a subclass of oa:Selector.\n\nThe Specifier's description MAY be conveyed as an external or embedded resource (cnt:Content), or as RDF properties within the graph. The description SHOULD use existing standards whenever possible. If the Specifier has an HTTP URI, then its description, and only its description, MUST be returned when the URI is dereferenced."
|
267
|
+
},
|
268
|
+
"rdfs:isDefinedBy": {
|
269
|
+
"@id": "oa:"
|
270
|
+
},
|
271
|
+
"rdfs:label": {
|
272
|
+
"@language": "en",
|
273
|
+
"@value": "Selector"
|
274
|
+
}
|
275
|
+
},
|
276
|
+
{
|
277
|
+
"@id": "oa:Style",
|
278
|
+
"@type": "owl:Class",
|
279
|
+
"rdfs:comment": {
|
280
|
+
"@language": "en",
|
281
|
+
"@value": "A resource which describes the style in which the selection or resource should be rendered, indicated with oa:styledBy from an oa:Annotation.\n\nThis class is not used directly in Annotations, only its subclasses are.\n\nThe content of the resource provides the rendering hints about the Annotation's constituent resources. \n\nThe Specifier's description MAY be conveyed as an external or embedded resource (cnt:Content), or as RDF properties within the graph. The description SHOULD use existing standards whenever possible. If the Specifier has an HTTP URI, then its description, and only its description, MUST be returned when the URI is dereferenced."
|
282
|
+
},
|
283
|
+
"rdfs:isDefinedBy": {
|
284
|
+
"@id": "oa:"
|
285
|
+
},
|
286
|
+
"rdfs:label": {
|
287
|
+
"@language": "en",
|
288
|
+
"@value": "Style"
|
289
|
+
}
|
290
|
+
},
|
291
|
+
{
|
292
|
+
"@id": "oa:exact",
|
293
|
+
"@type": "owl:DatatypeProperty",
|
294
|
+
"rdfs:comment": {
|
295
|
+
"@language": "en",
|
296
|
+
"@value": "A copy of the text which is being selected, after normalization.\n\nSee oa:TextQuoteSelector."
|
297
|
+
},
|
298
|
+
"rdfs:domain": {
|
299
|
+
"@id": "oa:Selector"
|
300
|
+
},
|
301
|
+
"rdfs:isDefinedBy": {
|
302
|
+
"@id": "oa:"
|
303
|
+
},
|
304
|
+
"rdfs:label": {
|
305
|
+
"@language": "en",
|
306
|
+
"@value": "exact"
|
307
|
+
}
|
308
|
+
},
|
309
|
+
{
|
310
|
+
"@id": "oa:hasBody",
|
311
|
+
"@type": "owl:ObjectProperty",
|
312
|
+
"rdfs:comment": {
|
313
|
+
"@language": "en",
|
314
|
+
"@value": "The relationship between oa:Annotation and body. The body is somehow \"about\" the oa:hasTarget of the annotation.\n\nThe Body may be of any media type, and contain any type of content. The Body SHOULD be identified by HTTP URIs unless they are embedded within the Annotation.\n\nEmbedded bodies SHOULD be instances of cnt:ContentAsText and embed their content with cnt:chars. They SHOULD declare their media type with dc:format, and MAY indicate their language using dc:language and a RFC-3066 language tag. \n\nThere is no OA class provided for \"Body\" as a body might be a target of a different annotation. However, there SHOULD be 1 or more content-based classes associated with the body resources of an Annotation, and the dctypes: vocabulary is recommended for this purpose, for instance dctypes:Text to declare textual content.\n"
|
315
|
+
},
|
316
|
+
"rdfs:domain": {
|
317
|
+
"@id": "oa:Annotation"
|
318
|
+
},
|
319
|
+
"rdfs:isDefinedBy": {
|
320
|
+
"@id": "oa:"
|
321
|
+
},
|
322
|
+
"rdfs:label": {
|
323
|
+
"@language": "en",
|
324
|
+
"@value": "hasBody"
|
325
|
+
}
|
326
|
+
},
|
327
|
+
{
|
328
|
+
"@id": "oa:Choice",
|
329
|
+
"@type": "owl:Class",
|
330
|
+
"rdfs:comment": {
|
331
|
+
"@language": "en",
|
332
|
+
"@value": "A multiplicity construct that conveys to a consuming application that it should select one of the constituent resources to display to the user, and not render/use all of them. \n\noa:Choice can be used as the object of the object of the oa:hasBody, oa:hasTarget, oa:hasSelector, oa:hasState, oa:styledBy and oa:hasScope relationships, \n\nThere MUST be 1 or more oa:item relationships for each oa:Choice.\n\nThere SHOULD be exactly 1 default relationship for each Choice."
|
333
|
+
},
|
334
|
+
"rdfs:isDefinedBy": {
|
335
|
+
"@id": "oa:"
|
336
|
+
},
|
337
|
+
"rdfs:label": {
|
338
|
+
"@language": "en",
|
339
|
+
"@value": "Choice"
|
340
|
+
},
|
341
|
+
"rdfs:subClassOf": {
|
342
|
+
"@id": "rdf:Alt"
|
343
|
+
}
|
344
|
+
},
|
345
|
+
{
|
346
|
+
"@id": "oa:when",
|
347
|
+
"@type": "owl:DatatypeProperty",
|
348
|
+
"rdfs:comment": {
|
349
|
+
"@language": "en",
|
350
|
+
"@value": "The timestamp at which the Source resource should be interpreted for the Annotation, typically the time that the Annotation was created."
|
351
|
+
},
|
352
|
+
"rdfs:domain": {
|
353
|
+
"@id": "oa:TimeState"
|
354
|
+
},
|
355
|
+
"rdfs:isDefinedBy": {
|
356
|
+
"@id": "oa:"
|
357
|
+
},
|
358
|
+
"rdfs:label": {
|
359
|
+
"@language": "en",
|
360
|
+
"@value": "when"
|
361
|
+
},
|
362
|
+
"rdfs:range": {
|
363
|
+
"@id": "xsd:dateTimeStamp"
|
364
|
+
}
|
365
|
+
},
|
366
|
+
{
|
367
|
+
"@id": "oa:serializedBy",
|
368
|
+
"@type": "owl:ObjectProperty",
|
369
|
+
"rdfs:comment": {
|
370
|
+
"@language": "en",
|
371
|
+
"@value": "The object of the relationship is the agent, likely software, responsible for generating the serialization of the Annotation's serialization. \n\nIt is RECOMMENDED to use these and other FOAF terms to describe agents: foaf:Person, prov:SoftwareAgent, foaf:Organization, foaf:name, foaf:mbox, foaf:openid, foaf:homepage\n\nThere MAY be 0 or more oa:serializedBy relationships per Annotation."
|
372
|
+
},
|
373
|
+
"rdfs:domain": {
|
374
|
+
"@id": "oa:Annotation"
|
375
|
+
},
|
376
|
+
"rdfs:isDefinedBy": {
|
377
|
+
"@id": "oa:"
|
378
|
+
},
|
379
|
+
"rdfs:label": {
|
380
|
+
"@language": "en",
|
381
|
+
"@value": "serializedBy"
|
382
|
+
},
|
383
|
+
"rdfs:subPropertyOf": {
|
384
|
+
"@id": "prov:wasAttributedTo"
|
385
|
+
}
|
386
|
+
},
|
387
|
+
{
|
388
|
+
"@id": "oa:motivatedBy",
|
389
|
+
"@type": "owl:ObjectProperty",
|
390
|
+
"rdfs:comment": {
|
391
|
+
"@language": "en",
|
392
|
+
"@value": "The relationship between an Annotation and a Motivation, indicating the reasons why the Annotation was created.\n\nEach Annotation SHOULD have at least one oa:motivatedBy relationship, and MAY be more than 1."
|
393
|
+
},
|
394
|
+
"rdfs:domain": {
|
395
|
+
"@id": "oa:Annotation"
|
396
|
+
},
|
397
|
+
"rdfs:isDefinedBy": {
|
398
|
+
"@id": "oa:"
|
399
|
+
},
|
400
|
+
"rdfs:label": {
|
401
|
+
"@language": "en",
|
402
|
+
"@value": "motivatedBy"
|
403
|
+
},
|
404
|
+
"rdfs:range": {
|
405
|
+
"@id": "oa:Motivation"
|
406
|
+
}
|
407
|
+
},
|
408
|
+
{
|
409
|
+
"@id": "oa:moderating",
|
410
|
+
"@type": [
|
411
|
+
"oa:Motivation",
|
412
|
+
"owl:NamedIndividual"
|
413
|
+
],
|
414
|
+
"rdfs:comment": {
|
415
|
+
"@language": "en",
|
416
|
+
"@value": "The motivation that represents an assignment of value or quality to the target resource(s). For example annotating an Annotation to moderate it up in a trust network or threaded discussion."
|
417
|
+
},
|
418
|
+
"skos:inScheme": {
|
419
|
+
"@id": "oa:motivationScheme"
|
420
|
+
},
|
421
|
+
"skos:prefLabel": {
|
422
|
+
"@language": "en",
|
423
|
+
"@value": "moderating"
|
424
|
+
}
|
425
|
+
},
|
426
|
+
{
|
427
|
+
"@id": "oa:highlighting",
|
428
|
+
"@type": [
|
429
|
+
"oa:Motivation",
|
430
|
+
"owl:NamedIndividual"
|
431
|
+
],
|
432
|
+
"rdfs:comment": {
|
433
|
+
"@language": "en",
|
434
|
+
"@value": "The motivation that represents a highlighted section of the target resource or segment. For example to draw attention to the selected text that the annotator disagrees with. A Highlight may or may not have a Body resource"
|
435
|
+
},
|
436
|
+
"skos:inScheme": {
|
437
|
+
"@id": "oa:motivationScheme"
|
438
|
+
},
|
439
|
+
"skos:prefLabel": {
|
440
|
+
"@language": "en",
|
441
|
+
"@value": "highlighting"
|
442
|
+
}
|
443
|
+
},
|
444
|
+
{
|
445
|
+
"@id": "oa:styledBy",
|
446
|
+
"@type": "owl:ObjectProperty",
|
447
|
+
"rdfs:comment": {
|
448
|
+
"@language": "en",
|
449
|
+
"@value": "The relationship between a oa:Annotation and a oa:Style.\n\nThere MAY be 0 or 1 styledBy relationships for each Annotation.\n\nIf there are multiple Style resources that must be associated with the Annotation, then the use of the Multiplicity Constructs oa:Choice, oa:Composite or oa:List is RECOMMENDED."
|
450
|
+
},
|
451
|
+
"rdfs:domain": {
|
452
|
+
"@id": "oa:Annotation"
|
453
|
+
},
|
454
|
+
"rdfs:isDefinedBy": {
|
455
|
+
"@id": "oa:"
|
456
|
+
},
|
457
|
+
"rdfs:label": {
|
458
|
+
"@language": "en",
|
459
|
+
"@value": "styledBy"
|
460
|
+
},
|
461
|
+
"rdfs:range": {
|
462
|
+
"@id": "oa:Style"
|
463
|
+
}
|
464
|
+
},
|
465
|
+
{
|
466
|
+
"@id": "oa:FragmentSelector",
|
467
|
+
"@type": "owl:Class",
|
468
|
+
"rdfs:comment": {
|
469
|
+
"@language": "en",
|
470
|
+
"@value": "A Selector which describes the segment of interest in a representation, through the use of the fragment identifier component of a URI.\n\nIt is RECOMMENDED to use oa:FragmentSelector as the selector on a Specific Resource rather than annotating the fragment URI directly, in order to improve discoverability of annotation on the Source.\n\nThe oa:FragmentSelector MUST have exactly 1 rdf:value property, containing the fragment identifier component of a URI that describes the segment of interest in the resource, excluding the initial \"#\".\n\nThe Fragment Selector SHOULD have a dcterms:conformsTo relationship with the object being the specification that defines the syntax of the fragment, for instance <http://tools.ietf.org/rfc/rfc3236> for HTML fragments. "
|
471
|
+
},
|
472
|
+
"rdfs:isDefinedBy": {
|
473
|
+
"@id": "oa:"
|
474
|
+
},
|
475
|
+
"rdfs:label": {
|
476
|
+
"@language": "en",
|
477
|
+
"@value": "FragmentSelector"
|
478
|
+
},
|
479
|
+
"rdfs:subClassOf": {
|
480
|
+
"@id": "oa:Selector"
|
481
|
+
}
|
482
|
+
},
|
483
|
+
{
|
484
|
+
"@id": "oa:SpecificResource",
|
485
|
+
"@type": "owl:Class",
|
486
|
+
"rdfs:comment": {
|
487
|
+
"@language": "en",
|
488
|
+
"@value": "A resource identifies part of another Source resource, a particular representation of a resource, a resource with styling hints for renders, or any combination of these. \n\nThe Specific Resource takes the role of oa:hasBody or oa:hasTarget in an oa:Annotation instead of the Source resource.\n\nThere MUST be exactly 1 oa:hasSource relationship associated with a Specific Resource.\n\nThere MUST be exactly 0 or 1 oa:hasSelector relationship associated with a Specific Resource.\n\nThere MAY be 0 or 1 oa:hasState relationship for each Specific Resource.\n\nIf the Specific Resource has an HTTP URI, then the exact segment of the Source resource that it identifies, and only the segment, MUST be returned when the URI is dereferenced. For example, if the segment of interest is a region of an image and the Specific Resource has an HTTP URI, then dereferencing it MUST return the selected region of the image as it was at the time when the annotation was created. Typically this would be a burden to support, and thus the Specific Resource SHOULD be identified by a globally unique URI, such as a UUID URN. If it is not considered important to allow other Annotations or systems to refer to the Specific Resource, then a blank node MAY be used instead."
|
489
|
+
},
|
490
|
+
"rdfs:isDefinedBy": {
|
491
|
+
"@id": "oa:"
|
492
|
+
},
|
493
|
+
"rdfs:label": {
|
494
|
+
"@language": "en",
|
495
|
+
"@value": "SpecificResource"
|
496
|
+
}
|
497
|
+
},
|
498
|
+
{
|
499
|
+
"@id": "oa:annotatedAt",
|
500
|
+
"@type": "owl:DatatypeProperty",
|
501
|
+
"rdfs:comment": {
|
502
|
+
"@language": "en",
|
503
|
+
"@value": "The time at which the Annotation was created. \n\nThere SHOULD be exactly 1 oa:annotatedAt property per Annotation, and MUST NOT be more than 1. The datetime MUST be expressed in the xsd:dateTime format, and SHOULD have a timezone specified."
|
504
|
+
},
|
505
|
+
"rdfs:domain": {
|
506
|
+
"@id": "oa:Annotation"
|
507
|
+
},
|
508
|
+
"rdfs:isDefinedBy": {
|
509
|
+
"@id": "oa:"
|
510
|
+
},
|
511
|
+
"rdfs:label": {
|
512
|
+
"@language": "en",
|
513
|
+
"@value": "annotatedAt"
|
514
|
+
},
|
515
|
+
"rdfs:range": {
|
516
|
+
"@id": "xsd:dateTimeStamp"
|
517
|
+
}
|
518
|
+
},
|
519
|
+
{
|
520
|
+
"@id": "oa:editing",
|
521
|
+
"@type": [
|
522
|
+
"oa:Motivation",
|
523
|
+
"owl:NamedIndividual"
|
524
|
+
],
|
525
|
+
"rdfs:comment": {
|
526
|
+
"@language": "en",
|
527
|
+
"@value": "The motivation that represents a request for a modification or edit to the target resource. For example, an Annotation that requests a typo to be corrected."
|
528
|
+
},
|
529
|
+
"skos:inScheme": {
|
530
|
+
"@id": "oa:motivationScheme"
|
531
|
+
},
|
532
|
+
"skos:prefLabel": {
|
533
|
+
"@language": "en",
|
534
|
+
"@value": "editing"
|
535
|
+
}
|
536
|
+
},
|
537
|
+
{
|
538
|
+
"@id": "oa:Annotation",
|
539
|
+
"@type": "owl:Class",
|
540
|
+
"rdfs:comment": {
|
541
|
+
"@language": "en",
|
542
|
+
"@value": "Typically an Annotation has a single Body (oa:hasBody), which is the comment or other descriptive resource, and a single Target (oa:hasTarget) that the Body is somehow \"about\". The Body provides the information which is annotating the Target. \n\nThis \"aboutness\" may be further clarified or extended to notions such as classifying or identifying with oa:motivatedBy."
|
543
|
+
},
|
544
|
+
"rdfs:isDefinedBy": {
|
545
|
+
"@id": "oa:"
|
546
|
+
},
|
547
|
+
"rdfs:label": {
|
548
|
+
"@language": "en",
|
549
|
+
"@value": "Annotation"
|
550
|
+
}
|
551
|
+
},
|
552
|
+
{
|
553
|
+
"@id": "oa:equivalentTo",
|
554
|
+
"@type": "owl:ObjectProperty",
|
555
|
+
"rdfs:comment": {
|
556
|
+
"@language": "en",
|
557
|
+
"@value": "The subject and object resources of the oa:equivalentTo relationship represent the same resource, but potentially have different metadata such as oa:serializedBy, oa:serializedAt and serialization format. oa:equivalentTo is a symmetrical and transitive relationship; if A oa:equivalentTo B, then it is also true that B oa:equivalent A; and that if B oa:equivalentTo C, then it is also true that A oa:equivalentTo C. \n\nThe Annotation MAY include 0 or more instances of the oa:equivalentTo relationship between copies of the Annotation or other resources, and SHOULD include as many as are available.\n\nIf a system publishes an embedded resource (a cnt:Content) at a new HTTP URI, then it SHOULD express the oa:equivalentTo relationship between the resource's URN and the new URI from which it is available."
|
558
|
+
},
|
559
|
+
"rdfs:isDefinedBy": {
|
560
|
+
"@id": "oa:"
|
561
|
+
},
|
562
|
+
"rdfs:label": {
|
563
|
+
"@language": "en",
|
564
|
+
"@value": "equivalentTo"
|
565
|
+
},
|
566
|
+
"rdfs:subPropertyOf": {
|
567
|
+
"@id": "prov:alternateOf"
|
568
|
+
}
|
569
|
+
},
|
570
|
+
{
|
571
|
+
"@id": "oa:Motivation",
|
572
|
+
"@type": "owl:Class",
|
573
|
+
"rdfs:comment": {
|
574
|
+
"@language": "en",
|
575
|
+
"@value": "The Motivation for creating an Annotation, indicated with oa:motivatedBy, is a reason for its creation, and might include things like oa:replying to another annotation, oa:commenting on a resource, or oa:linking to a related resource.\n\nEach Annotation SHOULD have at least one oa:motivatedBy relationship to an instance of oa:Motivation, which is a subClass of skos:Concept."
|
576
|
+
},
|
577
|
+
"rdfs:isDefinedBy": {
|
578
|
+
"@id": "oa:"
|
579
|
+
},
|
580
|
+
"rdfs:label": {
|
581
|
+
"@language": "en",
|
582
|
+
"@value": "Motivation"
|
583
|
+
},
|
584
|
+
"rdfs:subClassOf": {
|
585
|
+
"@id": "skos:Concept"
|
586
|
+
}
|
587
|
+
},
|
588
|
+
{
|
589
|
+
"@id": "oa:tagging",
|
590
|
+
"@type": [
|
591
|
+
"oa:Motivation",
|
592
|
+
"owl:NamedIndividual"
|
593
|
+
],
|
594
|
+
"rdfs:comment": {
|
595
|
+
"@language": "en",
|
596
|
+
"@value": "The motivation that represents adding a Tag on the target resource(s). One or more of the bodies of the annotation should be typed as a oa:Tag or oa:SemanticTag."
|
597
|
+
},
|
598
|
+
"skos:inScheme": {
|
599
|
+
"@id": "oa:motivationScheme"
|
600
|
+
},
|
601
|
+
"skos:prefLabel": {
|
602
|
+
"@language": "en",
|
603
|
+
"@value": "tagging"
|
604
|
+
}
|
605
|
+
},
|
606
|
+
{
|
607
|
+
"@id": "oa:List",
|
608
|
+
"@type": "owl:Class",
|
609
|
+
"rdfs:comment": {
|
610
|
+
"@language": "en",
|
611
|
+
"@value": "A multiplicity construct that conveys to a consuming application that all of the constituent resources are required for the Annotation to be correctly interpreted, and in a particular order. \n\noa:List can be used as the object of the object of the oa:hasBody, oa:hasTarget, oa:hasSelector, oa:hasState, oa:styledBy and oa:hasScope relationships, \n\nThere MUST be 2 or more oa:item relationships for each oa:List, with their order defined using the rdf:List construct of rdf:first/rdf:rest/rdf:nil.\n\nAll the elements of the list should also be declared using oa:item, and each of the oa:items should appear at least once in the list."
|
612
|
+
},
|
613
|
+
"rdfs:isDefinedBy": {
|
614
|
+
"@id": "oa:"
|
615
|
+
},
|
616
|
+
"rdfs:label": {
|
617
|
+
"@language": "en",
|
618
|
+
"@value": "List"
|
619
|
+
},
|
620
|
+
"rdfs:subClassOf": {
|
621
|
+
"@id": "oa:Composite"
|
622
|
+
}
|
623
|
+
},
|
624
|
+
{
|
625
|
+
"@id": "oa:TextQuoteSelector",
|
626
|
+
"@type": "owl:Class",
|
627
|
+
"rdfs:comment": {
|
628
|
+
"@language": "en",
|
629
|
+
"@value": "A Selector that describes a textual segment by means of quoting it, plus passages before or after it.\n\nFor example, if the document were \"abcdefghijklmnopqrstuvwxyz\", one could select \"efg\" by a oa:prefix of \"abcd\", the quotation of oa:exact \"efg\" and a oa:suffix of \"hijk\".\n\nThe text MUST be normalized before recording.\n\nEach TextQuoteSelector MUST have exactly 1 oa:exact property.\n\nEach TextQuoteSelector SHOULD have exactly 1 oa:prefix property, and MUST NOT have more than 1.\n\nEach TextQuoteSelector SHOULD have exactly 1 oa:suffix property, and MUST NOT have more than 1."
|
630
|
+
},
|
631
|
+
"rdfs:isDefinedBy": {
|
632
|
+
"@id": "oa:"
|
633
|
+
},
|
634
|
+
"rdfs:label": {
|
635
|
+
"@language": "en",
|
636
|
+
"@value": "TextQuoteSelector"
|
637
|
+
},
|
638
|
+
"rdfs:subClassOf": {
|
639
|
+
"@id": "oa:Selector"
|
640
|
+
}
|
641
|
+
},
|
642
|
+
{
|
643
|
+
"@id": "oa:cachedSource",
|
644
|
+
"@type": "owl:ObjectProperty",
|
645
|
+
"rdfs:comment": {
|
646
|
+
"@language": "en",
|
647
|
+
"@value": "A link to a copy of the Source resource's representation appropriate for the Annotation, typically a copy of the original at the time that the Annotation was created"
|
648
|
+
},
|
649
|
+
"rdfs:domain": {
|
650
|
+
"@id": "oa:TimeState"
|
651
|
+
},
|
652
|
+
"rdfs:isDefinedBy": {
|
653
|
+
"@id": "oa:"
|
654
|
+
},
|
655
|
+
"rdfs:label": {
|
656
|
+
"@language": "en",
|
657
|
+
"@value": "cachedSource"
|
658
|
+
}
|
659
|
+
},
|
660
|
+
{
|
661
|
+
"@id": "oa:bookmarking",
|
662
|
+
"@type": [
|
663
|
+
"oa:Motivation",
|
664
|
+
"owl:NamedIndividual"
|
665
|
+
],
|
666
|
+
"rdfs:comment": {
|
667
|
+
"@language": "en",
|
668
|
+
"@value": "The motivation that represents the creation of a bookmark to the target resources or recorded point or points within one or more resources. For example, an Annotation that bookmarks the point in a text where the reader finished reading. Bookmark Annotations may or may not have a Body resource."
|
669
|
+
},
|
670
|
+
"skos:inScheme": {
|
671
|
+
"@id": "oa:motivationScheme"
|
672
|
+
},
|
673
|
+
"skos:prefLabel": {
|
674
|
+
"@language": "en",
|
675
|
+
"@value": "bookmarking"
|
676
|
+
}
|
677
|
+
},
|
678
|
+
{
|
679
|
+
"@id": "oa:SemanticTag",
|
680
|
+
"@type": "owl:Class",
|
681
|
+
"rdfs:comment": {
|
682
|
+
"@language": "en",
|
683
|
+
"@value": "A class assigned to the Body when it is a semantic tagging resource; a URI that identifies a concept, rather than an embedded string, frequently a term from a controlled vocabulary.\n\nIt is NOT RECOMMENDED to use the URI of a document as a Semantic Tag, as it might also be used as a regular Body in other Annotations which would inherit the oa:SemanticTag class assignment. Instead it is more appropriate to create a new URI and link it to the document, using the foaf:page predicate."
|
684
|
+
},
|
685
|
+
"rdfs:isDefinedBy": {
|
686
|
+
"@id": "oa:"
|
687
|
+
},
|
688
|
+
"rdfs:label": {
|
689
|
+
"@language": "en",
|
690
|
+
"@value": "SemanticTag"
|
691
|
+
},
|
692
|
+
"rdfs:subClassOf": {
|
693
|
+
"@id": "oa:Tag"
|
694
|
+
}
|
695
|
+
},
|
696
|
+
{
|
697
|
+
"@id": "oa:hasSource",
|
698
|
+
"@type": "owl:ObjectProperty",
|
699
|
+
"rdfs:comment": {
|
700
|
+
"@language": "en",
|
701
|
+
"@value": "The relationship between a oa:SpecificResource and the resource that it is a more specific representation of. \n\nThere MUST be exactly 1 oa:hasSource relationship associated with a Specific Resource."
|
702
|
+
},
|
703
|
+
"rdfs:domain": {
|
704
|
+
"@id": "oa:SpecificResource"
|
705
|
+
},
|
706
|
+
"rdfs:isDefinedBy": {
|
707
|
+
"@id": "oa:"
|
708
|
+
},
|
709
|
+
"rdfs:label": {
|
710
|
+
"@language": "en",
|
711
|
+
"@value": "hasSource"
|
712
|
+
}
|
713
|
+
},
|
714
|
+
{
|
715
|
+
"@id": "oa:default",
|
716
|
+
"@type": "owl:ObjectProperty",
|
717
|
+
"rdfs:comment": {
|
718
|
+
"@language": "en",
|
719
|
+
"@value": "The constituent resource of a oa:Choice to use as a default option, if there is no other means to determine which would be most appropriate.\n\nThere SHOULD be exactly 1 default relationship for each Choice."
|
720
|
+
},
|
721
|
+
"rdfs:domain": {
|
722
|
+
"@id": "oa:Choice"
|
723
|
+
},
|
724
|
+
"rdfs:isDefinedBy": {
|
725
|
+
"@id": "oa:"
|
726
|
+
},
|
727
|
+
"rdfs:label": {
|
728
|
+
"@language": "en",
|
729
|
+
"@value": "default"
|
730
|
+
},
|
731
|
+
"rdfs:subPropertyOf": {
|
732
|
+
"@id": "oa:item"
|
733
|
+
}
|
734
|
+
},
|
735
|
+
{
|
736
|
+
"@id": "oa:hasSelector",
|
737
|
+
"@type": "owl:ObjectProperty",
|
738
|
+
"rdfs:comment": {
|
739
|
+
"@language": "en",
|
740
|
+
"@value": "The relationship between a oa:SpecificResource and a oa:Selector.\n\nThere MUST be exactly 0 or 1 oa:hasSelector relationship associated with a \nSpecific Resource. \n\nIf multiple Selectors are required, either to express a choice between different optional, equivalent selectors, or a chain of selectors that should all be processed, it is necessary to use oa:Choice, oa:Composite or oa:List as a selector."
|
741
|
+
},
|
742
|
+
"rdfs:domain": {
|
743
|
+
"@id": "oa:SpecificResource"
|
744
|
+
},
|
745
|
+
"rdfs:isDefinedBy": {
|
746
|
+
"@id": "oa:"
|
747
|
+
},
|
748
|
+
"rdfs:label": {
|
749
|
+
"@language": "en",
|
750
|
+
"@value": "hasSelector"
|
751
|
+
},
|
752
|
+
"rdfs:range": {
|
753
|
+
"@id": "oa:Selector"
|
754
|
+
}
|
755
|
+
},
|
756
|
+
{
|
757
|
+
"@id": "oa:hasTarget",
|
758
|
+
"@type": "owl:ObjectProperty",
|
759
|
+
"rdfs:comment": {
|
760
|
+
"@language": "en",
|
761
|
+
"@value": "The relationship between oa:Annotation and target. The target resource is what the oa:hasBody is somewhat \"about\".\n\nThe target may be of any media type, and contain any type of content. The target SHOULD be identified by HTTP URIs unless they are embedded within the Annotation.\n\nEmbedded targets SHOULD be instances of cnt:ContentAsText and embed their content with cnt:chars. They SHOULD declare their media type with dc:format, and MAY indicate their language using dc:language and a RFC-3066 language tag. \n\nThere is no OA class provided for \"Target\" as a target might be a body in a different annotation. However, there SHOULD be 1 or more content-based classes associated with the target resources of an Annotation, and the dctypes: vocabulary is recommended for this purpose, for instance dctypes:Text to declare textual content."
|
762
|
+
},
|
763
|
+
"rdfs:domain": {
|
764
|
+
"@id": "oa:Annotation"
|
765
|
+
},
|
766
|
+
"rdfs:isDefinedBy": {
|
767
|
+
"@id": "oa:"
|
768
|
+
},
|
769
|
+
"rdfs:label": {
|
770
|
+
"@language": "en",
|
771
|
+
"@value": "hasTarget"
|
772
|
+
}
|
773
|
+
},
|
774
|
+
{
|
775
|
+
"@id": "oa:TextPositionSelector",
|
776
|
+
"@type": "owl:Class",
|
777
|
+
"rdfs:comment": {
|
778
|
+
"@language": "en",
|
779
|
+
"@value": "An oa:Selector which describes a range of text based on its start and end positions.\n\nThe text MUST be normalized before counting characters. For a Selector that works from the bitstream rather than the rendered characters, see oa:DataPositionSelector.\n\nEach oa:TextPositionSelector MUST have exactly 1 oa:start property.\n\nEach oa:TextPositionSelector MUST have exactly 1 oa:end property."
|
780
|
+
},
|
781
|
+
"rdfs:isDefinedBy": {
|
782
|
+
"@id": "oa:"
|
783
|
+
},
|
784
|
+
"rdfs:label": {
|
785
|
+
"@language": "en",
|
786
|
+
"@value": "TextPositionSelector"
|
787
|
+
},
|
788
|
+
"rdfs:subClassOf": {
|
789
|
+
"@id": "oa:Selector"
|
790
|
+
}
|
791
|
+
},
|
792
|
+
{
|
793
|
+
"@id": "oa:serializedAt",
|
794
|
+
"@type": "owl:DatatypeProperty",
|
795
|
+
"rdfs:comment": {
|
796
|
+
"@language": "en",
|
797
|
+
"@value": "The time at which the agent referenced by oa:serializedBy generated the first serialization of the Annotation, and any subsequent substantially different one. The annotation graph MUST have changed for this property to be updated, and as such represents the last modified datestamp for the Annotation. This might be used to determine if it should be re-imported into a triplestore when discovered. \n\nThere MAY be exactly 1 oa:serializedAt property per Annotation, and MUST NOT be more than 1. The datetime MUST be expressed in the xsd:dateTime format, and SHOULD have a timezone specified.\n"
|
798
|
+
},
|
799
|
+
"rdfs:domain": {
|
800
|
+
"@id": "oa:Annotation"
|
801
|
+
},
|
802
|
+
"rdfs:isDefinedBy": {
|
803
|
+
"@id": "oa:"
|
804
|
+
},
|
805
|
+
"rdfs:label": {
|
806
|
+
"@language": "en",
|
807
|
+
"@value": "serializedAt"
|
808
|
+
},
|
809
|
+
"rdfs:range": {
|
810
|
+
"@id": "xsd:dateTimeStamp"
|
811
|
+
}
|
812
|
+
},
|
813
|
+
{
|
814
|
+
"@id": "oa:Composite",
|
815
|
+
"@type": "owl:Class",
|
816
|
+
"rdfs:comment": {
|
817
|
+
"@language": "en",
|
818
|
+
"@value": "A multiplicity construct that conveys to a consuming application that all of the constituent resources are required for the Annotation to be correctly interpreted. \n\noa:Composite can be used as the object of the object of the oa:hasBody, oa:hasTarget, oa:hasSelector, oa:hasState, oa:styledBy and oa:hasScope relationships, \n\nThere MUST be 2 or more oa:item relationships for each oa:Composite."
|
819
|
+
},
|
820
|
+
"rdfs:isDefinedBy": {
|
821
|
+
"@id": "oa:"
|
822
|
+
},
|
823
|
+
"rdfs:label": "Composite",
|
824
|
+
"rdfs:subClassOf": {
|
825
|
+
"@id": "rdf:Bag"
|
826
|
+
}
|
827
|
+
},
|
828
|
+
{
|
829
|
+
"@id": "oa:classifying",
|
830
|
+
"@type": [
|
831
|
+
"oa:Motivation",
|
832
|
+
"owl:NamedIndividual"
|
833
|
+
],
|
834
|
+
"rdfs:comment": {
|
835
|
+
"@language": "en",
|
836
|
+
"@value": "The motivation that represents the assignment of a classification type, typically from a controlled vocabulary, to the target resource(s). For example to classify an Image resource as a Portrait."
|
837
|
+
},
|
838
|
+
"skos:inScheme": {
|
839
|
+
"@id": "oa:motivationScheme"
|
840
|
+
},
|
841
|
+
"skos:prefLabel": {
|
842
|
+
"@language": "en",
|
843
|
+
"@value": "classifying"
|
844
|
+
}
|
845
|
+
},
|
846
|
+
{
|
847
|
+
"@id": "oa:identifying",
|
848
|
+
"@type": [
|
849
|
+
"oa:Motivation",
|
850
|
+
"owl:NamedIndividual"
|
851
|
+
],
|
852
|
+
"rdfs:comment": {
|
853
|
+
"@language": "en",
|
854
|
+
"@value": "The motivation that represents the assignment of an identity to the target resource(s). For example, annotating the name of a city in a string of text with the URI that identifies it."
|
855
|
+
},
|
856
|
+
"skos:inScheme": {
|
857
|
+
"@id": "oa:motivationScheme"
|
858
|
+
},
|
859
|
+
"skos:prefLabel": {
|
860
|
+
"@language": "en",
|
861
|
+
"@value": "identifying"
|
862
|
+
}
|
863
|
+
},
|
864
|
+
{
|
865
|
+
"@id": "oa:HttpRequestState",
|
866
|
+
"@type": "owl:Class",
|
867
|
+
"rdfs:comment": {
|
868
|
+
"@language": "en",
|
869
|
+
"@value": "A resource which describes how to retrieve an appropriate representation of the Source resource for the Annotation, based on the HTTP Request headers to send to the server.\n\nThere MUST be exactly 1 rdf:value property per HttpRequestState, containing HTTP request headers as a single, complete string, exactly as they would appear in an HTTP request. "
|
870
|
+
},
|
871
|
+
"rdfs:isDefinedBy": {
|
872
|
+
"@id": "oa:"
|
873
|
+
},
|
874
|
+
"rdfs:label": {
|
875
|
+
"@language": "en",
|
876
|
+
"@value": "HttpRequestState"
|
877
|
+
},
|
878
|
+
"rdfs:subClassOf": {
|
879
|
+
"@id": "oa:State"
|
880
|
+
}
|
881
|
+
},
|
882
|
+
{
|
883
|
+
"@id": "oa:DataPositionSelector",
|
884
|
+
"@type": "owl:Class",
|
885
|
+
"rdfs:comment": {
|
886
|
+
"@language": "en",
|
887
|
+
"@value": "A Selector which describes a range of data based on its start and end positions within the byte stream of the representation.\n\nEach DataPositionSelector MUST have exactly 1 oa:start property.\n\nEach TextPositionSelector MUST have exactly 1 oa:end property.\n\nSee oa:TextPositionSelector for selection at normalized character level rather than bytestream level."
|
888
|
+
},
|
889
|
+
"rdfs:isDefinedBy": {
|
890
|
+
"@id": "oa:"
|
891
|
+
},
|
892
|
+
"rdfs:label": {
|
893
|
+
"@language": "en",
|
894
|
+
"@value": "DataPositionSelector"
|
895
|
+
},
|
896
|
+
"rdfs:subClassOf": {
|
897
|
+
"@id": "oa:Selector"
|
898
|
+
}
|
899
|
+
},
|
900
|
+
{
|
901
|
+
"@id": "oa:linking",
|
902
|
+
"@type": [
|
903
|
+
"oa:Motivation",
|
904
|
+
"owl:NamedIndividual"
|
905
|
+
],
|
906
|
+
"rdfs:comment": {
|
907
|
+
"@language": "en",
|
908
|
+
"@value": "The motivation that represents an untyped link to a resource related to the target."
|
909
|
+
},
|
910
|
+
"skos:inScheme": {
|
911
|
+
"@id": "oa:motivationScheme"
|
912
|
+
},
|
913
|
+
"skos:prefLabel": {
|
914
|
+
"@language": "en",
|
915
|
+
"@value": "linking"
|
916
|
+
}
|
917
|
+
},
|
918
|
+
{
|
919
|
+
"@id": "oa:motivationScheme",
|
920
|
+
"@type": [
|
921
|
+
"skos:ConceptScheme",
|
922
|
+
"owl:NamedIndividual"
|
923
|
+
],
|
924
|
+
"rdfs:comment": {
|
925
|
+
"@language": "en",
|
926
|
+
"@value": "The concept scheme for Open Annotation Motivations"
|
927
|
+
},
|
928
|
+
"rdfs:label": {
|
929
|
+
"@language": "en",
|
930
|
+
"@value": "motivationScheme"
|
931
|
+
}
|
932
|
+
},
|
933
|
+
{
|
934
|
+
"@id": "oa:replying",
|
935
|
+
"@type": [
|
936
|
+
"oa:Motivation",
|
937
|
+
"owl:NamedIndividual"
|
938
|
+
],
|
939
|
+
"rdfs:comment": {
|
940
|
+
"@language": "en",
|
941
|
+
"@value": "The motivation that represents a reply to a previous statement, either an Annotation or another resource. For example providing the assistance requested in the above."
|
942
|
+
},
|
943
|
+
"skos:inScheme": {
|
944
|
+
"@id": "oa:motivationScheme"
|
945
|
+
},
|
946
|
+
"skos:prefLabel": {
|
947
|
+
"@language": "en",
|
948
|
+
"@value": "replying"
|
949
|
+
}
|
950
|
+
},
|
951
|
+
{
|
952
|
+
"@id": "oa:start",
|
953
|
+
"@type": "owl:DatatypeProperty",
|
954
|
+
"rdfs:comment": {
|
955
|
+
"@language": "en",
|
956
|
+
"@value": "The starting position of the segment of text or bytes. The first character/byte in the full text/stream is position 0. The character/byte indicated at position oa:start is included within the selected segment. \n\nSee oa:DataPositionSelector and oa:TextPositionSelector."
|
957
|
+
},
|
958
|
+
"rdfs:domain": {
|
959
|
+
"@id": "oa:Selector"
|
960
|
+
},
|
961
|
+
"rdfs:isDefinedBy": {
|
962
|
+
"@id": "oa:"
|
963
|
+
},
|
964
|
+
"rdfs:label": {
|
965
|
+
"@language": "en",
|
966
|
+
"@value": "start"
|
967
|
+
},
|
968
|
+
"rdfs:range": {
|
969
|
+
"@id": "xsd:nonNegativeInteger"
|
970
|
+
}
|
971
|
+
},
|
972
|
+
{
|
973
|
+
"@id": "oa:end",
|
974
|
+
"@type": "owl:DatatypeProperty",
|
975
|
+
"rdfs:comment": {
|
976
|
+
"@language": "en",
|
977
|
+
"@value": "The end position of the segment of text or bytes. The first character/byte in the full text/stream is position 0. The character/byte indicated at position oa:end is NOT included within the selected segment. \n\nSee oa:DataPositionSelector and oa:oa:TextPositionSelector."
|
978
|
+
},
|
979
|
+
"rdfs:domain": {
|
980
|
+
"@id": "oa:Selector"
|
981
|
+
},
|
982
|
+
"rdfs:isDefinedBy": {
|
983
|
+
"@id": "oa:"
|
984
|
+
},
|
985
|
+
"rdfs:label": {
|
986
|
+
"@language": "en",
|
987
|
+
"@value": "end"
|
988
|
+
},
|
989
|
+
"rdfs:range": {
|
990
|
+
"@id": "xsd:nonNegativeInteger"
|
991
|
+
}
|
992
|
+
},
|
993
|
+
{
|
994
|
+
"@id": "oa:TimeState",
|
995
|
+
"@type": "owl:Class",
|
996
|
+
"rdfs:comment": {
|
997
|
+
"@language": "en",
|
998
|
+
"@value": "A resource which describes how to retrieve a representation of the Source resource that is temporally appropriate for the Annotation.\n\nThere MUST be at least one of oa:cachedSource or oa:when specified. If there is more than 1, each gives an alternative copy of the representation."
|
999
|
+
},
|
1000
|
+
"rdfs:isDefinedBy": {
|
1001
|
+
"@id": "oa:"
|
1002
|
+
},
|
1003
|
+
"rdfs:label": {
|
1004
|
+
"@language": "en",
|
1005
|
+
"@value": "TimeState"
|
1006
|
+
},
|
1007
|
+
"rdfs:subClassOf": {
|
1008
|
+
"@id": "oa:State"
|
1009
|
+
}
|
1010
|
+
},
|
1011
|
+
{
|
1012
|
+
"@id": "oa:State",
|
1013
|
+
"@type": "owl:Class",
|
1014
|
+
"rdfs:comment": {
|
1015
|
+
"@language": "en",
|
1016
|
+
"@value": "A resource which describes how to retrieve an appropriate representation of the Source resource, indicated with oa:hasState from the Specific Resource.\n\nThis class is not used directly in Annotations, only its subclasses are.\n\nThe Specifier's description MAY be conveyed as an external or embedded resource (cnt:Content), or as RDF properties within the graph. The description SHOULD use existing standards whenever possible. If the Specifier has an HTTP URI, then its description, and only its description, MUST be returned when the URI is dereferenced."
|
1017
|
+
},
|
1018
|
+
"rdfs:isDefinedBy": {
|
1019
|
+
"@id": "oa:"
|
1020
|
+
},
|
1021
|
+
"rdfs:label": {
|
1022
|
+
"@language": "en",
|
1023
|
+
"@value": "State"
|
1024
|
+
}
|
1025
|
+
},
|
1026
|
+
{
|
1027
|
+
"@id": "oa:CssStyle",
|
1028
|
+
"@type": "owl:Class",
|
1029
|
+
"rdfs:comment": {
|
1030
|
+
"@language": "en",
|
1031
|
+
"@value": "A resource which describes styles for resources participating in the Annotation using CSS.\n\nSpecific Resources MAY be assigned a CSS style class using oa:styleClass.\n\nThe CSS resource MAY have its own dereferencable URI that provides the information. For example, \"Style1\" in the diagram below might actually have the URI \"http://www.example.com/styles/annotations.css\". It MAY be embedded within the Annotation using the inline constructions described in Embedding Resources."
|
1032
|
+
},
|
1033
|
+
"rdfs:isDefinedBy": {
|
1034
|
+
"@id": "oa:"
|
1035
|
+
},
|
1036
|
+
"rdfs:label": {
|
1037
|
+
"@language": "en",
|
1038
|
+
"@value": "CssStyle"
|
1039
|
+
},
|
1040
|
+
"rdfs:subClassOf": {
|
1041
|
+
"@id": "oa:Style"
|
1042
|
+
}
|
1043
|
+
},
|
1044
|
+
{
|
1045
|
+
"@id": "oa:item",
|
1046
|
+
"@type": "owl:ObjectProperty",
|
1047
|
+
"rdfs:comment": {
|
1048
|
+
"@language": "en",
|
1049
|
+
"@value": "The relationship between a multiplicity construct node and its constituent resources.\n\nThere MUST be 1 or more item relationships for each multiplicity construct oa:Choice, oa:Composite and oa:List."
|
1050
|
+
},
|
1051
|
+
"rdfs:isDefinedBy": {
|
1052
|
+
"@id": "oa:"
|
1053
|
+
},
|
1054
|
+
"rdfs:label": {
|
1055
|
+
"@language": "en",
|
1056
|
+
"@value": "item"
|
1057
|
+
},
|
1058
|
+
"rdfs:subPropertyOf": {
|
1059
|
+
"@id": "rdfs:member"
|
1060
|
+
}
|
1061
|
+
},
|
1062
|
+
{
|
1063
|
+
"@id": "oa:hasScope",
|
1064
|
+
"@type": "owl:ObjectProperty",
|
1065
|
+
"rdfs:comment": {
|
1066
|
+
"@language": "en",
|
1067
|
+
"@value": "The relationship between a Specific Resource and the resource that provides the scope or context for it in this Annotation.\n\nThere MAY be 0 or more hasScope relationships for each Specific Resource."
|
1068
|
+
},
|
1069
|
+
"rdfs:domain": {
|
1070
|
+
"@id": "oa:SpecificResource"
|
1071
|
+
},
|
1072
|
+
"rdfs:isDefinedBy": {
|
1073
|
+
"@id": "oa:"
|
1074
|
+
},
|
1075
|
+
"rdfs:label": {
|
1076
|
+
"@language": "en",
|
1077
|
+
"@value": "hasScope"
|
1078
|
+
}
|
1079
|
+
},
|
1080
|
+
{
|
1081
|
+
"@id": "oa:suffix",
|
1082
|
+
"@type": "owl:DatatypeProperty",
|
1083
|
+
"rdfs:comment": {
|
1084
|
+
"@language": "en",
|
1085
|
+
"@value": "The snippet of text that occurs immediately after the text which is being selected. \n\nSee oa:TextQuoteSelector."
|
1086
|
+
},
|
1087
|
+
"rdfs:domain": {
|
1088
|
+
"@id": "oa:Selector"
|
1089
|
+
},
|
1090
|
+
"rdfs:isDefinedBy": {
|
1091
|
+
"@id": "oa:"
|
1092
|
+
},
|
1093
|
+
"rdfs:label": {
|
1094
|
+
"@language": "en",
|
1095
|
+
"@value": "suffix"
|
1096
|
+
}
|
1097
|
+
},
|
1098
|
+
{
|
1099
|
+
"@id": "oa:hasState",
|
1100
|
+
"@type": "owl:ObjectProperty",
|
1101
|
+
"rdfs:comment": {
|
1102
|
+
"@language": "en",
|
1103
|
+
"@value": "The relationship between a oa:SpecificResource and a oa:State resource.\n\nThere MAY be 0 or 1 oa:hasState relationship for each SpecificResource.\n\nIf there are multiple State resources that must be associated with the specific resource, then the use of the Multiplicity Constructs oa:Choice, oa:Composite or oa:List is RECOMMENDED."
|
1104
|
+
},
|
1105
|
+
"rdfs:domain": {
|
1106
|
+
"@id": "oa:SpecificResource"
|
1107
|
+
},
|
1108
|
+
"rdfs:isDefinedBy": {
|
1109
|
+
"@id": "oa:"
|
1110
|
+
},
|
1111
|
+
"rdfs:label": {
|
1112
|
+
"@language": "en",
|
1113
|
+
"@value": "hasState"
|
1114
|
+
},
|
1115
|
+
"rdfs:range": {
|
1116
|
+
"@id": "oa:State"
|
1117
|
+
}
|
1118
|
+
},
|
1119
|
+
{
|
1120
|
+
"@id": "oa:",
|
1121
|
+
"@type": "owl:Ontology",
|
1122
|
+
"dc:contributor": {
|
1123
|
+
"@language": "en",
|
1124
|
+
"@value": "Stian Soiland-Reyes"
|
1125
|
+
},
|
1126
|
+
"dc:creator": [
|
1127
|
+
{
|
1128
|
+
"@language": "en",
|
1129
|
+
"@value": "Robert Sanderson"
|
1130
|
+
},
|
1131
|
+
{
|
1132
|
+
"@language": "it",
|
1133
|
+
"@value": "Paolo Ciccarese"
|
1134
|
+
},
|
1135
|
+
{
|
1136
|
+
"@language": "vls",
|
1137
|
+
"@value": "Herbert Van de Sompel"
|
1138
|
+
}
|
1139
|
+
],
|
1140
|
+
"dc:description": {
|
1141
|
+
"@language": "en",
|
1142
|
+
"@value": "The Open Annotation Core Data Model specifies an interoperable framework for creating associations between related resources, annotations, using a methodology that conforms to the Architecture of the World Wide Web. Open Annotations can easily be shared between platforms, with sufficient richness of expression to satisfy complex requirements while remaining simple enough to also allow for the most common use cases, such as attaching a piece of text to a single web resource.\n\nAn Annotation is considered to be a set of connected resources, typically including a body and target, where the body is somehow about the target. The full model supports additional functionality, enabling semantic annotations, embedding content, selecting segments of resources, choosing the appropriate representation of a resource and providing styling hints for consuming clients."
|
1143
|
+
},
|
1144
|
+
"dc:title": {
|
1145
|
+
"@language": "en",
|
1146
|
+
"@value": "Open Annotation Data Model"
|
1147
|
+
},
|
1148
|
+
"dcterms:modified": {
|
1149
|
+
"@type": "xsd:dateTime",
|
1150
|
+
"@value": "2013-02-22T21:40:51+01:00"
|
1151
|
+
},
|
1152
|
+
"owl:versionIRI": {
|
1153
|
+
"@id": "http://www.openannotation.org/spec/core/20130208/oa.owl"
|
1154
|
+
},
|
1155
|
+
"owl:versionInfo": "0.9.20130208",
|
1156
|
+
"rdfs:comment": {
|
1157
|
+
"@language": "en",
|
1158
|
+
"@value": "The Open Annotation Core Data Model specifies an interoperable framework for creating associations between related resources, annotations, using a methodology that conforms to the Architecture of the World Wide Web.\n\nThis ontology is a non-normative OWL formalization of the textual OA specification at http://www.openannotation.org/spec/core/20130208/index.html\n\nNote that OWL imports are disabled in the published version in order to reduce external implications, improve OWL 2 Profile conformity and increase interoperability. Some OWL tools might thus misleadingly show this ontology as (re)defining properties like skos:prefLabel."
|
1159
|
+
},
|
1160
|
+
"rdfs:seeAlso": {
|
1161
|
+
"@id": "http://www.openannotation.org/spec/core/20130208/index.html"
|
1162
|
+
}
|
1163
|
+
},
|
1164
|
+
{
|
1165
|
+
"@id": "oa:questioning",
|
1166
|
+
"@type": [
|
1167
|
+
"oa:Motivation",
|
1168
|
+
"owl:NamedIndividual"
|
1169
|
+
],
|
1170
|
+
"rdfs:comment": {
|
1171
|
+
"@language": "en",
|
1172
|
+
"@value": "The motivation that represents asking a question about the target resource(s). For example to ask for assistance with a particular section of text, or question its veracity."
|
1173
|
+
},
|
1174
|
+
"skos:inScheme": {
|
1175
|
+
"@id": "oa:motivationScheme"
|
1176
|
+
},
|
1177
|
+
"skos:prefLabel": {
|
1178
|
+
"@language": "en",
|
1179
|
+
"@value": "questioning"
|
1180
|
+
}
|
1181
|
+
},
|
1182
|
+
{
|
1183
|
+
"@id": "oa:describing",
|
1184
|
+
"@type": [
|
1185
|
+
"oa:Motivation",
|
1186
|
+
"owl:NamedIndividual"
|
1187
|
+
],
|
1188
|
+
"rdfs:comment": {
|
1189
|
+
"@language": "en",
|
1190
|
+
"@value": "The motivation that represents a description of the target resource(s), as opposed to a comment about them. For example describing the above PDF's contents, rather than commenting on their accuracy."
|
1191
|
+
},
|
1192
|
+
"skos:inScheme": {
|
1193
|
+
"@id": "oa:motivationScheme"
|
1194
|
+
},
|
1195
|
+
"skos:prefLabel": {
|
1196
|
+
"@language": "en",
|
1197
|
+
"@value": "describing"
|
1198
|
+
}
|
1199
|
+
},
|
1200
|
+
{
|
1201
|
+
"@id": "oa:styleClass",
|
1202
|
+
"@type": "owl:DatatypeProperty",
|
1203
|
+
"rdfs:comment": {
|
1204
|
+
"@language": "en",
|
1205
|
+
"@value": "The string name of the class used in the CSS description that should be applied to the Specific Resource.\n\nThere MAY be 0 or more styleClass properties on a Specific Resource.\n\nSee oa:CssStyle."
|
1206
|
+
},
|
1207
|
+
"rdfs:domain": {
|
1208
|
+
"@id": "oa:SpecificResource"
|
1209
|
+
},
|
1210
|
+
"rdfs:isDefinedBy": {
|
1211
|
+
"@id": "oa:"
|
1212
|
+
},
|
1213
|
+
"rdfs:label": {
|
1214
|
+
"@language": "en",
|
1215
|
+
"@value": "styleClass"
|
1216
|
+
}
|
1217
|
+
},
|
1218
|
+
{
|
1219
|
+
"@id": "oa:Tag",
|
1220
|
+
"@type": "owl:Class",
|
1221
|
+
"rdfs:comment": {
|
1222
|
+
"@language": "en",
|
1223
|
+
"@value": "A class assigned to the Body when it is a tag, such as a embedded text string with cnt:chars.\n\nTags are typically keywords or labels, and used for organization, description or discovery of the resource being tagged. In the Semantic Web, URIs are used instead of strings to avoid the issue of polysemy where one word has multiple meanings, such usage MUST be indicated using the subclass oa:SemanticTag.\n\nAnnotations that tag resources, either with text or semantic tags, SHOULD also have the oa:tagging motivation to make the reason for the Annotation more clear to applications, and MAY have other motivations as well."
|
1224
|
+
},
|
1225
|
+
"rdfs:isDefinedBy": {
|
1226
|
+
"@id": "oa:"
|
1227
|
+
},
|
1228
|
+
"rdfs:label": {
|
1229
|
+
"@language": "en",
|
1230
|
+
"@value": "Tag"
|
1231
|
+
}
|
1232
|
+
},
|
1233
|
+
{
|
1234
|
+
"@id": "oa:prefix",
|
1235
|
+
"@type": "owl:DatatypeProperty",
|
1236
|
+
"rdfs:comment": {
|
1237
|
+
"@language": "en",
|
1238
|
+
"@value": "A snippet of text that occurs immediately before the text which is being selected.\n\nSee oa:TextQuoteSelector."
|
1239
|
+
},
|
1240
|
+
"rdfs:domain": {
|
1241
|
+
"@id": "oa:Selector"
|
1242
|
+
},
|
1243
|
+
"rdfs:isDefinedBy": {
|
1244
|
+
"@id": "oa:"
|
1245
|
+
},
|
1246
|
+
"rdfs:label": {
|
1247
|
+
"@language": "en",
|
1248
|
+
"@value": "prefix"
|
1249
|
+
}
|
1250
|
+
}
|
1251
|
+
]
|
1252
|
+
}
|
1253
|
+
|
1254
|
+
|
1255
|
+
http_version:
|
1256
|
+
recorded_at: Tue, 05 May 2015 19:18:18 GMT
|
1257
|
+
- request:
|
1258
|
+
method: get
|
1259
|
+
uri: http://www.w3.org/ns/oa-context-20130208.json
|
1260
|
+
body:
|
1261
|
+
encoding: US-ASCII
|
1262
|
+
string: ''
|
1263
|
+
headers:
|
1264
|
+
Accept:
|
1265
|
+
- application/ld+json, application/json
|
1266
|
+
Accept-Encoding:
|
1267
|
+
- gzip, deflate
|
1268
|
+
User-Agent:
|
1269
|
+
- Ruby
|
1270
|
+
response:
|
1271
|
+
status:
|
1272
|
+
code: 307
|
1273
|
+
message: Temporary Redirect
|
1274
|
+
headers:
|
1275
|
+
Date:
|
1276
|
+
- Tue, 05 May 2015 19:18:19 GMT
|
1277
|
+
Server:
|
1278
|
+
- Apache/2
|
1279
|
+
Location:
|
1280
|
+
- http://www.w3.org/ns/oa.jsonld
|
1281
|
+
Cache-Control:
|
1282
|
+
- max-age=21600
|
1283
|
+
Expires:
|
1284
|
+
- Wed, 06 May 2015 01:18:19 GMT
|
1285
|
+
Content-Length:
|
1286
|
+
- '240'
|
1287
|
+
Content-Type:
|
1288
|
+
- text/html; charset=iso-8859-1
|
1289
|
+
body:
|
1290
|
+
encoding: UTF-8
|
1291
|
+
string: |
|
1292
|
+
<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
|
1293
|
+
<html><head>
|
1294
|
+
<title>307 Temporary Redirect</title>
|
1295
|
+
</head><body>
|
1296
|
+
<h1>Temporary Redirect</h1>
|
1297
|
+
<p>The document has moved <a href="http://www.w3.org/ns/oa.jsonld">here</a>.</p>
|
1298
|
+
</body></html>
|
1299
|
+
http_version:
|
1300
|
+
recorded_at: Tue, 05 May 2015 19:18:19 GMT
|
1301
|
+
- request:
|
1302
|
+
method: get
|
1303
|
+
uri: http://www.w3.org/ns/oa.jsonld
|
1304
|
+
body:
|
1305
|
+
encoding: US-ASCII
|
1306
|
+
string: ''
|
1307
|
+
headers:
|
1308
|
+
Accept:
|
1309
|
+
- application/ld+json, application/json
|
1310
|
+
Accept-Encoding:
|
1311
|
+
- gzip, deflate
|
1312
|
+
Cookie:
|
1313
|
+
- ''
|
1314
|
+
User-Agent:
|
1315
|
+
- Ruby
|
1316
|
+
response:
|
1317
|
+
status:
|
1318
|
+
code: 200
|
1319
|
+
message: OK
|
1320
|
+
headers:
|
1321
|
+
Date:
|
1322
|
+
- Tue, 05 May 2015 19:18:19 GMT
|
1323
|
+
Server:
|
1324
|
+
- Apache/2
|
1325
|
+
Last-Modified:
|
1326
|
+
- Tue, 06 May 2014 11:14:49 GMT
|
1327
|
+
Etag:
|
1328
|
+
- '"b533-4f8b95b2a9c40"'
|
1329
|
+
Accept-Ranges:
|
1330
|
+
- bytes
|
1331
|
+
Content-Length:
|
1332
|
+
- '46387'
|
1333
|
+
Cache-Control:
|
1334
|
+
- max-age=21600
|
1335
|
+
Expires:
|
1336
|
+
- Wed, 06 May 2015 01:18:19 GMT
|
1337
|
+
P3p:
|
1338
|
+
- policyref="http://www.w3.org/2014/08/p3p.xml"
|
1339
|
+
Access-Control-Allow-Origin:
|
1340
|
+
- "*"
|
1341
|
+
Content-Type:
|
1342
|
+
- application/ld+json
|
1343
|
+
body:
|
1344
|
+
encoding: UTF-8
|
1345
|
+
string: |+
|
1346
|
+
{
|
1347
|
+
"@context": {
|
1348
|
+
"oa": "http://www.w3.org/ns/oa#",
|
1349
|
+
"cnt": "http://www.w3.org/2011/content#",
|
1350
|
+
"dc": "http://purl.org/dc/elements/1.1/",
|
1351
|
+
"dcterms": "http://purl.org/dc/terms/",
|
1352
|
+
"dctypes": "http://purl.org/dc/dcmitype/",
|
1353
|
+
"foaf": "http://xmlns.com/foaf/0.1/",
|
1354
|
+
"rdf": "http://www.w3.org/1999/02/22-rdf-syntax-ns#",
|
1355
|
+
"rdfs": "http://www.w3.org/2000/01/rdf-schema#",
|
1356
|
+
"skos": "http://www.w3.org/2004/02/skos/core#",
|
1357
|
+
"owl": "http://www.w3.org/2002/07/owl#",
|
1358
|
+
"prov": "http://www.w3.org/ns/prov#",
|
1359
|
+
"trig": "http://www.w3.org/2004/03/trix/rdfg-1/",
|
1360
|
+
"xsd": "http://www.w3.org/2001/XMLSchema#",
|
1361
|
+
|
1362
|
+
|
1363
|
+
"hasBody" : {"@type":"@id", "@id" : "oa:hasBody"},
|
1364
|
+
"hasTarget" : {"@type":"@id", "@id" : "oa:hasTarget"},
|
1365
|
+
"hasSource" : {"@type":"@id", "@id" : "oa:hasSource"},
|
1366
|
+
"hasSelector" : {"@type":"@id", "@id" : "oa:hasSelector"},
|
1367
|
+
"hasState" : {"@type":"@id", "@id" : "oa:hasState"},
|
1368
|
+
"hasScope" : {"@type":"@id", "@id" : "oa:hasScope"},
|
1369
|
+
"annotatedBy" : {"@type":"@id", "@id" : "oa:annotatedBy"},
|
1370
|
+
"serializedBy" : {"@type":"@id", "@id" : "oa:serializedBy"},
|
1371
|
+
"motivatedBy" : {"@type":"@id", "@id" : "oa:motivatedBy"},
|
1372
|
+
"equivalentTo" : {"@type":"@id", "@id" : "oa:equivalentTo"},
|
1373
|
+
"styledBy" : {"@type":"@id", "@id" : "oa:styledBy"},
|
1374
|
+
"cachedSource" : {"@type":"@id", "@id" : "oa:cachedSource"},
|
1375
|
+
"conformsTo" : {"@type":"@id", "@id" : "dcterms:conformsTo"},
|
1376
|
+
"default" : {"@type":"@id", "@id" : "oa:default"},
|
1377
|
+
"item" : {"@type":"@id", "@id" : "oa:item"},
|
1378
|
+
"first": {"@type":"@id", "@id" : "rdf:first"},
|
1379
|
+
"rest": {"@type":"@id", "@id" : "rdf:rest", "@container" : "@list"},
|
1380
|
+
|
1381
|
+
"annotatedAt" : { "@type": "xsd:dateTimeStamp", "@id": "oa:annotatedAt" },
|
1382
|
+
"end" : { "@type": "xsd:nonNegativeInteger", "@id": "oa:end" },
|
1383
|
+
"exact" : "oa:exact",
|
1384
|
+
"prefix" : "oa:prefix",
|
1385
|
+
"serializedAt" : { "@type": "xsd:dateTimeStamp", "@id": "oa:serializedAt" },
|
1386
|
+
"start" : { "@type": "xsd:nonNegativeInteger", "@id": "oa:start" },
|
1387
|
+
"styleClass" : "oa:styleClass",
|
1388
|
+
"suffix" : "oa:suffix",
|
1389
|
+
"when" : { "@type": "xsd:dateTimeStamp", "@id": "oa:when" },
|
1390
|
+
|
1391
|
+
"chars" : "cnt:chars",
|
1392
|
+
"bytes" : "cnt:bytes",
|
1393
|
+
"format" : "dc:format",
|
1394
|
+
"language" : "dc:language",
|
1395
|
+
"value" : "rdf:value",
|
1396
|
+
"label" : "rdfs:label",
|
1397
|
+
"name" : "foaf:name",
|
1398
|
+
"mbox" : "foaf:mbox"
|
1399
|
+
|
1400
|
+
},
|
1401
|
+
"@graph": [
|
1402
|
+
{
|
1403
|
+
"@id": "oa:annotatedBy",
|
1404
|
+
"@type": "owl:ObjectProperty",
|
1405
|
+
"rdfs:comment": {
|
1406
|
+
"@language": "en",
|
1407
|
+
"@value": "The object of the relationship is a resource that identifies the agent responsible for creating the Annotation. This may be either a human or software agent. \n\nThere SHOULD be exactly 1 oa:annotatedBy relationship per Annotation, but MAY be 0 or more than 1, as the Annotation may be anonymous, or multiple agents may have worked together on it.\n\nIt is RECOMMENDED to use these and other FOAF terms to describe agents: foaf:Person, prov:SoftwareAgent, foaf:Organization, foaf:name, foaf:mbox, foaf:openid, foaf:homepage"
|
1408
|
+
},
|
1409
|
+
"rdfs:domain": {
|
1410
|
+
"@id": "oa:Annotation"
|
1411
|
+
},
|
1412
|
+
"rdfs:isDefinedBy": {
|
1413
|
+
"@id": "oa:"
|
1414
|
+
},
|
1415
|
+
"rdfs:label": {
|
1416
|
+
"@language": "en",
|
1417
|
+
"@value": "annotatedBy"
|
1418
|
+
},
|
1419
|
+
"rdfs:subPropertyOf": {
|
1420
|
+
"@id": "prov:wasAttributedTo"
|
1421
|
+
}
|
1422
|
+
},
|
1423
|
+
{
|
1424
|
+
"@id": "oa:commenting",
|
1425
|
+
"@type": [
|
1426
|
+
"oa:Motivation",
|
1427
|
+
"owl:NamedIndividual"
|
1428
|
+
],
|
1429
|
+
"rdfs:comment": {
|
1430
|
+
"@language": "en",
|
1431
|
+
"@value": "The motivation that represents a commentary about or review of the target resource(s). For example to provide a commentary about a particular PDF."
|
1432
|
+
},
|
1433
|
+
"skos:inScheme": {
|
1434
|
+
"@id": "oa:motivationScheme"
|
1435
|
+
},
|
1436
|
+
"skos:prefLabel": {
|
1437
|
+
"@language": "en",
|
1438
|
+
"@value": "commenting"
|
1439
|
+
}
|
1440
|
+
},
|
1441
|
+
{
|
1442
|
+
"@id": "oa:SvgSelector",
|
1443
|
+
"@type": "owl:Class",
|
1444
|
+
"rdfs:comment": {
|
1445
|
+
"@language": "en",
|
1446
|
+
"@value": "A Selector which selects an area specified as an SVG shape.\n\nThe SVG document should either be retrievable by resolving the URI of this resource, or be included as an Embedded Resource using cnt:Content.\n\nIt is RECOMMENDED that the document contain only a single shape element and that element SHOULD be one of: path, rect, circle, ellipse, polyline, polygon or g. The g element SHOULD ONLY be used to construct a multi-element group, for example to define a donut shape requiring an outer circle and a clipped inner circle.\n\nThe dimensions of both the shape and the SVG canvas MUST be relative to the dimensions of the Source resource. For example, given an image which is 600 pixels by 400 pixels, and the desired section is a circle of 100 pixel radius at the center of the image, then the SVG element would be: <circle cx=\"300\" cy=\"200\" r=\"100\"/>\n\nIt is NOT RECOMMENDED to include style information within the SVG element, nor Javascript, animation, text or other non shape oriented information. Clients SHOULD ignore such information if present."
|
1447
|
+
},
|
1448
|
+
"rdfs:isDefinedBy": {
|
1449
|
+
"@id": "oa:"
|
1450
|
+
},
|
1451
|
+
"rdfs:label": {
|
1452
|
+
"@language": "en",
|
1453
|
+
"@value": "SvgSelector"
|
1454
|
+
},
|
1455
|
+
"rdfs:subClassOf": {
|
1456
|
+
"@id": "oa:Selector"
|
1457
|
+
}
|
1458
|
+
},
|
1459
|
+
{
|
1460
|
+
"@id": "oa:Selector",
|
1461
|
+
"@type": "owl:Class",
|
1462
|
+
"rdfs:comment": {
|
1463
|
+
"@language": "en",
|
1464
|
+
"@value": "A resource which describes the segment of interest in a representation of a Source resource, indicated with oa:hasSelector from the Specific Resource. \n\nThis class is not used directly in Annotations, only its subclasses are.\n\nThe nature of the Selector will be dependent on the type of the representation for which the segment is conveyed. The specific type of selector should be indicated using a subclass of oa:Selector.\n\nThe Specifier's description MAY be conveyed as an external or embedded resource (cnt:Content), or as RDF properties within the graph. The description SHOULD use existing standards whenever possible. If the Specifier has an HTTP URI, then its description, and only its description, MUST be returned when the URI is dereferenced."
|
1465
|
+
},
|
1466
|
+
"rdfs:isDefinedBy": {
|
1467
|
+
"@id": "oa:"
|
1468
|
+
},
|
1469
|
+
"rdfs:label": {
|
1470
|
+
"@language": "en",
|
1471
|
+
"@value": "Selector"
|
1472
|
+
}
|
1473
|
+
},
|
1474
|
+
{
|
1475
|
+
"@id": "oa:Style",
|
1476
|
+
"@type": "owl:Class",
|
1477
|
+
"rdfs:comment": {
|
1478
|
+
"@language": "en",
|
1479
|
+
"@value": "A resource which describes the style in which the selection or resource should be rendered, indicated with oa:styledBy from an oa:Annotation.\n\nThis class is not used directly in Annotations, only its subclasses are.\n\nThe content of the resource provides the rendering hints about the Annotation's constituent resources. \n\nThe Specifier's description MAY be conveyed as an external or embedded resource (cnt:Content), or as RDF properties within the graph. The description SHOULD use existing standards whenever possible. If the Specifier has an HTTP URI, then its description, and only its description, MUST be returned when the URI is dereferenced."
|
1480
|
+
},
|
1481
|
+
"rdfs:isDefinedBy": {
|
1482
|
+
"@id": "oa:"
|
1483
|
+
},
|
1484
|
+
"rdfs:label": {
|
1485
|
+
"@language": "en",
|
1486
|
+
"@value": "Style"
|
1487
|
+
}
|
1488
|
+
},
|
1489
|
+
{
|
1490
|
+
"@id": "oa:exact",
|
1491
|
+
"@type": "owl:DatatypeProperty",
|
1492
|
+
"rdfs:comment": {
|
1493
|
+
"@language": "en",
|
1494
|
+
"@value": "A copy of the text which is being selected, after normalization.\n\nSee oa:TextQuoteSelector."
|
1495
|
+
},
|
1496
|
+
"rdfs:domain": {
|
1497
|
+
"@id": "oa:Selector"
|
1498
|
+
},
|
1499
|
+
"rdfs:isDefinedBy": {
|
1500
|
+
"@id": "oa:"
|
1501
|
+
},
|
1502
|
+
"rdfs:label": {
|
1503
|
+
"@language": "en",
|
1504
|
+
"@value": "exact"
|
1505
|
+
}
|
1506
|
+
},
|
1507
|
+
{
|
1508
|
+
"@id": "oa:hasBody",
|
1509
|
+
"@type": "owl:ObjectProperty",
|
1510
|
+
"rdfs:comment": {
|
1511
|
+
"@language": "en",
|
1512
|
+
"@value": "The relationship between oa:Annotation and body. The body is somehow \"about\" the oa:hasTarget of the annotation.\n\nThe Body may be of any media type, and contain any type of content. The Body SHOULD be identified by HTTP URIs unless they are embedded within the Annotation.\n\nEmbedded bodies SHOULD be instances of cnt:ContentAsText and embed their content with cnt:chars. They SHOULD declare their media type with dc:format, and MAY indicate their language using dc:language and a RFC-3066 language tag. \n\nThere is no OA class provided for \"Body\" as a body might be a target of a different annotation. However, there SHOULD be 1 or more content-based classes associated with the body resources of an Annotation, and the dctypes: vocabulary is recommended for this purpose, for instance dctypes:Text to declare textual content.\n"
|
1513
|
+
},
|
1514
|
+
"rdfs:domain": {
|
1515
|
+
"@id": "oa:Annotation"
|
1516
|
+
},
|
1517
|
+
"rdfs:isDefinedBy": {
|
1518
|
+
"@id": "oa:"
|
1519
|
+
},
|
1520
|
+
"rdfs:label": {
|
1521
|
+
"@language": "en",
|
1522
|
+
"@value": "hasBody"
|
1523
|
+
}
|
1524
|
+
},
|
1525
|
+
{
|
1526
|
+
"@id": "oa:Choice",
|
1527
|
+
"@type": "owl:Class",
|
1528
|
+
"rdfs:comment": {
|
1529
|
+
"@language": "en",
|
1530
|
+
"@value": "A multiplicity construct that conveys to a consuming application that it should select one of the constituent resources to display to the user, and not render/use all of them. \n\noa:Choice can be used as the object of the object of the oa:hasBody, oa:hasTarget, oa:hasSelector, oa:hasState, oa:styledBy and oa:hasScope relationships, \n\nThere MUST be 1 or more oa:item relationships for each oa:Choice.\n\nThere SHOULD be exactly 1 default relationship for each Choice."
|
1531
|
+
},
|
1532
|
+
"rdfs:isDefinedBy": {
|
1533
|
+
"@id": "oa:"
|
1534
|
+
},
|
1535
|
+
"rdfs:label": {
|
1536
|
+
"@language": "en",
|
1537
|
+
"@value": "Choice"
|
1538
|
+
},
|
1539
|
+
"rdfs:subClassOf": {
|
1540
|
+
"@id": "rdf:Alt"
|
1541
|
+
}
|
1542
|
+
},
|
1543
|
+
{
|
1544
|
+
"@id": "oa:when",
|
1545
|
+
"@type": "owl:DatatypeProperty",
|
1546
|
+
"rdfs:comment": {
|
1547
|
+
"@language": "en",
|
1548
|
+
"@value": "The timestamp at which the Source resource should be interpreted for the Annotation, typically the time that the Annotation was created."
|
1549
|
+
},
|
1550
|
+
"rdfs:domain": {
|
1551
|
+
"@id": "oa:TimeState"
|
1552
|
+
},
|
1553
|
+
"rdfs:isDefinedBy": {
|
1554
|
+
"@id": "oa:"
|
1555
|
+
},
|
1556
|
+
"rdfs:label": {
|
1557
|
+
"@language": "en",
|
1558
|
+
"@value": "when"
|
1559
|
+
},
|
1560
|
+
"rdfs:range": {
|
1561
|
+
"@id": "xsd:dateTimeStamp"
|
1562
|
+
}
|
1563
|
+
},
|
1564
|
+
{
|
1565
|
+
"@id": "oa:serializedBy",
|
1566
|
+
"@type": "owl:ObjectProperty",
|
1567
|
+
"rdfs:comment": {
|
1568
|
+
"@language": "en",
|
1569
|
+
"@value": "The object of the relationship is the agent, likely software, responsible for generating the serialization of the Annotation's serialization. \n\nIt is RECOMMENDED to use these and other FOAF terms to describe agents: foaf:Person, prov:SoftwareAgent, foaf:Organization, foaf:name, foaf:mbox, foaf:openid, foaf:homepage\n\nThere MAY be 0 or more oa:serializedBy relationships per Annotation."
|
1570
|
+
},
|
1571
|
+
"rdfs:domain": {
|
1572
|
+
"@id": "oa:Annotation"
|
1573
|
+
},
|
1574
|
+
"rdfs:isDefinedBy": {
|
1575
|
+
"@id": "oa:"
|
1576
|
+
},
|
1577
|
+
"rdfs:label": {
|
1578
|
+
"@language": "en",
|
1579
|
+
"@value": "serializedBy"
|
1580
|
+
},
|
1581
|
+
"rdfs:subPropertyOf": {
|
1582
|
+
"@id": "prov:wasAttributedTo"
|
1583
|
+
}
|
1584
|
+
},
|
1585
|
+
{
|
1586
|
+
"@id": "oa:motivatedBy",
|
1587
|
+
"@type": "owl:ObjectProperty",
|
1588
|
+
"rdfs:comment": {
|
1589
|
+
"@language": "en",
|
1590
|
+
"@value": "The relationship between an Annotation and a Motivation, indicating the reasons why the Annotation was created.\n\nEach Annotation SHOULD have at least one oa:motivatedBy relationship, and MAY be more than 1."
|
1591
|
+
},
|
1592
|
+
"rdfs:domain": {
|
1593
|
+
"@id": "oa:Annotation"
|
1594
|
+
},
|
1595
|
+
"rdfs:isDefinedBy": {
|
1596
|
+
"@id": "oa:"
|
1597
|
+
},
|
1598
|
+
"rdfs:label": {
|
1599
|
+
"@language": "en",
|
1600
|
+
"@value": "motivatedBy"
|
1601
|
+
},
|
1602
|
+
"rdfs:range": {
|
1603
|
+
"@id": "oa:Motivation"
|
1604
|
+
}
|
1605
|
+
},
|
1606
|
+
{
|
1607
|
+
"@id": "oa:moderating",
|
1608
|
+
"@type": [
|
1609
|
+
"oa:Motivation",
|
1610
|
+
"owl:NamedIndividual"
|
1611
|
+
],
|
1612
|
+
"rdfs:comment": {
|
1613
|
+
"@language": "en",
|
1614
|
+
"@value": "The motivation that represents an assignment of value or quality to the target resource(s). For example annotating an Annotation to moderate it up in a trust network or threaded discussion."
|
1615
|
+
},
|
1616
|
+
"skos:inScheme": {
|
1617
|
+
"@id": "oa:motivationScheme"
|
1618
|
+
},
|
1619
|
+
"skos:prefLabel": {
|
1620
|
+
"@language": "en",
|
1621
|
+
"@value": "moderating"
|
1622
|
+
}
|
1623
|
+
},
|
1624
|
+
{
|
1625
|
+
"@id": "oa:highlighting",
|
1626
|
+
"@type": [
|
1627
|
+
"oa:Motivation",
|
1628
|
+
"owl:NamedIndividual"
|
1629
|
+
],
|
1630
|
+
"rdfs:comment": {
|
1631
|
+
"@language": "en",
|
1632
|
+
"@value": "The motivation that represents a highlighted section of the target resource or segment. For example to draw attention to the selected text that the annotator disagrees with. A Highlight may or may not have a Body resource"
|
1633
|
+
},
|
1634
|
+
"skos:inScheme": {
|
1635
|
+
"@id": "oa:motivationScheme"
|
1636
|
+
},
|
1637
|
+
"skos:prefLabel": {
|
1638
|
+
"@language": "en",
|
1639
|
+
"@value": "highlighting"
|
1640
|
+
}
|
1641
|
+
},
|
1642
|
+
{
|
1643
|
+
"@id": "oa:styledBy",
|
1644
|
+
"@type": "owl:ObjectProperty",
|
1645
|
+
"rdfs:comment": {
|
1646
|
+
"@language": "en",
|
1647
|
+
"@value": "The relationship between a oa:Annotation and a oa:Style.\n\nThere MAY be 0 or 1 styledBy relationships for each Annotation.\n\nIf there are multiple Style resources that must be associated with the Annotation, then the use of the Multiplicity Constructs oa:Choice, oa:Composite or oa:List is RECOMMENDED."
|
1648
|
+
},
|
1649
|
+
"rdfs:domain": {
|
1650
|
+
"@id": "oa:Annotation"
|
1651
|
+
},
|
1652
|
+
"rdfs:isDefinedBy": {
|
1653
|
+
"@id": "oa:"
|
1654
|
+
},
|
1655
|
+
"rdfs:label": {
|
1656
|
+
"@language": "en",
|
1657
|
+
"@value": "styledBy"
|
1658
|
+
},
|
1659
|
+
"rdfs:range": {
|
1660
|
+
"@id": "oa:Style"
|
1661
|
+
}
|
1662
|
+
},
|
1663
|
+
{
|
1664
|
+
"@id": "oa:FragmentSelector",
|
1665
|
+
"@type": "owl:Class",
|
1666
|
+
"rdfs:comment": {
|
1667
|
+
"@language": "en",
|
1668
|
+
"@value": "A Selector which describes the segment of interest in a representation, through the use of the fragment identifier component of a URI.\n\nIt is RECOMMENDED to use oa:FragmentSelector as the selector on a Specific Resource rather than annotating the fragment URI directly, in order to improve discoverability of annotation on the Source.\n\nThe oa:FragmentSelector MUST have exactly 1 rdf:value property, containing the fragment identifier component of a URI that describes the segment of interest in the resource, excluding the initial \"#\".\n\nThe Fragment Selector SHOULD have a dcterms:conformsTo relationship with the object being the specification that defines the syntax of the fragment, for instance <http://tools.ietf.org/rfc/rfc3236> for HTML fragments. "
|
1669
|
+
},
|
1670
|
+
"rdfs:isDefinedBy": {
|
1671
|
+
"@id": "oa:"
|
1672
|
+
},
|
1673
|
+
"rdfs:label": {
|
1674
|
+
"@language": "en",
|
1675
|
+
"@value": "FragmentSelector"
|
1676
|
+
},
|
1677
|
+
"rdfs:subClassOf": {
|
1678
|
+
"@id": "oa:Selector"
|
1679
|
+
}
|
1680
|
+
},
|
1681
|
+
{
|
1682
|
+
"@id": "oa:SpecificResource",
|
1683
|
+
"@type": "owl:Class",
|
1684
|
+
"rdfs:comment": {
|
1685
|
+
"@language": "en",
|
1686
|
+
"@value": "A resource identifies part of another Source resource, a particular representation of a resource, a resource with styling hints for renders, or any combination of these. \n\nThe Specific Resource takes the role of oa:hasBody or oa:hasTarget in an oa:Annotation instead of the Source resource.\n\nThere MUST be exactly 1 oa:hasSource relationship associated with a Specific Resource.\n\nThere MUST be exactly 0 or 1 oa:hasSelector relationship associated with a Specific Resource.\n\nThere MAY be 0 or 1 oa:hasState relationship for each Specific Resource.\n\nIf the Specific Resource has an HTTP URI, then the exact segment of the Source resource that it identifies, and only the segment, MUST be returned when the URI is dereferenced. For example, if the segment of interest is a region of an image and the Specific Resource has an HTTP URI, then dereferencing it MUST return the selected region of the image as it was at the time when the annotation was created. Typically this would be a burden to support, and thus the Specific Resource SHOULD be identified by a globally unique URI, such as a UUID URN. If it is not considered important to allow other Annotations or systems to refer to the Specific Resource, then a blank node MAY be used instead."
|
1687
|
+
},
|
1688
|
+
"rdfs:isDefinedBy": {
|
1689
|
+
"@id": "oa:"
|
1690
|
+
},
|
1691
|
+
"rdfs:label": {
|
1692
|
+
"@language": "en",
|
1693
|
+
"@value": "SpecificResource"
|
1694
|
+
}
|
1695
|
+
},
|
1696
|
+
{
|
1697
|
+
"@id": "oa:annotatedAt",
|
1698
|
+
"@type": "owl:DatatypeProperty",
|
1699
|
+
"rdfs:comment": {
|
1700
|
+
"@language": "en",
|
1701
|
+
"@value": "The time at which the Annotation was created. \n\nThere SHOULD be exactly 1 oa:annotatedAt property per Annotation, and MUST NOT be more than 1. The datetime MUST be expressed in the xsd:dateTime format, and SHOULD have a timezone specified."
|
1702
|
+
},
|
1703
|
+
"rdfs:domain": {
|
1704
|
+
"@id": "oa:Annotation"
|
1705
|
+
},
|
1706
|
+
"rdfs:isDefinedBy": {
|
1707
|
+
"@id": "oa:"
|
1708
|
+
},
|
1709
|
+
"rdfs:label": {
|
1710
|
+
"@language": "en",
|
1711
|
+
"@value": "annotatedAt"
|
1712
|
+
},
|
1713
|
+
"rdfs:range": {
|
1714
|
+
"@id": "xsd:dateTimeStamp"
|
1715
|
+
}
|
1716
|
+
},
|
1717
|
+
{
|
1718
|
+
"@id": "oa:editing",
|
1719
|
+
"@type": [
|
1720
|
+
"oa:Motivation",
|
1721
|
+
"owl:NamedIndividual"
|
1722
|
+
],
|
1723
|
+
"rdfs:comment": {
|
1724
|
+
"@language": "en",
|
1725
|
+
"@value": "The motivation that represents a request for a modification or edit to the target resource. For example, an Annotation that requests a typo to be corrected."
|
1726
|
+
},
|
1727
|
+
"skos:inScheme": {
|
1728
|
+
"@id": "oa:motivationScheme"
|
1729
|
+
},
|
1730
|
+
"skos:prefLabel": {
|
1731
|
+
"@language": "en",
|
1732
|
+
"@value": "editing"
|
1733
|
+
}
|
1734
|
+
},
|
1735
|
+
{
|
1736
|
+
"@id": "oa:Annotation",
|
1737
|
+
"@type": "owl:Class",
|
1738
|
+
"rdfs:comment": {
|
1739
|
+
"@language": "en",
|
1740
|
+
"@value": "Typically an Annotation has a single Body (oa:hasBody), which is the comment or other descriptive resource, and a single Target (oa:hasTarget) that the Body is somehow \"about\". The Body provides the information which is annotating the Target. \n\nThis \"aboutness\" may be further clarified or extended to notions such as classifying or identifying with oa:motivatedBy."
|
1741
|
+
},
|
1742
|
+
"rdfs:isDefinedBy": {
|
1743
|
+
"@id": "oa:"
|
1744
|
+
},
|
1745
|
+
"rdfs:label": {
|
1746
|
+
"@language": "en",
|
1747
|
+
"@value": "Annotation"
|
1748
|
+
}
|
1749
|
+
},
|
1750
|
+
{
|
1751
|
+
"@id": "oa:equivalentTo",
|
1752
|
+
"@type": "owl:ObjectProperty",
|
1753
|
+
"rdfs:comment": {
|
1754
|
+
"@language": "en",
|
1755
|
+
"@value": "The subject and object resources of the oa:equivalentTo relationship represent the same resource, but potentially have different metadata such as oa:serializedBy, oa:serializedAt and serialization format. oa:equivalentTo is a symmetrical and transitive relationship; if A oa:equivalentTo B, then it is also true that B oa:equivalent A; and that if B oa:equivalentTo C, then it is also true that A oa:equivalentTo C. \n\nThe Annotation MAY include 0 or more instances of the oa:equivalentTo relationship between copies of the Annotation or other resources, and SHOULD include as many as are available.\n\nIf a system publishes an embedded resource (a cnt:Content) at a new HTTP URI, then it SHOULD express the oa:equivalentTo relationship between the resource's URN and the new URI from which it is available."
|
1756
|
+
},
|
1757
|
+
"rdfs:isDefinedBy": {
|
1758
|
+
"@id": "oa:"
|
1759
|
+
},
|
1760
|
+
"rdfs:label": {
|
1761
|
+
"@language": "en",
|
1762
|
+
"@value": "equivalentTo"
|
1763
|
+
},
|
1764
|
+
"rdfs:subPropertyOf": {
|
1765
|
+
"@id": "prov:alternateOf"
|
1766
|
+
}
|
1767
|
+
},
|
1768
|
+
{
|
1769
|
+
"@id": "oa:Motivation",
|
1770
|
+
"@type": "owl:Class",
|
1771
|
+
"rdfs:comment": {
|
1772
|
+
"@language": "en",
|
1773
|
+
"@value": "The Motivation for creating an Annotation, indicated with oa:motivatedBy, is a reason for its creation, and might include things like oa:replying to another annotation, oa:commenting on a resource, or oa:linking to a related resource.\n\nEach Annotation SHOULD have at least one oa:motivatedBy relationship to an instance of oa:Motivation, which is a subClass of skos:Concept."
|
1774
|
+
},
|
1775
|
+
"rdfs:isDefinedBy": {
|
1776
|
+
"@id": "oa:"
|
1777
|
+
},
|
1778
|
+
"rdfs:label": {
|
1779
|
+
"@language": "en",
|
1780
|
+
"@value": "Motivation"
|
1781
|
+
},
|
1782
|
+
"rdfs:subClassOf": {
|
1783
|
+
"@id": "skos:Concept"
|
1784
|
+
}
|
1785
|
+
},
|
1786
|
+
{
|
1787
|
+
"@id": "oa:tagging",
|
1788
|
+
"@type": [
|
1789
|
+
"oa:Motivation",
|
1790
|
+
"owl:NamedIndividual"
|
1791
|
+
],
|
1792
|
+
"rdfs:comment": {
|
1793
|
+
"@language": "en",
|
1794
|
+
"@value": "The motivation that represents adding a Tag on the target resource(s). One or more of the bodies of the annotation should be typed as a oa:Tag or oa:SemanticTag."
|
1795
|
+
},
|
1796
|
+
"skos:inScheme": {
|
1797
|
+
"@id": "oa:motivationScheme"
|
1798
|
+
},
|
1799
|
+
"skos:prefLabel": {
|
1800
|
+
"@language": "en",
|
1801
|
+
"@value": "tagging"
|
1802
|
+
}
|
1803
|
+
},
|
1804
|
+
{
|
1805
|
+
"@id": "oa:List",
|
1806
|
+
"@type": "owl:Class",
|
1807
|
+
"rdfs:comment": {
|
1808
|
+
"@language": "en",
|
1809
|
+
"@value": "A multiplicity construct that conveys to a consuming application that all of the constituent resources are required for the Annotation to be correctly interpreted, and in a particular order. \n\noa:List can be used as the object of the object of the oa:hasBody, oa:hasTarget, oa:hasSelector, oa:hasState, oa:styledBy and oa:hasScope relationships, \n\nThere MUST be 2 or more oa:item relationships for each oa:List, with their order defined using the rdf:List construct of rdf:first/rdf:rest/rdf:nil.\n\nAll the elements of the list should also be declared using oa:item, and each of the oa:items should appear at least once in the list."
|
1810
|
+
},
|
1811
|
+
"rdfs:isDefinedBy": {
|
1812
|
+
"@id": "oa:"
|
1813
|
+
},
|
1814
|
+
"rdfs:label": {
|
1815
|
+
"@language": "en",
|
1816
|
+
"@value": "List"
|
1817
|
+
},
|
1818
|
+
"rdfs:subClassOf": {
|
1819
|
+
"@id": "oa:Composite"
|
1820
|
+
}
|
1821
|
+
},
|
1822
|
+
{
|
1823
|
+
"@id": "oa:TextQuoteSelector",
|
1824
|
+
"@type": "owl:Class",
|
1825
|
+
"rdfs:comment": {
|
1826
|
+
"@language": "en",
|
1827
|
+
"@value": "A Selector that describes a textual segment by means of quoting it, plus passages before or after it.\n\nFor example, if the document were \"abcdefghijklmnopqrstuvwxyz\", one could select \"efg\" by a oa:prefix of \"abcd\", the quotation of oa:exact \"efg\" and a oa:suffix of \"hijk\".\n\nThe text MUST be normalized before recording.\n\nEach TextQuoteSelector MUST have exactly 1 oa:exact property.\n\nEach TextQuoteSelector SHOULD have exactly 1 oa:prefix property, and MUST NOT have more than 1.\n\nEach TextQuoteSelector SHOULD have exactly 1 oa:suffix property, and MUST NOT have more than 1."
|
1828
|
+
},
|
1829
|
+
"rdfs:isDefinedBy": {
|
1830
|
+
"@id": "oa:"
|
1831
|
+
},
|
1832
|
+
"rdfs:label": {
|
1833
|
+
"@language": "en",
|
1834
|
+
"@value": "TextQuoteSelector"
|
1835
|
+
},
|
1836
|
+
"rdfs:subClassOf": {
|
1837
|
+
"@id": "oa:Selector"
|
1838
|
+
}
|
1839
|
+
},
|
1840
|
+
{
|
1841
|
+
"@id": "oa:cachedSource",
|
1842
|
+
"@type": "owl:ObjectProperty",
|
1843
|
+
"rdfs:comment": {
|
1844
|
+
"@language": "en",
|
1845
|
+
"@value": "A link to a copy of the Source resource's representation appropriate for the Annotation, typically a copy of the original at the time that the Annotation was created"
|
1846
|
+
},
|
1847
|
+
"rdfs:domain": {
|
1848
|
+
"@id": "oa:TimeState"
|
1849
|
+
},
|
1850
|
+
"rdfs:isDefinedBy": {
|
1851
|
+
"@id": "oa:"
|
1852
|
+
},
|
1853
|
+
"rdfs:label": {
|
1854
|
+
"@language": "en",
|
1855
|
+
"@value": "cachedSource"
|
1856
|
+
}
|
1857
|
+
},
|
1858
|
+
{
|
1859
|
+
"@id": "oa:bookmarking",
|
1860
|
+
"@type": [
|
1861
|
+
"oa:Motivation",
|
1862
|
+
"owl:NamedIndividual"
|
1863
|
+
],
|
1864
|
+
"rdfs:comment": {
|
1865
|
+
"@language": "en",
|
1866
|
+
"@value": "The motivation that represents the creation of a bookmark to the target resources or recorded point or points within one or more resources. For example, an Annotation that bookmarks the point in a text where the reader finished reading. Bookmark Annotations may or may not have a Body resource."
|
1867
|
+
},
|
1868
|
+
"skos:inScheme": {
|
1869
|
+
"@id": "oa:motivationScheme"
|
1870
|
+
},
|
1871
|
+
"skos:prefLabel": {
|
1872
|
+
"@language": "en",
|
1873
|
+
"@value": "bookmarking"
|
1874
|
+
}
|
1875
|
+
},
|
1876
|
+
{
|
1877
|
+
"@id": "oa:SemanticTag",
|
1878
|
+
"@type": "owl:Class",
|
1879
|
+
"rdfs:comment": {
|
1880
|
+
"@language": "en",
|
1881
|
+
"@value": "A class assigned to the Body when it is a semantic tagging resource; a URI that identifies a concept, rather than an embedded string, frequently a term from a controlled vocabulary.\n\nIt is NOT RECOMMENDED to use the URI of a document as a Semantic Tag, as it might also be used as a regular Body in other Annotations which would inherit the oa:SemanticTag class assignment. Instead it is more appropriate to create a new URI and link it to the document, using the foaf:page predicate."
|
1882
|
+
},
|
1883
|
+
"rdfs:isDefinedBy": {
|
1884
|
+
"@id": "oa:"
|
1885
|
+
},
|
1886
|
+
"rdfs:label": {
|
1887
|
+
"@language": "en",
|
1888
|
+
"@value": "SemanticTag"
|
1889
|
+
},
|
1890
|
+
"rdfs:subClassOf": {
|
1891
|
+
"@id": "oa:Tag"
|
1892
|
+
}
|
1893
|
+
},
|
1894
|
+
{
|
1895
|
+
"@id": "oa:hasSource",
|
1896
|
+
"@type": "owl:ObjectProperty",
|
1897
|
+
"rdfs:comment": {
|
1898
|
+
"@language": "en",
|
1899
|
+
"@value": "The relationship between a oa:SpecificResource and the resource that it is a more specific representation of. \n\nThere MUST be exactly 1 oa:hasSource relationship associated with a Specific Resource."
|
1900
|
+
},
|
1901
|
+
"rdfs:domain": {
|
1902
|
+
"@id": "oa:SpecificResource"
|
1903
|
+
},
|
1904
|
+
"rdfs:isDefinedBy": {
|
1905
|
+
"@id": "oa:"
|
1906
|
+
},
|
1907
|
+
"rdfs:label": {
|
1908
|
+
"@language": "en",
|
1909
|
+
"@value": "hasSource"
|
1910
|
+
}
|
1911
|
+
},
|
1912
|
+
{
|
1913
|
+
"@id": "oa:default",
|
1914
|
+
"@type": "owl:ObjectProperty",
|
1915
|
+
"rdfs:comment": {
|
1916
|
+
"@language": "en",
|
1917
|
+
"@value": "The constituent resource of a oa:Choice to use as a default option, if there is no other means to determine which would be most appropriate.\n\nThere SHOULD be exactly 1 default relationship for each Choice."
|
1918
|
+
},
|
1919
|
+
"rdfs:domain": {
|
1920
|
+
"@id": "oa:Choice"
|
1921
|
+
},
|
1922
|
+
"rdfs:isDefinedBy": {
|
1923
|
+
"@id": "oa:"
|
1924
|
+
},
|
1925
|
+
"rdfs:label": {
|
1926
|
+
"@language": "en",
|
1927
|
+
"@value": "default"
|
1928
|
+
},
|
1929
|
+
"rdfs:subPropertyOf": {
|
1930
|
+
"@id": "oa:item"
|
1931
|
+
}
|
1932
|
+
},
|
1933
|
+
{
|
1934
|
+
"@id": "oa:hasSelector",
|
1935
|
+
"@type": "owl:ObjectProperty",
|
1936
|
+
"rdfs:comment": {
|
1937
|
+
"@language": "en",
|
1938
|
+
"@value": "The relationship between a oa:SpecificResource and a oa:Selector.\n\nThere MUST be exactly 0 or 1 oa:hasSelector relationship associated with a \nSpecific Resource. \n\nIf multiple Selectors are required, either to express a choice between different optional, equivalent selectors, or a chain of selectors that should all be processed, it is necessary to use oa:Choice, oa:Composite or oa:List as a selector."
|
1939
|
+
},
|
1940
|
+
"rdfs:domain": {
|
1941
|
+
"@id": "oa:SpecificResource"
|
1942
|
+
},
|
1943
|
+
"rdfs:isDefinedBy": {
|
1944
|
+
"@id": "oa:"
|
1945
|
+
},
|
1946
|
+
"rdfs:label": {
|
1947
|
+
"@language": "en",
|
1948
|
+
"@value": "hasSelector"
|
1949
|
+
},
|
1950
|
+
"rdfs:range": {
|
1951
|
+
"@id": "oa:Selector"
|
1952
|
+
}
|
1953
|
+
},
|
1954
|
+
{
|
1955
|
+
"@id": "oa:hasTarget",
|
1956
|
+
"@type": "owl:ObjectProperty",
|
1957
|
+
"rdfs:comment": {
|
1958
|
+
"@language": "en",
|
1959
|
+
"@value": "The relationship between oa:Annotation and target. The target resource is what the oa:hasBody is somewhat \"about\".\n\nThe target may be of any media type, and contain any type of content. The target SHOULD be identified by HTTP URIs unless they are embedded within the Annotation.\n\nEmbedded targets SHOULD be instances of cnt:ContentAsText and embed their content with cnt:chars. They SHOULD declare their media type with dc:format, and MAY indicate their language using dc:language and a RFC-3066 language tag. \n\nThere is no OA class provided for \"Target\" as a target might be a body in a different annotation. However, there SHOULD be 1 or more content-based classes associated with the target resources of an Annotation, and the dctypes: vocabulary is recommended for this purpose, for instance dctypes:Text to declare textual content."
|
1960
|
+
},
|
1961
|
+
"rdfs:domain": {
|
1962
|
+
"@id": "oa:Annotation"
|
1963
|
+
},
|
1964
|
+
"rdfs:isDefinedBy": {
|
1965
|
+
"@id": "oa:"
|
1966
|
+
},
|
1967
|
+
"rdfs:label": {
|
1968
|
+
"@language": "en",
|
1969
|
+
"@value": "hasTarget"
|
1970
|
+
}
|
1971
|
+
},
|
1972
|
+
{
|
1973
|
+
"@id": "oa:TextPositionSelector",
|
1974
|
+
"@type": "owl:Class",
|
1975
|
+
"rdfs:comment": {
|
1976
|
+
"@language": "en",
|
1977
|
+
"@value": "An oa:Selector which describes a range of text based on its start and end positions.\n\nThe text MUST be normalized before counting characters. For a Selector that works from the bitstream rather than the rendered characters, see oa:DataPositionSelector.\n\nEach oa:TextPositionSelector MUST have exactly 1 oa:start property.\n\nEach oa:TextPositionSelector MUST have exactly 1 oa:end property."
|
1978
|
+
},
|
1979
|
+
"rdfs:isDefinedBy": {
|
1980
|
+
"@id": "oa:"
|
1981
|
+
},
|
1982
|
+
"rdfs:label": {
|
1983
|
+
"@language": "en",
|
1984
|
+
"@value": "TextPositionSelector"
|
1985
|
+
},
|
1986
|
+
"rdfs:subClassOf": {
|
1987
|
+
"@id": "oa:Selector"
|
1988
|
+
}
|
1989
|
+
},
|
1990
|
+
{
|
1991
|
+
"@id": "oa:serializedAt",
|
1992
|
+
"@type": "owl:DatatypeProperty",
|
1993
|
+
"rdfs:comment": {
|
1994
|
+
"@language": "en",
|
1995
|
+
"@value": "The time at which the agent referenced by oa:serializedBy generated the first serialization of the Annotation, and any subsequent substantially different one. The annotation graph MUST have changed for this property to be updated, and as such represents the last modified datestamp for the Annotation. This might be used to determine if it should be re-imported into a triplestore when discovered. \n\nThere MAY be exactly 1 oa:serializedAt property per Annotation, and MUST NOT be more than 1. The datetime MUST be expressed in the xsd:dateTime format, and SHOULD have a timezone specified.\n"
|
1996
|
+
},
|
1997
|
+
"rdfs:domain": {
|
1998
|
+
"@id": "oa:Annotation"
|
1999
|
+
},
|
2000
|
+
"rdfs:isDefinedBy": {
|
2001
|
+
"@id": "oa:"
|
2002
|
+
},
|
2003
|
+
"rdfs:label": {
|
2004
|
+
"@language": "en",
|
2005
|
+
"@value": "serializedAt"
|
2006
|
+
},
|
2007
|
+
"rdfs:range": {
|
2008
|
+
"@id": "xsd:dateTimeStamp"
|
2009
|
+
}
|
2010
|
+
},
|
2011
|
+
{
|
2012
|
+
"@id": "oa:Composite",
|
2013
|
+
"@type": "owl:Class",
|
2014
|
+
"rdfs:comment": {
|
2015
|
+
"@language": "en",
|
2016
|
+
"@value": "A multiplicity construct that conveys to a consuming application that all of the constituent resources are required for the Annotation to be correctly interpreted. \n\noa:Composite can be used as the object of the object of the oa:hasBody, oa:hasTarget, oa:hasSelector, oa:hasState, oa:styledBy and oa:hasScope relationships, \n\nThere MUST be 2 or more oa:item relationships for each oa:Composite."
|
2017
|
+
},
|
2018
|
+
"rdfs:isDefinedBy": {
|
2019
|
+
"@id": "oa:"
|
2020
|
+
},
|
2021
|
+
"rdfs:label": "Composite",
|
2022
|
+
"rdfs:subClassOf": {
|
2023
|
+
"@id": "rdf:Bag"
|
2024
|
+
}
|
2025
|
+
},
|
2026
|
+
{
|
2027
|
+
"@id": "oa:classifying",
|
2028
|
+
"@type": [
|
2029
|
+
"oa:Motivation",
|
2030
|
+
"owl:NamedIndividual"
|
2031
|
+
],
|
2032
|
+
"rdfs:comment": {
|
2033
|
+
"@language": "en",
|
2034
|
+
"@value": "The motivation that represents the assignment of a classification type, typically from a controlled vocabulary, to the target resource(s). For example to classify an Image resource as a Portrait."
|
2035
|
+
},
|
2036
|
+
"skos:inScheme": {
|
2037
|
+
"@id": "oa:motivationScheme"
|
2038
|
+
},
|
2039
|
+
"skos:prefLabel": {
|
2040
|
+
"@language": "en",
|
2041
|
+
"@value": "classifying"
|
2042
|
+
}
|
2043
|
+
},
|
2044
|
+
{
|
2045
|
+
"@id": "oa:identifying",
|
2046
|
+
"@type": [
|
2047
|
+
"oa:Motivation",
|
2048
|
+
"owl:NamedIndividual"
|
2049
|
+
],
|
2050
|
+
"rdfs:comment": {
|
2051
|
+
"@language": "en",
|
2052
|
+
"@value": "The motivation that represents the assignment of an identity to the target resource(s). For example, annotating the name of a city in a string of text with the URI that identifies it."
|
2053
|
+
},
|
2054
|
+
"skos:inScheme": {
|
2055
|
+
"@id": "oa:motivationScheme"
|
2056
|
+
},
|
2057
|
+
"skos:prefLabel": {
|
2058
|
+
"@language": "en",
|
2059
|
+
"@value": "identifying"
|
2060
|
+
}
|
2061
|
+
},
|
2062
|
+
{
|
2063
|
+
"@id": "oa:HttpRequestState",
|
2064
|
+
"@type": "owl:Class",
|
2065
|
+
"rdfs:comment": {
|
2066
|
+
"@language": "en",
|
2067
|
+
"@value": "A resource which describes how to retrieve an appropriate representation of the Source resource for the Annotation, based on the HTTP Request headers to send to the server.\n\nThere MUST be exactly 1 rdf:value property per HttpRequestState, containing HTTP request headers as a single, complete string, exactly as they would appear in an HTTP request. "
|
2068
|
+
},
|
2069
|
+
"rdfs:isDefinedBy": {
|
2070
|
+
"@id": "oa:"
|
2071
|
+
},
|
2072
|
+
"rdfs:label": {
|
2073
|
+
"@language": "en",
|
2074
|
+
"@value": "HttpRequestState"
|
2075
|
+
},
|
2076
|
+
"rdfs:subClassOf": {
|
2077
|
+
"@id": "oa:State"
|
2078
|
+
}
|
2079
|
+
},
|
2080
|
+
{
|
2081
|
+
"@id": "oa:DataPositionSelector",
|
2082
|
+
"@type": "owl:Class",
|
2083
|
+
"rdfs:comment": {
|
2084
|
+
"@language": "en",
|
2085
|
+
"@value": "A Selector which describes a range of data based on its start and end positions within the byte stream of the representation.\n\nEach DataPositionSelector MUST have exactly 1 oa:start property.\n\nEach TextPositionSelector MUST have exactly 1 oa:end property.\n\nSee oa:TextPositionSelector for selection at normalized character level rather than bytestream level."
|
2086
|
+
},
|
2087
|
+
"rdfs:isDefinedBy": {
|
2088
|
+
"@id": "oa:"
|
2089
|
+
},
|
2090
|
+
"rdfs:label": {
|
2091
|
+
"@language": "en",
|
2092
|
+
"@value": "DataPositionSelector"
|
2093
|
+
},
|
2094
|
+
"rdfs:subClassOf": {
|
2095
|
+
"@id": "oa:Selector"
|
2096
|
+
}
|
2097
|
+
},
|
2098
|
+
{
|
2099
|
+
"@id": "oa:linking",
|
2100
|
+
"@type": [
|
2101
|
+
"oa:Motivation",
|
2102
|
+
"owl:NamedIndividual"
|
2103
|
+
],
|
2104
|
+
"rdfs:comment": {
|
2105
|
+
"@language": "en",
|
2106
|
+
"@value": "The motivation that represents an untyped link to a resource related to the target."
|
2107
|
+
},
|
2108
|
+
"skos:inScheme": {
|
2109
|
+
"@id": "oa:motivationScheme"
|
2110
|
+
},
|
2111
|
+
"skos:prefLabel": {
|
2112
|
+
"@language": "en",
|
2113
|
+
"@value": "linking"
|
2114
|
+
}
|
2115
|
+
},
|
2116
|
+
{
|
2117
|
+
"@id": "oa:motivationScheme",
|
2118
|
+
"@type": [
|
2119
|
+
"skos:ConceptScheme",
|
2120
|
+
"owl:NamedIndividual"
|
2121
|
+
],
|
2122
|
+
"rdfs:comment": {
|
2123
|
+
"@language": "en",
|
2124
|
+
"@value": "The concept scheme for Open Annotation Motivations"
|
2125
|
+
},
|
2126
|
+
"rdfs:label": {
|
2127
|
+
"@language": "en",
|
2128
|
+
"@value": "motivationScheme"
|
2129
|
+
}
|
2130
|
+
},
|
2131
|
+
{
|
2132
|
+
"@id": "oa:replying",
|
2133
|
+
"@type": [
|
2134
|
+
"oa:Motivation",
|
2135
|
+
"owl:NamedIndividual"
|
2136
|
+
],
|
2137
|
+
"rdfs:comment": {
|
2138
|
+
"@language": "en",
|
2139
|
+
"@value": "The motivation that represents a reply to a previous statement, either an Annotation or another resource. For example providing the assistance requested in the above."
|
2140
|
+
},
|
2141
|
+
"skos:inScheme": {
|
2142
|
+
"@id": "oa:motivationScheme"
|
2143
|
+
},
|
2144
|
+
"skos:prefLabel": {
|
2145
|
+
"@language": "en",
|
2146
|
+
"@value": "replying"
|
2147
|
+
}
|
2148
|
+
},
|
2149
|
+
{
|
2150
|
+
"@id": "oa:start",
|
2151
|
+
"@type": "owl:DatatypeProperty",
|
2152
|
+
"rdfs:comment": {
|
2153
|
+
"@language": "en",
|
2154
|
+
"@value": "The starting position of the segment of text or bytes. The first character/byte in the full text/stream is position 0. The character/byte indicated at position oa:start is included within the selected segment. \n\nSee oa:DataPositionSelector and oa:TextPositionSelector."
|
2155
|
+
},
|
2156
|
+
"rdfs:domain": {
|
2157
|
+
"@id": "oa:Selector"
|
2158
|
+
},
|
2159
|
+
"rdfs:isDefinedBy": {
|
2160
|
+
"@id": "oa:"
|
2161
|
+
},
|
2162
|
+
"rdfs:label": {
|
2163
|
+
"@language": "en",
|
2164
|
+
"@value": "start"
|
2165
|
+
},
|
2166
|
+
"rdfs:range": {
|
2167
|
+
"@id": "xsd:nonNegativeInteger"
|
2168
|
+
}
|
2169
|
+
},
|
2170
|
+
{
|
2171
|
+
"@id": "oa:end",
|
2172
|
+
"@type": "owl:DatatypeProperty",
|
2173
|
+
"rdfs:comment": {
|
2174
|
+
"@language": "en",
|
2175
|
+
"@value": "The end position of the segment of text or bytes. The first character/byte in the full text/stream is position 0. The character/byte indicated at position oa:end is NOT included within the selected segment. \n\nSee oa:DataPositionSelector and oa:oa:TextPositionSelector."
|
2176
|
+
},
|
2177
|
+
"rdfs:domain": {
|
2178
|
+
"@id": "oa:Selector"
|
2179
|
+
},
|
2180
|
+
"rdfs:isDefinedBy": {
|
2181
|
+
"@id": "oa:"
|
2182
|
+
},
|
2183
|
+
"rdfs:label": {
|
2184
|
+
"@language": "en",
|
2185
|
+
"@value": "end"
|
2186
|
+
},
|
2187
|
+
"rdfs:range": {
|
2188
|
+
"@id": "xsd:nonNegativeInteger"
|
2189
|
+
}
|
2190
|
+
},
|
2191
|
+
{
|
2192
|
+
"@id": "oa:TimeState",
|
2193
|
+
"@type": "owl:Class",
|
2194
|
+
"rdfs:comment": {
|
2195
|
+
"@language": "en",
|
2196
|
+
"@value": "A resource which describes how to retrieve a representation of the Source resource that is temporally appropriate for the Annotation.\n\nThere MUST be at least one of oa:cachedSource or oa:when specified. If there is more than 1, each gives an alternative copy of the representation."
|
2197
|
+
},
|
2198
|
+
"rdfs:isDefinedBy": {
|
2199
|
+
"@id": "oa:"
|
2200
|
+
},
|
2201
|
+
"rdfs:label": {
|
2202
|
+
"@language": "en",
|
2203
|
+
"@value": "TimeState"
|
2204
|
+
},
|
2205
|
+
"rdfs:subClassOf": {
|
2206
|
+
"@id": "oa:State"
|
2207
|
+
}
|
2208
|
+
},
|
2209
|
+
{
|
2210
|
+
"@id": "oa:State",
|
2211
|
+
"@type": "owl:Class",
|
2212
|
+
"rdfs:comment": {
|
2213
|
+
"@language": "en",
|
2214
|
+
"@value": "A resource which describes how to retrieve an appropriate representation of the Source resource, indicated with oa:hasState from the Specific Resource.\n\nThis class is not used directly in Annotations, only its subclasses are.\n\nThe Specifier's description MAY be conveyed as an external or embedded resource (cnt:Content), or as RDF properties within the graph. The description SHOULD use existing standards whenever possible. If the Specifier has an HTTP URI, then its description, and only its description, MUST be returned when the URI is dereferenced."
|
2215
|
+
},
|
2216
|
+
"rdfs:isDefinedBy": {
|
2217
|
+
"@id": "oa:"
|
2218
|
+
},
|
2219
|
+
"rdfs:label": {
|
2220
|
+
"@language": "en",
|
2221
|
+
"@value": "State"
|
2222
|
+
}
|
2223
|
+
},
|
2224
|
+
{
|
2225
|
+
"@id": "oa:CssStyle",
|
2226
|
+
"@type": "owl:Class",
|
2227
|
+
"rdfs:comment": {
|
2228
|
+
"@language": "en",
|
2229
|
+
"@value": "A resource which describes styles for resources participating in the Annotation using CSS.\n\nSpecific Resources MAY be assigned a CSS style class using oa:styleClass.\n\nThe CSS resource MAY have its own dereferencable URI that provides the information. For example, \"Style1\" in the diagram below might actually have the URI \"http://www.example.com/styles/annotations.css\". It MAY be embedded within the Annotation using the inline constructions described in Embedding Resources."
|
2230
|
+
},
|
2231
|
+
"rdfs:isDefinedBy": {
|
2232
|
+
"@id": "oa:"
|
2233
|
+
},
|
2234
|
+
"rdfs:label": {
|
2235
|
+
"@language": "en",
|
2236
|
+
"@value": "CssStyle"
|
2237
|
+
},
|
2238
|
+
"rdfs:subClassOf": {
|
2239
|
+
"@id": "oa:Style"
|
2240
|
+
}
|
2241
|
+
},
|
2242
|
+
{
|
2243
|
+
"@id": "oa:item",
|
2244
|
+
"@type": "owl:ObjectProperty",
|
2245
|
+
"rdfs:comment": {
|
2246
|
+
"@language": "en",
|
2247
|
+
"@value": "The relationship between a multiplicity construct node and its constituent resources.\n\nThere MUST be 1 or more item relationships for each multiplicity construct oa:Choice, oa:Composite and oa:List."
|
2248
|
+
},
|
2249
|
+
"rdfs:isDefinedBy": {
|
2250
|
+
"@id": "oa:"
|
2251
|
+
},
|
2252
|
+
"rdfs:label": {
|
2253
|
+
"@language": "en",
|
2254
|
+
"@value": "item"
|
2255
|
+
},
|
2256
|
+
"rdfs:subPropertyOf": {
|
2257
|
+
"@id": "rdfs:member"
|
2258
|
+
}
|
2259
|
+
},
|
2260
|
+
{
|
2261
|
+
"@id": "oa:hasScope",
|
2262
|
+
"@type": "owl:ObjectProperty",
|
2263
|
+
"rdfs:comment": {
|
2264
|
+
"@language": "en",
|
2265
|
+
"@value": "The relationship between a Specific Resource and the resource that provides the scope or context for it in this Annotation.\n\nThere MAY be 0 or more hasScope relationships for each Specific Resource."
|
2266
|
+
},
|
2267
|
+
"rdfs:domain": {
|
2268
|
+
"@id": "oa:SpecificResource"
|
2269
|
+
},
|
2270
|
+
"rdfs:isDefinedBy": {
|
2271
|
+
"@id": "oa:"
|
2272
|
+
},
|
2273
|
+
"rdfs:label": {
|
2274
|
+
"@language": "en",
|
2275
|
+
"@value": "hasScope"
|
2276
|
+
}
|
2277
|
+
},
|
2278
|
+
{
|
2279
|
+
"@id": "oa:suffix",
|
2280
|
+
"@type": "owl:DatatypeProperty",
|
2281
|
+
"rdfs:comment": {
|
2282
|
+
"@language": "en",
|
2283
|
+
"@value": "The snippet of text that occurs immediately after the text which is being selected. \n\nSee oa:TextQuoteSelector."
|
2284
|
+
},
|
2285
|
+
"rdfs:domain": {
|
2286
|
+
"@id": "oa:Selector"
|
2287
|
+
},
|
2288
|
+
"rdfs:isDefinedBy": {
|
2289
|
+
"@id": "oa:"
|
2290
|
+
},
|
2291
|
+
"rdfs:label": {
|
2292
|
+
"@language": "en",
|
2293
|
+
"@value": "suffix"
|
2294
|
+
}
|
2295
|
+
},
|
2296
|
+
{
|
2297
|
+
"@id": "oa:hasState",
|
2298
|
+
"@type": "owl:ObjectProperty",
|
2299
|
+
"rdfs:comment": {
|
2300
|
+
"@language": "en",
|
2301
|
+
"@value": "The relationship between a oa:SpecificResource and a oa:State resource.\n\nThere MAY be 0 or 1 oa:hasState relationship for each SpecificResource.\n\nIf there are multiple State resources that must be associated with the specific resource, then the use of the Multiplicity Constructs oa:Choice, oa:Composite or oa:List is RECOMMENDED."
|
2302
|
+
},
|
2303
|
+
"rdfs:domain": {
|
2304
|
+
"@id": "oa:SpecificResource"
|
2305
|
+
},
|
2306
|
+
"rdfs:isDefinedBy": {
|
2307
|
+
"@id": "oa:"
|
2308
|
+
},
|
2309
|
+
"rdfs:label": {
|
2310
|
+
"@language": "en",
|
2311
|
+
"@value": "hasState"
|
2312
|
+
},
|
2313
|
+
"rdfs:range": {
|
2314
|
+
"@id": "oa:State"
|
2315
|
+
}
|
2316
|
+
},
|
2317
|
+
{
|
2318
|
+
"@id": "oa:",
|
2319
|
+
"@type": "owl:Ontology",
|
2320
|
+
"dc:contributor": {
|
2321
|
+
"@language": "en",
|
2322
|
+
"@value": "Stian Soiland-Reyes"
|
2323
|
+
},
|
2324
|
+
"dc:creator": [
|
2325
|
+
{
|
2326
|
+
"@language": "en",
|
2327
|
+
"@value": "Robert Sanderson"
|
2328
|
+
},
|
2329
|
+
{
|
2330
|
+
"@language": "it",
|
2331
|
+
"@value": "Paolo Ciccarese"
|
2332
|
+
},
|
2333
|
+
{
|
2334
|
+
"@language": "vls",
|
2335
|
+
"@value": "Herbert Van de Sompel"
|
2336
|
+
}
|
2337
|
+
],
|
2338
|
+
"dc:description": {
|
2339
|
+
"@language": "en",
|
2340
|
+
"@value": "The Open Annotation Core Data Model specifies an interoperable framework for creating associations between related resources, annotations, using a methodology that conforms to the Architecture of the World Wide Web. Open Annotations can easily be shared between platforms, with sufficient richness of expression to satisfy complex requirements while remaining simple enough to also allow for the most common use cases, such as attaching a piece of text to a single web resource.\n\nAn Annotation is considered to be a set of connected resources, typically including a body and target, where the body is somehow about the target. The full model supports additional functionality, enabling semantic annotations, embedding content, selecting segments of resources, choosing the appropriate representation of a resource and providing styling hints for consuming clients."
|
2341
|
+
},
|
2342
|
+
"dc:title": {
|
2343
|
+
"@language": "en",
|
2344
|
+
"@value": "Open Annotation Data Model"
|
2345
|
+
},
|
2346
|
+
"dcterms:modified": {
|
2347
|
+
"@type": "xsd:dateTime",
|
2348
|
+
"@value": "2013-02-22T21:40:51+01:00"
|
2349
|
+
},
|
2350
|
+
"owl:versionIRI": {
|
2351
|
+
"@id": "http://www.openannotation.org/spec/core/20130208/oa.owl"
|
2352
|
+
},
|
2353
|
+
"owl:versionInfo": "0.9.20130208",
|
2354
|
+
"rdfs:comment": {
|
2355
|
+
"@language": "en",
|
2356
|
+
"@value": "The Open Annotation Core Data Model specifies an interoperable framework for creating associations between related resources, annotations, using a methodology that conforms to the Architecture of the World Wide Web.\n\nThis ontology is a non-normative OWL formalization of the textual OA specification at http://www.openannotation.org/spec/core/20130208/index.html\n\nNote that OWL imports are disabled in the published version in order to reduce external implications, improve OWL 2 Profile conformity and increase interoperability. Some OWL tools might thus misleadingly show this ontology as (re)defining properties like skos:prefLabel."
|
2357
|
+
},
|
2358
|
+
"rdfs:seeAlso": {
|
2359
|
+
"@id": "http://www.openannotation.org/spec/core/20130208/index.html"
|
2360
|
+
}
|
2361
|
+
},
|
2362
|
+
{
|
2363
|
+
"@id": "oa:questioning",
|
2364
|
+
"@type": [
|
2365
|
+
"oa:Motivation",
|
2366
|
+
"owl:NamedIndividual"
|
2367
|
+
],
|
2368
|
+
"rdfs:comment": {
|
2369
|
+
"@language": "en",
|
2370
|
+
"@value": "The motivation that represents asking a question about the target resource(s). For example to ask for assistance with a particular section of text, or question its veracity."
|
2371
|
+
},
|
2372
|
+
"skos:inScheme": {
|
2373
|
+
"@id": "oa:motivationScheme"
|
2374
|
+
},
|
2375
|
+
"skos:prefLabel": {
|
2376
|
+
"@language": "en",
|
2377
|
+
"@value": "questioning"
|
2378
|
+
}
|
2379
|
+
},
|
2380
|
+
{
|
2381
|
+
"@id": "oa:describing",
|
2382
|
+
"@type": [
|
2383
|
+
"oa:Motivation",
|
2384
|
+
"owl:NamedIndividual"
|
2385
|
+
],
|
2386
|
+
"rdfs:comment": {
|
2387
|
+
"@language": "en",
|
2388
|
+
"@value": "The motivation that represents a description of the target resource(s), as opposed to a comment about them. For example describing the above PDF's contents, rather than commenting on their accuracy."
|
2389
|
+
},
|
2390
|
+
"skos:inScheme": {
|
2391
|
+
"@id": "oa:motivationScheme"
|
2392
|
+
},
|
2393
|
+
"skos:prefLabel": {
|
2394
|
+
"@language": "en",
|
2395
|
+
"@value": "describing"
|
2396
|
+
}
|
2397
|
+
},
|
2398
|
+
{
|
2399
|
+
"@id": "oa:styleClass",
|
2400
|
+
"@type": "owl:DatatypeProperty",
|
2401
|
+
"rdfs:comment": {
|
2402
|
+
"@language": "en",
|
2403
|
+
"@value": "The string name of the class used in the CSS description that should be applied to the Specific Resource.\n\nThere MAY be 0 or more styleClass properties on a Specific Resource.\n\nSee oa:CssStyle."
|
2404
|
+
},
|
2405
|
+
"rdfs:domain": {
|
2406
|
+
"@id": "oa:SpecificResource"
|
2407
|
+
},
|
2408
|
+
"rdfs:isDefinedBy": {
|
2409
|
+
"@id": "oa:"
|
2410
|
+
},
|
2411
|
+
"rdfs:label": {
|
2412
|
+
"@language": "en",
|
2413
|
+
"@value": "styleClass"
|
2414
|
+
}
|
2415
|
+
},
|
2416
|
+
{
|
2417
|
+
"@id": "oa:Tag",
|
2418
|
+
"@type": "owl:Class",
|
2419
|
+
"rdfs:comment": {
|
2420
|
+
"@language": "en",
|
2421
|
+
"@value": "A class assigned to the Body when it is a tag, such as a embedded text string with cnt:chars.\n\nTags are typically keywords or labels, and used for organization, description or discovery of the resource being tagged. In the Semantic Web, URIs are used instead of strings to avoid the issue of polysemy where one word has multiple meanings, such usage MUST be indicated using the subclass oa:SemanticTag.\n\nAnnotations that tag resources, either with text or semantic tags, SHOULD also have the oa:tagging motivation to make the reason for the Annotation more clear to applications, and MAY have other motivations as well."
|
2422
|
+
},
|
2423
|
+
"rdfs:isDefinedBy": {
|
2424
|
+
"@id": "oa:"
|
2425
|
+
},
|
2426
|
+
"rdfs:label": {
|
2427
|
+
"@language": "en",
|
2428
|
+
"@value": "Tag"
|
2429
|
+
}
|
2430
|
+
},
|
2431
|
+
{
|
2432
|
+
"@id": "oa:prefix",
|
2433
|
+
"@type": "owl:DatatypeProperty",
|
2434
|
+
"rdfs:comment": {
|
2435
|
+
"@language": "en",
|
2436
|
+
"@value": "A snippet of text that occurs immediately before the text which is being selected.\n\nSee oa:TextQuoteSelector."
|
2437
|
+
},
|
2438
|
+
"rdfs:domain": {
|
2439
|
+
"@id": "oa:Selector"
|
2440
|
+
},
|
2441
|
+
"rdfs:isDefinedBy": {
|
2442
|
+
"@id": "oa:"
|
2443
|
+
},
|
2444
|
+
"rdfs:label": {
|
2445
|
+
"@language": "en",
|
2446
|
+
"@value": "prefix"
|
2447
|
+
}
|
2448
|
+
}
|
2449
|
+
]
|
2450
|
+
}
|
2451
|
+
|
2452
|
+
|
2453
|
+
http_version:
|
2454
|
+
recorded_at: Tue, 05 May 2015 19:18:19 GMT
|
2455
|
+
- request:
|
2456
|
+
method: get
|
2457
|
+
uri: http://localhost:3000/annotations/875190ee-1fa4-4298-916b-147d1cbce91f
|
2458
|
+
body:
|
2459
|
+
encoding: US-ASCII
|
2460
|
+
string: ''
|
2461
|
+
headers:
|
2462
|
+
Accept:
|
2463
|
+
- application/n-quads
|
2464
|
+
Accept-Encoding:
|
2465
|
+
- gzip, deflate
|
2466
|
+
User-Agent:
|
2467
|
+
- Ruby
|
2468
|
+
response:
|
2469
|
+
status:
|
2470
|
+
code: 406
|
2471
|
+
message: 'Not Acceptable '
|
2472
|
+
headers:
|
2473
|
+
Content-Type:
|
2474
|
+
- text/html; charset=utf-8
|
2475
|
+
Content-Length:
|
2476
|
+
- '129110'
|
2477
|
+
X-Request-Id:
|
2478
|
+
- a015b04f-7a5f-4651-9f13-d51723dd92e4
|
2479
|
+
X-Runtime:
|
2480
|
+
- '0.239855'
|
2481
|
+
Server:
|
2482
|
+
- WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
|
2483
|
+
Date:
|
2484
|
+
- Tue, 05 May 2015 19:18:19 GMT
|
2485
|
+
Connection:
|
2486
|
+
- Keep-Alive
|
2487
|
+
body:
|
2488
|
+
encoding: UTF-8
|
2489
|
+
string: "<!DOCTYPE html>\n<html lang=\"en\">\n<head>\n <meta charset=\"utf-8\"
|
2490
|
+
/>\n <title>Action Controller: Exception caught</title>\n <style>\n body
|
2491
|
+
{\n background-color: #FAFAFA;\n color: #333;\n margin: 0px;\n
|
2492
|
+
\ }\n\n body, p, ol, ul, td {\n font-family: helvetica, verdana,
|
2493
|
+
arial, sans-serif;\n font-size: 13px;\n line-height: 18px;\n }\n\n
|
2494
|
+
\ pre {\n font-size: 11px;\n white-space: pre-wrap;\n }\n\n
|
2495
|
+
\ pre.box {\n border: 1px solid #EEE;\n padding: 10px;\n margin:
|
2496
|
+
0px;\n width: 958px;\n }\n\n header {\n color: #F0F0F0;\n
|
2497
|
+
\ background: #C52F24;\n padding: 0.5em 1.5em;\n }\n\n h1 {\n
|
2498
|
+
\ margin: 0.2em 0;\n line-height: 1.1em;\n font-size: 2em;\n
|
2499
|
+
\ }\n\n h2 {\n color: #C52F24;\n line-height: 25px;\n }\n\n
|
2500
|
+
\ .details {\n border: 1px solid #D0D0D0;\n border-radius: 4px;\n
|
2501
|
+
\ margin: 1em 0px;\n display: block;\n width: 978px;\n }\n\n
|
2502
|
+
\ .summary {\n padding: 8px 15px;\n border-bottom: 1px solid #D0D0D0;\n
|
2503
|
+
\ display: block;\n }\n\n .details pre {\n margin: 5px;\n border:
|
2504
|
+
none;\n }\n\n #container {\n box-sizing: border-box;\n width:
|
2505
|
+
100%;\n padding: 0 1.5em;\n }\n\n .source * {\n margin: 0px;\n
|
2506
|
+
\ padding: 0px;\n }\n\n .source {\n border: 1px solid #D9D9D9;\n
|
2507
|
+
\ background: #ECECEC;\n width: 978px;\n }\n\n .source pre
|
2508
|
+
{\n padding: 10px 0px;\n border: none;\n }\n\n .source .data
|
2509
|
+
{\n font-size: 80%;\n overflow: auto;\n background-color: #FFF;\n
|
2510
|
+
\ }\n\n .info {\n padding: 0.5em;\n }\n\n .source .data .line_numbers
|
2511
|
+
{\n background-color: #ECECEC;\n color: #AAA;\n padding: 1em
|
2512
|
+
.5em;\n border-right: 1px solid #DDD;\n text-align: right;\n }\n\n
|
2513
|
+
\ .line {\n padding-left: 10px;\n }\n\n .line:hover {\n background-color:
|
2514
|
+
#F6F6F6;\n }\n\n .line.active {\n background-color: #FFCCCC;\n
|
2515
|
+
\ }\n\n .hidden {\n display: none;\n }\n\n a { color: #980905;
|
2516
|
+
}\n a:visited { color: #666; }\n a.trace-frames { color: #666; }\n a:hover
|
2517
|
+
{ color: #C52F24; }\n a.trace-frames.selected { color: #C52F24 }\n\n \n
|
2518
|
+
\ </style>\n\n <script>\n var toggle = function(id) {\n var s = document.getElementById(id).style;\n
|
2519
|
+
\ s.display = s.display == 'none' ? 'block' : 'none';\n return false;\n
|
2520
|
+
\ }\n var show = function(id) {\n document.getElementById(id).style.display
|
2521
|
+
= 'block';\n }\n var hide = function(id) {\n document.getElementById(id).style.display
|
2522
|
+
= 'none';\n }\n var toggleTrace = function() {\n return toggle('blame_trace');\n
|
2523
|
+
\ }\n var toggleSessionDump = function() {\n return toggle('session_dump');\n
|
2524
|
+
\ }\n var toggleEnvDump = function() {\n return toggle('env_dump');\n
|
2525
|
+
\ }\n </script>\n</head>\n<body>\n\n<header>\n <h1>\n ActionController::UnknownFormat\n
|
2526
|
+
\ in Triannon::AnnotationsController#show\n </h1>\n</header>\n\n<div
|
2527
|
+
id=\"container\">\n <h2>ActionController::UnknownFormat</h2>\n\n <div
|
2528
|
+
class=\"source \" id=\"frame-source-0\">\n <div class=\"info\">\n Extracted
|
2529
|
+
source (around line <strong>#218</strong>):\n </div>\n <div class=\"data\">\n
|
2530
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2531
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>216</span>\n<span>217</span>\n<span>218</span>\n<span>219</span>\n<span>220</span>\n<span>221</span>\n
|
2532
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2533
|
+
class=\"line\"> response ? response.call : render({})\n</div><div class=\"line\">
|
2534
|
+
\ else\n</div><div class=\"line active\"> raise ActionController::UnknownFormat\n</div><div
|
2535
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div>\n</pre>\n</td>\n
|
2536
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2537
|
+
hidden\" id=\"frame-source-1\">\n <div class=\"info\">\n Extracted
|
2538
|
+
source (around line <strong>#21</strong>):\n </div>\n <div class=\"data\">\n
|
2539
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2540
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n<span>24</span>\n
|
2541
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2542
|
+
class=\"line\"> def show\n</div><div class=\"line\"> # TODO: json.set!
|
2543
|
+
"@context", Triannon::JsonldContext::OA_DATED_CONTEXT_URL - would
|
2544
|
+
this work?\n</div><div class=\"line active\"> respond_to do |format|\n</div><div
|
2545
|
+
class=\"line\"> format.jsonld {\n</div><div class=\"line\"> context_url
|
2546
|
+
= context_url_from_accept ? context_url_from_accept : context_url_from_link\n</div><div
|
2547
|
+
class=\"line\"> if context_url && context_url == Triannon::JsonldContext::IIIF_CONTEXT_URL\n</div>\n</pre>\n</td>\n
|
2548
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2549
|
+
hidden\" id=\"frame-source-2\">\n <div class=\"info\">\n Extracted
|
2550
|
+
source (around line <strong>#4</strong>):\n </div>\n <div class=\"data\">\n
|
2551
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2552
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>2</span>\n<span>3</span>\n<span>4</span>\n<span>5</span>\n<span>6</span>\n<span>7</span>\n
|
2553
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2554
|
+
class=\"line\"> module ImplicitRender\n</div><div class=\"line\"> def
|
2555
|
+
send_action(method, *args)\n</div><div class=\"line active\"> ret = super\n</div><div
|
2556
|
+
class=\"line\"> default_render unless performed?\n</div><div class=\"line\">
|
2557
|
+
\ ret\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n
|
2558
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2559
|
+
id=\"frame-source-3\">\n <div class=\"info\">\n Extracted source
|
2560
|
+
(around line <strong>#198</strong>):\n </div>\n <div class=\"data\">\n
|
2561
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2562
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>196</span>\n<span>197</span>\n<span>198</span>\n<span>199</span>\n<span>200</span>\n<span>201</span>\n
|
2563
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2564
|
+
class=\"line\"> # which is *not* necessarily the same as the action name.\n</div><div
|
2565
|
+
class=\"line\"> def process_action(method_name, *args)\n</div><div class=\"line
|
2566
|
+
active\"> send_action(method_name, *args)\n</div><div class=\"line\">
|
2567
|
+
\ end\n</div><div class=\"line\">\n</div><div class=\"line\"> # Actually
|
2568
|
+
call the method associated with the action. Override\n</div>\n</pre>\n</td>\n
|
2569
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2570
|
+
hidden\" id=\"frame-source-4\">\n <div class=\"info\">\n Extracted
|
2571
|
+
source (around line <strong>#10</strong>):\n </div>\n <div class=\"data\">\n
|
2572
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2573
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>8</span>\n<span>9</span>\n<span>10</span>\n<span>11</span>\n<span>12</span>\n<span>13</span>\n
|
2574
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2575
|
+
class=\"line\"> def process_action(*) #:nodoc:\n</div><div class=\"line\">
|
2576
|
+
\ self.formats = request.formats.map(&:ref).compact\n</div><div class=\"line
|
2577
|
+
active\"> super\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div><div
|
2578
|
+
class=\"line\"> # Check for double render errors and set the content_type
|
2579
|
+
after rendering.\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2580
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-5\">\n
|
2581
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#20</strong>):\n
|
2582
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2583
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2584
|
+
class=\"line_numbers\">\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n
|
2585
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2586
|
+
class=\"line\"> def process_action(*args)\n</div><div class=\"line\"> run_callbacks(:process_action)
|
2587
|
+
do\n</div><div class=\"line active\"> super\n</div><div class=\"line\">
|
2588
|
+
\ end\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div>\n</pre>\n</td>\n
|
2589
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2590
|
+
hidden\" id=\"frame-source-6\">\n <div class=\"info\">\n Extracted
|
2591
|
+
source (around line <strong>#117</strong>):\n </div>\n <div class=\"data\">\n
|
2592
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2593
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>115</span>\n<span>116</span>\n<span>117</span>\n<span>118</span>\n<span>119</span>\n<span>120</span>\n
|
2594
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2595
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> block
|
2596
|
+
= env.run_block\n</div><div class=\"line active\"> env.value = !env.halted
|
2597
|
+
&& (!block || block.call)\n</div><div class=\"line\"> env\n</div><div
|
2598
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
2599
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2600
|
+
hidden\" id=\"frame-source-7\">\n <div class=\"info\">\n Extracted
|
2601
|
+
source (around line <strong>#117</strong>):\n </div>\n <div class=\"data\">\n
|
2602
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2603
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>115</span>\n<span>116</span>\n<span>117</span>\n<span>118</span>\n<span>119</span>\n<span>120</span>\n
|
2604
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2605
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> block
|
2606
|
+
= env.run_block\n</div><div class=\"line active\"> env.value = !env.halted
|
2607
|
+
&& (!block || block.call)\n</div><div class=\"line\"> env\n</div><div
|
2608
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
2609
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2610
|
+
hidden\" id=\"frame-source-8\">\n <div class=\"info\">\n Extracted
|
2611
|
+
source (around line <strong>#151</strong>):\n </div>\n <div class=\"data\">\n
|
2612
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2613
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>149</span>\n<span>150</span>\n<span>151</span>\n<span>152</span>\n<span>153</span>\n<span>154</span>\n
|
2614
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2615
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2616
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2617
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2618
|
+
\ private_class_method :halting_and_conditional\n</div>\n</pre>\n</td>\n
|
2619
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2620
|
+
hidden\" id=\"frame-source-9\">\n <div class=\"info\">\n Extracted
|
2621
|
+
source (around line <strong>#151</strong>):\n </div>\n <div class=\"data\">\n
|
2622
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2623
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>149</span>\n<span>150</span>\n<span>151</span>\n<span>152</span>\n<span>153</span>\n<span>154</span>\n
|
2624
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2625
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2626
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2627
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2628
|
+
\ private_class_method :halting_and_conditional\n</div>\n</pre>\n</td>\n
|
2629
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2630
|
+
hidden\" id=\"frame-source-10\">\n <div class=\"info\">\n Extracted
|
2631
|
+
source (around line <strong>#151</strong>):\n </div>\n <div class=\"data\">\n
|
2632
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2633
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>149</span>\n<span>150</span>\n<span>151</span>\n<span>152</span>\n<span>153</span>\n<span>154</span>\n
|
2634
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2635
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2636
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2637
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2638
|
+
\ private_class_method :halting_and_conditional\n</div>\n</pre>\n</td>\n
|
2639
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2640
|
+
hidden\" id=\"frame-source-11\">\n <div class=\"info\">\n Extracted
|
2641
|
+
source (around line <strong>#234</strong>):\n </div>\n <div class=\"data\">\n
|
2642
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2643
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>232</span>\n<span>233</span>\n<span>234</span>\n<span>235</span>\n<span>236</span>\n<span>237</span>\n
|
2644
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2645
|
+
class=\"line\"> def self.halting(next_callback, user_callback)\n</div><div
|
2646
|
+
class=\"line\"> lambda { |env|\n</div><div class=\"line active\">
|
2647
|
+
\ env = next_callback.call env\n</div><div class=\"line\"> unless
|
2648
|
+
env.halted\n</div><div class=\"line\"> user_callback.call env.target,
|
2649
|
+
env.value\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
2650
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2651
|
+
hidden\" id=\"frame-source-12\">\n <div class=\"info\">\n Extracted
|
2652
|
+
source (around line <strong>#234</strong>):\n </div>\n <div class=\"data\">\n
|
2653
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2654
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>232</span>\n<span>233</span>\n<span>234</span>\n<span>235</span>\n<span>236</span>\n<span>237</span>\n
|
2655
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2656
|
+
class=\"line\"> def self.halting(next_callback, user_callback)\n</div><div
|
2657
|
+
class=\"line\"> lambda { |env|\n</div><div class=\"line active\">
|
2658
|
+
\ env = next_callback.call env\n</div><div class=\"line\"> unless
|
2659
|
+
env.halted\n</div><div class=\"line\"> user_callback.call env.target,
|
2660
|
+
env.value\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
2661
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2662
|
+
hidden\" id=\"frame-source-13\">\n <div class=\"info\">\n Extracted
|
2663
|
+
source (around line <strong>#169</strong>):\n </div>\n <div class=\"data\">\n
|
2664
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2665
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>167</span>\n<span>168</span>\n<span>169</span>\n<span>170</span>\n<span>171</span>\n<span>172</span>\n
|
2666
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2667
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2668
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2669
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2670
|
+
\ private_class_method :halting\n</div>\n</pre>\n</td>\n </tr>\n
|
2671
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2672
|
+
id=\"frame-source-14\">\n <div class=\"info\">\n Extracted source
|
2673
|
+
(around line <strong>#169</strong>):\n </div>\n <div class=\"data\">\n
|
2674
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2675
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>167</span>\n<span>168</span>\n<span>169</span>\n<span>170</span>\n<span>171</span>\n<span>172</span>\n
|
2676
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2677
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2678
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2679
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2680
|
+
\ private_class_method :halting\n</div>\n</pre>\n</td>\n </tr>\n
|
2681
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2682
|
+
id=\"frame-source-15\">\n <div class=\"info\">\n Extracted source
|
2683
|
+
(around line <strong>#169</strong>):\n </div>\n <div class=\"data\">\n
|
2684
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2685
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>167</span>\n<span>168</span>\n<span>169</span>\n<span>170</span>\n<span>171</span>\n<span>172</span>\n
|
2686
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2687
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2688
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2689
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2690
|
+
\ private_class_method :halting\n</div>\n</pre>\n</td>\n </tr>\n
|
2691
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2692
|
+
id=\"frame-source-16\">\n <div class=\"info\">\n Extracted source
|
2693
|
+
(around line <strong>#169</strong>):\n </div>\n <div class=\"data\">\n
|
2694
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2695
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>167</span>\n<span>168</span>\n<span>169</span>\n<span>170</span>\n<span>171</span>\n<span>172</span>\n
|
2696
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2697
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2698
|
+
class=\"line active\"> next_callback.call env\n</div><div class=\"line\">
|
2699
|
+
\ }\n</div><div class=\"line\"> end\n</div><div class=\"line\">
|
2700
|
+
\ private_class_method :halting\n</div>\n</pre>\n</td>\n </tr>\n
|
2701
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2702
|
+
id=\"frame-source-17\">\n <div class=\"info\">\n Extracted source
|
2703
|
+
(around line <strong>#92</strong>):\n </div>\n <div class=\"data\">\n
|
2704
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2705
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>90</span>\n<span>91</span>\n<span>92</span>\n<span>93</span>\n<span>94</span>\n<span>95</span>\n
|
2706
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2707
|
+
class=\"line\"> runner = callbacks.compile\n</div><div class=\"line\">
|
2708
|
+
\ e = Filters::Environment.new(self, false, nil, block)\n</div><div
|
2709
|
+
class=\"line active\"> runner.call(e).value\n</div><div class=\"line\">
|
2710
|
+
\ end\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div>\n</pre>\n</td>\n
|
2711
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2712
|
+
hidden\" id=\"frame-source-18\">\n <div class=\"info\">\n Extracted
|
2713
|
+
source (around line <strong>#92</strong>):\n </div>\n <div class=\"data\">\n
|
2714
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2715
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>90</span>\n<span>91</span>\n<span>92</span>\n<span>93</span>\n<span>94</span>\n<span>95</span>\n
|
2716
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2717
|
+
class=\"line\"> runner = callbacks.compile\n</div><div class=\"line\">
|
2718
|
+
\ e = Filters::Environment.new(self, false, nil, block)\n</div><div
|
2719
|
+
class=\"line active\"> runner.call(e).value\n</div><div class=\"line\">
|
2720
|
+
\ end\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div>\n</pre>\n</td>\n
|
2721
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2722
|
+
hidden\" id=\"frame-source-19\">\n <div class=\"info\">\n Extracted
|
2723
|
+
source (around line <strong>#734</strong>):\n </div>\n <div class=\"data\">\n
|
2724
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2725
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>732</span>\n<span>733</span>\n<span>734</span>\n<span>735</span>\n<span>736</span>\n<span>737</span>\n
|
2726
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2727
|
+
class=\"line\"> module_eval <<-RUBY, __FILE__, __LINE__ + 1\n</div><div
|
2728
|
+
class=\"line\"> def _run_#{name}_callbacks(&block)\n</div><div
|
2729
|
+
class=\"line active\"> _run_callbacks(_#{name}_callbacks, &block)\n</div><div
|
2730
|
+
class=\"line\"> end\n</div><div class=\"line\"> RUBY\n</div><div
|
2731
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2732
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-20\">\n
|
2733
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#81</strong>):\n
|
2734
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2735
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2736
|
+
class=\"line_numbers\">\n<span>79</span>\n<span>80</span>\n<span>81</span>\n<span>82</span>\n<span>83</span>\n<span>84</span>\n
|
2737
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2738
|
+
class=\"line\"> # end\n</div><div class=\"line\"> def run_callbacks(kind,
|
2739
|
+
&block)\n</div><div class=\"line active\"> send "_run_#{kind}_callbacks",
|
2740
|
+
&block\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div><div
|
2741
|
+
class=\"line\"> private\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2742
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-21\">\n
|
2743
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#19</strong>):\n
|
2744
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2745
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2746
|
+
class=\"line_numbers\">\n<span>17</span>\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n
|
2747
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2748
|
+
class=\"line\"> # process_action callbacks around the normal behavior.\n</div><div
|
2749
|
+
class=\"line\"> def process_action(*args)\n</div><div class=\"line active\">
|
2750
|
+
\ run_callbacks(:process_action) do\n</div><div class=\"line\"> super\n</div><div
|
2751
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
2752
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2753
|
+
hidden\" id=\"frame-source-22\">\n <div class=\"info\">\n Extracted
|
2754
|
+
source (around line <strong>#29</strong>):\n </div>\n <div class=\"data\">\n
|
2755
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2756
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>27</span>\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n
|
2757
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2758
|
+
class=\"line\"> private\n</div><div class=\"line\"> def process_action(*args)\n</div><div
|
2759
|
+
class=\"line active\"> super\n</div><div class=\"line\"> rescue
|
2760
|
+
Exception => exception\n</div><div class=\"line\"> request.env['action_dispatch.show_detailed_exceptions']
|
2761
|
+
||= show_detailed_exceptions?\n</div><div class=\"line\"> rescue_with_handler(exception)
|
2762
|
+
|| raise(exception)\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2763
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-23\">\n
|
2764
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#31</strong>):\n
|
2765
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2766
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2767
|
+
class=\"line_numbers\">\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n<span>34</span>\n
|
2768
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2769
|
+
class=\"line\">\n</div><div class=\"line\"> ActiveSupport::Notifications.instrument("process_action.action_controller",
|
2770
|
+
raw_payload) do |payload|\n</div><div class=\"line active\"> result
|
2771
|
+
= super\n</div><div class=\"line\"> payload[:status] = response.status\n</div><div
|
2772
|
+
class=\"line\"> append_info_to_payload(payload)\n</div><div class=\"line\">
|
2773
|
+
\ result\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2774
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-24\">\n
|
2775
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#164</strong>):\n
|
2776
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2777
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2778
|
+
class=\"line_numbers\">\n<span>162</span>\n<span>163</span>\n<span>164</span>\n<span>165</span>\n<span>166</span>\n<span>167</span>\n
|
2779
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2780
|
+
class=\"line\"> def instrument(name, payload = {})\n</div><div class=\"line\">
|
2781
|
+
\ if notifier.listening?(name)\n</div><div class=\"line active\"> instrumenter.instrument(name,
|
2782
|
+
payload) { yield payload if block_given? }\n</div><div class=\"line\"> else\n</div><div
|
2783
|
+
class=\"line\"> yield payload if block_given?\n</div><div class=\"line\">
|
2784
|
+
\ end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
2785
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-25\">\n <div
|
2786
|
+
class=\"info\">\n Extracted source (around line <strong>#20</strong>):\n
|
2787
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2788
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2789
|
+
class=\"line_numbers\">\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n
|
2790
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2791
|
+
class=\"line\"> start name, payload\n</div><div class=\"line\"> begin\n</div><div
|
2792
|
+
class=\"line active\"> yield payload\n</div><div class=\"line\">
|
2793
|
+
\ rescue Exception => e\n</div><div class=\"line\"> payload[:exception]
|
2794
|
+
= [e.class.name, e.message]\n</div><div class=\"line\"> raise e\n</div>\n</pre>\n</td>\n
|
2795
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2796
|
+
hidden\" id=\"frame-source-26\">\n <div class=\"info\">\n Extracted
|
2797
|
+
source (around line <strong>#164</strong>):\n </div>\n <div class=\"data\">\n
|
2798
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2799
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>162</span>\n<span>163</span>\n<span>164</span>\n<span>165</span>\n<span>166</span>\n<span>167</span>\n
|
2800
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2801
|
+
class=\"line\"> def instrument(name, payload = {})\n</div><div class=\"line\">
|
2802
|
+
\ if notifier.listening?(name)\n</div><div class=\"line active\"> instrumenter.instrument(name,
|
2803
|
+
payload) { yield payload if block_given? }\n</div><div class=\"line\"> else\n</div><div
|
2804
|
+
class=\"line\"> yield payload if block_given?\n</div><div class=\"line\">
|
2805
|
+
\ end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
2806
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-27\">\n <div
|
2807
|
+
class=\"info\">\n Extracted source (around line <strong>#30</strong>):\n
|
2808
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2809
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2810
|
+
class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
2811
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2812
|
+
class=\"line\"> ActiveSupport::Notifications.instrument("start_processing.action_controller",
|
2813
|
+
raw_payload.dup)\n</div><div class=\"line\">\n</div><div class=\"line active\">
|
2814
|
+
\ ActiveSupport::Notifications.instrument("process_action.action_controller",
|
2815
|
+
raw_payload) do |payload|\n</div><div class=\"line\"> result = super\n</div><div
|
2816
|
+
class=\"line\"> payload[:status] = response.status\n</div><div class=\"line\">
|
2817
|
+
\ append_info_to_payload(payload)\n</div>\n</pre>\n</td>\n </tr>\n
|
2818
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2819
|
+
id=\"frame-source-28\">\n <div class=\"info\">\n Extracted source
|
2820
|
+
(around line <strong>#250</strong>):\n </div>\n <div class=\"data\">\n
|
2821
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2822
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>248</span>\n<span>249</span>\n<span>250</span>\n<span>251</span>\n<span>252</span>\n<span>253</span>\n
|
2823
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2824
|
+
class=\"line\"> request.filtered_parameters.merge! wrapped_filtered_hash\n</div><div
|
2825
|
+
class=\"line\"> end\n</div><div class=\"line active\"> super\n</div><div
|
2826
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
2827
|
+
\ private\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
2828
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-29\">\n <div
|
2829
|
+
class=\"info\">\n Extracted source (around line <strong>#18</strong>):\n
|
2830
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2831
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2832
|
+
class=\"line_numbers\">\n<span>16</span>\n<span>17</span>\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n
|
2833
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2834
|
+
class=\"line\"> # and it won't be cleaned up by the method below.\n</div><div
|
2835
|
+
class=\"line\"> ActiveRecord::LogSubscriber.reset_runtime\n</div><div
|
2836
|
+
class=\"line active\"> super\n</div><div class=\"line\"> end\n</div><div
|
2837
|
+
class=\"line\">\n</div><div class=\"line\"> def cleanup_view_runtime\n</div>\n</pre>\n</td>\n
|
2838
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2839
|
+
hidden\" id=\"frame-source-30\">\n <div class=\"info\">\n Extracted
|
2840
|
+
source (around line <strong>#137</strong>):\n </div>\n <div class=\"data\">\n
|
2841
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2842
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>135</span>\n<span>136</span>\n<span>137</span>\n<span>138</span>\n<span>139</span>\n<span>140</span>\n
|
2843
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2844
|
+
class=\"line\"> @_response_body = nil\n</div><div class=\"line\">\n</div><div
|
2845
|
+
class=\"line active\"> process_action(action_name, *args)\n</div><div
|
2846
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
2847
|
+
\ # Delegates to the class' #controller_path\n</div>\n</pre>\n</td>\n
|
2848
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2849
|
+
hidden\" id=\"frame-source-31\">\n <div class=\"info\">\n Extracted
|
2850
|
+
source (around line <strong>#30</strong>):\n </div>\n <div class=\"data\">\n
|
2851
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2852
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
2853
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2854
|
+
class=\"line\"> def process(*) #:nodoc:\n</div><div class=\"line\"> old_config,
|
2855
|
+
I18n.config = I18n.config, I18nProxy.new(I18n.config, lookup_context)\n</div><div
|
2856
|
+
class=\"line active\"> super\n</div><div class=\"line\"> ensure\n</div><div
|
2857
|
+
class=\"line\"> I18n.config = old_config\n</div><div class=\"line\">
|
2858
|
+
\ end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
2859
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-32\">\n <div
|
2860
|
+
class=\"info\">\n Extracted source (around line <strong>#195</strong>):\n
|
2861
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2862
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2863
|
+
class=\"line_numbers\">\n<span>193</span>\n<span>194</span>\n<span>195</span>\n<span>196</span>\n<span>197</span>\n<span>198</span>\n
|
2864
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2865
|
+
class=\"line\"> @_env = request.env\n</div><div class=\"line\"> @_env['action_controller.instance']
|
2866
|
+
= self\n</div><div class=\"line active\"> process(name)\n</div><div class=\"line\">
|
2867
|
+
\ to_a\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div>\n</pre>\n</td>\n
|
2868
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
2869
|
+
hidden\" id=\"frame-source-33\">\n <div class=\"info\">\n Extracted
|
2870
|
+
source (around line <strong>#13</strong>):\n </div>\n <div class=\"data\">\n
|
2871
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2872
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>11</span>\n<span>12</span>\n<span>13</span>\n<span>14</span>\n<span>15</span>\n<span>16</span>\n
|
2873
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2874
|
+
class=\"line\"> def dispatch(action, request)\n</div><div class=\"line\">
|
2875
|
+
\ set_response!(request)\n</div><div class=\"line active\"> super(action,
|
2876
|
+
request)\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div><div
|
2877
|
+
class=\"line\"> def response_body=(body)\n</div>\n</pre>\n</td>\n </tr>\n
|
2878
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2879
|
+
id=\"frame-source-34\">\n <div class=\"info\">\n Extracted source
|
2880
|
+
(around line <strong>#236</strong>):\n </div>\n <div class=\"data\">\n
|
2881
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2882
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>234</span>\n<span>235</span>\n<span>236</span>\n<span>237</span>\n<span>238</span>\n<span>239</span>\n
|
2883
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2884
|
+
class=\"line\"> end\n</div><div class=\"line\"> else\n</div><div
|
2885
|
+
class=\"line active\"> lambda { |env| new.dispatch(name, klass.new(env))
|
2886
|
+
}\n</div><div class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
2887
|
+
class=\"line\">\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2888
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-35\">\n
|
2889
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#73</strong>):\n
|
2890
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2891
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2892
|
+
class=\"line_numbers\">\n<span>71</span>\n<span>72</span>\n<span>73</span>\n<span>74</span>\n<span>75</span>\n<span>76</span>\n
|
2893
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2894
|
+
class=\"line\">\n</div><div class=\"line\"> def dispatch(controller,
|
2895
|
+
action, env)\n</div><div class=\"line active\"> controller.action(action).call(env)\n</div><div
|
2896
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
2897
|
+
\ def normalize_controller!(params)\n</div>\n</pre>\n</td>\n </tr>\n
|
2898
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2899
|
+
id=\"frame-source-36\">\n <div class=\"info\">\n Extracted source
|
2900
|
+
(around line <strong>#73</strong>):\n </div>\n <div class=\"data\">\n
|
2901
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2902
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>71</span>\n<span>72</span>\n<span>73</span>\n<span>74</span>\n<span>75</span>\n<span>76</span>\n
|
2903
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2904
|
+
class=\"line\">\n</div><div class=\"line\"> def dispatch(controller,
|
2905
|
+
action, env)\n</div><div class=\"line active\"> controller.action(action).call(env)\n</div><div
|
2906
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
2907
|
+
\ def normalize_controller!(params)\n</div>\n</pre>\n</td>\n </tr>\n
|
2908
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2909
|
+
id=\"frame-source-37\">\n <div class=\"info\">\n Extracted source
|
2910
|
+
(around line <strong>#42</strong>):\n </div>\n <div class=\"data\">\n
|
2911
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2912
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>40</span>\n<span>41</span>\n<span>42</span>\n<span>43</span>\n<span>44</span>\n<span>45</span>\n
|
2913
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2914
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line
|
2915
|
+
active\"> dispatch(controller, params[:action], req.env)\n</div><div
|
2916
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
2917
|
+
\ def prepare_params!(params)\n</div>\n</pre>\n</td>\n </tr>\n
|
2918
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2919
|
+
id=\"frame-source-38\">\n <div class=\"info\">\n Extracted source
|
2920
|
+
(around line <strong>#49</strong>):\n </div>\n <div class=\"data\">\n
|
2921
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2922
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>47</span>\n<span>48</span>\n<span>49</span>\n<span>50</span>\n<span>51</span>\n<span>52</span>\n
|
2923
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2924
|
+
class=\"line\">\n</div><div class=\"line\"> if dispatcher?\n</div><div
|
2925
|
+
class=\"line active\"> @app.serve req\n</div><div class=\"line\">
|
2926
|
+
\ else\n</div><div class=\"line\"> @app.call req.env\n</div><div
|
2927
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2928
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-39\">\n
|
2929
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#43</strong>):\n
|
2930
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2931
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2932
|
+
class=\"line_numbers\">\n<span>41</span>\n<span>42</span>\n<span>43</span>\n<span>44</span>\n<span>45</span>\n<span>46</span>\n
|
2933
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2934
|
+
class=\"line\"> req.path_parameters = set_params.merge parameters\n</div><div
|
2935
|
+
class=\"line\">\n</div><div class=\"line active\"> status, headers,
|
2936
|
+
body = route.app.serve(req)\n</div><div class=\"line\">\n</div><div class=\"line\">
|
2937
|
+
\ if 'pass' == headers['X-Cascade']\n</div><div class=\"line\">
|
2938
|
+
\ req.script_name = script_name\n</div>\n</pre>\n</td>\n </tr>\n
|
2939
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2940
|
+
id=\"frame-source-40\">\n <div class=\"info\">\n Extracted source
|
2941
|
+
(around line <strong>#30</strong>):\n </div>\n <div class=\"data\">\n
|
2942
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2943
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
2944
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2945
|
+
class=\"line\">\n</div><div class=\"line\"> def serve(req)\n</div><div
|
2946
|
+
class=\"line active\"> find_routes(req).each do |match, parameters,
|
2947
|
+
route|\n</div><div class=\"line\"> set_params = req.path_parameters\n</div><div
|
2948
|
+
class=\"line\"> path_info = req.path_info\n</div><div class=\"line\">
|
2949
|
+
\ script_name = req.script_name\n</div>\n</pre>\n</td>\n </tr>\n
|
2950
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2951
|
+
id=\"frame-source-41\">\n <div class=\"info\">\n Extracted source
|
2952
|
+
(around line <strong>#30</strong>):\n </div>\n <div class=\"data\">\n
|
2953
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2954
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
2955
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2956
|
+
class=\"line\">\n</div><div class=\"line\"> def serve(req)\n</div><div
|
2957
|
+
class=\"line active\"> find_routes(req).each do |match, parameters,
|
2958
|
+
route|\n</div><div class=\"line\"> set_params = req.path_parameters\n</div><div
|
2959
|
+
class=\"line\"> path_info = req.path_info\n</div><div class=\"line\">
|
2960
|
+
\ script_name = req.script_name\n</div>\n</pre>\n</td>\n </tr>\n
|
2961
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2962
|
+
id=\"frame-source-42\">\n <div class=\"info\">\n Extracted source
|
2963
|
+
(around line <strong>#802</strong>):\n </div>\n <div class=\"data\">\n
|
2964
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2965
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>800</span>\n<span>801</span>\n<span>802</span>\n<span>803</span>\n<span>804</span>\n<span>805</span>\n
|
2966
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2967
|
+
class=\"line\"> req = request_class.new(env)\n</div><div class=\"line\">
|
2968
|
+
\ req.path_info = Journey::Router::Utils.normalize_path(req.path_info)\n</div><div
|
2969
|
+
class=\"line active\"> @router.serve(req)\n</div><div class=\"line\">
|
2970
|
+
\ end\n</div><div class=\"line\">\n</div><div class=\"line\"> def
|
2971
|
+
recognize_path(path, environment = {})\n</div>\n</pre>\n</td>\n </tr>\n
|
2972
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2973
|
+
id=\"frame-source-43\">\n <div class=\"info\">\n Extracted source
|
2974
|
+
(around line <strong>#518</strong>):\n </div>\n <div class=\"data\">\n
|
2975
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2976
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>516</span>\n<span>517</span>\n<span>518</span>\n<span>519</span>\n<span>520</span>\n<span>521</span>\n
|
2977
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2978
|
+
class=\"line\"> env["ROUTES_#{routes.object_id}_SCRIPT_NAME"]
|
2979
|
+
= env['SCRIPT_NAME'].dup\n</div><div class=\"line\"> end\n</div><div
|
2980
|
+
class=\"line active\"> app.call(env)\n</div><div class=\"line\"> end\n</div><div
|
2981
|
+
class=\"line\">\n</div><div class=\"line\"> # Defines additional Rack env
|
2982
|
+
configuration that is added on each call.\n</div>\n</pre>\n</td>\n </tr>\n
|
2983
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
2984
|
+
id=\"frame-source-44\">\n <div class=\"info\">\n Extracted source
|
2985
|
+
(around line <strong>#194</strong>):\n </div>\n <div class=\"data\">\n
|
2986
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
2987
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>192</span>\n<span>193</span>\n<span>194</span>\n<span>195</span>\n<span>196</span>\n<span>197</span>\n
|
2988
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
2989
|
+
class=\"line\"> def method_missing(name, *args, &block)\n</div><div
|
2990
|
+
class=\"line\"> if instance.respond_to?(name)\n</div><div class=\"line
|
2991
|
+
active\"> instance.public_send(name, *args, &block)\n</div><div
|
2992
|
+
class=\"line\"> else\n</div><div class=\"line\"> super\n</div><div
|
2993
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
2994
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-45\">\n
|
2995
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#194</strong>):\n
|
2996
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
2997
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
2998
|
+
class=\"line_numbers\">\n<span>192</span>\n<span>193</span>\n<span>194</span>\n<span>195</span>\n<span>196</span>\n<span>197</span>\n
|
2999
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3000
|
+
class=\"line\"> def method_missing(name, *args, &block)\n</div><div
|
3001
|
+
class=\"line\"> if instance.respond_to?(name)\n</div><div class=\"line
|
3002
|
+
active\"> instance.public_send(name, *args, &block)\n</div><div
|
3003
|
+
class=\"line\"> else\n</div><div class=\"line\"> super\n</div><div
|
3004
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3005
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-46\">\n
|
3006
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#51</strong>):\n
|
3007
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3008
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3009
|
+
class=\"line_numbers\">\n<span>49</span>\n<span>50</span>\n<span>51</span>\n<span>52</span>\n<span>53</span>\n<span>54</span>\n
|
3010
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3011
|
+
class=\"line\"> @app.serve req\n</div><div class=\"line\"> else\n</div><div
|
3012
|
+
class=\"line active\"> @app.call req.env\n</div><div class=\"line\">
|
3013
|
+
\ end\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div>\n</pre>\n</td>\n
|
3014
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3015
|
+
hidden\" id=\"frame-source-47\">\n <div class=\"info\">\n Extracted
|
3016
|
+
source (around line <strong>#43</strong>):\n </div>\n <div class=\"data\">\n
|
3017
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3018
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>41</span>\n<span>42</span>\n<span>43</span>\n<span>44</span>\n<span>45</span>\n<span>46</span>\n
|
3019
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3020
|
+
class=\"line\"> req.path_parameters = set_params.merge parameters\n</div><div
|
3021
|
+
class=\"line\">\n</div><div class=\"line active\"> status, headers,
|
3022
|
+
body = route.app.serve(req)\n</div><div class=\"line\">\n</div><div class=\"line\">
|
3023
|
+
\ if 'pass' == headers['X-Cascade']\n</div><div class=\"line\">
|
3024
|
+
\ req.script_name = script_name\n</div>\n</pre>\n</td>\n </tr>\n
|
3025
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3026
|
+
id=\"frame-source-48\">\n <div class=\"info\">\n Extracted source
|
3027
|
+
(around line <strong>#30</strong>):\n </div>\n <div class=\"data\">\n
|
3028
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3029
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
3030
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3031
|
+
class=\"line\">\n</div><div class=\"line\"> def serve(req)\n</div><div
|
3032
|
+
class=\"line active\"> find_routes(req).each do |match, parameters,
|
3033
|
+
route|\n</div><div class=\"line\"> set_params = req.path_parameters\n</div><div
|
3034
|
+
class=\"line\"> path_info = req.path_info\n</div><div class=\"line\">
|
3035
|
+
\ script_name = req.script_name\n</div>\n</pre>\n</td>\n </tr>\n
|
3036
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3037
|
+
id=\"frame-source-49\">\n <div class=\"info\">\n Extracted source
|
3038
|
+
(around line <strong>#30</strong>):\n </div>\n <div class=\"data\">\n
|
3039
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3040
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
3041
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3042
|
+
class=\"line\">\n</div><div class=\"line\"> def serve(req)\n</div><div
|
3043
|
+
class=\"line active\"> find_routes(req).each do |match, parameters,
|
3044
|
+
route|\n</div><div class=\"line\"> set_params = req.path_parameters\n</div><div
|
3045
|
+
class=\"line\"> path_info = req.path_info\n</div><div class=\"line\">
|
3046
|
+
\ script_name = req.script_name\n</div>\n</pre>\n</td>\n </tr>\n
|
3047
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3048
|
+
id=\"frame-source-50\">\n <div class=\"info\">\n Extracted source
|
3049
|
+
(around line <strong>#802</strong>):\n </div>\n <div class=\"data\">\n
|
3050
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3051
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>800</span>\n<span>801</span>\n<span>802</span>\n<span>803</span>\n<span>804</span>\n<span>805</span>\n
|
3052
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3053
|
+
class=\"line\"> req = request_class.new(env)\n</div><div class=\"line\">
|
3054
|
+
\ req.path_info = Journey::Router::Utils.normalize_path(req.path_info)\n</div><div
|
3055
|
+
class=\"line active\"> @router.serve(req)\n</div><div class=\"line\">
|
3056
|
+
\ end\n</div><div class=\"line\">\n</div><div class=\"line\"> def
|
3057
|
+
recognize_path(path, environment = {})\n</div>\n</pre>\n</td>\n </tr>\n
|
3058
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3059
|
+
id=\"frame-source-51\">\n <div class=\"info\">\n Extracted source
|
3060
|
+
(around line <strong>#24</strong>):\n </div>\n <div class=\"data\">\n
|
3061
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3062
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>22</span>\n<span>23</span>\n<span>24</span>\n<span>25</span>\n<span>26</span>\n<span>27</span>\n
|
3063
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3064
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3065
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">\n</div><div
|
3066
|
+
class=\"line\"> if etag_status?(status) && etag_body?(body) &&
|
3067
|
+
!skip_caching?(headers)\n</div><div class=\"line\"> original_body =
|
3068
|
+
body\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
3069
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-52\">\n <div
|
3070
|
+
class=\"info\">\n Extracted source (around line <strong>#25</strong>):\n
|
3071
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3072
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3073
|
+
class=\"line_numbers\">\n<span>23</span>\n<span>24</span>\n<span>25</span>\n<span>26</span>\n<span>27</span>\n<span>28</span>\n
|
3074
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3075
|
+
class=\"line\"> case env[REQUEST_METHOD]\n</div><div class=\"line\">
|
3076
|
+
\ when "GET", "HEAD"\n</div><div class=\"line active\">
|
3077
|
+
\ status, headers, body = @app.call(env)\n</div><div class=\"line\">
|
3078
|
+
\ headers = Utils::HeaderHash.new(headers)\n</div><div class=\"line\">
|
3079
|
+
\ if status == 200 && fresh?(env, headers)\n</div><div class=\"line\">
|
3080
|
+
\ status = 304\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3081
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-53\">\n
|
3082
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#13</strong>):\n
|
3083
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3084
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3085
|
+
class=\"line_numbers\">\n<span>11</span>\n<span>12</span>\n<span>13</span>\n<span>14</span>\n<span>15</span>\n<span>16</span>\n
|
3086
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3087
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3088
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">\n</div><div
|
3089
|
+
class=\"line\"> if env[REQUEST_METHOD] == HEAD\n</div><div class=\"line\">
|
3090
|
+
\ [\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
3091
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-54\">\n <div
|
3092
|
+
class=\"info\">\n Extracted source (around line <strong>#27</strong>):\n
|
3093
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3094
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3095
|
+
class=\"line_numbers\">\n<span>25</span>\n<span>26</span>\n<span>27</span>\n<span>28</span>\n<span>29</span>\n<span>30</span>\n
|
3096
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3097
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line
|
3098
|
+
active\"> @app.call(env)\n</div><div class=\"line\"> end\n</div><div
|
3099
|
+
class=\"line\">\n</div><div class=\"line\"> private\n</div>\n</pre>\n</td>\n
|
3100
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3101
|
+
hidden\" id=\"frame-source-55\">\n <div class=\"info\">\n Extracted
|
3102
|
+
source (around line <strong>#260</strong>):\n </div>\n <div class=\"data\">\n
|
3103
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3104
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>258</span>\n<span>259</span>\n<span>260</span>\n<span>261</span>\n<span>262</span>\n<span>263</span>\n
|
3105
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3106
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3107
|
+
active\"> @app.call(env)\n</div><div class=\"line\"> ensure\n</div><div
|
3108
|
+
class=\"line\"> session = Request::Session.find(env) || {}\n</div><div
|
3109
|
+
class=\"line\"> flash_hash = env[KEY]\n</div>\n</pre>\n</td>\n </tr>\n
|
3110
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3111
|
+
id=\"frame-source-56\">\n <div class=\"info\">\n Extracted source
|
3112
|
+
(around line <strong>#225</strong>):\n </div>\n <div class=\"data\">\n
|
3113
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3114
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>223</span>\n<span>224</span>\n<span>225</span>\n<span>226</span>\n<span>227</span>\n<span>228</span>\n
|
3115
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3116
|
+
class=\"line\"> def context(env, app=@app)\n</div><div class=\"line\">
|
3117
|
+
\ prepare_session(env)\n</div><div class=\"line active\"> status,
|
3118
|
+
headers, body = app.call(env)\n</div><div class=\"line\"> commit_session(env,
|
3119
|
+
status, headers, body)\n</div><div class=\"line\"> end\n</div><div
|
3120
|
+
class=\"line\">\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3121
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-57\">\n
|
3122
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#220</strong>):\n
|
3123
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3124
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3125
|
+
class=\"line_numbers\">\n<span>218</span>\n<span>219</span>\n<span>220</span>\n<span>221</span>\n<span>222</span>\n<span>223</span>\n
|
3126
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3127
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div
|
3128
|
+
class=\"line active\"> context(env)\n</div><div class=\"line\"> end\n</div><div
|
3129
|
+
class=\"line\">\n</div><div class=\"line\"> def context(env, app=@app)\n</div>\n</pre>\n</td>\n
|
3130
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3131
|
+
hidden\" id=\"frame-source-58\">\n <div class=\"info\">\n Extracted
|
3132
|
+
source (around line <strong>#560</strong>):\n </div>\n <div class=\"data\">\n
|
3133
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3134
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>558</span>\n<span>559</span>\n<span>560</span>\n<span>561</span>\n<span>562</span>\n<span>563</span>\n
|
3135
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3136
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3137
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">\n</div><div
|
3138
|
+
class=\"line\"> if cookie_jar = env['action_dispatch.cookies']\n</div><div
|
3139
|
+
class=\"line\"> unless cookie_jar.committed?\n</div>\n</pre>\n</td>\n
|
3140
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3141
|
+
hidden\" id=\"frame-source-59\">\n <div class=\"info\">\n Extracted
|
3142
|
+
source (around line <strong>#36</strong>):\n </div>\n <div class=\"data\">\n
|
3143
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3144
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>34</span>\n<span>35</span>\n<span>36</span>\n<span>37</span>\n<span>38</span>\n<span>39</span>\n
|
3145
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3146
|
+
class=\"line\"> connection.enable_query_cache!\n</div><div class=\"line\">\n</div><div
|
3147
|
+
class=\"line active\"> response = @app.call(env)\n</div><div class=\"line\">
|
3148
|
+
\ response[2] = Rack::BodyProxy.new(response[2]) do\n</div><div class=\"line\">
|
3149
|
+
\ restore_query_cache_settings(connection_id, enabled)\n</div><div class=\"line\">
|
3150
|
+
\ end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
3151
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-60\">\n <div
|
3152
|
+
class=\"info\">\n Extracted source (around line <strong>#647</strong>):\n
|
3153
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3154
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3155
|
+
class=\"line_numbers\">\n<span>645</span>\n<span>646</span>\n<span>647</span>\n<span>648</span>\n<span>649</span>\n<span>650</span>\n
|
3156
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3157
|
+
class=\"line\"> testing = env['rack.test']\n</div><div class=\"line\">\n</div><div
|
3158
|
+
class=\"line active\"> response = @app.call(env)\n</div><div class=\"line\">
|
3159
|
+
\ response[2] = ::Rack::BodyProxy.new(response[2]) do\n</div><div class=\"line\">
|
3160
|
+
\ ActiveRecord::Base.clear_active_connections! unless testing\n</div><div
|
3161
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3162
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-61\">\n
|
3163
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#378</strong>):\n
|
3164
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3165
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3166
|
+
class=\"line_numbers\">\n<span>376</span>\n<span>377</span>\n<span>378</span>\n<span>379</span>\n<span>380</span>\n<span>381</span>\n
|
3167
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3168
|
+
class=\"line\"> end\n</div><div class=\"line\"> end\n</div><div
|
3169
|
+
class=\"line active\"> @app.call(env)\n</div><div class=\"line\"> end\n</div><div
|
3170
|
+
class=\"line\">\n</div><div class=\"line\"> private\n</div>\n</pre>\n</td>\n
|
3171
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3172
|
+
hidden\" id=\"frame-source-62\">\n <div class=\"info\">\n Extracted
|
3173
|
+
source (around line <strong>#29</strong>):\n </div>\n <div class=\"data\">\n
|
3174
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3175
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>27</span>\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n
|
3176
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3177
|
+
class=\"line\"> result = run_callbacks :call do\n</div><div class=\"line\">
|
3178
|
+
\ begin\n</div><div class=\"line active\"> @app.call(env)\n</div><div
|
3179
|
+
class=\"line\"> rescue => error\n</div><div class=\"line\"> end\n</div><div
|
3180
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3181
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-63\">\n
|
3182
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#88</strong>):\n
|
3183
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3184
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3185
|
+
class=\"line_numbers\">\n<span>86</span>\n<span>87</span>\n<span>88</span>\n<span>89</span>\n<span>90</span>\n<span>91</span>\n
|
3186
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3187
|
+
class=\"line\"> def _run_callbacks(callbacks, &block)\n</div><div class=\"line\">
|
3188
|
+
\ if callbacks.empty?\n</div><div class=\"line active\"> block.call
|
3189
|
+
if block\n</div><div class=\"line\"> else\n</div><div class=\"line\">
|
3190
|
+
\ runner = callbacks.compile\n</div><div class=\"line\"> e =
|
3191
|
+
Filters::Environment.new(self, false, nil, block)\n</div>\n</pre>\n</td>\n
|
3192
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3193
|
+
hidden\" id=\"frame-source-64\">\n <div class=\"info\">\n Extracted
|
3194
|
+
source (around line <strong>#88</strong>):\n </div>\n <div class=\"data\">\n
|
3195
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3196
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>86</span>\n<span>87</span>\n<span>88</span>\n<span>89</span>\n<span>90</span>\n<span>91</span>\n
|
3197
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3198
|
+
class=\"line\"> def _run_callbacks(callbacks, &block)\n</div><div class=\"line\">
|
3199
|
+
\ if callbacks.empty?\n</div><div class=\"line active\"> block.call
|
3200
|
+
if block\n</div><div class=\"line\"> else\n</div><div class=\"line\">
|
3201
|
+
\ runner = callbacks.compile\n</div><div class=\"line\"> e =
|
3202
|
+
Filters::Environment.new(self, false, nil, block)\n</div>\n</pre>\n</td>\n
|
3203
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3204
|
+
hidden\" id=\"frame-source-65\">\n <div class=\"info\">\n Extracted
|
3205
|
+
source (around line <strong>#734</strong>):\n </div>\n <div class=\"data\">\n
|
3206
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3207
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>732</span>\n<span>733</span>\n<span>734</span>\n<span>735</span>\n<span>736</span>\n<span>737</span>\n
|
3208
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3209
|
+
class=\"line\"> module_eval <<-RUBY, __FILE__, __LINE__ + 1\n</div><div
|
3210
|
+
class=\"line\"> def _run_#{name}_callbacks(&block)\n</div><div
|
3211
|
+
class=\"line active\"> _run_callbacks(_#{name}_callbacks, &block)\n</div><div
|
3212
|
+
class=\"line\"> end\n</div><div class=\"line\"> RUBY\n</div><div
|
3213
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3214
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-66\">\n
|
3215
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#81</strong>):\n
|
3216
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3217
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3218
|
+
class=\"line_numbers\">\n<span>79</span>\n<span>80</span>\n<span>81</span>\n<span>82</span>\n<span>83</span>\n<span>84</span>\n
|
3219
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3220
|
+
class=\"line\"> # end\n</div><div class=\"line\"> def run_callbacks(kind,
|
3221
|
+
&block)\n</div><div class=\"line active\"> send "_run_#{kind}_callbacks",
|
3222
|
+
&block\n</div><div class=\"line\"> end\n</div><div class=\"line\">\n</div><div
|
3223
|
+
class=\"line\"> private\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3224
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-67\">\n
|
3225
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#27</strong>):\n
|
3226
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3227
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3228
|
+
class=\"line_numbers\">\n<span>25</span>\n<span>26</span>\n<span>27</span>\n<span>28</span>\n<span>29</span>\n<span>30</span>\n
|
3229
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3230
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> error =
|
3231
|
+
nil\n</div><div class=\"line active\"> result = run_callbacks :call do\n</div><div
|
3232
|
+
class=\"line\"> begin\n</div><div class=\"line\"> @app.call(env)\n</div><div
|
3233
|
+
class=\"line\"> rescue => error\n</div>\n</pre>\n</td>\n </tr>\n
|
3234
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3235
|
+
id=\"frame-source-68\">\n <div class=\"info\">\n Extracted source
|
3236
|
+
(around line <strong>#73</strong>):\n </div>\n <div class=\"data\">\n
|
3237
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3238
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>71</span>\n<span>72</span>\n<span>73</span>\n<span>74</span>\n<span>75</span>\n<span>76</span>\n
|
3239
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3240
|
+
class=\"line\"> prepare!\n</div><div class=\"line\">\n</div><div class=\"line
|
3241
|
+
active\"> response = @app.call(env)\n</div><div class=\"line\"> response[2]
|
3242
|
+
= ::Rack::BodyProxy.new(response[2]) { cleanup! }\n</div><div class=\"line\">\n</div><div
|
3243
|
+
class=\"line\"> response\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3244
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-69\">\n
|
3245
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#78</strong>):\n
|
3246
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3247
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3248
|
+
class=\"line_numbers\">\n<span>76</span>\n<span>77</span>\n<span>78</span>\n<span>79</span>\n<span>80</span>\n<span>81</span>\n
|
3249
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3250
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> env["action_dispatch.remote_ip"]
|
3251
|
+
= GetIp.new(env, self)\n</div><div class=\"line active\"> @app.call(env)\n</div><div
|
3252
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
3253
|
+
\ # The GetIp class exists as a way to defer processing of the request data\n</div>\n</pre>\n</td>\n
|
3254
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3255
|
+
hidden\" id=\"frame-source-70\">\n <div class=\"info\">\n Extracted
|
3256
|
+
source (around line <strong>#17</strong>):\n </div>\n <div class=\"data\">\n
|
3257
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3258
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>15</span>\n<span>16</span>\n<span>17</span>\n<span>18</span>\n<span>19</span>\n<span>20</span>\n
|
3259
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3260
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3261
|
+
active\"> _, headers, body = response = @app.call(env)\n</div><div class=\"line\">\n</div><div
|
3262
|
+
class=\"line\"> if headers['X-Cascade'] == 'pass'\n</div><div
|
3263
|
+
class=\"line\"> body.close if body.respond_to?(:close)\n</div>\n</pre>\n</td>\n
|
3264
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3265
|
+
hidden\" id=\"frame-source-71\">\n <div class=\"info\">\n Extracted
|
3266
|
+
source (around line <strong>#37</strong>):\n </div>\n <div class=\"data\">\n
|
3267
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3268
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>35</span>\n<span>36</span>\n<span>37</span>\n<span>38</span>\n<span>39</span>\n<span>40</span>\n
|
3269
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3270
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line
|
3271
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">\n</div><div
|
3272
|
+
class=\"line\"> if exception = env['web_console.exception']\n</div><div
|
3273
|
+
class=\"line\"> session = Session.from_exception(exception)\n</div>\n</pre>\n</td>\n
|
3274
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3275
|
+
hidden\" id=\"frame-source-72\">\n <div class=\"info\">\n Extracted
|
3276
|
+
source (around line <strong>#30</strong>):\n </div>\n <div class=\"data\">\n
|
3277
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3278
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n<span>32</span>\n<span>33</span>\n
|
3279
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3280
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3281
|
+
active\"> @app.call(env)\n</div><div class=\"line\"> rescue Exception
|
3282
|
+
=> exception\n</div><div class=\"line\"> if env['action_dispatch.show_exceptions']
|
3283
|
+
== false\n</div><div class=\"line\"> raise exception\n</div>\n</pre>\n</td>\n
|
3284
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3285
|
+
hidden\" id=\"frame-source-73\">\n <div class=\"info\">\n Extracted
|
3286
|
+
source (around line <strong>#38</strong>):\n </div>\n <div class=\"data\">\n
|
3287
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3288
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>36</span>\n<span>37</span>\n<span>38</span>\n<span>39</span>\n<span>40</span>\n<span>41</span>\n
|
3289
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3290
|
+
class=\"line\"> instrumenter.start 'request.action_dispatch',
|
3291
|
+
request: request\n</div><div class=\"line\"> logger.info { started_request_message(request)
|
3292
|
+
}\n</div><div class=\"line active\"> resp = @app.call(env)\n</div><div
|
3293
|
+
class=\"line\"> resp[2] = ::Rack::BodyProxy.new(resp[2]) { finish(request)
|
3294
|
+
}\n</div><div class=\"line\"> resp\n</div><div class=\"line\"> rescue
|
3295
|
+
Exception\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
3296
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-74\">\n <div
|
3297
|
+
class=\"info\">\n Extracted source (around line <strong>#20</strong>):\n
|
3298
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3299
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3300
|
+
class=\"line_numbers\">\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n
|
3301
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3302
|
+
class=\"line\">\n</div><div class=\"line\"> if logger.respond_to?(:tagged)\n</div><div
|
3303
|
+
class=\"line active\"> logger.tagged(compute_tags(request)) { call_app(request,
|
3304
|
+
env) }\n</div><div class=\"line\"> else\n</div><div class=\"line\">
|
3305
|
+
\ call_app(request, env)\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
3306
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3307
|
+
hidden\" id=\"frame-source-75\">\n <div class=\"info\">\n Extracted
|
3308
|
+
source (around line <strong>#68</strong>):\n </div>\n <div class=\"data\">\n
|
3309
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3310
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>66</span>\n<span>67</span>\n<span>68</span>\n<span>69</span>\n<span>70</span>\n<span>71</span>\n
|
3311
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3312
|
+
class=\"line\">\n</div><div class=\"line\"> def tagged(*tags)\n</div><div
|
3313
|
+
class=\"line active\"> formatter.tagged(*tags) { yield self }\n</div><div
|
3314
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
3315
|
+
\ def flush\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3316
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-76\">\n
|
3317
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#26</strong>):\n
|
3318
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3319
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3320
|
+
class=\"line_numbers\">\n<span>24</span>\n<span>25</span>\n<span>26</span>\n<span>27</span>\n<span>28</span>\n<span>29</span>\n
|
3321
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3322
|
+
class=\"line\"> def tagged(*tags)\n</div><div class=\"line\"> new_tags
|
3323
|
+
= push_tags(*tags)\n</div><div class=\"line active\"> yield self\n</div><div
|
3324
|
+
class=\"line\"> ensure\n</div><div class=\"line\"> pop_tags(new_tags.size)\n</div><div
|
3325
|
+
class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3326
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-77\">\n
|
3327
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#68</strong>):\n
|
3328
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3329
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3330
|
+
class=\"line_numbers\">\n<span>66</span>\n<span>67</span>\n<span>68</span>\n<span>69</span>\n<span>70</span>\n<span>71</span>\n
|
3331
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3332
|
+
class=\"line\">\n</div><div class=\"line\"> def tagged(*tags)\n</div><div
|
3333
|
+
class=\"line active\"> formatter.tagged(*tags) { yield self }\n</div><div
|
3334
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line\">
|
3335
|
+
\ def flush\n</div>\n</pre>\n</td>\n </tr>\n </table>\n
|
3336
|
+
\ </div>\n </div>\n <div class=\"source hidden\" id=\"frame-source-78\">\n
|
3337
|
+
\ <div class=\"info\">\n Extracted source (around line <strong>#20</strong>):\n
|
3338
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3339
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3340
|
+
class=\"line_numbers\">\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n
|
3341
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3342
|
+
class=\"line\">\n</div><div class=\"line\"> if logger.respond_to?(:tagged)\n</div><div
|
3343
|
+
class=\"line active\"> logger.tagged(compute_tags(request)) { call_app(request,
|
3344
|
+
env) }\n</div><div class=\"line\"> else\n</div><div class=\"line\">
|
3345
|
+
\ call_app(request, env)\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n
|
3346
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3347
|
+
hidden\" id=\"frame-source-79\">\n <div class=\"info\">\n Extracted
|
3348
|
+
source (around line <strong>#21</strong>):\n </div>\n <div class=\"data\">\n
|
3349
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3350
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>19</span>\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n<span>24</span>\n
|
3351
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3352
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> env["action_dispatch.request_id"]
|
3353
|
+
= external_request_id(env) || internal_request_id\n</div><div class=\"line
|
3354
|
+
active\"> @app.call(env).tap { |_status, headers, _body| headers["X-Request-Id"]
|
3355
|
+
= env["action_dispatch.request_id"] }\n</div><div class=\"line\">
|
3356
|
+
\ end\n</div><div class=\"line\">\n</div><div class=\"line\"> private\n</div>\n</pre>\n</td>\n
|
3357
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3358
|
+
hidden\" id=\"frame-source-80\">\n <div class=\"info\">\n Extracted
|
3359
|
+
source (around line <strong>#22</strong>):\n </div>\n <div class=\"data\">\n
|
3360
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3361
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>20</span>\n<span>21</span>\n<span>22</span>\n<span>23</span>\n<span>24</span>\n<span>25</span>\n
|
3362
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3363
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line
|
3364
|
+
active\"> @app.call(env)\n</div><div class=\"line\"> end\n</div><div
|
3365
|
+
class=\"line\">\n</div><div class=\"line\"> def method_override(env)\n</div>\n</pre>\n</td>\n
|
3366
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3367
|
+
hidden\" id=\"frame-source-81\">\n <div class=\"info\">\n Extracted
|
3368
|
+
source (around line <strong>#18</strong>):\n </div>\n <div class=\"data\">\n
|
3369
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3370
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>16</span>\n<span>17</span>\n<span>18</span>\n<span>19</span>\n<span>20</span>\n<span>21</span>\n
|
3371
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3372
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> start_time
|
3373
|
+
= Time.now\n</div><div class=\"line active\"> status, headers, body =
|
3374
|
+
@app.call(env)\n</div><div class=\"line\"> request_time = Time.now -
|
3375
|
+
start_time\n</div><div class=\"line\">\n</div><div class=\"line\"> if
|
3376
|
+
!headers.has_key?(@header_name)\n</div>\n</pre>\n</td>\n </tr>\n
|
3377
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3378
|
+
id=\"frame-source-82\">\n <div class=\"info\">\n Extracted source
|
3379
|
+
(around line <strong>#28</strong>):\n </div>\n <div class=\"data\">\n
|
3380
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3381
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>26</span>\n<span>27</span>\n<span>28</span>\n<span>29</span>\n<span>30</span>\n<span>31</span>\n
|
3382
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3383
|
+
class=\"line\"> def call(env)\n</div><div class=\"line\"> LocalCacheRegistry.set_cache_for(local_cache_key,
|
3384
|
+
LocalStore.new)\n</div><div class=\"line active\"> response = @app.call(env)\n</div><div
|
3385
|
+
class=\"line\"> response[2] = ::Rack::BodyProxy.new(response[2])
|
3386
|
+
do\n</div><div class=\"line\"> LocalCacheRegistry.set_cache_for(local_cache_key,
|
3387
|
+
nil)\n</div><div class=\"line\"> end\n</div>\n</pre>\n</td>\n </tr>\n
|
3388
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3389
|
+
id=\"frame-source-83\">\n <div class=\"info\">\n Extracted source
|
3390
|
+
(around line <strong>#17</strong>):\n </div>\n <div class=\"data\">\n
|
3391
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3392
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>15</span>\n<span>16</span>\n<span>17</span>\n<span>18</span>\n<span>19</span>\n<span>20</span>\n
|
3393
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3394
|
+
class=\"line\"> old, env[FLAG] = env[FLAG], false\n</div><div class=\"line\">
|
3395
|
+
\ @mutex.lock\n</div><div class=\"line active\"> response = @app.call(env)\n</div><div
|
3396
|
+
class=\"line\"> body = BodyProxy.new(response[2]) { @mutex.unlock }\n</div><div
|
3397
|
+
class=\"line\"> response[2] = body\n</div><div class=\"line\"> response\n</div>\n</pre>\n</td>\n
|
3398
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3399
|
+
hidden\" id=\"frame-source-84\">\n <div class=\"info\">\n Extracted
|
3400
|
+
source (around line <strong>#113</strong>):\n </div>\n <div class=\"data\">\n
|
3401
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3402
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>111</span>\n<span>112</span>\n<span>113</span>\n<span>114</span>\n<span>115</span>\n<span>116</span>\n
|
3403
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3404
|
+
class=\"line\"> end\n</div><div class=\"line\">\n</div><div class=\"line
|
3405
|
+
active\"> @app.call(env)\n</div><div class=\"line\"> end\n</div><div
|
3406
|
+
class=\"line\"> end\n</div><div class=\"line\">end\n</div>\n</pre>\n</td>\n
|
3407
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3408
|
+
hidden\" id=\"frame-source-85\">\n <div class=\"info\">\n Extracted
|
3409
|
+
source (around line <strong>#113</strong>):\n </div>\n <div class=\"data\">\n
|
3410
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3411
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>111</span>\n<span>112</span>\n<span>113</span>\n<span>114</span>\n<span>115</span>\n<span>116</span>\n
|
3412
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3413
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3414
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">
|
3415
|
+
\ if body.respond_to?(:to_path)\n</div><div class=\"line\"> case
|
3416
|
+
type = variation(env)\n</div><div class=\"line\"> when 'X-Accel-Redirect'\n</div>\n</pre>\n</td>\n
|
3417
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3418
|
+
hidden\" id=\"frame-source-86\">\n <div class=\"info\">\n Extracted
|
3419
|
+
source (around line <strong>#518</strong>):\n </div>\n <div class=\"data\">\n
|
3420
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3421
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>516</span>\n<span>517</span>\n<span>518</span>\n<span>519</span>\n<span>520</span>\n<span>521</span>\n
|
3422
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3423
|
+
class=\"line\"> env["ROUTES_#{routes.object_id}_SCRIPT_NAME"]
|
3424
|
+
= env['SCRIPT_NAME'].dup\n</div><div class=\"line\"> end\n</div><div
|
3425
|
+
class=\"line active\"> app.call(env)\n</div><div class=\"line\"> end\n</div><div
|
3426
|
+
class=\"line\">\n</div><div class=\"line\"> # Defines additional Rack env
|
3427
|
+
configuration that is added on each call.\n</div>\n</pre>\n</td>\n </tr>\n
|
3428
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3429
|
+
id=\"frame-source-87\">\n <div class=\"info\">\n Extracted source
|
3430
|
+
(around line <strong>#164</strong>):\n </div>\n <div class=\"data\">\n
|
3431
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3432
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>162</span>\n<span>163</span>\n<span>164</span>\n<span>165</span>\n<span>166</span>\n<span>167</span>\n
|
3433
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3434
|
+
class=\"line\"> env["ORIGINAL_FULLPATH"] = build_original_fullpath(env)\n</div><div
|
3435
|
+
class=\"line\"> env["ORIGINAL_SCRIPT_NAME"] = env["SCRIPT_NAME"]\n</div><div
|
3436
|
+
class=\"line active\"> super(env)\n</div><div class=\"line\"> end\n</div><div
|
3437
|
+
class=\"line\">\n</div><div class=\"line\"> # Reload application routes
|
3438
|
+
regardless if they changed or not.\n</div>\n</pre>\n</td>\n </tr>\n
|
3439
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3440
|
+
id=\"frame-source-88\">\n <div class=\"info\">\n Extracted source
|
3441
|
+
(around line <strong>#17</strong>):\n </div>\n <div class=\"data\">\n
|
3442
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3443
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>15</span>\n<span>16</span>\n<span>17</span>\n<span>18</span>\n<span>19</span>\n<span>20</span>\n
|
3444
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3445
|
+
class=\"line\"> old, env[FLAG] = env[FLAG], false\n</div><div class=\"line\">
|
3446
|
+
\ @mutex.lock\n</div><div class=\"line active\"> response = @app.call(env)\n</div><div
|
3447
|
+
class=\"line\"> body = BodyProxy.new(response[2]) { @mutex.unlock }\n</div><div
|
3448
|
+
class=\"line\"> response[2] = body\n</div><div class=\"line\"> response\n</div>\n</pre>\n</td>\n
|
3449
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3450
|
+
hidden\" id=\"frame-source-89\">\n <div class=\"info\">\n Extracted
|
3451
|
+
source (around line <strong>#15</strong>):\n </div>\n <div class=\"data\">\n
|
3452
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3453
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>13</span>\n<span>14</span>\n<span>15</span>\n<span>16</span>\n<span>17</span>\n<span>18</span>\n
|
3454
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3455
|
+
class=\"line\">\n</div><div class=\"line\"> def call(env)\n</div><div class=\"line
|
3456
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">
|
3457
|
+
\ headers = HeaderHash.new(headers)\n</div><div class=\"line\">\n</div><div
|
3458
|
+
class=\"line\"> if !STATUS_WITH_NO_ENTITY_BODY.include?(status.to_i)
|
3459
|
+
&&\n</div>\n</pre>\n</td>\n </tr>\n </table>\n </div>\n
|
3460
|
+
\ </div>\n <div class=\"source hidden\" id=\"frame-source-90\">\n <div
|
3461
|
+
class=\"info\">\n Extracted source (around line <strong>#89</strong>):\n
|
3462
|
+
\ </div>\n <div class=\"data\">\n <table cellpadding=\"0\"
|
3463
|
+
cellspacing=\"0\" class=\"lines\">\n <tr>\n <td>\n <pre
|
3464
|
+
class=\"line_numbers\">\n<span>87</span>\n<span>88</span>\n<span>89</span>\n<span>90</span>\n<span>91</span>\n<span>92</span>\n
|
3465
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3466
|
+
class=\"line\"> env["REQUEST_PATH"] ||= [env["SCRIPT_NAME"],
|
3467
|
+
env[PATH_INFO]].join\n</div><div class=\"line\">\n</div><div class=\"line
|
3468
|
+
active\"> status, headers, body = @app.call(env)\n</div><div class=\"line\">
|
3469
|
+
\ begin\n</div><div class=\"line\"> res.status = status.to_i\n</div><div
|
3470
|
+
class=\"line\"> headers.each { |k, vs|\n</div>\n</pre>\n</td>\n </tr>\n
|
3471
|
+
\ </table>\n </div>\n </div>\n <div class=\"source hidden\"
|
3472
|
+
id=\"frame-source-91\">\n <div class=\"info\">\n Extracted source
|
3473
|
+
(around line <strong>#138</strong>):\n </div>\n <div class=\"data\">\n
|
3474
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3475
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>136</span>\n<span>137</span>\n<span>138</span>\n<span>139</span>\n<span>140</span>\n<span>141</span>\n
|
3476
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3477
|
+
class=\"line\"> si = servlet.get_instance(self, *options)\n</div><div
|
3478
|
+
class=\"line\"> @logger.debug(format("%s is invoked.", si.class.name))\n</div><div
|
3479
|
+
class=\"line active\"> si.service(req, res)\n</div><div class=\"line\">
|
3480
|
+
\ end\n</div><div class=\"line\">\n</div><div class=\"line\"> ##\n</div>\n</pre>\n</td>\n
|
3481
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3482
|
+
hidden\" id=\"frame-source-92\">\n <div class=\"info\">\n Extracted
|
3483
|
+
source (around line <strong>#94</strong>):\n </div>\n <div class=\"data\">\n
|
3484
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3485
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>92</span>\n<span>93</span>\n<span>94</span>\n<span>95</span>\n<span>96</span>\n<span>97</span>\n
|
3486
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3487
|
+
class=\"line\"> callback.call(req, res)\n</div><div class=\"line\">
|
3488
|
+
\ end\n</div><div class=\"line active\"> server.service(req,
|
3489
|
+
res)\n</div><div class=\"line\"> rescue HTTPStatus::EOFError, HTTPStatus::RequestTimeout
|
3490
|
+
=> ex\n</div><div class=\"line\"> res.set_error(ex)\n</div><div
|
3491
|
+
class=\"line\"> rescue HTTPStatus::Error => ex\n</div>\n</pre>\n</td>\n
|
3492
|
+
\ </tr>\n </table>\n </div>\n </div>\n <div class=\"source
|
3493
|
+
hidden\" id=\"frame-source-93\">\n <div class=\"info\">\n Extracted
|
3494
|
+
source (around line <strong>#295</strong>):\n </div>\n <div class=\"data\">\n
|
3495
|
+
\ <table cellpadding=\"0\" cellspacing=\"0\" class=\"lines\">\n <tr>\n
|
3496
|
+
\ <td>\n <pre class=\"line_numbers\">\n<span>293</span>\n<span>294</span>\n<span>295</span>\n<span>296</span>\n<span>297</span>\n<span>298</span>\n
|
3497
|
+
\ </pre>\n </td>\n<td width=\"100%\">\n<pre>\n<div
|
3498
|
+
class=\"line\"> end\n</div><div class=\"line\"> call_callback(:AcceptCallback,
|
3499
|
+
sock)\n</div><div class=\"line active\"> block ? block.call(sock)
|
3500
|
+
: run(sock)\n</div><div class=\"line\"> rescue Errno::ENOTCONN\n</div><div
|
3501
|
+
class=\"line\"> @logger.debug "Errno::ENOTCONN raised"\n</div><div
|
3502
|
+
class=\"line\"> rescue ServerError => ex\n</div>\n</pre>\n</td>\n
|
3503
|
+
\ </tr>\n </table>\n </div>\n </div>\n\n \n<p><code>Rails.root:
|
3504
|
+
/data/src/dlss/ld4l_data/annotations/triannon/spec/internal</code></p>\n\n<div
|
3505
|
+
id=\"traces\">\n <a href=\"#\" onclick=\"hide('Framework-Trace');hide('Full-Trace');show('Application-Trace');;
|
3506
|
+
return false;\">Application Trace</a> |\n <a href=\"#\" onclick=\"hide('Application-Trace');hide('Full-Trace');show('Framework-Trace');;
|
3507
|
+
return false;\">Framework Trace</a> |\n <a href=\"#\" onclick=\"hide('Application-Trace');hide('Framework-Trace');show('Full-Trace');;
|
3508
|
+
return false;\">Full Trace</a> \n\n <div id=\"Application-Trace\" style=\"display:
|
3509
|
+
none;\">\n <pre><code></code></pre>\n </div>\n <div id=\"Framework-Trace\"
|
3510
|
+
style=\"display: none;\">\n <pre><code><a class=\"trace-frames\" data-frame-id=\"0\"
|
3511
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/mime_responds.rb:218:in
|
3512
|
+
`respond_to'</a><br><a class=\"trace-frames\" data-frame-id=\"1\" href=\"#\">/data/src/dlss/ld4l_data/annotations/triannon/app/controllers/triannon/annotations_controller.rb:21:in
|
3513
|
+
`show'</a><br><a class=\"trace-frames\" data-frame-id=\"2\" href=\"#\">actionpack
|
3514
|
+
(4.2.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'</a><br><a
|
3515
|
+
class=\"trace-frames\" data-frame-id=\"3\" href=\"#\">actionpack (4.2.0) lib/abstract_controller/base.rb:198:in
|
3516
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"4\"
|
3517
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/rendering.rb:10:in
|
3518
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"5\"
|
3519
|
+
href=\"#\">actionpack (4.2.0) lib/abstract_controller/callbacks.rb:20:in `block
|
3520
|
+
in process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"6\"
|
3521
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:117:in `call'</a><br><a
|
3522
|
+
class=\"trace-frames\" data-frame-id=\"7\" href=\"#\">activesupport (4.2.0)
|
3523
|
+
lib/active_support/callbacks.rb:117:in `call'</a><br><a class=\"trace-frames\"
|
3524
|
+
data-frame-id=\"8\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:151:in
|
3525
|
+
`block in halting_and_conditional'</a><br><a class=\"trace-frames\" data-frame-id=\"9\"
|
3526
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:151:in `call'</a><br><a
|
3527
|
+
class=\"trace-frames\" data-frame-id=\"10\" href=\"#\">activesupport (4.2.0)
|
3528
|
+
lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'</a><br><a
|
3529
|
+
class=\"trace-frames\" data-frame-id=\"11\" href=\"#\">activesupport (4.2.0)
|
3530
|
+
lib/active_support/callbacks.rb:234:in `call'</a><br><a class=\"trace-frames\"
|
3531
|
+
data-frame-id=\"12\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:234:in
|
3532
|
+
`block in halting'</a><br><a class=\"trace-frames\" data-frame-id=\"13\"
|
3533
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `call'</a><br><a
|
3534
|
+
class=\"trace-frames\" data-frame-id=\"14\" href=\"#\">activesupport (4.2.0)
|
3535
|
+
lib/active_support/callbacks.rb:169:in `block in halting'</a><br><a class=\"trace-frames\"
|
3536
|
+
data-frame-id=\"15\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:169:in
|
3537
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"16\" href=\"#\">activesupport
|
3538
|
+
(4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'</a><br><a
|
3539
|
+
class=\"trace-frames\" data-frame-id=\"17\" href=\"#\">activesupport (4.2.0)
|
3540
|
+
lib/active_support/callbacks.rb:92:in `call'</a><br><a class=\"trace-frames\"
|
3541
|
+
data-frame-id=\"18\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:92:in
|
3542
|
+
`_run_callbacks'</a><br><a class=\"trace-frames\" data-frame-id=\"19\"
|
3543
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:734:in `_run_process_action_callbacks'</a><br><a
|
3544
|
+
class=\"trace-frames\" data-frame-id=\"20\" href=\"#\">activesupport (4.2.0)
|
3545
|
+
lib/active_support/callbacks.rb:81:in `run_callbacks'</a><br><a class=\"trace-frames\"
|
3546
|
+
data-frame-id=\"21\" href=\"#\">actionpack (4.2.0) lib/abstract_controller/callbacks.rb:19:in
|
3547
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"22\"
|
3548
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/rescue.rb:29:in
|
3549
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"23\"
|
3550
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:31:in
|
3551
|
+
`block in process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"24\"
|
3552
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/notifications.rb:164:in
|
3553
|
+
`block in instrument'</a><br><a class=\"trace-frames\" data-frame-id=\"25\"
|
3554
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in
|
3555
|
+
`instrument'</a><br><a class=\"trace-frames\" data-frame-id=\"26\" href=\"#\">activesupport
|
3556
|
+
(4.2.0) lib/active_support/notifications.rb:164:in `instrument'</a><br><a
|
3557
|
+
class=\"trace-frames\" data-frame-id=\"27\" href=\"#\">actionpack (4.2.0)
|
3558
|
+
lib/action_controller/metal/instrumentation.rb:30:in `process_action'</a><br><a
|
3559
|
+
class=\"trace-frames\" data-frame-id=\"28\" href=\"#\">actionpack (4.2.0)
|
3560
|
+
lib/action_controller/metal/params_wrapper.rb:250:in `process_action'</a><br><a
|
3561
|
+
class=\"trace-frames\" data-frame-id=\"29\" href=\"#\">activerecord (4.2.0)
|
3562
|
+
lib/active_record/railties/controller_runtime.rb:18:in `process_action'</a><br><a
|
3563
|
+
class=\"trace-frames\" data-frame-id=\"30\" href=\"#\">actionpack (4.2.0)
|
3564
|
+
lib/abstract_controller/base.rb:137:in `process'</a><br><a class=\"trace-frames\"
|
3565
|
+
data-frame-id=\"31\" href=\"#\">actionview (4.2.0) lib/action_view/rendering.rb:30:in
|
3566
|
+
`process'</a><br><a class=\"trace-frames\" data-frame-id=\"32\" href=\"#\">actionpack
|
3567
|
+
(4.2.0) lib/action_controller/metal.rb:195:in `dispatch'</a><br><a class=\"trace-frames\"
|
3568
|
+
data-frame-id=\"33\" href=\"#\">actionpack (4.2.0) lib/action_controller/metal/rack_delegation.rb:13:in
|
3569
|
+
`dispatch'</a><br><a class=\"trace-frames\" data-frame-id=\"34\" href=\"#\">actionpack
|
3570
|
+
(4.2.0) lib/action_controller/metal.rb:236:in `block in action'</a><br><a
|
3571
|
+
class=\"trace-frames\" data-frame-id=\"35\" href=\"#\">actionpack (4.2.0)
|
3572
|
+
lib/action_dispatch/routing/route_set.rb:73:in `call'</a><br><a class=\"trace-frames\"
|
3573
|
+
data-frame-id=\"36\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:73:in
|
3574
|
+
`dispatch'</a><br><a class=\"trace-frames\" data-frame-id=\"37\" href=\"#\">actionpack
|
3575
|
+
(4.2.0) lib/action_dispatch/routing/route_set.rb:42:in `serve'</a><br><a
|
3576
|
+
class=\"trace-frames\" data-frame-id=\"38\" href=\"#\">actionpack (4.2.0)
|
3577
|
+
lib/action_dispatch/routing/mapper.rb:49:in `serve'</a><br><a class=\"trace-frames\"
|
3578
|
+
data-frame-id=\"39\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/journey/router.rb:43:in
|
3579
|
+
`block in serve'</a><br><a class=\"trace-frames\" data-frame-id=\"40\"
|
3580
|
+
href=\"#\">actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in
|
3581
|
+
`each'</a><br><a class=\"trace-frames\" data-frame-id=\"41\" href=\"#\">actionpack
|
3582
|
+
(4.2.0) lib/action_dispatch/journey/router.rb:30:in `serve'</a><br><a
|
3583
|
+
class=\"trace-frames\" data-frame-id=\"42\" href=\"#\">actionpack (4.2.0)
|
3584
|
+
lib/action_dispatch/routing/route_set.rb:802:in `call'</a><br><a class=\"trace-frames\"
|
3585
|
+
data-frame-id=\"43\" href=\"#\">railties (4.2.0) lib/rails/engine.rb:518:in
|
3586
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"44\" href=\"#\">railties
|
3587
|
+
(4.2.0) lib/rails/railtie.rb:194:in `public_send'</a><br><a class=\"trace-frames\"
|
3588
|
+
data-frame-id=\"45\" href=\"#\">railties (4.2.0) lib/rails/railtie.rb:194:in
|
3589
|
+
`method_missing'</a><br><a class=\"trace-frames\" data-frame-id=\"46\"
|
3590
|
+
href=\"#\">actionpack (4.2.0) lib/action_dispatch/routing/mapper.rb:51:in
|
3591
|
+
`serve'</a><br><a class=\"trace-frames\" data-frame-id=\"47\" href=\"#\">actionpack
|
3592
|
+
(4.2.0) lib/action_dispatch/journey/router.rb:43:in `block in serve'</a><br><a
|
3593
|
+
class=\"trace-frames\" data-frame-id=\"48\" href=\"#\">actionpack (4.2.0)
|
3594
|
+
lib/action_dispatch/journey/router.rb:30:in `each'</a><br><a class=\"trace-frames\"
|
3595
|
+
data-frame-id=\"49\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in
|
3596
|
+
`serve'</a><br><a class=\"trace-frames\" data-frame-id=\"50\" href=\"#\">actionpack
|
3597
|
+
(4.2.0) lib/action_dispatch/routing/route_set.rb:802:in `call'</a><br><a
|
3598
|
+
class=\"trace-frames\" data-frame-id=\"51\" href=\"#\">rack (1.6.0) lib/rack/etag.rb:24:in
|
3599
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"52\" href=\"#\">rack
|
3600
|
+
(1.6.0) lib/rack/conditionalget.rb:25:in `call'</a><br><a class=\"trace-frames\"
|
3601
|
+
data-frame-id=\"53\" href=\"#\">rack (1.6.0) lib/rack/head.rb:13:in `call'</a><br><a
|
3602
|
+
class=\"trace-frames\" data-frame-id=\"54\" href=\"#\">actionpack (4.2.0)
|
3603
|
+
lib/action_dispatch/middleware/params_parser.rb:27:in `call'</a><br><a
|
3604
|
+
class=\"trace-frames\" data-frame-id=\"55\" href=\"#\">actionpack (4.2.0)
|
3605
|
+
lib/action_dispatch/middleware/flash.rb:260:in `call'</a><br><a class=\"trace-frames\"
|
3606
|
+
data-frame-id=\"56\" href=\"#\">rack (1.6.0) lib/rack/session/abstract/id.rb:225:in
|
3607
|
+
`context'</a><br><a class=\"trace-frames\" data-frame-id=\"57\" href=\"#\">rack
|
3608
|
+
(1.6.0) lib/rack/session/abstract/id.rb:220:in `call'</a><br><a class=\"trace-frames\"
|
3609
|
+
data-frame-id=\"58\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/cookies.rb:560:in
|
3610
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"59\" href=\"#\">activerecord
|
3611
|
+
(4.2.0) lib/active_record/query_cache.rb:36:in `call'</a><br><a class=\"trace-frames\"
|
3612
|
+
data-frame-id=\"60\" href=\"#\">activerecord (4.2.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:647:in
|
3613
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"61\" href=\"#\">activerecord
|
3614
|
+
(4.2.0) lib/active_record/migration.rb:378:in `call'</a><br><a class=\"trace-frames\"
|
3615
|
+
data-frame-id=\"62\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/callbacks.rb:29:in
|
3616
|
+
`block in call'</a><br><a class=\"trace-frames\" data-frame-id=\"63\"
|
3617
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:88:in `call'</a><br><a
|
3618
|
+
class=\"trace-frames\" data-frame-id=\"64\" href=\"#\">activesupport (4.2.0)
|
3619
|
+
lib/active_support/callbacks.rb:88:in `_run_callbacks'</a><br><a class=\"trace-frames\"
|
3620
|
+
data-frame-id=\"65\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:734:in
|
3621
|
+
`_run_call_callbacks'</a><br><a class=\"trace-frames\" data-frame-id=\"66\"
|
3622
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'</a><br><a
|
3623
|
+
class=\"trace-frames\" data-frame-id=\"67\" href=\"#\">actionpack (4.2.0)
|
3624
|
+
lib/action_dispatch/middleware/callbacks.rb:27:in `call'</a><br><a class=\"trace-frames\"
|
3625
|
+
data-frame-id=\"68\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/reloader.rb:73:in
|
3626
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"69\" href=\"#\">actionpack
|
3627
|
+
(4.2.0) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'</a><br><a
|
3628
|
+
class=\"trace-frames\" data-frame-id=\"70\" href=\"#\">actionpack (4.2.0)
|
3629
|
+
lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'</a><br><a
|
3630
|
+
class=\"trace-frames\" data-frame-id=\"71\" href=\"#\">web-console (2.1.2)
|
3631
|
+
lib/web_console/middleware.rb:37:in `call'</a><br><a class=\"trace-frames\"
|
3632
|
+
data-frame-id=\"72\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in
|
3633
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"73\" href=\"#\">railties
|
3634
|
+
(4.2.0) lib/rails/rack/logger.rb:38:in `call_app'</a><br><a class=\"trace-frames\"
|
3635
|
+
data-frame-id=\"74\" href=\"#\">railties (4.2.0) lib/rails/rack/logger.rb:20:in
|
3636
|
+
`block in call'</a><br><a class=\"trace-frames\" data-frame-id=\"75\"
|
3637
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in
|
3638
|
+
`block in tagged'</a><br><a class=\"trace-frames\" data-frame-id=\"76\"
|
3639
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in
|
3640
|
+
`tagged'</a><br><a class=\"trace-frames\" data-frame-id=\"77\" href=\"#\">activesupport
|
3641
|
+
(4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'</a><br><a
|
3642
|
+
class=\"trace-frames\" data-frame-id=\"78\" href=\"#\">railties (4.2.0) lib/rails/rack/logger.rb:20:in
|
3643
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"79\" href=\"#\">actionpack
|
3644
|
+
(4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'</a><br><a
|
3645
|
+
class=\"trace-frames\" data-frame-id=\"80\" href=\"#\">rack (1.6.0) lib/rack/methodoverride.rb:22:in
|
3646
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"81\" href=\"#\">rack
|
3647
|
+
(1.6.0) lib/rack/runtime.rb:18:in `call'</a><br><a class=\"trace-frames\"
|
3648
|
+
data-frame-id=\"82\" href=\"#\">activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in
|
3649
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"83\" href=\"#\">rack
|
3650
|
+
(1.6.0) lib/rack/lock.rb:17:in `call'</a><br><a class=\"trace-frames\"
|
3651
|
+
data-frame-id=\"84\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in
|
3652
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"85\" href=\"#\">rack
|
3653
|
+
(1.6.0) lib/rack/sendfile.rb:113:in `call'</a><br><a class=\"trace-frames\"
|
3654
|
+
data-frame-id=\"86\" href=\"#\">railties (4.2.0) lib/rails/engine.rb:518:in
|
3655
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"87\" href=\"#\">railties
|
3656
|
+
(4.2.0) lib/rails/application.rb:164:in `call'</a><br><a class=\"trace-frames\"
|
3657
|
+
data-frame-id=\"88\" href=\"#\">rack (1.6.0) lib/rack/lock.rb:17:in `call'</a><br><a
|
3658
|
+
class=\"trace-frames\" data-frame-id=\"89\" href=\"#\">rack (1.6.0) lib/rack/content_length.rb:15:in
|
3659
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"90\" href=\"#\">rack
|
3660
|
+
(1.6.0) lib/rack/handler/webrick.rb:89:in `service'</a><br><a class=\"trace-frames\"
|
3661
|
+
data-frame-id=\"91\" href=\"#\">/home/dlweber/.rbenv/versions/2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:138:in
|
3662
|
+
`service'</a><br><a class=\"trace-frames\" data-frame-id=\"92\" href=\"#\">/home/dlweber/.rbenv/versions/2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:94:in
|
3663
|
+
`run'</a><br><a class=\"trace-frames\" data-frame-id=\"93\" href=\"#\">/home/dlweber/.rbenv/versions/2.1.5/lib/ruby/2.1.0/webrick/server.rb:295:in
|
3664
|
+
`block in start_thread'</a><br></code></pre>\n </div>\n <div id=\"Full-Trace\"
|
3665
|
+
style=\"display: block;\">\n <pre><code><a class=\"trace-frames\" data-frame-id=\"0\"
|
3666
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/mime_responds.rb:218:in
|
3667
|
+
`respond_to'</a><br><a class=\"trace-frames\" data-frame-id=\"1\" href=\"#\">/data/src/dlss/ld4l_data/annotations/triannon/app/controllers/triannon/annotations_controller.rb:21:in
|
3668
|
+
`show'</a><br><a class=\"trace-frames\" data-frame-id=\"2\" href=\"#\">actionpack
|
3669
|
+
(4.2.0) lib/action_controller/metal/implicit_render.rb:4:in `send_action'</a><br><a
|
3670
|
+
class=\"trace-frames\" data-frame-id=\"3\" href=\"#\">actionpack (4.2.0) lib/abstract_controller/base.rb:198:in
|
3671
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"4\"
|
3672
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/rendering.rb:10:in
|
3673
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"5\"
|
3674
|
+
href=\"#\">actionpack (4.2.0) lib/abstract_controller/callbacks.rb:20:in `block
|
3675
|
+
in process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"6\"
|
3676
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:117:in `call'</a><br><a
|
3677
|
+
class=\"trace-frames\" data-frame-id=\"7\" href=\"#\">activesupport (4.2.0)
|
3678
|
+
lib/active_support/callbacks.rb:117:in `call'</a><br><a class=\"trace-frames\"
|
3679
|
+
data-frame-id=\"8\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:151:in
|
3680
|
+
`block in halting_and_conditional'</a><br><a class=\"trace-frames\" data-frame-id=\"9\"
|
3681
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:151:in `call'</a><br><a
|
3682
|
+
class=\"trace-frames\" data-frame-id=\"10\" href=\"#\">activesupport (4.2.0)
|
3683
|
+
lib/active_support/callbacks.rb:151:in `block in halting_and_conditional'</a><br><a
|
3684
|
+
class=\"trace-frames\" data-frame-id=\"11\" href=\"#\">activesupport (4.2.0)
|
3685
|
+
lib/active_support/callbacks.rb:234:in `call'</a><br><a class=\"trace-frames\"
|
3686
|
+
data-frame-id=\"12\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:234:in
|
3687
|
+
`block in halting'</a><br><a class=\"trace-frames\" data-frame-id=\"13\"
|
3688
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:169:in `call'</a><br><a
|
3689
|
+
class=\"trace-frames\" data-frame-id=\"14\" href=\"#\">activesupport (4.2.0)
|
3690
|
+
lib/active_support/callbacks.rb:169:in `block in halting'</a><br><a class=\"trace-frames\"
|
3691
|
+
data-frame-id=\"15\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:169:in
|
3692
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"16\" href=\"#\">activesupport
|
3693
|
+
(4.2.0) lib/active_support/callbacks.rb:169:in `block in halting'</a><br><a
|
3694
|
+
class=\"trace-frames\" data-frame-id=\"17\" href=\"#\">activesupport (4.2.0)
|
3695
|
+
lib/active_support/callbacks.rb:92:in `call'</a><br><a class=\"trace-frames\"
|
3696
|
+
data-frame-id=\"18\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:92:in
|
3697
|
+
`_run_callbacks'</a><br><a class=\"trace-frames\" data-frame-id=\"19\"
|
3698
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:734:in `_run_process_action_callbacks'</a><br><a
|
3699
|
+
class=\"trace-frames\" data-frame-id=\"20\" href=\"#\">activesupport (4.2.0)
|
3700
|
+
lib/active_support/callbacks.rb:81:in `run_callbacks'</a><br><a class=\"trace-frames\"
|
3701
|
+
data-frame-id=\"21\" href=\"#\">actionpack (4.2.0) lib/abstract_controller/callbacks.rb:19:in
|
3702
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"22\"
|
3703
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/rescue.rb:29:in
|
3704
|
+
`process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"23\"
|
3705
|
+
href=\"#\">actionpack (4.2.0) lib/action_controller/metal/instrumentation.rb:31:in
|
3706
|
+
`block in process_action'</a><br><a class=\"trace-frames\" data-frame-id=\"24\"
|
3707
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/notifications.rb:164:in
|
3708
|
+
`block in instrument'</a><br><a class=\"trace-frames\" data-frame-id=\"25\"
|
3709
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/notifications/instrumenter.rb:20:in
|
3710
|
+
`instrument'</a><br><a class=\"trace-frames\" data-frame-id=\"26\" href=\"#\">activesupport
|
3711
|
+
(4.2.0) lib/active_support/notifications.rb:164:in `instrument'</a><br><a
|
3712
|
+
class=\"trace-frames\" data-frame-id=\"27\" href=\"#\">actionpack (4.2.0)
|
3713
|
+
lib/action_controller/metal/instrumentation.rb:30:in `process_action'</a><br><a
|
3714
|
+
class=\"trace-frames\" data-frame-id=\"28\" href=\"#\">actionpack (4.2.0)
|
3715
|
+
lib/action_controller/metal/params_wrapper.rb:250:in `process_action'</a><br><a
|
3716
|
+
class=\"trace-frames\" data-frame-id=\"29\" href=\"#\">activerecord (4.2.0)
|
3717
|
+
lib/active_record/railties/controller_runtime.rb:18:in `process_action'</a><br><a
|
3718
|
+
class=\"trace-frames\" data-frame-id=\"30\" href=\"#\">actionpack (4.2.0)
|
3719
|
+
lib/abstract_controller/base.rb:137:in `process'</a><br><a class=\"trace-frames\"
|
3720
|
+
data-frame-id=\"31\" href=\"#\">actionview (4.2.0) lib/action_view/rendering.rb:30:in
|
3721
|
+
`process'</a><br><a class=\"trace-frames\" data-frame-id=\"32\" href=\"#\">actionpack
|
3722
|
+
(4.2.0) lib/action_controller/metal.rb:195:in `dispatch'</a><br><a class=\"trace-frames\"
|
3723
|
+
data-frame-id=\"33\" href=\"#\">actionpack (4.2.0) lib/action_controller/metal/rack_delegation.rb:13:in
|
3724
|
+
`dispatch'</a><br><a class=\"trace-frames\" data-frame-id=\"34\" href=\"#\">actionpack
|
3725
|
+
(4.2.0) lib/action_controller/metal.rb:236:in `block in action'</a><br><a
|
3726
|
+
class=\"trace-frames\" data-frame-id=\"35\" href=\"#\">actionpack (4.2.0)
|
3727
|
+
lib/action_dispatch/routing/route_set.rb:73:in `call'</a><br><a class=\"trace-frames\"
|
3728
|
+
data-frame-id=\"36\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/routing/route_set.rb:73:in
|
3729
|
+
`dispatch'</a><br><a class=\"trace-frames\" data-frame-id=\"37\" href=\"#\">actionpack
|
3730
|
+
(4.2.0) lib/action_dispatch/routing/route_set.rb:42:in `serve'</a><br><a
|
3731
|
+
class=\"trace-frames\" data-frame-id=\"38\" href=\"#\">actionpack (4.2.0)
|
3732
|
+
lib/action_dispatch/routing/mapper.rb:49:in `serve'</a><br><a class=\"trace-frames\"
|
3733
|
+
data-frame-id=\"39\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/journey/router.rb:43:in
|
3734
|
+
`block in serve'</a><br><a class=\"trace-frames\" data-frame-id=\"40\"
|
3735
|
+
href=\"#\">actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in
|
3736
|
+
`each'</a><br><a class=\"trace-frames\" data-frame-id=\"41\" href=\"#\">actionpack
|
3737
|
+
(4.2.0) lib/action_dispatch/journey/router.rb:30:in `serve'</a><br><a
|
3738
|
+
class=\"trace-frames\" data-frame-id=\"42\" href=\"#\">actionpack (4.2.0)
|
3739
|
+
lib/action_dispatch/routing/route_set.rb:802:in `call'</a><br><a class=\"trace-frames\"
|
3740
|
+
data-frame-id=\"43\" href=\"#\">railties (4.2.0) lib/rails/engine.rb:518:in
|
3741
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"44\" href=\"#\">railties
|
3742
|
+
(4.2.0) lib/rails/railtie.rb:194:in `public_send'</a><br><a class=\"trace-frames\"
|
3743
|
+
data-frame-id=\"45\" href=\"#\">railties (4.2.0) lib/rails/railtie.rb:194:in
|
3744
|
+
`method_missing'</a><br><a class=\"trace-frames\" data-frame-id=\"46\"
|
3745
|
+
href=\"#\">actionpack (4.2.0) lib/action_dispatch/routing/mapper.rb:51:in
|
3746
|
+
`serve'</a><br><a class=\"trace-frames\" data-frame-id=\"47\" href=\"#\">actionpack
|
3747
|
+
(4.2.0) lib/action_dispatch/journey/router.rb:43:in `block in serve'</a><br><a
|
3748
|
+
class=\"trace-frames\" data-frame-id=\"48\" href=\"#\">actionpack (4.2.0)
|
3749
|
+
lib/action_dispatch/journey/router.rb:30:in `each'</a><br><a class=\"trace-frames\"
|
3750
|
+
data-frame-id=\"49\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/journey/router.rb:30:in
|
3751
|
+
`serve'</a><br><a class=\"trace-frames\" data-frame-id=\"50\" href=\"#\">actionpack
|
3752
|
+
(4.2.0) lib/action_dispatch/routing/route_set.rb:802:in `call'</a><br><a
|
3753
|
+
class=\"trace-frames\" data-frame-id=\"51\" href=\"#\">rack (1.6.0) lib/rack/etag.rb:24:in
|
3754
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"52\" href=\"#\">rack
|
3755
|
+
(1.6.0) lib/rack/conditionalget.rb:25:in `call'</a><br><a class=\"trace-frames\"
|
3756
|
+
data-frame-id=\"53\" href=\"#\">rack (1.6.0) lib/rack/head.rb:13:in `call'</a><br><a
|
3757
|
+
class=\"trace-frames\" data-frame-id=\"54\" href=\"#\">actionpack (4.2.0)
|
3758
|
+
lib/action_dispatch/middleware/params_parser.rb:27:in `call'</a><br><a
|
3759
|
+
class=\"trace-frames\" data-frame-id=\"55\" href=\"#\">actionpack (4.2.0)
|
3760
|
+
lib/action_dispatch/middleware/flash.rb:260:in `call'</a><br><a class=\"trace-frames\"
|
3761
|
+
data-frame-id=\"56\" href=\"#\">rack (1.6.0) lib/rack/session/abstract/id.rb:225:in
|
3762
|
+
`context'</a><br><a class=\"trace-frames\" data-frame-id=\"57\" href=\"#\">rack
|
3763
|
+
(1.6.0) lib/rack/session/abstract/id.rb:220:in `call'</a><br><a class=\"trace-frames\"
|
3764
|
+
data-frame-id=\"58\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/cookies.rb:560:in
|
3765
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"59\" href=\"#\">activerecord
|
3766
|
+
(4.2.0) lib/active_record/query_cache.rb:36:in `call'</a><br><a class=\"trace-frames\"
|
3767
|
+
data-frame-id=\"60\" href=\"#\">activerecord (4.2.0) lib/active_record/connection_adapters/abstract/connection_pool.rb:647:in
|
3768
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"61\" href=\"#\">activerecord
|
3769
|
+
(4.2.0) lib/active_record/migration.rb:378:in `call'</a><br><a class=\"trace-frames\"
|
3770
|
+
data-frame-id=\"62\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/callbacks.rb:29:in
|
3771
|
+
`block in call'</a><br><a class=\"trace-frames\" data-frame-id=\"63\"
|
3772
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:88:in `call'</a><br><a
|
3773
|
+
class=\"trace-frames\" data-frame-id=\"64\" href=\"#\">activesupport (4.2.0)
|
3774
|
+
lib/active_support/callbacks.rb:88:in `_run_callbacks'</a><br><a class=\"trace-frames\"
|
3775
|
+
data-frame-id=\"65\" href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:734:in
|
3776
|
+
`_run_call_callbacks'</a><br><a class=\"trace-frames\" data-frame-id=\"66\"
|
3777
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/callbacks.rb:81:in `run_callbacks'</a><br><a
|
3778
|
+
class=\"trace-frames\" data-frame-id=\"67\" href=\"#\">actionpack (4.2.0)
|
3779
|
+
lib/action_dispatch/middleware/callbacks.rb:27:in `call'</a><br><a class=\"trace-frames\"
|
3780
|
+
data-frame-id=\"68\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/reloader.rb:73:in
|
3781
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"69\" href=\"#\">actionpack
|
3782
|
+
(4.2.0) lib/action_dispatch/middleware/remote_ip.rb:78:in `call'</a><br><a
|
3783
|
+
class=\"trace-frames\" data-frame-id=\"70\" href=\"#\">actionpack (4.2.0)
|
3784
|
+
lib/action_dispatch/middleware/debug_exceptions.rb:17:in `call'</a><br><a
|
3785
|
+
class=\"trace-frames\" data-frame-id=\"71\" href=\"#\">web-console (2.1.2)
|
3786
|
+
lib/web_console/middleware.rb:37:in `call'</a><br><a class=\"trace-frames\"
|
3787
|
+
data-frame-id=\"72\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/show_exceptions.rb:30:in
|
3788
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"73\" href=\"#\">railties
|
3789
|
+
(4.2.0) lib/rails/rack/logger.rb:38:in `call_app'</a><br><a class=\"trace-frames\"
|
3790
|
+
data-frame-id=\"74\" href=\"#\">railties (4.2.0) lib/rails/rack/logger.rb:20:in
|
3791
|
+
`block in call'</a><br><a class=\"trace-frames\" data-frame-id=\"75\"
|
3792
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/tagged_logging.rb:68:in
|
3793
|
+
`block in tagged'</a><br><a class=\"trace-frames\" data-frame-id=\"76\"
|
3794
|
+
href=\"#\">activesupport (4.2.0) lib/active_support/tagged_logging.rb:26:in
|
3795
|
+
`tagged'</a><br><a class=\"trace-frames\" data-frame-id=\"77\" href=\"#\">activesupport
|
3796
|
+
(4.2.0) lib/active_support/tagged_logging.rb:68:in `tagged'</a><br><a
|
3797
|
+
class=\"trace-frames\" data-frame-id=\"78\" href=\"#\">railties (4.2.0) lib/rails/rack/logger.rb:20:in
|
3798
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"79\" href=\"#\">actionpack
|
3799
|
+
(4.2.0) lib/action_dispatch/middleware/request_id.rb:21:in `call'</a><br><a
|
3800
|
+
class=\"trace-frames\" data-frame-id=\"80\" href=\"#\">rack (1.6.0) lib/rack/methodoverride.rb:22:in
|
3801
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"81\" href=\"#\">rack
|
3802
|
+
(1.6.0) lib/rack/runtime.rb:18:in `call'</a><br><a class=\"trace-frames\"
|
3803
|
+
data-frame-id=\"82\" href=\"#\">activesupport (4.2.0) lib/active_support/cache/strategy/local_cache_middleware.rb:28:in
|
3804
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"83\" href=\"#\">rack
|
3805
|
+
(1.6.0) lib/rack/lock.rb:17:in `call'</a><br><a class=\"trace-frames\"
|
3806
|
+
data-frame-id=\"84\" href=\"#\">actionpack (4.2.0) lib/action_dispatch/middleware/static.rb:113:in
|
3807
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"85\" href=\"#\">rack
|
3808
|
+
(1.6.0) lib/rack/sendfile.rb:113:in `call'</a><br><a class=\"trace-frames\"
|
3809
|
+
data-frame-id=\"86\" href=\"#\">railties (4.2.0) lib/rails/engine.rb:518:in
|
3810
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"87\" href=\"#\">railties
|
3811
|
+
(4.2.0) lib/rails/application.rb:164:in `call'</a><br><a class=\"trace-frames\"
|
3812
|
+
data-frame-id=\"88\" href=\"#\">rack (1.6.0) lib/rack/lock.rb:17:in `call'</a><br><a
|
3813
|
+
class=\"trace-frames\" data-frame-id=\"89\" href=\"#\">rack (1.6.0) lib/rack/content_length.rb:15:in
|
3814
|
+
`call'</a><br><a class=\"trace-frames\" data-frame-id=\"90\" href=\"#\">rack
|
3815
|
+
(1.6.0) lib/rack/handler/webrick.rb:89:in `service'</a><br><a class=\"trace-frames\"
|
3816
|
+
data-frame-id=\"91\" href=\"#\">/home/dlweber/.rbenv/versions/2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:138:in
|
3817
|
+
`service'</a><br><a class=\"trace-frames\" data-frame-id=\"92\" href=\"#\">/home/dlweber/.rbenv/versions/2.1.5/lib/ruby/2.1.0/webrick/httpserver.rb:94:in
|
3818
|
+
`run'</a><br><a class=\"trace-frames\" data-frame-id=\"93\" href=\"#\">/home/dlweber/.rbenv/versions/2.1.5/lib/ruby/2.1.0/webrick/server.rb:295:in
|
3819
|
+
`block in start_thread'</a><br></code></pre>\n </div>\n\n <script
|
3820
|
+
type=\"text/javascript\">\n var traceFrames = document.getElementsByClassName('trace-frames');\n
|
3821
|
+
\ var selectedFrame, currentSource = document.getElementById('frame-source-0');\n\n
|
3822
|
+
\ // Add click listeners for all stack frames\n for (var i = 0; i < traceFrames.length;
|
3823
|
+
i++) {\n traceFrames[i].addEventListener('click', function(e) {\n e.preventDefault();\n
|
3824
|
+
\ var target = e.target;\n var frame_id = target.dataset.frameId;\n\n
|
3825
|
+
\ if (selectedFrame) {\n selectedFrame.className = selectedFrame.className.replace(\"selected\",
|
3826
|
+
\"\");\n }\n\n target.className += \" selected\";\n selectedFrame
|
3827
|
+
= target;\n\n // Change the extracted source code\n changeSourceExtract(frame_id);\n
|
3828
|
+
\ });\n\n function changeSourceExtract(frame_id) {\n var el
|
3829
|
+
= document.getElementById('frame-source-' + frame_id);\n if (currentSource
|
3830
|
+
&& el) {\n currentSource.className += \" hidden\";\n el.className
|
3831
|
+
= el.className.replace(\" hidden\", \"\");\n currentSource = el;\n
|
3832
|
+
\ }\n }\n }\n </script>\n</div>\n\n \n\n<h2 style=\"margin-top:
|
3833
|
+
30px\">Request</h2>\n<p><b>Parameters</b>:</p> <pre>{"id"=>"875190ee-1fa4-4298-916b-147d1cbce91f"}</pre>\n\n<div
|
3834
|
+
class=\"details\">\n <div class=\"summary\"><a href=\"#\" onclick=\"return
|
3835
|
+
toggleSessionDump()\">Toggle session dump</a></div>\n <div id=\"session_dump\"
|
3836
|
+
style=\"display:none\"><pre></pre></div>\n</div>\n\n<div class=\"details\">\n
|
3837
|
+
\ <div class=\"summary\"><a href=\"#\" onclick=\"return toggleEnvDump()\">Toggle
|
3838
|
+
env dump</a></div>\n <div id=\"env_dump\" style=\"display:none\"><pre>GATEWAY_INTERFACE:
|
3839
|
+
"CGI/1.1"\nHTTP_ACCEPT: "application/n-quads"\nHTTP_ACCEPT_ENCODING:
|
3840
|
+
"gzip, deflate"\nREMOTE_ADDR: "127.0.0.1"\nREMOTE_HOST:
|
3841
|
+
"127.0.0.1"\nSERVER_NAME: "localhost"\nSERVER_PROTOCOL:
|
3842
|
+
"HTTP/1.1"</pre></div>\n</div>\n\n<h2 style=\"margin-top: 30px\">Response</h2>\n<p><b>Headers</b>:</p>
|
3843
|
+
<pre>None</pre>\n\n</div>\n\n\n</body>\n</html>\n<div id=\"console\"\n data-remote-path='console/repl_sessions/1a7a538504d83f501305bd1f1084ade1'\n
|
3844
|
+
\ data-initial-prompt='>> '>\n</div>\n\n\n<script type=\"text/javascript\">\n(function()
|
3845
|
+
{\n // DOM helpers\nfunction hasClass(el, className) {\n var regex = new
|
3846
|
+
RegExp('(?:^|\\\\s)' + className + '(?!\\\\S)', 'g');\n return el.className.match(regex);\n}\n\nfunction
|
3847
|
+
addClass(el, className) {\n el.className += \" \" + className;\n}\n\nfunction
|
3848
|
+
removeClass(el, className) {\n var regex = new RegExp('(?:^|\\\\s)' + className
|
3849
|
+
+ '(?!\\\\S)', 'g');\n el.className = el.className.replace(regex, '');\n}\n\nfunction
|
3850
|
+
removeAllChildren(el) {\n while (el.firstChild) {\n el.removeChild(el.firstChild);\n
|
3851
|
+
\ }\n}\n\nfunction escapeHTML(html) {\n return html\n .replace(/&/g, '&')\n
|
3852
|
+
\ .replace(/</g, '<')\n .replace(/>/g, '>')\n .replace(/\"/g,
|
3853
|
+
'"')\n .replace(/'/g, ''')\n .replace(/`/g, '`');\n}\n\n//
|
3854
|
+
Add CSS styles dynamically. This probably doesnt work for IE <8.\nvar style
|
3855
|
+
= document.createElement('style');\nstyle.type = 'text/css';\nstyle.innerHTML
|
3856
|
+
= \"#console { position: fixed; left: 0; bottom: 0; width: 100%; height: 148px;
|
3857
|
+
border: 1px solid; padding: 0 0 4px 0; overflow: none; margin: 0; background:
|
3858
|
+
none repeat scroll 0% 0% #333; z-index: 9999; }\\n#console div.console-inner
|
3859
|
+
{ font-family: monospace; font-size: 11px; height: 100%; overflow: auto; background:
|
3860
|
+
#333; border: 0; padding: 0; margin: 0; }\\n#console div.console-prompt-box
|
3861
|
+
{ color: #FFF; }\\n#console pre.console-message { color: #1AD027; margin:
|
3862
|
+
0; border: 0; white-space: pre-wrap; background-color: #333; padding: 0; }\\n#console
|
3863
|
+
div.console-focus span.console-cursor { background: #FEFEFE; color: #333;
|
3864
|
+
font-weight: bold; }\\n#console div#resizer { width: 100%; height: 4px; cursor:
|
3865
|
+
ns-resize; }\\n#console input#clipboard { height: 0px; padding: 0px; margin:
|
3866
|
+
0px; width: 0px; margin-left: -1000px; }\\n#console span.console-prompt-label
|
3867
|
+
{ display: inline; color: #FFF; background: none repeat scroll 0% 0% #333;
|
3868
|
+
border: 0; padding: 0; }\\n#console pre.console-prompt-display { display:
|
3869
|
+
inline; color: #FFF; background: none repeat scroll 0% 0% #333; border: 0;
|
3870
|
+
padding: 0; }\\n\"\n;\ndocument.getElementsByTagName('head')[0].appendChild(style);\n\n/**\n
|
3871
|
+
* Constructor for command storage.\n * It uses localStorage if available.
|
3872
|
+
Otherwise fallback to normal JS array.\n */\nfunction CommandStorage() {\n
|
3873
|
+
\ this.previousCommands = [];\n var previousCommandOffset = 0;\n var hasLocalStorage
|
3874
|
+
= typeof window.localStorage !== 'undefined';\n var STORAGE_KEY = \"web_console_previous_commands\";\n
|
3875
|
+
\ var MAX_STORAGE = 100;\n\n if (hasLocalStorage) {\n this.previousCommands
|
3876
|
+
= JSON.parse(localStorage.getItem(STORAGE_KEY)) || [];\n previousCommandOffset
|
3877
|
+
= this.previousCommands.length;\n }\n\n this.addCommand = function(command)
|
3878
|
+
{\n previousCommandOffset = this.previousCommands.push(command);\n\n if
|
3879
|
+
(previousCommandOffset > MAX_STORAGE) {\n this.previousCommands.splice(0,
|
3880
|
+
1);\n previousCommandOffset = MAX_STORAGE;\n }\n\n if (hasLocalStorage)
|
3881
|
+
{\n localStorage.setItem(STORAGE_KEY, JSON.stringify(this.previousCommands));\n
|
3882
|
+
\ }\n };\n\n this.navigate = function(offset) {\n previousCommandOffset
|
3883
|
+
+= offset;\n\n if (previousCommandOffset < 0) {\n previousCommandOffset
|
3884
|
+
= -1;\n return null;\n }\n\n if (previousCommandOffset >= this.previousCommands.length)
|
3885
|
+
{\n previousCommandOffset = this.previousCommands.length;\n return
|
3886
|
+
null;\n }\n\n return this.previousCommands[previousCommandOffset];\n
|
3887
|
+
\ }\n}\n\n// HTML strings for dynamic elements.\nvar consoleInnerHtml = \"<div
|
3888
|
+
id=\\'resizer\\'><\\/div>\\n<div class=\\'console-inner\\'><\\/div>\\n<input
|
3889
|
+
id=\\'clipboard\\' type=\\'text\\'>\\n\"\n;\nvar promptBoxHtml = \"<span class=\\'console-prompt-label\\'><\\/span>\\n<pre
|
3890
|
+
class=\\'console-prompt-display\\'><\\/pre>\\n\"\n;\n\n// REPLConsole Constructor\nfunction
|
3891
|
+
REPLConsole(config) {\n this.commandStorage = new CommandStorage();\n this.prompt
|
3892
|
+
= config && config.promptLabel ? config.promptLabel : ' >>';\n this.commandHandle
|
3893
|
+
= config && config.commandHandle ? config.commandHandle : function() { return
|
3894
|
+
this; }\n}\n\n\nREPLConsole.prototype.install = function(container) {\n var
|
3895
|
+
_this = this;\n\n document.onkeydown = function(ev) {\n if (_this.focused)
|
3896
|
+
{ _this.onKeyDown(ev); }\n };\n\n document.onkeypress = function(ev) {\n
|
3897
|
+
\ if (_this.focused) { _this.onKeyPress(ev); }\n };\n\n document.addEventListener('mousedown',
|
3898
|
+
function(ev) {\n var el = ev.target || ev.srcElement;\n\n if (el) {\n
|
3899
|
+
\ do {\n if (el === container) {\n _this.focus();\n return;\n
|
3900
|
+
\ }\n } while (el = el.parentNode);\n\n _this.blur();\n }\n
|
3901
|
+
\ });\n\n // Render the console.\n container.innerHTML = consoleInnerHtml;\n\n
|
3902
|
+
\ // Make the console resizable.\n document.getElementById('resizer').addEventListener('mousedown',
|
3903
|
+
function(ev) {\n var startY = ev.clientY;\n var startHeight
|
3904
|
+
\ = parseInt(document.defaultView.getComputedStyle(container).height,
|
3905
|
+
10);\n var consoleInner = document.getElementsByClassName('console-inner')[0];\n
|
3906
|
+
\ var innerScrollTopStart = consoleInner.scrollTop;\n var innerClientHeightStart
|
3907
|
+
\ = consoleInner.clientHeight;\n\n var doDrag = function(e) {\n container.style.height
|
3908
|
+
= (startHeight + startY - e.clientY) + 'px';\n consoleInner.scrollTop
|
3909
|
+
= innerScrollTopStart + (innerClientHeightStart - consoleInner.clientHeight);\n
|
3910
|
+
\ };\n\n var stopDrag = function(e) {\n document.documentElement.removeEventListener('mousemove',
|
3911
|
+
doDrag, false);\n document.documentElement.removeEventListener('mouseup',
|
3912
|
+
stopDrag, false);\n };\n\n document.documentElement.addEventListener('mousemove',
|
3913
|
+
doDrag, false);\n document.documentElement.addEventListener('mouseup',
|
3914
|
+
stopDrag, false);\n });\n\n // Initialize\n this.inner = container.getElementsByClassName('console-inner')[0];\n
|
3915
|
+
\ this.clipboard = document.getElementById('clipboard');\n this.newPromptBox();\n};\n\nREPLConsole.prototype.focus
|
3916
|
+
= function() {\n if (! this.focused) {\n this.focused = true;\n if
|
3917
|
+
(! hasClass(this.inner, \"console-focus\")) {\n addClass(this.inner,
|
3918
|
+
\"console-focus\");\n }\n this.scrollToBottom();\n }\n};\n\nREPLConsole.prototype.blur
|
3919
|
+
= function() {\n this.focused = false;\n removeClass(this.inner, \"console-focus\");\n};\n\n/**\n
|
3920
|
+
* Add a new empty prompt box to the console.\n */\nREPLConsole.prototype.newPromptBox
|
3921
|
+
= function() {\n // Remove the caret from previous prompt display if any.\n
|
3922
|
+
\ if (this.promptDisplay) {\n this.removeCaretFromPrompt();\n }\n\n var
|
3923
|
+
promptBox = document.createElement('div');\n promptBox.className = \"console-prompt-box\";\n
|
3924
|
+
\ promptBox.innerHTML = promptBoxHtml;\n this.promptLabel = promptBox.getElementsByClassName('console-prompt-label')[0];\n
|
3925
|
+
\ this.promptDisplay = promptBox.getElementsByClassName('console-prompt-display')[0];\n
|
3926
|
+
\ // Render the prompt box\n this.setInput(\"\");\n this.promptLabel.innerHTML
|
3927
|
+
= this.prompt;\n this.inner.appendChild(promptBox);\n this.scrollToBottom();\n};\n\n/**\n
|
3928
|
+
* Remove the caret from the prompt box,\n * mainly before adding a new prompt
|
3929
|
+
box.\n * For simplicity, just re-render the prompt box\n * with caret position
|
3930
|
+
-1.\n */\nREPLConsole.prototype.removeCaretFromPrompt = function() {\n this.setInput(this._input,
|
3931
|
+
-1);\n};\n\nREPLConsole.prototype.setInput = function(input, caretPos) {\n
|
3932
|
+
\ this._caretPos = caretPos === undefined ? input.length : caretPos;\n this._input
|
3933
|
+
= input;\n this.renderInput();\n};\n\n/**\n * Add some text to the existing
|
3934
|
+
input.\n */\nREPLConsole.prototype.addToInput = function(val, caretPos) {\n
|
3935
|
+
\ caretPos = caretPos || this._caretPos;\n var before = this._input.substring(0,
|
3936
|
+
caretPos);\n var after = this._input.substring(caretPos, this._input.length);\n
|
3937
|
+
\ var newInput = before + val + after;\n this.setInput(newInput, caretPos
|
3938
|
+
+ val.length);\n};\n\n/**\n * Render the input prompt. This is called whenever\n
|
3939
|
+
* the user input changes, sometimes not very efficient.\n */\nREPLConsole.prototype.renderInput
|
3940
|
+
= function() {\n // Clear the current input.\n removeAllChildren(this.promptDisplay);\n\n
|
3941
|
+
\ var promptCursor = document.createElement('span');\n promptCursor.className
|
3942
|
+
= \"console-cursor\";\n var before, current, after;\n\n if (this._caretPos
|
3943
|
+
< 0) {\n before = this._input;\n current = after = \"\";\n } else if
|
3944
|
+
(this._caretPos === this._input.length) {\n before = this._input;\n current
|
3945
|
+
= \"\\u00A0\";\n after = \"\";\n } else {\n before = this._input.substring(0,
|
3946
|
+
this._caretPos);\n current = this._input.charAt(this._caretPos);\n after
|
3947
|
+
= this._input.substring(this._caretPos + 1, this._input.length);\n }\n\n
|
3948
|
+
\ this.promptDisplay.appendChild(document.createTextNode(before));\n promptCursor.appendChild(document.createTextNode(current));\n
|
3949
|
+
\ this.promptDisplay.appendChild(promptCursor);\n this.promptDisplay.appendChild(document.createTextNode(after));\n};\n\nREPLConsole.prototype.writeOutput
|
3950
|
+
= function(output) {\n var consoleMessage = document.createElement('pre');\n
|
3951
|
+
\ consoleMessage.className = \"console-message\";\n consoleMessage.innerHTML
|
3952
|
+
= escapeHTML(output);\n this.inner.appendChild(consoleMessage);\n this.newPromptBox();\n};\n\nREPLConsole.prototype.onEnterKey
|
3953
|
+
= function() {\n var input = this._input;\n\n if(input != \"\" && input
|
3954
|
+
!== undefined) {\n this.commandStorage.addCommand(input);\n }\n\n this.commandHandle(input);\n};\n\nREPLConsole.prototype.onNavigateHistory
|
3955
|
+
= function(offset) {\n var command = this.commandStorage.navigate(offset)
|
3956
|
+
|| \"\";\n this.setInput(command);\n};\n\n/**\n * Handle control keys like
|
3957
|
+
up, down, left, right.\n */\nREPLConsole.prototype.onKeyDown = function(ev)
|
3958
|
+
{\n switch (ev.keyCode) {\n case 13:\n // Enter key\n this.onEnterKey();\n
|
3959
|
+
\ ev.preventDefault();\n break;\n case 80:\n // Ctrl-P\n
|
3960
|
+
\ if (! ev.ctrlKey) break;\n case 38:\n // Up arrow\n this.onNavigateHistory(-1);\n
|
3961
|
+
\ ev.preventDefault();\n break;\n case 78:\n // Ctrl-N\n
|
3962
|
+
\ if (! ev.ctrlKey) break;\n case 40:\n // Down arrow\n this.onNavigateHistory(1);\n
|
3963
|
+
\ ev.preventDefault();\n break;\n case 37:\n // Left arrow\n
|
3964
|
+
\ var caretPos = this._caretPos > 0 ? this._caretPos - 1 : this._caretPos;\n
|
3965
|
+
\ this.setInput(this._input, caretPos);\n ev.preventDefault();\n
|
3966
|
+
\ break;\n case 39:\n // Right arrow\n var length = this._input.length;\n
|
3967
|
+
\ var caretPos = this._caretPos < length ? this._caretPos + 1 : this._caretPos;\n
|
3968
|
+
\ this.setInput(this._input, caretPos);\n ev.preventDefault();\n
|
3969
|
+
\ break;\n case 8:\n // Delete\n this.deleteAtCurrent();\n
|
3970
|
+
\ ev.preventDefault();\n break;\n default:\n break;\n }\n\n
|
3971
|
+
\ if (ev.ctrlKey || ev.metaKey) {\n // Set focus to our clipboard in case
|
3972
|
+
they hit the \"v\" key\n this.clipboard.focus();\n if (ev.keyCode ==
|
3973
|
+
86) {\n // Pasting to clipboard doesn't happen immediately,\n //
|
3974
|
+
so we have to wait for a while to get the pasted text.\n var _this =
|
3975
|
+
this;\n setTimeout(function() {\n _this.addToInput(_this.clipboard.value);\n
|
3976
|
+
\ _this.clipboard.value = \"\";\n _this.clipboard.blur();\n },
|
3977
|
+
10);\n }\n }\n\n ev.stopPropagation();\n};\n\n/**\n * Handle input key
|
3978
|
+
press.\n */\nREPLConsole.prototype.onKeyPress = function(ev) {\n // Only
|
3979
|
+
write to the console if it's a single key press.\n if (ev.ctrlKey || ev.metaKey)
|
3980
|
+
{ return; }\n var keyCode = ev.keyCode || ev.which;\n this.insertAtCurrent(String.fromCharCode(keyCode));\n
|
3981
|
+
\ ev.stopPropagation();\n ev.preventDefault();\n};\n\n/**\n * Delete a character
|
3982
|
+
at the current position.\n */\nREPLConsole.prototype.deleteAtCurrent = function()
|
3983
|
+
{\n if (this._caretPos > 0) {\n var caretPos = this._caretPos - 1;\n var
|
3984
|
+
before = this._input.substring(0, caretPos);\n var after = this._input.substring(this._caretPos,
|
3985
|
+
this._input.length);\n this.setInput(before + after, caretPos);\n }\n};\n\n/**\n
|
3986
|
+
* Insert a character at the current position.\n */\nREPLConsole.prototype.insertAtCurrent
|
3987
|
+
= function(char) {\n var before = this._input.substring(0, this._caretPos);\n
|
3988
|
+
\ var after = this._input.substring(this._caretPos, this._input.length);\n
|
3989
|
+
\ this.setInput(before + char + after, this._caretPos + 1);\n};\n\nREPLConsole.prototype.scrollToBottom
|
3990
|
+
= function() {\n this.inner.scrollTop = this.inner.scrollHeight;\n};\n\nwindow.REPLConsole
|
3991
|
+
= REPLConsole;\n\n}).call(this);\n</script>\n\n<script type=\"text/javascript\">\n(function()
|
3992
|
+
{\n var consoleDiv = document.getElementById('console');\nvar replConsole
|
3993
|
+
= new REPLConsole({\n promptLabel: consoleDiv.dataset.initialPrompt,\n commandHandle:
|
3994
|
+
function(line) {\n var _this = this;\n var xhr = new XMLHttpRequest();\n
|
3995
|
+
\ var url = consoleDiv.dataset.remotePath;\n var params = \"input=\"
|
3996
|
+
+ encodeURIComponent(line);\n\n xhr.open(\"PUT\", url, true);\n xhr.setRequestHeader(\"Content-Type\",
|
3997
|
+
\"application/x-www-form-urlencoded\");\n xhr.setRequestHeader(\"X-Requested-With\",
|
3998
|
+
\"XMLHttpRequest\");\n xhr.send(params);\n\n xhr.onreadystatechange
|
3999
|
+
= function() {\n if (xhr.readyState === 4) {\n var response =
|
4000
|
+
JSON.parse(xhr.responseText);\n _this.writeOutput(response.output);\n
|
4001
|
+
\ }\n }\n }\n});\n\nreplConsole.install(consoleDiv);\n\n}).call(this);\n</script>\n\n\n
|
4002
|
+
\ <script type=\"text/javascript\">\n(function() {\n // Try intercept traces
|
4003
|
+
links in Rails 4.2.\nvar traceFrames = document.getElementsByClassName('trace-frames');\nvar
|
4004
|
+
selectedFrame, currentSource = document.getElementById('frame-source-0');\n\n//
|
4005
|
+
Add click listeners for all stack frames\nfor (var i = 0; i < traceFrames.length;
|
4006
|
+
i++) {\n traceFrames[i].addEventListener('click', function(e) {\n e.preventDefault();\n
|
4007
|
+
\ var target = e.target;\n var frameId = target.dataset.frameId;\n\n
|
4008
|
+
\ // Change the binding of the console.\n changeBinding(frameId, function()
|
4009
|
+
{\n if (selectedFrame) {\n selectedFrame.className = selectedFrame.className.replace(\"selected\",
|
4010
|
+
\"\");\n }\n\n target.className += \" selected\";\n selectedFrame
|
4011
|
+
= target;\n });\n\n // Change the extracted source code\n changeSourceExtract(frameId);\n
|
4012
|
+
\ });\n}\n\nfunction changeBinding(frameId, callback) {\n var consoleEl =
|
4013
|
+
document.getElementById('console');\n if (! consoleEl) { return; }\n var
|
4014
|
+
url = consoleEl.dataset.remotePath + \"/trace\";\n var params = \"frame_id=\"
|
4015
|
+
+ encodeURIComponent(frameId);\n var xhr = new XMLHttpRequest();\n xhr.open(\"POST\",
|
4016
|
+
url, true);\n xhr.setRequestHeader(\"Content-type\", \"application/x-www-form-urlencoded\");\n
|
4017
|
+
\ xhr.setRequestHeader(\"X-Requested-With\", \"XMLHttpRequest\");\n xhr.send(params);\n
|
4018
|
+
\ xhr.onreadystatechange = function() {\n if (xhr.readyState === 4) {\n
|
4019
|
+
\ callback();\n }\n }\n}\n\nfunction changeSourceExtract(frameId)
|
4020
|
+
{\n var el = document.getElementById('frame-source-' + frameId);\n if (currentSource
|
4021
|
+
&& el) {\n currentSource.className += \" hidden\";\n el.className =
|
4022
|
+
el.className.replace(\" hidden\", \"\");\n currentSource = el;\n }\n}\n\n//
|
4023
|
+
Push the error page body upwards the size of the console.\n//\n// While, I
|
4024
|
+
wouldn't like to do that on every custom page (so I don't screw\n// user's
|
4025
|
+
layouts), I think a lot of developers want to see all of the content\n// on
|
4026
|
+
the default Rails error page.\n//\n// Since it's quite special as is now,
|
4027
|
+
being a bit more special in the name of\n// better user experience, won't
|
4028
|
+
hurt.\ndocument.addEventListener('DOMContentLoaded', function() {\n var consoleElement
|
4029
|
+
= document.getElementById('console');\n var resizerElement = document.getElementById('resizer')\n
|
4030
|
+
\ var containerElement = document.getElementById('container');\n\n function
|
4031
|
+
setContainerElementBottomMargin(pixels) {\n containerElement.style.marginBottom
|
4032
|
+
= pixels + 'px';\n }\n\n var currentConsoleElementHeight = consoleElement.offsetHeight;\n
|
4033
|
+
\ setContainerElementBottomMargin(currentConsoleElementHeight);\n\n resizerElement.addEventListener('mousedown',
|
4034
|
+
function(event) {\n function recordConsoleElementHeight(event) {\n resizerElement.removeEventListener('mouseup',
|
4035
|
+
recordConsoleElementHeight);\n\n var currentConsoleElementHeight = consoleElement.offsetHeight;\n
|
4036
|
+
\ setContainerElementBottomMargin(currentConsoleElementHeight);\n }\n\n
|
4037
|
+
\ resizerElement.addEventListener('mouseup', recordConsoleElementHeight);\n
|
4038
|
+
\ });\n});\n\n}).call(this);\n</script>\n\n"
|
4039
|
+
http_version:
|
4040
|
+
recorded_at: Tue, 05 May 2015 19:18:19 GMT
|
4041
|
+
- request:
|
4042
|
+
method: delete
|
4043
|
+
uri: http://localhost:3000/annotations/875190ee-1fa4-4298-916b-147d1cbce91f
|
4044
|
+
body:
|
4045
|
+
encoding: US-ASCII
|
4046
|
+
string: ''
|
4047
|
+
headers:
|
4048
|
+
Accept:
|
4049
|
+
- "*/*; q=0.5, application/xml"
|
4050
|
+
Accept-Encoding:
|
4051
|
+
- gzip, deflate
|
4052
|
+
User-Agent:
|
4053
|
+
- Ruby
|
4054
|
+
response:
|
4055
|
+
status:
|
4056
|
+
code: 204
|
4057
|
+
message: 'No Content '
|
4058
|
+
headers:
|
4059
|
+
X-Frame-Options:
|
4060
|
+
- SAMEORIGIN
|
4061
|
+
X-Xss-Protection:
|
4062
|
+
- 1; mode=block
|
4063
|
+
X-Content-Type-Options:
|
4064
|
+
- nosniff
|
4065
|
+
Location:
|
4066
|
+
- http://localhost:3000/annotations
|
4067
|
+
Cache-Control:
|
4068
|
+
- no-cache
|
4069
|
+
X-Request-Id:
|
4070
|
+
- a6725083-cc4b-4d8e-a011-ac01436273e8
|
4071
|
+
X-Runtime:
|
4072
|
+
- '0.136989'
|
4073
|
+
Server:
|
4074
|
+
- WEBrick/1.3.1 (Ruby/2.1.5/2014-11-13)
|
4075
|
+
Date:
|
4076
|
+
- Tue, 05 May 2015 19:18:19 GMT
|
4077
|
+
Connection:
|
4078
|
+
- Keep-Alive
|
4079
|
+
Set-Cookie:
|
4080
|
+
- _internal_session=cy92dGdWT2UzSmtoV1lZemJ1VklJQlpvOWI3bkdTck04QVNET1RwQlFFNnU0Y2Y1ZWRwcHRIdjhrd1NUNTBWbTh6NzdVU1BxSnhnZi9Sai94Q1dnV1h5eXU5VlMvcDZBbkFTUHFJNUNXRmNBUmQvQ0NBaTRGR0hQM1ZUK0UzT3VCR0dNdkpQd25QMzBhb0NmWGxWbElsdXovcUVaM0JJSUlSa1lLa0JEem5lQlpPbEhFMW5lMkM1RFJUekVhOHpkLS1YaGRzYy9tN2ZUSXJ1bWN5WGlHdDlBPT0%3D--abde334931a246b9e7e397bce62e25dead791ea5;
|
4081
|
+
path=/; HttpOnly
|
4082
|
+
- request_method=DELETE; path=/
|
4083
|
+
body:
|
4084
|
+
encoding: UTF-8
|
4085
|
+
string: ''
|
4086
|
+
http_version:
|
4087
|
+
recorded_at: Tue, 05 May 2015 19:18:19 GMT
|
4088
|
+
recorded_with: VCR 2.9.3
|