rdf_context 0.4.4 → 0.4.5
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 +9 -0
- data/VERSION +1 -1
- data/bin/rdf_context +17 -8
- data/cmx.db +0 -0
- data/ep.nt +194 -0
- data/lib/rdf_context.rb +1 -1
- data/lib/rdf_context/bnode.rb +1 -1
- data/lib/rdf_context/conjunctive_graph.rb +15 -1
- data/lib/rdf_context/graph.rb +24 -18
- data/lib/rdf_context/parser.rb +38 -0
- data/lib/rdf_context/rdfaparser.rb +1 -1
- data/lib/rdf_context/rdfxmlparser.rb +2 -2
- data/lib/rdf_context/store/abstract_sql_store.rb +43 -24
- data/lib/rdf_context/store/sqlite3_store.rb +4 -6
- data/lib/rdf_context/term_utils.rb +2 -0
- data/lib/rdf_context/triple.rb +6 -2
- data/spec/graph_spec.rb +1 -3
- data/spec/matchers.rb +5 -4
- data/spec/parser_spec.rb +24 -0
- data/spec/rdfa_helper.rb +1 -1
- data/spec/store_helper.rb +28 -0
- metadata +4 -2
data/History.txt
CHANGED
@@ -1,3 +1,12 @@
|
|
1
|
+
=== 0.4.5
|
2
|
+
* Order includes to remove platform dependencies on load requirements.
|
3
|
+
* Fix XML Comparison matcher
|
4
|
+
* Add --store option to bin/rdf_context. Let Parser#detect_format intuit file type.
|
5
|
+
* Add Graph#contents as alias to store
|
6
|
+
* Add ConjunctiveGraph#triples to return all triples from store, not just default context
|
7
|
+
* Add Graph#nsbinding to retreive Store#nsbinding
|
8
|
+
* Fix numerious SQLite3Store and AbstractSQLStore bugs. Add round-trip tests to Graph spec.
|
9
|
+
|
1
10
|
=== 0.4.4
|
2
11
|
* Namespace usage cleanup
|
3
12
|
* When serializing graph to RDF/XML, create namespaces as necessary.
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.4.
|
1
|
+
0.4.5
|
data/bin/rdf_context
CHANGED
@@ -4,13 +4,11 @@ require File.expand_path(File.dirname(__FILE__) + "/../lib/rdf_context")
|
|
4
4
|
require 'getoptlong'
|
5
5
|
class Parse
|
6
6
|
include RdfContext
|
7
|
-
def parse(file, base_uri)
|
7
|
+
def parse(file, base_uri, store = nil)
|
8
8
|
puts "Parse: #{file}" if $quiet
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
else RdfXmlParser.new
|
13
|
-
end
|
9
|
+
graph_opts = {:identifier => base_uri}
|
10
|
+
graph_opts[:store] = store if store
|
11
|
+
parser = Parser.new(:graph => Graph.new(graph_opts))
|
14
12
|
parser.parse(File.read(file), base_uri, :strict => true)
|
15
13
|
output = case $format
|
16
14
|
when "xml"
|
@@ -34,12 +32,13 @@ end
|
|
34
32
|
|
35
33
|
$verbose = false
|
36
34
|
base_uri = "http://example.com"
|
37
|
-
|
35
|
+
store = :list_store
|
38
36
|
opts = GetoptLong.new(
|
39
37
|
["--verbose", GetoptLong::NO_ARGUMENT],
|
40
38
|
["--quiet", GetoptLong::NO_ARGUMENT],
|
41
39
|
["--debug", GetoptLong::NO_ARGUMENT],
|
42
40
|
["--format", GetoptLong::REQUIRED_ARGUMENT],
|
41
|
+
["--store", GetoptLong::REQUIRED_ARGUMENT],
|
43
42
|
["--uri", GetoptLong::REQUIRED_ARGUMENT]
|
44
43
|
)
|
45
44
|
opts.each do |opt, arg|
|
@@ -49,11 +48,21 @@ opts.each do |opt, arg|
|
|
49
48
|
when '--debug' then $DEBUG = true
|
50
49
|
when '--format' then $format = arg
|
51
50
|
when '--uri' then base_uri = arg
|
51
|
+
when '--store'
|
52
|
+
case arg
|
53
|
+
when /list/
|
54
|
+
store = :list_store
|
55
|
+
when /memory/
|
56
|
+
store = :memory_store
|
57
|
+
else
|
58
|
+
puts "Creating SQLite3 database '#{arg}'" unless File.exists?(arg)
|
59
|
+
store = RdfContext::SQLite3Store.new(RdfContext::URIRef.new("http://kellogg-assoc.com/rdf_context"), :path => arg)
|
60
|
+
end
|
52
61
|
end
|
53
62
|
end
|
54
63
|
|
55
64
|
x = Parse.new
|
56
65
|
ARGV.each do |test_file|
|
57
|
-
x.parse(test_file, base_uri)
|
66
|
+
x.parse(test_file, base_uri, store)
|
58
67
|
end
|
59
68
|
|
data/cmx.db
ADDED
Binary file
|
data/ep.nt
ADDED
@@ -0,0 +1,194 @@
|
|
1
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Release> .
|
2
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#grid> "urn:GRid:A1-a0587-aaaaaaaaaa-b"@en-us .
|
3
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creationDate> "2008-05-28T16:53:42Z"@en-us .
|
4
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#MasterRelease> .
|
5
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://purl.org/dc/elements/1.1/title> "ep"@en-us .
|
6
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#parentalWarning> "unspecified"@en-us .
|
7
|
+
<http://localhost:3000/stylesheets/mobile.xslt> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#XSLT> .
|
8
|
+
<http://localhost:3000/stylesheets/mobile.xslt> <http://purl.org/dc/elements/1.1/title> "Mobile Stylesheet"@en-us .
|
9
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#xslt> <http://localhost:3000/stylesheets/mobile.xslt> .
|
10
|
+
<http://localhost:3000/stylesheets/settop.xslt> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#XSLT> .
|
11
|
+
<http://localhost:3000/stylesheets/settop.xslt> <http://purl.org/dc/elements/1.1/title> "Set-top Stylesheet"@en-us .
|
12
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#xslt> <http://localhost:3000/stylesheets/settop.xslt> .
|
13
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#XSLT> .
|
14
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop> <http://purl.org/dc/elements/1.1/title> "Mobile Stylesheet"@en-us .
|
15
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop> <http://cmx.org/spec/terms#parentalWarning> "unspecified"@en-us .
|
16
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop.xslt> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Encoding> .
|
17
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop.xslt> <http://cmx.org/spec/terms#format> "application/xslt+xml"@en-us .
|
18
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop.xslt> <http://purl.org/dc/elements/1.1/title> "Mobile Stylesheet"@en-us .
|
19
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop.xslt> <http://cmx.org/spec/terms#payloadHash> "e06f397e1340b9fa4793412d818e4ebf"@en-us .
|
20
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop> <http://cmx.org/spec/terms#encoding> <http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop.xslt> .
|
21
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#xslt> <http://localhost:3000/releases/Matchbox%20Twenty-ep/stylesheets/desktop> .
|
22
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
23
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#displayArtist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
24
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
25
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#keyName> "Matchbox Twenty"@en-us .
|
26
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#issued> "2008-05-28T15:15:00Z"@en-us .
|
27
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://purl.org/dc/elements/1.1/title> "Matchbox Twenty"@en-us .
|
28
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#expires> "2008-05-28T15:15:00Z"@en-us .
|
29
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#member> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
30
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#member> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Kyle%20Cook> .
|
31
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#member> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Brian%20Yale> .
|
32
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> <http://cmx.org/spec/terms#member> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Paul%20Doucette> .
|
33
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
34
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
35
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> <http://cmx.org/spec/terms#keyName> "Thomas"@en-us .
|
36
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> <http://purl.org/dc/elements/1.1/title> "Rob Thomas"@en-us .
|
37
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> <http://cmx.org/spec/terms#namesBeforeKeyName> "Rob"@en-us .
|
38
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
39
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Brian%20Yale> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
40
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Brian%20Yale> <http://cmx.org/spec/terms#keyName> "Yale"@en-us .
|
41
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Brian%20Yale> <http://purl.org/dc/elements/1.1/title> "Brian Yale"@en-us .
|
42
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Brian%20Yale> <http://cmx.org/spec/terms#namesBeforeKeyName> "Brian"@en-us .
|
43
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Brian%20Yale> .
|
44
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Kyle%20Cook> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
45
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Kyle%20Cook> <http://cmx.org/spec/terms#keyName> "Cook"@en-us .
|
46
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Kyle%20Cook> <http://purl.org/dc/elements/1.1/title> "Kyle Cook"@en-us .
|
47
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Kyle%20Cook> <http://cmx.org/spec/terms#namesBeforeKeyName> "Kyle"@en-us .
|
48
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Kyle%20Cook> .
|
49
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Paul%20Doucette> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
50
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Paul%20Doucette> <http://cmx.org/spec/terms#keyName> "Doucette"@en-us .
|
51
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Paul%20Doucette> <http://purl.org/dc/elements/1.1/title> "Paul Doucette"@en-us .
|
52
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Paul%20Doucette> <http://cmx.org/spec/terms#namesBeforeKeyName> "Paul"@en-us .
|
53
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Paul%20Doucette> .
|
54
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Mick%20Jagger> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
55
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Mick%20Jagger> <http://cmx.org/spec/terms#keyName> "Jagger"@en-us .
|
56
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Mick%20Jagger> <http://purl.org/dc/elements/1.1/title> "Mick Jagger"@en-us .
|
57
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Mick%20Jagger> <http://cmx.org/spec/terms#namesBeforeKeyName> "Mick"@en-us .
|
58
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Mick%20Jagger> .
|
59
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Serletic> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
60
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Serletic> <http://cmx.org/spec/terms#keyName> "Serletic"@en-us .
|
61
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Serletic> <http://purl.org/dc/elements/1.1/title> "Matt Serletic"@en-us .
|
62
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Serletic> <http://cmx.org/spec/terms#namesBeforeKeyName> "Matt"@en-us .
|
63
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Serletic> .
|
64
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Steve%20Lilywhite> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
65
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Steve%20Lilywhite> <http://cmx.org/spec/terms#keyName> "Lilywhite"@en-us .
|
66
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Steve%20Lilywhite> <http://purl.org/dc/elements/1.1/title> "Steve Lilywhite"@en-us .
|
67
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Steve%20Lilywhite> <http://cmx.org/spec/terms#namesBeforeKeyName> "Steve"@en-us .
|
68
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Steve%20Lilywhite> .
|
69
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Atlantic> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
70
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Atlantic> <http://cmx.org/spec/terms#keyName> "Atlantic"@en-us .
|
71
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Atlantic> <http://purl.org/dc/elements/1.1/title> "Atlantic"@en-us .
|
72
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Atlantic> .
|
73
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Ryan%20MacMillan> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
74
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Ryan%20MacMillan> <http://cmx.org/spec/terms#keyName> "MacMillan"@en-us .
|
75
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Ryan%20MacMillan> <http://purl.org/dc/elements/1.1/title> "Ryan MacMillan"@en-us .
|
76
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Ryan%20MacMillan> <http://cmx.org/spec/terms#namesBeforeKeyName> "Ryan"@en-us .
|
77
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Ryan%20MacMillan> .
|
78
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Beck> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Contributor> .
|
79
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Beck> <http://cmx.org/spec/terms#keyName> "Beck"@en-us .
|
80
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Beck> <http://purl.org/dc/elements/1.1/title> "Matt Beck"@en-us .
|
81
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Beck> <http://cmx.org/spec/terms#namesBeforeKeyName> "Matt"@en-us .
|
82
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#releaseContributor> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matt%20Beck> .
|
83
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Creation> .
|
84
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:02Z"@en-us .
|
85
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#rights> "2002 Bidnis, Inc./EMI Blackwood Music, Inc. (BMI), Jagged Music (ASCAP)"@en-us .
|
86
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#iswc> "urn:ISWC:T-000000363-1"@en-us .
|
87
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://purl.org/dc/elements/1.1/title> "Disease"@en-us .
|
88
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#composerLyricist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
89
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#composerLyricist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Mick%20Jagger> .
|
90
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
91
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:02Z"@en-us .
|
92
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> <http://purl.org/dc/elements/1.1/title> "Disease"@en-us .
|
93
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
94
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> <http://cmx.org/spec/terms#mainArtist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
95
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/Disease> .
|
96
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease> .
|
97
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
98
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:10Z"@en-us .
|
99
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> <http://purl.org/dc/elements/1.1/title> "Disease (Acoustic)"@en-us .
|
100
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
101
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> <http://cmx.org/spec/terms#performer> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
102
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/Disease%20%28Acoustic%29> .
|
103
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Disease%20%28Acoustic%29> .
|
104
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creation> <http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Disease> .
|
105
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Creation> .
|
106
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:03Z"@en-us .
|
107
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://cmx.org/spec/terms#rights> "2000 EMI Blackwood Music, Inc./Bidnis, Inc. (BMI)"@en-us .
|
108
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://cmx.org/spec/terms#iswc> "urn:ISWC:T-000000371-1"@en-us .
|
109
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://purl.org/dc/elements/1.1/title> "If You're Gone"@en-us .
|
110
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://cmx.org/spec/terms#composerLyricist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
111
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
112
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:03Z"@en-us .
|
113
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> <http://purl.org/dc/elements/1.1/title> "If You're Gone"@en-us .
|
114
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
115
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> <http://cmx.org/spec/terms#mainArtist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
116
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/If%20You%27re%20Gone> .
|
117
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone> .
|
118
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
119
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:11Z"@en-us .
|
120
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> <http://purl.org/dc/elements/1.1/title> "If You're Gone (Live)"@en-us .
|
121
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
122
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> <http://cmx.org/spec/terms#performer> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
123
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/If%20You%27re%20Gone%20%28Live%29> .
|
124
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/If%20You%27re%20Gone%20%28Live%29> .
|
125
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creation> <http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/If%20You%27re%20Gone> .
|
126
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Creation> .
|
127
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:06Z"@en-us .
|
128
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://cmx.org/spec/terms#rights> "1996 EMI Blackwood Music, Inc. (BMI)"@en-us .
|
129
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://cmx.org/spec/terms#iswc> "urn:ISWC:T-000000391-1"@en-us .
|
130
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://purl.org/dc/elements/1.1/title> "Push"@en-us .
|
131
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://cmx.org/spec/terms#composerLyricist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
132
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
133
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:06Z"@en-us .
|
134
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> <http://purl.org/dc/elements/1.1/title> "Push"@en-us .
|
135
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
136
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> <http://cmx.org/spec/terms#mainArtist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
137
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/Push> .
|
138
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push> .
|
139
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
140
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:11Z"@en-us .
|
141
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> <http://purl.org/dc/elements/1.1/title> "Push (Live)"@en-us .
|
142
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
143
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> <http://cmx.org/spec/terms#performer> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
144
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/Push%20%28Live%29> .
|
145
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Push%20%28Live%29> .
|
146
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creation> <http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Push> .
|
147
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Creation> .
|
148
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#issued> "2008-05-27T18:59:00Z"@en-us .
|
149
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#creationDate> "2008-05-27T18:59:00Z"@en-us .
|
150
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#iswc> "urn:ISWC:T-000000442-1"@en-us .
|
151
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://purl.org/dc/elements/1.1/title> "All I Need"@en-us .
|
152
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#expires> "2008-05-27T18:59:00Z"@en-us .
|
153
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#composerLyricist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
154
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
155
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://cmx.org/spec/terms#issued> "2008-05-27T18:57:00Z"@en-us .
|
156
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:12:00Z"@en-us .
|
157
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://purl.org/dc/elements/1.1/title> "All I Need"@en-us .
|
158
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://cmx.org/spec/terms#expires> "2008-05-27T18:57:00Z"@en-us .
|
159
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
160
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://cmx.org/spec/terms#performer> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
161
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/All%20I%20Need> .
|
162
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need> .
|
163
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
164
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:11Z"@en-us .
|
165
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> <http://purl.org/dc/elements/1.1/title> "All I Need (Live)"@en-us .
|
166
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
167
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> <http://cmx.org/spec/terms#performer> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
168
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/All%20I%20Need%20%28Live%29> .
|
169
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/All%20I%20Need%20%28Live%29> .
|
170
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creation> <http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/All%20I%20Need> .
|
171
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Creation> .
|
172
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> <http://cmx.org/spec/terms#creationDate> "2008-05-28T16:53:42Z"@en-us .
|
173
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> <http://cmx.org/spec/terms#iswc> "urn:ISWC:T-000000589-1"@en-us .
|
174
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> <http://purl.org/dc/elements/1.1/title> "Suffer Me"@en-us .
|
175
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> <http://cmx.org/spec/terms#composerLyricist> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Rob%20Thomas> .
|
176
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
177
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> <http://cmx.org/spec/terms#creationDate> "2008-05-27T00:13:09Z"@en-us .
|
178
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> <http://purl.org/dc/elements/1.1/title> "Suffer Me"@en-us .
|
179
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> <http://cmx.org/spec/terms#genre> "Alternative Rock"@en-us .
|
180
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> <http://cmx.org/spec/terms#performer> <http://localhost:3000/releases/Matchbox%20Twenty-ep/contributors/Matchbox%20Twenty> .
|
181
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/audio/Suffer%20Me> .
|
182
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/Suffer%20Me> .
|
183
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creation> <http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/Suffer%20Me> .
|
184
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/075678370120> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Creation> .
|
185
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/075678370120> <http://cmx.org/spec/terms#creationDate> "2008-06-16T05:13:19Z"@en-us .
|
186
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/075678370120> <http://cmx.org/spec/terms#iswc> "urn:ISWC:T-000000612-1"@en-us .
|
187
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/075678370120> <http://purl.org/dc/elements/1.1/title> "075678370120"@en-us .
|
188
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/075678370120> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#Production> .
|
189
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/075678370120> <http://cmx.org/spec/terms#creationDate> "2008-06-16T05:13:20Z"@en-us .
|
190
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/075678370120> <http://purl.org/dc/elements/1.1/title> "075678370120"@en-us .
|
191
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/075678370120> <http://cmx.org/spec/terms#embodiment> <http://localhost:3000/releases/Matchbox%20Twenty-ep/image/075678370120> .
|
192
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/075678370120> <http://cmx.org/spec/terms#realization> <http://localhost:3000/releases/Matchbox%20Twenty-ep/productions/075678370120> .
|
193
|
+
<http://localhost:3000/releases/Matchbox%20Twenty-ep> <http://cmx.org/spec/terms#creation> <http://localhost:3000/releases/Matchbox%20Twenty-ep/creations/075678370120> .
|
194
|
+
_:bn1262559423262d <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://cmx.org/spec/terms#photoAlbum> .
|
data/lib/rdf_context.rb
CHANGED
@@ -15,7 +15,7 @@ rescue LoadError
|
|
15
15
|
require 'treetop'
|
16
16
|
end
|
17
17
|
|
18
|
-
Dir.glob(File.join(File.dirname(__FILE__), 'rdf_context/**.rb')).each { |f| require f }
|
18
|
+
Dir.glob(File.join(File.dirname(__FILE__), 'rdf_context/**.rb')).sort.each { |f| require f }
|
19
19
|
|
20
20
|
# Include Storage types, but be tollerant of failure to load as dependencies might not be available
|
21
21
|
Dir.glob(File.join(File.dirname(__FILE__), "rdf_context/store/**.rb")).each do |f|
|
data/lib/rdf_context/bnode.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require File.join(File.dirname(__FILE__), "graph
|
1
|
+
require File.join(File.dirname(__FILE__), "graph")
|
2
2
|
|
3
3
|
module RdfContext
|
4
4
|
# ConjunctiveGraph - The top level container for all named Graphs sharing a _Store_
|
@@ -28,6 +28,20 @@ module RdfContext
|
|
28
28
|
@@default_context = Graph.new(:identifier => @store.identifier, :store => @store)
|
29
29
|
end
|
30
30
|
|
31
|
+
# Contexts contained within the store
|
32
|
+
def contexts
|
33
|
+
@store.contexts
|
34
|
+
end
|
35
|
+
|
36
|
+
# Triples across all contexts in store, optionally matching subject, predicate, or object.
|
37
|
+
# Delegates to Store#triples.
|
38
|
+
#
|
39
|
+
# @param [Triple, nil] triple:: Triple to match, may be a patern triple or nil
|
40
|
+
# @return [Array]:: List of matched triples
|
41
|
+
def triples(triple = Triple.new(nil, nil, nil), &block) # :yields: triple, context
|
42
|
+
@store.triples(triple, nil, &block) || []
|
43
|
+
end
|
44
|
+
|
31
45
|
# Parse source into a new context.
|
32
46
|
#
|
33
47
|
# Create a new context (Graph) and parse into that.
|
data/lib/rdf_context/graph.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'namespace')
|
2
|
+
require File.join(File.dirname(__FILE__), 'triple')
|
1
3
|
require File.join(File.dirname(__FILE__), 'store', 'list_store')
|
2
4
|
require File.join(File.dirname(__FILE__), 'store', 'memory_store')
|
3
5
|
|
@@ -26,7 +28,7 @@ module RdfContext
|
|
26
28
|
# For more on named graphs, see: http://en.wikipedia.org/wiki/RDFLib
|
27
29
|
#
|
28
30
|
# @param [Hash] options:: Options
|
29
|
-
# <em>options[:store]</em>:: storage, defaults to a new ListStore instance
|
31
|
+
# <em>options[:store]</em>:: storage, defaults to a new ListStore instance. May be symbol :list_store or :memory_store
|
30
32
|
# <em>options[:identifier]</em>:: Identifier for this graph, Literal, BNode or URIRef
|
31
33
|
def initialize(options = {})
|
32
34
|
@nsbinding = {}
|
@@ -39,7 +41,7 @@ module RdfContext
|
|
39
41
|
else ListStore.new
|
40
42
|
end
|
41
43
|
|
42
|
-
@identifier = options[:identifier] || BNode.new
|
44
|
+
@identifier = Triple.coerce_subject(options[:identifier]) || BNode.new
|
43
45
|
end
|
44
46
|
|
45
47
|
def inspect
|
@@ -129,7 +131,7 @@ module RdfContext
|
|
129
131
|
tmp_ns = tmp_ns.succ
|
130
132
|
end
|
131
133
|
end
|
132
|
-
|
134
|
+
|
133
135
|
xml.instruct!
|
134
136
|
xml.rdf(:RDF, rdf_attrs) do
|
135
137
|
# Add statements for each subject
|
@@ -137,11 +139,12 @@ module RdfContext
|
|
137
139
|
xml.rdf(:Description, (s.is_a?(BNode) ? "rdf:nodeID" : "rdf:about") => s) do
|
138
140
|
triples(Triple.new(s, nil, nil)) do |triple, context|
|
139
141
|
xml_args = triple.object.xml_args
|
142
|
+
qname = triple.predicate.to_qname(uri_bindings)
|
140
143
|
if triple.object.is_a?(Literal) && triple.object.xmlliteral?
|
141
144
|
replace_text["__replace_with_#{triple.object.object_id}__"] = xml_args[0]
|
142
145
|
xml_args[0] = "__replace_with_#{triple.object.object_id}__"
|
143
146
|
end
|
144
|
-
xml.tag!(
|
147
|
+
xml.tag!(qname, *xml_args)
|
145
148
|
end
|
146
149
|
end
|
147
150
|
end
|
@@ -168,6 +171,9 @@ module RdfContext
|
|
168
171
|
@store.bind(namespace)
|
169
172
|
end
|
170
173
|
|
174
|
+
# List of namespace bindings, as a hash
|
175
|
+
def nsbinding; @store.nsbinding; end
|
176
|
+
|
171
177
|
# Namespace for prefix
|
172
178
|
def namespace(prefix); @store.namespace(prefix); end
|
173
179
|
|
@@ -325,20 +331,20 @@ module RdfContext
|
|
325
331
|
end
|
326
332
|
|
327
333
|
alias_method :==, :eql?
|
328
|
-
end
|
329
334
|
|
330
|
-
|
331
|
-
|
332
|
-
|
333
|
-
|
334
|
-
|
335
|
-
|
336
|
-
|
337
|
-
|
338
|
-
|
339
|
-
|
340
|
-
|
341
|
-
|
342
|
-
|
335
|
+
# Parse source into Graph.
|
336
|
+
#
|
337
|
+
# Merges results into a common Graph
|
338
|
+
#
|
339
|
+
# @param [IO, String] stream:: the RDF IO stream, string, Nokogiri::HTML::Document or Nokogiri::XML::Document
|
340
|
+
# @param [String] uri:: the URI of the document
|
341
|
+
# @param [Hash] options:: Options from
|
342
|
+
# <em>options[:debug]</em>:: Array to place debug messages
|
343
|
+
# <em>options[:type]</em>:: One of _rdfxml_, _html_, or _n3_
|
344
|
+
# <em>options[:strict]</em>:: Raise Error if true, continue with lax parsing, otherwise
|
345
|
+
# @return [Graph]:: Returns the graph containing parsed triples
|
346
|
+
def parse(stream, uri, options = {}, &block) # :yields: triple
|
347
|
+
Parser.parse(stream, uri, options.merge(:graph => self), &block)
|
348
|
+
end
|
343
349
|
end
|
344
350
|
end
|
data/lib/rdf_context/parser.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'graph')
|
2
|
+
|
1
3
|
module RdfContext
|
2
4
|
# Generic RdfContext Parser class
|
3
5
|
class Parser
|
@@ -48,6 +50,13 @@ module RdfContext
|
|
48
50
|
# @raise [Error]:: Raises RdfError if _strict_
|
49
51
|
def parse(stream, uri = nil, options = {}, &block) # :yields: triple
|
50
52
|
if self.class == Parser
|
53
|
+
|
54
|
+
options[:strict] ||= @strict if @strict
|
55
|
+
options[:graph] ||= @graph if @graph
|
56
|
+
options[:debug] ||= @debug if @debug
|
57
|
+
# Intuit type, if not provided
|
58
|
+
options[:type] ||= detect_format(stream, uri)
|
59
|
+
|
51
60
|
# Create a delegate of a specific parser class
|
52
61
|
@delegate ||= case options[:type].to_s
|
53
62
|
when "n3", "ntriples", "turtle" then N3Parser.new(options)
|
@@ -68,6 +77,10 @@ module RdfContext
|
|
68
77
|
end
|
69
78
|
end
|
70
79
|
|
80
|
+
|
81
|
+
def graph; @delegate ? @delegate.graph : (@graph || Graph.new); end
|
82
|
+
def debug; @delegate ? @delegate.debug : @debug; end
|
83
|
+
|
71
84
|
# Return N3 Parser instance
|
72
85
|
def self.n3_parser(options = {}); N3Parser.new(options); end
|
73
86
|
# Return RDF/XML Parser instance
|
@@ -75,6 +88,30 @@ module RdfContext
|
|
75
88
|
# Return Rdfa Parser instance
|
76
89
|
def self.rdfa_parser(options = {}); RdfaParser.new(options); end
|
77
90
|
|
91
|
+
# Heuristically detect the format of the uri
|
92
|
+
def detect_format(stream, uri = nil)
|
93
|
+
format = case uri.to_s
|
94
|
+
when /\.(rdf|xml)$/ then :rdfxml
|
95
|
+
when /\.(html|xhtml)$/ then :rdfa
|
96
|
+
when /\.(nt|n3|txt)$/ then :n3
|
97
|
+
else
|
98
|
+
# Got to look into the file to see
|
99
|
+
if stream.is_a?(IO)
|
100
|
+
stream.rewind
|
101
|
+
string = stream.read(1000)
|
102
|
+
stream.rewind
|
103
|
+
else
|
104
|
+
string = stream.to_s
|
105
|
+
end
|
106
|
+
case string
|
107
|
+
when /<\w+:RDF/ then :rdfxml
|
108
|
+
when /<RDF/ then :rdfxml
|
109
|
+
when /<html/i then :rdfa
|
110
|
+
else :n3
|
111
|
+
end
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
78
115
|
protected
|
79
116
|
# Figure out the document path, if it is a Nokogiri::XML::Element or Attribute
|
80
117
|
def node_path(node)
|
@@ -113,6 +150,7 @@ module RdfContext
|
|
113
150
|
triple
|
114
151
|
rescue RdfException => e
|
115
152
|
add_debug(node, "add_triple raised #{e.class}: #{e.message}")
|
153
|
+
puts e.backtrace if $DEBUG
|
116
154
|
raise if @strict
|
117
155
|
end
|
118
156
|
end
|
@@ -65,7 +65,7 @@ module RdfContext
|
|
65
65
|
@doc = case stream
|
66
66
|
when Nokogiri::HTML::Document then stream
|
67
67
|
when Nokogiri::XML::Document then stream
|
68
|
-
else Nokogiri::XML.parse(stream, uri)
|
68
|
+
else Nokogiri::XML.parse(stream, uri.to_s)
|
69
69
|
end
|
70
70
|
|
71
71
|
raise ParserException, "Empty document" if @doc.nil? && @strict
|
@@ -113,12 +113,12 @@ module RdfContext
|
|
113
113
|
|
114
114
|
@doc = case stream
|
115
115
|
when Nokogiri::XML::Document then stream
|
116
|
-
else Nokogiri::XML.parse(stream, uri)
|
116
|
+
else Nokogiri::XML.parse(stream, uri.to_s)
|
117
117
|
end
|
118
118
|
|
119
119
|
@id_mapping = Hash.new
|
120
120
|
|
121
|
-
raise ParserException, "Empty document" if @doc.nil?
|
121
|
+
raise ParserException, "Empty document" if @doc.nil? || @doc.root.nil?
|
122
122
|
@callback = block
|
123
123
|
|
124
124
|
root = @doc.root
|
@@ -458,7 +458,6 @@ module RdfContext
|
|
458
458
|
QUOTED_PARTITION
|
459
459
|
]
|
460
460
|
]
|
461
|
-
q=unionSELECT(selects, :distinct => true, :select_type => CONTEXT_SELECT)
|
462
461
|
else
|
463
462
|
selects = [
|
464
463
|
[
|
@@ -488,18 +487,19 @@ module RdfContext
|
|
488
487
|
]
|
489
488
|
end
|
490
489
|
|
491
|
-
results = []
|
492
490
|
q=unionSELECT(selects, :distinct => true, :select_type => CONTEXT_SELECT)
|
493
|
-
executeSQL(_normalizeSQLCmd(q), parameters) do |row|
|
491
|
+
executeSQL(_normalizeSQLCmd(q), parameters).map do |row|
|
494
492
|
id, termComb = row
|
495
493
|
|
496
494
|
termCombString = REVERSE_TERM_COMBINATIONS[termComb.to_i]
|
497
495
|
subjTerm, predTerm, objTerm, ctxTerm = termCombString.chars.to_a
|
498
496
|
|
499
497
|
graphKlass, idKlass = constructGraph(ctxTerm)
|
500
|
-
|
498
|
+
[graphKlass, idKlass.new(id)]
|
499
|
+
end.uniq.map do |gi|
|
500
|
+
graphKlass, id = gi
|
501
|
+
graphKlass.new(:store => self, :identifier => id)
|
501
502
|
end
|
502
|
-
results
|
503
503
|
end
|
504
504
|
|
505
505
|
# Namespace persistence interface implementation
|
@@ -508,34 +508,54 @@ module RdfContext
|
|
508
508
|
def bind(namespace)
|
509
509
|
executeSQL("INSERT INTO #{namespace_binds} VALUES (?, ?)", namespace.prefix, namespace.uri)
|
510
510
|
# May throw exception, should be handled in driver-specific class
|
511
|
-
|
511
|
+
|
512
|
+
@namespaceCache ||= {}
|
513
|
+
@namespaceUriCache ||= {}
|
514
|
+
@nsbinding = nil
|
515
|
+
@namespaceCache[namespace.prefix] = namespace
|
516
|
+
@namespaceUriCache[namespace.uri.to_s] = namespace.prefix
|
512
517
|
namespace
|
513
518
|
end
|
514
519
|
|
515
520
|
# Namespace for prefix
|
516
521
|
def namespace(prefix)
|
517
|
-
|
518
|
-
|
522
|
+
@namespaceCache ||= {}
|
523
|
+
@namespaceUriCache ||= {}
|
524
|
+
unless @namespaceCache.has_key?(prefix)
|
525
|
+
@namespaceCache[prefix] = nil
|
526
|
+
executeSQL("SELECT uri FROM #{namespace_binds} WHERE prefix=?", prefix) do |row|
|
527
|
+
@namespaceCache[prefix] = Namespace.new(row[0], prefix)
|
528
|
+
@namespaceUriCache[row[0].to_s] = prefix
|
529
|
+
end
|
519
530
|
end
|
520
|
-
|
531
|
+
@namespaceCache[prefix]
|
521
532
|
end
|
522
533
|
|
523
534
|
# Prefix for namespace
|
524
535
|
def prefix(namespace)
|
525
536
|
uri = namespace.is_a?(Namespace) ? namespace.uri.to_s : namespace
|
526
|
-
|
527
|
-
|
537
|
+
|
538
|
+
@namespaceCache ||= {}
|
539
|
+
@namespaceUriCache ||= {}
|
540
|
+
unless @namespaceUriCache.has_key?(uri.to_s)
|
541
|
+
@namespaceUriCache[uri.to_s] = nil
|
542
|
+
executeSQL("SELECT prefix FROM #{namespace_binds} WHERE uri=?", uri) do |row|
|
543
|
+
@namespaceUriCache[uri.to_s] = row[0]
|
544
|
+
end
|
528
545
|
end
|
529
|
-
|
546
|
+
@namespaceUriCache[uri.to_s]
|
530
547
|
end
|
531
548
|
|
532
549
|
# List of namespace bindings, as a hash
|
533
550
|
def nsbinding
|
534
|
-
|
535
|
-
|
536
|
-
|
551
|
+
unless @nsbinding.is_a?(Hash)
|
552
|
+
@nsbinding = {}
|
553
|
+
executeSQL("SELECT prefix, uri FROM #{namespace_binds}") do |row|
|
554
|
+
@nsbinding[row[0]] = Namespace.new(row[1], row[0])
|
555
|
+
end
|
556
|
+
@nsbinding
|
537
557
|
end
|
538
|
-
|
558
|
+
@nsbinding
|
539
559
|
end
|
540
560
|
|
541
561
|
# Transactional interfaces
|
@@ -572,11 +592,6 @@ module RdfContext
|
|
572
592
|
@db.execute(qStr, *params, &block)
|
573
593
|
end
|
574
594
|
|
575
|
-
# Escape backslashes and single quotes
|
576
|
-
def escapeQuotes(qstr)
|
577
|
-
qstr.nil? ? "" : qstr.gsub("\\","\\\\").gsub("'", "\\'")
|
578
|
-
end
|
579
|
-
|
580
595
|
# Normalize a SQL command before executing it. Commence unicode black magic
|
581
596
|
def _normalizeSQLCmd(cmd)
|
582
597
|
cmd # XXX
|
@@ -587,7 +602,7 @@ module RdfContext
|
|
587
602
|
def normalizeTerm(term)
|
588
603
|
case term
|
589
604
|
when Graph then normalizeTerm(term.identifier)
|
590
|
-
when Literal then
|
605
|
+
when Literal then term.to_s.rdf_escape
|
591
606
|
when URIRef then term.to_s.rdf_escape
|
592
607
|
when BNode then term.to_s
|
593
608
|
else term
|
@@ -737,7 +752,7 @@ module RdfContext
|
|
737
752
|
end
|
738
753
|
|
739
754
|
def buildLitLanguageClause(obj,tableName)
|
740
|
-
["#{tableName}.
|
755
|
+
["#{tableName}.objLanguage='#{obj.lang}'"] if obj.is_a?(Literal) && obj.lang
|
741
756
|
end
|
742
757
|
|
743
758
|
# Stubs for Clause Functions that are overridden by specific implementations (MySQL vs SQLite for instance)
|
@@ -837,7 +852,11 @@ module RdfContext
|
|
837
852
|
# when "F"
|
838
853
|
# @otherCache[[termType, termString]] ||= QuotedGraph(:identifier => URIRef(termString), :store => self)
|
839
854
|
when "B"
|
840
|
-
@bnodeCache[termString] ||=
|
855
|
+
@bnodeCache[termString] ||= begin
|
856
|
+
bn = BNode.new
|
857
|
+
bn.identifier = termString
|
858
|
+
bn
|
859
|
+
end
|
841
860
|
when "U"
|
842
861
|
@uriCache[termString] || URIRef.new(termString)
|
843
862
|
# when "V"
|
@@ -90,11 +90,6 @@ module RdfContext
|
|
90
90
|
|
91
91
|
protected
|
92
92
|
|
93
|
-
# Escape backslashes and single quotes
|
94
|
-
def escapeQuotes(qstr)
|
95
|
-
qstr.nil? ? "" : qstr.gsub("\\","\\\\").gsub("'", "\\'").gsub('"', '""')
|
96
|
-
end
|
97
|
-
|
98
93
|
# Where clase utility functions
|
99
94
|
def buildSubjClause(subject, tableName)
|
100
95
|
# case subject
|
@@ -167,15 +162,18 @@ module RdfContext
|
|
167
162
|
#@statement_cache[qStr] ||= @db.prepare(qStr)
|
168
163
|
@statement_cache[qStr] ||= qStr
|
169
164
|
|
170
|
-
puts "executeSQL: '#{qStr}', #{params.join(", ")}" if $DEBUG
|
165
|
+
puts "executeSQL: '#{qStr}', '#{params.join("', '")}'" if $DEBUG
|
171
166
|
if block_given?
|
172
167
|
@db.execute(@statement_cache[qStr], *params) do |row|
|
173
168
|
puts "executeSQL res: #{row.inspect}" if $DEBUG
|
174
169
|
yield(row)
|
175
170
|
end
|
176
171
|
else
|
172
|
+
puts "executeSQL no block given" if $DEBUG
|
177
173
|
@db.execute(@statement_cache[qStr], *params)
|
178
174
|
end
|
175
|
+
rescue SQLite3::SQLException => e
|
176
|
+
puts "SQL Exception (ignored): #{e.message}" if $DEBUG
|
179
177
|
end
|
180
178
|
|
181
179
|
CREATE_ASSERTED_STATEMENTS_TABLE = %(
|
data/lib/rdf_context/triple.rb
CHANGED
@@ -1,3 +1,7 @@
|
|
1
|
+
require File.join(File.dirname(__FILE__), 'bnode')
|
2
|
+
require File.join(File.dirname(__FILE__), 'literal')
|
3
|
+
require File.join(File.dirname(__FILE__), 'uriref')
|
4
|
+
|
1
5
|
module RdfContext
|
2
6
|
# An RDF Triple, or statement.
|
3
7
|
#
|
@@ -88,8 +92,8 @@ module RdfContext
|
|
88
92
|
subject
|
89
93
|
when nil
|
90
94
|
subject
|
91
|
-
when /^\w+:\/\/\S+/ # does it smell like a URI?
|
92
|
-
URIRef.new
|
95
|
+
when /^\w+:\/\/\S+/, /^file:\S+/ # does it smell like a URI?
|
96
|
+
URIRef.new(subject)
|
93
97
|
else
|
94
98
|
raise InvalidSubject, "Subject is not of a known class (#{subject.class}: #{subject.inspect})"
|
95
99
|
end
|
data/spec/graph_spec.rb
CHANGED
@@ -292,13 +292,11 @@ HERE
|
|
292
292
|
end
|
293
293
|
|
294
294
|
it "should output RDF/XML" do
|
295
|
-
rdfxml =
|
295
|
+
rdfxml = <<-HERE
|
296
296
|
<?xml version="1.0" encoding="UTF-8"?>
|
297
297
|
<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:xml="http://www.w3.org/XML/1998/namespace" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns:xhv="http://www.w3.org/1999/xhtml/vocab#">
|
298
298
|
<rdf:Description rdf:about="http://example.org/john">
|
299
299
|
<foaf:knows rdf:resource="http://example.org/jane"/>
|
300
|
-
</rdf:Description>
|
301
|
-
<rdf:Description rdf:about="http://example.org/john">
|
302
300
|
<foaf:knows rdf:resource="http://example.org/rick"/>
|
303
301
|
</rdf:Description>
|
304
302
|
<rdf:Description rdf:about="http://example.org/jane">
|
data/spec/matchers.rb
CHANGED
@@ -126,20 +126,21 @@ module Matchers
|
|
126
126
|
def matches?(actual)
|
127
127
|
@actual = actual
|
128
128
|
|
129
|
-
a =
|
130
|
-
e =
|
129
|
+
a = @actual.index("<") == 0 ? @actual : "<foo>#{@actual}</foo>"
|
130
|
+
e = @expected.index("<") == 0 ? @expected : "<foo>#{@expected}</foo>"
|
131
131
|
a_hash = ActiveSupport::XmlMini.parse(a)
|
132
132
|
e_hash = ActiveSupport::XmlMini.parse(e)
|
133
133
|
a_hash == e_hash
|
134
134
|
rescue
|
135
|
+
puts $!
|
135
136
|
@fault = $!.message
|
136
137
|
false
|
137
138
|
end
|
138
139
|
|
139
140
|
def failure_message_for_should
|
140
141
|
"#{@info + "\n" unless @info.empty?}" +
|
141
|
-
"#{@fault + "\n"
|
142
|
-
"Expected
|
142
|
+
"Fault: #{@fault + "\n" if @fault}" +
|
143
|
+
"Expected:#{@expected}\n" +
|
143
144
|
"Actual:#{@actual}"
|
144
145
|
end
|
145
146
|
end
|
data/spec/parser_spec.rb
CHANGED
@@ -25,5 +25,29 @@ describe "RDF Parser" do
|
|
25
25
|
graph[0].object.to_s.should == "Gregg Kellogg"
|
26
26
|
end
|
27
27
|
|
28
|
+
describe "File detection" do
|
29
|
+
subject { Parser.new }
|
30
|
+
{
|
31
|
+
"File with .rdf extension" => [nil, "foo.rdf", :rdfxml],
|
32
|
+
"File with .xml extension" => [nil, "foo.xml", :rdfxml],
|
33
|
+
"File with .html extension" => [nil, "foo.html", :rdfa],
|
34
|
+
"File with .xhtml extension" => [nil, "foo.xhtml", :rdfa],
|
35
|
+
"File with .nt extension" => [nil, "foo.nt", :n3],
|
36
|
+
"File with .n3 extension" => [nil, "foo.n3", :n3],
|
37
|
+
"File with .txt extension" => [nil, "foo.txt", :n3],
|
38
|
+
"File with rdf:RDF content" => ["<rdf:RDF", "foo", :rdfxml],
|
39
|
+
"File with foo:RDF content" => ["<foo:RDF", "foo", :rdfxml],
|
40
|
+
"File with RDF content" => ["<RDF", "foo", :rdfxml],
|
41
|
+
"File with HTML content" => ["<HTML", "foo", :rdfa],
|
42
|
+
"File with html content" => ["<html", "foo", :rdfa],
|
43
|
+
"File with hTmL content" => ["<hTmL", "foo", :rdfa],
|
44
|
+
"File with nt content" => ["<http::/foo> _:bar \"1\" .", "foo", :n3],
|
45
|
+
}.each_pair do |what, args|
|
46
|
+
it "should detect format of #{what}" do
|
47
|
+
type = args.pop
|
48
|
+
subject.detect_format(*args).should == type
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
28
52
|
end
|
29
53
|
|
data/spec/rdfa_helper.rb
CHANGED
@@ -36,7 +36,7 @@ module RdfaHelper
|
|
36
36
|
next if statement.subject.is_a?(BNode)
|
37
37
|
#next unless statement.subject.uri.to_s.match(/0001/)
|
38
38
|
unless self.about
|
39
|
-
self.about = URI.parse(statement.subject.uri.to_s)
|
39
|
+
self.about = Addressable::URI.parse(statement.subject.uri.to_s)
|
40
40
|
self.name = statement.subject.short_name
|
41
41
|
end
|
42
42
|
|
data/spec/store_helper.rb
CHANGED
@@ -162,6 +162,34 @@ shared_examples_for "Store" do
|
|
162
162
|
end
|
163
163
|
end
|
164
164
|
|
165
|
+
describe "triple round-trip" do
|
166
|
+
{
|
167
|
+
"UUU" => Triple.new(RDF_NS.a, RDF_NS.b, RDF_NS.c),
|
168
|
+
"UUB" => Triple.new(RDF_NS.a, RDF_NS.b, BNode.new),
|
169
|
+
"UUBn" => Triple.new(RDF_NS.a, RDF_NS.b, BNode.new("foo")),
|
170
|
+
"BUU" => Triple.new(BNode.new, RDF_NS.b, RDF_NS.c),
|
171
|
+
"BUB" => Triple.new(BNode.new, RDF_NS.b, BNode.new),
|
172
|
+
"untyped" => Triple.new(RDF_NS.a, RDF_NS.b, "Gregg"),
|
173
|
+
"int" => Triple.new(RDF_NS.a, RDF_NS.b, 1),
|
174
|
+
"float" => Triple.new(RDF_NS.a, RDF_NS.b, 1.1),
|
175
|
+
"xml" => Triple.new(RDF_NS.a, RDF_NS.b,
|
176
|
+
Literal.typed("foo <sup <sup xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:rdf=\"http://www.w3.org/1999/02/22-rdf-syntax-ns#\">bar</sup> baz!", "http://www.w3.org/1999/02/22-rdf-syntax-ns#XMLLiteral")),
|
177
|
+
"Dürst" => Triple.new(RDF_NS.a, RDF_NS.b, Literal.untyped("Dürst")),
|
178
|
+
"lang" => Triple.new(RDF_NS.a, RDF_NS.b, Literal.untyped("Gregg", "de-ch")),
|
179
|
+
"backslash:\\" => Triple.new(RDF_NS.a, RDF_NS.b, "backslash:\\"),
|
180
|
+
"dquote:\"" => Triple.new(RDF_NS.a, RDF_NS.b, "dquote:\""),
|
181
|
+
"newline:\n" => Triple.new(RDF_NS.a, RDF_NS.b, "newline:\n"),
|
182
|
+
"return:\r" => Triple.new(RDF_NS.a, RDF_NS.b, "return:\r"),
|
183
|
+
"tab:\t" => Triple.new(RDF_NS.a, RDF_NS.b, "tab:\t"),
|
184
|
+
}.each_pair do |desc, triple|
|
185
|
+
it "should retrieve #{desc}" do
|
186
|
+
subject.add(triple, nil)
|
187
|
+
subject.triples(triple, nil).should include(triple)
|
188
|
+
#subject.triples(Triple.new(nil, nil, nil), nil).should include(triple)
|
189
|
+
end
|
190
|
+
end
|
191
|
+
end
|
192
|
+
|
165
193
|
it "should remove a triple" do
|
166
194
|
subject.add(Triple.new(@ex.john, RDF_TYPE, @foaf.Person), nil)
|
167
195
|
subject.size.should == 1
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: rdf_context
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gregg Kellogg
|
@@ -9,7 +9,7 @@ autorequire:
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2010-01-
|
12
|
+
date: 2010-01-08 00:00:00 -08:00
|
13
13
|
default_executable: rdf_context
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|
@@ -101,6 +101,8 @@ files:
|
|
101
101
|
- Rakefile
|
102
102
|
- VERSION
|
103
103
|
- bin/rdf_context
|
104
|
+
- cmx.db
|
105
|
+
- ep.nt
|
104
106
|
- lib/rdf_context.rb
|
105
107
|
- lib/rdf_context/bnode.rb
|
106
108
|
- lib/rdf_context/conjunctive_graph.rb
|