rdf-rdfxml 1.1.0p0 → 1.1.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 ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 6998ff50cd28297520f5141f5b4bd06afc7208eb
4
+ data.tar.gz: 6b446b7d8d586debd5063f9a8e5c728c4f4a7e9e
5
+ SHA512:
6
+ metadata.gz: 011b3251a3f25d692dc46bca35cfab75982e223b87904c6aac4d48628e7b9cace7afac59377a696a3921be52f60003a0f26b0581a3b1f4b57eb29c89c714a09e
7
+ data.tar.gz: 32ee1dc0dda497897e6e9d3aa1d1abe4030af232574233297d12f626d4c8d59fdf476cf2cca311d5bd9432f7909d507a009bf166c45b0c1b2160b2a3b525ed54
data/README.md CHANGED
@@ -1,21 +1,25 @@
1
1
  # RDF::RDFXML reader/writer
2
2
 
3
- [RDF/XML][RDF/XML] parser for [RDF.rb][RDF.rb].
3
+ [RDF/XML][] reader/writer for [RDF.rb][].
4
4
 
5
5
  [![Gem Version](https://badge.fury.io/rb/rdf-rdfxml.png)](http://badge.fury.io/rb/rdf-rdfxml)
6
6
  [![Build Status](https://secure.travis-ci.org/ruby-rdf/rdf-rdfxml.png?branch=master)](http://travis-ci.org/ruby-rdf/rdf-rdfxml)
7
7
 
8
8
  ## DESCRIPTION
9
9
 
10
- RDF::RDFXML is an [RDF/XML][RDF/XML] reader/writer for Ruby using the [RDF.rb][RDF.rb] library suite.
10
+ RDF::RDFXML is an [RDF/XML][RDF/XML] reader/writer for [Ruby][] using the [RDF.rb][RDF.rb] library suite.
11
11
 
12
12
  ## FEATURES
13
- RDF::RDFXML parses [RDF/XML][RDF/XML] into statements or triples and serializes triples, statements or graphs.
13
+ RDF::RDFXML parses [RDF/XML][] into statements or triples and serializes triples, statements or graphs. It also serializes graphs to [RDF/XML][].
14
14
 
15
- Fully compliant [RDF/XML][RDF/XML] parser and serializer.
15
+ Fully compliant [RDF/XML][] parser and serializer.
16
16
 
17
17
  Install with `gem install rdf-rdfxml`
18
18
 
19
+ * 100% free and unencumbered [public domain](http://unlicense.org/) software.
20
+ * Implements a complete parser for [RDF/XML][].
21
+ * Compatible with Ruby >= 1.9.2.
22
+
19
23
  ## Usage:
20
24
  Instantiate a parser and parse source, specifying type and base-URL
21
25
 
@@ -25,13 +29,22 @@ Instantiate a parser and parse source, specifying type and base-URL
25
29
  end
26
30
  end
27
31
 
32
+ Define `xml:base` and `xmlns` definitions, and use for serialization using `:base_uri` an `:prefixes` options.
33
+
34
+ Canonicalize and validate using `:canonicalize` and `:validate` options.
35
+
36
+ Write a graph to a file:
37
+
38
+ RDF::RDFXML::Writer.open("etc/test.ttl") do |writer|
39
+ writer << graph
40
+ end
41
+
28
42
  ## Dependencies
29
43
  * [RDF.rb](http://rubygems.org/gems/rdf) (>= 1.1)
30
- * Soft dependency on [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1.5.9)
31
- * Does not run properly on jRuby due to [Nokogiri][] issues.
44
+ * Soft dependency on [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1.6.0)
32
45
 
33
46
  ## Documentation
34
- Full documentation available on [RubyForge](http://rubydoc.info/github/ruby-rdf/rdf-rdfxml/master/frames)
47
+ Full documentation available on [Rubydoc.info][RDF/XML doc])
35
48
 
36
49
  ### Principle Classes
37
50
  * {RDF::RDFXML}
@@ -42,22 +55,14 @@ Full documentation available on [RubyForge](http://rubydoc.info/github/ruby-rdf/
42
55
  ### Additional vocabularies
43
56
  * {RDF::XML}
44
57
 
45
- ### Patches
46
- * {Array}
47
- * {RDF::Queryable}
48
- * {Nokogiri::XML::Node}
49
-
50
58
  ## TODO
51
- * Add support for LibXML and REXML bindings, and use the best available
52
59
  * Consider a SAX-based parser for improved performance
53
- * jRuby integration awaiting improvements in Nokogiri
54
60
 
55
61
  ## Resources
56
62
  * [RDF.rb][RDF.rb]
57
63
  * [RDF/XML][RDF/XML]
58
- * [Distiller](http://distiller.kellogg-assoc)
59
- * [Documentation](http://rubygems.org/gems/rdf-rdfxml)
60
- * [History](file:file.History.html)
64
+ * [Distiller](http://rdf.greggkellogg.net)
65
+ * [Documentation][RDF/XML doc]
61
66
  * [RDF Tests](http://www.w3.org/2000/10/rdf-tests/rdfcore/allTestCases.html)
62
67
 
63
68
  ## Author
@@ -67,6 +72,7 @@ Full documentation available on [RubyForge](http://rubydoc.info/github/ruby-rdf/
67
72
  * [Nicholas Humfrey](http://github.com/njh) - <http://njh.me/>
68
73
 
69
74
  ## Contributing
75
+ This repository uses [Git Flow](https://github.com/nvie/gitflow) to mange development and release activity. All submissions _must_ be on a feature branch based on the _develop_ branch to ease staging and integration.
70
76
 
71
77
  * Do your best to adhere to the existing coding conventions and idioms.
72
78
  * Don't use hard tabs, and don't leave trailing whitespace on any line.
@@ -87,13 +93,16 @@ see <http://unlicense.org/> or the accompanying {file:UNLICENSE} file.
87
93
 
88
94
  ## FEEDBACK
89
95
 
90
- * gregg@kellogg-assoc.com
96
+ * gregg@greggkellogg.net
91
97
  * <http://rubygems.org/rdf-rdfxml>
92
98
  * <http://github.com/ruby-rdf/rdf-rdfxml>
93
99
  * <http://lists.w3.org/Archives/Public/public-rdf-ruby/>
94
100
 
95
- [RDF.rb]: http://rubygems.org/gems/rdf
96
- [RDF/XML]: http://www.w3.org/TR/REC-rdf-syntax/ "RDF/XML Syntax Specification"
97
- [YARD]: http://yardoc.org/
98
- [YARD-GS]: http://rubydoc.info/docs/yard/file/docs/GettingStarted.md
99
- [PDD]: http://lists.w3.org/Archives/Public/public-rdf-ruby/2010May/0013.html
101
+ [Ruby]: http://ruby-lang.org/
102
+ [RDF]: http://www.w3.org/RDF/
103
+ [RDF.rb]: http://rubygems.org/gems/rdf
104
+ [RDF/XML]: http://www.w3.org/TR/REC-rdf-syntax/ "RDF/XML Syntax Specification"
105
+ [YARD]: http://yardoc.org/
106
+ [YARD-GS]: http://rubydoc.info/docs/yard/file/docs/GettingStarted.md
107
+ [PDD]: http://lists.w3.org/Archives/Public/public-rdf-ruby/2010May/0013.html
108
+ [RDF/XML doc]: http://rubydoc.info/github/ruby-rdf/rdf-rdfxml/master/frames
data/VERSION CHANGED
@@ -1 +1 @@
1
- 1.1.0p0
1
+ 1.1.0
@@ -38,6 +38,11 @@ module RDF::RDFXML
38
38
  def self.detect(sample)
39
39
  sample.match(/<(\w+:)?(RDF)/)
40
40
  end
41
+
42
+ # Override name of format
43
+ def self.name
44
+ "RDF/XML"
45
+ end
41
46
  end
42
47
 
43
48
  # Aliases for RDF::Format
@@ -215,6 +215,7 @@ module RDF::RDFXML
215
215
 
216
216
  # Otherwise, default is utf-8
217
217
  options[:encoding] ||= 'utf-8'
218
+ options[:encoding] = options[:encoding].to_s if options[:encoding]
218
219
 
219
220
  ::Nokogiri::XML.parse(input, base_uri.to_s, options[:encoding]) do |config|
220
221
  config.noent
@@ -76,13 +76,10 @@ module RDF::RDFXML
76
76
  mappings = {}
77
77
 
78
78
  # look for xmlns
79
- element.namespaces.each do |attr_name,attr_value|
80
- abbr, prefix = attr_name.to_s.split(":")
81
- if abbr == "xmlns"
82
- attr_value = self.base.to_s + attr_value if attr_value.match(/^\#/)
83
- mappings[prefix] = attr_value
84
- cb.call(prefix, attr_value) if block_given?
85
- end
79
+ element.namespaces.each do |prefix, value|
80
+ value = base.join(value)
81
+ mappings[prefix] = value
82
+ cb.call(prefix, value) if block_given?
86
83
  end
87
84
  mappings
88
85
  end
@@ -196,7 +193,7 @@ module RDF::RDFXML
196
193
  ec = EvaluationContext.new(base_uri, root, @graph) do |prefix, value|
197
194
  prefix(prefix, value)
198
195
  end
199
-
196
+
200
197
  nodeElement(root, ec)
201
198
  else
202
199
  rdf_nodes.each do |node|
@@ -204,10 +201,10 @@ module RDF::RDFXML
204
201
  # XXX Skip this element if it's contained within another rdf:RDF element
205
202
 
206
203
  # Extract base, lang and namespaces from parents to create proper evaluation context
207
- ec = EvaluationContext.new(base_uri, nil, @graph) do |prefix, value|
204
+ ec = EvaluationContext.new(base_uri, nil, @graph)
205
+ ec.extract_from_ancestors(node) do |prefix, value|
208
206
  prefix(prefix, value)
209
207
  end
210
- ec.extract_from_ancestors(node)
211
208
  node.children.each {|el|
212
209
  next unless el.elem?
213
210
  raise "el must be a proxy not a #{el.class}" unless el.is_a?(@implementation::NodeProxy)
@@ -0,0 +1,86 @@
1
+ # Default HAML templates used for generating RDF/XML output from the writer
2
+ module RDF::RDFXML
3
+ class Writer
4
+ # The default set of HAML templates used for RDFa code generation
5
+ BASE_HAML = {
6
+ :identifier => "base",
7
+ # Document
8
+ # Locals: lang, title, prefix, base, subjects
9
+ # Yield: subjects.each
10
+ :doc => %q(
11
+ = %(<?xml version='1.0' encoding='utf-8' ?>)
12
+ - if stylesheet
13
+ = %(<?xml-stylesheet type="text/xsl" href="#{stylesheet}"?>)
14
+ %rdf:RDF{prefix_attrs.merge("xml:lang" => lang, "xml:base" => base)}
15
+ - subjects.each do |subject|
16
+ != yield(subject)
17
+ ),
18
+
19
+ # Output for non-leaf resources
20
+ # Note that @about may be omitted for Nodes that are not referenced
21
+ #
22
+ # If _rel_ and _resource_ are not nil, the tag will be written relative
23
+ # to a previous subject. If _element_ is :li, the tag will be written
24
+ # with <li> instead of <div>.
25
+ #
26
+ # Locals: subject, typeof, predicates, rel, element, inlist, attr_props
27
+ # Yield: predicates.each
28
+ :subject => %q(
29
+ - first_type, *types = typeof.to_s.split(' ')
30
+ - (types.unshift(first_type); first_type = nil) if first_type && (first_type.include?('/') || first_type.start_with?('_:'))
31
+ - first_type ||= get_qname(RDF.Description)
32
+ - first_type = first_type[1..-1] if first_type.to_s.start_with?(":")
33
+ - attr_props = attr_props.merge(get_qname(RDF.nodeID) => subject.id) if subject.node? && ref_count(subject) > 1
34
+ - attr_props = attr_props.merge(get_qname(RDF.about) => relativize(subject)) if subject.uri?
35
+ - haml_tag(first_type, attr_props) do
36
+ - types.each do |type|
37
+ - expanded_type = expand_curie(type)
38
+ - if expanded_type.start_with?('_:')
39
+ - haml_tag(get_qname(RDF.type), "rdf:nodeID" => expanded_type[2..-1])
40
+ -else
41
+ - haml_tag(get_qname(RDF.type), "rdf:resource" => expanded_type)
42
+ - predicates.each do |p|
43
+ = yield(p)
44
+ ),
45
+
46
+ # Output for single-valued properties
47
+ # Locals: predicate, object, inlist
48
+ # Yields: object
49
+ # If nil is returned, render as a leaf
50
+ # Otherwise, render result
51
+ :property_value => %q(
52
+ - if res = yield(object)
53
+ - haml_tag(property) do
54
+ = res
55
+ - elsif object.literal? && object.datatype == RDF.XMLLiteral
56
+ - haml_tag(property, :"<", "rdf:parseType" => "Literal") do
57
+ = object.value
58
+ - elsif object.literal?
59
+ - haml_tag(property, :"<", "xml:lang" => object.language, "rdf:datatype" => (object.datatype unless object.plain?)) do
60
+ = object.value
61
+ - elsif object.node?
62
+ - haml_tag(property, :"/", "rdf:nodeID" => object.id)
63
+ - else
64
+ - haml_tag(property, :"/", "rdf:resource" => relativize(object))
65
+ ),
66
+
67
+ # Outpust for a list
68
+ # Locals: predicate, list
69
+ # Yields: object
70
+ # If nil is returned, render as a leaf
71
+ # Otherwise, render result
72
+ :collection => %q(
73
+ - haml_tag(property, get_qname(RDF.parseType) => "Collection") do
74
+ - list.each do |object|
75
+ - if res = yield(object)
76
+ = res
77
+ - elsif object.node?
78
+ - haml_tag(get_qname(RDF.Description), :"/", "rdf:nodeID" => (object.id if ref_count(object) > 1))
79
+ - else
80
+ - haml_tag(get_qname(RDF.Description), :"/", "rdf:about" => relativize(object))
81
+ ),
82
+ }
83
+ HAML_TEMPLATES = {:base => BASE_HAML}
84
+ DEFAULT_HAML = BASE_HAML
85
+ end
86
+ end