ttl2html 2.1.1 → 2.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6c089f5f11f648a46143d9c172e2e8f7f86addaedbf928225e66d4e8a58ff610
4
- data.tar.gz: 120a0fee14218eb8fa06735ec7255a1f1c447dbd92c2d27dab2a0d414ce2a097
3
+ metadata.gz: 221f8ca33a9e3988ed12acf79e6c028a04e67e7733916611d2795e2c34a64056
4
+ data.tar.gz: 5ac1d7e52e7e65c016ed285d640d5bb03890cfc52048ce91801b949480a34252
5
5
  SHA512:
6
- metadata.gz: 269789d9412d80d3203d181268c5c5f879920813f1f962e8cd35fd3fcb0938d4c711d08e3397a9ba9d5c31b9012e0db8dd24c27c7e1e7f10f3c0f0897059de84
7
- data.tar.gz: 62f1421d40c84d325da7001a17fe828455a8d44567a4acb14ebf5caf481f65ba5e5145503d9429915871db898ff21de1f686e84d2f858cccfa34e46e593b123b
6
+ metadata.gz: bf90d497ed178964e0f950f5c91902061347417e2e911ed965d4d61af00c11d5835d7d0360364c0874c1e70412e9e11a3069ef8dfcf7e5aadffd33bb5301dffe
7
+ data.tar.gz: 5ed644ef6b70846d6a355b7405df15950b5061d28085ab341794edeb3f188393525849c732449dfcec70e866c49a9562d32561f38435fed396358a269be98a7c
@@ -164,27 +164,20 @@ module TTL2HTML
164
164
  end
165
165
  end
166
166
  def get_title(data, default_title = "no title")
167
- return default_title if data.nil?
168
- if @param[:title_property_perclass] and data["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"]
169
- @param[:title_property_perclass].each do |klass, property|
170
- if data["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"].include?(klass) and data[property]
171
- return shorten_title(get_language_literal(data[property]))
172
- end
173
- end
174
- end
175
- if @param[:title_property] and data[@param[:title_property]]
176
- return shorten_title(get_language_literal(data[@param[:title_property]]))
177
- end
178
- %w(
179
- http://www.w3.org/2000/01/rdf-schema#label
180
- http://purl.org/dc/terms/title
181
- http://purl.org/dc/elements/1.1/title
182
- http://schema.org/name
183
- http://www.w3.org/2004/02/skos/core#prefLabel
184
- ).each do |property|
185
- return shorten_title(get_language_literal(data[property])) if data[property]
186
- end
187
- default_title
167
+ resolve_title(data,
168
+ default: default_title,
169
+ use_default: true,
170
+ property_key: :title_property,
171
+ perclass_key: :title_property_perclass
172
+ )
173
+ end
174
+ def get_subtitle(data, default_title = nil)
175
+ resolve_title(data,
176
+ default: default_title,
177
+ use_default: false,
178
+ property_key: :subtitle_property,
179
+ perclass_key: :subtitle_property_perclass
180
+ )
188
181
  end
189
182
  def get_language_literal(object)
190
183
  if object.is_a? Array
@@ -215,7 +208,13 @@ module TTL2HTML
215
208
  if /\Ahttps?:\/\// =~ object.to_s
216
209
  rel_path = relative_path_uri(object, param[:base_uri])
217
210
  if param[:data_global][object]
218
- "<a href=\"#{rel_path}\">#{get_title(param[:data_global][object]) or object}</a>"
211
+ result = "<a href=\"#{rel_path}\">#{get_title(param[:data_global][object]) or object}</a>"
212
+ subtitle = get_subtitle(param[:data_global][object])
213
+ if subtitle
214
+ result += " <small>#{subtitle}</small>"
215
+ else
216
+ result
217
+ end
219
218
  else
220
219
  "<a href=\"#{rel_path}\">#{object}</a>"
221
220
  end
@@ -281,5 +280,45 @@ module TTL2HTML
281
280
  param_local = @param.dup.merge(data: version)
282
281
  to_html_raw("version.html.erb", param_local)
283
282
  end
