ttl2html 1.2.0 → 1.3.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: b9d57dc99fea0827d317a9dc3597cae9c69d1ac38dbcd66000327f1b913dea03
4
- data.tar.gz: d30441245cd56e6322fe3ab0b27351a83900b6c6826b3c5a6d611bffa8245d3e
3
+ metadata.gz: 6d6db7238da3700fba83d389bdab577f9bacc2c5da65f993612731716ac4899a
4
+ data.tar.gz: 1804e3b40f344e00618699202d331e03e2e5324519626df62389fc739925fe82
5
5
  SHA512:
6
- metadata.gz: 6c5068b43cc54072f3958f46b5192c5fe118d5942c0b53d4f2fc35f8e35560a6768a2905d1cd946efc8462faa51b2d2ea4d844f8f73f982e18fb73ea5a812ee5
7
- data.tar.gz: 6dc8f656583fc5d8a96baab454b1ea47e446e5694c55f457b3e236e91945595d8b2838d7a7b628d918d7a9c85bb138e081e8919453edce96228572a93dd617eb
6
+ metadata.gz: 7bbcc86b1acc04ad04c8a5f98b11fe020366630b7fc3ad99067e7de19853afd3311e7534fe80facc150490a784d2e96600b20e43e66f6da7aa1380a1fe8c2163
7
+ data.tar.gz: c93964d3ef71fa6e300e8634ae49a3dd5f083f737ac3d0ae3224c9493b5d7bdb8846f6a95b1803110eab1b16971b951a38c802522c0a1099f30c16d11910632f
@@ -156,16 +156,23 @@ module TTL2HTML
156
156
  dest_uri
157
157
  end
158
158
  end
159
+ def shorten_title(title, length = 140)
160
+ if title.length > length
161
+ title[0..length] + "..."
162
+ else
163
+ title
164
+ end
165
+ end
159
166
  def get_title(data, default_title = "no title")
160
167
  if @param[:title_property_perclass] and data["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"]
161
168
  @param[:title_property_perclass].each do |klass, property|
162
169
  if data["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"].include?(klass) and data[property]
163
- return get_language_literal(data[property])
170
+ return shorten_title(get_language_literal(data[property]))
164
171
  end
165
172
  end
166
173
  end
167
174
  if @param[:title_property] and data[@param[:title_property]]
168
- return get_language_literal(data[@param[:title_property]])
175
+ return shorten_title(get_language_literal(data[@param[:title_property]]))
169
176
  end
170
177
  %w(
171
178
  http://www.w3.org/2000/01/rdf-schema#label
@@ -174,7 +181,7 @@ module TTL2HTML
174
181
  http://schema.org/name
175
182
  http://www.w3.org/2004/02/skos/core#prefLabel
176
183
  ).each do |property|
177
- return get_language_literal(data[property]) if data[property]
184
+ return shorten_title(get_language_literal(data[property])) if data[property]
178
185
  end
179
186
  default_title
180
187
  end
@@ -212,8 +219,9 @@ module TTL2HTML
212
219
  object
213
220
  end
214
221
  end
215
- def format_triples(triples)
222
+ def format_triples(triples, type = :default)
216
223
  param_local = @param.dup.merge(data: triples)
224
+ param_local[:type] = type
217
225
  if @param[:labels_with_class] and triples["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"]
218
226
  @param[:labels_with_class].reverse_each do |k, v|
219
227
  triples["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"].each do |entity_class|
@@ -229,4 +237,4 @@ module TTL2HTML
229
237
  to_html_raw("triples.html.erb", param_local)
230
238
  end
231
239
  end
232
- end
240
+ end
@@ -1 +1 @@
1
- TTL2HTML::VERSION = "1.2.0"
1
+ TTL2HTML::VERSION = "1.3.0"
data/lib/ttl2html.rb CHANGED
@@ -136,10 +136,14 @@ module TTL2HTML
136
136
  template = Template.new("default.html.erb", @config)
137
137
  param = @config.dup
138
138
  param[:uri] = uri
139
+ param[:turtle_uri] = uri_mapping_to_path(uri, ".ttl")
139
140
  param[:data] = v
140
141
  param[:data_inverse] = @data_inverse[uri]
141
142
  param[:data_global] = @data
142
143
  param[:title] = template.get_title(v)
144
+ if param[:breadcrumbs]
145
+ param[:breadcrumbs_items] = build_breadcrumbs(uri, template)
146
+ end
143
147
  file = uri_mapping_to_path(uri, ".html")
144
148
  if @config[:output_dir]
