myexperiment-hackers
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[myexperiment-hackers] [3708] branches/packs/app: added a custom RDF XML


From: noreply
Subject: [myexperiment-hackers] [3708] branches/packs/app: added a custom RDF XML generator due to poor performance
Date: Wed, 11 Sep 2013 14:00:36 +0000 (UTC)

Revision
3708
Author
dgc
Date
2013-09-11 14:00:36 +0000 (Wed, 11 Sep 2013)

Log Message

added a custom RDF XML generator due to poor performance

Modified Paths

Diff

Modified: branches/packs/app/controllers/resources_controller.rb (3707 => 3708)


--- branches/packs/app/controllers/resources_controller.rb	2013-09-11 13:59:55 UTC (rev 3707)
+++ branches/packs/app/controllers/resources_controller.rb	2013-09-11 14:00:36 UTC (rev 3708)
@@ -122,7 +122,7 @@
         graph << change.description
       end
 
-      body = pretty_rdf_xml(RDF::Writer.for(:rdfxml).buffer { |writer| writer << graph } )
+      body = pretty_rdf_xml(render_rdf(graph))
 
       send_data body, :type => 'application/rdf+xml', :filename => filename, :status => :created
     else

Modified: branches/packs/app/helpers/research_objects_helper.rb (3707 => 3708)


--- branches/packs/app/helpers/research_objects_helper.rb	2013-09-11 13:59:55 UTC (rev 3707)
+++ branches/packs/app/helpers/research_objects_helper.rb	2013-09-11 14:00:36 UTC (rev 3708)
@@ -225,8 +225,69 @@
     graph
   end
 
+  RDF_NS = 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'
+
+  def render_rdf_xml(graph)
+
+    document = LibXML::XML::Document.new
+
+    document.root = LibXML::XML::Node.new('rdf:RDF')
+    LibXML::XML::Namespace.new(document.root, 'rdf', RDF_NS)
+
+    graph.each do |subject, predicate, object|
+
+      description = LibXML::XML::Node.new('rdf:Description')
+
+      if subject.anonymous?
+        description["rdf:nodeID"] = subject.id
+      else
+        description["rdf:about"] = subject.to_s
+      end
+
+      # Split the predicate URI into a namespace and a term.
+
+      match = predicate.to_s.match(/^(.*[\/#])([^\/#]+)$/)
+
+      namespace = match[1]
+      term = match[2]
+
+      if namespace == RDF_NS
+        statement = LibXML::XML::Node.new("rdf:#{term}")
+      else
+        statement = LibXML::XML::Node.new("ns0:#{term}")
+        LibXML::XML::Namespace.new(statement, 'ns0', namespace)
+      end
+
+      if object.literal?
+
+        statement['rdf:datatype'] = object.datatype.to_s if object.has_datatype?
+        statement['rdf:language'] = object.language.to_s if object.has_language?
+
+        statement << object.to_s
+
+      elsif object.resource?
+
+        if object.anonymous?
+          statement['rdf:nodeID'] = object.id
+        else
+          statement['rdf:resource'] = object.to_s
+        end
+
+      end
+
+      description << statement
+      document.root << description
+    end
+
+    document.to_s
+  end
+
   def render_rdf(graph, format = :rdfxml)
-    RDF::Writer.for(format).buffer { |writer| writer << graph }
+    if format == :rdfxml
+      render_rdf_xml(graph)
+    else
+      RDF::Writer.for(format).buffer { |writer| writer << graph }
+    end
   end
 
   def create_rdf_xml(&blk)

Modified: branches/packs/app/models/resource.rb (3707 => 3708)


--- branches/packs/app/models/resource.rb	2013-09-11 13:59:55 UTC (rev 3707)
+++ branches/packs/app/models/resource.rb	2013-09-11 14:00:36 UTC (rev 3708)
@@ -226,7 +226,7 @@
         end
       end
 
-      manifest_body = pretty_rdf_xml(RDF::Writer.for(:rdfxml).buffer { |writer| writer << research_object.description })
+      manifest_body = pretty_rdf_xml(render_rdf(research_object.description))
 
       research_object.new_or_update_resource(
           :slug         => ResearchObject::MANIFEST_PATH,

reply via email to

[Prev in Thread] Current Thread [Next in Thread]