jena-jruby 0.3.0-java

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/.gitignore ADDED
@@ -0,0 +1,7 @@
1
+ .loadpath
2
+ .project
3
+ javalib
4
+ downloads/
5
+ pkg
6
+ .buildpath
7
+ rdoc
data/Gemfile ADDED
@@ -0,0 +1,4 @@
1
+ source :rubygems
2
+ #gem "sinatra", "1.2.0a", :require => false
3
+ gem "builder"
4
+
data/Gemfile.lock ADDED
@@ -0,0 +1,10 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ builder (3.0.0)
5
+
6
+ PLATFORMS
7
+ java
8
+
9
+ DEPENDENCIES
10
+ builder
data/LICENSE ADDED
@@ -0,0 +1,13 @@
1
+ Copyright 2011 Epimorphics Ltd
2
+
3
+ Licensed under the Apache License, Version 2.0 (the "License");
4
+ you may not use this file except in compliance with the License.
5
+ You may obtain a copy of the License at
6
+
7
+ http://www.apache.org/licenses/LICENSE-2.0
8
+
9
+ Unless required by applicable law or agreed to in writing, software
10
+ distributed under the License is distributed on an "AS IS" BASIS,
11
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12
+ See the License for the specific language governing permissions and
13
+ limitations under the License.
data/README.md ADDED
@@ -0,0 +1,101 @@
1
+ # Gem wrapper for Apache Jena
2
+
3
+ This Gem provides convenience access to the [Apache Jena](http://incubator.apache.org/jena)
4
+ RDF platform. Jena is a widely used Java platform for parsing, storing, manipulating,
5
+ querying and publishing semantic web data and linked data. This gem provides a single
6
+ dependency so that JRuby programs can access all of the capabilities of Jena, including TDB,
7
+ conveniently from JRuby.
8
+
9
+ This gem provides the following benefits:
10
+
11
+ * a single dependency which includes all of the `.jar` files for the latest release
12
+ of Jena (currently 2.7.0) and TDB (currently 0.9.0)
13
+
14
+ * import of some of the key classes used by Jena-based programs into a `Jena::`
15
+ module, to make code more compact
16
+
17
+ * some additional utility and convenience methods
18
+
19
+ ## Using the gem
20
+
21
+ Once installed, just add to your code:
22
+
23
+ require 'jena_jruby'
24
+
25
+ or add a suitable dependency to your bundle spec.
26
+
27
+ ## Access to Jena from Java
28
+
29
+ Create a model:
30
+
31
+ m = Jena::Core::ModelFactory.create_default_model
32
+
33
+ (note that JRuby automagically converts Java CamelCase names to Ruby lower_case names)
34
+
35
+ Add a statement:
36
+
37
+ jruby-1.6.5 :003 > m = Jena::Core::ModelFactory.create_default_model
38
+ => #<Java::ComHpHplJenaRdfModelImpl::ModelCom:0x135a4815>
39
+ jruby-1.6.5 :004 > s = Jena::Core::ResourceFactory.create_resource "http://example.org/s"
40
+ => #<Java::ComHpHplJenaRdfModelImpl::ResourceImpl:0x7b0f62cb>
41
+ jruby-1.6.5 :005 > o = Jena::Core::ResourceFactory.create_resource "http://example.org/o"
42
+ => #<Java::ComHpHplJenaRdfModelImpl::ResourceImpl:0x4879c985>
43
+ jruby-1.6.5 :006 > p = Jena::Core::ResourceFactory.createProperty "http://example.org/p"
44
+ => #<Java::ComHpHplJenaRdfModelImpl::PropertyImpl:0x3f7cd159>
45
+ jruby-1.6.5 :007 > m.add s,p,o
46
+ => #<Java::ComHpHplJenaRdfModelImpl::ModelCom:0x135a4815>
47
+ jruby-1.6.5 :009 > m.toString
48
+ => "<ModelCom {http://example.org/s @http://example.org/p http://example.org/o} | >"
49
+
50
+ ## Building and installing the gem
51
+
52
+ Since `jena-jruby` now includes TDB, the easiest way to get the full set of jars necessary
53
+ to support Jena is to use Maven to list the dependencies declared in the TDB `pom.xml`.
54
+ For convenience, this is packaged in a bash script:
55
+
56
+ ian@rowan-15 $ export JENA_TDB_ROOT=~/whereever/you/have/the/tdb/source
57
+ # note: defaults to ~/workspace/apache-jena-tdb
58
+
59
+ ian@rowan-15 $ cd ~/workspace/jena-jruby/
60
+ ian@rowan-15 $ bin/update_jars_maven
61
+ Changing to TDB directory /home/ian/workspace/apache-jena-tdb
62
+ ~/workspace/apache-jena-tdb ~/workspace/jena-jruby
63
+ Cleaning old versions and recompiling ...
64
+ [INFO] Scanning for projects...
65
+ [INFO] ------------------------------------------------------------------------
66
+ [INFO] Building TDB
67
+ [INFO] task-segment: [clean, install]
68
+ [INFO] ------------------------------------------------------------------------
69
+ .. lots of maven output ..
70
+ [INFO] ------------------------------------------------------------------------
71
+ [INFO] BUILD SUCCESSFUL
72
+ [INFO] ------------------------------------------------------------------------
73
+ [INFO] Total time: 17 seconds
74
+ [INFO] Finished at: Thu Jan 05 00:18:09 GMT 2012
75
+ [INFO] Final Memory: 68M/718M
76
+ [INFO] ------------------------------------------------------------------------
77
+ Collecting dependencies ...
78
+ [INFO] Scanning for projects...
79
+ [INFO] Searching repository for plugin with prefix: 'dependency'.
80
+ [INFO] ------------------------------------------------------------------------
81
+ [INFO] Building TDB
82
+ [INFO] task-segment: [dependency:copy-dependencies]
83
+ [INFO] ------------------------------------------------------------------------
84
+ [INFO] [dependency:copy-dependencies {execution: default-cli}]
85
+ [INFO] Copying icu4j-3.4.4.jar to /home/ian/workspace/apache-jena-tdb/target/dependency/icu4j-3.4.4.jar
86
+ .. more maven output ..
87
+ [INFO] ------------------------------------------------------------------------
88
+ [INFO] BUILD SUCCESSFUL
89
+ [INFO] ------------------------------------------------------------------------
90
+ [INFO] Total time: 2 seconds
91
+ [INFO] Finished at: Thu Jan 05 00:18:12 GMT 2012
92
+ [INFO] Final Memory: 35M/349M
93
+ [INFO] ------------------------------------------------------------------------
94
+ ~/workspace/jena-jruby
95
+ Changing directory back to /home/ian/workspace/jena-jruby
96
+ Copying deps to ./javalib
97
+ Creating log4j config
98
+
99
+ ian@rowan-15 $ rake build
100
+ rake/rdoctask is deprecated. Use rdoc/task instead (in RDoc 2.4.2+)
101
+ jena-jruby 0.3.0 built to pkg/jena-jruby-0.3.0-java.gem
data/Rakefile ADDED
@@ -0,0 +1,37 @@
1
+ require 'bundler'
2
+ require 'rake/testtask'
3
+
4
+ Bundler::GemHelper.install_tasks
5
+
6
+ ####################################################
7
+ # Testing
8
+ ####################################################
9
+
10
+ Rake::TestTask.new(:test) do |t|
11
+ t.libs << "test" << "."
12
+ t.test_files = FileList['test/*test.rb']
13
+ # t.verbose = true
14
+ end
15
+
16
+ namespace :test do
17
+
18
+ desc 'Measures test coverage'
19
+ task :coverage do
20
+ rm_f "profiling"
21
+ # rcov = "rcov --rails --aggregate coverage.data --text-summary -Ilib"
22
+ rcov = "rcov -I ./test -i '^lib/' -x 'rvm|\.js$|\.html$' --profile --sort coverage"
23
+ system("#{rcov} test/*_test.rb")
24
+ system("gnome-open profiling/index.html")
25
+ end
26
+
27
+ end
28
+
29
+ require 'rdoc/task'
30
+ Rake::RDocTask.new do |rdoc|
31
+ version = File.exist?('lib/rdf_renderer/VERSION') ? File.read('lib/rdf_renderer/VERSION') : ""
32
+
33
+ rdoc.rdoc_dir = 'rdoc'
34
+ rdoc.title = "RDF Renderer #{version}"
35
+ rdoc.rdoc_files.include('README*')
36
+ rdoc.rdoc_files.include('lib/**/*.rb')
37
+ end
@@ -0,0 +1,32 @@
1
+ #!/bin/bash
2
+ # Collect the .jar files necessary to build the gem by running
3
+ # maven in the context of TDB
4
+ # Execute in root directory of jena_jruby
5
+
6
+ # Default TDB location
7
+ # Can be overridden by exporting JENA_TDB_ROOT
8
+ tdb_root=${JENA_TDB_ROOT:-~/workspace/apache-jena-tdb}
9
+
10
+ echo "Changing to TDB directory $tdb_root"
11
+ pushd $tdb_root
12
+
13
+ echo "Cleaning old versions and recompiling ..."
14
+ mvn -DskipTests=true clean install
15
+
16
+ echo "Collecting dependencies ..."
17
+ mvn dependency:copy-dependencies
18
+
19
+ popd
20
+ echo "Changing directory back to `pwd`"
21
+ echo "Copying deps to ./javalib"
22
+ mkdir -p javalib
23
+ rm -f javalib/*.jar
24
+ cp $tdb_root/target/dependency/*.jar javalib
25
+ cp $tdb_root/target/jena-tdb-*SNAPSHOT.jar $tdb_root/target/tdb-*{0,1,2,3,4,5,6,7,8,9}.jar javalib 2>/dev/null
26
+ rm -f javalib/*test*.jar
27
+
28
+ echo "Creating log4j config"
29
+ jar -cf javalib/log4j-config.jar log4j.xml
30
+
31
+
32
+
data/bin/update_jena ADDED
@@ -0,0 +1,30 @@
1
+ #!/usr/bin/env ruby
2
+ $:.push File.expand_path("../lib", __FILE__)
3
+ require 'rubygems'
4
+ require 'fileutils'
5
+ require 'open-uri'
6
+ load 'lib/jruby_jena/version.rb'
7
+
8
+ LATEST_JENA="http://sourceforge.net/projects/jena/files/Jena/Jena-#{Jena::JENA_VERSION}/jena-#{Jena::JENA_VERSION}.zip/download"
9
+ OUTPUT="downloads/jena-#{Jena::JENA_VERSION}.zip"
10
+
11
+ FileUtils.mkdir_p "downloads"
12
+
13
+ unless File.exist? OUTPUT
14
+ puts "Downloading Jena #{Jena::JENA_VERSION}..."
15
+ open( LATEST_JENA ) do |url|
16
+ File.open( OUTPUT,"wb" ) do |file|
17
+ file.puts url.read
18
+ end
19
+ end
20
+ end
21
+
22
+ `unzip -jo #{OUTPUT} **/lib/*.jar -x '**/lib/junit*.jar' '**/lib/*tests.jar' -d javalib`
23
+
24
+ puts "Writing lib/jruby_jena/jars.rb ..."
25
+ r = File.open( 'lib/jruby_jena/jars.rb', 'w' )
26
+ Dir.glob( 'javalib/*.jar' ).each do |f|
27
+ f =~ /javalib\/(.*)\.jar/
28
+ r << "require '#{$1}'\n"
29
+ end
30
+ r.close
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
Binary file
@@ -0,0 +1,25 @@
1
+ # -*- encoding: utf-8 -*-
2
+ $:.push File.expand_path("./lib", __FILE__)
3
+ load "lib/jena_jruby/version.rb"
4
+
5
+ Gem::Specification.new do |s|
6
+ s.name = "jena-jruby"
7
+ s.version = Jena::JENA_JRUBY_GEM_VERSION
8
+ s.platform = Gem::Platform.new("java")
9
+ s.authors = ["Ian Dickinson"]
10
+ s.email = ["ian@epimorphics.com"]
11
+ s.homepage = ""
12
+ s.summary = %q{JRuby wrapper for Apache Jena}
13
+ s.description = %q{A simple packaging of Apache Jena for JRuby}
14
+
15
+ s.files = `git ls-files`.split("\n").reject { |f| f.include? '/dev/' }
16
+ s.files.concat( Dir.glob 'javalib/*.jar' )
17
+ s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
18
+ # s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
19
+ s.require_paths = ["lib", "javalib"]
20
+
21
+ s.extra_rdoc_files = ["README.md"]
22
+
23
+ s.add_dependency( 'haml' )
24
+ s.add_dependency( 'builder' )
25
+ end
@@ -0,0 +1,19 @@
1
+ %w[
2
+ commons-codec-1.5
3
+ hamcrest-core-1.1
4
+ httpclient-4.1.2
5
+ httpcore-4.1.3
6
+ icu4j-3.4.4
7
+ jena-arq-2.9.0-incubating
8
+ jena-core-2.7.0-incubating
9
+ jena-iri-0.9.0-incubating
10
+ jena-tdb-0.9.0-incubating-SNAPSHOT
11
+ junit-4.9
12
+ log4j-1.2.16
13
+ slf4j-api-1.6.4
14
+ slf4j-log4j12-1.6.4
15
+ xercesImpl-2.10.0
16
+ xml-apis-1.4.01
17
+ log4j-config
18
+ ].each {|jar| require jar}
19
+
@@ -0,0 +1,34 @@
1
+ module Jena
2
+ module Vocab
3
+
4
+ # A namespace is an object for resolving identifiers in scope denoted
5
+ # by a base URI to a full URI. For example,
6
+ #
7
+ # rdfs = Namespace.new( "http://www.w3.org/2000/01/rdf-schema#" )
8
+ # rdfs.comment # => "http://www.w3.org/2000/01/rdf-schema#comment"
9
+ #
10
+ # There is no checking that the resolved name is known in the defined
11
+ # namespace (e.g. <tt>rdfs.commnet</tt> will work without a warning)
12
+ class Namespace
13
+ attr_reader :ns
14
+
15
+ # Initialize this namespace with the given root URI. E.g, for RDFS,
16
+ # this would be
17
+ # rdfs = Namespace.new( "http://www.w3.org/2000/01/rdf-schema#" )
18
+ def initialize( ns )
19
+ @ns = ns
20
+ end
21
+
22
+ :private
23
+
24
+ def method_missing( name, *args)
25
+ prop = !args.empty? && args.first
26
+ n = "#{@ns}#{name}"
27
+ prop ? Jena::Core::ResourceFactory.createProperty(n) : Jena::Core::ResourceFactory.createResource(n)
28
+ end
29
+ end
30
+
31
+ # A namespace object for the SKOS vocabulary, which is not built-in to Jena
32
+ SKOS = Namespace.new( "http://www.w3.org/2004/02/skos/core#" )
33
+ end
34
+ end
@@ -0,0 +1,107 @@
1
+ module Jena
2
+ # A collection of utilities for manipulating Jena RDF Resources
3
+ # and Literals, collectively known as RDFNodes.
4
+ module Node
5
+ # Return the types of a node, which will be an array of the RDF types
6
+ # for a resource, or an array of the (zero or one) datatypes if the
7
+ # node is a literal. Ensures that the returned array includes the default_type
8
+ # f default_type is non-nil
9
+ def self.types( node, default_type = nil )
10
+ return self.resource_types( node, default_type ) if node.resource?
11
+ self.literal_types( node, default_type )
12
+ end
13
+
14
+ # Return the values of `rdf:type` for the given resource
15
+ def self.resource_types( node, default_type = nil )
16
+ types = []
17
+ node.each_property( Jena::Vocab::RDF.type ) {|stmt| types << stmt.getObject}
18
+ with_default_type( types, default_type )
19
+ end
20
+
21
+ # Return an array of the datatype of the given literal, if defined,
22
+ # and including the default_type if non-nil
23
+ def self.literal_types( node, default_type = nil )
24
+ types = node.getDatatype ? [node.getDatatype] : []
25
+ with_default_type( types, default_type )
26
+ end
27
+
28
+ :private
29
+
30
+ def self.with_default_type( types, default_type )
31
+ types << default_type if default_type && !types.include?( default_type )
32
+ types
33
+ end
34
+ end
35
+ end
36
+
37
+
38
+ # Add some Ruby-friendly method names to common Jena classes
39
+ module Java
40
+ module ComHpHplJenaEnhanced
41
+ class EnhNode
42
+ alias resource? isResource
43
+ alias literal? isLiteral
44
+
45
+ def types
46
+ Jena::Node.types self
47
+ end
48
+ end
49
+ end
50
+
51
+ module ComHpHplJenaRdfModelImpl
52
+ class ResourceImpl
53
+ # Yield to the given block for each statement of this resource with predicate
54
+ # `property`. If `property` is nil, yield to the block for every statement whose
55
+ # subject is this resource.
56
+ def each_property( property = nil, &block )
57
+ listProperties( property ).each( &block )
58
+ end
59
+
60
+ # Return a list of the values of the given properties of this resource. Each property
61
+ # may be specified as a +Property+ object, a string denoting the URI, or a string
62
+ # denoting the URI in <tt>prefix:name</tt> format, which will be expanded using the
63
+ # prefix table attached to the resource's model
64
+ def property_values( props = nil, model = nil )
65
+ model ||= getModel
66
+ return [] unless model
67
+
68
+ values = []
69
+ resolve_properties( props, model ).each do |p|
70
+ model.listStatements( self, p, nil ).each do |stmt|
71
+ values << stmt.getObject
72
+ end
73
+ end
74
+ values
75
+ end
76
+
77
+ # Return a list of Jena +Property+ objects corresponding to the list of property
78
+ # names +props+. Each member of +props+ is either
79
+ # * a +Property+ object, which is returned unchanged
80
+ # * a URI string, which is converted to a +Property+
81
+ # * an abbreviated URI in <tt>prefix:name</tt> form, which is expanded using the prefixes
82
+ # defined in the current model before being converted to a +Property+ object
83
+ #
84
+ # In the special case of <tt>props = nil</tt>, the returned list is all of the distinct
85
+ # properties attached to this resource
86
+ def resolve_properties( props = nil, model = nil )
87
+ props = [props] unless props.is_a? Array
88
+ model ||= self.getModel
89
+
90
+ unless props
91
+ return model.listStatements( self, nil, nil ).map {|stmt| stmt.getPredicate} .uniq
92
+ end
93
+
94
+ props.map do |p|
95
+ case
96
+ when p.is_a?( Jena::Core::Property )
97
+ p
98
+ when model
99
+ model.getProperty( model.expandPrefix( p ) )
100
+ else
101
+ Jena::Core::ResourceFactory.getProperty( p )
102
+ end
103
+ end
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,175 @@
1
+ module Jena
2
+ module Query
3
+ # Perform a SPARQL select query against the given model. Returns
4
+ # an array of result objects, where each result is a Hash from
5
+ # query variable name to value.
6
+ #
7
+ # By default, all variables from the query are returned. To return
8
+ # just a subset of the query variables, pass the variable name(s) as
9
+ # the last argument to the call.
10
+ #
11
+ # Various options are supported:
12
+ # * `:ns` - a `PrefixMapping` or hash of prefixes to URI's
13
+ # * `:bindings` - a `QuerySolutionMap` or hash of existing var name to value pairs
14
+ #
15
+ # == Examples
16
+ # Jena.querySelect( m, 'select * where {?s ?p ?o}' )
17
+ # Jena.querySelect( m, 'select * where {?s ?p ?o}', {}, "s" )
18
+ # Jena.querySelect( m, 'select * where {?s ?p foo:bar}',
19
+ # {:ns => {"foo", "http://example.com/foo#"}}, "s" )
20
+ #
21
+ # @param m [Model] The model to run the query against
22
+ # @param query [String] The query to run
23
+ # @param options [Hash] Options (see above)
24
+ # @param *vars [String] Optional variables to project from results
25
+ # @return [Array] Non-empty array of hashes, one per result
26
+ def self.select( m, query, options = nil, *vars )
27
+ results = []
28
+ select_each( m, query, options, *vars ) {|soln| results << soln}
29
+ results
30
+ end
31
+
32
+ # Perform a select query as per {#select}, but returns only the first
33
+ # result, if defined, or nil
34
+ def self.select_first( m, query, options = nil, *vars )
35
+ qexec = setup_query_execution( m, query, options )
36
+ result = nil
37
+
38
+ begin
39
+ rs = qexec.execSelect
40
+ result = project_variables( rs.next, *vars ) if rs.hasNext
41
+ ensure
42
+ qexec.close
43
+ end
44
+
45
+ result
46
+ end
47
+
48
+ # Perform a select query as per {#select}, but rather than accumulate
49
+ # an array of results, we yield to the associated block with each solution
50
+ def self.select_each( m, query, options = nil, *vars, &block )
51
+ select_each_qe( setup_query_execution( m, query, options ), *vars, &block )
52
+ end
53
+
54
+ # Perform a select query using the given query execution, yielding to the
55
+ # associated block for each solution
56
+ def self.select_each_qe( qexec, *vars )
57
+ begin
58
+ qexec.execSelect.each do |soln|
59
+ yield( project_variables( soln, *vars ) )
60
+ end
61
+ ensure
62
+ qexec.close
63
+ end
64
+ end
65
+
66
+ # Perform a SPARQL describe query. Options as per {#select},
67
+ # but this call returns a `Model`.
68
+ #
69
+ # @param m [Model] The model to run the query against
70
+ # @param query [String] The query to run
71
+ # @param options [Hash] Options (see above)
72
+ # @return [Array] Non-empty array of hashes, one per result
73
+ def self.describe( m, query, options = nil )
74
+ qexec = setup_query_execution( m, query, options )
75
+
76
+ begin
77
+ return qexec.execDescribe
78
+ ensure
79
+ qexec.close
80
+ end
81
+ end
82
+
83
+ # Project variables from a result set entry, returning a `Hash` of variable
84
+ # names to values
85
+ def self.project_variables( soln, *vars )
86
+ nn = Hash.new
87
+
88
+ vs = vars || []
89
+ soln.varNames.each {|v| vs << v} if vs.empty?
90
+
91
+ vs.each {|v| nn[v.to_sym] = soln.get( v )}
92
+
93
+ nn
94
+ end
95
+
96
+ # Return the given bindings object as a `QuerySolutionsMap`. Convert a
97
+ # hash to a `QuerySolutionsMap` if necessary
98
+ def self.as_bindings( b )
99
+ return nil unless b
100
+ return b if b.is_a? com.hp.hpl.jena.query.QuerySolutionMap
101
+ qsm = com.hp.hpl.jena.query.QuerySolutionMap.new
102
+ b.each_pair do |k,v|
103
+ qsm.add k, v
104
+ end
105
+ qsm
106
+ end
107
+
108
+ # A mutable collection of well-known namespace prefixes, which can
109
+ # be used as a basis for building up a larger collection
110
+ def self.useful_prefixes
111
+ pm = com.hp.hpl.jena.shared.impl.PrefixMappingImpl.new
112
+ pm.setNsPrefixes( com.hp.hpl.jena.shared.PrefixMapping.Standard )
113
+ pm
114
+ end
115
+
116
+ # Return true if a string represents a valid SPARQL query.
117
+ def self.valid?( query_string, syntax = Jena::Query::Syntax.syntaxSPARQL_11 )
118
+ q = Jena::Query::QueryFactory.create
119
+
120
+ begin
121
+ Jena::Query::QueryFactory.parse( q, query_string, nil, syntax )
122
+ return true
123
+ rescue
124
+ end
125
+
126
+ false
127
+ end
128
+
129
+ # Return a QueryExecution for executing the given query against a
130
+ # remote SPARQL service endpoint
131
+ def self.sparql_service( url, query )
132
+ Jena::Query::QueryExecutionFactory.sparqlService( url, query )
133
+ end
134
+
135
+ # Return a list of the solutions to executing the given select query
136
+ # against the given remote SPARQL endpoint
137
+ def self.service_select( url, query, *vars )
138
+ results = []
139
+ select_each_qe( sparql_service( url, query ), *vars ) {|soln| results << soln}
140
+ results
141
+ end
142
+
143
+ # Yield to the associated block for each solution to the given query against
144
+ # the given SPARQL service endpoint URL
145
+ def self.service_select_each( url, query, *vars, &block )
146
+ select_each_qe( sparql_service( url, query ), *vars, &block )
147
+ end
148
+
149
+ :private
150
+
151
+ def self.option( options, opt, default )
152
+ if has_option?( options, opt ) then options[opt] else default end
153
+ end
154
+
155
+ def self.has_option?( options, opt )
156
+ options && options.has_key?( opt )
157
+ end
158
+
159
+ # Common part of setting up a query execution
160
+ def self.setup_query_execution( m, query, options )
161
+ q = com.hp.hpl.jena.query.Query.new
162
+
163
+ q.setPrefixMapping has_option?( options, :ns ) ? Util::as_prefix_map( options[:ns] ) : useful_prefixes
164
+
165
+ baseURI = option( options, :baseURI, nil )
166
+ syntax = option( options, :syntax, com.hp.hpl.jena.query.Syntax.syntaxSPARQL_11 )
167
+
168
+ QueryFactory.parse( q, query, baseURI, syntax )
169
+ qexec = QueryExecutionFactory.create( q, m, as_bindings( option( options, :bindings, nil ) ) )
170
+
171
+ qexec
172
+ end
173
+
174
+ end
175
+ end
@@ -0,0 +1,27 @@
1
+ module Jena
2
+ module Util
3
+ # Return the given prefix map object as a `PrefixMapping`. Convert a hash
4
+ # to a `PrefixMapping` if necessary
5
+ def self.as_prefix_map( map )
6
+ return nil unless map
7
+ return map if map.is_a? com.hp.hpl.jena.shared.PrefixMapping
8
+ pm = com.hp.hpl.jena.shared.impl.PrefixMappingImpl.new
9
+ map.each_pair do |k,v|
10
+ pm.setNsPrefix k.to_s, v.to_s
11
+ end
12
+ pm
13
+ end
14
+
15
+ # Return a new resource URN made from a UUID
16
+ def self.uuid_resource
17
+ Core::ResourceFactory.createResource( Util::JenaUUID.factory.generate.asURN )
18
+ end
19
+
20
+ # Return the current time as a literal
21
+ def self.now
22
+ cal = java.util.Calendar.getInstance
23
+ cal.setTime( java.util.Date.new )
24
+ Core::ResourceFactory.createTypedLiteral( cal )
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,5 @@
1
+ module Jena
2
+ JENA_VERSION='2.6.5-SNAPSHOT'
3
+ TDB_VERSION='0.8.11-SNAPSHOT'
4
+ JENA_JRUBY_GEM_VERSION='0.3.0'
5
+ end
data/lib/jena_jruby.rb ADDED
@@ -0,0 +1,182 @@
1
+ require 'java'
2
+ require 'jena_jruby/jars'
3
+ require 'builder'
4
+
5
+ # Short names for commonly used Java packages
6
+ module Jena
7
+ JENA = "com.hp.hpl.jena"
8
+ end
9
+
10
+ # Make a selection of key Jena classes available in a convenient module
11
+ module Jena
12
+ module Core
13
+ java_import com.hp.hpl.jena.rdf.model.Alt
14
+ java_import com.hp.hpl.jena.rdf.model.AnonId
15
+ java_import com.hp.hpl.jena.rdf.model.Bag
16
+ java_import com.hp.hpl.jena.rdf.model.Container
17
+ java_import com.hp.hpl.jena.rdf.model.InfModel
18
+ java_import com.hp.hpl.jena.rdf.model.Literal
19
+ java_import com.hp.hpl.jena.rdf.model.ModelChangedListener
20
+ java_import com.hp.hpl.jena.rdf.model.ModelFactory
21
+ java_import com.hp.hpl.jena.rdf.model.ModelGetter
22
+ java_import com.hp.hpl.jena.rdf.model.ModelGraphInterface
23
+ java_import com.hp.hpl.jena.rdf.model.Model
24
+ java_import com.hp.hpl.jena.rdf.model.ModelMaker
25
+ java_import com.hp.hpl.jena.rdf.model.ModelReader
26
+ java_import com.hp.hpl.jena.rdf.model.ModelSource
27
+ java_import com.hp.hpl.jena.rdf.model.NodeIterator
28
+ java_import com.hp.hpl.jena.rdf.model.NsIterator
29
+ java_import com.hp.hpl.jena.rdf.model.Property
30
+ java_import com.hp.hpl.jena.rdf.model.RDFErrorHandler
31
+ java_import com.hp.hpl.jena.rdf.model.RDFList
32
+ java_import com.hp.hpl.jena.rdf.model.RDFNode
33
+ java_import com.hp.hpl.jena.rdf.model.RDFReader
34
+ java_import com.hp.hpl.jena.rdf.model.RDFVisitor
35
+ java_import com.hp.hpl.jena.rdf.model.RDFWriter
36
+ java_import com.hp.hpl.jena.rdf.model.ReifiedStatement
37
+ java_import com.hp.hpl.jena.rdf.model.ResIterator
38
+ java_import com.hp.hpl.jena.rdf.model.ResourceFactory
39
+ java_import com.hp.hpl.jena.rdf.model.Resource
40
+ java_import com.hp.hpl.jena.rdf.model.RSIterator
41
+ java_import com.hp.hpl.jena.rdf.model.Schema
42
+ java_import com.hp.hpl.jena.rdf.model.Selector
43
+ java_import com.hp.hpl.jena.rdf.model.Seq
44
+ java_import com.hp.hpl.jena.rdf.model.SimpleSelector
45
+ java_import com.hp.hpl.jena.rdf.model.StatementBoundary
46
+ java_import com.hp.hpl.jena.rdf.model.Statement
47
+ java_import com.hp.hpl.jena.rdf.model.StatementTripleBoundary
48
+ java_import com.hp.hpl.jena.rdf.model.StmtIterator
49
+ end
50
+
51
+ module Util
52
+ java_import com.hp.hpl.jena.util.CharEncoding
53
+ java_import com.hp.hpl.jena.util.CollectionFactory
54
+ java_import com.hp.hpl.jena.util.FileManager
55
+ java_import com.hp.hpl.jena.util.FileUtils
56
+ java_import com.hp.hpl.jena.util.IteratorCollection
57
+ java_import com.hp.hpl.jena.util.LocationMapper
58
+ java_import com.hp.hpl.jena.util.LocatorClassLoader
59
+ java_import com.hp.hpl.jena.util.LocatorFile
60
+ java_import com.hp.hpl.jena.util.Locator
61
+ java_import com.hp.hpl.jena.util.LocatorURL
62
+ java_import com.hp.hpl.jena.util.LocatorZip
63
+ java_import com.hp.hpl.jena.util.Metadata
64
+ java_import com.hp.hpl.jena.util.ModelLoader
65
+ java_import com.hp.hpl.jena.util.ModelQueryUtil
66
+ java_import com.hp.hpl.jena.util.MonitorGraph
67
+ java_import com.hp.hpl.jena.util.MonitorModel
68
+ java_import com.hp.hpl.jena.util.OneToManyMap
69
+ java_import com.hp.hpl.jena.util.PrintUtil
70
+ java_import com.hp.hpl.jena.util.QueryMapper
71
+ java_import com.hp.hpl.jena.util.ResourceUtils
72
+ java_import com.hp.hpl.jena.util.SystemUtils
73
+ java_import com.hp.hpl.jena.util.Tokenizer
74
+ java_import com.hp.hpl.jena.util.TypedStream
75
+ java_import com.hp.hpl.jena.util.URIref
76
+ java_import com.hp.hpl.jena.shared.Command
77
+ java_import com.hp.hpl.jena.shared.Lock
78
+ java_import com.hp.hpl.jena.shared.LockMRSW
79
+ java_import com.hp.hpl.jena.shared.LockMutex
80
+ java_import com.hp.hpl.jena.shared.LockNone
81
+ java_import com.hp.hpl.jena.shared.PrefixMapping
82
+ java_import com.hp.hpl.jena.shared.RandomOrderGraph
83
+ java_import com.hp.hpl.jena.shared.ReificationStyle
84
+ java_import com.hp.hpl.jena.shared.uuid.JenaUUID
85
+ java_import com.hp.hpl.jena.shared.uuid.UUIDFactory
86
+ end
87
+
88
+ module Vocab
89
+ java_import com.hp.hpl.jena.vocabulary.DB
90
+ java_import com.hp.hpl.jena.vocabulary.DC_10
91
+ java_import com.hp.hpl.jena.vocabulary.DC_11
92
+ java_import com.hp.hpl.jena.vocabulary.DC
93
+ java_import com.hp.hpl.jena.vocabulary.DCTerms
94
+ java_import com.hp.hpl.jena.vocabulary.DCTypes
95
+ java_import com.hp.hpl.jena.vocabulary.LocationMappingVocab
96
+ java_import com.hp.hpl.jena.vocabulary.OntDocManagerVocab
97
+ java_import com.hp.hpl.jena.vocabulary.OntEventsVocab
98
+ java_import com.hp.hpl.jena.vocabulary.OWL2
99
+ java_import com.hp.hpl.jena.vocabulary.OWL
100
+ java_import com.hp.hpl.jena.vocabulary.RDF
101
+ java_import com.hp.hpl.jena.vocabulary.RDFS
102
+ java_import com.hp.hpl.jena.vocabulary.RDFSyntax
103
+ java_import com.hp.hpl.jena.vocabulary.ReasonerVocabulary
104
+ java_import com.hp.hpl.jena.vocabulary.ResultSet
105
+ java_import com.hp.hpl.jena.vocabulary.RSS
106
+ java_import com.hp.hpl.jena.vocabulary.VCARD
107
+ java_import com.hp.hpl.jena.vocabulary.XSD
108
+ end
109
+
110
+ module Query
111
+ java_import com.hp.hpl.jena.query.ARQ
112
+ java_import com.hp.hpl.jena.query.DatasetFactory
113
+ java_import com.hp.hpl.jena.query.Dataset
114
+ java_import com.hp.hpl.jena.query.DataSource
115
+ java_import com.hp.hpl.jena.query.QueryExecutionFactory
116
+ java_import com.hp.hpl.jena.query.QueryExecution
117
+ java_import com.hp.hpl.jena.query.QueryFactory
118
+ java_import com.hp.hpl.jena.query.Query
119
+ java_import com.hp.hpl.jena.query.QuerySolution
120
+ java_import com.hp.hpl.jena.query.QuerySolutionMap
121
+ java_import com.hp.hpl.jena.query.QueryVisitor
122
+ java_import com.hp.hpl.jena.query.ResultSetFactory
123
+ java_import com.hp.hpl.jena.query.ResultSetFormatter
124
+ java_import com.hp.hpl.jena.query.ResultSet
125
+ java_import com.hp.hpl.jena.query.ResultSetRewindable
126
+ java_import com.hp.hpl.jena.query.SortCondition
127
+ java_import com.hp.hpl.jena.query.Syntax
128
+ end
129
+
130
+ module Ont
131
+ java_import com.hp.hpl.jena.ontology.AllDifferent
132
+ java_import com.hp.hpl.jena.ontology.AllValuesFromRestriction
133
+ java_import com.hp.hpl.jena.ontology.AnnotationProperty
134
+ java_import com.hp.hpl.jena.ontology.BooleanClassDescription
135
+ java_import com.hp.hpl.jena.ontology.CardinalityQRestriction
136
+ java_import com.hp.hpl.jena.ontology.CardinalityRestriction
137
+ java_import com.hp.hpl.jena.ontology.ComplementClass
138
+ java_import com.hp.hpl.jena.ontology.DataRange
139
+ java_import com.hp.hpl.jena.ontology.DatatypeProperty
140
+ java_import com.hp.hpl.jena.ontology.EnumeratedClass
141
+ java_import com.hp.hpl.jena.ontology.FunctionalProperty
142
+ java_import com.hp.hpl.jena.ontology.HasValueRestriction
143
+ java_import com.hp.hpl.jena.ontology.Individual
144
+ java_import com.hp.hpl.jena.ontology.IntersectionClass
145
+ java_import com.hp.hpl.jena.ontology.InverseFunctionalProperty
146
+ java_import com.hp.hpl.jena.ontology.MaxCardinalityQRestriction
147
+ java_import com.hp.hpl.jena.ontology.MaxCardinalityRestriction
148
+ java_import com.hp.hpl.jena.ontology.MinCardinalityQRestriction
149
+ java_import com.hp.hpl.jena.ontology.MinCardinalityRestriction
150
+ java_import com.hp.hpl.jena.ontology.ObjectProperty
151
+ java_import com.hp.hpl.jena.ontology.OntClass
152
+ java_import com.hp.hpl.jena.ontology.OntDocumentManager
153
+ java_import com.hp.hpl.jena.ontology.OntModel
154
+ java_import com.hp.hpl.jena.ontology.OntModelSpec
155
+ java_import com.hp.hpl.jena.ontology.Ontology
156
+ java_import com.hp.hpl.jena.ontology.OntProperty
157
+ java_import com.hp.hpl.jena.ontology.OntResource
158
+ java_import com.hp.hpl.jena.ontology.OntTools
159
+ java_import com.hp.hpl.jena.ontology.Profile
160
+ java_import com.hp.hpl.jena.ontology.ProfileRegistry
161
+ java_import com.hp.hpl.jena.ontology.QualifiedRestriction
162
+ java_import com.hp.hpl.jena.ontology.Restriction
163
+ java_import com.hp.hpl.jena.ontology.SomeValuesFromRestriction
164
+ java_import com.hp.hpl.jena.ontology.SymmetricProperty
165
+ java_import com.hp.hpl.jena.ontology.TransitiveProperty
166
+ java_import com.hp.hpl.jena.ontology.UnionClass
167
+ end
168
+
169
+ module TDB
170
+ java_import com.hp.hpl.jena.tdb.TDB
171
+ java_import com.hp.hpl.jena.tdb.TDBLoader
172
+ java_import com.hp.hpl.jena.tdb.TDBFactory
173
+ end
174
+ end
175
+
176
+ %w[
177
+ version
178
+ utils
179
+ query_utils
180
+ node_utils
181
+ namespace
182
+ ].each {|f| require "jena_jruby/#{f}"}
data/log4j.xml ADDED
@@ -0,0 +1,20 @@
1
+ <?xml version="1.0" encoding="UTF-8"?>
2
+
3
+ <!DOCTYPE log4j:configuration PUBLIC "log4j.dtd"
4
+ "http://logging.apache.org/log4j/1.2/apidocs/org/apache/log4j/xml/doc-files/log4j.dtd">
5
+
6
+
7
+ <log4j:configuration>
8
+ <appender name="stdout" class="org.apache.log4j.ConsoleAppender">
9
+ <layout class="org.apache.log4j.PatternLayout">
10
+ <param name="ConversionPattern" value="%d{ABSOLUTE} %5p %c{1}:%L - %m%n"/>
11
+ </layout>
12
+ </appender>
13
+ <logger name="com.epimorphics">
14
+ <level value="info"/>
15
+ </logger>
16
+ <root>
17
+ <priority value="info"></priority>
18
+ <appender-ref ref="stdout"/>
19
+ </root>
20
+ </log4j:configuration>
@@ -0,0 +1,71 @@
1
+ $LOAD_PATH.push "#{File.dirname(__FILE__)}/../lib"
2
+ require "rubygems"
3
+ require "test/unit"
4
+ require "jena_jruby"
5
+
6
+ class NodeUtilsTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @m = Jena::Core::ModelFactory.createDefaultModel
10
+ @r0 = @m.createResource "http://example.org/foo#r0"
11
+ @r1 = @m.createResource "http://example.org/foo#r1"
12
+ @m.add @r0, Jena::Vocab::RDFS.comment, "this is a test"
13
+ @m.add @r0, Jena::Vocab::RDF.type, @r1
14
+ end
15
+
16
+ def teardown
17
+ end
18
+
19
+ def test_resource_types
20
+ assert_equal [@r1], @r0.types
21
+ assert_equal [], @r1.types
22
+ end
23
+
24
+ def test_literal_types
25
+ lit = @m.createTypedLiteral( 10 )
26
+ types = lit.types
27
+ assert_equal "http://www.w3.org/2001/XMLSchema#long", types.first.getURI
28
+ assert_equal 1, types.length
29
+
30
+ lit = @m.createLiteral( "foo" )
31
+ types = lit.types
32
+ assert_equal 0, types.length
33
+ end
34
+
35
+ def test_default_type
36
+ assert_equal [@r1, Jena::Vocab::RDF::Property], Jena::Node.types( @r0, Jena::Vocab::RDF::Property )
37
+ assert_equal [Jena::Vocab::RDF::Property], Jena::Node.types( @r1, Jena::Vocab::RDF::Property )
38
+
39
+ assert_equal [:dummy], Jena::Node.types( @m.createLiteral( "foo" ), :dummy )
40
+ end
41
+
42
+ def test_resolve_properties
43
+ p = @m.createProperty( "http://example.com/p" )
44
+ assert_equal [p], @r0.resolve_properties( [p] )
45
+ assert_equal [p], @r0.resolve_properties( ["http://example.com/p"] )
46
+ @m.setNsPrefix( "eg", "http://example.com/" )
47
+ assert_equal [p], @r0.resolve_properties( ["eg:p"] )
48
+ end
49
+
50
+ def test_property_values
51
+ assert_equal [@r1], @r0.property_values( Jena::Vocab::RDF.type )
52
+ assert_equal [@r1], @r0.property_values( Jena::Vocab::RDF.type.getURI )
53
+ @m.setNsPrefix( "rdf", Jena::Vocab::RDF.getURI )
54
+ assert_equal [@r1], @r0.property_values( "rdf:type" )
55
+ end
56
+
57
+ def test_property_values_with_explicit_model
58
+ @m.setNsPrefix( "rdf", Jena::Vocab::RDF.getURI )
59
+
60
+ # r is not attached to any model
61
+ r = Jena::Core::ResourceFactory.createResource( @r0.getURI )
62
+
63
+ assert_equal [], r.property_values( Jena::Vocab::RDF.type )
64
+ assert_equal [], r.property_values( Jena::Vocab::RDF.type.getURI )
65
+ assert_equal [], r.property_values( "rdf:type" )
66
+
67
+ assert_equal [@r1], r.property_values( Jena::Vocab::RDF.type, @m )
68
+ assert_equal [@r1], r.property_values( Jena::Vocab::RDF.type.getURI, @m )
69
+ assert_equal [@r1], r.property_values( "rdf:type", @m )
70
+ end
71
+ end
@@ -0,0 +1,105 @@
1
+ $LOAD_PATH.push "#{File.dirname(__FILE__)}/../lib"
2
+ require "rubygems"
3
+ require "test/unit"
4
+ require "jena_jruby"
5
+
6
+ class QueryUtilsTest < Test::Unit::TestCase
7
+
8
+ def setup
9
+ @m = Jena::Core::ModelFactory.createDefaultModel
10
+ @r0 = @m.createResource "http://example.org/foo#r0"
11
+ @m.add @r0, Jena::Vocab::RDFS.comment, "this is a test"
12
+ end
13
+
14
+ def teardown
15
+ end
16
+
17
+ def test_as_prefix_map_0
18
+ pm = com.hp.hpl.jena.shared.impl.PrefixMappingImpl.new
19
+ assert_same pm, Jena::Util.as_prefix_map( pm )
20
+ end
21
+
22
+ def test_as_prefix_map_1
23
+ map = {"foo" => "http://foo.bar"}
24
+ pm = Jena::Util.as_prefix_map map
25
+ assert_equal "http://foo.bar", pm.getNsPrefixURI( "foo" )
26
+ end
27
+
28
+ def test_as_bindings_0
29
+ qsm = Jena::Query::QuerySolutionMap.new
30
+ assert_same qsm, Jena::Query.as_bindings( qsm )
31
+ end
32
+
33
+ def test_as_bindings_1
34
+ r = Jena::Core::ResourceFactory.createResource "http://foo.bar#"
35
+ b = {"r" => r}
36
+ assert_equal r, Jena::Query.as_bindings( b ).get( "r" )
37
+ end
38
+
39
+ # Generic form of select
40
+ def test_select_0
41
+ result = Jena::Query.select @m, "select * {?s ?p ?o}", nil
42
+ assert_equal 1, result.size
43
+
44
+ assert_equal @r0, result[0][:s]
45
+ assert_equal Jena::Vocab::RDFS.comment, result[0][:p]
46
+ assert_equal "this is a test", result[0][:o].getLexicalForm
47
+ end
48
+
49
+ # Project variables from select
50
+ def test_select_1
51
+ result = Jena::Query.select @m, "select * {?s ?p ?o}", nil, "s"
52
+ assert_equal 1, result.size
53
+
54
+ assert_equal @r0, result[0][:s]
55
+ assert ! result[0].has_key?( :p )
56
+ assert ! result[0].has_key?( :o )
57
+
58
+ result = Jena::Query.select @m, "select * {?s ?p ?o}", nil, :s
59
+ assert_equal 1, result.size
60
+
61
+ assert_equal @r0, result[0][:s]
62
+ end
63
+
64
+ # Use namespaces in query select
65
+ def test_select_2
66
+ ns = {:foo => "http://example.org/foo#"}
67
+
68
+ result = Jena::Query.select @m, "select * {foo:r0 ?p ?o}", {:ns => ns}
69
+ assert_equal 1, result.size
70
+
71
+ assert ! result[0].has_key?( :s )
72
+ assert_equal Jena::Vocab::RDFS.comment, result[0][:p]
73
+ assert_equal "this is a test", result[0][:o].getLexicalForm
74
+ end
75
+
76
+ # Use variable bindings in query select
77
+ def test_select_3
78
+ b = {:s => @r0}
79
+
80
+ r1 = @m.createResource "http://example.org/foo#r1"
81
+ @m.add r1, Jena::Vocab::RDFS.comment, "this is another test"
82
+
83
+ result = Jena::Query.select @m, "select * {?s ?p ?o}", {:bindings => b}
84
+ assert_equal 1, result.size
85
+
86
+ assert_equal @r0, result[0][:s]
87
+ end
88
+
89
+ # Get only one result
90
+ def test_select_first
91
+ @m.add @r0, Jena::Vocab::RDFS.comment, "this is another test"
92
+
93
+ result = Jena::Query.select @m, "select * {?s ?p ?o}"
94
+ assert_equal 2, result.size
95
+
96
+ result = Jena::Query.select @m, "select * {?s ?p 42}"
97
+ assert_equal 0, result.size
98
+
99
+ result = Jena::Query.select_first @m, "select * {?s ?p ?o}"
100
+ assert_equal @r0, result[:s]
101
+
102
+ result = Jena::Query.select_first @m, "select * {?s ?p 42}"
103
+ assert_nil result
104
+ end
105
+ end
metadata ADDED
@@ -0,0 +1,112 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: jena-jruby
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 0.3.0
6
+ platform: java
7
+ authors:
8
+ - Ian Dickinson
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2012-01-05 00:00:00 Z
14
+ dependencies:
15
+ - !ruby/object:Gem::Dependency
16
+ name: haml
17
+ prerelease: false
18
+ requirement: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ">="
22
+ - !ruby/object:Gem::Version
23
+ version: "0"
24
+ type: :runtime
25
+ version_requirements: *id001
26
+ - !ruby/object:Gem::Dependency
27
+ name: builder
28
+ prerelease: false
29
+ requirement: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ">="
33
+ - !ruby/object:Gem::Version
34
+ version: "0"
35
+ type: :runtime
36
+ version_requirements: *id002
37
+ description: A simple packaging of Apache Jena for JRuby
38
+ email:
39
+ - ian@epimorphics.com
40
+ executables: []
41
+
42
+ extensions: []
43
+
44
+ extra_rdoc_files:
45
+ - README.md
46
+ files:
47
+ - .gitignore
48
+ - Gemfile
49
+ - Gemfile.lock
50
+ - LICENSE
51
+ - README.md
52
+ - Rakefile
53
+ - bin/update_jars_maven
54
+ - bin/update_jena
55
+ - jena-jruby.gemspec
56
+ - lib/jena_jruby.rb
57
+ - lib/jena_jruby/jars.rb
58
+ - lib/jena_jruby/namespace.rb
59
+ - lib/jena_jruby/node_utils.rb
60
+ - lib/jena_jruby/query_utils.rb
61
+ - lib/jena_jruby/utils.rb
62
+ - lib/jena_jruby/version.rb
63
+ - log4j.xml
64
+ - test/node_utils_test.rb
65
+ - test/query_utils_test.rb
66
+ - javalib/commons-codec-1.5.jar
67
+ - javalib/jena-iri-0.9.0-incubating.jar
68
+ - javalib/jena-tdb-0.9.0-incubating-SNAPSHOT.jar
69
+ - javalib/jena-core-2.7.0-incubating.jar
70
+ - javalib/httpclient-4.1.2.jar
71
+ - javalib/xercesImpl-2.10.0.jar
72
+ - javalib/slf4j-api-1.6.4.jar
73
+ - javalib/junit-4.9.jar
74
+ - javalib/slf4j-log4j12-1.6.4.jar
75
+ - javalib/icu4j-3.4.4.jar
76
+ - javalib/xml-apis-1.4.01.jar
77
+ - javalib/log4j-1.2.16.jar
78
+ - javalib/hamcrest-core-1.1.jar
79
+ - javalib/log4j-config.jar
80
+ - javalib/httpcore-4.1.3.jar
81
+ - javalib/jena-arq-2.9.0-incubating.jar
82
+ homepage: ""
83
+ licenses: []
84
+
85
+ post_install_message:
86
+ rdoc_options: []
87
+
88
+ require_paths:
89
+ - lib
90
+ - javalib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ">="
95
+ - !ruby/object:Gem::Version
96
+ version: "0"
97
+ required_rubygems_version: !ruby/object:Gem::Requirement
98
+ none: false
99
+ requirements:
100
+ - - ">="
101
+ - !ruby/object:Gem::Version
102
+ version: "0"
103
+ requirements: []
104
+
105
+ rubyforge_project:
106
+ rubygems_version: 1.8.13
107
+ signing_key:
108
+ specification_version: 3
109
+ summary: JRuby wrapper for Apache Jena
110
+ test_files: []
111
+
112
+ has_rdoc: