publish_my_data 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/README.md +2 -3
- data/app/controllers/publish_my_data/application_controller.rb +21 -32
- data/app/controllers/publish_my_data/datasets_controller.rb +7 -19
- data/app/controllers/publish_my_data/resources_controller.rb +18 -24
- data/app/controllers/publish_my_data/sparql_controller.rb +6 -3
- data/app/controllers/publish_my_data/themes_controller.rb +28 -0
- data/app/helpers/publish_my_data/resources_helper.rb +2 -2
- data/app/models/publish_my_data/concept.rb +14 -0
- data/app/models/publish_my_data/concept_scheme.rb +16 -0
- data/app/models/publish_my_data/dataset.rb +48 -13
- data/app/models/publish_my_data/ontology.rb +35 -0
- data/app/models/publish_my_data/ontology_class.rb +11 -0
- data/app/models/publish_my_data/property.rb +11 -0
- data/app/models/publish_my_data/rdf_type.rb +1 -0
- data/app/models/publish_my_data/resource.rb +80 -6
- data/app/models/publish_my_data/theme.rb +34 -0
- data/app/views/layouts/publish_my_data/application.html.erb +0 -1
- data/app/views/layouts/publish_my_data/error.html.erb +12 -2
- data/app/views/publish_my_data/concept_schemes/_concepts.html.erb +3 -0
- data/app/views/publish_my_data/concept_schemes/show.html.erb +9 -0
- data/app/views/publish_my_data/concepts/show.html.erb +3 -0
- data/app/views/publish_my_data/datasets/index.html.erb +4 -4
- data/app/views/publish_my_data/datasets/show.html.erb +1 -1
- data/app/views/publish_my_data/errors/bad_request.html.erb +1 -0
- data/app/views/publish_my_data/errors/not_found.html.erb +1 -1
- data/app/views/publish_my_data/errors/timeout.html.erb +1 -0
- data/app/views/publish_my_data/errors/uncaught.html.erb +6 -0
- data/app/views/publish_my_data/ontologies/_classes.html.erb +3 -0
- data/app/views/publish_my_data/ontologies/_properties.html.erb +3 -0
- data/app/views/publish_my_data/ontologies/show.html.erb +17 -0
- data/app/views/publish_my_data/properties/show.html.erb +3 -0
- data/app/views/publish_my_data/resources/_predicates_table.html.erb +12 -4
- data/app/views/publish_my_data/resources/_resource_formats.html.erb +5 -5
- data/app/views/publish_my_data/resources/_uri_and_label.html.erb +2 -2
- data/app/views/publish_my_data/resources/index.html.erb +4 -4
- data/app/views/publish_my_data/resources/show.html.erb +3 -3
- data/app/views/publish_my_data/sparql/_pagination.html.erb +2 -2
- data/app/views/publish_my_data/themes/index.html.erb +12 -0
- data/app/views/publish_my_data/themes/show.html.erb +15 -0
- data/config/initializers/{tripod.rb → 00_tripod.rb} +0 -0
- data/config/initializers/10_vocabularies.rb +6 -0
- data/config/initializers/zz_factories.rb +7 -0
- data/config/routes.rb +4 -5
- data/lib/publish_my_data/defined_by_ontology.rb +10 -0
- data/lib/publish_my_data/paginator.rb +63 -0
- data/lib/publish_my_data/render_params/concept_render_params.rb +14 -0
- data/lib/publish_my_data/render_params/concept_scheme_render_params.rb +14 -0
- data/lib/publish_my_data/render_params/ontology_class_render_params.rb +14 -0
- data/lib/publish_my_data/render_params/ontology_render_params.rb +14 -0
- data/lib/publish_my_data/render_params/property_render_params.rb +14 -0
- data/lib/publish_my_data/render_params/resource_render_params.rb +13 -0
- data/lib/publish_my_data/render_params/theme_render_params.rb +23 -0
- data/lib/publish_my_data/render_params.rb +7 -0
- data/lib/publish_my_data/resource_module.rb +8 -0
- data/lib/publish_my_data/version.rb +1 -1
- data/lib/publish_my_data.rb +6 -1
- data/spec/controllers/publish_my_data/datasets_controller_spec.rb +0 -10
- data/spec/controllers/publish_my_data/resources_controller_spec.rb +78 -38
- data/spec/controllers/publish_my_data/sparql_controller_spec.rb +4 -4
- data/spec/controllers/publish_my_data/themes_controller_spec.rb +110 -0
- data/spec/dummy/log/test.log +80255 -0
- data/spec/factories/00_theme_factories.rb +11 -0
- data/spec/factories/concept_scheme_factories.rb +48 -0
- data/spec/factories/dataset_factories.rb +10 -1
- data/spec/factories/ontology_factories.rb +55 -0
- data/spec/factories/property_factories.rb +2 -2
- data/spec/factories/resource_factories.rb +5 -5
- metadata +61 -16
- data/app/assets/javascripts/publish_my_data/resources.js +0 -2
- data/app/assets/stylesheets/publish_my_data/resources.css +0 -4
- data/app/views/publish_my_data/datasets/themes.html.erb +0 -3
- data/config/initializers/vocabularies.rb +0 -1
@@ -2,18 +2,92 @@ module PublishMyData
|
|
2
2
|
class Resource
|
3
3
|
|
4
4
|
include Tripod::Resource
|
5
|
+
include PublishMyData::ResourceModule #some common methods for resources.
|
5
6
|
|
6
7
|
field :label, RDF::RDFS.label
|
8
|
+
field :rdf_type, RDF.type, :multivalued => true
|
7
9
|
|
8
|
-
|
9
|
-
|
10
|
-
uri.starts_with?("http://" + PublishMyData.local_domain)
|
10
|
+
def self.uri_from_host_and_doc_path(host, doc_path, format="")
|
11
|
+
'http://' + host + '/id/' + doc_path.split('?')[0].sub(/\.#{format}$/,'')
|
11
12
|
end
|
12
13
|
|
13
|
-
|
14
|
+
def theme
|
15
|
+
dataset.theme_obj if dataset
|
16
|
+
end
|
17
|
+
|
18
|
+
def dataset
|
19
|
+
slug = Dataset.slug_from_data_graph_uri(self.graph_uri)
|
20
|
+
Dataset.find_by_slug(slug) rescue nil
|
21
|
+
end
|
22
|
+
|
23
|
+
# this calls render_params on the right type of RenderParams object.
|
24
|
+
# (strategy pattern-ish).
|
25
|
+
def render_params(request)
|
26
|
+
render_params_class.new(self).render_params(pagination_params: PaginationParams.from_request(request))
|
27
|
+
end
|
28
|
+
|
29
|
+
# Don't worry that these as_xxx methods look like they'll do an extra lookup.
|
30
|
+
# In production, it'll be cached from a moment ago anyway!
|
31
|
+
|
32
|
+
def as_ontology
|
33
|
+
Ontology.find(self.uri)
|
34
|
+
end
|
35
|
+
|
36
|
+
def as_concept_scheme
|
37
|
+
ConceptScheme.find(self.uri)
|
38
|
+
end
|
39
|
+
|
40
|
+
def as_concept
|
41
|
+
Concept.find(self.uri)
|
42
|
+
end
|
43
|
+
|
44
|
+
def as_property
|
45
|
+
Property.find(self.uri)
|
46
|
+
end
|
47
|
+
|
48
|
+
def as_ontology_class
|
49
|
+
OntologyClass.find(self.uri)
|
50
|
+
end
|
51
|
+
|
52
|
+
def is_ontology?
|
53
|
+
read_type_predicate.include?(RDF::OWL.Ontology)
|
54
|
+
end
|
55
|
+
|
56
|
+
def is_class?
|
57
|
+
read_type_predicate.include?(RDF::OWL.Class) || read_type_predicate.include?(RDF::RDFS.Class)
|
58
|
+
end
|
59
|
+
|
60
|
+
def is_property?
|
61
|
+
read_type_predicate.include?(RDF.Property)
|
62
|
+
end
|
63
|
+
|
64
|
+
def is_concept_scheme?
|
65
|
+
read_type_predicate.include?(RDF::SKOS.ConceptScheme)
|
66
|
+
end
|
67
|
+
|
68
|
+
def is_concept?
|
69
|
+
read_type_predicate.include?(RDF::SKOS.Concept)
|
70
|
+
end
|
71
|
+
|
72
|
+
private
|
73
|
+
|
74
|
+
def read_type_predicate
|
75
|
+
read_predicate(RDF.type)
|
76
|
+
end
|
14
77
|
|
15
|
-
|
16
|
-
|
78
|
+
def render_params_class
|
79
|
+
if self.is_ontology?
|
80
|
+
OntologyRenderParams
|
81
|
+
elsif self.is_class?
|
82
|
+
OntologyClassRenderParams
|
83
|
+
elsif self.is_property?
|
84
|
+
PropertyRenderParams
|
85
|
+
elsif self.is_concept_scheme?
|
86
|
+
ConceptSchemeRenderParams
|
87
|
+
elsif self.is_concept?
|
88
|
+
ConceptRenderParams
|
89
|
+
else
|
90
|
+
ResourceRenderParams
|
17
91
|
end
|
18
92
|
end
|
19
93
|
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
module PublishMyData
|
2
|
+
# A theme for datasets
|
3
|
+
class Theme
|
4
|
+
|
5
|
+
include Tripod::Resource
|
6
|
+
include PublishMyData::ResourceModule #some common methods for resources.
|
7
|
+
|
8
|
+
class << self
|
9
|
+
def theme_graph
|
10
|
+
RDF::URI.new("http://#{PublishMyData.local_domain}/def/concept-scheme/themes")
|
11
|
+
end
|
12
|
+
|
13
|
+
def by_slug(slug)
|
14
|
+
Theme.where("?uri <#{RDF::SKOS.notation}> '#{slug}'").first
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
rdf_type RDF::SITE.Theme
|
19
|
+
graph_uri Theme.theme_graph
|
20
|
+
|
21
|
+
field :label, RDF::RDFS.label
|
22
|
+
field :slug, RDF::SKOS.notation
|
23
|
+
field :description, RDF::RDFS.description
|
24
|
+
|
25
|
+
def datasets_criteria
|
26
|
+
Dataset.where("?uri <#{RDF::DCAT.theme}> <#{self.uri.to_s}>")
|
27
|
+
end
|
28
|
+
|
29
|
+
def to_param
|
30
|
+
self.slug
|
31
|
+
end
|
32
|
+
|
33
|
+
end
|
34
|
+
end
|
@@ -1,3 +1,13 @@
|
|
1
|
-
|
1
|
+
<!DOCTYPE html>
|
2
|
+
<html>
|
3
|
+
<head>
|
4
|
+
<title>PublishMyData - Error</title>
|
5
|
+
<%= stylesheet_link_tag "publish_my_data/application", :media => "all" %>
|
6
|
+
<%= javascript_include_tag "publish_my_data/application" %>
|
7
|
+
</head>
|
8
|
+
<body>
|
2
9
|
|
3
|
-
<%= yield %>
|
10
|
+
<%= yield %>
|
11
|
+
|
12
|
+
</body>
|
13
|
+
</html>
|
@@ -0,0 +1,9 @@
|
|
1
|
+
<h1>Concept Scheme: <%= concept_scheme.label || concept_scheme.uri %></h1>
|
2
|
+
|
3
|
+
<h2>Overview</h2>
|
4
|
+
<%= render 'publish_my_data/resources/predicates_table', resource: concept_scheme %>
|
5
|
+
|
6
|
+
<h2>Concepts</h2>
|
7
|
+
<%= render 'publish_my_data/concept_schemes/concepts', concept_scheme: concept_scheme %>
|
8
|
+
|
9
|
+
<%= render 'publish_my_data/resources/resource_formats', :resource => concept_scheme, :resource_descriptor => 'concept scheme' %>
|
@@ -14,7 +14,7 @@
|
|
14
14
|
<br/>
|
15
15
|
|
16
16
|
Get this list as:
|
17
|
-
<%= link_to 'N-triples', :format => 'nt', :page => @page, :per_page => @per_page %>
|
18
|
-
<%= link_to 'Turtle', :format => 'ttl', :page => @page, :per_page => @per_page %>
|
19
|
-
<%= link_to 'RDF/XML', :format => 'rdf',:page => @page, :per_page => @per_page %>
|
20
|
-
<%= link_to 'JSON', :format => 'json', :page => @page, :per_page => @per_page %>
|
17
|
+
<%= link_to 'N-triples', :format => 'nt', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
18
|
+
<%= link_to 'Turtle', :format => 'ttl', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
19
|
+
<%= link_to 'RDF/XML', :format => 'rdf',:page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
20
|
+
<%= link_to 'JSON', :format => 'json', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Bad request</h1>
|
@@ -1 +1 @@
|
|
1
|
-
Not found
|
1
|
+
<h1>Not found</h1>
|
@@ -0,0 +1 @@
|
|
1
|
+
<h1>Timeout</h1>
|
@@ -0,0 +1,17 @@
|
|
1
|
+
<h1>Ontology <%= ontology.label || ontology.uri %></h1>
|
2
|
+
|
3
|
+
<h2>Overview</h2>
|
4
|
+
<%= render 'publish_my_data/resources/predicates_table', resource: ontology %>
|
5
|
+
|
6
|
+
<h2>Classes</h2>
|
7
|
+
<%= render 'publish_my_data/ontologies/classes', :ontology => ontology %>
|
8
|
+
|
9
|
+
<br/>
|
10
|
+
|
11
|
+
<h2>Properties</h2>
|
12
|
+
<%= render 'publish_my_data/ontologies/properties', :ontology => ontology %>
|
13
|
+
|
14
|
+
<br/><br/>
|
15
|
+
|
16
|
+
Get this ontology as:
|
17
|
+
<%= render 'publish_my_data/resources/resource_formats', :resource => ontology, :resource_descriptor => "ontology" %>
|
@@ -1,19 +1,27 @@
|
|
1
1
|
<table>
|
2
2
|
<thead>
|
3
|
+
<% if defined?(show_title) && show_title %>
|
4
|
+
<tr>
|
5
|
+
<td colspan="2">
|
6
|
+
<%= resource.label %><br/>
|
7
|
+
<%= resource.uri %>
|
8
|
+
</td>
|
9
|
+
</tr>
|
10
|
+
<% end %>
|
3
11
|
<tr>
|
4
12
|
<th>Predicate</th>
|
5
13
|
<th>Object</th>
|
6
14
|
</tr>
|
7
15
|
</thead>
|
8
16
|
<tbody>
|
9
|
-
<%
|
17
|
+
<% resource.predicates.each do |pred| %>
|
10
18
|
<tr>
|
11
19
|
<td>
|
12
|
-
<%= resource_uri_or_label(pred) %>
|
20
|
+
<%= resource_uri_or_label(resource, pred) %>
|
13
21
|
</td>
|
14
22
|
<td>
|
15
|
-
<%
|
16
|
-
<%= resource_uri_or_label(obj) %>
|
23
|
+
<% resource.read_predicate(pred).each do |obj| %>
|
24
|
+
<%= resource_uri_or_label(resource, obj) %>
|
17
25
|
<% end %>
|
18
26
|
</td>
|
19
27
|
</tr>
|
@@ -1,11 +1,11 @@
|
|
1
|
-
<% if
|
1
|
+
<% if resource.local? %>
|
2
2
|
<%= link_to "JSON", :format => 'json' %>
|
3
3
|
<%= link_to "RDF/XML", :format => 'rdf' %>
|
4
4
|
<%= link_to "Turtle", :format => 'ttl' %>
|
5
5
|
<%= link_to "N-triples", :format => 'nt' %>
|
6
6
|
<% else %>
|
7
|
-
<%= link_to "JSON", show_resource_path(:uri =>
|
8
|
-
<%= link_to "RDF/XML", show_resource_path(:uri =>
|
9
|
-
<%= link_to "Turtle", show_resource_path(:uri =>
|
10
|
-
<%= link_to "N-triples", show_resource_path(:uri =>
|
7
|
+
<%= link_to "JSON", show_resource_path(:uri => resource.uri, :format => 'json') %>
|
8
|
+
<%= link_to "RDF/XML", show_resource_path(:uri => resource.uri, :format => 'rdf') %>
|
9
|
+
<%= link_to "Turtle", show_resource_path(:uri => resource.uri, :format => 'ttl') %>
|
10
|
+
<%= link_to "N-triples", show_resource_path(:uri => resource.uri, :format => 'nt') %>
|
11
11
|
<% end %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
URI: <%=
|
1
|
+
URI: <%= resource.uri %>
|
2
2
|
<br/>
|
3
|
-
Label: <%=
|
3
|
+
Label: <%= resource.label.present? ? resource.label : "No Label Set" %>
|
@@ -33,7 +33,7 @@
|
|
33
33
|
<br/>
|
34
34
|
|
35
35
|
Get this list as:
|
36
|
-
<%= link_to 'N-triples', :format => 'nt', :page => @page, :per_page => @per_page %>
|
37
|
-
<%= link_to 'Turtle', :format => 'ttl', :page => @page, :per_page => @per_page %>
|
38
|
-
<%= link_to 'RDF/XML', :format => 'rdf',:page => @page, :per_page => @per_page %>
|
39
|
-
<%= link_to 'JSON', :format => 'json', :page => @page, :per_page => @per_page %>
|
36
|
+
<%= link_to 'N-triples', :format => 'nt', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
37
|
+
<%= link_to 'Turtle', :format => 'ttl', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
38
|
+
<%= link_to 'RDF/XML', :format => 'rdf',:page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
39
|
+
<%= link_to 'JSON', :format => 'json', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
@@ -1,3 +1,3 @@
|
|
1
|
-
<%= render 'uri_and_label' %>
|
2
|
-
<%= render 'predicates_table' %>
|
3
|
-
<%= render 'resource_formats' %>
|
1
|
+
<%= render 'uri_and_label', resource: resource %>
|
2
|
+
<%= render 'predicates_table', resource: resource %>
|
3
|
+
<%= render 'resource_formats', resource: resource %>
|
@@ -1,6 +1,6 @@
|
|
1
1
|
<nav class="pagination clearfix">
|
2
2
|
<% #only show prev link if there's a previous page %>
|
3
|
-
<%= link_to("Previous #{@per_page} results".html_safe, params.merge({:page => (@page-1)})) if @page > 1 %>
|
3
|
+
<%= link_to("Previous #{@pagination_params.per_page} results".html_safe, params.merge({:page => (@pagination_params.page-1)})) if @pagination_params.page > 1 %>
|
4
4
|
<% #only show the next page if the results for this page is bigger than the page size %>
|
5
|
-
<%= link_to("Next #{@per_page} results".html_safe, params.merge({:page => (@page+1)}), :style => 'float:right' ) if @more_pages%>
|
5
|
+
<%= link_to("Next #{@pagination_params.per_page} results".html_safe, params.merge({:page => (@pagination_params.page+1)}), :style => 'float:right' ) if @more_pages%>
|
6
6
|
</nav>
|
@@ -0,0 +1,12 @@
|
|
1
|
+
<h1>Themes</h1>
|
2
|
+
|
3
|
+
<% @themes.each do |t| %>
|
4
|
+
<%= link_to (t.label || t.uri), theme_path(t) %> (<%= pluralize( t.datasets_criteria.count, "datasets" )%>)
|
5
|
+
<% end %>
|
6
|
+
|
7
|
+
<br/><br/>
|
8
|
+
Get this list as:
|
9
|
+
<%= link_to 'N-triples', :format => 'nt' %>
|
10
|
+
<%= link_to 'Turtle', :format => 'ttl' %>
|
11
|
+
<%= link_to 'RDF/XML', :format => 'rdf' %>
|
12
|
+
<%= link_to 'JSON', :format => 'json' %>
|
@@ -0,0 +1,15 @@
|
|
1
|
+
<h1>Theme: <%= @theme.label %></h1>
|
2
|
+
|
3
|
+
<p><%= @theme.description %></p>
|
4
|
+
|
5
|
+
Datasets in this theme: <br/>
|
6
|
+
<% @datasets.each do |d| %>
|
7
|
+
<%= link_to d.title, d %> <br/>
|
8
|
+
<% end %>
|
9
|
+
<br/>
|
10
|
+
<%= paginate @datasets %>
|
11
|
+
Get this list of datasets as:
|
12
|
+
<%= link_to 'N-triples', :format => 'nt', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
13
|
+
<%= link_to 'Turtle', :format => 'ttl', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
14
|
+
<%= link_to 'RDF/XML', :format => 'rdf',:page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
15
|
+
<%= link_to 'JSON', :format => 'json', :page => @pagination_params.page, :per_page => @pagination_params.per_page %>
|
File without changes
|
@@ -0,0 +1,6 @@
|
|
1
|
+
module RDF
|
2
|
+
SITE = RDF::Vocabulary.new("http://#{PublishMyData.local_domain}/def/")
|
3
|
+
PMD_DS = RDF::Vocabulary.new("http://#{PublishMyData.local_domain}/def/dataset#")
|
4
|
+
DCAT = RDF::Vocabulary.new("http://www.w3.org/ns/dcat#")
|
5
|
+
VOID = RDF::Vocabulary.new("http://rdfs.org/ns/void#")
|
6
|
+
end
|
data/config/routes.rb
CHANGED
@@ -10,11 +10,10 @@ PublishMyData::Engine.routes.draw do
|
|
10
10
|
match "/resources(.:format)" => "resources#index", :as => 'list_resources' # +filters on thh query string
|
11
11
|
|
12
12
|
# datasets
|
13
|
-
resources :datasets, :only => [:show, :index]
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
end
|
13
|
+
resources :datasets, :only => [:show, :index]
|
14
|
+
|
15
|
+
# themes
|
16
|
+
resources :themes, :only => [:index, :show]
|
18
17
|
|
19
18
|
# URI dereferencing
|
20
19
|
match "/id/*path" => "resources#id"
|