activerdf_net7 1.6.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (190) hide show
  1. data/CHANGELOG +79 -0
  2. data/LICENSE +504 -0
  3. data/README.rdoc +34 -0
  4. data/activerdf-jena/CHANGELOG +14 -0
  5. data/activerdf-jena/LICENSE +504 -0
  6. data/activerdf-jena/README +57 -0
  7. data/activerdf-jena/Rakefile +87 -0
  8. data/activerdf-jena/TODO +18 -0
  9. data/activerdf-jena/VERSION +1 -0
  10. data/activerdf-jena/ext/antlr-2.7.5.jar +0 -0
  11. data/activerdf-jena/ext/arq-extra.jar +0 -0
  12. data/activerdf-jena/ext/arq.jar +0 -0
  13. data/activerdf-jena/ext/aterm-java-1.6.jar +0 -0
  14. data/activerdf-jena/ext/commons-logging-1.1.jar +0 -0
  15. data/activerdf-jena/ext/concurrent.jar +0 -0
  16. data/activerdf-jena/ext/icu4j_3_4.jar +0 -0
  17. data/activerdf-jena/ext/iri.jar +0 -0
  18. data/activerdf-jena/ext/jena.jar +0 -0
  19. data/activerdf-jena/ext/jenatest.jar +0 -0
  20. data/activerdf-jena/ext/json.jar +0 -0
  21. data/activerdf-jena/ext/junit.jar +0 -0
  22. data/activerdf-jena/ext/log4j-1.2.12.jar +0 -0
  23. data/activerdf-jena/ext/lucene-core-2.0.0.jar +0 -0
  24. data/activerdf-jena/ext/ng4j.jar +0 -0
  25. data/activerdf-jena/ext/pellet.jar +0 -0
  26. data/activerdf-jena/ext/relaxngDatatype.jar +0 -0
  27. data/activerdf-jena/ext/stax-api-1.0.jar +0 -0
  28. data/activerdf-jena/ext/wstx-asl-3.0.0.jar +0 -0
  29. data/activerdf-jena/ext/xercesImpl.jar +0 -0
  30. data/activerdf-jena/ext/xml-apis.jar +0 -0
  31. data/activerdf-jena/ext/xsdlib.jar +0 -0
  32. data/activerdf-jena/lib/activerdf_jena/init.rb +26 -0
  33. data/activerdf-jena/lib/activerdf_jena/jena.rb +59 -0
  34. data/activerdf-jena/lib/activerdf_jena/jena_adapter.rb +515 -0
  35. data/activerdf-jena/lib/activerdf_jena/lucene.rb +22 -0
  36. data/activerdf-jena/lib/activerdf_jena/ng4j.rb +50 -0
  37. data/activerdf-jena/lib/activerdf_jena/ng4j_adapter.rb +379 -0
  38. data/activerdf-jena/lib/activerdf_jena/pellet.rb +25 -0
  39. data/activerdf-jena/test/bnode_org_rss.rdf +793 -0
  40. data/activerdf-jena/test/eyal-foaf.nt +39 -0
  41. data/activerdf-jena/test/fun_with_bnodes.nt +2 -0
  42. data/activerdf-jena/test/s1.n3 +18 -0
  43. data/activerdf-jena/test/test_data.nt +32 -0
  44. data/activerdf-jena/test/test_jena_adapter.rb +451 -0
  45. data/activerdf-jena/test/test_ng4j_adapter.rb +354 -0
  46. data/activerdf-rdflite/CHANGELOG +31 -0
  47. data/activerdf-rdflite/LICENSE +504 -0
  48. data/activerdf-rdflite/README +16 -0
  49. data/activerdf-rdflite/Rakefile +73 -0
  50. data/activerdf-rdflite/VERSION +1 -0
  51. data/activerdf-rdflite/lib/activerdf_rdflite/fetching.rb +34 -0
  52. data/activerdf-rdflite/lib/activerdf_rdflite/init.rb +13 -0
  53. data/activerdf-rdflite/lib/activerdf_rdflite/rdflite.rb +582 -0
  54. data/activerdf-rdflite/lib/activerdf_rdflite/suggesting.rb +87 -0
  55. data/activerdf-rdflite/test/test_bnode_data.nt +5 -0
  56. data/activerdf-rdflite/test/test_data.nt +32 -0
  57. data/activerdf-rdflite/test/test_escaped_data.nt +2 -0
  58. data/activerdf-rdflite/test/test_fetching.rb +33 -0
  59. data/activerdf-rdflite/test/test_rdflite.rb +277 -0
  60. data/activerdf-redland/CHANGELOG +12 -0
  61. data/activerdf-redland/LICENSE +504 -0
  62. data/activerdf-redland/README +9 -0
  63. data/activerdf-redland/Rakefile +72 -0
  64. data/activerdf-redland/VERSION +1 -0
  65. data/activerdf-redland/lib/activerdf_redland/init.rb +10 -0
  66. data/activerdf-redland/lib/activerdf_redland/redland.rb +362 -0
  67. data/activerdf-redland/test/test_person_data.nt +42 -0
  68. data/activerdf-redland/test/test_redland_adapter.rb +242 -0
  69. data/activerdf-sesame/CHANGELOG +6 -0
  70. data/activerdf-sesame/LICENSE +10 -0
  71. data/activerdf-sesame/LICENSE-aduna +10 -0
  72. data/activerdf-sesame/LICENSE-lgpl +504 -0
  73. data/activerdf-sesame/README +33 -0
  74. data/activerdf-sesame/Rakefile +77 -0
  75. data/activerdf-sesame/VERSION +1 -0
  76. data/activerdf-sesame/ext/commons-codec-1.3.jar +0 -0
  77. data/activerdf-sesame/ext/commons-dbcp-1.2.2.jar +0 -0
  78. data/activerdf-sesame/ext/commons-httpclient-3.1.jar +0 -0
  79. data/activerdf-sesame/ext/commons-logging-1.1.1.jar +0 -0
  80. data/activerdf-sesame/ext/commons-pool-1.3.jar +0 -0
  81. data/activerdf-sesame/ext/commons-pool-1.5.2.jar +0 -0
  82. data/activerdf-sesame/ext/junit-3.8.2.jar +0 -0
  83. data/activerdf-sesame/ext/openrdf-sesame-2.0-onejar.jar +0 -0
  84. data/activerdf-sesame/ext/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
  85. data/activerdf-sesame/ext/slf4j-api-1.4.3.jar +0 -0
  86. data/activerdf-sesame/ext/slf4j-nop-1.4.3.jar +0 -0
  87. data/activerdf-sesame/ext/wrapper-sesame2.jar +0 -0
  88. data/activerdf-sesame/java/build.number +3 -0
  89. data/activerdf-sesame/java/build.xml +313 -0
  90. data/activerdf-sesame/java/javadoc/allclasses-frame.html +31 -0
  91. data/activerdf-sesame/java/javadoc/allclasses-noframe.html +31 -0
  92. data/activerdf-sesame/java/javadoc/constant-values.html +146 -0
  93. data/activerdf-sesame/java/javadoc/deprecated-list.html +146 -0
  94. data/activerdf-sesame/java/javadoc/help-doc.html +223 -0
  95. data/activerdf-sesame/java/javadoc/index-files/index-1.html +150 -0
  96. data/activerdf-sesame/java/javadoc/index-files/index-10.html +145 -0
  97. data/activerdf-sesame/java/javadoc/index-files/index-2.html +157 -0
  98. data/activerdf-sesame/java/javadoc/index-files/index-3.html +146 -0
  99. data/activerdf-sesame/java/javadoc/index-files/index-4.html +145 -0
  100. data/activerdf-sesame/java/javadoc/index-files/index-5.html +145 -0
  101. data/activerdf-sesame/java/javadoc/index-files/index-6.html +142 -0
  102. data/activerdf-sesame/java/javadoc/index-files/index-7.html +145 -0
  103. data/activerdf-sesame/java/javadoc/index-files/index-8.html +152 -0
  104. data/activerdf-sesame/java/javadoc/index-files/index-9.html +146 -0
  105. data/activerdf-sesame/java/javadoc/index.html +36 -0
  106. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/WrapperForSesame2.html +665 -0
  107. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/class-use/WrapperForSesame2.html +144 -0
  108. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-frame.html +32 -0
  109. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-summary.html +157 -0
  110. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-tree.html +150 -0
  111. data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-use.html +144 -0
  112. data/activerdf-sesame/java/javadoc/overview-summary.html +156 -0
  113. data/activerdf-sesame/java/javadoc/overview-tree.html +152 -0
  114. data/activerdf-sesame/java/javadoc/package-list +1 -0
  115. data/activerdf-sesame/java/javadoc/resources/inherit.gif +0 -0
  116. data/activerdf-sesame/java/javadoc/stylesheet.css +29 -0
  117. data/activerdf-sesame/java/lib/commons-codec-1.3.jar +0 -0
  118. data/activerdf-sesame/java/lib/commons-dbcp-1.2.2.jar +0 -0
  119. data/activerdf-sesame/java/lib/commons-httpclient-3.1.jar +0 -0
  120. data/activerdf-sesame/java/lib/commons-logging-1.1.1.jar +0 -0
  121. data/activerdf-sesame/java/lib/commons-pool-1.3.jar +0 -0
  122. data/activerdf-sesame/java/lib/commons-pool-1.5.2.jar +0 -0
  123. data/activerdf-sesame/java/lib/junit-3.8.2.jar +0 -0
  124. data/activerdf-sesame/java/lib/openrdf-sesame-2.0-onejar.jar +0 -0
  125. data/activerdf-sesame/java/lib/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
  126. data/activerdf-sesame/java/lib/slf4j-api-1.4.3.jar +0 -0
  127. data/activerdf-sesame/java/lib/slf4j-nop-1.4.3.jar +0 -0
  128. data/activerdf-sesame/java/manifest.mf +3 -0
  129. data/activerdf-sesame/java/settings.xml +135 -0
  130. data/activerdf-sesame/java/src/org/activerdf/wrapper/sesame2/WrapperForSesame2.java +145 -0
  131. data/activerdf-sesame/java/test-src/org/activerdf/wrapper/sesame2/TestWrapperForSesame2.java +41 -0
  132. data/activerdf-sesame/lib/activerdf_sesame/init.rb +11 -0
  133. data/activerdf-sesame/lib/activerdf_sesame/sesame.rb +400 -0
  134. data/activerdf-sesame/test/eyal-foaf.nt +39 -0
  135. data/activerdf-sesame/test/eyal-foaf.rdf +65 -0
  136. data/activerdf-sesame/test/test_sesame_adapter.rb +341 -0
  137. data/activerdf-sparql/CHANGELOG +35 -0
  138. data/activerdf-sparql/LICENSE +504 -0
  139. data/activerdf-sparql/README +10 -0
  140. data/activerdf-sparql/Rakefile +78 -0
  141. data/activerdf-sparql/VERSION +1 -0
  142. data/activerdf-sparql/lib/activerdf_sparql/init.rb +10 -0
  143. data/activerdf-sparql/lib/activerdf_sparql/sparql.rb +212 -0
  144. data/activerdf-sparql/lib/activerdf_sparql/sparql_result_parser.rb +55 -0
  145. data/activerdf-sparql/test/test_sparql_adapter.rb +108 -0
  146. data/activerdf-yars/LICENSE +504 -0
  147. data/activerdf-yars/README +10 -0
  148. data/activerdf-yars/Rakefile +38 -0
  149. data/activerdf-yars/lib/activerdf_yars/init.rb +10 -0
  150. data/activerdf-yars/lib/activerdf_yars/jars2.rb +119 -0
  151. data/lib/active_rdf.rb +85 -0
  152. data/lib/active_rdf/directaccess/direct_access.rb +49 -0
  153. data/lib/active_rdf/federation/active_rdf_adapter.rb +47 -0
  154. data/lib/active_rdf/federation/connection_pool.rb +156 -0
  155. data/lib/active_rdf/federation/federation_manager.rb +112 -0
  156. data/lib/active_rdf/instance_exec.rb +13 -0
  157. data/lib/active_rdf/objectmanager/bnode.rb +7 -0
  158. data/lib/active_rdf/objectmanager/literal.rb +71 -0
  159. data/lib/active_rdf/objectmanager/namespace.rb +106 -0
  160. data/lib/active_rdf/objectmanager/object_manager.rb +119 -0
  161. data/lib/active_rdf/objectmanager/ordered_set.rb +116 -0
  162. data/lib/active_rdf/objectmanager/property_list.rb +76 -0
  163. data/lib/active_rdf/objectmanager/resource.rb +609 -0
  164. data/lib/active_rdf/objectmanager/resource_like.rb +28 -0
  165. data/lib/active_rdf/queryengine/ntriples_parser.rb +90 -0
  166. data/lib/active_rdf/queryengine/query.rb +245 -0
  167. data/lib/active_rdf/queryengine/query2jars2.rb +22 -0
  168. data/lib/active_rdf/queryengine/query2sparql.rb +139 -0
  169. data/lib/active_rdf_helpers.rb +30 -0
  170. data/lib/active_rdf_log.rb +100 -0
  171. data/test/common.rb +119 -0
  172. data/test/directaccess/test_direct_access.rb +64 -0
  173. data/test/federation/test_connection_pool.rb +86 -0
  174. data/test/federation/test_federation_manager.rb +145 -0
  175. data/test/objectmanager/test_literal.rb +52 -0
  176. data/test/objectmanager/test_namespace.rb +83 -0
  177. data/test/objectmanager/test_object_manager.rb +96 -0
  178. data/test/objectmanager/test_ordered_set.rb +110 -0
  179. data/test/objectmanager/test_resource_reading.rb +150 -0
  180. data/test/objectmanager/test_resource_writing.rb +39 -0
  181. data/test/objectmanager/test_talia_syntax.rb +68 -0
  182. data/test/queryengine/my_external_resource.rb +24 -0
  183. data/test/queryengine/test_external_resource_class.rb +49 -0
  184. data/test/queryengine/test_ntriples_parser.rb +71 -0
  185. data/test/queryengine/test_query.rb +55 -0
  186. data/test/queryengine/test_query2jars2.rb +51 -0
  187. data/test/queryengine/test_query2sparql.rb +76 -0
  188. data/test/queryengine/test_query_engine.rb +52 -0
  189. data/test/test_adapters.rb +58 -0
  190. metadata +266 -0