283
+
284
+ private
285
+
286
+ def resolve_title(data, default:, use_default:, property_key:, perclass_key:)
287
+ return default if data.nil?
288
+ # rdf:type
289
+ type_key = "http://www.w3.org/1999/02/22-rdf-syntax-ns#type"
290
+ # 1. クラスごとのプロパティ指定がある場合
291
+ if @param[perclass_key].is_a?(Hash) && data[type_key]
292
+ Array(data[type_key]).each do |klass|
293
+ if @param[perclass_key][klass]
294
+ prop = @param[perclass_key][klass]
295
+ if valid_value?(data[prop])
296
+ return shorten_title(get_language_literal(data[prop]))
297
+ end
298
+ end
299
+ end
300
+ end
301
+ # 2. 一般プロパティ
302
+ if @param[property_key] && valid_value?(data[@param[property_key]])
303
+ return shorten_title(get_language_literal(data[@param[property_key]]))
304
+ end
305
+ # 3. デフォルト候補を順にチェック
306
+ if use_default
307
+ [
308
+ "http://www.w3.org/2000/01/rdf-schema#label",
309
+ "http://purl.org/dc/terms/title",
310
+ "http://purl.org/dc/elements/1.1/title",
311
+ "http://schema.org/name",
312
+ "http://www.w3.org/2004/02/skos/core#prefLabel"
313
+ ].each do |prop|
314
+ return shorten_title(get_language_literal(data[prop])) if valid_value?(data[prop])
315
+ end
316
+ end
317
+ # 4. fallback
318
+ default
319
+ end
320
+ def valid_value?(value)
321
+ value && !(value.respond_to?(:empty?) && value.empty?)
322
+ end
284
323
  end
285
- end
324
+ end
@@ -1 +1 @@
1
- TTL2HTML::VERSION = "2.1.1"
1
+ TTL2HTML::VERSION = "2.2.0"
data/lib/ttl2html.rb CHANGED
@@ -172,6 +172,9 @@ module TTL2HTML
172
172
  param[:data_inverse_global] = @data_inverse
173
173
  param[:data_global] = @data
174
174
  param[:title] = template.get_title(v)
175
+ if @config[:subtitle_property] or @config[:subtitle_property_perclass]
176
+ param[:subtitle] = template.get_subtitle(v)
177
+ end
175
178
  if param[:breadcrumbs]
176
179
  param[:breadcrumbs_items] = build_breadcrumbs(uri, template)
177
180
  end
@@ -393,6 +396,7 @@ module TTL2HTML
393
396
  subset: subset,
394
397
  link: link,
395
398
  license: extract_license(data),
399
+ derivedfrom: extract_derivedfrom(data),
396
400
  }
397
401
  end
398
402
  def extract_versions
@@ -415,6 +419,17 @@ module TTL2HTML
415
419
  end
416
420
  versions.sort_by{|v| [ v[:date], v[:version] ] }
417
421
  end
422
+ def extract_derivedfrom(data)
423
+ derivedfrom = {}
424
+ wasDerivedFrom = data["http://www.w3.org/ns/prov#wasDerivedFrom"]&.first
425
+ if @data[wasDerivedFrom]
426
+ derivedfrom = {
427
+ url: @data[wasDerivedFrom]["http://www.w3.org/1999/02/22-rdf-syntax-ns#value"]&.first,
428
+ label: @data[wasDerivedFrom]["http://www.w3.org/2000/01/rdf-schema#label"]
429
+ }
430
+ end
431
+ derivedfrom
432
+ end
418
433
  def extract_license(data)
419
434
  license = {}
420
435
  if data["http://purl.org/dc/terms/license"]
@@ -440,6 +455,7 @@ module TTL2HTML
440
455
  data = @data[toplevel.to_s]
441
456
  if toplevel
442
457
  license = extract_license(data)
458
+ derivedfrom = extract_derivedfrom(data)
443
459
  if data["http://purl.org/dc/terms/publisher"]
444
460
  publisher_data = @data[data["http://purl.org/dc/terms/publisher"].first]
445
461
  email = publisher_data["http://xmlns.com/foaf/0.1/mbox"]&.first
@@ -467,6 +483,7 @@ module TTL2HTML
467
483
  license: license,
468
484
  contact: contact,
469
485
  endpoint: endpoint,
486
+ derivedfrom: derivedfrom,
470
487
  }
471
488
  end
472
489
  result
data/locales/en.yml CHANGED
@@ -17,14 +17,16 @@ en:
17
17
  details: Details
18
18
  inverse_data: Referred resources
19
19
  index:
20
+ derivedfrom-text: "This dataset is created by editing <a href=\"%{url}\">\"%{label}\"</a>."
20
21
  list: "List of %{resource}"
21
22
  latest-dataset: "Latest dataset"
22
23
  past-versions: "Past versions"
23
- license-text: "This dataset is freely usable as <a href=\"%{url}\">%{label}</a>"
24
+ license-text: "This dataset is freely usable as <a href=\"%{url}\">%{label}</a>."
24
25
  sparql-endpoint: "SPARQL Endpoint"
