Skip to content

Commit 1b20f42

Browse files
committed
Improvements to vocabulary generation:
* Only use english or plain terms, as Ruby serialization does not preserve language. * Use lists for top-level values as well as embedded. * Order embedded property values.
1 parent 9b4fe39 commit 1b20f42

2 files changed

Lines changed: 16 additions & 1 deletion

File tree

lib/rdf/vocab/writer.rb

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -231,6 +231,17 @@ def serialize_value(value, key, indent: "")
231231
value.to_ruby(indent: indent + " ")
232232
elsif value.is_a?(RDF::Term)
233233
"#{value.to_s.inspect}.freeze"
234+
elsif value.is_a?(RDF::List)
235+
list_elements = value.map do |u|
236+
if u.uri?
237+
"#{u.pname.inspect}.freeze"
238+
elsif u.respond_to?(:to_ruby)
239+
u.to_ruby(indent: indent + " ")
240+
else
241+
"#{u.to_s.inspect}.freeze"
242+
end
243+
end
244+
"list(#{list_elements.join(', ')})"
234245
else
235246
"#{value.inspect}.freeze"
236247
end

lib/rdf/vocabulary.rb

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -492,6 +492,10 @@ def from_graph(graph, url: nil, class_name: nil, extra: nil)
492492
else statement.predicate.pname.to_sym
493493
end
494494

495+
# Skip literals other than plain or english
496+
# This is because the ruby representation does not preserve language
497+
next if statement.object.literal? && (statement.object.language || :en).to_s !~ /^en-?/
498+
495499
(term[key] ||= []) << statement.object
496500
end
497501

@@ -1080,7 +1084,7 @@ def to_ruby(indent: "")
10801084
"term(" +
10811085
(self.uri? ? self.to_s.inspect + ",\n" : "\n") +
10821086
"#{indent} " +
1083-
attributes.keys.map do |k|
1087+
attributes.keys.sort.map do |k|
10841088
values = attribute_value(k)
10851089
values = [values].compact unless values.is_a?(Array)
10861090
values = values.map do |value|

0 commit comments

Comments
 (0)