diff --git a/lib/rdf/rdfxml/writer.rb b/lib/rdf/rdfxml/writer.rb index b7f11e5..dce438e 100644 --- a/lib/rdf/rdfxml/writer.rb +++ b/lib/rdf/rdfxml/writer.rb @@ -180,6 +180,14 @@ def write_epilogue protected + # Reset parser to run again + def reset + @options[:log_depth] = 0 + @references = {} + @serialized = {} + @subjects = {} + end + # Render document using `haml_template[:doc]`. Yields each subject to be rendered separately. # # @param [Array] subjects @@ -209,8 +217,8 @@ def render_document(subjects, lang: nil, base: nil, **options, &block) builder.instruct! :xml, :version=>"1.0", :encoding=>"UTF-8" builder.instruct! :'xml-stylesheet', type: 'text/xsl', href: options[:stylesheet] if options[:stylesheet] attrs = prefix_attrs - attrs["xml:lang"] = lang if lang - attrs["xml:base"] = base if base + attrs[:"xml:lang"] = lang if lang + attrs[:"xml:base"] = base if base builder.rdf(:RDF, **attrs) do |b| subjects.each do |subject| @@ -263,8 +271,8 @@ def render_subject(subject, builder, **options, &block) types.unshift(first_type) if first_type && !type_qname type_qname ||= "rdf:Description" - attr_props = attr_props.merge("rdf:nodeID" => subject.id) if subject.node? && ref_count(subject) >= 1 - attr_props = attr_props.merge("rdf:about" => subject.relativize(base_uri)) if subject.uri? + attr_props = attr_props.merge("rdf:nodeID": subject.id) if subject.node? && ref_count(subject) >= 1 + attr_props = attr_props.merge("rdf:about": subject.relativize(base_uri)) if subject.uri? log_debug {"render_subject(#{subject.inspect})"} subject_done(subject) @@ -272,9 +280,9 @@ def render_subject(subject, builder, **options, &block) builder.tag!(type_qname, **attr_props) do |b| types.each do |type| if type.node? - b.tag!("rdf:type", "rdf:nodeID" => type.id) + b.tag!("rdf:type", "rdf:nodeID": type.id) else - b.tag!("rdf:type", "rdf:resource" => type.to_s) + b.tag!("rdf:type", "rdf:resource": type.to_s) end end @@ -336,11 +344,11 @@ def render_property(property, objects, builder, **options) render_subject(object, b, **options) end elsif object.literal? && object.datatype == RDF.XMLLiteral - builder.tag!(property, object.value, "rdf:parseType" => "Literal") + builder.tag!(property, object.value, "rdf:parseType": "Literal") elsif object.literal? attrs = {} - attrs["xml:lang"] = object.language if object.language? - attrs["rdf:datatype"] = object.datatype if object.datatype? + attrs[:"xml:lang"] = object.language if object.language? + attrs[:"rdf:datatype"] = object.datatype if object.datatype? builder.tag!(property, object.value.to_s, **attrs) elsif object.node? builder.tag!(property, "rdf:nodeID": object.id) @@ -368,18 +376,18 @@ def render_property(property, objects, builder, **options) # @return String # The rendered collection is returned as a string def render_collection(property, list, builder, **options, &block) - builder.tag!(property, "rdf:parseType" => "Collection") do |b| + builder.tag!(property, "rdf:parseType": "Collection") do |b| list.each do |object| if log_depth <= @max_depth && !is_done?(object) render_subject(object, b) elsif object.node? if ref_count(object) > 1 - b.tag!("rdf:Description", "rdf:nodeID" => object.id) + b.tag!("rdf:Description", "rdf:nodeID": object.id) else b.tag!("rdf:Description") end else - b.tag!("rdf:Description", "rdf:about" => object.relativize(base_uri)) + b.tag!("rdf:Description", "rdf:about": object.relativize(base_uri)) end end end @@ -389,7 +397,7 @@ def render_collection(property, list, builder, **options, &block) # @return [Hash{String => String}] def prefix_attrs prefixes.inject({}) do |memo, (k, v)| - memo[k ? "xmlns:#{k}" : "xmlns"] = v.to_s + memo[(k ? "xmlns:#{k}" : "xmlns").to_sym] = v.to_s memo end end @@ -439,14 +447,6 @@ def preprocess_statement(statement) private - # Reset parser to run again - def reset - @options[:log_depth] = 0 - @references = {} - @serialized = {} - @subjects = {} - end - # Order subjects for output. Override this to output subjects in another order. # # Uses #top_classes and #base_uri. @@ -514,7 +514,7 @@ def prop_partition(properties) (object.plain? || @attributes == :typed) && get_lang(object).nil? - attr_props[prop] = values.first.to_s + attr_props[prop.to_sym] = values.first.to_s else embed_props[prop] = values end