rdf-rdfa 0.0.3 → 0.2.1
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.
- data/History.txt +8 -0
- data/README.rdoc +1 -3
- data/Rakefile +27 -4
- data/VERSION +1 -1
- data/lib/rdf/rdfa.rb +2 -0
- data/lib/rdf/rdfa/patches/literal_hacks.rb +147 -0
- data/lib/rdf/rdfa/patches/uri_hacks.rb +19 -0
- data/lib/rdf/rdfa/reader.rb +43 -32
- data/lib/rdf/rdfa/version.rb +2 -2
- data/rdf-rdfa.gemspec +27 -14
- data/script/tc +44 -0
- data/spec/html4-manifest.yml +5113 -0
- data/spec/html5-manifest.yml +5113 -0
- data/spec/matchers.rb +18 -52
- data/spec/rdfa-triples/0011.nt +1 -1
- data/spec/rdfa-triples/0092.nt +1 -1
- data/spec/rdfa-triples/0094.nt +1 -1
- data/spec/rdfa-triples/0100.nt +1 -3
- data/spec/rdfa-triples/0101.nt +1 -3
- data/spec/rdfa-triples/0102.nt +1 -1
- data/spec/rdfa-triples/0103.nt +1 -1
- data/spec/rdfa_helper.rb +62 -35
- data/spec/rdfa_reader_spec.rb +61 -32
- data/spec/spec_helper.rb +49 -0
- data/spec/xhtml-manifest.yml +4504 -0
- metadata +45 -27
data/History.txt
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
+
=== 0.2.1
|
2
|
+
* Update for RDF 0.2.1
|
3
|
+
|
4
|
+
=== 0.2.0
|
5
|
+
* Updates for RDF 0.2.0
|
6
|
+
* Use URI#intern instead of URI#new
|
7
|
+
* Change use of Graph#predicates and Graph#objects to use as enumerables
|
8
|
+
|
1
9
|
=== 0.0.3
|
2
10
|
* Removed interal graph in Reader and implement each_triple & each_statement to perform parsing
|
3
11
|
|
data/README.rdoc
CHANGED
@@ -25,16 +25,14 @@ Instantiate a parser and parse source, specifying type and base-URL
|
|
25
25
|
end
|
26
26
|
|
27
27
|
== Dependencies
|
28
|
-
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.
|
28
|
+
* [RDF.rb](http://rubygems.org/gems/rdf) (>= 0.2.0)
|
29
29
|
* [Nokogiri](http://rubygems.org/gems/nokogiri) (>= 1.3.3)
|
30
|
-
* [Patron](http://rubygems.org/gems/patron) (>= 0.4.6) -- For RDFa profiles
|
31
30
|
|
32
31
|
== TODO
|
33
32
|
* Add support for LibXML and REXML bindings, and use the best available
|
34
33
|
* Consider a SAX-based parser for improved performance
|
35
34
|
* Port SPARQL tests to native SPARQL processor, when one becomes available.
|
36
35
|
* Add generic XHTML+RDFa Writer
|
37
|
-
* Only parse profiles if Patron included, don't force otherwise
|
38
36
|
|
39
37
|
== Resources:
|
40
38
|
* RDF.rb[http://rdf.rubyforge.org/]
|
data/Rakefile
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'rubygems'
|
2
|
+
require 'yard'
|
2
3
|
|
3
4
|
begin
|
4
5
|
gem 'jeweler'
|
@@ -12,12 +13,14 @@ begin
|
|
12
13
|
gemspec.email = "gregg@kellogg-assoc.com"
|
13
14
|
gemspec.homepage = "http://github.com/gkellogg/rdf-rdfa"
|
14
15
|
gemspec.authors = ["Gregg Kellogg"]
|
15
|
-
gemspec.add_dependency('rdf', '>= 0.1
|
16
|
+
gemspec.add_dependency('rdf', '>= 0.2.1')
|
16
17
|
gemspec.add_dependency('nokogiri', '>= 1.3.3')
|
17
18
|
gemspec.add_development_dependency('rspec')
|
18
|
-
gemspec.add_development_dependency('rdf-spec')
|
19
|
-
gemspec.add_development_dependency('
|
20
|
-
gemspec.
|
19
|
+
gemspec.add_development_dependency('rdf-spec', '>= 0.2.1')
|
20
|
+
gemspec.add_development_dependency('rdf-rdfxml', '>= 0.2.1')
|
21
|
+
gemspec.add_development_dependency('rdf-isomorphic')
|
22
|
+
gemspec.add_development_dependency('yard')
|
23
|
+
gemspec.extra_rdoc_files = %w(README.rdoc History.txt AUTHORS CONTRIBUTORS)
|
21
24
|
end
|
22
25
|
Jeweler::GemcutterTasks.new
|
23
26
|
rescue LoadError
|
@@ -45,4 +48,24 @@ Spec::Rake::SpecTask.new("doc:spec") do |spec|
|
|
45
48
|
spec.spec_opts = ["--format", "html:doc/spec.html"]
|
46
49
|
end
|
47
50
|
|
51
|
+
YARD::Rake::YardocTask.new do |t|
|
52
|
+
t.files = %w(lib/**/*.rb README.rdoc History.txt AUTHORS CONTRIBUTORS) # optional
|
53
|
+
end
|
54
|
+
|
55
|
+
desc "Generate RDF Core Manifest.yml"
|
56
|
+
namespace :spec do
|
57
|
+
task :prepare do
|
58
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
59
|
+
require 'rdf/rdfa'
|
60
|
+
require 'spec/rdfa_helper'
|
61
|
+
require 'fileutils'
|
62
|
+
|
63
|
+
%w(xhtml html4 html5).each do |suite|
|
64
|
+
yaml = manifest_file = File.join(File.dirname(__FILE__), "spec", "#{suite}-manifest.yml")
|
65
|
+
FileUtils.rm_f(yaml)
|
66
|
+
RdfaHelper::TestCase.to_yaml(suite, yaml)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
48
71
|
task :default => :spec
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.2.1
|
data/lib/rdf/rdfa.rb
CHANGED
@@ -0,0 +1,147 @@
|
|
1
|
+
# Use Nokogiri or LibXML when available, and REXML otherwise:
|
2
|
+
begin
|
3
|
+
require 'nokogiri'
|
4
|
+
rescue LoadError => e
|
5
|
+
begin
|
6
|
+
require 'libxml'
|
7
|
+
rescue LoadError => e
|
8
|
+
:rexml
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
module RDF; class Literal
|
13
|
+
##
|
14
|
+
# An XML literal.
|
15
|
+
#
|
16
|
+
# @see http://www.w3.org/TR/rdf-concepts/#section-XMLLiteral
|
17
|
+
# @see http://www.w3.org/TR/rdfa-core/#s_xml_literals
|
18
|
+
# @since 0.2.1
|
19
|
+
class XML < Literal
|
20
|
+
##
|
21
|
+
# @param [Object] value
|
22
|
+
# @option options [String] :lexical (nil)
|
23
|
+
# @option options [Hash] :namespaces (nil)
|
24
|
+
# @option options [Hash] :namespaces ({})
|
25
|
+
# @option options [Symbol] :language (nil)
|
26
|
+
# @option options [Symbol] :library (:nokogiri, :libxml, or :rexml)
|
27
|
+
def initialize(value, options = {})
|
28
|
+
options[:namespaces] ||= {}
|
29
|
+
|
30
|
+
@library = case options[:library]
|
31
|
+
when nil
|
32
|
+
case
|
33
|
+
when defined?(::Nokogiri) then :nokogiri
|
34
|
+
when defined?(::LibXML) then :libxml
|
35
|
+
else :rexml
|
36
|
+
end
|
37
|
+
when :nokogiri, :libxml, :rexml
|
38
|
+
options[:library]
|
39
|
+
else
|
40
|
+
raise ArgumentError.new("expected :rexml, :libxml or :nokogiri, but got #{options[:library].inspect}")
|
41
|
+
end
|
42
|
+
|
43
|
+
@datatype = options[:datatype] || DATATYPE
|
44
|
+
@string = options[:lexical] if options.has_key?(:lexical)
|
45
|
+
@object = parse_value(value, options)
|
46
|
+
@string = serialize_nodeset(@object)
|
47
|
+
end
|
48
|
+
|
49
|
+
##
|
50
|
+
# Converts the literal into its canonical lexical representation.
|
51
|
+
#
|
52
|
+
# @return [Literal]
|
53
|
+
# @see http://www.w3.org/TR/xml-exc-c14n/
|
54
|
+
def canonicalize
|
55
|
+
# This is the opportunity to use exclusive canonicalization library
|
56
|
+
self
|
57
|
+
end
|
58
|
+
|
59
|
+
##
|
60
|
+
# Returns the value as a string.
|
61
|
+
#
|
62
|
+
# @return [String]
|
63
|
+
def to_s
|
64
|
+
@string
|
65
|
+
end
|
66
|
+
|
67
|
+
private
|
68
|
+
|
69
|
+
def parse_value(value, options)
|
70
|
+
ns_hash = {}
|
71
|
+
options[:namespaces].each_pair do |prefix, uri|
|
72
|
+
attr = prefix.to_s.empty? ? "xmlns" : "xmlns:#{prefix}"
|
73
|
+
ns_hash[attr] = uri.to_s
|
74
|
+
end
|
75
|
+
ns_strs = []
|
76
|
+
ns_hash.each_pair {|a, u| ns_strs << "#{a}=\"#{u}\""}
|
77
|
+
|
78
|
+
case @library
|
79
|
+
when :nokogiri then parse_value_nokogiri(value, ns_strs, options[:language])
|
80
|
+
when :libxml then parse_value_libxml(value, ns_strs, options[:language])
|
81
|
+
when :rexml then parse_value_rexml(value, ns_strs, options[:language])
|
82
|
+
else value.to_s
|
83
|
+
end
|
84
|
+
end
|
85
|
+
|
86
|
+
def serialize_nodeset(object)
|
87
|
+
case @library
|
88
|
+
when :nokogiri then serialize_nodeset_nokogiri(object)
|
89
|
+
when :libxml then serialize_nodeset_libxml(object)
|
90
|
+
when :rexml then serialize_nodeset_rexml(object)
|
91
|
+
else object
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
# Nokogiri implementations
|
96
|
+
if defined?(::Nokogiri)
|
97
|
+
def parse_value_nokogiri(value, ns_strs, language)
|
98
|
+
return value if value.is_a?(Nokogiri::XML::NodeSet)
|
99
|
+
# Add inherited namespaces to created root element so that they're inherited to sub-elements
|
100
|
+
elements = Nokogiri::XML::Document.parse("<foo #{ns_strs.join(" ")}>#{value.to_s}</foo>").root.children
|
101
|
+
|
102
|
+
elements.map do |c|
|
103
|
+
if c.is_a?(Nokogiri::XML::Element)
|
104
|
+
c = Nokogiri::XML.parse(c.dup.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS)).root
|
105
|
+
# Gather namespaces from self and decendant nodes
|
106
|
+
c.traverse do |n|
|
107
|
+
ns = n.namespace
|
108
|
+
next unless ns
|
109
|
+
prefix = ns.prefix ? "xmlns:#{ns.prefix}" : "xmlns"
|
110
|
+
c[prefix] = ns.href.to_s unless c.namespaces[prefix]
|
111
|
+
end
|
112
|
+
|
113
|
+
# Add lanuage
|
114
|
+
if language && c["lang"].to_s.empty?
|
115
|
+
c["xml:lang"] = language
|
116
|
+
end
|
117
|
+
end
|
118
|
+
c
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
def serialize_nodeset_nokogiri(object)
|
123
|
+
object.map {|c| c.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS)}.join("")
|
124
|
+
end
|
125
|
+
end # Nokogiri
|
126
|
+
|
127
|
+
if defined?(::LibXML)
|
128
|
+
def parse_value_libxml(value, ns_strs, language)
|
129
|
+
# Fixme
|
130
|
+
end
|
131
|
+
|
132
|
+
def serialize_nodeset_libxml(object)
|
133
|
+
# Fixme
|
134
|
+
end
|
135
|
+
end # LibXML
|
136
|
+
|
137
|
+
# REXML
|
138
|
+
def parse_value_rexml(value, ns_strs, language)
|
139
|
+
# Fixme
|
140
|
+
end
|
141
|
+
|
142
|
+
def serialize_nodeset_rexml(object)
|
143
|
+
# Fixme
|
144
|
+
end
|
145
|
+
|
146
|
+
end unless defined?(::RDF::Literal::XML)# class XML
|
147
|
+
end; end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module RDF
|
2
|
+
class URI
|
3
|
+
##
|
4
|
+
# Joins several URIs together.
|
5
|
+
#
|
6
|
+
# @param [Array<String, URI, #to_str>] uris
|
7
|
+
# @return [URI]
|
8
|
+
#
|
9
|
+
# GK -- don't add a "/" at the end of URIs, due to rdfcore/xmlbase/test002.rdf
|
10
|
+
def join(*uris)
|
11
|
+
result = @uri
|
12
|
+
uris.each do |uri|
|
13
|
+
# result.path += '/' unless result.path.match(/[\#\/]$/) || uri.to_s[0..0] == "#"
|
14
|
+
result = result.join(uri)
|
15
|
+
end
|
16
|
+
self.class.new(result)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
data/lib/rdf/rdfa/reader.rb
CHANGED
@@ -21,8 +21,6 @@ module RDF::RDFa
|
|
21
21
|
$},
|
22
22
|
Regexp::EXTENDED)
|
23
23
|
|
24
|
-
XML_LITERAL = RDF['XMLLiteral']
|
25
|
-
|
26
24
|
# Host language, One of:
|
27
25
|
# :xhtml_rdfa_1_0
|
28
26
|
# :xhtml_rdfa_1_1
|
@@ -71,9 +69,9 @@ module RDF::RDFa
|
|
71
69
|
@base = base
|
72
70
|
@parent_subject = @base
|
73
71
|
@parent_object = nil
|
74
|
-
@uri_mappings = {}
|
75
72
|
@incomplete_triples = []
|
76
73
|
@language = nil
|
74
|
+
@uri_mappings = host_defaults.fetch(:uri_mappings, {})
|
77
75
|
@term_mappings = host_defaults.fetch(:term_mappings, {})
|
78
76
|
@default_voabulary = host_defaults.fetch(:voabulary, nil)
|
79
77
|
end
|
@@ -97,11 +95,11 @@ module RDF::RDFa
|
|
97
95
|
##
|
98
96
|
# Initializes the RDFa reader instance.
|
99
97
|
#
|
100
|
-
# @param [IO, File, String]
|
101
|
-
# @
|
102
|
-
#
|
103
|
-
#
|
104
|
-
#
|
98
|
+
# @param [Nokogiri::HTML::Document, Nokogiri::XML::Document, IO, File, String] input
|
99
|
+
# @option options [Array] :debug (nil) Array to place debug messages
|
100
|
+
# @option options [Boolean] :strict (false) Raise Error if true, continue with lax parsing, otherwise
|
101
|
+
# @option options [Boolean] :base_uri (nil) Base URI to use for relative URIs.
|
102
|
+
# @return [reader]
|
105
103
|
# @yield [reader]
|
106
104
|
# @yieldparam [Reader] reader
|
107
105
|
# @raise [RDF::ReaderError]:: Raises RDF::ReaderError if _strict_
|
@@ -109,7 +107,7 @@ module RDF::RDFa
|
|
109
107
|
super do
|
110
108
|
@debug = options[:debug]
|
111
109
|
@strict = options[:strict]
|
112
|
-
@base_uri = RDF::URI.
|
110
|
+
@base_uri = RDF::URI.intern(options[:base_uri])
|
113
111
|
@@vocabulary_cache ||= {}
|
114
112
|
|
115
113
|
@doc = case input
|
@@ -124,8 +122,6 @@ module RDF::RDFa
|
|
124
122
|
end
|
125
123
|
end
|
126
124
|
|
127
|
-
|
128
|
-
# XXX Invoke the parser, and allow add_triple to make the callback?
|
129
125
|
##
|
130
126
|
# Iterates the given block for each RDF statement in the input.
|
131
127
|
#
|
@@ -150,6 +146,7 @@ module RDF::RDFa
|
|
150
146
|
{
|
151
147
|
:vocabulary => RDF::XHV.to_s,
|
152
148
|
:prefix => "xhv",
|
149
|
+
:uri_mappings => {"xhv" => RDF::XHV.to_s}, # RDF::XHTML is wrong
|
153
150
|
:term_mappings => %w(
|
154
151
|
alternate appendix bookmark cite chapter contents copyright first glossary help icon index
|
155
152
|
last license meta next p3pv1 prev role section stylesheet subsection start top up
|
@@ -179,6 +176,12 @@ module RDF::RDFa
|
|
179
176
|
|
180
177
|
private
|
181
178
|
|
179
|
+
# Keep track of allocated BNodes
|
180
|
+
def bnode(value = nil)
|
181
|
+
@bnode_cache ||= {}
|
182
|
+
@bnode_cache[value.to_s] ||= RDF::Node.new(value)
|
183
|
+
end
|
184
|
+
|
182
185
|
# Figure out the document path, if it is a Nokogiri::XML::Element or Attribute
|
183
186
|
def node_path(node)
|
184
187
|
case node
|
@@ -221,7 +224,7 @@ module RDF::RDFa
|
|
221
224
|
base = base_el.attributes['href']
|
222
225
|
# Strip any fragment from base
|
223
226
|
base = base.to_s.split("#").first
|
224
|
-
@base_uri = RDF::URI.
|
227
|
+
@base_uri = RDF::URI.intern(base)
|
225
228
|
add_debug(base_el, "parse_whole_doc: base='#{base}'")
|
226
229
|
end
|
227
230
|
|
@@ -238,10 +241,17 @@ module RDF::RDFa
|
|
238
241
|
# local list of URI mappings via @profile.
|
239
242
|
# If @profile is present, its value is processed as defined in RDFa Profiles.
|
240
243
|
element.attributes['profile'].to_s.split(/\s/).each do |profile|
|
241
|
-
|
242
|
-
|
243
|
-
add_debug(element, "extract_mappings: skip
|
244
|
+
if node_path(element) == "/html/head"
|
245
|
+
# Don't try to open ourselves!
|
246
|
+
add_debug(element, "extract_mappings: skip head profile <#{profile}>")
|
247
|
+
next
|
248
|
+
elsif @@vocabulary_cache[profile]
|
249
|
+
add_debug(element, "extract_mappings: cached profile <#{profile}>")
|
244
250
|
@@vocabulary_cache[profile]
|
251
|
+
elsif @base_uri.to_s == profile
|
252
|
+
# Don't try to open ourselves!
|
253
|
+
add_debug(element, "extract_mappings: skip recursive profile <#{profile}>")
|
254
|
+
next
|
245
255
|
elsif @@vocabulary_cache.has_key?(profile)
|
246
256
|
add_debug(element, "extract_mappings: skip previously parsed profile <#{profile}>")
|
247
257
|
else
|
@@ -258,7 +268,8 @@ module RDF::RDFa
|
|
258
268
|
old_debug, old_verbose, = $DEBUG, $verbose
|
259
269
|
$DEBUG, $verbose = false, false
|
260
270
|
# FIXME: format shouldn't need to be specified here
|
261
|
-
p_graph = RDF::Graph.load(profile, :base_uri => profile, :format => :rdfa)
|
271
|
+
p_graph = RDF::Graph.load(profile, :base_uri => profile, :format => RDF::Format.for(profile) || :rdfa)
|
272
|
+
puts p_graph.inspect if old_debug
|
262
273
|
$DEBUG, $verbose = old_debug, old_verbose
|
263
274
|
p_graph.each_subject do |subject|
|
264
275
|
# If one of the objects is not a Literal no mapping is created.
|
@@ -282,7 +293,7 @@ module RDF::RDFa
|
|
282
293
|
# triple that is the common subject of an rdfa:term and an rdfa:uri predicate, create a
|
283
294
|
# mapping from the object literal of the rdfa:term predicate to the object literal of the
|
284
295
|
# rdfa:uri predicate. Add or update this mapping in the local term mappings.
|
285
|
-
tm[term.value] = RDF::URI.
|
296
|
+
tm[term.value] = RDF::URI.intern(uri.value) if term
|
286
297
|
end
|
287
298
|
# FIXME: subject isn't in scope here
|
288
299
|
#rescue RDF::ReaderError
|
@@ -317,7 +328,6 @@ module RDF::RDFa
|
|
317
328
|
# Set mappings from @prefix
|
318
329
|
# prefix is a whitespace separated list of prefix-name URI pairs of the form
|
319
330
|
# NCName ':' ' '+ xs:anyURI
|
320
|
-
# SPEC Confusion: prefix is forced to lower-case in @profile, but not specified here.
|
321
331
|
mappings = element.attributes["prefix"].to_s.split(/\s+/)
|
322
332
|
while mappings.length > 0 do
|
323
333
|
prefix, uri = mappings.shift.downcase, mappings.shift
|
@@ -405,7 +415,8 @@ module RDF::RDFa
|
|
405
415
|
else
|
406
416
|
language
|
407
417
|
end
|
408
|
-
|
418
|
+
language = nil if language.to_s.empty?
|
419
|
+
add_debug(element, "HTML5 [3.2.3.3] traverse, lang: #{language || 'nil'}") if attrs['lang']
|
409
420
|
|
410
421
|
# rels and revs
|
411
422
|
rels = process_uris(element, rel, evaluation_context, :uri_mappings => uri_mappings, :term_mappings => term_mappings, :vocab => default_vocabulary)
|
@@ -439,7 +450,7 @@ module RDF::RDFa
|
|
439
450
|
# From XHTML+RDFa 1.1:
|
440
451
|
# if no URI is provided, then first check to see if the element is the head or body element.
|
441
452
|
# If it is, then act as if there is an empty @about present, and process it according to the rule for @about.
|
442
|
-
new_subject = RDF::URI.
|
453
|
+
new_subject = RDF::URI.intern(evaluation_context.base)
|
443
454
|
elsif element.attributes['typeof']
|
444
455
|
new_subject = RDF::Node.new
|
445
456
|
else
|
@@ -465,7 +476,7 @@ module RDF::RDFa
|
|
465
476
|
# From XHTML+RDFa 1.1:
|
466
477
|
# if no URI is provided, then first check to see if the element is the head or body element.
|
467
478
|
# If it is, then act as if there is an empty @about present, and process it according to the rule for @about.
|
468
|
-
new_subject = RDF::URI.
|
479
|
+
new_subject = RDF::URI.intern(evaluation_context.base)
|
469
480
|
elsif element.attributes['typeof']
|
470
481
|
new_subject = RDF::Node.new
|
471
482
|
else
|
@@ -528,18 +539,18 @@ module RDF::RDFa
|
|
528
539
|
|
529
540
|
# the following 3 IF clauses should be mutually exclusive. Written as is to prevent extensive indentation.
|
530
541
|
type_resource = process_uri(element, type, evaluation_context, :uri_mappings => uri_mappings, :term_mappings => term_mappings, :vocab => default_vocabulary) if type
|
531
|
-
if type and !type.empty? and (type_resource.to_s !=
|
542
|
+
if type and !type.empty? and (type_resource.to_s != RDF.XMLLiteral.to_s)
|
532
543
|
# typed literal
|
533
544
|
add_debug(element, "[Step 11] typed literal")
|
534
|
-
current_object_literal = RDF::Literal.new(content || element.inner_text, :datatype => type_resource, :language => language)
|
545
|
+
current_object_literal = RDF::Literal.new(content || element.inner_text.to_s, :datatype => type_resource, :language => language)
|
535
546
|
elsif content or (children_node_types == [Nokogiri::XML::Text]) or (element.children.length == 0) or (type == '')
|
536
547
|
# plain literal
|
537
548
|
add_debug(element, "[Step 11] plain literal")
|
538
|
-
current_object_literal = RDF::Literal.new(content || element.inner_text, :language => language)
|
539
|
-
elsif children_node_types != [Nokogiri::XML::Text] and (type == nil or type_resource.to_s ==
|
549
|
+
current_object_literal = RDF::Literal.new(content || element.inner_text.to_s, :language => language)
|
550
|
+
elsif children_node_types != [Nokogiri::XML::Text] and (type == nil or type_resource.to_s == RDF.XMLLiteral.to_s)
|
540
551
|
# XML Literal
|
541
552
|
add_debug(element, "[Step 11] XML Literal: #{element.inner_html}")
|
542
|
-
current_object_literal = RDF::Literal.new(element.inner_html, :datatype =>
|
553
|
+
current_object_literal = RDF::Literal.new(element.inner_html, :datatype => RDF.XMLLiteral, :language => language, :namespaces => uri_mappings.merge("" => "http://www.w3.org/1999/xhtml"))
|
543
554
|
recurse = false
|
544
555
|
end
|
545
556
|
|
@@ -635,7 +646,7 @@ module RDF::RDFa
|
|
635
646
|
add_debug(element, "process_uri: #{value} => CURIE => <#{uri}>")
|
636
647
|
else
|
637
648
|
## FIXME: throw exception if there is no base uri set?
|
638
|
-
uri = RDF::URI.
|
649
|
+
uri = RDF::URI.intern(RDF::URI.intern(evaluation_context.base).join(value))
|
639
650
|
add_debug(element, "process_uri: #{value} => URI => <#{uri}>")
|
640
651
|
end
|
641
652
|
uri
|
@@ -656,7 +667,7 @@ module RDF::RDFa
|
|
656
667
|
options[:term_mappings][value.to_s.downcase]
|
657
668
|
when options[:vocab]
|
658
669
|
# Otherwise, if there is a local default vocabulary the URI is obtained by concatenating that value and the term.
|
659
|
-
RDF::URI.
|
670
|
+
RDF::URI.intern(options[:vocab] + value)
|
660
671
|
else
|
661
672
|
# Finally, if there is no local default vocabulary, the term has no associated URI and must be ignored.
|
662
673
|
nil
|
@@ -670,13 +681,13 @@ module RDF::RDFa
|
|
670
681
|
|
671
682
|
# consider the bnode situation
|
672
683
|
if prefix == "_"
|
673
|
-
|
684
|
+
bnode(reference)
|
674
685
|
elsif curie.to_s.match(/^:/)
|
675
686
|
# Default prefix
|
676
687
|
if uri_mappings[""]
|
677
|
-
RDF::URI.
|
688
|
+
RDF::URI.intern(uri_mappings[""] + reference.to_s)
|
678
689
|
elsif @host_defaults[:prefix]
|
679
|
-
RDF::URI.
|
690
|
+
RDF::URI.intern(uri_mappings[@host_defaults[:prefix]] + reference.to_s)
|
680
691
|
end
|
681
692
|
elsif !curie.to_s.match(/:/)
|
682
693
|
# No prefix, undefined (in this context, it is evaluated as a term elsewhere)
|
@@ -685,7 +696,7 @@ module RDF::RDFa
|
|
685
696
|
# Prefixes always downcased
|
686
697
|
ns = uri_mappings[prefix.to_s.downcase]
|
687
698
|
if ns
|
688
|
-
RDF::URI.
|
699
|
+
RDF::URI.intern(ns + reference.to_s)
|
689
700
|
else
|
690
701
|
add_debug(element, "curie_to_resource_or_bnode No namespace mapping for #{prefix.downcase}")
|
691
702
|
nil
|