rdf_context 0.5.9.1 → 0.5.10
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +0 -1
- data/History.rdoc +23 -2
- data/Rakefile +17 -17
- data/VERSION +1 -1
- data/bin/rdf_context +1 -4
- data/lib/rdf_context.rb +55 -19
- data/lib/rdf_context/aggregate_graph.rb +0 -2
- data/lib/rdf_context/bnode.rb +14 -1
- data/lib/rdf_context/conjunctive_graph.rb +0 -2
- data/lib/rdf_context/graph.rb +9 -10
- data/lib/rdf_context/literal.rb +39 -56
- data/lib/rdf_context/n3_grammar.treetop +2 -2
- data/lib/rdf_context/n3parser.rb +7 -5
- data/lib/rdf_context/parser.rb +2 -3
- data/lib/rdf_context/quoted_graph.rb +0 -2
- data/lib/rdf_context/rdfaparser.rb +93 -68
- data/lib/rdf_context/rdfxmlparser.rb +1 -1
- data/lib/rdf_context/resource.rb +56 -0
- data/lib/rdf_context/serializer/abstract_serializer.rb +0 -2
- data/lib/rdf_context/serializer/nt_serializer.rb +0 -2
- data/lib/rdf_context/serializer/recursive_serializer.rb +0 -4
- data/lib/rdf_context/serializer/turtle_serializer.rb +0 -2
- data/lib/rdf_context/serializer/xml_serializer.rb +0 -2
- data/lib/rdf_context/store/abstract_sql_store.rb +3 -1
- data/lib/rdf_context/store/active_record_store.rb +272 -0
- data/lib/rdf_context/store/list_store.rb +2 -2
- data/lib/rdf_context/store/memory_store.rb +2 -2
- data/lib/rdf_context/store/sqlite3_store.rb +112 -48
- data/lib/rdf_context/term_utils.rb +0 -4
- data/lib/rdf_context/triple.rb +1 -3
- data/lib/rdf_context/uriref.rb +14 -1
- data/rdf_context.gemspec +872 -0
- data/script/tc +4 -4
- data/spec/active_record_store_spec.rb +61 -0
- data/spec/aggregate_graph_spec.rb +1 -1
- data/spec/bnode_spec.rb +37 -1
- data/spec/conjunctive_graph_spec.rb +1 -1
- data/spec/cwm_spec.rb +5 -5
- data/spec/duration_spec.rb +1 -1
- data/spec/graph_spec.rb +16 -2
- data/spec/list_store_spec.rb +1 -1
- data/spec/literal_spec.rb +47 -14
- data/spec/memory_store_spec.rb +1 -1
- data/spec/n3parser_spec.rb +19 -5
- data/spec/namespaces_spec.rb +1 -1
- data/spec/parser_spec.rb +1 -1
- data/spec/rdf_helper.rb +18 -15
- data/spec/rdfa_helper.rb +27 -14
- data/spec/rdfa_parser_spec.rb +28 -9
- data/spec/rdfxml_spec.rb +3 -3
- data/spec/spec_helper.rb +10 -5
- data/spec/sqlite3_store_spec.rb +1 -1
- data/spec/string_hacks_spec.rb +2 -1
- data/spec/swap_spec.rb +7 -7
- data/spec/swap_test/ref/contexts-1.n3 +12 -0
- data/spec/swap_test/ref/prefix2.rdf +33 -0
- data/spec/swap_test/ref/xmllit.nt +1 -1
- data/spec/swap_test/regression.n3 +18 -18
- data/spec/triple_spec.rb +1 -1
- data/spec/turtle_serializer_spec.rb +3 -3
- data/spec/turtle_spec.rb +3 -3
- data/spec/uriref_spec.rb +31 -1
- metadata +13 -15
data/.gitignore
CHANGED
data/History.rdoc
CHANGED
@@ -1,3 +1,24 @@
|
|
1
|
+
=== 0.5.10
|
2
|
+
* N3 Parser
|
3
|
+
* Allow mixed case literal languages.
|
4
|
+
* Unescape literals
|
5
|
+
* Rspec 2.1.0
|
6
|
+
* Added Resource class, a common super-class of BNode, Graph, Literal and URIRef.
|
7
|
+
* Implemented Resource.parse and variations for sub-classes to parse N3-coded resources.
|
8
|
+
* Literal#typed
|
9
|
+
* Namespaces option now is {prefix => href} rather than {prefix => Namespace}.
|
10
|
+
* Add all in-scope namespaces, not just those that seem to be used.
|
11
|
+
* RDFa Parser
|
12
|
+
* Upgrade for changes to RDFa 1.1 test suite
|
13
|
+
* For non-XHTML, allow use of xml:base for non-HTML languages
|
14
|
+
* XHTML has no default vocabulary.
|
15
|
+
* No longer pass vocabularies, prefixes or terms when creating XMLLiterals. Only namespaces derived via xmlns are passed to Literal#typed.
|
16
|
+
* SQLite3Store
|
17
|
+
* Basic support for using with ActiveRecord: #initialize _configuration_ can take a _connection_ option, using ActiveRecord::Base.connection.raw_connection
|
18
|
+
* If result set is returned as a hash, change back to an array (needed, as rails sets results_as_hash attribute on DB)
|
19
|
+
* Added ActiveRecordStore
|
20
|
+
* Uses ActiveRecord connection to store graph information, not an ActiveRecord::Base model
|
21
|
+
|
1
22
|
=== 0.5.9.1
|
2
23
|
* Fix minor graph property caching bug relating to manipulation of sequences.
|
3
24
|
|
@@ -10,7 +31,7 @@
|
|
10
31
|
=== 0.5.8.2
|
11
32
|
* Don't create unnecessary namespaces when serializing RDF/XML.
|
12
33
|
* Don't use regexp to substitute base URI in URI serialization.
|
13
|
-
* Added
|
34
|
+
* Added profile_graph option to RdfaParser#parse. This MUST be a ConjunctiveGraph and will be used to save profiles that are encountered.
|
14
35
|
* Fixme, for now, retrieval should include HTTP headers and perform appropriate HTTP cache control and check for potential updates.
|
15
36
|
* Added ConjunctiveGraph#add_quad. Adds a quad from the intended subject, predicate, object, and context.
|
16
37
|
@example
|
@@ -137,7 +158,7 @@
|
|
137
158
|
* Add Graph#contents as alias to store
|
138
159
|
* Add ConjunctiveGraph#triples to return all triples from store, not just default context
|
139
160
|
* Add Graph#nsbinding to retreive Store#nsbinding
|
140
|
-
* Fix
|
161
|
+
* Fix numerous SQLite3Store and AbstractSQLStore bugs. Add round-trip tests to Graph spec.
|
141
162
|
|
142
163
|
=== 0.4.4
|
143
164
|
* Namespace usage cleanup
|
data/Rakefile
CHANGED
@@ -26,7 +26,7 @@ begin
|
|
26
26
|
gemspec.add_dependency('treetop', '>= 1.4.0')
|
27
27
|
gemspec.add_dependency('nokogiri', '>= 1.4.3')
|
28
28
|
gemspec.add_dependency('builder', '>= 2.1.2')
|
29
|
-
gemspec.add_development_dependency('rspec')
|
29
|
+
gemspec.add_development_dependency('rspec', '>= 2.1.0')
|
30
30
|
gemspec.add_development_dependency('activesupport', '>= 2.3.0')
|
31
31
|
gemspec.add_development_dependency('yard')
|
32
32
|
gemspec.extra_rdoc_files = %w(README.rdoc History.txt)
|
@@ -45,30 +45,29 @@ task :push do
|
|
45
45
|
sh "growlnotify -m \"Updates pushed\" \"Git\""
|
46
46
|
end
|
47
47
|
|
48
|
-
require '
|
49
|
-
|
50
|
-
spec.libs << 'lib' << 'spec'
|
51
|
-
spec.spec_files = FileList['spec/*_spec.rb']
|
52
|
-
end
|
48
|
+
require 'rspec/core/rake_task'
|
49
|
+
RSpec::Core::RakeTask.new(:spec)
|
53
50
|
|
54
51
|
desc "Run specs through RCov"
|
55
|
-
|
56
|
-
spec.libs << 'lib' << 'spec'
|
57
|
-
spec.pattern = 'spec/*_spec.rb'
|
52
|
+
RSpec::Core::RakeTask.new("spec:rcov") do |spec|
|
58
53
|
spec.rcov = true
|
54
|
+
spec.rcov_opts = %q[--exclude "spec"]
|
59
55
|
end
|
60
56
|
|
61
57
|
desc "Generate HTML report specs"
|
62
|
-
|
63
|
-
spec.
|
64
|
-
spec.spec_files = FileList['spec/*_spec.rb']
|
65
|
-
spec.spec_opts = ["--format", "html:doc/spec.html"]
|
58
|
+
RSpec::Core::RakeTask.new("spec") do |spec|
|
59
|
+
spec.rspec_opts = ["--format", "html:doc/spec.html"]
|
66
60
|
end
|
67
61
|
|
68
62
|
task :spec => :check_dependencies
|
69
63
|
|
70
64
|
task :default => :spec
|
71
65
|
|
66
|
+
desc "Update N3 grammar"
|
67
|
+
task :grammar do
|
68
|
+
sh "tt -o lib/rdf_context/n3_grammar.rb lib/rdf_context/n3_grammar.treetop"
|
69
|
+
end
|
70
|
+
|
72
71
|
namespace :doc do
|
73
72
|
require 'rake/rdoctask'
|
74
73
|
Rake::RDocTask.new("rdoc") do |rdoc|
|
@@ -93,12 +92,13 @@ desc "Generate RDF Core Manifest.yml"
|
|
93
92
|
namespace :spec do
|
94
93
|
task :prepare do
|
95
94
|
$:.unshift(File.join(File.dirname(__FILE__), 'lib'))
|
95
|
+
$:.unshift(File.join(File.dirname(__FILE__), 'spec'))
|
96
96
|
require 'rdf_context'
|
97
|
-
require '
|
98
|
-
require '
|
97
|
+
require 'rdfa_helper'
|
98
|
+
require 'rdf_helper'
|
99
99
|
require 'fileutils'
|
100
100
|
|
101
|
-
%w(xhtml
|
101
|
+
%w(xhtml html4 html5 svgtiny).each do |suite|
|
102
102
|
yaml = manifest_file = File.join(File.dirname(__FILE__), "spec", "#{suite}-manifest.yml")
|
103
103
|
FileUtils.rm_f(yaml)
|
104
104
|
RdfaHelper::TestCase.to_yaml(suite, yaml)
|
@@ -122,7 +122,7 @@ namespace :spec do
|
|
122
122
|
|
123
123
|
yaml = File.join(TURTLE_DIR, "manifest-bad.yml")
|
124
124
|
FileUtils.rm_f(yaml)
|
125
|
-
RdfHelper::TestCase.to_yaml(
|
125
|
+
RdfHelper::TestCase.to_yaml(TURTLE_BAD_TEST, TURTLE_DIR, yaml)
|
126
126
|
end
|
127
127
|
end
|
128
128
|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.5.
|
1
|
+
0.5.10
|
data/bin/rdf_context
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
1
|
+
#!/usr/bin/env ruby
|
2
2
|
require 'rubygems'
|
3
3
|
require File.expand_path(File.dirname(__FILE__) + "/../lib/rdf_context")
|
4
4
|
require 'getoptlong'
|
@@ -28,9 +28,6 @@ class Parse
|
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
|
-
mode = ARGV.shift
|
32
|
-
raise "Mode must be one of 'parse'" unless mode == "parse"
|
33
|
-
|
34
31
|
$verbose = false
|
35
32
|
$quiet = false
|
36
33
|
$format = "ttl"
|
data/lib/rdf_context.rb
CHANGED
@@ -16,27 +16,59 @@ rescue LoadError
|
|
16
16
|
require 'treetop'
|
17
17
|
end
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
# Include Storage types, but be tollerant of failure to load as dependencies might not be available
|
22
|
-
Dir.glob(File.join(File.dirname(__FILE__), "rdf_context/store/*.rb")).each do |f|
|
23
|
-
begin
|
24
|
-
require f
|
25
|
-
rescue LoadError
|
26
|
-
puts "Error loading #{f}: #{$!}"
|
27
|
-
end
|
28
|
-
end
|
29
|
-
|
30
|
-
# Include Serializer types, but be tollerant of failure to load as dependencies might not be available
|
31
|
-
Dir.glob(File.join(File.dirname(__FILE__), "rdf_context/serializer/*.rb")).each do |f|
|
32
|
-
begin
|
33
|
-
require f
|
34
|
-
rescue LoadError
|
35
|
-
puts "Error loading #{f}: #{$!}"
|
36
|
-
end
|
37
|
-
end
|
19
|
+
require 'rdf_context/array_hacks'
|
20
|
+
require 'rdf_context/string_hacks'
|
38
21
|
|
39
22
|
module RdfContext
|
23
|
+
# Primary model classes
|
24
|
+
autoload :BNode, "rdf_context/bnode"
|
25
|
+
autoload :Duration, "rdf_context/duration"
|
26
|
+
autoload :Literal, "rdf_context/literal"
|
27
|
+
autoload :Namespace, "rdf_context/namespace"
|
28
|
+
autoload :Resource, "rdf_context/resource"
|
29
|
+
autoload :Triple, "rdf_context/triple"
|
30
|
+
autoload :URIRef, "rdf_context/uriref"
|
31
|
+
autoload :TermUtils, "rdf_context/term_utils"
|
32
|
+
|
33
|
+
# Graphs
|
34
|
+
autoload :Graph, "rdf_context/graph"
|
35
|
+
autoload :ConjunctiveGraph, "rdf_context/conjunctive_graph"
|
36
|
+
autoload :AggregateGraph, "rdf_context/aggregate_graph"
|
37
|
+
autoload :QuotedGraph, "rdf_context/quoted_graph"
|
38
|
+
|
39
|
+
# Stores
|
40
|
+
autoload :AbstractStore, "rdf_context/store/abstract_store"
|
41
|
+
autoload :AbstractSQLStore, "rdf_context/store/abstract_sql_store"
|
42
|
+
autoload :ActiveRecordStore, "rdf_context/store/active_record_store"
|
43
|
+
autoload :ListStore, "rdf_context/store/list_store"
|
44
|
+
autoload :MemoryStore, "rdf_context/store/memory_store"
|
45
|
+
autoload :SQLite3Store, "rdf_context/store/sqlite3_store"
|
46
|
+
|
47
|
+
# Parsers
|
48
|
+
autoload :Parser, "rdf_context/parser"
|
49
|
+
autoload :N3Parser, "rdf_context/n3parser"
|
50
|
+
autoload :RdfaParser, "rdf_context/rdfaparser"
|
51
|
+
autoload :RdfXmlParser, "rdf_context/rdfxmlparser"
|
52
|
+
|
53
|
+
# Serializers
|
54
|
+
autoload :AbstractSerializer, "rdf_context/serializer/abstract_serializer"
|
55
|
+
autoload :NTSerializer, "rdf_context/serializer/nt_serializer"
|
56
|
+
autoload :RecursiveSerializer, "rdf_context/serializer/recursive_serializer"
|
57
|
+
autoload :TurtleSerializer, "rdf_context/serializer/turtle_serializer"
|
58
|
+
autoload :XmlSerializer, "rdf_context/serializer/xml_serializer"
|
59
|
+
|
60
|
+
# Exceptions
|
61
|
+
autoload :BNodeException, "rdf_context/exceptions"
|
62
|
+
autoload :GraphException, "rdf_context/exceptions"
|
63
|
+
autoload :InvalidNode, "rdf_context/exceptions"
|
64
|
+
autoload :InvalidPredicate, "rdf_context/exceptions"
|
65
|
+
autoload :ParserException, "rdf_context/exceptions"
|
66
|
+
autoload :RdfException, "rdf_context/exceptions"
|
67
|
+
autoload :ReadOnlyGraphException, "rdf_context/exceptions"
|
68
|
+
autoload :SparqlException, "rdf_context/exceptions"
|
69
|
+
autoload :StoreException, "rdf_context/exceptions"
|
70
|
+
autoload :TypeError, "rdf_context/exceptions"
|
71
|
+
|
40
72
|
VERSION = File.read(File.join(File.dirname(__FILE__), "..", "VERSION")).chop # Version in parent directory
|
41
73
|
|
42
74
|
LINK_TYPES = %w(
|
@@ -58,6 +90,10 @@ module RdfContext
|
|
58
90
|
$},
|
59
91
|
Regexp::EXTENDED)
|
60
92
|
|
93
|
+
LITERAL_PLAIN = /^"((?:\\"|[^"])*)"/.freeze
|
94
|
+
LITERAL_WITH_LANGUAGE = /^"((?:\\"|[^"])*)"@([a-z]+[\-A-Za-z0-9]*)/.freeze
|
95
|
+
LITERAL_WITH_DATATYPE = /^"((?:\\"|[^"])*)"\^\^<([^>]+)>/.freeze
|
96
|
+
|
61
97
|
RDF_TYPE = URIRef.new("http://www.w3.org/1999/02/22-rdf-syntax-ns#type")
|
62
98
|
XML_LITERAL = Literal::Encoding.xmlliteral
|
63
99
|
|
data/lib/rdf_context/bnode.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
module RdfContext
|
2
2
|
# The BNode class creates RDF blank nodes.
|
3
|
-
class BNode
|
3
|
+
class BNode < Resource
|
4
4
|
attr_accessor :identifier
|
5
5
|
|
6
6
|
# Create a new BNode, optionally accept a identifier for the BNode.
|
@@ -27,6 +27,19 @@ module RdfContext
|
|
27
27
|
end
|
28
28
|
end
|
29
29
|
|
30
|
+
# Parse a BNode
|
31
|
+
def self.parse(str)
|
32
|
+
BNode.new($1) if str =~ /^_:(.*)$/
|
33
|
+
end
|
34
|
+
|
35
|
+
##
|
36
|
+
# Returns `true`
|
37
|
+
#
|
38
|
+
# @return [Boolean]
|
39
|
+
def bnode?
|
40
|
+
true
|
41
|
+
end
|
42
|
+
|
30
43
|
# Return BNode identifier
|
31
44
|
def to_s
|
32
45
|
return self.identifier.to_s
|
data/lib/rdf_context/graph.rb
CHANGED
@@ -1,17 +1,8 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), 'namespace')
|
2
|
-
require File.join(File.dirname(__FILE__), 'triple')
|
3
|
-
require File.join(File.dirname(__FILE__), 'array_hacks')
|
4
|
-
require File.join(File.dirname(__FILE__), 'store', 'list_store')
|
5
|
-
require File.join(File.dirname(__FILE__), 'store', 'memory_store')
|
6
|
-
require File.join(File.dirname(__FILE__), 'serializer', 'nt_serializer')
|
7
|
-
require File.join(File.dirname(__FILE__), 'serializer', 'turtle_serializer')
|
8
|
-
require File.join(File.dirname(__FILE__), 'serializer', 'xml_serializer')
|
9
|
-
|
10
1
|
module RdfContext
|
11
2
|
# A simple graph to hold triples.
|
12
3
|
#
|
13
4
|
# Graphs store triples, and the namespaces associated with those triples, where defined
|
14
|
-
class Graph
|
5
|
+
class Graph < Resource
|
15
6
|
attr_reader :triples
|
16
7
|
attr_reader :identifier
|
17
8
|
attr_reader :store
|
@@ -48,6 +39,14 @@ module RdfContext
|
|
48
39
|
@identifier = Triple.coerce_node(options[:identifier]) || BNode.new
|
49
40
|
end
|
50
41
|
|
42
|
+
##
|
43
|
+
# Returns `false`, overridden in BNode
|
44
|
+
#
|
45
|
+
# @return [Boolean]
|
46
|
+
def graph?
|
47
|
+
true
|
48
|
+
end
|
49
|
+
|
51
50
|
def inspect
|
52
51
|
"#{self.class}[id=#{identifier},store=#{store.inspect}]"
|
53
52
|
end
|
data/lib/rdf_context/literal.rb
CHANGED
@@ -4,11 +4,12 @@ begin
|
|
4
4
|
rescue LoadError
|
5
5
|
end
|
6
6
|
|
7
|
-
require
|
7
|
+
require 'date'
|
8
|
+
require 'time'
|
8
9
|
|
9
10
|
module RdfContext
|
10
11
|
# An RDF Literal, with value, encoding and language elements.
|
11
|
-
class Literal
|
12
|
+
class Literal < Resource
|
12
13
|
class Encoding
|
13
14
|
attr_reader :value
|
14
15
|
|
@@ -244,14 +245,15 @@ module RdfContext
|
|
244
245
|
# @param [Object] contents
|
245
246
|
# @option options [Hash] :namespaces ({}) Use :__default__ or "" to declare default namespace
|
246
247
|
# @option options [String] :language (nil)
|
247
|
-
# @option options [Array<URIRef>] :profiles ([]) Profiles to add to elements
|
248
|
-
# @option options [Hash] :prefixes (nil) Prefixes to add to elements
|
249
|
-
# @option options [String] :default_vocabulary (nil) Default vocabulary to add to elements
|
250
248
|
def encode_contents(contents, options)
|
251
249
|
#puts "encode_contents: '#{contents}'"
|
250
|
+
ns_hash = {}
|
251
|
+
(options[:namespaces] || {}).each_pair do |pfx, href|
|
252
|
+
href = href.uri.to_s if href.is_a?(Namespace)
|
253
|
+
ns_hash[pfx.to_s.empty? ? "xmlns" : "xmlns:#{pfx}"] = href.to_s
|
254
|
+
end
|
252
255
|
|
253
256
|
if contents.is_a?(String)
|
254
|
-
ns_hash = options[:namespaces].values.inject({}) {|h, ns| h.merge(ns.xmlns_hash)}
|
255
257
|
ns_strs = []
|
256
258
|
ns_hash.each_pair {|a, u| ns_strs << "#{a}=\"#{u}\""}
|
257
259
|
|
@@ -265,59 +267,20 @@ module RdfContext
|
|
265
267
|
c = Nokogiri::XML.parse(c.copy(true).to_s) if c.is_a?(LibXML::XML::Node)
|
266
268
|
end
|
267
269
|
if c.is_a?(Nokogiri::XML::Element)
|
270
|
+
# For real XML C14N recursive processing is required. However, as a first step,
|
271
|
+
# we can just be sure that top-level attributes and namespace declarations are properly
|
272
|
+
# and relatively ordered
|
273
|
+
# From http://www.w3.org/TR/2000/WD-xml-c14n-20001011#Example-SETags
|
274
|
+
# * Relative order of namespace and attribute axes
|
275
|
+
# * Lexicographic ordering of namespace and attribute axes
|
268
276
|
c = Nokogiri::XML.parse(c.dup.to_xml(:save_with => Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS)).root
|
269
|
-
# Gather namespaces from self and decendant nodes
|
270
|
-
#
|
271
|
-
# prefix mappings
|
272
|
-
# Look for @xmlns and @prefix mappings. Add any other mappings from options[:prefixes]
|
273
|
-
# that aren't already defined on this node
|
274
|
-
defined_mappings = {}
|
275
|
-
prefix_mappings = {}
|
276
|
-
|
277
|
-
c.traverse do |n|
|
278
|
-
ns = n.namespace
|
279
|
-
next unless ns
|
280
|
-
prefix = ns.prefix ? "xmlns:#{ns.prefix}" : "xmlns"
|
281
|
-
defined_mappings[ns.prefix.to_s] = ns.href.to_s
|
282
|
-
c[prefix] = ns.href unless c.namespaces[prefix]
|
283
|
-
end
|
284
|
-
|
285
|
-
mappings = c["prefix"].to_s.split(/\s+/)
|
286
|
-
while mappings.length > 0 do
|
287
|
-
prefix, uri = mappings.shift.downcase, mappings.shift
|
288
|
-
#puts "uri_mappings prefix #{prefix} <#{uri}>"
|
289
|
-
next unless prefix.match(/:$/)
|
290
|
-
prefix.chop!
|
291
|
-
|
292
|
-
# A Conforming RDFa Processor must ignore any definition of a mapping for the '_' prefix.
|
293
|
-
next if prefix == "_"
|
294
|
-
|
295
|
-
defined_mappings[prefix] = uri
|
296
|
-
prefix_mappings[prefix] = uri
|
297
|
-
end
|
298
277
|
|
299
|
-
#
|
300
|
-
|
301
|
-
|
302
|
-
prefix_mappings[p] = ns.uri unless defined_mappings.has_key?(p)
|
303
|
-
end
|
304
|
-
if prefix_mappings.length
|
305
|
-
c["prefix"] = prefix_mappings.keys.sort.map {|p| "#{p}: #{prefix_mappings[p]}"}.join(" ")
|
306
|
-
end
|
307
|
-
end
|
308
|
-
|
309
|
-
# Add profiles, being careful to honor profiles defined on the element
|
310
|
-
if options[:profiles].is_a?(Array) && options[:profiles].length > 0
|
311
|
-
profiles = c["profile"].to_s.split(" ")
|
312
|
-
profiles += options[:profiles]
|
313
|
-
c["profile"] = profiles.join(" ")
|
314
|
-
end
|
315
|
-
|
316
|
-
# Add default vocabulary, being careful to honor any defined on the element
|
317
|
-
if options[:default_vocabulary] && !c["vocab"]
|
318
|
-
c["vocab"] = options[:default_vocabulary].to_s
|
278
|
+
# Apply defined namespaces
|
279
|
+
ns_hash.each_pair do |prefix, href|
|
280
|
+
c[prefix] = href unless c.namespaces[prefix]
|
319
281
|
end
|
320
282
|
|
283
|
+
# Add language
|
321
284
|
if options[:language] && c["lang"].to_s.empty?
|
322
285
|
c["xml:lang"] = options[:language]
|
323
286
|
end
|
@@ -400,6 +363,18 @@ module RdfContext
|
|
400
363
|
new(contents, encoding, options)
|
401
364
|
end
|
402
365
|
|
366
|
+
# Parse a Literal in NTriples format
|
367
|
+
def self.parse(str)
|
368
|
+
case str
|
369
|
+
when LITERAL_WITH_LANGUAGE
|
370
|
+
Literal.n3_encoded($1, $2)
|
371
|
+
when LITERAL_WITH_DATATYPE
|
372
|
+
Literal.n3_encoded($1, nil, $2)
|
373
|
+
when LITERAL_PLAIN
|
374
|
+
Literal.n3_encoded($1, nil)
|
375
|
+
end
|
376
|
+
end
|
377
|
+
|
403
378
|
# Create an un-typed literal with a language
|
404
379
|
# @param [Object] contents
|
405
380
|
# @param [String] language (nil)
|
@@ -447,7 +422,7 @@ module RdfContext
|
|
447
422
|
end
|
448
423
|
end
|
449
424
|
|
450
|
-
|
425
|
+
class << self
|
451
426
|
protected :new
|
452
427
|
end
|
453
428
|
|
@@ -514,6 +489,14 @@ module RdfContext
|
|
514
489
|
encoding.xml_args(@contents, @lang)
|
515
490
|
end
|
516
491
|
|
492
|
+
##
|
493
|
+
# Returns `true`
|
494
|
+
#
|
495
|
+
# @return [Boolean]
|
496
|
+
def literal?
|
497
|
+
true
|
498
|
+
end
|
499
|
+
|
517
500
|
def untyped?; encoding == Encoding.the_null_encoding; end
|
518
501
|
def typed?; encoding != Encoding.the_null_encoding; end
|
519
502
|
|