reddy 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (69) hide show
  1. data/HACKNOTES +2 -0
  2. data/History.txt +3 -0
  3. data/Manifest.txt +80 -0
  4. data/README.rdoc +48 -0
  5. data/README.txt +62 -0
  6. data/Rakefile +67 -0
  7. data/lib/reddy.rb +8 -0
  8. data/lib/reddy/bnode.rb +70 -0
  9. data/lib/reddy/exceptions/about_each_exception.rb +2 -0
  10. data/lib/reddy/exceptions/uri_relative_exception.rb +2 -0
  11. data/lib/reddy/graph.rb +182 -0
  12. data/lib/reddy/libxml_hacks.rb +6 -0
  13. data/lib/reddy/literal.rb +211 -0
  14. data/lib/reddy/n3_grammar.treetop +129 -0
  15. data/lib/reddy/n3parser.rb +145 -0
  16. data/lib/reddy/namespace.rb +73 -0
  17. data/lib/reddy/rdfaparser.rb +63 -0
  18. data/lib/reddy/rdfxmlparser.rb +254 -0
  19. data/lib/reddy/rexml_hacks.rb +97 -0
  20. data/lib/reddy/triple.rb +95 -0
  21. data/lib/reddy/uriref.rb +66 -0
  22. data/reddy.gemspec +50 -0
  23. data/spec/bnode_spec.rb +29 -0
  24. data/spec/graph_spec.rb +138 -0
  25. data/spec/literal_spec.rb +142 -0
  26. data/spec/n3parser_spec.rb +86 -0
  27. data/spec/namespaces_spec.rb +44 -0
  28. data/spec/parser_spec.rb +391 -0
  29. data/spec/rdfa_parser_spec.rb +28 -0
  30. data/spec/rexml_hacks_spec.rb +99 -0
  31. data/spec/triple_spec.rb +108 -0
  32. data/spec/uriref_spec.rb +96 -0
  33. data/test/longtests_spec.rb +25 -0
  34. data/test/n3_tests/lcsh/sh85062913.n3 +41 -0
  35. data/test/n3_tests/lcsh/sh85062913.nt +21 -0
  36. data/test/n3_tests/lcsh/sh85082139.n3 +157 -0
  37. data/test/n3_tests/lcsh/sh85082139.nt +79 -0
  38. data/test/n3_tests/lcsh/sh85118553.n3 +123 -0
  39. data/test/n3_tests/lcsh/sh85118553.nt +63 -0
  40. data/test/n3_tests/misc/on_now-01.n3 +30 -0
  41. data/test/n3_tests/misc/on_now-01.nt +15 -0
  42. data/test/n3_tests/n3p/simple-01.n3 +1 -0
  43. data/test/n3_tests/n3p/simple-01.nt +0 -0
  44. data/test/n3_tests/n3p/simple-02.n3 +4 -0
  45. data/test/n3_tests/n3p/simple-02.nt +0 -0
  46. data/test/n3_tests/n3p/simple-03.n3 +5 -0
  47. data/test/n3_tests/n3p/simple-03.nt +1 -0
  48. data/test/n3_tests/n3p/simple-04.n3 +6 -0
  49. data/test/n3_tests/n3p/simple-04.nt +3 -0
  50. data/test/n3_tests/n3p/simple-05.n3 +7 -0
  51. data/test/n3_tests/n3p/simple-05.nt +2 -0
  52. data/test/n3_tests/n3p/simple-06.n3 +6 -0
  53. data/test/n3_tests/n3p/simple-06.nt +4 -0
  54. data/test/n3_tests/n3p/simple-07.n3 +7 -0
  55. data/test/n3_tests/n3p/simple-07.nt +6 -0
  56. data/test/perf_test/test.rb +11 -0
  57. data/test/perf_test/tommorris.rdf +2267 -0
  58. data/test/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.nt +24 -0
  59. data/test/rdf_tests/cc197bad-dc9c-440d-a5b5-d52ba2e14234.rdf +46 -0
  60. data/test/rdf_tests/tm_001.nt +1 -0
  61. data/test/rdf_tests/tm_001.rdf +7 -0
  62. data/test/rdf_tests/xml-literal-mixed.nt +7 -0
  63. data/test/rdf_tests/xml-literal-mixed.rdf +15 -0
  64. data/test/ruby_fundamentals.spec.rb +17 -0
  65. data/test/test_helper.rb +2 -0
  66. data/test/test_reddy.rb +11 -0
  67. data/test/test_uris.rb +13 -0
  68. data/test/xml.rdf +6 -0
  69. metadata +198 -0
