diff --git a/.travis.yml b/.travis.yml
index 0eecaf5..9e1f468 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -4,20 +4,15 @@ script: "bundle exec rspec spec"
env:
- CI=true
rvm:
- - 2.0
- - 2.1
- - 2.2.4
- - 2.3.0
- - jruby-9.0.4.0
- - rbx-2
-gemfile:
- - Gemfile
- - Gemfile-pure
-env:
- global:
- - CI=true
+ - 2.2
+ - 2.3
+ - 2.4
+ - jruby-9
+ - rbx-3
cache: bundler
sudo: false
matrix:
allow_failures:
- - rvm: rbx-2
+ - rvm: jruby-9
+ - rvm: rbx-3
+dist: trusty
diff --git a/Gemfile b/Gemfile
index b28da4d..9ae9858 100644
--- a/Gemfile
+++ b/Gemfile
@@ -15,13 +15,12 @@ group :development do
gem 'rdf-turtle', github: "ruby-rdf/rdf-turtle", branch: "develop"
gem 'rdf-vocab', github: "ruby-rdf/rdf-vocab", branch: "develop"
gem "rdf-xsd", github: "ruby-rdf/rdf-xsd", branch: "develop"
- gem 'sxp', github: "gkellogg/sxp-ruby", branch: "develop"
+ gem 'sxp', github: "dryruby/sxp.rb", branch: "develop"
gem "equivalent-xml"
end
group :debug do
- gem "wirble"
gem "ruby-debug", platforms: :jruby
gem "byebug", platform: :mri
end
diff --git a/Gemfile-pure b/Gemfile-pure
index 1f8f25a..91c89fb 100644
--- a/Gemfile-pure
+++ b/Gemfile-pure
@@ -15,13 +15,12 @@ group :development do
gem 'rdf-turtle', github: "ruby-rdf/rdf-turtle", branch: "develop"
gem 'rdf-vocab', github: "ruby-rdf/rdf-vocab", branch: "develop"
gem "rdf-xsd", github: "ruby-rdf/rdf-xsd", branch: "develop"
- gem 'sxp', github: "gkellogg/sxp-ruby", branch: "develop"
+ gem 'sxp', github: "dryruby/sxp.rb", branch: "develop"
gem "equivalent-xml"
end
group :debug do
- gem "wirble"
gem "ruby-debug", platforms: :jruby
gem "byebug", platform: :mri
end
diff --git a/README.md b/README.md
index 37df1dd..0f46a9f 100755
--- a/README.md
+++ b/README.md
@@ -18,7 +18,7 @@ Install with `gem install rdf-rdfxml`
* 100% free and unencumbered [public domain](http://unlicense.org/) software.
* Implements a complete parser for [RDF/XML][].
-* Compatible with Ruby >= 2.0.
+* Compatible with Ruby >= 2.2.2.
## Usage:
Instantiate a parser and parse source, specifying type and base-URL
diff --git a/VERSION b/VERSION
index 227cea2..7ec1d6d 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-2.0.0
+2.1.0
diff --git a/dependencyci.yml b/dependencyci.yml
new file mode 100644
index 0000000..0c67c1b
--- /dev/null
+++ b/dependencyci.yml
@@ -0,0 +1,5 @@
+platform:
+ Rubygems:
+ rdf-isomorphic:
+ tests:
+ unmaintained: skip
\ No newline at end of file
diff --git a/example-files/example07.rdf b/example-files/example07.rdf
new file mode 100644
index 0000000..75c3256
--- /dev/null
+++ b/example-files/example07.rdf
@@ -0,0 +1,13 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/example-files/example08.rdf b/example-files/example08.rdf
new file mode 100644
index 0000000..4974387
--- /dev/null
+++ b/example-files/example08.rdf
@@ -0,0 +1,15 @@
+
+
+
+ RDF/XML Syntax Specification (Revised)
+ RDF/XML Syntax Specification (Revised)
+ RDF/XML Syntax Specification (Revised)
+
+
+
+ Der Baum
+ Das Buch ist außergewöhnlich
+ The Tree
+
+
diff --git a/example-files/example09.rdf b/example-files/example09.rdf
new file mode 100644
index 0000000..12697ef
--- /dev/null
+++ b/example-files/example09.rdf
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
diff --git a/example-files/example10.rdf b/example-files/example10.rdf
new file mode 100644
index 0000000..0e172f9
--- /dev/null
+++ b/example-files/example10.rdf
@@ -0,0 +1,7 @@
+
+
+
+ 123
+
+
diff --git a/example-files/example11.rdf b/example-files/example11.rdf
new file mode 100644
index 0000000..73ca564
--- /dev/null
+++ b/example-files/example11.rdf
@@ -0,0 +1,14 @@
+
+
+
+
+
+
+
+
+
+
diff --git a/example-files/example12.rdf b/example-files/example12.rdf
new file mode 100644
index 0000000..be34647
--- /dev/null
+++ b/example-files/example12.rdf
@@ -0,0 +1,12 @@
+
+
+
+
+ Dave Beckett
+
+
+
+
diff --git a/example-files/example13.rdf b/example-files/example13.rdf
new file mode 100644
index 0000000..8fb5f08
--- /dev/null
+++ b/example-files/example13.rdf
@@ -0,0 +1,10 @@
+
+
+
+
+
+
+
diff --git a/example-files/example14.rdf b/example-files/example14.rdf
new file mode 100644
index 0000000..672af81
--- /dev/null
+++ b/example-files/example14.rdf
@@ -0,0 +1,9 @@
+
+
+
+
+ A marvelous thing
+
+
diff --git a/example-files/example15.rdf b/example-files/example15.rdf
new file mode 100644
index 0000000..b00bec2
--- /dev/null
+++ b/example-files/example15.rdf
@@ -0,0 +1,8 @@
+
+
+
+ A marvelous thing
+
+
diff --git a/example-files/example16.rdf b/example-files/example16.rdf
new file mode 100644
index 0000000..7a47816
--- /dev/null
+++ b/example-files/example16.rdf
@@ -0,0 +1,8 @@
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example-files/example17.rdf b/example-files/example17.rdf
new file mode 100644
index 0000000..c5b7ffc
--- /dev/null
+++ b/example-files/example17.rdf
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example-files/example18.rdf b/example-files/example18.rdf
new file mode 100644
index 0000000..94126d7
--- /dev/null
+++ b/example-files/example18.rdf
@@ -0,0 +1,8 @@
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example-files/example19.rdf b/example-files/example19.rdf
new file mode 100644
index 0000000..0224350
--- /dev/null
+++ b/example-files/example19.rdf
@@ -0,0 +1,11 @@
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/example-files/example20.rdf b/example-files/example20.rdf
new file mode 100644
index 0000000..8493447
--- /dev/null
+++ b/example-files/example20.rdf
@@ -0,0 +1,8 @@
+
+
+
+ blah
+
+
diff --git a/lib/rdf/rdfxml/reader.rb b/lib/rdf/rdfxml/reader.rb
index 1e58910..427f3a9 100644
--- a/lib/rdf/rdfxml/reader.rb
+++ b/lib/rdf/rdfxml/reader.rb
@@ -337,8 +337,8 @@ def nodeElement(el, ec)
# Determine the content type of this property element
log_fatal "child must be a proxy not a #{child.class}" unless child.is_a?(@implementation::NodeProxy)
- text_nodes = child.children.select {|e| e.text? && !e.blank?}
- element_nodes = child.children.select {|c| c.element? }
+ text_nodes = child.children.select(&:text?)
+ element_nodes = child.children.select(&:element?)
add_debug(child) {"#{text_nodes.to_a.length} text nodes, #{element_nodes.to_a.length} element nodes"}
text_nodes.each do |node|
diff --git a/lib/rdf/rdfxml/reader/nokogiri.rb b/lib/rdf/rdfxml/reader/nokogiri.rb
index ed91a22..b57f0d1 100644
--- a/lib/rdf/rdfxml/reader/nokogiri.rb
+++ b/lib/rdf/rdfxml/reader/nokogiri.rb
@@ -81,6 +81,14 @@ def display_path
end
end
+ ##
+ # Return true of this is a text node
+ #
+ # @return [Array<:text, :element, :attribute>]
+ def text?
+ (@node.text? || @node.cdata?) && !@node.blank?
+ end
+
##
# Return true of all child elements are text
#
@@ -104,7 +112,7 @@ def namespaces
def children
@children ||= NodeSetProxy.new(@node.children, self)
end
-
+
# Ancestors of this element, in order
def ancestors
@ancestors ||= parent ? parent.ancestors + [parent] : []
diff --git a/lib/rdf/rdfxml/writer/haml_templates.rb b/lib/rdf/rdfxml/writer/haml_templates.rb
index a981926..9dbaf89 100644
--- a/lib/rdf/rdfxml/writer/haml_templates.rb
+++ b/lib/rdf/rdfxml/writer/haml_templates.rb
@@ -38,7 +38,8 @@ class Writer
- if expanded_type.start_with?('_:')
- haml_tag(get_qname(RDF.type), "rdf:nodeID" => expanded_type[2..-1])
-else
- - haml_tag(get_qname(RDF.type), "rdf:resource" => expanded_type)
+ - # FIXME: closing tag forces close tag, as :/ is not honored in 5.0.1
+ - haml_tag(get_qname(RDF.type), "", "rdf:resource" => expanded_type)
- predicates.each do |p|
= yield(p)
),
@@ -59,9 +60,11 @@ class Writer
- haml_tag(property, :"<", "xml:lang" => object.language, "rdf:datatype" => (object.datatype unless object.plain?)) do
= object.value.to_s.encode(xml: :text)
- elsif object.node?
- - haml_tag(property, :"/", "rdf:nodeID" => object.id)
+ - # FIXME: closing tag forces close tag, as :/ is not honored in 5.0.1
+ - haml_tag(property, "", "rdf:nodeID" => object.id)
- else
- - haml_tag(property, :"/", "rdf:resource" => relativize(object))
+ - # FIXME: closing tag forces close tag, as :/ is not honored in 5.0.1
+ - haml_tag(property, "", "rdf:resource" => relativize(object))
),
# Outpust for a list
@@ -75,9 +78,11 @@ class Writer
- if recurse && res = yield(object)
= res
- elsif object.node?
- - haml_tag(get_qname(RDF.Description), :"/", "rdf:nodeID" => (object.id if ref_count(object) > 1))
+ - # FIXME: closing tag forces close tag, as :/ is not honored in 5.0.1
+ - haml_tag(get_qname(RDF.Description), "", "rdf:nodeID" => (object.id if ref_count(object) > 1))
- else
- - haml_tag(get_qname(RDF.Description), :"/", "rdf:about" => relativize(object))
+ - # FIXME: closing tag forces close tag, as :/ is not honored in 5.0.1
+ - haml_tag(get_qname(RDF.Description), "", "rdf:about" => relativize(object))
),
}
HAML_TEMPLATES = {base: BASE_HAML}
diff --git a/rdf-rdfxml.gemspec b/rdf-rdfxml.gemspec
index adce721..3d375b8 100755
--- a/rdf-rdfxml.gemspec
+++ b/rdf-rdfxml.gemspec
@@ -20,7 +20,7 @@ Gem::Specification.new do |gem|
gem.require_paths = %w(lib)
gem.has_rdoc = false
- gem.required_ruby_version = '>= 2.0'
+ gem.required_ruby_version = '>= 2.2.2'
gem.requirements = []
gem.add_runtime_dependency 'rdf', '~> 2.0'
diff --git a/spec/reader_spec.rb b/spec/reader_spec.rb
index 264dfe0..f897dce 100644
--- a/spec/reader_spec.rb
+++ b/spec/reader_spec.rb
@@ -202,6 +202,24 @@
expect(graph).to be_equivalent_graph(expected, logger: logger)
end
+ it "reads text from CDATA" do
+ sampledoc = %(
+
+
+
+
+ )
+ expected = %(
+ .
+ "Text" .
+ )
+ graph = parse(sampledoc, validate: true)
+ expect(graph).to be_equivalent_graph(expected, logger: logger)
+ end
+
context :exceptions do
it "should raise an error if rdf:aboutEach is used, as per the negative parser test rdfms-abouteach-error001 (rdf:aboutEach attribute)" do
sampledoc = %q(
diff --git a/spec/writer_spec.rb b/spec/writer_spec.rb
index d355bab..632314c 100644
--- a/spec/writer_spec.rb
+++ b/spec/writer_spec.rb
@@ -691,9 +691,9 @@ class FOO < RDF::Vocabulary("http://foo/"); end
m.entries.each do |t|
next unless t.positive_test? && t.evaluate?
# Literal serialization adds namespace definitions
- next if t.subject =~ /rdfms-xml-literal-namespaces|xml-canon/
specify "#{t.name}" do
+ pending if t.name == 'xml-canon-test001'
unless defined?(::Nokogiri)
pending("XML-C14XL") if t.name == "xml-canon-test001"
end