145
149
  Dir.mkdir @config[:output_dir] if not File.exist? @config[:output_dir]
@@ -176,16 +180,22 @@ module TTL2HTML
176
180
  param[:data_global] = @data
177
181
  param[:content] = {}
178
182
  shapes.subjects.each do |subject|
179
- label = nil
183
+ label = comment = nil
180
184
  target_class = @data[subject.to_s]["http://www.w3.org/ns/shacl#targetClass"]
181
185
  if target_class
182
- label = template.get_title(@data[target_class.first], nil) if @data[target_class.first]
183
- label = template.format_property(target_class.first) if label.nil?
186
+ target_class = target_class.first
187
+ if @data[target_class]
188
+ label = template.get_title(@data[target_class], nil)
189
+ comment = @data[target_class]["http://www.w3.org/2000/01/rdf-schema#comment"]&.first
190
+ else
191
+ label = template.format_property(target_class)
192
+ end
184
193
  else
185
194
  label = template.get_title(@data[subject.to_s])
186
195
  end
187
196
  param[:content][subject] = {
188
197
  label: label,
198
+ comment: comment,
189
199
  html: template.expand_shape(@data, subject.to_s, @prefix),
190
200
  }
191
201
  end
@@ -193,6 +203,36 @@ module TTL2HTML
193
203
  end
194
204
  end
195
205
 
206
+ def build_breadcrumbs(uri, template, depth = 0)
207
+ results = []
208
+ data = @data[uri]
209
+ if @config[:breadcrumbs]
210
+ if depth == 0
211
+ first_label = template.get_title(data)
212
+ first_label = data[@config[:breadcrumbs].first["label"]].first if @config[:breadcrumbs].first["label"] and data[@config[:breadcrumbs].first["label"]]
213
+ results << { label: first_label }
214
+ end
215
+ @config[:breadcrumbs].each do |e|
216
+ data_target = data
217
+ data_target = @data_inverse[uri] if e["inverse"]
218
+ if data_target and data_target[e["property"]]
219
+ data_target[e["property"]].each do |parent|
220
+ data_parent = @data[parent]
221
+ label = template.get_title(data_parent)
222
+ label = data_parent[e["label"]].first if e["label"] and data_parent[e["label"]]
223
+ results << {
224
+ uri: parent,
225
+ label: label,
226
+ }
227
+ results += build_breadcrumbs(parent, template, depth + 1)
228
+ end
229
+ return results
230
+ end
231
+ end
232
+ end
233
+ results
234
+ end
235
+
196
236
  def shapes2labels(shapes)
197
237
  labels = {}
198
238
  shapes.subjects.each do |shape|
@@ -292,4 +332,4 @@ module TTL2HTML
292
332
  file
293
333
  end
294
334
  end
295
- end
335
+ end
data/locales/en.yml CHANGED
@@ -23,4 +23,6 @@ en:
23
23
  optional: "Optional"
24
24
  non-repeatable: "Non repeatable"
25
25
  blank-node-structure: "The structural contents of a blank node are as follows:"
26
- blank-node-or-structure: "The structural contents of a blank node are either of the followings:"
26
+ blank-node-or-structure: "The structural contents of a blank node are either of the followings:"
27
+ triples:
28
+ inverse_refered: "Referred to as '%{property}' from:"
data/locales/ja.yml CHANGED
@@ -22,4 +22,6 @@ ja:
22
22
  optional: 省略可能
23
23
  non-repeatable: 繰り返し無し
24
24
  blank-node-structure: ブランクノードの内容は以下の内容からなる構造を持ちます。
25
- blank-node-or-structure: ブランクノードの内容は以下のいずれかの内容からなる構造を持ちます。
25
+ blank-node-or-structure: ブランクノードの内容は以下のいずれかの内容からなる構造を持ちます。
26
+ triples:
27
+ inverse_refered: "'%{property}'としての参照元:"
@@ -3,18 +3,15 @@
3
3
  <h1><%=h t("about.title", title: param[:site_title]) %></h1>
4
4
  </div>
5
5
  </div>
6
+ <nav aria-label="breadcrumb">
7
+ <ol class="breadcrumb">
8
+ <li class="breadcrumb-item"><a href="./"><i class="bi bi-house-door-fill"></i> Home</a></li>
9
+ <li class="breadcrumb-item active" aria-current="page"><%=h t("about.title", title: param[:site_title]) %></li>
10
+ </ol>
11
+ </nav>
6
12
  <div class="container">
7
13
  <div class="row">
