activerdf_net7 1.6.11
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/CHANGELOG +79 -0
- data/LICENSE +504 -0
- data/README.rdoc +34 -0
- data/activerdf-jena/CHANGELOG +14 -0
- data/activerdf-jena/LICENSE +504 -0
- data/activerdf-jena/README +57 -0
- data/activerdf-jena/Rakefile +87 -0
- data/activerdf-jena/TODO +18 -0
- data/activerdf-jena/VERSION +1 -0
- data/activerdf-jena/ext/antlr-2.7.5.jar +0 -0
- data/activerdf-jena/ext/arq-extra.jar +0 -0
- data/activerdf-jena/ext/arq.jar +0 -0
- data/activerdf-jena/ext/aterm-java-1.6.jar +0 -0
- data/activerdf-jena/ext/commons-logging-1.1.jar +0 -0
- data/activerdf-jena/ext/concurrent.jar +0 -0
- data/activerdf-jena/ext/icu4j_3_4.jar +0 -0
- data/activerdf-jena/ext/iri.jar +0 -0
- data/activerdf-jena/ext/jena.jar +0 -0
- data/activerdf-jena/ext/jenatest.jar +0 -0
- data/activerdf-jena/ext/json.jar +0 -0
- data/activerdf-jena/ext/junit.jar +0 -0
- data/activerdf-jena/ext/log4j-1.2.12.jar +0 -0
- data/activerdf-jena/ext/lucene-core-2.0.0.jar +0 -0
- data/activerdf-jena/ext/ng4j.jar +0 -0
- data/activerdf-jena/ext/pellet.jar +0 -0
- data/activerdf-jena/ext/relaxngDatatype.jar +0 -0
- data/activerdf-jena/ext/stax-api-1.0.jar +0 -0
- data/activerdf-jena/ext/wstx-asl-3.0.0.jar +0 -0
- data/activerdf-jena/ext/xercesImpl.jar +0 -0
- data/activerdf-jena/ext/xml-apis.jar +0 -0
- data/activerdf-jena/ext/xsdlib.jar +0 -0
- data/activerdf-jena/lib/activerdf_jena/init.rb +26 -0
- data/activerdf-jena/lib/activerdf_jena/jena.rb +59 -0
- data/activerdf-jena/lib/activerdf_jena/jena_adapter.rb +515 -0
- data/activerdf-jena/lib/activerdf_jena/lucene.rb +22 -0
- data/activerdf-jena/lib/activerdf_jena/ng4j.rb +50 -0
- data/activerdf-jena/lib/activerdf_jena/ng4j_adapter.rb +379 -0
- data/activerdf-jena/lib/activerdf_jena/pellet.rb +25 -0
- data/activerdf-jena/test/bnode_org_rss.rdf +793 -0
- data/activerdf-jena/test/eyal-foaf.nt +39 -0
- data/activerdf-jena/test/fun_with_bnodes.nt +2 -0
- data/activerdf-jena/test/s1.n3 +18 -0
- data/activerdf-jena/test/test_data.nt +32 -0
- data/activerdf-jena/test/test_jena_adapter.rb +451 -0
- data/activerdf-jena/test/test_ng4j_adapter.rb +354 -0
- data/activerdf-rdflite/CHANGELOG +31 -0
- data/activerdf-rdflite/LICENSE +504 -0
- data/activerdf-rdflite/README +16 -0
- data/activerdf-rdflite/Rakefile +73 -0
- data/activerdf-rdflite/VERSION +1 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/fetching.rb +34 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/init.rb +13 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/rdflite.rb +582 -0
- data/activerdf-rdflite/lib/activerdf_rdflite/suggesting.rb +87 -0
- data/activerdf-rdflite/test/test_bnode_data.nt +5 -0
- data/activerdf-rdflite/test/test_data.nt +32 -0
- data/activerdf-rdflite/test/test_escaped_data.nt +2 -0
- data/activerdf-rdflite/test/test_fetching.rb +33 -0
- data/activerdf-rdflite/test/test_rdflite.rb +277 -0
- data/activerdf-redland/CHANGELOG +12 -0
- data/activerdf-redland/LICENSE +504 -0
- data/activerdf-redland/README +9 -0
- data/activerdf-redland/Rakefile +72 -0
- data/activerdf-redland/VERSION +1 -0
- data/activerdf-redland/lib/activerdf_redland/init.rb +10 -0
- data/activerdf-redland/lib/activerdf_redland/redland.rb +362 -0
- data/activerdf-redland/test/test_person_data.nt +42 -0
- data/activerdf-redland/test/test_redland_adapter.rb +242 -0
- data/activerdf-sesame/CHANGELOG +6 -0
- data/activerdf-sesame/LICENSE +10 -0
- data/activerdf-sesame/LICENSE-aduna +10 -0
- data/activerdf-sesame/LICENSE-lgpl +504 -0
- data/activerdf-sesame/README +33 -0
- data/activerdf-sesame/Rakefile +77 -0
- data/activerdf-sesame/VERSION +1 -0
- data/activerdf-sesame/ext/commons-codec-1.3.jar +0 -0
- data/activerdf-sesame/ext/commons-dbcp-1.2.2.jar +0 -0
- data/activerdf-sesame/ext/commons-httpclient-3.1.jar +0 -0
- data/activerdf-sesame/ext/commons-logging-1.1.1.jar +0 -0
- data/activerdf-sesame/ext/commons-pool-1.3.jar +0 -0
- data/activerdf-sesame/ext/commons-pool-1.5.2.jar +0 -0
- data/activerdf-sesame/ext/junit-3.8.2.jar +0 -0
- data/activerdf-sesame/ext/openrdf-sesame-2.0-onejar.jar +0 -0
- data/activerdf-sesame/ext/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
- data/activerdf-sesame/ext/slf4j-api-1.4.3.jar +0 -0
- data/activerdf-sesame/ext/slf4j-nop-1.4.3.jar +0 -0
- data/activerdf-sesame/ext/wrapper-sesame2.jar +0 -0
- data/activerdf-sesame/java/build.number +3 -0
- data/activerdf-sesame/java/build.xml +313 -0
- data/activerdf-sesame/java/javadoc/allclasses-frame.html +31 -0
- data/activerdf-sesame/java/javadoc/allclasses-noframe.html +31 -0
- data/activerdf-sesame/java/javadoc/constant-values.html +146 -0
- data/activerdf-sesame/java/javadoc/deprecated-list.html +146 -0
- data/activerdf-sesame/java/javadoc/help-doc.html +223 -0
- data/activerdf-sesame/java/javadoc/index-files/index-1.html +150 -0
- data/activerdf-sesame/java/javadoc/index-files/index-10.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-2.html +157 -0
- data/activerdf-sesame/java/javadoc/index-files/index-3.html +146 -0
- data/activerdf-sesame/java/javadoc/index-files/index-4.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-5.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-6.html +142 -0
- data/activerdf-sesame/java/javadoc/index-files/index-7.html +145 -0
- data/activerdf-sesame/java/javadoc/index-files/index-8.html +152 -0
- data/activerdf-sesame/java/javadoc/index-files/index-9.html +146 -0
- data/activerdf-sesame/java/javadoc/index.html +36 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/WrapperForSesame2.html +665 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/class-use/WrapperForSesame2.html +144 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-frame.html +32 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-summary.html +157 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-tree.html +150 -0
- data/activerdf-sesame/java/javadoc/org/activerdf/wrapper/sesame2/package-use.html +144 -0
- data/activerdf-sesame/java/javadoc/overview-summary.html +156 -0
- data/activerdf-sesame/java/javadoc/overview-tree.html +152 -0
- data/activerdf-sesame/java/javadoc/package-list +1 -0
- data/activerdf-sesame/java/javadoc/resources/inherit.gif +0 -0
- data/activerdf-sesame/java/javadoc/stylesheet.css +29 -0
- data/activerdf-sesame/java/lib/commons-codec-1.3.jar +0 -0
- data/activerdf-sesame/java/lib/commons-dbcp-1.2.2.jar +0 -0
- data/activerdf-sesame/java/lib/commons-httpclient-3.1.jar +0 -0
- data/activerdf-sesame/java/lib/commons-logging-1.1.1.jar +0 -0
- data/activerdf-sesame/java/lib/commons-pool-1.3.jar +0 -0
- data/activerdf-sesame/java/lib/commons-pool-1.5.2.jar +0 -0
- data/activerdf-sesame/java/lib/junit-3.8.2.jar +0 -0
- data/activerdf-sesame/java/lib/openrdf-sesame-2.0-onejar.jar +0 -0
- data/activerdf-sesame/java/lib/openrdf-sesame-2.3-pr1-onejar.jar +0 -0
- data/activerdf-sesame/java/lib/slf4j-api-1.4.3.jar +0 -0
- data/activerdf-sesame/java/lib/slf4j-nop-1.4.3.jar +0 -0
- data/activerdf-sesame/java/manifest.mf +3 -0
- data/activerdf-sesame/java/settings.xml +135 -0
- data/activerdf-sesame/java/src/org/activerdf/wrapper/sesame2/WrapperForSesame2.java +145 -0
- data/activerdf-sesame/java/test-src/org/activerdf/wrapper/sesame2/TestWrapperForSesame2.java +41 -0
- data/activerdf-sesame/lib/activerdf_sesame/init.rb +11 -0
- data/activerdf-sesame/lib/activerdf_sesame/sesame.rb +400 -0
- data/activerdf-sesame/test/eyal-foaf.nt +39 -0
- data/activerdf-sesame/test/eyal-foaf.rdf +65 -0
- data/activerdf-sesame/test/test_sesame_adapter.rb +341 -0
- data/activerdf-sparql/CHANGELOG +35 -0
- data/activerdf-sparql/LICENSE +504 -0
- data/activerdf-sparql/README +10 -0
- data/activerdf-sparql/Rakefile +78 -0
- data/activerdf-sparql/VERSION +1 -0
- data/activerdf-sparql/lib/activerdf_sparql/init.rb +10 -0
- data/activerdf-sparql/lib/activerdf_sparql/sparql.rb +212 -0
- data/activerdf-sparql/lib/activerdf_sparql/sparql_result_parser.rb +55 -0
- data/activerdf-sparql/test/test_sparql_adapter.rb +108 -0
- data/activerdf-yars/LICENSE +504 -0
- data/activerdf-yars/README +10 -0
- data/activerdf-yars/Rakefile +38 -0
- data/activerdf-yars/lib/activerdf_yars/init.rb +10 -0
- data/activerdf-yars/lib/activerdf_yars/jars2.rb +119 -0
- data/lib/active_rdf.rb +85 -0
- data/lib/active_rdf/directaccess/direct_access.rb +49 -0
- data/lib/active_rdf/federation/active_rdf_adapter.rb +47 -0
- data/lib/active_rdf/federation/connection_pool.rb +156 -0
- data/lib/active_rdf/federation/federation_manager.rb +112 -0
- data/lib/active_rdf/instance_exec.rb +13 -0
- data/lib/active_rdf/objectmanager/bnode.rb +7 -0
- data/lib/active_rdf/objectmanager/literal.rb +71 -0
- data/lib/active_rdf/objectmanager/namespace.rb +106 -0
- data/lib/active_rdf/objectmanager/object_manager.rb +119 -0
- data/lib/active_rdf/objectmanager/ordered_set.rb +116 -0
- data/lib/active_rdf/objectmanager/property_list.rb +76 -0
- data/lib/active_rdf/objectmanager/resource.rb +609 -0
- data/lib/active_rdf/objectmanager/resource_like.rb +28 -0
- data/lib/active_rdf/queryengine/ntriples_parser.rb +90 -0
- data/lib/active_rdf/queryengine/query.rb +245 -0
- data/lib/active_rdf/queryengine/query2jars2.rb +22 -0
- data/lib/active_rdf/queryengine/query2sparql.rb +139 -0
- data/lib/active_rdf_helpers.rb +30 -0
- data/lib/active_rdf_log.rb +100 -0
- data/test/common.rb +119 -0
- data/test/directaccess/test_direct_access.rb +64 -0
- data/test/federation/test_connection_pool.rb +86 -0
- data/test/federation/test_federation_manager.rb +145 -0
- data/test/objectmanager/test_literal.rb +52 -0
- data/test/objectmanager/test_namespace.rb +83 -0
- data/test/objectmanager/test_object_manager.rb +96 -0
- data/test/objectmanager/test_ordered_set.rb +110 -0
- data/test/objectmanager/test_resource_reading.rb +150 -0
- data/test/objectmanager/test_resource_writing.rb +39 -0
- data/test/objectmanager/test_talia_syntax.rb +68 -0
- data/test/queryengine/my_external_resource.rb +24 -0
- data/test/queryengine/test_external_resource_class.rb +49 -0
- data/test/queryengine/test_ntriples_parser.rb +71 -0
- data/test/queryengine/test_query.rb +55 -0
- data/test/queryengine/test_query2jars2.rb +51 -0
- data/test/queryengine/test_query2sparql.rb +76 -0
- data/test/queryengine/test_query_engine.rb +52 -0
- data/test/test_adapters.rb +58 -0
- metadata +266 -0
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
#
|
|
2
|
+
# Author: Karsten Huneycutt
|
|
3
|
+
# Copyright 2007 Valkeir Corporation
|
|
4
|
+
# License: LGPL
|
|
5
|
+
#
|
|
6
|
+
module LuceneARQ
|
|
7
|
+
|
|
8
|
+
class << self
|
|
9
|
+
bool_accessor :lucene_available
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
KEYWORD_PREDICATE = "http://jena.hpl.hp.com/ARQ/property#textMatch"
|
|
13
|
+
|
|
14
|
+
begin
|
|
15
|
+
include_class('com.hp.hpl.jena.query.larq.LARQ')
|
|
16
|
+
include_package('com.hp.hpl.jena.query.larq')
|
|
17
|
+
self.lucene_available = true
|
|
18
|
+
rescue
|
|
19
|
+
self.lucene_available = false
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
end
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Author:: Benjamin Heitmann
|
|
2
|
+
# Copyright:: (c) 2007 DERI
|
|
3
|
+
# License:: LGPL
|
|
4
|
+
|
|
5
|
+
require 'java'
|
|
6
|
+
|
|
7
|
+
module NG4J
|
|
8
|
+
|
|
9
|
+
module Internal
|
|
10
|
+
include_package('de.fuberlin.wiwiss.ng4j')
|
|
11
|
+
# This contains: NamedGraphSet, Quad
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
module DB
|
|
15
|
+
|
|
16
|
+
include_package('de.fuberlin.wiwiss.ng4j.db')
|
|
17
|
+
|
|
18
|
+
include_class('java.sql.DriverManager')
|
|
19
|
+
|
|
20
|
+
# this maps downcased Jena database types into drivers
|
|
21
|
+
DRIVER_MAP = {
|
|
22
|
+
'mysql' => 'com.mysql.jdbc.Driver',
|
|
23
|
+
'postgresql' => 'org.postgresql.Driver',
|
|
24
|
+
'hsql' => 'org.hsqldb.jdbcDriver',
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
DRIVER_MAP.each do |name, driver|
|
|
28
|
+
av = "#{name}_available"
|
|
29
|
+
(class << self ; self ; end).send(:bool_accessor, av.to_sym)
|
|
30
|
+
begin
|
|
31
|
+
java.lang.Class.forName driver
|
|
32
|
+
Jena::DB.send("#{av}=", true)
|
|
33
|
+
rescue
|
|
34
|
+
Jena::DB.send("#{av}=", false)
|
|
35
|
+
end
|
|
36
|
+
end
|
|
37
|
+
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
module Sparql
|
|
41
|
+
include_package('de.fuberlin.wiwiss.ng4j.sparql')
|
|
42
|
+
# This contains: NamedGraphDataset
|
|
43
|
+
end
|
|
44
|
+
|
|
45
|
+
module Impl
|
|
46
|
+
include_package('de.fuberlin.wiwiss.ng4j.impl')
|
|
47
|
+
# This contains: NamedGraphSetImpl
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
end
|
|
@@ -0,0 +1,379 @@
|
|
|
1
|
+
# Author:: Benjamin Heitmann
|
|
2
|
+
# Copyright:: (c) 2007 DERI
|
|
3
|
+
# License:: LGPL
|
|
4
|
+
|
|
5
|
+
class NG4JAdapter < ActiveRdfAdapter
|
|
6
|
+
|
|
7
|
+
ConnectionPool.register_adapter(:ng4j, self)
|
|
8
|
+
|
|
9
|
+
class NG4JAdapterConfigurationError < StandardError
|
|
10
|
+
end
|
|
11
|
+
|
|
12
|
+
bool_accessor :keyword_search, :reasoning
|
|
13
|
+
bool_accessor :lucene_index_behind
|
|
14
|
+
attr_accessor :ontology_type, :model_name, :reasoner, :connection
|
|
15
|
+
attr_accessor :model_maker, :base_model, :model, :lucene_index
|
|
16
|
+
attr_accessor :root_directory
|
|
17
|
+
attr_accessor :graphset
|
|
18
|
+
|
|
19
|
+
# :database
|
|
20
|
+
# either use :url, :type, :username, AND :password (for a
|
|
21
|
+
# regular connection) OR :datasource AND :type (for a container
|
|
22
|
+
# connection), default to memory data store
|
|
23
|
+
# example for a derby connection:
|
|
24
|
+
# :database => {:url => "jdbc:hsqldb:file:/some/location/on/your/drive", :type => "hsql", :username => "sa", :password => ""}
|
|
25
|
+
# :model
|
|
26
|
+
# name of model to use, default is jena's default
|
|
27
|
+
# :lucene
|
|
28
|
+
# set to true to enable true lucene indexing of this store, default false
|
|
29
|
+
def initialize(params = {})
|
|
30
|
+
dbparams = params[:database]
|
|
31
|
+
self.keyword_search = params[:lucene]
|
|
32
|
+
|
|
33
|
+
# if the model name is not provided and file persistence is used, then jena just
|
|
34
|
+
# creates random files in the tmp dir. not good, as we need to know the model name
|
|
35
|
+
# to have persistence
|
|
36
|
+
if params[:model]
|
|
37
|
+
self.model_name = params[:model]
|
|
38
|
+
else
|
|
39
|
+
self.model_name = "http://deri.org/defaultgraph"
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
# do some sanity checking
|
|
43
|
+
if self.keyword_search? && !LuceneARQ.lucene_available?
|
|
44
|
+
raise NG4JAdapterConfigurationError, "Lucene requested but is not available"
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# NG4J only supports in-memory store and database storage with HSQL, mysql and postgresql
|
|
48
|
+
if dbparams
|
|
49
|
+
|
|
50
|
+
# check if the jdbc driver of the requested database is available
|
|
51
|
+
begin
|
|
52
|
+
if !Jena::DB.send("#{dbparams[:type].downcase}_available?")
|
|
53
|
+
raise NG4JAdapterConfigurationError, "database type #{dbparams[:type]} not available"
|
|
54
|
+
end
|
|
55
|
+
rescue NameError
|
|
56
|
+
raise NG4JAdapterConfigurationError, "database type #{dbparams[:type]} not recognized"
|
|
57
|
+
end
|
|
58
|
+
|
|
59
|
+
self.connection = NG4J::DB::DriverManager.getConnection(dbparams[:url],
|
|
60
|
+
dbparams[:username],
|
|
61
|
+
dbparams[:password])
|
|
62
|
+
|
|
63
|
+
self.graphset = NG4J::DB::NamedGraphSetDB.new(self.connection)
|
|
64
|
+
|
|
65
|
+
else
|
|
66
|
+
self.graphset = NG4J::Impl::NamedGraphSetImpl.new()
|
|
67
|
+
end
|
|
68
|
+
|
|
69
|
+
self.model = self.graphset.asJenaModel(self.model_name)
|
|
70
|
+
|
|
71
|
+
self.reads = true
|
|
72
|
+
self.writes = true
|
|
73
|
+
|
|
74
|
+
self
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
|
|
78
|
+
def size
|
|
79
|
+
self.graphset.countQuads
|
|
80
|
+
end
|
|
81
|
+
|
|
82
|
+
# TODO: add quad support
|
|
83
|
+
def dump
|
|
84
|
+
it = self.model.listStatements
|
|
85
|
+
res = ""
|
|
86
|
+
while it.hasNext
|
|
87
|
+
res += it.nextStatement.asTriple.toString
|
|
88
|
+
res += " . \n"
|
|
89
|
+
end
|
|
90
|
+
res
|
|
91
|
+
end
|
|
92
|
+
|
|
93
|
+
def close
|
|
94
|
+
ConnectionPool.remove_data_source(self)
|
|
95
|
+
self.model.close
|
|
96
|
+
self.graphset.close
|
|
97
|
+
self.connection.close unless self.connection.nil?
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
def clear
|
|
101
|
+
self.model.removeAll
|
|
102
|
+
self.model.prepare if self.model.respond_to? :prepare
|
|
103
|
+
self.model.rebind if self.model.respond_to? :rebind
|
|
104
|
+
end
|
|
105
|
+
|
|
106
|
+
def delete(subject, predicate, object, context = nil)
|
|
107
|
+
self.lucene_index_behind = true
|
|
108
|
+
|
|
109
|
+
if context.nil?
|
|
110
|
+
context = RDFS::Resource.new(self.model_name)
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
c = (is_wildcard?(context) ? Jena::Graph::Node.create("??") : build_context(context))
|
|
114
|
+
s = (is_wildcard?(subject) ? Jena::Graph::Node.create("??") : build_subject(subject))
|
|
115
|
+
p = (is_wildcard?(predicate) ? Jena::Graph::Node.create("??") : build_predicate(predicate))
|
|
116
|
+
o = (is_wildcard?(object) ? Jena::Graph::Node.create("??") : build_object(object))
|
|
117
|
+
|
|
118
|
+
self.graphset.removeQuad(NG4J::Internal::Quad.new(c, s, p, o))
|
|
119
|
+
|
|
120
|
+
self.model.prepare if self.model.respond_to? :prepare
|
|
121
|
+
self.model.rebind if self.model.respond_to? :rebind
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
def add(subject, predicate, object, context = nil)
|
|
125
|
+
self.lucene_index_behind = true
|
|
126
|
+
|
|
127
|
+
if context.nil?
|
|
128
|
+
context = RDFS::Resource.new(self.model_name)
|
|
129
|
+
end
|
|
130
|
+
|
|
131
|
+
self.graphset.addQuad(NG4J::Internal::Quad.new(build_context(context), build_subject(subject),
|
|
132
|
+
build_predicate(predicate), build_object(object)))
|
|
133
|
+
|
|
134
|
+
self.model.prepare if self.model.respond_to? :prepare
|
|
135
|
+
self.model.rebind if self.model.respond_to? :rebind
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
def flush
|
|
139
|
+
# no-op
|
|
140
|
+
end
|
|
141
|
+
|
|
142
|
+
|
|
143
|
+
# :format
|
|
144
|
+
# format -- :ntriples, :n3, or :rdfxml, default :rdfxml
|
|
145
|
+
# :into
|
|
146
|
+
# :default_model for the main model, otherwise the contents of the uri get loaded
|
|
147
|
+
# into a context with the same uri
|
|
148
|
+
# TODO: add quad support
|
|
149
|
+
def load(uri_as_string, params = {})
|
|
150
|
+
format = params[:format] ? params[:format] : :rdfxml
|
|
151
|
+
|
|
152
|
+
jena_format =
|
|
153
|
+
case format
|
|
154
|
+
when :rdfxml
|
|
155
|
+
"RDF/XML"
|
|
156
|
+
when :ntriples
|
|
157
|
+
"N-TRIPLE"
|
|
158
|
+
when :n3
|
|
159
|
+
"N3"
|
|
160
|
+
end
|
|
161
|
+
|
|
162
|
+
|
|
163
|
+
if params[:into] == :default_model
|
|
164
|
+
self.model.read(uri_as_string, jena_format)
|
|
165
|
+
else
|
|
166
|
+
self.graphset.read(uri_as_string, jena_format)
|
|
167
|
+
end
|
|
168
|
+
|
|
169
|
+
self.lucene_index_behind = true
|
|
170
|
+
|
|
171
|
+
end
|
|
172
|
+
|
|
173
|
+
# this method gets called by the ActiveRDF query engine
|
|
174
|
+
# TODO: add quad support
|
|
175
|
+
def query(query, params = {})
|
|
176
|
+
|
|
177
|
+
if self.keyword_search? && query.keyword?
|
|
178
|
+
|
|
179
|
+
# duplicate the query
|
|
180
|
+
query_with_keywords = query.dup
|
|
181
|
+
|
|
182
|
+
# now duplicate the where stuff so we can fiddle with it...
|
|
183
|
+
# this is GROSS -- fix this if Query ever sprouts a proper
|
|
184
|
+
# deep copy or a where_clauses setter
|
|
185
|
+
query_with_keywords.instance_variable_set("@where_clauses", query.where_clauses.dup)
|
|
186
|
+
|
|
187
|
+
# now, for each of the keyword clauses, set up the search
|
|
188
|
+
query.keywords.each do |var, keyword|
|
|
189
|
+
# use this if activerdf expects the subject to come back and not the
|
|
190
|
+
# literal and using indexbuilderstring
|
|
191
|
+
#query.where("lucene_literal_#{var}".to_sym, LuceneARQ::KEYWORD_PREDICATE, keyword)
|
|
192
|
+
#query.where(var, "lucene_property_#{var}".to_sym, "lucene_literal_#{var}".to_sym)
|
|
193
|
+
|
|
194
|
+
# use this if activerdf expects the literal to come back, not the
|
|
195
|
+
# subject, or if using indexbuildersubject (which makes the subject
|
|
196
|
+
# come back instead of the literal
|
|
197
|
+
query_with_keywords.where(var, RDFS::Resource.new(LuceneARQ::KEYWORD_PREDICATE), keyword)
|
|
198
|
+
|
|
199
|
+
end
|
|
200
|
+
|
|
201
|
+
else
|
|
202
|
+
query_with_keywords = query
|
|
203
|
+
end
|
|
204
|
+
|
|
205
|
+
# jena knows about lucene, so use the query object that has the keyword
|
|
206
|
+
# search requests expanded.
|
|
207
|
+
results = query_jena(query_with_keywords)
|
|
208
|
+
|
|
209
|
+
if query.ask?
|
|
210
|
+
return [[true]] if results.size > 0
|
|
211
|
+
return [[false]]
|
|
212
|
+
end
|
|
213
|
+
|
|
214
|
+
if query.count?
|
|
215
|
+
return results.size
|
|
216
|
+
end
|
|
217
|
+
|
|
218
|
+
results
|
|
219
|
+
|
|
220
|
+
end
|
|
221
|
+
|
|
222
|
+
# ==========================================================================
|
|
223
|
+
# put private methods here to seperate api methods from the
|
|
224
|
+
# inner workings of the adapter
|
|
225
|
+
private
|
|
226
|
+
|
|
227
|
+
def build_object(object)
|
|
228
|
+
if object.respond_to? :uri
|
|
229
|
+
o = Jena::Graph::Node.createURI(object.uri)
|
|
230
|
+
else
|
|
231
|
+
#xlate to literal
|
|
232
|
+
if !object.kind_of? Literal
|
|
233
|
+
objlit = Literal.new object
|
|
234
|
+
else
|
|
235
|
+
objlit = object
|
|
236
|
+
end
|
|
237
|
+
|
|
238
|
+
if objlit.type
|
|
239
|
+
type = Jena::Datatypes::TypeMapper.getInstance.getTypeByName(objlit.type.uri)
|
|
240
|
+
o = Jena::Graph::Node.createLiteral(objlit.value.to_s, nil, type)
|
|
241
|
+
elsif objlit.language
|
|
242
|
+
o = Jena::Graph::Node.createLiteral(objlit.value.to_s, objlit.language, nil)
|
|
243
|
+
else
|
|
244
|
+
o = Jena::Graph::Node.createLiteral(objlit.value.to_s)
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
return o
|
|
248
|
+
end
|
|
249
|
+
|
|
250
|
+
def build_subject(subject)
|
|
251
|
+
# TODO: raise error if not URI
|
|
252
|
+
return Jena::Graph::Node.createURI(subject.uri)
|
|
253
|
+
end
|
|
254
|
+
|
|
255
|
+
def build_predicate(predicate)
|
|
256
|
+
# TODO: raise error if not URI
|
|
257
|
+
return Jena::Graph::Node.createURI(predicate.uri)
|
|
258
|
+
end
|
|
259
|
+
|
|
260
|
+
def build_context(context)
|
|
261
|
+
# TODO: raise error if not URI
|
|
262
|
+
return Jena::Graph::Node.createURI(context.uri)
|
|
263
|
+
end
|
|
264
|
+
|
|
265
|
+
# def build_model_object(object)
|
|
266
|
+
# if object.respond_to? :uri
|
|
267
|
+
# o = self.model.getResource(object.uri)
|
|
268
|
+
# else
|
|
269
|
+
# #xlate to literal
|
|
270
|
+
# if !object.kind_of? Literal
|
|
271
|
+
# objlit = Literal.new object
|
|
272
|
+
# else
|
|
273
|
+
# objlit = object
|
|
274
|
+
# end
|
|
275
|
+
#
|
|
276
|
+
# if objlit.type
|
|
277
|
+
# type = Jena::Datatypes::TypeMapper.getInstance.getTypeByName(objlit.type.uri)
|
|
278
|
+
# o = self.model.createTypedLiteral(objlit.value, type)
|
|
279
|
+
# elsif objlit.language
|
|
280
|
+
# o = self.model.createLiteral(objlit.value, objlit.language)
|
|
281
|
+
# else
|
|
282
|
+
# o = self.model.createTypedLiteral(objlit.value, nil)
|
|
283
|
+
# end
|
|
284
|
+
# end
|
|
285
|
+
# return o
|
|
286
|
+
# end
|
|
287
|
+
#
|
|
288
|
+
# def build_model_subject(subject)
|
|
289
|
+
# self.model.getResource(subject.uri)
|
|
290
|
+
# end
|
|
291
|
+
#
|
|
292
|
+
# def build_model_predicate(predicate)
|
|
293
|
+
# self.model.getProperty(predicate.uri)
|
|
294
|
+
# end
|
|
295
|
+
|
|
296
|
+
def is_wildcard?(thing)
|
|
297
|
+
(thing == nil) || thing.kind_of?(Symbol)
|
|
298
|
+
end
|
|
299
|
+
|
|
300
|
+
def query_jena(query)
|
|
301
|
+
query_sparql = translate(query)
|
|
302
|
+
|
|
303
|
+
# jena_query = Jena::Query::QueryFactory.create(query_sparql)
|
|
304
|
+
#
|
|
305
|
+
# puts jena_query
|
|
306
|
+
#
|
|
307
|
+
|
|
308
|
+
if query_sparql =~ /GRAPH/
|
|
309
|
+
# query contains GRAPH keyword and has to be executed against an NG4J NamedGraphDataset
|
|
310
|
+
qexec = Jena::Query::QueryExecutionFactory.create(query_sparql,
|
|
311
|
+
NG4J::Sparql::NamedGraphDataset.new(self.graphset, Jena::Graph::Node.createURI(self.model_name)))
|
|
312
|
+
else
|
|
313
|
+
# query without GRAPH keyword gets executed against the union model
|
|
314
|
+
qexec = Jena::Query::QueryExecutionFactory.create(query_sparql, self.model)
|
|
315
|
+
end
|
|
316
|
+
|
|
317
|
+
# PROBABLY A VERY EXPENSIVE OPERATION (rebuilds lucene index if ANYTHING
|
|
318
|
+
# changed -- this seems to be the only way, since you have to close
|
|
319
|
+
# the index after you build it...
|
|
320
|
+
if query.keyword? && self.keyword_search?
|
|
321
|
+
LuceneARQ::LARQ.setDefaultIndex(qexec.getContext, retrieve_lucene_index)
|
|
322
|
+
end
|
|
323
|
+
|
|
324
|
+
begin
|
|
325
|
+
results = perform_query(query, qexec)
|
|
326
|
+
ensure
|
|
327
|
+
qexec.close
|
|
328
|
+
end
|
|
329
|
+
|
|
330
|
+
results
|
|
331
|
+
end
|
|
332
|
+
|
|
333
|
+
|
|
334
|
+
def perform_query(query, qexec)
|
|
335
|
+
results = qexec.execSelect
|
|
336
|
+
arr_results = []
|
|
337
|
+
|
|
338
|
+
while results.hasNext
|
|
339
|
+
row = results.nextSolution
|
|
340
|
+
res_row = []
|
|
341
|
+
query.select_clauses.each do |kw|
|
|
342
|
+
thing = row.get(kw.to_s)
|
|
343
|
+
if thing.kind_of? Jena::Model::Resource
|
|
344
|
+
next if thing.isAnon
|
|
345
|
+
res_row << RDFS::Resource.new(thing.to_s)
|
|
346
|
+
elsif thing.kind_of? Jena::Model::Literal
|
|
347
|
+
if thing.getLanguage == "" and thing.getDatatypeURI.nil?
|
|
348
|
+
# plain literal
|
|
349
|
+
res_row << Literal.new(thing.getString)
|
|
350
|
+
elsif thing.getLanguage == ""
|
|
351
|
+
# datatyped literal
|
|
352
|
+
res_row << Literal.new(thing.getValue, RDFS::Resource.new(thing.getDatatypeURI))
|
|
353
|
+
elsif thing.getDatatypeURI.nil?
|
|
354
|
+
# language tagged literal
|
|
355
|
+
res_row << Literal.new(thing.getLexicalForm, "@" + thing.getLanguage)
|
|
356
|
+
else
|
|
357
|
+
raise ActiveRdfError, "Jena Sparql returned a strange literal"
|
|
358
|
+
end
|
|
359
|
+
else
|
|
360
|
+
raise ActiveRdfError, "Returned thing other than resource or literal"
|
|
361
|
+
end
|
|
362
|
+
end
|
|
363
|
+
arr_results << res_row
|
|
364
|
+
end
|
|
365
|
+
arr_results
|
|
366
|
+
end
|
|
367
|
+
|
|
368
|
+
def retrieve_lucene_index
|
|
369
|
+
if self.lucene_index_behind?
|
|
370
|
+
builder = LuceneARQ::IndexBuilderSubject.new
|
|
371
|
+
builder.indexStatements(self.model.listStatements)
|
|
372
|
+
builder.closeForWriting
|
|
373
|
+
self.lucene_index = builder.getIndex
|
|
374
|
+
self.lucene_index_behind = false
|
|
375
|
+
end
|
|
376
|
+
self.lucene_index
|
|
377
|
+
end
|
|
378
|
+
|
|
379
|
+
end
|