25
26
  sparql-endpoint-text: "The SPARQL endpoint for the dataset is available at"
26
27
  dataset:
27
- license-text: "This dataset is freely usable as <a href=\"%{url}\">%{label}</a>"
28
+ derivedfrom-text: "This dataset is created by editing <a href=\"%{url}\">\"%{label}\"</a>."
29
+ license-text: "This dataset is freely usable as <a href=\"%{url}\">%{label}</a>."
28
30
  layout:
29
31
  rdf-data: RDF data
30
32
  shape-table:
data/locales/ja.yml CHANGED
@@ -17,6 +17,7 @@ ja:
17
17
  details: 詳細情報
18
18
  inverse_data: 被参照情報
19
19
  index:
20
+ derivedfrom-text: "このデータセットは<a href=\"%{url}\">「%{label}」</a>を加工して作成。"
20
21
  list: "%{resource} 一覧"
21
22
  latest-dataset: 最新のデータセット
22
23
  past-versions: 過去の更新履歴
@@ -24,7 +25,8 @@ ja:
24
25
  sparql-endpoint: "SPARQLエンドポイント"
25
26
  sparql-endpoint-text: "このデータセットに対するSPARQLエンドポイントは以下のURLからアクセスできます"
26
27
  dataset:
27
- license-text: "<a href=\"%{url}\">%{label}</a>として自由に利用できます"
28
+ derivedfrom-text: "このデータセットは<a href=\"%{url}\">「%{label}」</a>を加工して作成。"
29
+ license-text: "<a href=\"%{url}\">%{label}</a>として自由に利用できます。"
28
30
  layout:
29
31
  rdf-data: RDFデータ
30
32
  shape-table:
@@ -43,4 +45,4 @@ ja:
43
45
  blank-node-or-structure: ブランクノードの内容は以下のいずれかの内容からなる構造を持ちます。
44
46
  triples:
45
47
  inverse_refered: "'%{property}'としての参照元:"
46
- blank_node: "空ノード"
48
+ blank_node: "空ノード"
@@ -20,6 +20,11 @@
20
20
  <%= t("dataset.license-text", label: get_language_literal(param[:license][:label]), url: param[:license][:url]) %>
21
21
  </span>
22
22
  <%- end -%>
23
+ <%- if not param[:derivedfrom].empty? -%>
24
+ <span class="derivedfrom">
25
+ <%= t("dataset.derivedfrom-text", label: get_language_literal(param[:derivedfrom][:label]), url: param[:derivedfrom][:url]) %>
26
+ </span>
27
+ <%- end -%>
23
28
  <%- if param[:subset].size > 0 -%>
24
29
  <ul>
25
30
  <%- param[:subset].each do |subset| -%>
@@ -1,6 +1,9 @@
1
1
  <div class="jumbotron">
2
2
  <div class="container">
3
3
  <h1><%=h param[:title] %></h1>
4
+ <%- if param[:subtitle] -%>
5
+ <p class="lead"><%=h param[:subtitle] %></p>
6
+ <%- end -%>
4
7
  <p><i class="bi bi-link-45deg"></i> <a href="<%=h param[:uri] %>"><%=h param[:uri] %></a></p>
5
8
  </div>
6
9
  </div>
@@ -24,13 +24,18 @@
24
24
  <p><a href="about#versions">&raquo; <%=h t("index.past-versions") %></a></p>
25
25
  <%- end -%>
26
26
  <%- if param[:toplevel] and not param[:toplevel][:license].empty? -%>
27
- <p>
27
+ <p class="license">
28
28
  <%- if param[:toplevel][:license][:icon] -%>
29
29
  <a href="<%=h param[:toplevel][:license][:url] %>"><img src="<%=h param[:toplevel][:license][:icon] %>"></a>
30
30
  <%- end -%>
31
31
  <%= t("index.license-text", label: get_language_literal(param[:toplevel][:license][:label]), url: param[:toplevel][:license][:url]) %>
32
32
  </p>
33
33
  <%- end -%>
34
+ <%- if param[:toplevel] and not param[:toplevel][:derivedfrom].empty? -%>
35
+ <p class="derivedfrom">
36
+ <%= t("index.derivedfrom-text", label: get_language_literal(param[:toplevel][:derivedfrom][:label]), url: param[:toplevel][:derivedfrom][:url]) %>
37
+ </p>
38
+ <%- end -%>
34
39
  </div>
35
40
  </div>
36
41
  <div class="col-md">
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ttl2html
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.1.1
4
+ version: 2.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Masao Takaku
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-02-11 00:00:00.000000000 Z
10
+ date: 2025-06-07 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: nokogiri