8
- <div class="col-md-12">
9
- <ol class="breadcrumb">
10
- <li><a href="./"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> Home</a></li>
11
- <li class="active"><%=h t("about.title", title: param[:site_title]) %></li>
12
- </ol>
13
- </div>
14
- </div>
15
-
16
- <div class="row">
17
- <div class="col-md-10">
14
+ <div class="col-md">
18
15
  <%- param[:content].keys.sort.each do |shape| -%>
19
16
  <h3><%=h param[:content][shape][:label] %></h3>
20
17
  <p><%= param[:content][shape][:comment] %></p>
@@ -23,3 +20,4 @@
23
20
  <%- end -%>
24
21
  </div>
25
22
  </div>
23
+ </div>
@@ -1,22 +1,42 @@
1
1
  <div class="jumbotron">
2
2
  <div class="container">
3
3
  <h1><%=h param[:title] %></h1>
4
- <p><small><span class="glyphicon glyphicon-link"></span> <a href="<%=h param[:uri] %>"><%=h param[:uri] %></a></small></p>
4
+ <p><i class="bi bi-link-45deg"></i> <a href="<%=h param[:uri] %>"><%=h param[:uri] %></a></p>
5
5
  </div>
6
6
  </div>
7
7
  <div class="container">
8
+ <%- if param[:breadcrumbs] -%>
9
+ <div class="row">
10
+ <div class="col-md-12">
11
+ <nav aria-label="breadcrumb">
12
+ <ol class="breadcrumb">
13
+ <li class="breadcrumb-item"><a href="./"><i class="bi bi-house-door-fill"></i> Home</a></li>
14
+ <%- param[:breadcrumbs_items].reverse.each_with_index do |e, i| -%>
15
+ <li class="breadcrumb-item<%= ' active' if i == param[:breadcrumbs_items].size-1 %>" aria-current="page">
16
+ <%- if e[:uri] -%>
17
+ <a href="<%=h e[:uri] %>"><%=h e[:label] %></a>
18
+ <%- else -%>
19
+ <%=h e[:label] %>
20
+ <%- end -%>
21
+ </li>
22
+ <%- end -%>
23
+ </ol>
24
+ </nav>
25
+ </div>
26
+ </div>
27
+ <%- end -%>
8
28
  <div class="row">
9
29
  <div class="col-md-12">
10
30
  <h2><%=h t("default.details") %></h2>
11
31
  <%= format_triples(param[:data]) %>
12
32
  </div>
13
33
  </div>
14
- <% if param[:data_inverse] %>
34
+ <%- if param[:data_inverse] -%>
15
35
  <div class="row inverse">
16
36
  <div class="col-md-12">
17
37
  <h2><%=h t("default.inverse_data") %></h2>
18
- <%= format_triples(param[:data_inverse]) %>
38
+ <%= format_triples(param[:data_inverse], :inverse) %>
19
39
  </div>
20
40
  </div>
21
- <% end %>
22
- </div>
41
+ <%- end -%>
42
+ </div>
@@ -1,7 +1,7 @@
1
1
  <div class="jumbotron">
2
2
  <div class="container">
3
3
  <h1><%=h param[:site_title] %></h1>
4
- <p><small><span class="glyphicon glyphicon-link"></span> <a href="<%=h param[:base_uri] %>"><%=h param[:base_uri] %></a></small></p>
4
+ <p><i class="bi bi-link-45deg"></i> <a href="<%=h param[:base_uri] %>"><%=h param[:base_uri] %></a></p>
5
5
  </div>
6
6
  </div>
7
7
  <div class="container">
@@ -4,17 +4,25 @@
4
4
  <meta charset="utf-8">
5
5
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
6
6
  <!-- The above 3 meta tags *must* come first in the head; any other head content must come *after* these tags -->
7
- <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/css/bootstrap.min.css" integrity="sha384-ggOyR0iXCbMQv3Xipma34MD+dH/1fQ784/j6cY/iJTQUOhcWr7x9JvoRxT2MZw1T" crossorigin="anonymous">
7
+ <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
8
+ <link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.1/font/bootstrap-icons.css">
8
9
  <title><% if param[:title] %><%=h param[:title] %><% end %><% if param[:site_title] %> - <%=h param[:site_title] %><% end %></title>
9
10
  <meta name="twitter:card" content="summary">
10
11
  <meta name="twitter:title" content="<% if param[:title] %><%=h param[:title] %><% end %><% if param[:site_title] %> - <%=h param[:site_title] %><% end %>">
11
12
  </head>
12
13
  <body>
