我想从Virtuoso端点检索TTL。
query(construct_query).each_statement do |statement|
puts statement.inspect
end
CONSTRUCT
查询返回 ~652977 语句。
CONSTRUCT {
?s ?p ?o
}
FROM <http://tempgraph>
WHERE {
?s ?p ?o .
}
但是我遇到了分段错误。
/usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi/v2/parser.rb:209: [BUG] Segmentation fault at 0x00000000000000
ruby 2.3.1p112 (2016-04-26 revision 54768) [x86_64-linux]
-- Control frame information -----------------------------------------------
c:0057 p:---- s:0289 e:000288 CFUNC :raptor_parser_parse_chunk
c:0056 p:0018 s:0282 E:001128 METHOD /usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi/v2/parser.rb:209
c:0055 p:0025 s:0278 E:001198 RESCUE /usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi/v2/parser.rb:163
c:0054 p:0056 s:0275 E:001be0 METHOD /usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi/v2/parser.rb:157
c:0053 p:0175 s:0268 E:0006d8 METHOD /usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi/v2/parser.rb:92
c:0052 p:0018 s:0262 E:000110 METHOD /usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi.rb:118
c:0051 p:0048 s:0257 E:001290 METHOD /usr/local/bundle/gems/rdf-raptor-1.99.0/lib/rdf/raptor/ffi.rb:84
c:0050 p:0130 s:0252 E:000f38 METHOD /app/lib/queries.rb:146
... etc
然而,测试直接通过HTTP查询Virtuoso端点,结果已成功获取并创建。
require 'net/http'
require 'linkeddata'
require 'cgi'
query = "CONSTRUCT { ?s ?p ?o } FROM <http://tempgraph> WHERE { ?s ?p ?o . }"
baseURL = "http://localhost:8890/sparql/"
sparqlURL=baseURL+"?query=#{CGI.escape query}"
response = Net::HTTP.get_response(URI.parse(sparqlURL))
File.open("response.ttl", "wb") do |res|
res.puts response.body
end
它创建了完整的TTL
$ cat response.ttl | wc -l
652996
[编辑] 通过HTTP从端点获取的 response.ttl 可以通过RDF / Ruby库成功地序列化为RDF。因此,可以安全地假设它是SPARQL客户端。
RDF::Writer.open("/app/output.rdf") do |writer|
RDF::Reader.open("/app/response.ttl") do |reader|
reader.each_statement do |statement|
writer << statement
end
end
end