@@ -0,0 +1,28 @@
1
+ require 'lib/reddy'
2
+
3
+ # Specification: http://www.w3.org/TR/rdfa-syntax/
4
+ # docs:
5
+ # - http://www.xml.com/pub/a/2007/02/14/introducing-rdfa.html
6
+ # - http://www.w3.org/TR/xhtml-rdfa-primer/
7
+ # W3C test suite: http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/
8
+
9
+ describe "RDFa parser" do
10
+ it "should be able to pass xhtml1-0001.xhtml" do
11
+ sampledoc = <<-EOF;
12
+ <?xml version="1.0" encoding="UTF-8"?>
13
+ <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
14
+ <html xmlns="http://www.w3.org/1999/xhtml"
15
+ xmlns:dc="http://purl.org/dc/elements/1.1/">
16
+ <head>
17
+ <title>Test 0001</title>
18
+ </head>
19
+ <body>
20
+ <p>This photo was taken by <span class="author" about="photo1.jpg" property="dc:creator">Mark Birbeck</span>.</p>
21
+ </body>
22
+ </html>
23
+ EOF
24
+
25
+ parser = RdfaParser.new(sampledoc, uri = "http://www.w3.org/2006/07/SWD/RDFa/testsuite/xhtml1-testcases/0001.xhtml")
26
+ parser.graph.size.should == 1
27
+ end
28
+ end
@@ -0,0 +1,99 @@
1
+ require 'lib/reddy'
2
+ require 'rexml/document'
3
+ #require 'lib/rexml_hacks'
4
+
5
+ describe "REXML" do
6
+ before do
7
+ string = <<-EOF;
8
+ <?xml version="1.0" ?>
9
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/" xml:lang="en" xml:base="http://example.org/">
10
+ <rdf:Description>
11
+ <foo>bar</foo>
12
+ <bar:bar xmlns:bar="http://foo.com/">foo</bar:bar>
13
+ <ex:ex>fap</ex:ex>
14
+ </rdf:Description>
15
+ </rdf:RDF>
16
+ EOF
17
+
18
+ @doc = REXML::Document.new(string)
19
+
20
+ string2 = <<-EOF;
21
+ <?xml version="1.0" ?>
22
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:ex="http://example.org/">
23
+ <rdf:Description>
24
+ <foo>bar</foo>
25
+ <bar:bar xmlns:bar="http://foo.com/">foo</bar:bar>
26
+ <ex:ex>fap</ex:ex>
27
+ </rdf:Description>
28
+ </rdf:RDF>
29
+ EOF
30
+ @doc2 = REXML::Document.new(string2)
31
+ end
32
+
33
+ it "should have support for xml:base" do
34
+ @doc.root.elements[1].base?.should == true
35
+ @doc.root.elements[1].base.should == "http://example.org/"
36
+ @doc2.root.elements[1].base?.should_not == true
37
+ @doc2.root.elements[1].base.should == nil
38
+ end
39
+
40
+ it "should have support for xml:lang" do
41
+ @doc.root.elements[1].lang?.should == true
42
+ @doc.root.elements[1].lang.should == "en"
43
+ @doc2.root.elements[1].lang?.should_not == true
44
+ @doc2.root.elements[1].lang.should == nil
45
+ end
46
+
47
+ it "should allow individual writing-out of XML" do
48
+ # puts @doc.root.elements[1].write
49
+
50
+ sampledoc = <<-EOF;
51
+ <?xml version="1.0"?>
52
+
53
+ <!--
54
+ Copyright World Wide Web Consortium, (Massachusetts Institute of
55
+ Technology, Institut National de Recherche en Informatique et en
56
+ Automatique, Keio University).
57
+
58
+ All Rights Reserved.
59
+
60
+ Please see the full Copyright clause at
61
+ <http://www.w3.org/Consortium/Legal/copyright-software.html>
62
+
63
+ Description: Visibly used namespaces must be included in XML
64
+ Literal values. Treatment of namespaces that are not
65
+ visibly used (e.g. rdf: in this example) is implementation
66
+ dependent. Based on example from Issues List.
67
+
68
+
69
+ $Id: test001.rdf,v 1.2 2002/11/22 13:52:15 jcarroll Exp $
70
+
71
+ -->
72
+ <rdf:RDF xmlns="http://www.w3.org/1999/xhtml"
73
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
74
+ xmlns:html="http://NoHTML.example.org"
75
+ xmlns:my="http://my.example.org/">
76
+ <rdf:Description rdf:ID="John_Smith">
77
+ <my:Name rdf:parseType="Literal">
78
+ <html:h1>
79
+ <b>John</b>
80
+ </html:h1>
81
+ </my:Name>
82
+
83
+ </rdf:Description>
84
+ </rdf:RDF>
85
+ EOF
86
+ doc2 = REXML::Document.new(sampledoc)
87
+ expectedoutput_str = "<html:h1 xmlns:html=\'http://NoHTML.example.org\' xmlns:my=\'http://my.example.org/\' xmlns:rdf=\'http://www.w3.org/1999/02/22-rdf-syntax-ns#\'>\n <b xmlns=\'http://www.w3.org/1999/xhtml\'>John</b>\n </html:h1>"
88
+ expectedout = REXML::Document.new(expectedoutput_str)
89
+ doc2.root.elements[1].elements[1].elements[1].write_reddy == expectedout.root
90
+
91
+ sampledoc3 = <<-EOF;
92
+ <?xml version="1.0"?><RDF xmlns="http://www.w3.org/1999/02/22-rdf-syntax-ns#"><Description><x:li xmlns:x="http://example.org/notRDF" /></Description></RDF>
93
+ EOF
94
+
95
+ doc3 = REXML::Document.new(sampledoc3)
96
+ out3 = REXML::Document.new(doc3.root.elements[1].write_reddy)
97
+ out3.root.class == REXML::Element
98
+ end
99
+ end
@@ -0,0 +1,108 @@
1
+ require 'lib/reddy'
2
+
3
+ describe "Triples" do
4
+ it "should have a subject" do
5
+ f = Triple.new(BNode.new, URIRef.new('http://xmlns.com/foaf/0.1/knows'), BNode.new)
6
+ f.subject.class.should == BNode
7
+ # puts f.to_ntriples
8
+ end
9
+
10
+ it "should require that the subject is a URIRef or BNode" do
11
+ lambda do
12
+ Triple.new(Literal.new("foo"), URIRef.new("http://xmlns.com/foaf/0.1/knows"), BNode.new)
13
+ end.should raise_error
14
+ end
15
+
16
+ it "should require that the predicate is a URIRef" do
17
+ lambda do
18
+ Triple.new(BNode.new, BNode.new, BNode.new)
19
+ end.should raise_error
20
+ end
21
+
22
+ it "should require that the object is a URIRef, BNode, Literal or Typed Literal" do
23
+ lambda do
24
+ Triple.new(BNode.new, URIRef.new("http://xmlns.com/foaf/0.1/knows"), [])
25
+ end.should raise_error
26
+ end
27
+
28
+ it "should emit an NTriple" do
29
+ s = URIRef.new("http://tommorris.org/foaf#me")
30
+ p = URIRef.new("http://xmlns.com/foaf/0.1/name")
31
+ o = Literal.untyped("Tom Morris")
32
+ f = Triple.new(s,p,o)
33
+
34
+ f.to_ntriples.should == "<http://tommorris.org/foaf#me> <http://xmlns.com/foaf/0.1/name> \"Tom Morris\" ."
35
+ end
36
+
37
+ describe "#coerce_subject" do
38
+ it "should accept a URIRef" do
39
+ ref = URIRef.new('http://localhost/')
40
+ Triple.coerce_subject(ref).should == ref
41
+ end
42
+
43
+ it "should accept a BNode" do
44
+ node = BNode.new('a')
45
+ Triple.coerce_subject(node).should == node
46
+ end
47
+
48
+ it "should accept a uri string and make URIRef" do
49
+ Triple.coerce_subject('http://localhost/').should == URIRef.new('http://localhost/')
50
+ end
51
+
52
+ it "should accept an Addressable::URI object and make URIRef" do
53
+ Triple.coerce_subject(Addressable::URI.parse("http://localhost/")).should == URIRef.new("http://localhost/")
54
+ end
55
+
56
+ it "should turn an other string into a BNode" do
57
+ Triple.coerce_subject('foo').should == BNode.new('foo')
58
+ end
59
+
60
+ it "should raise an InvalidSubject exception with any other class argument" do
61
+ lambda do
62
+ Triple.coerce_subject(Object.new)
63
+ end.should raise_error(Reddy::Triple::InvalidSubject)
64
+ end
65
+ end
66
+
67
+ describe "#coerce_predicate" do
68
+ it "should make a string into a URI ref" do
69
+ Triple.coerce_predicate("http://localhost/").should == URIRef.new('http://localhost/')
70
+ end
71
+
72
+ it "should leave a URIRef alone" do
73
+ ref = URIRef.new('http://localhost/')
74
+ Triple.coerce_predicate(ref).should == ref
75
+ end
76
+
77
+ it "should barf on an illegal uri string" do
78
+ lambda do
79
+ Triple.coerce_predicate("I'm just a soul whose intention is good")
80
+ end.should raise_error(Reddy::Triple::InvalidPredicate)
81
+ end
82
+ end
83
+
84
+ describe "#coerce_object" do
85
+ it "should leave URIRefs alone" do
86
+ ref = URIRef.new("http://localhost/")
87
+ Triple.coerce_object(ref).should == ref
88
+ end
89
+
90
+ it "should accept an Addressable::URI object and make URIRef" do
91
+ Triple.coerce_object(Addressable::URI.parse("http://localhost/")).should == URIRef.new("http://localhost/")
92
+ end
93
+
94
+ it "should leave BNodes alone" do
95
+ ref = BNode.new()
96
+ Triple.coerce_object(ref).should == ref
97
+ end
98
+
99
+ it "should leave Literals alone" do
100
+ ref = Literal.untyped('foo')
101
+ Triple.coerce_object(ref).should == ref
102
+
103
+ typedref = Literal.build_from('foo')
104
+ Triple.coerce_object(ref).should == ref
105
+ end
106
+
107
+ end
108
+ end
@@ -0,0 +1,96 @@
1
+ require 'webrick'
2
+ include WEBrick
3
+ require 'lib/reddy'
4
+ #require 'lib/uriref'
5
+
6
+ describe "URI References" do
7
+ it "should output NTriples" do
8
+ f = URIRef.new("http://tommorris.org/foaf/")
9
+ f.to_ntriples.should == "<http://tommorris.org/foaf/>"
10
+ end
11
+
12
+ it "should handle Unicode symbols inside URLs" do
13
+ lambda do
14
+ f = URIRef.new("http://example.org/#Andr%E9")
15
+ end.should_not raise_error
16
+ end
17
+
18
+ # it "do not contain any control characters (#x00 - #x1F, #x74-#x9F)" do
19
+ # lambda do
20
+ # f = URIRef.new("http://tommorris.org/blog/")
21
+ # f.test_string("http://tommorris.org/blog")
22
+ # end.should_not raise_error
23
+ #
24
+ # lambda do
25
+ # f = URIRef.new("http://xmlns.com/foaf/0.1/knows")
26
+ # f.test_string("http://xmlns.com/foaf/0.1/knows")
27
+ # end.should_not raise_error
28
+ # end
29
+
30
+ it "should return the 'last fragment' name" do
31
+ fragment = URIRef.new("http://example.org/foo#bar")
32
+ fragment.short_name.should == "bar"
33
+
34
+ path = URIRef.new("http://example.org/foo/bar")
35
+ path.short_name.should == "bar"
36
+
37
+ nonetest = URIRef.new("http://example.org/")
38
+ nonetest.short_name.should == false
39
+ end
40
+
41
+ it "produce a valid URI character sequence (per RFC 2396 §2.1) representing an absolute URI with optional fragment identifier" do
42
+ pending "TODO: figure out a series of tests for RFC 2396 §2.1 adherence"
43
+ end
44
+
45
+ it "should throw errors on suspicious protocols and non-protocols" do
46
+ lambda do
47
+ URIRef.new("javascript:alert(\"pass\")")
48
+ end.should raise_error
49
+ end
50
+
51
+ it "must not be a relative URI" do
52
+ lambda do
53
+ URIRef.new("foo")
54
+ end.should raise_error
55
+ end
56
+
57
+ it "should discourage use of %-escaped characters" do
58
+ pending "TODO: figure out a way to discourage %-escaped character usage"
59
+ end
60
+
61
+ it "should allow another URIRef to be added" do
62
+ uri = URIRef.new("http://example.org/") + "foo#bar"
63
+ uri.to_s.should == "http://example.org/foo#bar"
64
+ uri.class.should == URIRef
65
+
66
+ uri2 = URIRef.new("http://example.org/") + Addressable::URI.parse("foo#bar")
67
+ uri2.to_s.should == "http://example.org/foo#bar"
68
+ end
69
+
70
+ # TEST turned off until parser is working.
71
+ # it "should allow the programmer to Follow His Nose" do
72
+ # a = URIRef.new("http://127.0.0.1:3001/test")
73
+ #
74
+ # # server
75
+ # test_proc = lambda { |req, resp|
76
+ # resp['Content-Type'] = "application/rdf+xml"
77
+ # resp.body = <<-EOF;
78
+ # <?xml version="1.0" ?>
79
+ # <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
80
+ # <rdf:Description rdf:about="http://localhost:3001/test">
81
+ # <foaf:name>Testy McTest</foaf:name>
82
+ # </rdf:Description>
83
+ # </rdf:RDF>
84
+ # EOF
85
+ # }
86
+ # test = HTTPServlet::ProcHandler.new(test_proc)
87
+ # s = HTTPServer.new(:Port => 3001)
88
+ # s.mount("/test", test)
89
+ # trap("INT"){ s.shutdown }
90
+ # thread = Thread.new { s.start }
91
+ # graph = a.load_graph
92
+ # s.shutdown
93
+ # graph.class.should == Reddy::Graph
94
+ # graph.size.should == 1
95
+ # end
96
+ end
@@ -0,0 +1,25 @@
1
+ describe "Reddy library"
2
+ it "should allow the programmer to Follow His Nose" do
3
+ a = URIRef.new("http://127.0.0.1:3001/test")
4
+ test_proc = lambda { |req, resp|
5
+ resp['Content-Type'] = "application/rdf+xml"
6
+ resp.body = <<-EOF;
7
+ <?xml version="1.0" ?>
8
+ <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:foaf="http://xmlns.com/foaf/0.1/">
9
+ <rdf:Description rdf:about="http://localhost:3001/test">
10
+ <foaf:name>Testy McTest</foaf:name>
11
+ </rdf:Description>
12
+ </rdf:RDF>
13
+ EOF
14
+ }
15
+ test = HTTPServlet::ProcHandler.new(test_proc)
16
+ s = HTTPServer.new(:Port => 3001)
17
+ s.mount("/test", test)
18
+ trap("INT"){ s.shutdown }
19
+ thread = Thread.new { s.start }
20
+ graph = a.load_graph
21
+ s.shutdown
22
+ graph.class.should == Reddy::Graph
23
+ graph.size.should == 1
24
+ end
25
+ end
@@ -0,0 +1,41 @@
1
+
2
+ @prefix lcsh_10: <http://lcsh.info/sh85112589#>.
3
+ @prefix lcsh_11: <http://lcsh.info/sh85008324#>.
4
+ @prefix lcsh_12: <http://lcsh.info/sh85029102#>.
5
+ @prefix lcsh_13: <http://lcsh.info/sh85100849#>.
6
+ @prefix lcsh_14: <http://lcsh.info/sh85108488#>.
7
+ @prefix lcsh_15: <http://lcsh.info/sh85043208#>.
8
+ @prefix lcsh_16: <http://lcsh.info/sh85083186#>.
9
+ @prefix lcsh_17: <http://lcsh.info/sh85118626#>.
10
+ @prefix lcsh_18: <http://lcsh.info/sh85108398#>.
11
+ @prefix lcsh_19: <http://lcsh.info/sh85075529#>.
12
+ @prefix lcsh_20: <http://lcsh.info/sh85026700#>.
13
+ @prefix lcsh_6: <http://lcsh.info/sh85062913#>.
14
+ @prefix lcsh_7: <http://lcsh.info/sh96000718#>.
15
+ @prefix lcsh_8: <http://lcsh.info/sh91004532#>.
16
+ @prefix lcsh_9: <http://lcsh.info/sh91002683#>.
17
+ @prefix dcterms: <http://purl.org/dc/terms/>.
18
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
19
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#>.
20
+
21
+ lcsh_6:concept a skos:Concept;
22
+ dcterms:LCC "AZ";
23
+ dcterms:created "1986-02-11"^^<http://www.w3.org/2001/XMLSchema#date>;
24
+ dcterms:modified "2006-08-02T11:15:32"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
25
+ skos:broader lcsh_19:concept;
26
+ skos:inScheme <http://lcsh.info/>;
27
+ skos:narrower lcsh_11:concept,
28
+ lcsh_12:concept,
29
+ lcsh_15:concept,
30
+ lcsh_16:concept,
31
+ lcsh_13:concept,
32
+ lcsh_18:concept,
33
+ lcsh_14:concept,
34
+ lcsh_10:concept,
35
+ lcsh_17:concept,
36
+ lcsh_9:concept,
37
+ lcsh_8:concept,
38
+ lcsh_7:concept;
39
+ skos:prefLabel "Humanities"@en;
40
+ skos:related lcsh_20:concept;
41
+ skos:scopeNote "Here are entered works on the branches of learning regarded as having a cultural character, including literature, the arts, history, philosophy, religion, etc."@en.
@@ -0,0 +1,21 @@
1
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2004/02/skos/core#Concept> .
2
+ <http://lcsh.info/sh85062913#concept> <http://purl.org/dc/terms/LCC> "AZ" .
3
+ <http://lcsh.info/sh85062913#concept> <http://purl.org/dc/terms/created> "1986-02-11"^^<http://www.w3.org/2001/XMLSchema#date> .
4
+ <http://lcsh.info/sh85062913#concept> <http://purl.org/dc/terms/modified> "2006-08-02T11:15:32"^^<http://www.w3.org/2001/XMLSchema#dateTime> .
5
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#broader> <http://lcsh.info/sh85075529#concept> .
6
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#inScheme> <http://lcsh.info/> .
7
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85008324#concept> .
8
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85029102#concept> .
9
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85043208#concept> .
10
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85083186#concept> .
11
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85100849#concept> .
12
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85108398#concept> .
13
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85108488#concept> .
14
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85112589#concept> .
15
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh85118626#concept> .
16
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh91002683#concept> .
17
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh91004532#concept> .
18
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#narrower> <http://lcsh.info/sh96000718#concept> .
19
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#prefLabel> "Humanities"@en .
20
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#related> <http://lcsh.info/sh85026700#concept> .
21
+ <http://lcsh.info/sh85062913#concept> <http://www.w3.org/2004/02/skos/core#scopeNote> "Here are entered works on the branches of learning regarded as having a cultural character, including literature, the arts, history, philosophy, religion, etc."@en .
@@ -0,0 +1,157 @@
1
+
2
+ @prefix lcsh_10: <http://lcsh.info/sh85082365#>.
3
+ @prefix lcsh_11: <http://lcsh.info/sh85050839#>.
4
+ @prefix lcsh_12: <http://lcsh.info/sh85093228#>.
5
+ @prefix lcsh_13: <http://lcsh.info/sh85046844#>.
6
+ @prefix lcsh_14: <http://lcsh.info/sh85037299#>.
7
+ @prefix lcsh_15: <http://lcsh.info/sh85018308#>.
8
+ @prefix lcsh_16: <http://lcsh.info/sh85084442#>.
9
+ @prefix lcsh_17: <http://lcsh.info/sh85078115#>.
10
+ @prefix lcsh_18: <http://lcsh.info/sh85052941#>.
11
+ @prefix lcsh_19: <http://lcsh.info/sh85048251#>.
12
+ @prefix lcsh_20: <http://lcsh.info/sh85127551#>.
13
+ @prefix lcsh_21: <http://lcsh.info/sh85007163#>.
14
+ @prefix lcsh_22: <http://lcsh.info/sh85120237#>.
15
+ @prefix lcsh_23: <http://lcsh.info/sh85044510#>.
16
+ @prefix lcsh_24: <http://lcsh.info/sh85034914#>.
17
+ @prefix lcsh_25: <http://lcsh.info/sh85064861#>.
18
+ @prefix lcsh_26: <http://lcsh.info/sh85107377#>.
19
+ @prefix lcsh_27: <http://lcsh.info/sh85066296#>.
20
+ @prefix lcsh_28: <http://lcsh.info/sh85072381#>.
21
+ @prefix lcsh_29: <http://lcsh.info/sh85121771#>.
22
+ @prefix lcsh_30: <http://lcsh.info/sh85063720#>.
23
+ @prefix lcsh_31: <http://lcsh.info/sh2006005613#>.
24
+ @prefix lcsh_32: <http://lcsh.info/sh85003425#>.
25
+ @prefix lcsh_33: <http://lcsh.info/sh85067539#>.
26
+ @prefix lcsh_34: <http://lcsh.info/sh98004034#>.
27
+ @prefix lcsh_35: <http://lcsh.info/sh2006005417#>.
28
+ @prefix lcsh_36: <http://lcsh.info/sh85054133#>.
29
+ @prefix lcsh_37: <http://lcsh.info/sh85036222#>.
30
+ @prefix lcsh_38: <http://lcsh.info/sh85137519#>.
31
+ @prefix lcsh_39: <http://lcsh.info/sh85082181#>.
32
+ @prefix lcsh_40: <http://lcsh.info/sh85093229#>.
33
+ @prefix lcsh_41: <http://lcsh.info/sh85031123#>.
34
+ @prefix lcsh_42: <http://lcsh.info/sh85038555#>.
35
+ @prefix lcsh_43: <http://lcsh.info/sh85008822#>.
36
+ @prefix lcsh_44: <http://lcsh.info/sh85092418#>.
37
+ @prefix lcsh_45: <http://lcsh.info/sh85120387#>.
38
+ @prefix lcsh_46: <http://lcsh.info/sh85052327#>.
39
+ @prefix lcsh_47: <http://lcsh.info/sh85048025#>.
40
+ @prefix lcsh_48: <http://lcsh.info/sh85111827#>.
41
+ @prefix lcsh_49: <http://lcsh.info/sh85120145#>.
42
+ @prefix lcsh_50: <http://lcsh.info/sh85058939#>.
43
+ @prefix lcsh_51: <http://lcsh.info/sh85053967#>.
44
+ @prefix lcsh_52: <http://lcsh.info/sh85031124#>.
45
+ @prefix lcsh_53: <http://lcsh.info/sh85065806#>.
46
+ @prefix lcsh_54: <http://lcsh.info/sh85032235#>.
47
+ @prefix lcsh_55: <http://lcsh.info/sh85065324#>.
48
+ @prefix lcsh_56: <http://lcsh.info/sh85014083#>.
49
+ @prefix lcsh_57: <http://lcsh.info/sh2003001099#>.
50
+ @prefix lcsh_58: <http://lcsh.info/sh95005230#>.
51
+ @prefix lcsh_59: <http://lcsh.info/sh85147590#>.
52
+ @prefix lcsh_6: <http://lcsh.info/sh85082139#>.
53
+ @prefix lcsh_60: <http://lcsh.info/sh85031122#>.
54
+ @prefix lcsh_61: <http://lcsh.info/sh85075570#>.
55
+ @prefix lcsh_62: <http://lcsh.info/sh85014235#>.
56
+ @prefix lcsh_63: <http://lcsh.info/sh85051099#>.
57
+ @prefix lcsh_64: <http://lcsh.info/sh85056481#>.
58
+ @prefix lcsh_65: <http://lcsh.info/sh85107090#>.
59
+ @prefix lcsh_66: <http://lcsh.info/sh85040869#>.
60
+ @prefix lcsh_67: <http://lcsh.info/sh85009562#>.
61
+ @prefix lcsh_68: <http://lcsh.info/sh85051148#>.
62
+ @prefix lcsh_69: <http://lcsh.info/sh85067656#>.
63
+ @prefix lcsh_7: <http://lcsh.info/sh85148106#>.
64
+ @prefix lcsh_70: <http://lcsh.info/sh85010589#>.
65
+ @prefix lcsh_71: <http://lcsh.info/sh85142449#>.
66
+ @prefix lcsh_72: <http://lcsh.info/sh85082120#>.
67
+ @prefix lcsh_73: <http://lcsh.info/sh85083608#>.
68
+ @prefix lcsh_74: <http://lcsh.info/sh85142090#>.
69
+ @prefix lcsh_75: <http://lcsh.info/sh85029268#>.
70
+ @prefix lcsh_76: <http://lcsh.info/sh85135362#>.
71
+ @prefix lcsh_77: <http://lcsh.info/sh85099995#>.
72
+ @prefix lcsh_78: <http://lcsh.info/sh85118553#>.
73
+ @prefix lcsh_8: <http://lcsh.info/sh85028801#>.
74
+ @prefix lcsh_9: <http://lcsh.info/sh85040316#>.
75
+ @prefix dcterms: <http://purl.org/dc/terms/>.
76
+ @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#>.
77
+ @prefix skos: <http://www.w3.org/2004/02/skos/core#>.
78
+
79
+ lcsh_6:concept a skos:Concept;
80
+ dcterms:LCC "QA";
81
+ dcterms:created "1986-02-11"^^<http://www.w3.org/2001/XMLSchema#date>;
82
+ dcterms:modified "1993-05-27T14:35:44"^^<http://www.w3.org/2001/XMLSchema#dateTime>;
83
+ skos:altLabel "Math"@en;
84
+ skos:broader lcsh_78:concept;
85
+ skos:inScheme <http://lcsh.info/>;
86
+ skos:narrower lcsh_57:concept,
87
+ lcsh_35:concept,
88
+ lcsh_31:concept,
89
+ lcsh_32:concept,
90
+ lcsh_21:concept,
91
+ lcsh_43:concept,
92
+ lcsh_67:concept,
93
+ lcsh_70:concept,
94
+ lcsh_56:concept,
95
+ lcsh_62:concept,
96
+ lcsh_15:concept,
97
+ lcsh_8:concept,
98
+ lcsh_75:concept,
99
+ lcsh_60:concept,
100
+ lcsh_41:concept,
101
+ lcsh_52:concept,
102
+ lcsh_54:concept,
103
+ lcsh_24:concept,
104
+ lcsh_37:concept,
105
+ lcsh_14:concept,
106
+ lcsh_42:concept,
107
+ lcsh_9:concept,
108
+ lcsh_66:concept,
109
+ lcsh_23:concept,
110
+ lcsh_13:concept,
111
+ lcsh_47:concept,
112
+ lcsh_19:concept,
113
+ lcsh_11:concept,
114
+ lcsh_63:concept,
115
+ lcsh_68:concept,
116
+ lcsh_46:concept,
117
+ lcsh_18:concept,
118
+ lcsh_51:concept,
119
+ lcsh_36:concept,
120
+ lcsh_64:concept,
121
+ lcsh_50:concept,
122
+ lcsh_30:concept,
123
+ lcsh_25:concept,
124
+ lcsh_55:concept,
125
+ lcsh_53:concept,
126
+ lcsh_27:concept,
127
+ lcsh_33:concept,
128
+ lcsh_69:concept,
129
+ lcsh_28:concept,
130
+ lcsh_61:concept,
131
+ lcsh_17:concept,
132
+ lcsh_72:concept,
133
+ lcsh_39:concept,
134
+ lcsh_10:concept,
135
+ lcsh_73:concept,
136
+ lcsh_16:concept,
137
+ lcsh_44:concept,
138
+ lcsh_12:concept,
139
+ lcsh_40:concept,
140
+ lcsh_77:concept,
141
+ lcsh_65:concept,
142
+ lcsh_26:concept,
143
+ lcsh_48:concept,
144
+ lcsh_49:concept,
145
+ lcsh_22:concept,
146
+ lcsh_45:concept,
147
+ lcsh_29:concept,
148
+ lcsh_20:concept,
149
+ lcsh_76:concept,
150
+ lcsh_38:concept,
151
+ lcsh_74:concept,
152
+ lcsh_71:concept,
153
+ lcsh_59:concept,
154
+ lcsh_7:concept,
155
+ lcsh_58:concept,
156
+ lcsh_34:concept;
157
+ skos:prefLabel "Mathematics"@en.