13
- <nav class="navbar navbar-inverse">
14
- <div class="container">
15
- <ul class="nav navbar-nav navbar-right">
16
- <li<%= ' class="active"' if param[:active] == :home %>><a class="navbar-brand" href="/">Home</a></li>
17
- <li<%= ' class="active"' if param[:active] == :about %>><a href="/about">About</a></li>
14
+ <nav class="navbar navbar-expand-lg navbar-dark bg-dark">
15
+ <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
16
+ <span class="navbar-toggler-icon"></span>
17
+ </button>
18
+ <div class="collapse navbar-collapse" id="navbarSupportedContent">
19
+ <ul class="navbar-nav mr-auto">
20
+ <li class="nav-item<%= ' class="active"' if param[:active] == :home %>">
21
+ <a class="navbar-brand" href="/">Home</a>
22
+ </li>
23
+ <li class="nav-item<%= ' class="active"' if param[:active] == :about %>">
24
+ <a class="navbar-brand" href="/about">About</a>
25
+ </li>
18
26
  </ul>
19
27
  </div>
20
28
  </nav>
@@ -22,13 +30,13 @@
22
30
  <hr>
23
31
  <footer>
24
32
  <%- if param[:uri] -%>
25
- <p class="pull-right"><a href="<%=h param[:uri] %>.ttl"><img src="https://www.w3.org/RDF/icons/rdf_flyer.24" alt="<%=h t("layout.rdf-data") %>"></a></p>
33
+ <p class="text-right"><a href="<%=h relative_path(param[:turtle_uri]) %>"><img src="https://www.w3.org/RDF/icons/rdf_flyer.24" alt="<%=h t("layout.rdf-data") %>"></a></p>
26
34
  <%- end -%>
27
35
  </footer>
28
36
 
29
37
  <!-- jQuery first, then Popper.js, then Bootstrap JS -->
30
- <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
31
- <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.7/umd/popper.min.js" integrity="sha384-UO2eT0CpHqdSJQ6hJty5KVphtPhzWj9WO1clHTMGa3JDZwrnQq4sF86dIHNDz0W1" crossorigin="anonymous"></script>
32
- <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.3.1/js/bootstrap.min.js" integrity="sha384-JjSmVgyd0p3pXB1rRibZUAYoIIy6OrQ6VrjIEaFf/nJGzIxFDsf4x0xIM+B07jRM" crossorigin="anonymous"></script>
38
+ <script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
39
+ <script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
40
+ <script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>
33
41
  </body>
34
42
  </html>
@@ -1,16 +1,20 @@
1
- <dl>
2
- <% param[:data].each do |k, v| %>
3
- <dt><%=h format_property(k, param[:labels]) %></dt>
4
- <% if v.respond_to? :has_key? %>
5
- <% v.each do |lang, v2| %>
6
- <dd lang="<%=h lang %>"><%= format_object v2, param[:data] %></dd>
1
+ <dl class="row">
2
+ <%- param[:data].each do |k, v| -%>
3
+ <%- if param[:type] == :inverse -%>
4
+ <dt class="col-sm-3"><%=h t('triples.inverse_refered', property: format_property(k, param[:labels])) %></dt>
5
+ <%- else -%>
6
+ <dt class="col-sm-3"><%=h format_property(k, param[:labels]) %></dt>
7
+ <%- end -%>
8
+ <%- if v.respond_to? :has_key? -%>
9
+ <% v.each_with_index do |v2, idx| %>
10
+ <dd class="col-sm-9<%= ' offset-sm-3' if idx > 0 %>" lang="<%=h v2[0] %>"><%= format_object v2[1], param[:data] %></dd>
7
11
  <% end %>
8
- <% elsif v.size > 1 %>
9
- <% v.each do |v2| %>
10
- <dd><%= format_object v2, param[:data] %></dd>
11
- <% end %>
12
- <% else %>
13
- <dd><%= format_object v.first, param[:data] %></dd>
14
- <% end %>
12
+ <%- elsif v.size > 1 -%>
13
+ <%- v.each_with_index do |v2, idx| -%>
14
+ <dd class="col-sm-9<%= ' offset-sm-3' if idx > 0 %>"><%= format_object v2, param[:data] %></dd>
15
+ <%- end -%>
16
+ <%- else -%>
17
+ <dd class="col-sm-9"><%= format_object v.first, param[:data] %></dd>
18
+ <%- end -%>
15
19
  <%- end -%>
16
- </dl>
20
+ </dl>
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ttl2html
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masao Takaku
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-11-27 00:00:00.000000000 Z
11
+ date: 2021-12-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri