ttl2html 0.3.1 → 1.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: 8a4695d17d266cffe1bdc9b1b902c3cec45dcda2a6278a705d52a7d13b4fea50
4
- data.tar.gz: bed7947d84c69ddc661c7d12da8c53aa6f63ec331430c18a9d2f5fdbbbdfe9ef
3
+ metadata.gz: b9d57dc99fea0827d317a9dc3597cae9c69d1ac38dbcd66000327f1b913dea03
4
+ data.tar.gz: d30441245cd56e6322fe3ab0b27351a83900b6c6826b3c5a6d611bffa8245d3e
5
5
  SHA512:
6
- metadata.gz: 8c8b4b8b7c5497477b7ebcd4fd51e79a9d5e1db04c26b9382aecc3af71433eb3b720c0cc0c0cb78295a47634de6fb445ce422bef78a9f40f4b66f153df000993
7
- data.tar.gz: 5516d4fc1c2a4f7ebb590bb67ee4a4fe11015548b9c0ea3cdd6b3eca4edeb2d7a3eba9c6265aec58ad26466d7df1f6c3d031e43904530be15ed3c0ad5f08ff24
6
+ metadata.gz: 6c5068b43cc54072f3958f46b5192c5fe118d5942c0b53d4f2fc35f8e35560a6768a2905d1cd946efc8462faa51b2d2ea4d844f8f73f982e18fb73ea5a812ee5
7
+ data.tar.gz: 6dc8f656583fc5d8a96baab454b1ea47e446e5694c55f457b3e236e91945595d8b2838d7a7b628d918d7a9c85bb138e081e8919453edce96228572a93dd617eb
@@ -3,16 +3,21 @@
3
3
  require "fileutils"
4
4
  require "pathname"
5
5
  require "erb"
6
+ require "i18n"
6
7
 
7
8
  module TTL2HTML
8
9
  class Template
9
10
  attr_reader :param
10
11
  include ERB::Util
12
+ include I18n::Base
11
13
  def initialize(template, param = {})
12
14
  @template = template
13
- @param = param
15
+ @param = param.dup
14
16
  @template_path = [ Dir.pwd, File.join(Dir.pwd, "templates") ]
15
17
  @template_path << File.join(File.dirname(__FILE__), "..", "..", "templates")
18
+ I18n.load_path << Dir[File.join(File.dirname(__FILE__), "..", "..", "locales") + "/*.yml"]
19
+ I18n.load_path << Dir[File.expand_path("locales") + "/*.yml"]
20
+ I18n.locale = @param[:locale] if @param[:locale]
16
21
  end
17
22
  def output_to(file, param = {})
18
23
  @param.update(param)
@@ -92,9 +97,9 @@ module TTL2HTML
92
97
  {
93
98
  path: path,
94
99
  shorten_path: shorten_path,
95
- name: data[property]["http://www.w3.org/ns/shacl#name"].first,
100
+ name: get_language_literal(data[property]["http://www.w3.org/ns/shacl#name"]),
96
101
  example: data[property]["http://www.w3.org/2004/02/skos/core#example"] ? data[property]["http://www.w3.org/2004/02/skos/core#example"].first : nil,
97
- description: data[property]["http://www.w3.org/ns/shacl#description"] ? data[property]["http://www.w3.org/ns/shacl#description"].first : nil,
102
+ description: get_language_literal(data[property]["http://www.w3.org/ns/shacl#description"]),
98
103
  required: data[property]["http://www.w3.org/ns/shacl#minCount"] ? data[property]["http://www.w3.org/ns/shacl#minCount"].first.to_i > 0 : false,
99
104
  repeatable: repeatable,
100
105
  nodeKind: data[property]["http://www.w3.org/ns/shacl#nodeKind"] ? data[property]["http://www.w3.org/ns/shacl#nodeKind"].first : nil,
@@ -108,6 +113,33 @@ module TTL2HTML
108
113
  end
109
114
 
110
115
  # helper method:
116
+ def uri_mapping_to_path(uri, suffix = ".html")
117
+ path = nil
118
+ if @param[:uri_mappings]
119
+ @param[:uri_mappings].each do |mapping|
120
+ local_file = uri.sub(@param[:base_uri], "")
121
+ if mapping["regexp"] =~ local_file
122
+ path = local_file.sub(mapping["regexp"], mapping["path"])
123
+ end
124
+ end
125
+ end
126
+ if path.nil?
127
+ if suffix == ".html"
128
+ if @param[:data_global] and @param[:data_global].keys.find{|e| e.start_with?(uri + "/") }
129
+ path = uri + "/index"
130
+ elsif uri.end_with?("/")
131
+ path = uri + "index"
132
+ else
133
+ path = uri
134
+ end
135
+ else
136
+ path = uri
137
+ end
138
+ end
139
+ path = path.sub(@param[:base_uri], "") if @param[:base_uri]
140
+ path << suffix
141
+ path
142
+ end
111
143
  def relative_path(dest)
112
144
  src = @param[:output_file]
113
145
  src = Pathname.new(src).relative_path_from(Pathname.new(@param[:output_dir])) if @param[:output_dir]
@@ -118,12 +150,20 @@ module TTL2HTML
118
150
  def relative_path_uri(dest_uri, base_uri)
119
151
  if dest_uri.start_with? base_uri
120
152
  dest = dest_uri.sub(base_uri, "")
153
+ dest = uri_mapping_to_path(dest, "")
121
154
  relative_path(dest)
122
155
  else
123
156
  dest_uri
124
157
  end
125
158
  end
126
159
  def get_title(data, default_title = "no title")
160
+ if @param[:title_property_perclass] and data["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"]
161
+ @param[:title_property_perclass].each do |klass, property|
162
+ 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])
164
+ end
165
+ end
166
+ end
127
167
  if @param[:title_property] and data[@param[:title_property]]
128
168
  return get_language_literal(data[@param[:title_property]])
129
169
  end
@@ -140,7 +180,11 @@ module TTL2HTML
140
180
  end
141
181
  def get_language_literal(object)
142
182
  if object.respond_to? :has_key?
143
- object.values.first
183
+ if object.has_key?(I18n.locale)
184
+ object[I18n.locale]
185
+ else
186
+ object.values.first
187
+ end
144
188
  elsif object.is_a? Array
145
189
  object.first
146
190
  else
@@ -157,7 +201,7 @@ module TTL2HTML
157
201
  def format_object(object, data)
158
202
  if object =~ /\Ahttps?:\/\//
159
203
  rel_path = relative_path_uri(object, param[:base_uri])
160
- if data[object]
204
+ if param[:data_global][object]
161
205
  "<a href=\"#{rel_path}\">#{get_title(param[:data_global][object]) or object}</a>"
162
206
  else
163
207
  "<a href=\"#{rel_path}\">#{object}</a>"
@@ -169,7 +213,19 @@ module TTL2HTML
169
213
  end
170
214
  end
171
215
  def format_triples(triples)
172
- param_local = @param.merge(data: triples)
216
+ param_local = @param.dup.merge(data: triples)
217
+ if @param[:labels_with_class] and triples["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"]
218
+ @param[:labels_with_class].reverse_each do |k, v|
219
+ triples["http://www.w3.org/1999/02/22-rdf-syntax-ns#type"].each do |entity_class|
220
+ if entity_class == k
221
+ v.each do |property, label_value|
222
+ param_local[:labels] ||= {}
223
+ param_local[:labels][property] = label_value
224
+ end
225
+ end
226
+ end
227
+ end
228
+ end
173
229
  to_html_raw("triples.html.erb", param_local)
174
230
  end
175
231
  end
@@ -1 +1 @@
1
- TTL2HTML::VERSION = "0.3.1"
1
+ TTL2HTML::VERSION = "1.2.0"
data/lib/ttl2html.rb CHANGED
@@ -1,5 +1,6 @@
1
1
  #!/usr/bin/env ruby
2
2
 
3
+ require "zlib"
3
4
  require "yaml"
4
5
  require "nokogiri"
5
6
  require "rdf/turtle"
@@ -9,9 +10,7 @@ require "ttl2html/template"
9
10
 
10
11
  module TTL2HTML
11
12
  class App
12
- using ProgressBar::Refinements::Enumerator
13
13
  def initialize(config = "config.yml")
14
- @template = {}
15
14
  @config = load_config(config)
16
15
  if not @config[:base_uri]
17
16
  raise "load_config: base_uri not found"
@@ -67,49 +66,41 @@ module TTL2HTML
67
66
  def format_turtle(subject, depth = 1)
68
67
  turtle = RDF::Turtle::Writer.new
69
68
  result = ""
70
- if subject.iri?
71
- result << "<#{subject}>\n#{" "*depth}"
72
- else
69
+ if subject =~ /^_:/
73
70
  result << "[\n#{" "*depth}"
71
+ else
72
+ result << "<#{subject}>\n#{" "*depth}"
74
73
  end
75
- result << @graph.query([subject, nil, nil]).predicates.sort.map do |predicate|
74
+ result << @data[subject.to_s].keys.sort.map do |predicate|
76
75
  str = "<#{predicate}> "
77
- str << @graph.query([subject, predicate, nil]).objects.sort_by do |object|
78
- if object.resource? and not object.iri? # blank node:
79
- @graph.query([object, nil, nil]).statements.sort_by{|e|
80
- [ e.predicate, e.object ]
81
- }.map{|e|
82
- [ e.predicate, e.object ]
83
- }
84
- else
85
- object
86
- end
87
- end.map do |object|
88
- if object.resource? and not object.iri? # blank node:
76
+ str << @data[subject.to_s][predicate].sort.map do |object|
77
+ if object =~ /^_:/ # blank node:
89
78
  format_turtle(object, depth + 1)
79
+ elsif object =~ RDF::URI::IRI
80
+ turtle.format_uri(RDF::URI.new object)
81
+ elsif object.respond_to?(:first) and object.first.kind_of?(Symbol)
82
+ turtle.format_literal(RDF::Literal.new(object[1], language: object[0]))
90
83
  else
91
- case object
92
- when RDF::URI
93
- turtle.format_uri(object)
94
- else
95
- turtle.format_literal(object)
96
- end
84
+ turtle.format_literal(object)
97
85
  end
98
86
  end.join(", ")
99
87
  str
100
88
  end.join(";\n#{" "*depth}")
101
- result << " ." if subject.iri?
89
+ result << " ." if not subject =~ /^_:/
102
90
  result << "\n"
103
- result << "#{" "*(depth-1)}]" if not subject.iri?
91
+ result << "#{" "*(depth-1)}]" if subject =~ /^_:/
104
92
  result
105
93
  end
106
94
  def format_turtle_inverse(object)
107
- turtle = RDF::Turtle::Writer.new
108
95
  result = ""
109
- @graph.query([nil, nil, object]).statements.sort_by do |e|
110
- [ e.subject, e.predicate, object ]
111
- end.map do |e|
112
- result << "<#{e.subject}> <#{e.predicate}> <#{object}>.\n"
96
+ return result if not object.start_with? @config[:base_uri]
97
+ return result if not @data_inverse.has_key? object
98
+ turtle = RDF::Turtle::Writer.new
99
+ @data_inverse[object].keys.sort.each do |predicate|
100
+ @data_inverse[object.to_s][predicate].sort.each do |subject|
101
+ next if subject =~ /^_:/
102
+ result << "<#{subject}> <#{predicate}> <#{object}>.\n"
103
+ end
113
104
  end
114
105
  result
115
106
  end
@@ -121,7 +112,27 @@ module TTL2HTML
121
112
  end
122
113
  end
123
114
  def output_html_files
115
+ template = Template.new("", @config)
116
+ shapes = @graph.query([nil,
117
+ RDF::URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),
118
+ RDF::URI("http://www.w3.org/ns/shacl#NodeShape")])
119
+ labels = shapes2labels(shapes)
120
+ @config[:labels_with_class] ||= {}
121
+ labels.each do |klass, props|
122
+ props.each do |property, label|
123
+ @config[:labels_with_class][klass] ||= {}
124
+ if @config[:labels_with_class][klass][property]
125
+ next
126
+ else
127
+ @config[:labels_with_class][klass][property] = template.get_language_literal(label)
128
+ end
129
+ end
130
+ end
131
+ progressbar = ProgressBar.create(title: :output_html_files,
132
+ total: @data.size,
133
+ format: "(%t) %a %e %P% Processed: %c from %C")
124
134
  each_data do |uri, v|
135
+ progressbar.increment
125
136
  template = Template.new("default.html.erb", @config)
126
137
  param = @config.dup
127
138
  param[:uri] = uri
@@ -129,21 +140,14 @@ module TTL2HTML
129
140
  param[:data_inverse] = @data_inverse[uri]
130
141
  param[:data_global] = @data
131
142
  param[:title] = template.get_title(v)
132
- if @data.keys.find{|e| e.start_with?(uri + "/") }
133
- file = uri + "/index.html"
134
- elsif uri.end_with?("/")
135
- file = uri + "index.html"
136
- else
137
- file = uri + ".html"
138
- end
139
- #p uri, param
140
- file = file.sub(@config[:base_uri], "")
143
+ file = uri_mapping_to_path(uri, ".html")
141
144
  if @config[:output_dir]
142
145
  Dir.mkdir @config[:output_dir] if not File.exist? @config[:output_dir]
143
146
  file = File.join(@config[:output_dir], file)
144
147
  end
145
148
  template.output_to(file, param)
146
149
  end
150
+ progressbar.finish
147
151
  index_html = "index.html"
148
152
  index_html = File.join(@config[:output_dir], "index.html") if @config[:output_dir]
149
153
  if @config.has_key? :top_class
@@ -164,9 +168,6 @@ module TTL2HTML
164
168
  template.output_to(index_html, param)
165
169
  end
166
170
  end
167
- shapes = @graph.query([nil,
168
- RDF::URI("http://www.w3.org/1999/02/22-rdf-syntax-ns#type"),
169
- RDF::URI("http://www.w3.org/ns/shacl#NodeShape")])
170
171
  if shapes.size > 0
171
172
  about_html = @config[:about_file] || "about.html"
172
173
  about_html = File.join(@config[:output_dir], about_html) if @config[:output_dir]
@@ -191,20 +192,69 @@ module TTL2HTML
191
192
  template.output_to(about_html, param)
192
193
  end
193
194
  end
195
+
196
+ def shapes2labels(shapes)
197
+ labels = {}
198
+ shapes.subjects.each do |shape|
199
+ target_class = @data[shape.to_s]["http://www.w3.org/ns/shacl#targetClass"]&.first
200
+ if target_class
201
+ @data[shape.to_s]["http://www.w3.org/ns/shacl#property"].each do |property|
202
+ path = @data[property]["http://www.w3.org/ns/shacl#path"].first
203
+ name = @data[property]["http://www.w3.org/ns/shacl#name"]
204
+ labels[target_class] ||= {}
205
+ labels[target_class][path] = name
206
+ end
207
+ end
208
+ end
209
+ labels
210
+ end
211
+
194
212
  def output_turtle_files
213
+ progressbar = ProgressBar.create(title: :output_turtle_files,
214
+ total: @data.size,
215
+ format: "(%t) %a %e %P% Processed: %c from %C")
195
216
  each_data do |uri, v|
196
- file = uri.sub(@config[:base_uri], "")
197
- file << ".ttl"
217
+ progressbar.increment
218
+ file = uri_mapping_to_path(uri, ".ttl")
198
219
  if @config[:output_dir]
199
220
  Dir.mkdir @config[:output_dir] if not File.exist? @config[:output_dir]
200
221
  file = File.join(@config[:output_dir], file)
201
222
  end
202
- str = format_turtle(RDF::URI.new uri)
203
- str << format_turtle_inverse(RDF::URI.new uri)
223
+ str = format_turtle(uri)
224
+ str << format_turtle_inverse(uri)
204
225
  open(file, "w") do |io|
205
226
  io.puts str.strip
206
227
  end
207
228
  end
229
+ progressbar.finish
230
+ end
231
+ def uri_mapping_to_path(uri, suffix = ".html")
232
+ path = nil
233
+ if @config[:uri_mappings]
234
+ @config[:uri_mappings].each do |mapping|
235
+ local_file = uri.sub(@config[:base_uri], "")
236
+ if mapping["regexp"] =~ local_file
237
+ path = local_file.sub(mapping["regexp"], mapping["path"])
238
+ end
239
+ end
240
+ end
241
+ if path.nil?
242
+ if suffix == ".html"
243
+ if @data.keys.find{|e| e.start_with?(uri + "/") }
244
+ path = uri + "/index"
245
+ elsif uri.end_with?("/")
246
+ path = uri + "index"
247
+ else
248
+ path = uri
249
+ end
250
+ else
251
+ path = uri
252
+ end
253
+ end
254
+ path = path.sub(@config[:base_uri], "")
255
+ path << suffix
256
+ #p [uri, path]
257
+ path
208
258
  end
209
259
  def cleanup
210
260
  @data.select do |uri, v|
@@ -212,15 +262,10 @@ module TTL2HTML
212
262
  end.sort_by do |uri, v|
213
263
  -(uri.size)
214
264
  end.each do |uri, v|
215
- if @data.keys.find{|e| e.start_with?(uri + "/") }
216
- file = uri + "/index.html"
217
- else
218
- file = uri + ".html"
219
- end
220
- html_file = file.sub(@config[:base_uri], "")
265
+ html_file = uri_mapping_to_path(uri, ".html")
221
266
  html_file = File.join(@config[:output_dir], html_file) if @config[:output_dir]
222
267
  File.unlink html_file
223
- ttl_file = uri.sub(@config[:base_uri], "") + ".ttl"
268
+ ttl_file = uri_mapping_to_path(uri, ".ttl")
224
269
  ttl_file = File.join(@config[:output_dir], ttl_file) if @config[:output_dir]
225
270
  File.unlink ttl_file
226
271
  dir = uri.sub(@config[:base_uri], "")
@@ -247,4 +292,4 @@ module TTL2HTML
247
292
  file
248
293
  end
249
294
  end
250
- end
295
+ end
data/locales/en.yml ADDED
@@ -0,0 +1,26 @@
1
+ en:
2
+ about:
3
+ title: "About %{title}"
4
+ The properties for the textbook resources are as follows:
5
+ shape-note: "The properties for the %{resource} resources are as follows:"
6
+ default:
7
+ details: Details
8
+ inverse_data: Referred resources
9
+ index:
10
+ list: "List of %{resource}"
11
+ layout:
12
+ rdf-data: RDF data
13
+ shape-table:
14
+ header:
15
+ property-name: "Property name"
16
+ description: "Description"
17
+ example: "Example of the property value(s)"
18
+ required: "Required?"
19
+ repeatable: "Repeatable?"
20
+ note: "Notes"
21
+ required: "Required"
22
+ repeatable: "Repeatable"
23
+ optional: "Optional"
24
+ non-repeatable: "Non repeatable"
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:"
data/locales/ja.yml ADDED
@@ -0,0 +1,25 @@
1
+ ja:
2
+ about:
3
+ title: "%{title}について"
4
+ shape-note: "%{resource}リソースが持つプロパティを下表に示します"
5
+ default:
6
+ details: 詳細情報
7
+ inverse_data: 被参照情報
8
+ index:
9
+ list: "%{resource} 一覧"
10
+ layout:
11
+ rdf-data: RDFデータ
12
+ shape-table:
13
+ header:
14
+ property-name: プロパティ名
15
+ description: 説明
16
+ example: プロパティ値の例
17
+ required: 必須・省略の別
18
+ repeatable: 繰り返しの有無
19
+ note: 備考
20
+ required: 必須
21
+ repeatable: 繰り返し有り
22
+ optional: 省略可能
23
+ non-repeatable: 繰り返し無し
24
+ blank-node-structure: ブランクノードの内容は以下の内容からなる構造を持ちます。
25
+ blank-node-or-structure: ブランクノードの内容は以下のいずれかの内容からなる構造を持ちます。
@@ -1,6 +1,6 @@
1
1
  <div class="jumbotron">
2
2
  <div class="container">
3
- <h1><%=h param[:site_title] %>について</h1>
3
+ <h1><%=h t("about.title", title: param[:site_title]) %></h1>
4
4
  </div>
5
5
  </div>
6
6
  <div class="container">
@@ -8,7 +8,7 @@
8
8
  <div class="col-md-12">
9
9
  <ol class="breadcrumb">
10
10
  <li><a href="./"><span class="glyphicon glyphicon-home" aria-hidden="true"></span> Home</a></li>
11
- <li class="active"><%=h param[:site_title] %>について</li>
11
+ <li class="active"><%=h t("about.title", title: param[:site_title]) %></li>
12
12
  </ol>
13
13
  </div>
14
14
  </div>
@@ -16,8 +16,9 @@
16
16
  <div class="row">
17
17
  <div class="col-md-10">
18
18
  <%- param[:content].keys.sort.each do |shape| -%>
19
- <h3><%=h param[:content][shape][:label] %>をあらわすリソース</h3>
20
- <p><%=h param[:content][shape][:label] %>リソースが持つプロパティを下表に示します</p>
19
+ <h3><%=h param[:content][shape][:label] %></h3>
20
+ <p><%= param[:content][shape][:comment] %></p>
21
+ <p><%=h t("about.shape-note", resource: param[:content][shape][:label]) %></p>
21
22
  <%= param[:content][shape][:html] -%>
22
23
  <%- end -%>
23
24
  </div>
@@ -7,14 +7,14 @@
7
7
  <div class="container">
8
8
  <div class="row">
9
9
  <div class="col-md-12">
10
- <h2>詳細情報</h2>
10
+ <h2><%=h t("default.details") %></h2>
11
11
  <%= format_triples(param[:data]) %>
12
12
  </div>
13
13
  </div>
14
14
  <% if param[:data_inverse] %>
15
15
  <div class="row inverse">
16
16
  <div class="col-md-12">
17
- <h2>被参照情報</h2>
17
+ <h2><%=h t("default.inverse_data") %></h2>
18
18
  <%= format_triples(param[:data_inverse]) %>
19
19
  </div>
20
20
  </div>
@@ -7,7 +7,7 @@
7
7
  <div class="container">
8
8
  <div class="row">
9
9
  <div class="col-md-12">
10
- <h2><%=h param[:class_label] %> 一覧</h2>
10
+ <h2><%=h t("index.list", resource: param[:class_label]) %></h2>
11
11
  <ul>
12
12
  <% param[:index_data].each do |e| %>
13
13
  <li><%= format_object(e, param[:data_global]) %></li>
@@ -22,7 +22,7 @@
22
22
  <hr>
23
23
  <footer>
24
24
  <%- 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="RDFデータ"></a></p>
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>
26
26
  <%- end -%>
27
27
  </footer>
28
28
 
@@ -1,6 +1,11 @@
1
1
  <table class="table table-condensed">
2
2
  <tr>
3
- <th>プロパティ名</th><th>説明</th><th>プロパティ値の例</th><th>必須・省略の別<br>繰り返しの有無</th><th>備考</th>
3
+ <th><%=h t('shape-table.header.property-name') %></th>
4
+ <th><%=h t('shape-table.header.description') %></th>
5
+ <th><%=h t('shape-table.header.example') %></th>
6
+ <th><%=h t('shape-table.header.required') %><br>
7
+ <%=h t('shape-table.header.repeatable') %></th>
8
+ <th><%=h t('shape-table.header.note') %></th>
4
9
  </tr>
5
10
  <tbody>
6
11
  <%- param[:properties].each do |property| -%>
@@ -10,7 +15,7 @@
10
15
  <%- else -%>
11
16
  <td><code><%=h property[:shorten_path] %></code></td>
12
17
  <%- end -%>
13
- <td><%= property[:name_ja] %></td>
18
+ <td><%= property[:name] %></td>
14
19
  <%- if property[:nodeKind] == "http://www.w3.org/ns/shacl#IRI" -%>
15
20
  <td class="url"><%= property[:example] %></td>
16
21
  <%- else -%>
@@ -19,31 +24,31 @@
19
24
  <td>
20
25
  <div>
21
26
  <%- if property[:required] -%>
22
- <strong>必須</strong>
27
+ <strong><%=h t('shape-table.required') %></strong>
23
28
  <%- else -%>
24
- 省略可能
29
+ <%=h t('shape-table.optional') %>
25
30
  <%- end -%>
26
31
  </div>
27
32
  <div>
28
33
  <%- if property[:repeatable] -%>
29
- 繰り返し有り
34
+ <%=h t('shape-table.repeatable') %>
30
35
  <%- else -%>
31
- 繰り返し無し
36
+ <%=h t('shape-table.non-repeatable') %>
32
37
  <%- end -%>
33
38
  </div>
34
39
  </td>
35
- <td><%= property[:description_ja] %></td>
40
+ <td><%= property[:description] %></td>
36
41
  </tr>
37
42
  <%- if property[:nodeKind] == "http://www.w3.org/ns/shacl#BlankNode" -%>
38
43
  <tr>
39
44
  <td colspan="4">
40
45
  <%- if property[:node_mode] == :or -%>
41
- ブランクノードの内容は以下のいずれかの内容からなる構造を持ちます。
46
+ <%=h t("shape-table.blank-node-or-structure") %>
42
47
  <%- property[:nodes].each do |e| -%>
43
48
  <div class="blank_node"><%= e.sub(/class="table"/, 'class="table table-condensed"') %></div>
44
49
  <%- end -%>
45
50
  <%- else -%>
46
- ブランクノードの内容は以下の構造を持ちます。
51
+ <%=h t("shape-table.blank-node-structure") %>
47
52
  <div class="blank_node"><%= property[:nodes].sub(/class="table"/, 'class="table table-condensed"') %></div>
48
53
  <%- end -%>
49
54
  </td>
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: 0.3.1
4
+ version: 1.2.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-10-23 00:00:00.000000000 Z
11
+ date: 2021-11-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: nokogiri
@@ -52,6 +52,20 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: i18n
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - ">="
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - ">="
67
+ - !ruby/object:Gem::Version
68
+ version: '0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: ruby-progressbar
57
71
  requirement: !ruby/object:Gem::Requirement
@@ -124,6 +138,8 @@ files:
124
138
  - lib/ttl2html/template.rb
125
139
  - lib/ttl2html/version.rb
126
140
  - lib/xlsx2shape.rb
141
+ - locales/en.yml
142
+ - locales/ja.yml
127
143
  - templates/about.html.erb
128
144
  - templates/default.html.erb
129
145
  - templates/index.html.erb