@@ -0,0 +1 @@
1
+ org.activerdf.wrapper.sesame2
@@ -0,0 +1,29 @@
1
+ /* Javadoc style sheet */
2
+
3
+ /* Define colors, fonts and other style attributes here to override the defaults */
4
+
5
+ /* Page background color */
6
+ body { background-color: #FFFFFF; color:#000000 }
7
+
8
+ /* Headings */
9
+ h1 { font-size: 145% }
10
+
11
+ /* Table colors */
12
+ .TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */
13
+ .TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */
14
+ .TableRowColor { background: #FFFFFF; color:#000000 } /* White */
15
+
16
+ /* Font used in left-hand frame lists */
17
+ .FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
18
+ .FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
19
+ .FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 }
20
+
21
+ /* Navigation bar fonts and colors */
22
+ .NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */
23
+ .NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */
24
+ .NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;}
25
+ .NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;}
26
+
27
+ .NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
28
+ .NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000}
29
+
@@ -0,0 +1,3 @@
1
+ Manifest-Version: 1.0
2
+ X-COMMENT: Main-Class will be added automatically by build
3
+
@@ -0,0 +1,135 @@
1
+ <?xml version="1.0"?>
2
+ <project name="rdf2go" basedir=".">
3
+
4
+ <!--
5
+ The buildmanager currently can handle 5 groups of capabilities:
6
+
7
+ 1.) generic and required settings for the project (name, version, classes for which to generate java doc
8
+ and a list of all libraries used by the project)
9
+ 2.) filesets and paths needed to build just the sources of the project
10
+ 3.) data files (files needed at runtime by the project)
11
+ 4.) files which have to be included as documentation
12
+ 5.) tests to compile and run (and how these tests are named)
13
+
14
+ The groups are marked below (although some might be empty).
15
+
16
+ If you want to add new capabilities to this project please refer to buildmanager/settings-example.xml
17
+ to see how to configure them.
18
+ -->
19
+
20
+ <!--
21
+ ==========================================================================================================
22
+ 1.) generic and required settings for the project
23
+ ==========================================================================================================
24
+ -->
25
+
26
+ <property name="version-number" value="0.1" />
27
+ <property name="product-name" value="wrapper-sesame2" description="name for filenames" />
28
+ <property name="product-title" value="Wrapper-Sesame2" description="display title"/>
29
+ <property name="product-www" value="./../${product-name}-www"/>
30
+ <property name="creator" value="ActiveRDF Project"/>
31
+ <property name="javadoc-packages" value="
32
+ org.activerdf.wrapper.sesame2
33
+ " />
34
+
35
+ <fileset id="all-libs" dir="lib">
36
+ <include name="openrdf-*.jar"/>
37
+ <include name="junit-*.jar"/>
38
+ <include name="slf4j-*.jar"/>
39
+ <include name="commons-*.jar"/>
40
+ </fileset>
41
+
42
+ <fileset id="export-libs" dir="lib">
43
+ <include name="openrdf-*.jar"/>
44
+ <include name="slf4j-*.jar"/>
45
+ <include name="commons-*"/>
46
+ </fileset>
47
+
48
+ <fileset id="product-libs" dir="../ext">
49
+ <include name="wrapper-sesame2.jar"/>
50
+ </fileset>
51
+
52
+
53
+ <!--
54
+ ==========================================================================================================
55
+ 2.) filesets and paths needed to build just the sources of the project
56
+ ==========================================================================================================
57
+ -->
58
+
59
+ <fileset id="src" dir=".">
60
+ <include name="src/**"/>
61
+ <!-- <include name="test-src/**"/> -->
62
+ </fileset>
63
+
64
+ <path id="src-path">
65
+ <pathelement location="src"/>
66
+ <!-- <pathelement location="test-src"/> -->
67
+ </path>
68
+
69
+ <!-- main class path -->
70
+
71
+ <path id="src-classpath"
72
+ description="define the classpath needed to build and run the sources">
73
+ <pathelement path="${classpath}"/>
74
+ <fileset refid="all-libs" />
75
+ <pathelement location="temp/build"/>
76
+ </path>
77
+
78
+ <!--
79
+ ==========================================================================================================
80
+ 3.) data files (files needed at runtime by the project)
81
+ ==========================================================================================================
82
+ -->
83
+
84
+ <fileset id="data" dir=".">
85
+ <!-- this fileset has to be defined for the generic build -->
86
+ <include name="_NONE_"/>
87
+ </fileset>
88
+
89
+ <fileset id="jarfile-includes" dir="."
90
+ description="define files which need to be included in the base directory of the jar file">
91
+ <include name="_NONE_"/>
92
+ </fileset>
93
+
94
+ <!--
95
+ ==========================================================================================================
96
+ 4.) files which have to be included as documentation
97
+ ==========================================================================================================
98
+ -->
99
+
100
+ <fileset id="documentation" dir="."
101
+ description="define the location of documentation for the project
102
+ (javadoc must not be included here, because it is handled automatically)">
103
+ <include name="_NONE_"/>
104
+ </fileset>
105
+
106
+ <!--
107
+ ==========================================================================================================
108
+ 5.) tests to compile and run (and how these tests are named)
109
+ ==========================================================================================================
110
+ -->
111
+
112
+ <fileset id="test-src" dir=".">
113
+ <include name="test-src/**"/>
114
+ </fileset>
115
+
116
+ <path id="test-src-path"
117
+ description="define the location of the test sources as a path (fileset and path are different things for ant)">
118
+ <pathelement location="test-src"/>
119
+ </path>
120
+
121
+ <path id="test-src-classpath"
122
+ description="define the classpath needed to build and run the test">
123
+ <path refid="src-classpath"/>
124
+ <fileset refid="product-libs" />
125
+ <pathelement location="dest/jars"/>
126
+ <pathelement location="temp/build-test"/>
127
+ </path>
128
+
129
+ <fileset id="test-cases"
130
+ description="define the test cases and suits to be run "
131
+ dir="temp/build-test"
132
+ includes="**/*Test.class"
133
+ />
134
+
135
+ </project>
@@ -0,0 +1,145 @@
1
+ package org.activerdf.wrapper.sesame2;
2
+
3
+ import java.io.File;
4
+
5
+ // the new stuff
6
+
7
+ import org.openrdf.sail.Sail;
8
+ import org.openrdf.sail.NotifyingSail;
9
+ import org.openrdf.repository.Repository;
10
+ import org.openrdf.repository.sail.SailRepository;
11
+ import org.openrdf.sail.memory.MemoryStore;
12
+ import org.openrdf.sail.nativerdf.NativeStore;
13
+ import org.openrdf.sail.rdbms.RdbmsStore;
14
+ import org.openrdf.repository.http.HTTPRepository;
15
+ import org.openrdf.sail.inferencer.fc.ForwardChainingRDFSInferencer;
16
+ import org.openrdf.repository.RepositoryConnection;
17
+ import org.openrdf.repository.RepositoryException;
18
+ import org.openrdf.model.Resource;
19
+ import org.openrdf.rio.RDFFormat;
20
+
21
+
22
+ /**
23
+ * construct a wrapper for a sesame2 repository.
24
+ * many sesame2 classes use an initialize method, which clashes with the
25
+ * ruby naming requirement, to name the constructor initialize.
26
+ * Because of this it is currently not possible to construct such objects from jruby
27
+ * but instead emberasing wrappers, such as this have to be used.
28
+ *
29
+ * check http://jira.codehaus.org/browse/JRUBY-45 to see if bug still exists.
30
+ */
31
+ public class WrapperForSesame2 {
32
+
33
+ protected RepositoryConnection sesameConnection;
34
+
35
+ protected Repository sesameRepository;
36
+
37
+ /**
38
+ * the constructor. it does nothing.
39
+ * all the real work has to be done by the callConstrcutor methods, because JRuby currently
40
+ * cant manage custom class loaders _and_ constructors with arguments.. yes, its sad.
41
+ */
42
+ public WrapperForSesame2() {
43
+ // do nothing
44
+ }
45
+
46
+ /*
47
+ * Initialize the Wrapper with a NativeStore as a backend.
48
+ * @param File dir Data file that the native store will use.
49
+ * @param String indexes If not null, the store will use the given indexes to speed up queries
50
+ * @param boolean inferencing If true (and not null), it will activate rdfs inferencing
51
+ */
52
+ public RepositoryConnection initWithNative(File dir, String indexes, boolean inferencing) {
53
+ Sail sailStack;
54
+
55
+ if(indexes == null) {
56
+ sailStack = new NativeStore(dir);
57
+ } else {
58
+ sailStack = new NativeStore(dir, indexes);
59
+ }
60
+
61
+ return initFromSail(sailStack, inferencing);
62
+ }
63
+
64
+ /*
65
+ * Initialize the Wrapper with a MemoryStore as a backend
66
+ * @param boolean inferencing If true (and not null), it will activate rdfs inferencing
67
+ */
68
+ public RepositoryConnection initWithMemory(boolean inferencing) {
69
+ return initFromSail(new MemoryStore(), inferencing);
70
+ }
71
+
72
+ /*
73
+ * Initialize the Wrapper with a RDBMS as a backend
74
+ * @param driver JDBC driver to use
75
+ * @param url JDBC connect URL
76
+ * @param user Username for the database, or null
77
+ * @param password Password for the database user, or null
78
+ */
79
+ public RepositoryConnection initWithRDBMS(String driver, String url, String user, String password, boolean inferencing) {
80
+ Sail sailStack;
81
+
82
+ if(user == null) {
83
+ sailStack = new RdbmsStore(driver, url);
84
+ } else {
85
+ sailStack = new RdbmsStore(driver, url, user, password);
86
+ }
87
+
88
+ return initFromSail(sailStack, inferencing);
89
+ }
90
+
91
+ /*
92
+ * Initialize th Wrapper with a connection to a remote HTTP repository
93
+ */
94
+ public RepositoryConnection initWithHttp(String url, String user, String password) throws RepositoryException {
95
+ HTTPRepository httpRepository = new HTTPRepository(url);
96
+ if(user != null) {
97
+ httpRepository.setUsernameAndPassword(user, password);
98
+ }
99
+ httpRepository.initialize();
100
+ sesameRepository = httpRepository;
101
+ sesameConnection = sesameRepository.getConnection();
102
+ return sesameConnection;
103
+ }
104
+
105
+ /**
106
+ * @return the sesame connection of the sesame repository associated with this wrapper.
107
+ */
108
+ public RepositoryConnection getSesameConnection() {
109
+ return sesameConnection;
110
+ }
111
+
112
+ /**
113
+ * Load data from file. This is a thin wrapper on the
114
+ * add method of the connection, creating only the File object for
115
+ * it to work on. And yes, we throw everything and let the Ruby
116
+ * side deal with it.
117
+ */
118
+ public boolean load(String file, String baseUri, RDFFormat dataFormat, Resource... contexts) throws Exception {
119
+ sesameConnection.add(new File(file), baseUri, dataFormat, contexts);
120
+ return true;
121
+ }
122
+
123
+
124
+ protected RepositoryConnection initFromSail(Sail sailStack, boolean inferencing) {
125
+ if (inferencing) {
126
+ if(sailStack instanceof NotifyingSail) {
127
+ sailStack = new ForwardChainingRDFSInferencer((NotifyingSail) sailStack);
128
+ } else {
129
+ throw new RuntimeException("Cannot create inferencing: Incompatible Sail type.");
130
+ }
131
+ }
132
+
133
+
134
+ try {
135
+ sesameRepository = new SailRepository(sailStack);
136
+ sesameRepository.initialize();
137
+ sesameConnection = sesameRepository.getConnection();
138
+ sesameConnection.setAutoCommit(true);
139
+ } catch (Exception e) {
140
+ throw new RuntimeException(e);
141
+ }
142
+ return sesameConnection;
143
+ }
144
+
145
+ }
@@ -0,0 +1,41 @@
1
+ package org.activerdf.wrapper.sesame2;
2
+
3
+ import java.io.File;
4
+ import java.io.IOException;
5
+
6
+ import org.activerdf.wrapper.sesame2.WrapperForSesame2;
7
+ import org.openrdf.repository.RepositoryConnection;
8
+ import org.openrdf.repository.RepositoryException;
9
+
10
+ import junit.framework.TestCase;
11
+
12
+ public class TestWrapperForSesame2 extends TestCase {
13
+
14
+ protected WrapperForSesame2 myWrapper;
15
+
16
+ protected void setUp() {
17
+ myWrapper = new WrapperForSesame2();
18
+ }
19
+
20
+ protected void tearDown() throws RepositoryException {
21
+ myWrapper.getSesameConnection().close();
22
+ }
23
+
24
+
25
+ public void testJustGetTheWrapper() {
26
+ myWrapper.callConstructor(null, null, false);
27
+ }
28
+
29
+ public void testMemoryStorePersistence() throws IOException {
30
+ File location = new File(new File (".").getCanonicalFile().toString() + "/../test/sesame-persistence-test1");
31
+ myWrapper.callConstructor(location, null, false);
32
+ }
33
+
34
+ public void NativeStorePersistence() throws IOException {
35
+ File location = new File(new File (".").getCanonicalFile().toString() + "/../test/sesame-persistence-test2");
36
+ myWrapper.callConstructor(location, "spoc,pocs", false);
37
+ }
38
+
39
+
40
+ }
41
+
@@ -0,0 +1,11 @@
1
+
2
+ # add the directory in which this file is located to the ruby loadpath
3
+ file =
4
+ if File.symlink?(__FILE__)
5
+ File.readlink(__FILE__)
6
+ else
7
+ __FILE__
8
+ end
9
+ $: << File.dirname(File.expand_path(file))
10
+
11
+ require 'sesame'
@@ -0,0 +1,400 @@
1
+ # Author:: Eyal Oren
2
+ # Copyright:: (c) 2005-2006 Eyal Oren
3
+ # License:: LGPL
4
+
5
+ # require 'active_rdf'
6
+
7
+ ActiveRdfLogger::log_info "Loading Sesame adapter", self
8
+
9
+
10
+ # ----- java imports and extentsions
11
+ require 'java'
12
+
13
+ begin
14
+ # Import the jars
15
+ Dir[File.join(File.dirname(__FILE__), '..', '..', 'ext', '*.jar')].each { |jar| require jar}
16
+
17
+ StringWriter = java.io.StringWriter
18
+ JFile = java.io.File
19
+ URLClassLoader = java.net.URLClassLoader
20
+ JURL = java.net.URL
21
+ JClass = java.lang.Class
22
+ JObject = java.lang.Object
23
+ JIOException = java.io.IOException
24
+
25
+ # sesame specific classes:
26
+ WrapperForSesame2 = org.activerdf.wrapper.sesame2.WrapperForSesame2
27
+ QueryLanguage = org.openrdf.query.QueryLanguage
28
+ NTriplesWriter = org.openrdf.rio.ntriples.NTriplesWriter
29
+ RDFFormat = org.openrdf.rio.RDFFormat
30
+ rescue Exception => e
31
+ puts "ERROR loading Java for Sesame: #{e.message}"
32
+ raise
33
+ end
34
+
35
+ # TODO: about this adapter
36
+ class SesameAdapter < ActiveRdfAdapter
37
+
38
+ # This adapter supports context operations
39
+ supports_context
40
+
41
+ ConnectionPool.register_adapter(:sesame,self)
42
+
43
+ # Create a sesame adapter. The parameter array must contain a :backend that will identify
44
+ # the backend that Sesame will use for the storage. All backends (except the HTTP repositories)
45
+ # take the parameter :inferencing, which will turn on the internal inferencing engine in Sesame
46
+ # (default is off).
47
+ #
48
+ # For compatibility, this will use the native driver if no type is given.
49
+ #
50
+ # = :memory
51
+ # The in-memory store. No parameters.
52
+ #
53
+ # = :native
54
+ # The "Native" store that saves data to a file. This backend finally employs locking on the database,
55
+ # which means that the database can only be used from one script or program at a time.
56
+ # [*location*] - Path to the data file for Sesame
57
+ # [*indexes*] - Optional index for Sesame, example "spoc,posc,cosp"
58
+ #
59
+ # = :rdbms
60
+ # The RDBMS backend store. You need to give the JDBC driver class, and obviously the JDBC driver
61
+ # for your database needs to be installed.
62
+ # [*driver*] - JDBC driver to use
63
+ # [*url*] - URL for JDBC connection
64
+ # [*user*] - Username for database connection (optional)
65
+ # [*pass*] - Password for database connection (optional)
66
+ #
67
+ #
68
+ def initialize(params = {})
69
+ super()
70
+ ActiveRdfLogger::log_info "Initializing Sesame Adapter with params #{params.to_s}", self
71
+
72
+ @reads = true
73
+ @writes = true
74
+
75
+ # Use native type by default
76
+ backend = params[:backend] || 'native'
77
+
78
+ @myWrapperInstance = WrapperForSesame2.new
79
+ @db = case(backend)
80
+ when 'native'
81
+ init_native_store(params)
82
+ when 'memory'
83
+ init_memory_store(params)
84
+ when 'rdbms'
85
+ init_rdbms_store(params)
86
+ when 'http'
87
+ init_http_store(params)
88
+ else
89
+ raise(ArgumentError, "Unknown backend type for Sesame: #{backend}")
90
+ end
91
+
92
+ @valueFactory = if(backend == 'http')
93
+ @db.getRepository.getValueFactory
94
+ else
95
+ @db.getRepository.getSail.getValueFactory
96
+ end
97
+
98
+ end
99
+
100
+ # returns the number of triples in the datastore (incl. possible duplicates)
101
+ # * context => context (optional)
102
+ def size(context = nil)
103
+ @db.size(wrap_contexts(context))
104
+ end
105
+
106
+ # deletes all triples from datastore
107
+ # * context => context (optional)
108
+ def clear(context = nil)
109
+ @db.clear(wrap_contexts(context))
110
+ end
111
+
112
+ # deletes triple(s,p,o,c) from datastore
113
+ # symbol parameters match anything: delete(:s,:p,:o) will delete all triples
114
+ # you can specify a context to limit deletion to that context:
115
+ # delete(:s,:p,:o, 'http://context') will delete all triples with that context
116
+ # * s => subject
117
+ # * p => predicate
118
+ # * o => object
119
+ # * c => context (optional)
120
+ # Nil parameters are treated as :s, :p, :o respectively.
121
+ def delete(s, p, o, c=nil)
122
+ # convert variables
123
+ params = activerdf_to_sesame(s, p, o, c, true)
124
+
125
+ begin
126
+ @db.remove(params[0], params[1], params[2], wrap_contexts(c))
127
+ true
128
+ rescue Exception => e
129
+ raise ActiveRdfError, "Sesame delete triple failed: #{e.message}"
130
+ end
131
+ @db
132
+ end
133
+
134
+ # adds triple(s,p,o,c) to datastore
135
+ # s,p must be resources, o can be primitive data or resource
136
+ # * s => subject
137
+ # * p => predicate
138
+ # * o => object
139
+ # * c => context (optional)
140
+ def add(s,p,o,c=nil)
141
+ # TODO: handle context, especially if it is null
142
+ # TODO: do we need to handle errors from the java side ?
143
+
144
+ check_input = [s,p,o]
145
+ raise ActiveRdfError, "cannot add triple with nil or blank node subject, predicate, or object" if check_input.any? {|r| r.nil? || r.is_a?(Symbol) }
146
+
147
+ params = activerdf_to_sesame(s, p, o, c)
148
+ @db.add(params[0], params[1], params[2], wrap_contexts(c))
149
+ true
150
+ rescue Exception => e
151
+ raise ActiveRdfError, "Sesame add triple failed: #{e.message}"
152
+ end
153
+
154
+ # flushing is done automatically, because we run sesame2 in autocommit mode
155
+ def flush
156
+ true
157
+ end
158
+
159
+ # saving is done automatically, because we run sesame2 in autocommit mode
160
+ def save
161
+ true
162
+ end
163
+
164
+ # close the underlying sesame triple store.
165
+ # if not called there may be open iterators.
166
+ def close
167
+ @db.close
168
+ ConnectionPool.remove_data_source(self)
169
+ end
170
+
171
+ # returns all triples in the datastore
172
+ def dump
173
+ # the sesame connection has an export method, which writes all explicit statements to
174
+ # a to a RDFHandler, which we supply, by constructing a NTriplesWriter, which writes to StringWriter,
175
+ # and we kindly ask that StringWriter to make a string for us. Note, you have to use stringy.to_s,
176
+ # somehow stringy.toString does not work. yes yes, those wacky jruby guys ;)
177
+ _string = StringWriter.new
178
+ sesameWriter = NTriplesWriter.new(_string)
179
+ @db.export(sesameWriter)
180
+ return _string.to_s
181
+ end
182
+
183
+ # loads triples from file in ntriples format
184
+ # * file => file to load
185
+ # * syntax => syntax of file to load. The syntax can be: n3, ntriples, rdfxml, trig, trix, turtle
186
+ # * context => context (optional)
187
+ def load(file, syntax="ntriples", context=nil)
188
+ # rdf syntax type
189
+ case syntax
190
+ when 'n3'
191
+ syntax_type = RDFFormat::N3
192
+ when 'ntriples'
193
+ syntax_type = RDFFormat::NTRIPLES
194
+ when 'rdfxml'
195
+ syntax_type = RDFFormat::RDFXML
196
+ when 'trig'
197
+ syntax_type = RDFFormat::TRIG
198
+ when 'trix'
199
+ syntax_type = RDFFormat::TRIX
200
+ when 'turtle'
201
+ syntax_type = RDFFormat::TURTLE
202
+ else
203
+ raise ActiveRdfError, "Sesame load file failed: syntax not valid."
204
+ end
205
+
206
+ begin
207
+ @myWrapperInstance.load(file, "", syntax_type, wrap_contexts(context))
208
+ rescue Exception => e
209
+ raise ActiveRdfError, "Sesame load file failed: #{e.message}\n#{e.backtrace}"
210
+ end
211
+ end
212
+
213
+ # executes ActiveRDF query on the sesame triple store associated with this adapter
214
+ # * query => Query object
215
+ def query(query)
216
+
217
+ # we want to put the results in here
218
+ results = []
219
+
220
+ # translate the query object into a SPARQL query string
221
+ qs = Query2SPARQL.translate(query)
222
+
223
+ begin
224
+ # evaluate the query on the sesame triple store
225
+ # TODO: if we want to get inferred statements back we have to say so, as third boolean parameter
226
+ tuplequeryresult = @db.prepareTupleQuery(QueryLanguage::SPARQL, qs).evaluate
227
+ rescue Exception => e
228
+ ActiveRdfLogger.log_error(self) { "Error evaluating query (#{e.message}): #{qs}" }
229
+ raise
230
+ end
231
+
232
+ # what are the variables of the query ?
233
+ variables = tuplequeryresult.getBindingNames
234
+ size_of_variables = variables.size
235
+
236
+ # the following is plainly ugly. the reason is that JRuby currently does not support
237
+ # using iterators in the ruby way: with "each". it is possible to define "each" for java.util.Iterator
238
+ # using JavaUtilities.extend_proxy but that fails in strange ways. this is ugly but works.
239
+
240
+ # TODO: null handling, if a value is null...
241
+
242
+ # if there only was one variable, then the results array should look like this:
243
+ # results = [ [first Value For The Variable], [second Value], ...]
244
+ if size_of_variables == 1 then
245
+ # the counter keeps track of the number of values, so we can insert them into the results at the right position
246
+ counter = 0
247
+ while tuplequeryresult.hasNext
248
+ solution = tuplequeryresult.next
249
+
250
+ temparray = []
251
+ # get the value associated with a variable in this specific solution
252
+ temparray[0] = convertSesame2ActiveRDF(solution.getValue(variables[0]), query.resource_class)
253
+ results[counter] = temparray
254
+ counter = counter + 1
255
+ end
256
+ else
257
+ # if there is more then one variable the results array looks like this:
258
+ # results = [ [Value From First Solution For First Variable, Value From First Solution For Second Variable, ...],
259
+ # [Value From Second Solution For First Variable, Value From Second Solution for Second Variable, ...], ...]
260
+ counter = 0
261
+ while tuplequeryresult.hasNext
262
+ solution = tuplequeryresult.next
263
+
264
+ temparray = []
265
+ for n in 1..size_of_variables
266
+ value = convertSesame2ActiveRDF(solution.getValue(variables[n-1]), query.resource_class)
267
+ temparray[n-1] = value
268
+ end
269
+ results[counter] = temparray
270
+ counter = counter + 1
271
+ end
272
+ end
273
+
274
+ return results
275
+ end
276
+
277
+ private
278
+
279
+ # Init a native Sesame backend
280
+ def init_native_store(params)
281
+ # if no inferencing is specified, we don't activate sesame2 rdfs inferencing
282
+ sesame_inferencing = params[:inferencing] || false
283
+ ActiveRdfLogger.log_debug(self) { "Creating Sesame Native Adapter (location: #{params[:location]}, indexes: #{params[:indexes]}, inferencing: #{sesame_inferencing}" }
284
+ sesame_location = JFile.new(params[:location]) if(params[:location])
285
+
286
+ @myWrapperInstance.initWithNative(sesame_location, params[:indexes], sesame_inferencing)
287
+ end
288
+
289
+ # Init a in-memory Sesame backend
290
+ def init_memory_store(params)
291
+ # if no inferencing is specified, we don't activate sesame2 rdfs inferencing
292
+ sesame_inferencing = params[:inferencing] || false
293
+ ActiveRdfLogger.log_debug(self) { "Creating Sesame Memory Adapter (inferencing: #{sesame_inferencing}" }
294
+
295
+ @myWrapperInstance.initWithMemory(sesame_inferencing)
296
+ end
297
+
298
+ # Init with an RDBMS backend
299
+ def init_rdbms_store(params)
300
+ sesame_inferencing = params[:inferencing] || false
301
+ ActiveRdfLogger.log_debug(self) { "Creating Sesame RDBMS Adapter (driver: #{params[:driver]}, url: #{params[:url]}, user: #{params[:user]}, pass: #{params[:pass]}, inferencing: #{sesame_inferencing}" }
302
+
303
+ @myWrapperInstance.initWithRDBMS(params[:driver], params[:url], params[:user], params[:pass], sesame_inferencing)
304
+ end
305
+
306
+ # Init the HTTP store
307
+ def init_http_store(params)
308
+ ActiveRdfLogger.log_debug(self) { "Creating Sesame HTTP Adapter (url: #{params[:url]}, user: #{params[:user]}, pass: #{params[:pass]} (inferencing settings are always ignored)" }
309
+
310
+ wrap = @myWrapperInstance.initWithHttp(params[:url], params[:user], params[:pass])
311
+ @writes = wrap.getRepository.isWritable
312
+ wrap
313
+ end
314
+
315
+ # check if testee is a java subclass of reference
316
+ def jInstanceOf(testee, reference)
317
+ # for Java::JavaClass for a <=> b the comparison operator returns: -1 if a is subclass of b,
318
+ # 0 if a.jclass = b.jclass, +1 in any other case.
319
+ isSubclass = (testee <=> reference)
320
+ if isSubclass == -1 or isSubclass == 0
321
+ return true
322
+ else
323
+ return false
324
+ end
325
+ end
326
+
327
+ # takes a part of a sesame statement, and converts it to a RDFS::Resource if it is a URI,
328
+ # or to a String if it is a Literal. The assumption currently, is that we will only get stuff out of sesame,
329
+ # which we put in there ourselves, and currently we only put URIs or Literals there.
330
+ #
331
+ # result_type is the class that will be used for "resource" objects.
332
+ def convertSesame2ActiveRDF(input, result_type)
333
+ jclassURI = Java::JavaClass.for_name("org.openrdf.model.URI")
334
+ jclassLiteral = Java::JavaClass.for_name("org.openrdf.model.Literal")
335
+ jclassBNode = Java::JavaClass.for_name('org.openrdf.model.BNode')
336
+
337
+ if jInstanceOf(input.java_class, jclassURI)
338
+ result_type.new(input.toString)
339
+ elsif jInstanceOf(input.java_class, jclassLiteral)
340
+ # The string is wrapped in quotationn marks. However, there may be a language
341
+ # indetifier outside the quotation marks, e.g. "The label"@en
342
+ # We try to unwrap this correctly. For now we assume that there may be
343
+ # no quotation marks inside the string
344
+ input.toString.gsub('"', '')
345
+ elsif jInstanceOf(input.java_class, jclassBNode)
346
+ RDFS::BNode.new(input.toString)
347
+ else
348
+ raise ActiveRdfError, "the Sesame Adapter tried to return something which is neither a URI nor a Literal, but is instead a #{input.java_class.name}"
349
+ end
350
+ end
351
+
352
+ # converts spoc input into sesame objects (RDFS::Resource into
353
+ # valueFactory.createURI etc.)
354
+ def activerdf_to_sesame(s, p, o, c, use_nil = false)
355
+ params = []
356
+
357
+ # construct sesame parameters from s,p,o,c
358
+ [s,p,o].each { |item|
359
+ params << wrap(item, use_nil)
360
+ }
361
+
362
+ # wrap Context
363
+ params << wrap_contexts(c) unless (c.nil?)
364
+
365
+ params
366
+ end
367
+
368
+ # converts item into sesame object (RDFS::Resource into
369
+ # valueFactory.createURI etc.). You can opt to preserve the
370
+ # nil values, otherwise they'll be transformed
371
+ def wrap(item, use_nil = false)
372
+ result =
373
+ if(item.respond_to?(:uri))
374
+ if (item.uri.to_s[0..4].match(/http:/).nil?)
375
+ @valueFactory.createLiteral(item.uri.to_s)
376
+ else
377
+ @valueFactory.createURI(item.uri.to_s)
378
+ end
379
+ else
380
+ case item
381
+ when Symbol
382
+ @valueFactory.createLiteral('')
383
+ when NilClass
384
+ use_nil ? nil : @valueFactory.createLiteral('')
385
+ else
386
+ @valueFactory.createLiteral(item.to_s)
387
+ end
388
+ end
389
+ return result
390
+ end
391
+
392
+ def wrap_contexts(*contexts)
393
+ contexts.compact!
394
+ contexts.collect! do |context|
395
+ raise ActiveRdfError, "context must be a Resource" unless(context.respond_to?(:uri))
396
+ @valueFactory.createURI(context.uri)
397
+ end
398
+ contexts.to_java(org.openrdf.model.Resource)
399
+ end
400
+ end