Contents of /trunk/soprano/patches/soprano-2.6.51-git20110720.patch
Parent Directory | Revision Log
Revision 1428 -
(show annotations)
(download)
Wed Jul 20 20:28:37 2011 UTC (13 years, 2 months ago) by niro
File size: 54492 byte(s)
Wed Jul 20 20:28:37 2011 UTC (13 years, 2 months ago) by niro
File size: 54492 byte(s)
added git patch
1 | diff -Naur soprano/backends/redland/redlandqueryresult.cpp soprano-2.6.51/backends/redland/redlandqueryresult.cpp |
2 | --- soprano/backends/redland/redlandqueryresult.cpp 2011-07-19 18:49:58.000000000 +0200 |
3 | +++ soprano-2.6.51/backends/redland/redlandqueryresult.cpp 2011-06-05 10:38:25.000000000 +0200 |
4 | @@ -77,10 +77,9 @@ |
5 | d->model = model; |
6 | |
7 | const char** names = 0; |
8 | - int number = librdf_query_results_get_bindings_count(d->result); |
9 | if ( !librdf_query_results_get_bindings( d->result, &names, 0 ) ) { |
10 | - for ( int i = 0; i < number; i++ ) { |
11 | - d->names.append( QString::fromUtf8( names[i] ) ); |
12 | + for ( ; *names; names++ ) { |
13 | + d->names.append( QString::fromUtf8( *names ) ); |
14 | } |
15 | } |
16 | } |
17 | diff -Naur soprano/ChangeLog soprano-2.6.51/ChangeLog |
18 | --- soprano/ChangeLog 2011-07-19 18:49:58.000000000 +0200 |
19 | +++ soprano-2.6.51/ChangeLog 2011-06-05 10:38:25.000000000 +0200 |
20 | @@ -2,8 +2,6 @@ |
21 | * Use the new Virtuoso parameter XAnyNormalization to use normalized accents for full-text searching by default. |
22 | * Updated NAO Vocabulary namespace to include changes from SDO 0.7. |
23 | * Added method LiteralValue::fromVariant which provides some useful type conversions. |
24 | - * Fixed incorrect binding names counting in redland queries |
25 | - * Ported Raptor serializer and parser plugins to Raptor2. |
26 | |
27 | 2.6.1 |
28 | * Let onto2vocabularyclass convert dots in entity names to underscores to create valid C++ names. |
29 | diff -Naur soprano/cmake/modules/FindRaptor.cmake soprano-2.6.51/cmake/modules/FindRaptor.cmake |
30 | --- soprano/cmake/modules/FindRaptor.cmake 2011-07-19 18:49:58.000000000 +0200 |
31 | +++ soprano-2.6.51/cmake/modules/FindRaptor.cmake 2011-06-05 10:38:25.000000000 +0200 |
32 | @@ -5,13 +5,9 @@ |
33 | # RAPTOR_LIBRARIES - Link these to use Raptor |
34 | # RAPTOR_INCLUDE_DIR - Include directory for using Raptor |
35 | # RAPTOR_DEFINITIONS - Compiler switches required for using Raptor |
36 | -# |
37 | -# Capabilities |
38 | -# RAPTOR_HAVE_TRIG - Set if raptor has TRIG |
39 | +# RAPTOR_VERSION - The Raptor version string |
40 | |
41 | -# (c) 2007-2011 Sebastian Trueg <trueg@kde.org> |
42 | -# (c) 2011 Artem Serebriyskiy <v.for.vandal@gmail.com> |
43 | -# (c) 2011 Michael Jansen <kde@michael-jansen.biz> |
44 | +# (c) 2007-2009 Sebastian Trueg <trueg@kde.org> |
45 | # |
46 | # Based on FindFontconfig Copyright (c) 2006,2007 Laurent Montel, <montel@kde.org> |
47 | # |
48 | @@ -19,83 +15,89 @@ |
49 | # For details see the accompanying COPYING-CMAKE-SCRIPTS file. |
50 | |
51 | |
52 | -MACRO ( FIND_RAPTOR libname libhints includehints ) |
53 | - find_library_with_debug( |
54 | - RAPTOR_LIBRARIES |
55 | - WIN32_DEBUG_POSTFIX d |
56 | - NAMES ${libname} |
57 | - HINTS ${libhints}) |
58 | - find_path( |
59 | - RAPTOR_INCLUDE_DIR raptor.h |
60 | - HINTS ${includehints} |
61 | - PATH_SUFFIXES ${libname}) |
62 | -ENDMACRO () |
63 | - |
64 | - |
65 | - |
66 | -# Check if we have cached results in case the last round was successful. |
67 | -if ( NOT( RAPTOR_INCLUDE_DIR AND RAPTOR_LIBRARIES ) OR NOT RAPTOR_FOUND ) |
68 | - |
69 | - include(FindLibraryWithDebug) |
70 | - include(MacroEnsureVersion) |
71 | - find_package(PkgConfig) |
72 | - |
73 | - # Vy default look for version 2.0 |
74 | - if (NOT Raptor_FIND_VERSION ) |
75 | - set( Raptor_FIND_VERSION "2.0") |
76 | - set( Raptor_FIND_VERSION_MAJOR "2" ) |
77 | - set( Raptor_FIND_VERSION_MINOR "0" ) |
78 | - endif () |
79 | - |
80 | - if ( Raptor_FIND_VERSION_MAJOR EQUAL "2" ) |
81 | - |
82 | - if ( NOT WIN32 ) |
83 | - pkg_check_modules(PC_RAPTOR2 QUIET raptor2) |
84 | - if ( PC_RAPTOR2_FOUND ) |
85 | - set(RAPTOR_DEFINITIONS ${PC_RAPTOR2_CFLAGS_OTHER}) |
86 | - set(RAPTOR_VERSION ${PC_RAPTOR2_VERSION} CACHE STRING "Raptor Version found" ) |
87 | - endif () |
88 | - endif () |
89 | - find_raptor( raptor2 "${PC_RAPTOR2_LIBDIR};${PC_RAPTOR2_LIBRARY_DIRS}" "${PC_RAPTOR2_INCLUDEDIR};${PC_RAPTOR2_INCLUDE_DIRS}") |
90 | - |
91 | - elseif ( Raptor_FIND_VERSION_MAJOR EQUAL "1" ) |
92 | - |
93 | - if ( NOT WIN32 ) |
94 | - pkg_check_modules(PC_RAPTOR QUIET raptor) |
95 | - if ( PC_RAPTOR_FOUND ) |
96 | - set(RAPTOR_DEFINITIONS ${PC_RAPTOR_CFLAGS_OTHER}) |
97 | - set(RAPTOR_VERSION ${PC_RAPTOR_VERSION} CACHE STRING "Raptor Version found" ) |
98 | - endif () |
99 | - endif () |
100 | - find_raptor( raptor "${PC_RAPTOR_LIBDIR};${PC_RAPTOR_LIBRARY_DIRS}" "${PC_RAPTOR_INCLUDEDIR};${PC_RAPTOR_INCLUDE_DIRS}") |
101 | - |
102 | - else () |
103 | - |
104 | - message( FATAL_ERROR "No idea how to check for version : ${Raptor_FIND_VERSION}") |
105 | - |
106 | - endif() |
107 | - |
108 | - if (RAPTOR_VERSION) |
109 | - MACRO_ENSURE_VERSION("1.4.16" ${RAPTOR_VERSION} RAPTOR_HAVE_TRIG) |
110 | - endif (RAPTOR_VERSION) |
111 | - |
112 | - mark_as_advanced(RAPTOR_INCLUDE_DIR RAPTOR_LIBRARIES) |
113 | - |
114 | -endif () # Check for cached values |
115 | - |
116 | -include(FindPackageHandleStandardArgs) |
117 | - |
118 | -find_package_handle_standard_args( |
119 | - Raptor |
120 | - VERSION_VAR RAPTOR_VERSION |
121 | - REQUIRED_VARS RAPTOR_LIBRARIES RAPTOR_INCLUDE_DIR) |
122 | - |
123 | -mark_as_advanced(RAPTOR_VERSION) |
124 | - |
125 | -if (NOT RAPTOR_FOUND AND Raptor_FIND_VERSION_MAJOR EQUAL "2" AND NOT Raptor_FIND_QUIET ) |
126 | - pkg_check_modules(PC_RAPTOR QUIET raptor) |
127 | - if (PC_RAPTOR_FOUND) |
128 | - message( STATUS "You have raptor1 version ${PC_RAPTOR_VERSION} installed. Please update." ) |
129 | - endif () |
130 | -endif () |
131 | +INCLUDE(MacroEnsureVersion) |
132 | + |
133 | |
134 | +if(WINCE) |
135 | +FIND_PROGRAM( |
136 | + RAPTOR_CONFIG |
137 | + NAMES raptor-config |
138 | + PATHS ${HOST_BINDIR} NO_DEFAULT_PATH |
139 | + ) |
140 | +else(WINCE) |
141 | +FIND_PROGRAM( |
142 | + RAPTOR_CONFIG |
143 | + NAMES raptor-config |
144 | + ) |
145 | +endif(WINCE) |
146 | + |
147 | +if(RAPTOR_CONFIG) |
148 | + EXECUTE_PROCESS( |
149 | + COMMAND ${RAPTOR_CONFIG} --version |
150 | + OUTPUT_VARIABLE RAPTOR_VERSION |
151 | + ) |
152 | + if(RAPTOR_VERSION) |
153 | + STRING(REPLACE "\n" "" RAPTOR_VERSION ${RAPTOR_VERSION}) |
154 | + |
155 | + MACRO_ENSURE_VERSION("1.4.16" ${RAPTOR_VERSION} RAPTOR_HAVE_TRIG) |
156 | + |
157 | + # extract include paths from raptor-config |
158 | + EXECUTE_PROCESS( |
159 | + COMMAND ${RAPTOR_CONFIG} --cflags |
160 | + OUTPUT_VARIABLE raptor_CFLAGS_ARGS) |
161 | + STRING( REPLACE " " ";" raptor_CFLAGS_ARGS ${raptor_CFLAGS_ARGS} ) |
162 | + FOREACH( _ARG ${raptor_CFLAGS_ARGS} ) |
163 | + IF(${_ARG} MATCHES "^-I") |
164 | + STRING(REGEX REPLACE "^-I" "" _ARG ${_ARG}) |
165 | + STRING( REPLACE "\n" "" _ARG ${_ARG} ) |
166 | + LIST(APPEND raptor_INCLUDE_DIRS ${_ARG}) |
167 | + ENDIF(${_ARG} MATCHES "^-I") |
168 | + ENDFOREACH(_ARG) |
169 | + |
170 | + # extract lib paths from raptor-config |
171 | + EXECUTE_PROCESS( |
172 | + COMMAND ${RAPTOR_CONFIG} --libs |
173 | + OUTPUT_VARIABLE raptor_CFLAGS_ARGS) |
174 | + STRING( REPLACE " " ";" raptor_CFLAGS_ARGS ${raptor_CFLAGS_ARGS} ) |
175 | + FOREACH( _ARG ${raptor_CFLAGS_ARGS} ) |
176 | + IF(${_ARG} MATCHES "^-L") |
177 | + STRING(REGEX REPLACE "^-L" "" _ARG ${_ARG}) |
178 | + LIST(APPEND raptor_LIBRARY_DIRS ${_ARG}) |
179 | + ENDIF(${_ARG} MATCHES "^-L") |
180 | + ENDFOREACH(_ARG) |
181 | + endif(RAPTOR_VERSION) |
182 | +else(RAPTOR_CONFIG) |
183 | + SET(RAPTOR_VERSION "1.0.0") |
184 | +endif(RAPTOR_CONFIG) |
185 | + |
186 | +find_path(RAPTOR_INCLUDE_DIR raptor.h |
187 | + PATHS |
188 | + ${redland_INCLUDE_DIRS} |
189 | + ${raptor_INCLUDE_DIRS} |
190 | + /usr/X11/include |
191 | + PATH_SUFFIXES redland |
192 | + ) |
193 | + |
194 | +find_library(RAPTOR_LIBRARIES NAMES raptor libraptor |
195 | + PATHS |
196 | + ${raptor_LIBRARY_DIRS} |
197 | + ) |
198 | + |
199 | +if (RAPTOR_INCLUDE_DIR AND RAPTOR_LIBRARIES) |
200 | + set(RAPTOR_FOUND TRUE) |
201 | +endif (RAPTOR_INCLUDE_DIR AND RAPTOR_LIBRARIES) |
202 | + |
203 | +if (RAPTOR_FOUND) |
204 | + set(RAPTOR_DEFINITIONS ${raptor_CFLAGS}) |
205 | + if (NOT Raptor_FIND_QUIETLY) |
206 | + message(STATUS "Found Raptor ${RAPTOR_VERSION}: libs - ${RAPTOR_LIBRARIES}; includes - ${RAPTOR_INCLUDE_DIR}") |
207 | + endif (NOT Raptor_FIND_QUIETLY) |
208 | +else (RAPTOR_FOUND) |
209 | + if (Raptor_FIND_REQUIRED) |
210 | + message(FATAL_ERROR "Could NOT find Raptor") |
211 | + endif (Raptor_FIND_REQUIRED) |
212 | +endif (RAPTOR_FOUND) |
213 | + |
214 | +mark_as_advanced(RAPTOR_INCLUDE_DIR_TMP |
215 | + RAPTOR_INCLUDE_DIR |
216 | + RAPTOR_LIBRARIES) |
217 | diff -Naur soprano/CMakeLists.txt soprano-2.6.51/CMakeLists.txt |
218 | --- soprano/CMakeLists.txt 2011-07-19 18:49:58.000000000 +0200 |
219 | +++ soprano-2.6.51/CMakeLists.txt 2011-06-05 10:38:25.000000000 +0200 |
220 | @@ -7,7 +7,7 @@ |
221 | ################## Soprano version ################################ |
222 | set(CMAKE_SOPRANO_VERSION_MAJOR 2) |
223 | set(CMAKE_SOPRANO_VERSION_MINOR 6) |
224 | -set(CMAKE_SOPRANO_VERSION_RELEASE 52) |
225 | +set(CMAKE_SOPRANO_VERSION_RELEASE 51) |
226 | set(CMAKE_SOPRANO_VERSION_STRING "${CMAKE_SOPRANO_VERSION_MAJOR}.${CMAKE_SOPRANO_VERSION_MINOR}.${CMAKE_SOPRANO_VERSION_RELEASE}") |
227 | |
228 | |
229 | diff -Naur soprano/parsers/raptor/CMakeLists.txt soprano-2.6.51/parsers/raptor/CMakeLists.txt |
230 | --- soprano/parsers/raptor/CMakeLists.txt 2011-07-19 18:49:58.000000000 +0200 |
231 | +++ soprano-2.6.51/parsers/raptor/CMakeLists.txt 2011-06-05 10:38:25.000000000 +0200 |
232 | @@ -13,11 +13,13 @@ |
233 | raptorparser.cpp |
234 | ) |
235 | |
236 | +configure_file(raptor-config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/raptor-config.h) |
237 | + |
238 | qt4_automoc(${raptor_parser_SRC}) |
239 | |
240 | -add_library(soprano_raptorparser MODULE ${raptor_parser_SRC}) |
241 | +add_library(soprano_raptorparser MODULE ${raptor_parser_SRC}) |
242 | |
243 | -TARGET_LINK_LIBRARIES(soprano_raptorparser soprano raptor2 ${RAPTOR_LIBRARIES}) |
244 | +TARGET_LINK_LIBRARIES(soprano_raptorparser soprano ${RAPTOR_LIBRARIES}) |
245 | |
246 | set_target_properties(soprano_raptorparser PROPERTIES |
247 | DEFINE_SYMBOL MAKE_RAPTORPARSER_LIB |
248 | diff -Naur soprano/parsers/raptor/raptor-config.h.cmake soprano-2.6.51/parsers/raptor/raptor-config.h.cmake |
249 | --- soprano/parsers/raptor/raptor-config.h.cmake 1970-01-01 01:00:00.000000000 +0100 |
250 | +++ soprano-2.6.51/parsers/raptor/raptor-config.h.cmake 2011-06-05 10:38:25.000000000 +0200 |
251 | @@ -0,0 +1 @@ |
252 | +#cmakedefine RAPTOR_HAVE_TRIG |
253 | diff -Naur soprano/parsers/raptor/raptorparser.cpp soprano-2.6.51/parsers/raptor/raptorparser.cpp |
254 | --- soprano/parsers/raptor/raptorparser.cpp 2011-07-19 18:49:58.000000000 +0200 |
255 | +++ soprano-2.6.51/parsers/raptor/raptorparser.cpp 2011-06-05 10:38:25.000000000 +0200 |
256 | @@ -3,7 +3,7 @@ |
257 | * This file is part of Soprano Project |
258 | * |
259 | * Copyright (C) 2006 Duncan Mac-Vicar <duncan@kde.org> |
260 | - * Copyright (C) 2007,2011 Sebastian Trueg <trueg@kde.org> |
261 | + * Copyright (C) 2007 Sebastian Trueg <trueg@kde.org> |
262 | * |
263 | * This library is free software; you can redistribute it and/or |
264 | * modify it under the terms of the GNU Library General Public |
265 | @@ -22,13 +22,14 @@ |
266 | */ |
267 | |
268 | #include "raptorparser.h" |
269 | +#include "raptor-config.h" |
270 | |
271 | #include "util/simplestatementiterator.h" |
272 | #include "statement.h" |
273 | #include "locator.h" |
274 | #include "error.h" |
275 | |
276 | -#include <raptor2/raptor.h> |
277 | +#include <raptor.h> |
278 | |
279 | #include <QtCore/QUrl> |
280 | #include <QtCore/QFile> |
281 | @@ -39,71 +40,88 @@ |
282 | #include <QtCore/QMutexLocker> |
283 | |
284 | |
285 | +namespace { |
286 | + class RaptorInitHelper |
287 | + { |
288 | + public: |
289 | + RaptorInitHelper() { |
290 | + raptor_init(); |
291 | + } |
292 | + ~RaptorInitHelper() { |
293 | + raptor_finish(); |
294 | + } |
295 | + }; |
296 | +} |
297 | + |
298 | Q_EXPORT_PLUGIN2(soprano_raptorparser, Soprano::Raptor::Parser) |
299 | |
300 | namespace { |
301 | - void raptorLogHandler(void *userData,raptor_log_message *message) |
302 | + // for some strange reason raptor <= 1.4.15 can only handle application/turtle when parsing |
303 | + // and application/x-turtle when serializing, but not the other way around |
304 | + QString mimeTypeString( Soprano::RdfSerialization s, const QString& userSerialization ) |
305 | + { |
306 | +#ifndef RAPTOR_HAVE_TRIG |
307 | + if ( s == Soprano::SerializationTurtle ) { |
308 | + return "application/turtle"; // x-turtle does not work.... |
309 | + } |
310 | + else |
311 | +#endif |
312 | + { |
313 | + return serializationMimeType( s, userSerialization ); |
314 | + } |
315 | + } |
316 | + |
317 | + |
318 | + void raptorMessageHandler( void* userData, raptor_locator* locator, const char* message ) |
319 | { |
320 | Soprano::Raptor::Parser* p = static_cast<Soprano::Raptor::Parser*>( userData ); |
321 | - if ( message->locator ) { |
322 | - p->setError( Soprano::Error::ParserError( Soprano::Error::Locator( message->locator->line, message->locator->column, message->locator->byte ), |
323 | - QString::fromUtf8( message->text ), |
324 | + if ( locator ) { |
325 | + p->setError( Soprano::Error::ParserError( Soprano::Error::Locator( locator->line, locator->column, locator->byte ), |
326 | + QString::fromUtf8( message ), |
327 | Soprano::Error::ErrorParsingFailed ) ); |
328 | } |
329 | else { |
330 | - p->setError( Soprano::Error::Error( QString::fromUtf8( message->text ), Soprano::Error::ErrorUnknown ) ); |
331 | + p->setError( Soprano::Error::Error( QString::fromUtf8( message ), Soprano::Error::ErrorUnknown ) ); |
332 | } |
333 | } |
334 | |
335 | - Soprano::Node convertNode( raptor_term * term ) |
336 | - { |
337 | - if(!term) { |
338 | - return Soprano::Node(); |
339 | - } |
340 | |
341 | - switch( term->type ) { |
342 | - case RAPTOR_TERM_TYPE_URI: { |
343 | - return Soprano::Node::createResourceNode( |
344 | - QString::fromUtf8( ( char* )raptor_uri_as_string( term->value.uri ) ) ); |
345 | - } |
346 | - |
347 | - case RAPTOR_TERM_TYPE_BLANK: { |
348 | - return Soprano::Node::createBlankNode( |
349 | - QString::fromUtf8( ( const char* )(term->value.blank.string) ) ); |
350 | - } |
351 | - |
352 | - case RAPTOR_TERM_TYPE_LITERAL: { |
353 | - if ( term->value.literal.datatype ) { |
354 | - return Soprano::Node::createLiteralNode( |
355 | - Soprano::LiteralValue::fromString( |
356 | - QString::fromUtf8( ( const char* )term->value.literal.string ), |
357 | - QString::fromUtf8( |
358 | - ( char* )raptor_uri_as_string(term->value.literal.datatype ) ) |
359 | - ) |
360 | - ); |
361 | + Soprano::Node convertNode( const void* data, raptor_identifier_type type, |
362 | + raptor_uri* objectLiteralDatatype = 0, const unsigned char* objectLiteralLanguage = 0 ) |
363 | + { |
364 | + switch( type ) { |
365 | + case RAPTOR_IDENTIFIER_TYPE_RESOURCE: |
366 | + case RAPTOR_IDENTIFIER_TYPE_PREDICATE: |
367 | + case RAPTOR_IDENTIFIER_TYPE_ORDINAL: |
368 | + return Soprano::Node::createResourceNode( QString::fromUtf8( ( char* )raptor_uri_as_string( ( raptor_uri* )data ) ) ); |
369 | + |
370 | + case RAPTOR_IDENTIFIER_TYPE_ANONYMOUS: |
371 | + return Soprano::Node::createBlankNode( QString::fromUtf8( ( const char* )data ) ); |
372 | + |
373 | + case RAPTOR_IDENTIFIER_TYPE_LITERAL: |
374 | + case RAPTOR_IDENTIFIER_TYPE_XML_LITERAL: |
375 | + if ( objectLiteralDatatype ) { |
376 | + return Soprano::Node::createLiteralNode( Soprano::LiteralValue::fromString( QString::fromUtf8( ( const char* )data ), |
377 | + QString::fromUtf8( ( char* )raptor_uri_as_string( objectLiteralDatatype ) ) ) ); |
378 | } |
379 | else { |
380 | - return Soprano::Node::createLiteralNode( |
381 | - Soprano::LiteralValue::createPlainLiteral( |
382 | - QString::fromUtf8( ( const char* )term->value.literal.string ), |
383 | - QString::fromUtf8( ( const char* )term->value.literal.language ) ) ); |
384 | + return Soprano::Node::createLiteralNode( Soprano::LiteralValue::createPlainLiteral( QString::fromUtf8( ( const char* )data ), |
385 | + QString::fromUtf8( ( const char* )objectLiteralLanguage ) ) ); |
386 | } |
387 | - } |
388 | |
389 | default: |
390 | return Soprano::Node(); |
391 | } |
392 | - |
393 | - // make gcc shut up |
394 | - return Soprano::Node(); |
395 | } |
396 | |
397 | + |
398 | Soprano::Statement convertTriple( const raptor_statement* triple ) |
399 | { |
400 | - return Soprano::Statement( convertNode( triple->subject ), |
401 | - convertNode( triple->predicate ), |
402 | - convertNode( triple->object ), |
403 | - convertNode( triple->graph ) ); |
404 | + return Soprano::Statement( convertNode( triple->subject, triple->subject_type ), |
405 | + convertNode( triple->predicate, triple->predicate_type ), |
406 | + convertNode( triple->object, triple->object_type, |
407 | + triple->object_literal_datatype, |
408 | + triple->object_literal_language ) ); |
409 | } |
410 | |
411 | |
412 | @@ -114,48 +132,47 @@ |
413 | }; |
414 | |
415 | |
416 | - void raptorTriplesHandler( void* userData, raptor_statement* triple ) |
417 | + void raptorTriplesHandler( void* userData, const raptor_statement* triple ) |
418 | { |
419 | - Q_ASSERT(userData); |
420 | ParserData* pd = static_cast<ParserData*>( userData ); |
421 | - pd->statements.append( convertTriple( triple ) ); |
422 | + Soprano::Statement s = convertTriple( triple ); |
423 | +// qDebug() << "got triple: " << s; |
424 | + s.setContext( pd->currentContext ); |
425 | + pd->statements.append( s ); |
426 | } |
427 | -} |
428 | |
429 | |
430 | -class Soprano::Raptor::Parser::Private |
431 | -{ |
432 | -public: |
433 | - raptor_world * world; |
434 | - mutable QMutex mutex; |
435 | -}; |
436 | + void raptorGraphHandler( void* userData, raptor_uri* graph ) |
437 | + { |
438 | + Soprano::Node context = Soprano::Node::createResourceNode( QString::fromUtf8( ( char* )raptor_uri_as_string( graph ) ) ); |
439 | + ParserData* pd = static_cast<ParserData*>( userData ); |
440 | + pd->currentContext = context; |
441 | +// qDebug() << "got graph: " << context; |
442 | + } |
443 | +} |
444 | |
445 | |
446 | Soprano::Raptor::Parser::Parser() |
447 | : QObject(), |
448 | - Soprano::Parser( "raptor" ), |
449 | - d(new Private()) |
450 | + Soprano::Parser( "raptor" ) |
451 | { |
452 | - d->world = raptor_new_world(); |
453 | - raptor_world_open(d->world); |
454 | - Q_ASSERT(d->world); |
455 | } |
456 | |
457 | |
458 | Soprano::Raptor::Parser::~Parser() |
459 | { |
460 | - raptor_free_world(d->world); |
461 | - delete d; |
462 | } |
463 | |
464 | |
465 | Soprano::RdfSerializations Soprano::Raptor::Parser::supportedSerializations() const |
466 | { |
467 | - return( SerializationRdfXml |
468 | - |SerializationNTriples |
469 | - |SerializationTurtle |
470 | - |SerializationTrig |
471 | - ); |
472 | + return( SerializationRdfXml |
473 | + |SerializationNTriples |
474 | + |SerializationTurtle |
475 | +#ifdef RAPTOR_HAVE_TRIG |
476 | + |SerializationTrig |
477 | +#endif |
478 | + ); |
479 | } |
480 | |
481 | |
482 | @@ -163,14 +180,13 @@ |
483 | const QString& userSerialization ) const |
484 | { |
485 | // create the parser |
486 | - const QString mimeType = Soprano::serializationMimeType( serialization, userSerialization ); |
487 | + QString mimeType = mimeTypeString( serialization, userSerialization ); |
488 | raptor_parser* parser = 0; |
489 | if ( serialization == Soprano::SerializationNTriples ) { |
490 | - parser = raptor_new_parser(d->world,"ntriples"); // mimetype for ntriple is text/plain which is useless for the method below |
491 | + parser = raptor_new_parser( "ntriples" ); // mimetype for ntriple is text/plain which is useless for the method below |
492 | } |
493 | else { |
494 | - parser = raptor_new_parser_for_content( d->world, |
495 | - 0, |
496 | + parser = raptor_new_parser_for_content( 0, |
497 | mimeType.toLatin1().data(), |
498 | 0, |
499 | 0, |
500 | @@ -178,14 +194,16 @@ |
501 | } |
502 | |
503 | if ( !parser ) { |
504 | - qDebug() << "(Soprano::Raptor::Parser) no parser for serialization " << Soprano::serializationMimeType( serialization, userSerialization ); |
505 | - setError( QString( "Failed to create parser for serialization %1" ).arg( Soprano::serializationMimeType( serialization, userSerialization ) ) ); |
506 | + qDebug() << "(Soprano::Raptor::Parser) no parser for serialization " << mimeTypeString( serialization, userSerialization ); |
507 | + setError( QString( "Failed to create parser for serialization %1" ).arg( mimeTypeString( serialization, userSerialization ) ) ); |
508 | return 0; |
509 | } |
510 | |
511 | - // set the error handling method |
512 | + // set the erro handling method |
513 | Parser* that = const_cast<Parser*>( this ); |
514 | - raptor_world_set_log_handler(d->world, that, raptorLogHandler); |
515 | + raptor_set_fatal_error_handler( parser, that, raptorMessageHandler ); |
516 | + raptor_set_error_handler( parser, that, raptorMessageHandler ); |
517 | + raptor_set_warning_handler( parser, that, raptorMessageHandler ); |
518 | |
519 | return parser; |
520 | } |
521 | @@ -205,6 +223,48 @@ |
522 | setError( QString( "Could not open file %1 for reading." ).arg( filename ) ); |
523 | return StatementIterator(); |
524 | } |
525 | + |
526 | +// clearError(); |
527 | + |
528 | +// raptor_parser* parser = createParser( serialization, userSerialization ); |
529 | +// if ( !parser ) { |
530 | +// return StatementIterator(); |
531 | +// } |
532 | + |
533 | +// // prepare the container for the parsed data |
534 | +// QList<Statement> statements; |
535 | +// raptor_set_statement_handler( parser, &statements, raptorTriplesHandler ); |
536 | + |
537 | +// // start the atual parsing |
538 | +// QUrl uri( QUrl::fromLocalFile( filename ) ); |
539 | +// if ( uri.scheme().isEmpty() ) { |
540 | +// // we need to help the stupid librdf file url handling |
541 | +// uri.setScheme("file"); |
542 | +// } |
543 | +// raptor_uri* raptorBaseUri = 0; |
544 | +// if ( !baseUri.toString().isEmpty() ) { |
545 | +// raptorBaseUri = raptor_new_uri( (unsigned char *) baseUri.toString().toUtf8().data() ); |
546 | +// } |
547 | +// raptor_uri* raptorUri = raptor_new_uri( (unsigned char *) uri.toString().toUtf8().data() ); |
548 | +// if ( !raptorUri ) { |
549 | +// setError( QLatin1String( "Internal: Failed to create raptor_uri instance for '%1'" ).arg( uri ) ); |
550 | +// return StatementIterator(); |
551 | +// } |
552 | + |
553 | +// int r = raptor_parse_uri( parser, raptorUri, raptorBaseUri ); |
554 | + |
555 | +// raptor_free_parser( parser ); |
556 | +// raptor_free_uri( raptorUri ); |
557 | +// if ( raptorBaseUri ) { |
558 | +// raptor_free_uri( raptorBaseUri ); |
559 | +// } |
560 | + |
561 | +// if ( r == 0 ) { |
562 | +// return SimpleStatementIterator( statements ); |
563 | +// } |
564 | +// else { |
565 | +// return StatementIterator(); |
566 | +// } |
567 | } |
568 | |
569 | |
570 | @@ -219,12 +279,14 @@ |
571 | } |
572 | |
573 | |
574 | -Soprano::StatementIterator Soprano::Raptor::Parser::parseStream( QTextStream& stream, |
575 | - const QUrl& baseUri, |
576 | - RdfSerialization serialization, |
577 | - const QString& userSerialization ) const |
578 | +Soprano::StatementIterator |
579 | +Soprano::Raptor::Parser::parseStream( QTextStream& stream, |
580 | + const QUrl& baseUri, |
581 | + RdfSerialization serialization, |
582 | + const QString& userSerialization ) const |
583 | { |
584 | - QMutexLocker lock( &d->mutex ); |
585 | + QMutexLocker lock( &m_mutex ); |
586 | + RaptorInitHelper raptorInitHelper; |
587 | |
588 | clearError(); |
589 | |
590 | @@ -235,19 +297,22 @@ |
591 | |
592 | // prepare the container for the parsed data |
593 | ParserData data; |
594 | - raptor_parser_set_statement_handler( parser, &data, raptorTriplesHandler ); |
595 | + raptor_set_statement_handler( parser, &data, raptorTriplesHandler ); |
596 | +#ifdef RAPTOR_HAVE_TRIG |
597 | + raptor_set_graph_handler( parser, &data, raptorGraphHandler ); |
598 | +#endif |
599 | |
600 | // start the atual parsing |
601 | raptor_uri* raptorBaseUri = 0; |
602 | if ( baseUri.isValid() ) { |
603 | - raptorBaseUri = raptor_new_uri( d->world,(unsigned char *) baseUri.toString().toUtf8().data() ); |
604 | + raptorBaseUri = raptor_new_uri( (unsigned char *) baseUri.toString().toUtf8().data() ); |
605 | } |
606 | else { |
607 | - raptorBaseUri = raptor_new_uri( d->world, (unsigned char *) "http://soprano.sourceforge.net/dummyBaseUri" ); |
608 | + raptorBaseUri = raptor_new_uri( (unsigned char *) "http://soprano.sourceforge.net/dummyBaseUri" ); |
609 | } |
610 | |
611 | clearError(); |
612 | - if ( raptor_parser_parse_start( parser, raptorBaseUri ) != 0 ) { |
613 | + if ( raptor_start_parse( parser, raptorBaseUri ) ) { |
614 | if ( !lastError() ) { |
615 | ErrorCache::setError( QLatin1String( "Failed to start parsing." ) ); |
616 | } |
617 | @@ -266,10 +331,7 @@ |
618 | while ( !dev->atEnd() ) { |
619 | qint64 r = dev->read( buf.data(), buf.size() ); |
620 | if ( r <= 0 || |
621 | - raptor_parser_parse_chunk( parser, ( const unsigned char* )buf.data(), r, 0 ) ) { |
622 | - // parse_chunck return failure code. |
623 | - // Call it with END=true and then free |
624 | - raptor_parser_parse_chunk(parser,0,0,/*END=*/1); |
625 | + raptor_parse_chunk( parser, ( const unsigned char* )buf.data(), r, 0 ) ) { |
626 | raptor_free_parser( parser ); |
627 | if ( raptorBaseUri ) { |
628 | raptor_free_uri( raptorBaseUri ); |
629 | @@ -282,10 +344,7 @@ |
630 | while ( !stream.atEnd() ) { |
631 | QString buf = stream.read( bufSize ); |
632 | QByteArray utf8Data = buf.toUtf8(); |
633 | - if ( raptor_parser_parse_chunk( parser, ( const unsigned char* )utf8Data.data(), utf8Data.length(), 0 ) ) { |
634 | - // parse_chunck return failure code. |
635 | - // Call it with END=true and then free |
636 | - raptor_parser_parse_chunk(parser,0,0,/*END=*/1); |
637 | + if ( raptor_parse_chunk( parser, ( const unsigned char* )utf8Data.data(), utf8Data.length(), 0 ) ) { |
638 | raptor_free_parser( parser ); |
639 | if ( raptorBaseUri ) { |
640 | raptor_free_uri( raptorBaseUri ); |
641 | @@ -294,8 +353,7 @@ |
642 | } |
643 | } |
644 | } |
645 | - // Call parse_chunk with END=true |
646 | - raptor_parser_parse_chunk( parser, 0, 0, 1 ); |
647 | + raptor_parse_chunk( parser, 0, 0, 1 ); |
648 | |
649 | raptor_free_parser( parser ); |
650 | if ( raptorBaseUri ) { |
651 | diff -Naur soprano/parsers/raptor/raptorparser.h soprano-2.6.51/parsers/raptor/raptorparser.h |
652 | --- soprano/parsers/raptor/raptorparser.h 2011-07-19 18:49:58.000000000 +0200 |
653 | +++ soprano-2.6.51/parsers/raptor/raptorparser.h 2011-06-05 10:38:25.000000000 +0200 |
654 | @@ -29,11 +29,13 @@ |
655 | |
656 | #include "parser.h" |
657 | |
658 | -#include<raptor2/raptor.h> |
659 | +#include <raptor.h> |
660 | + |
661 | |
662 | namespace Soprano { |
663 | namespace Raptor { |
664 | - class Parser : public QObject, public Soprano::Parser { |
665 | + class Parser : public QObject, public Soprano::Parser |
666 | + { |
667 | Q_OBJECT |
668 | Q_INTERFACES(Soprano::Parser) |
669 | |
670 | @@ -41,7 +43,7 @@ |
671 | Parser(); |
672 | ~Parser(); |
673 | |
674 | - RdfSerializations supportedSerializations() const; |
675 | + RdfSerializations supportedSerializations() const; |
676 | |
677 | StatementIterator parseFile( const QString& filename, |
678 | const QUrl& baseUri, |
679 | @@ -62,10 +64,7 @@ |
680 | raptor_parser* createParser( RdfSerialization serialization, |
681 | const QString& userSerialization = QString() ) const; |
682 | |
683 | - class Private; |
684 | - Private * d; |
685 | - |
686 | - |
687 | + mutable QMutex m_mutex; |
688 | }; |
689 | } |
690 | } |
691 | diff -Naur soprano/serializers/raptor/CMakeLists.txt soprano-2.6.51/serializers/raptor/CMakeLists.txt |
692 | --- soprano/serializers/raptor/CMakeLists.txt 2011-07-19 18:49:58.000000000 +0200 |
693 | +++ soprano-2.6.51/serializers/raptor/CMakeLists.txt 2011-06-05 10:38:25.000000000 +0200 |
694 | @@ -9,8 +9,13 @@ |
695 | ${RAPTOR_INCLUDE_DIR} |
696 | ) |
697 | |
698 | +include(CheckFunctionExists) |
699 | set(CMAKE_REQUIRED_INCLUDES ${RAPTOR_INCLUDE_DIR}) |
700 | set(CMAKE_REQUIRED_LIBRARIES ${RAPTOR_LIBRARIES}) |
701 | +check_function_exists( raptor_new_iostream_from_handler2 HAVE_IOSTREAM_HANDLER2 ) |
702 | +if(HAVE_IOSTREAM_HANDLER2) |
703 | + add_definitions(-DHAVE_IOSTREAM_HANDLER2) |
704 | +endif(HAVE_IOSTREAM_HANDLER2) |
705 | |
706 | set(raptor_serializer_SRC |
707 | raptorserializer.cpp |
708 | diff -Naur soprano/serializers/raptor/raptorserializer.cpp soprano-2.6.51/serializers/raptor/raptorserializer.cpp |
709 | --- soprano/serializers/raptor/raptorserializer.cpp 2011-07-19 18:49:58.000000000 +0200 |
710 | +++ soprano-2.6.51/serializers/raptor/raptorserializer.cpp 2011-06-05 10:38:25.000000000 +0200 |
711 | @@ -38,135 +38,54 @@ |
712 | class RaptorInitHelper |
713 | { |
714 | public: |
715 | - raptor_world* world; |
716 | - |
717 | RaptorInitHelper() { |
718 | - world = raptor_new_world(); |
719 | - raptor_world_open(world); |
720 | + raptor_init(); |
721 | } |
722 | ~RaptorInitHelper() { |
723 | - raptor_free_world(world); |
724 | + raptor_finish(); |
725 | } |
726 | }; |
727 | |
728 | - /* Probably unnecessary for serializer*/ |
729 | - /* |
730 | - QString mimeTypeString( Soprano::RdfSerialization s, const QString& userSerialization ) |
731 | - { |
732 | - if ( s == Soprano::SerializationTurtle ) { |
733 | - return "application/turtle"; // x-turtle does not work.... |
734 | - } |
735 | - else { |
736 | - return serializationMimeType( s, userSerialization ); |
737 | - } |
738 | - }*/ |
739 | - |
740 | - raptor_term * convertNode( raptor_world * world, const Soprano::Node& node) |
741 | + bool convertNode( const Soprano::Node& node, const void** data, raptor_identifier_type* type, raptor_uri** dataType = 0, const unsigned char** lang = 0 ) |
742 | { |
743 | - raptor_term * answer = 0; |
744 | - /* According to documentation, raptor_new_term family takes copy of |
745 | - * all given input parameters |
746 | - */ |
747 | if ( node.isResource() ) { |
748 | - raptor_uri * uri = raptor_new_uri(world, ( const unsigned char* )node.uri().toEncoded().data() ); |
749 | - answer = raptor_new_term_from_uri(world,uri); |
750 | - |
751 | - raptor_free_uri(uri); |
752 | + *data = raptor_new_uri( ( const unsigned char* )node.uri().toEncoded().data() ); |
753 | + *type = RAPTOR_IDENTIFIER_TYPE_RESOURCE; |
754 | + return true; |
755 | } |
756 | else if ( node.isBlank() ) { |
757 | - answer = raptor_new_term_from_blank( |
758 | - world, (const unsigned char*)node.identifier().toUtf8().data() ); |
759 | + *data = qstrdup( node.identifier().toUtf8().data() ); |
760 | + *type = RAPTOR_IDENTIFIER_TYPE_ANONYMOUS; |
761 | + return true; |
762 | } |
763 | else if ( node.isLiteral() ) { |
764 | - // Because QByteArray.data() is valid as long as QByteArray itself is |
765 | - // alive, we store langBA ( and others _x_BA untill function exits |
766 | - |
767 | - //const unsigned char * literal = 0; |
768 | - QByteArray langBA; |
769 | - const unsigned char * lang = 0; |
770 | - raptor_uri * datatype = 0; |
771 | - |
772 | + *data = qstrdup( node.toString().toUtf8().data() ); |
773 | if ( node.literal().isPlain() ) { |
774 | if ( !node.language().isEmpty() ) |
775 | - langBA = node.language().toUtf8(); |
776 | - lang = ( const unsigned char* )( langBA.constData() ); |
777 | + *lang = ( unsigned char* )qstrdup( ( const char* )node.language().toUtf8().data() ); |
778 | } |
779 | else { |
780 | - datatype = raptor_new_uri( world, ( const unsigned char* )node.dataType().toEncoded().data() ); |
781 | + *dataType = raptor_new_uri( ( const unsigned char* )node.dataType().toEncoded().data() ); |
782 | } |
783 | - |
784 | - // Now we costructs statement |
785 | - answer = raptor_new_term_from_literal(world,(const unsigned char*)node.literal().toByteArray().constData(),datatype,lang); |
786 | - |
787 | - // And free unnecessary resources |
788 | - if ( datatype) |
789 | - raptor_free_uri(datatype); |
790 | - |
791 | + *type = RAPTOR_IDENTIFIER_TYPE_LITERAL; |
792 | + return true; |
793 | } |
794 | |
795 | - return answer; |
796 | + return false; |
797 | } |
798 | |
799 | |
800 | - raptor_statement* convertStatement(raptor_world * world, const Soprano::Statement& statement ) |
801 | + raptor_statement* convertStatement( const Soprano::Statement& statement ) |
802 | { |
803 | - // Get terms |
804 | - raptor_term * subject_term = 0, *object_term = 0, * predicate_term = 0; |
805 | - raptor_term * graph_term = 0; |
806 | - |
807 | - subject_term = convertNode(world,statement.subject()); |
808 | - if ( !subject_term) { |
809 | - qDebug() << "Failed to convert subject to raptor_term"; |
810 | - return 0; |
811 | - } |
812 | - |
813 | - predicate_term = convertNode(world,statement.predicate()); |
814 | - if (!predicate_term) { |
815 | - qDebug() << "Failed to convert predicate to raptor_term"; |
816 | - raptor_free_term(subject_term); |
817 | - return 0; |
818 | - } |
819 | - |
820 | - object_term = convertNode(world,statement.object()); |
821 | - if (!object_term) { |
822 | - qDebug() << "Failed to convert object to raptor_term"; |
823 | - raptor_free_term(subject_term); |
824 | - raptor_free_term(predicate_term); |
825 | - return 0; |
826 | - } |
827 | - |
828 | - if ( !statement.context().isEmpty() ) { |
829 | - graph_term = convertNode(world,statement.context()); |
830 | - if(!graph_term) { |
831 | - qDebug() << "Failed to convert graph/context to raptor_term. Node is" << statement.context(); |
832 | - raptor_free_term(subject_term); |
833 | - raptor_free_term(predicate_term); |
834 | - raptor_free_term(object_term); |
835 | - return 0; |
836 | - } |
837 | - } |
838 | - |
839 | - |
840 | - raptor_statement* s = raptor_new_statement_from_nodes( |
841 | - world, |
842 | - subject_term, |
843 | - predicate_term, |
844 | - object_term, |
845 | - graph_term); |
846 | - |
847 | - if (!s) { |
848 | - qDebug() << "Failed to build raptor_statement from terms"; |
849 | - raptor_free_term(subject_term); |
850 | - raptor_free_term(predicate_term); |
851 | - raptor_free_term(object_term); |
852 | - raptor_free_term(graph_term); |
853 | - } |
854 | - |
855 | + raptor_statement* s = new raptor_statement; |
856 | + memset( s, 0, sizeof( raptor_statement ) ); |
857 | + convertNode( statement.subject(), &s->subject, &s->subject_type ); |
858 | + convertNode( statement.predicate(), &s->predicate, &s->predicate_type ); |
859 | + convertNode( statement.object(), &s->object, &s->object_type, &s->object_literal_datatype, &s->object_literal_language ); |
860 | return s; |
861 | } |
862 | |
863 | |
864 | - /* |
865 | void free_node( const void* data, raptor_identifier_type type ) |
866 | { |
867 | switch( type ) { |
868 | @@ -190,7 +109,6 @@ |
869 | free( ( char* )s->object_literal_language ); |
870 | delete s; |
871 | } |
872 | - */ |
873 | |
874 | |
875 | int raptorIOStreamWriteByte( void* data, const int byte ) |
876 | @@ -203,7 +121,6 @@ |
877 | else { |
878 | ( *s ) << ( char )byte; |
879 | } |
880 | - //qDebug() << "Write char:" << (char)(byte); |
881 | return 0; |
882 | } |
883 | |
884 | @@ -223,7 +140,6 @@ |
885 | raptorIOStreamWriteByte( data, p[i] ); |
886 | } |
887 | } |
888 | - //qDebug() << "Write string: " << p; |
889 | break; |
890 | } |
891 | default: |
892 | @@ -237,36 +153,15 @@ |
893 | Q_EXPORT_PLUGIN2(soprano_raptorserializer, Soprano::Raptor::Serializer) |
894 | |
895 | |
896 | - |
897 | -/* We can not rely on RaptorInitHelper anymore because |
898 | - * we need raptor_world in supportedUserSerializations. |
899 | - * Instead of constantly creating new raptor_world just to |
900 | - * detect user supported serializations, it is easier to |
901 | - * embed raptor_world into class. |
902 | - * And we can not declare raptor_world as a member of |
903 | - * Serializer directly, because raptor_world is a typedef, |
904 | - * not a class. So it can not be forward declarated |
905 | - */ |
906 | -class Soprano::Raptor::Serializer::Private |
907 | -{ |
908 | - public: |
909 | - raptor_world * world; |
910 | -}; |
911 | - |
912 | Soprano::Raptor::Serializer::Serializer() |
913 | : QObject(), |
914 | Soprano::Serializer( "raptor" ) |
915 | { |
916 | - this->d = new Private(); |
917 | - this->d->world = raptor_new_world(); |
918 | - raptor_world_open(d->world); |
919 | } |
920 | |
921 | |
922 | Soprano::Raptor::Serializer::~Serializer() |
923 | { |
924 | - raptor_free_world(d->world); |
925 | - delete d; |
926 | } |
927 | |
928 | |
929 | @@ -279,19 +174,17 @@ |
930 | QStringList Soprano::Raptor::Serializer::supportedUserSerializations() const |
931 | { |
932 | QStringList sl; |
933 | - const raptor_syntax_description * serializer_descr = 0; |
934 | - for ( int i = 0; 1; ++i ) { |
935 | - serializer_descr = |
936 | - raptor_world_get_serializer_description(d->world,i); |
937 | - |
938 | - /* raptor_world_get_serializer_description will return |
939 | - * NULL when conter runs out of bonds and there is no |
940 | - * more serializers |
941 | - */ |
942 | - if (!serializer_descr) |
943 | - break; |
944 | - |
945 | - sl << QString::fromUtf8( serializer_descr->names[0] ); |
946 | + int i = 0; |
947 | + const char* name = 0; |
948 | + const char* label = 0; |
949 | + const char* mimeType = 0; |
950 | + const unsigned char* uri = 0; |
951 | + while ( !raptor_serializers_enumerate( i, |
952 | + &name, |
953 | + &label, |
954 | + &mimeType, |
955 | + &uri ) ) { |
956 | + sl << QString::fromUtf8( name ); |
957 | ++i; |
958 | } |
959 | return sl; |
960 | @@ -305,43 +198,28 @@ |
961 | { |
962 | clearError(); |
963 | |
964 | - raptor_world * world = this->d->world; |
965 | + RaptorInitHelper raptorHelper; |
966 | |
967 | raptor_serializer* serializer = 0; |
968 | - QString mimeType = serializationMimeType(serialization,userSerialization); |
969 | - |
970 | if ( serialization == SerializationRdfXml ) { |
971 | - serializer = raptor_new_serializer( world, "rdfxml-abbrev" ); // we always want the abbreviated xmlrdf |
972 | + serializer = raptor_new_serializer( "rdfxml-abbrev" ); // we always want the abbreviated xmlrdf |
973 | } |
974 | else { |
975 | - const raptor_syntax_description * serializer_descr = 0; |
976 | for ( int i = 0; 1; ++i ) { |
977 | - serializer_descr = |
978 | - raptor_world_get_serializer_description(world,i); |
979 | - |
980 | - /* raptor_world_get_serializer_description will return |
981 | - * NULL when conter runs out of bonds and there is no |
982 | - * more serializers |
983 | - */ |
984 | - if (!serializer_descr) |
985 | + const char* syntax_name = 0; |
986 | + const char* syntax_label = 0; |
987 | + const char* mime_type = 0; |
988 | + const unsigned char* uri_string = 0; |
989 | + if ( raptor_serializers_enumerate( i, |
990 | + &syntax_name, |
991 | + &syntax_label, |
992 | + &mime_type, |
993 | + &uri_string ) ) |
994 | break; |
995 | - |
996 | - /* In serializer_descr->mime_types we have a array of pairs |
997 | - * (mime_type,Q) of mime_type for this syntax. It looks like |
998 | - * we can ignore Q value in this case |
999 | - * Acording to documentation, this array can have zero elements |
1000 | - */ |
1001 | - for( int mt_number = 0; mt_number < serializer_descr->mime_types_count; |
1002 | - mt_number++) |
1003 | - { |
1004 | - const char * mime_type_N = serializer_descr->mime_types[mt_number].mime_type; |
1005 | - if ( !qstrcmp( serializationMimeType( serialization, userSerialization ).toLatin1().data(), mime_type_N ) ) { |
1006 | - serializer = raptor_new_serializer( world, serializer_descr->names[0] ); |
1007 | - break; |
1008 | - } |
1009 | - } |
1010 | - if ( serializer ) |
1011 | + if ( !qstrcmp( serializationMimeType( serialization, userSerialization ).toLatin1().data(), mime_type ) ) { |
1012 | + serializer = raptor_new_serializer( syntax_name ); |
1013 | break; |
1014 | + } |
1015 | } |
1016 | } |
1017 | |
1018 | @@ -354,8 +232,8 @@ |
1019 | QHash<QString, QUrl> namespaces = prefixes(); |
1020 | for ( QHash<QString, QUrl>::const_iterator pfit = namespaces.constBegin(); |
1021 | pfit != namespaces.constEnd(); ++pfit ) { |
1022 | - raptor_uri* ns = raptor_new_uri( world,reinterpret_cast<unsigned char*>( pfit.value().toEncoded().data() ) ); |
1023 | - raptor_serializer_set_namespace( serializer, |
1024 | + raptor_uri* ns = raptor_new_uri( reinterpret_cast<unsigned char*>( pfit.value().toEncoded().data() ) ); |
1025 | + raptor_serialize_set_namespace( serializer, |
1026 | ns, |
1027 | ( unsigned char* )pfit.key().toLatin1().data() ); |
1028 | raptor_free_uri( ns ); |
1029 | @@ -363,53 +241,42 @@ |
1030 | |
1031 | bool success = true; |
1032 | |
1033 | - raptor_iostream_handler raptorStreamHandler; |
1034 | - // ATTENTION: Raptor documentation is incorrect! Always set |
1035 | - // version to 2 and raptor_iostream_calculate_modes internal |
1036 | - // call will correctly determine operation mode ( read,write,readwrite) |
1037 | - raptorStreamHandler.version = 2; |
1038 | - raptorStreamHandler.init = 0; |
1039 | - raptorStreamHandler.finish = 0; |
1040 | - raptorStreamHandler.write_byte = raptorIOStreamWriteByte; |
1041 | - raptorStreamHandler.write_bytes = raptorIOStreamWriteBytes; |
1042 | - raptorStreamHandler.write_end = 0; |
1043 | - raptorStreamHandler.read_bytes = 0; |
1044 | - raptorStreamHandler.read_eof = 0; |
1045 | - |
1046 | - raptor_iostream* raptorStream = raptor_new_iostream_from_handler( |
1047 | - world, |
1048 | - &stream, |
1049 | - &raptorStreamHandler |
1050 | - ); |
1051 | - |
1052 | - if (!raptorStream) { |
1053 | - qDebug() << "Can not create raptor iostream"; |
1054 | - raptor_free_serializer(serializer); |
1055 | - return false; |
1056 | - } |
1057 | +#ifdef HAVE_IOSTREAM_HANDLER2 |
1058 | + raptor_iostream_handler2 raptorStreamHandler = { |
1059 | + 2, |
1060 | + 0, |
1061 | + 0, |
1062 | + raptorIOStreamWriteByte, |
1063 | + raptorIOStreamWriteBytes, |
1064 | + 0, |
1065 | + 0, |
1066 | + 0 |
1067 | + }; |
1068 | + raptor_iostream* raptorStream = raptor_new_iostream_from_handler2( &stream, |
1069 | + &raptorStreamHandler ); |
1070 | +#else |
1071 | + raptor_iostream_handler raptorStreamHandler = { |
1072 | + 0, |
1073 | + 0, |
1074 | + raptorIOStreamWriteByte, |
1075 | + raptorIOStreamWriteBytes, |
1076 | + 0 |
1077 | + }; |
1078 | + raptor_iostream* raptorStream = raptor_new_iostream_from_handler( &stream, |
1079 | + &raptorStreamHandler ); |
1080 | +#endif |
1081 | |
1082 | // raptor_serialize_start takes ownership of raptorStream |
1083 | - raptor_serializer_start_to_iostream( serializer,0, raptorStream ); |
1084 | + raptor_serialize_start( serializer, 0, raptorStream ); |
1085 | |
1086 | while ( it.next() ) { |
1087 | - raptor_statement * rs = convertStatement(world, *it ); |
1088 | - if (rs) { |
1089 | - //qDebug() << "Serializing statement: " << *it; |
1090 | - raptor_serializer_serialize_statement(serializer, rs ); |
1091 | - raptor_free_statement( rs ); |
1092 | - } |
1093 | - else { |
1094 | - qDebug() << "Fail to convert Soprano::Statement " << |
1095 | - *it << |
1096 | - " to raptor_statement"; |
1097 | - success = false; |
1098 | - break; |
1099 | - } |
1100 | + raptor_statement* rs = convertStatement( *it ); |
1101 | + raptor_serialize_statement( serializer, rs ); |
1102 | + free_statement( rs ); |
1103 | } |
1104 | |
1105 | - raptor_serializer_serialize_end( serializer ); |
1106 | + raptor_serialize_end( serializer ); |
1107 | raptor_free_serializer( serializer ); |
1108 | - raptor_free_iostream(raptorStream); |
1109 | |
1110 | return success; |
1111 | } |
1112 | diff -Naur soprano/serializers/raptor/raptorserializer.h soprano-2.6.51/serializers/raptor/raptorserializer.h |
1113 | --- soprano/serializers/raptor/raptorserializer.h 2011-07-19 18:49:58.000000000 +0200 |
1114 | +++ soprano-2.6.51/serializers/raptor/raptorserializer.h 2011-06-05 10:38:25.000000000 +0200 |
1115 | @@ -28,6 +28,7 @@ |
1116 | |
1117 | #include "serializer.h" |
1118 | |
1119 | + |
1120 | namespace Soprano { |
1121 | namespace Raptor { |
1122 | class Serializer : public QObject, public Soprano::Serializer |
1123 | @@ -46,12 +47,6 @@ |
1124 | QTextStream& stream, |
1125 | RdfSerialization serialization, |
1126 | const QString& userSerialization = QString() ) const; |
1127 | - private: |
1128 | - /* See source file comments, that explain why it is necessary to |
1129 | - * use Private class and RaptorInitHelper is not succifient anymore |
1130 | - */ |
1131 | - class Private; |
1132 | - Private * d; |
1133 | }; |
1134 | } |
1135 | } |
1136 | diff -Naur soprano/soprano/inference/inferenceruleset.cpp soprano-2.6.51/soprano/inference/inferenceruleset.cpp |
1137 | --- soprano/soprano/inference/inferenceruleset.cpp 2011-07-19 18:49:58.000000000 +0200 |
1138 | +++ soprano-2.6.51/soprano/inference/inferenceruleset.cpp 2011-06-05 10:38:25.000000000 +0200 |
1139 | @@ -27,10 +27,7 @@ |
1140 | |
1141 | #include <QtCore/QHash> |
1142 | #include <QtCore/QList> |
1143 | -#ifdef Q_OS_WIN |
1144 | -#include <QtCore/QCoreApplication> |
1145 | -#include <QtCore/QDir> |
1146 | -#endif |
1147 | + |
1148 | |
1149 | class Soprano::Inference::RuleSet::Private : public QSharedData |
1150 | { |
1151 | @@ -141,22 +138,5 @@ |
1152 | |
1153 | RuleParser parser; |
1154 | parser.parseFile( path ); |
1155 | -#ifdef Q_OS_WIN |
1156 | - // Additionally try to look up the rules based on the runtime Path if |
1157 | - // they can not be found at the install prefix |
1158 | - if (!parser.rules().count()) { |
1159 | - path = QDir( QCoreApplication::applicationDirPath() ).absoluteFilePath( ".." ); |
1160 | - path += "/share/soprano/rules/"; |
1161 | - |
1162 | - switch( set ) { |
1163 | - case RDFS: |
1164 | - path += "rdfs.rules"; |
1165 | - break; |
1166 | - case NRL: |
1167 | - path += "nrl.rules"; |
1168 | - break; |
1169 | - } |
1170 | - } |
1171 | -#endif |
1172 | return parser.rules(); |
1173 | } |
1174 | diff -Naur soprano/soprano/sopranodirs.cpp soprano-2.6.51/soprano/sopranodirs.cpp |
1175 | --- soprano/soprano/sopranodirs.cpp 2011-07-19 18:49:58.000000000 +0200 |
1176 | +++ soprano-2.6.51/soprano/sopranodirs.cpp 2011-06-05 10:38:25.000000000 +0200 |
1177 | @@ -28,12 +28,8 @@ |
1178 | #include <QtCore/QCoreApplication> |
1179 | #include <QtCore/QDebug> |
1180 | |
1181 | -#ifdef Q_OS_WIN |
1182 | -static inline QString getWinPrefix() |
1183 | -{ |
1184 | - // returns the parent directory of the application |
1185 | - return QDir( QCoreApplication::applicationDirPath() ).absoluteFilePath( ".." ); |
1186 | -} |
1187 | + |
1188 | +#if defined _WIN32 || defined _WIN64 |
1189 | #define PATH_SEPARATOR ';' |
1190 | #else |
1191 | #define PATH_SEPARATOR ':' |
1192 | @@ -127,8 +123,6 @@ |
1193 | paths << QLatin1String( SOPRANO_PREFIX"/lib"SOPRANO_LIB_SUFFIX ); |
1194 | #ifdef Q_OS_WIN |
1195 | paths << QLatin1String( SOPRANO_PREFIX"/bin" ); |
1196 | - paths << getWinPrefix() + QLatin1String( "/bin" ); |
1197 | - paths << getWinPrefix() + QLatin1String( "/lib"SOPRANO_LIB_SUFFIX ); |
1198 | #else |
1199 | paths << QLatin1String( "/usr/lib"SOPRANO_LIB_SUFFIX ); |
1200 | paths << QLatin1String( "/usr/local/lib"SOPRANO_LIB_SUFFIX ); |
1201 | @@ -142,9 +136,6 @@ |
1202 | { |
1203 | QStringList paths; |
1204 | paths << QLatin1String( SOPRANO_PREFIX"/share" ) |
1205 | -#ifdef Q_OS_WIN |
1206 | - << getWinPrefix() + QLatin1String( "/share" ) |
1207 | -#endif |
1208 | << Soprano::envDirList( "SOPRANO_DIRS" ) |
1209 | << Soprano::envDirList( "XDG_DATA_DIRS" ); |
1210 | return paths; |
1211 | @@ -155,9 +146,6 @@ |
1212 | { |
1213 | QStringList paths; |
1214 | paths << QLatin1String( SOPRANO_PREFIX"/bin" ) |
1215 | -#ifdef Q_OS_WIN |
1216 | - << getWinPrefix() + QLatin1String( "/bin" ) |
1217 | -#endif |
1218 | << envDirList( "PATH" ); |
1219 | return paths; |
1220 | } |
1221 | diff -Naur soprano/test/CMakeLists.txt soprano-2.6.51/test/CMakeLists.txt |
1222 | --- soprano/test/CMakeLists.txt 2011-07-19 18:49:58.000000000 +0200 |
1223 | +++ soprano-2.6.51/test/CMakeLists.txt 2011-06-05 10:38:25.000000000 +0200 |
1224 | @@ -135,12 +135,6 @@ |
1225 | target_link_libraries(parsertest soprano ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY}) |
1226 | add_test(parsertest ${EXECUTABLE_OUTPUT_PATH}/parsertest) |
1227 | |
1228 | -# serializer test |
1229 | -qt4_automoc(serializetest serializetest.cpp) |
1230 | -add_executable(serializertest serializetest.cpp) |
1231 | -target_link_libraries(serializertest soprano ${QT_QTCORE_LIBRARY} ${QT_QTTEST_LIBRARY}) |
1232 | -add_test(serializertest ${EXECUTABLE_OUTPUT_PATH}/serializertest) |
1233 | - |
1234 | # Error test |
1235 | qt4_automoc(errortest errortest.cpp) |
1236 | add_executable(errortest errortest.cpp) |
1237 | diff -Naur soprano/test/serializetest.cpp soprano-2.6.51/test/serializetest.cpp |
1238 | --- soprano/test/serializetest.cpp 2011-07-19 18:49:58.000000000 +0200 |
1239 | +++ soprano-2.6.51/test/serializetest.cpp 1970-01-01 01:00:00.000000000 +0100 |
1240 | @@ -1,167 +0,0 @@ |
1241 | -/* |
1242 | - * This file is part of Soprano Project. |
1243 | - * |
1244 | - * Copyright (C) 2007-2008 Sebastian Trueg <trueg@kde.org> |
1245 | - * |
1246 | - * This library is free software; you can redistribute it and/or |
1247 | - * modify it under the terms of the GNU Library General Public |
1248 | - * License as published by the Free Software Foundation; either |
1249 | - * version 2 of the License, or (at your option) any later version. |
1250 | - * |
1251 | - * This library is distributed in the hope that it will be useful, |
1252 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1253 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1254 | - * Library General Public License for more details. |
1255 | - * |
1256 | - * You should have received a copy of the GNU Library General Public License |
1257 | - * along with this library; see the file COPYING.LIB. If not, write to |
1258 | - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
1259 | - * Boston, MA 02110-1301, USA. |
1260 | - */ |
1261 | - |
1262 | -#include "serializetest.h" |
1263 | -#include "config-testdata.h" |
1264 | - |
1265 | -#include "serializer.h" |
1266 | -#include "parser.h" |
1267 | -#include "pluginmanager.h" |
1268 | -#include "statementiterator.h" |
1269 | -#include "simplestatementiterator.h" |
1270 | -#include "statement.h" |
1271 | -#include "vocabulary.h" |
1272 | - |
1273 | -#include <QtTest/QTest> |
1274 | -#include <QtCore/QFile> |
1275 | -#include <QtCore/QDebug> |
1276 | - |
1277 | - |
1278 | -using namespace Soprano; |
1279 | - |
1280 | -#include "testdata.h" |
1281 | - |
1282 | - |
1283 | -void SerializerTest::init() |
1284 | -{ |
1285 | -#if 0 |
1286 | - // Init reference statements list |
1287 | - const Parser * parser = PluginManager::instance()->discoverParserForSerialization(SerializationTrig); |
1288 | - QVERIFY(parser); |
1289 | - StatementIterator refIt = parser->parseFile( |
1290 | - SOPRANO_TEST_DATA_DIR"/trig-testdata.trig", |
1291 | - QUrl("http://soprano.sf.net/testdata/"), |
1292 | - SerializationTrig); |
1293 | - this->referenceStatements = refIt.allStatements(); |
1294 | -#endif |
1295 | -} |
1296 | - |
1297 | -Q_DECLARE_METATYPE( Soprano::RdfSerialization ) |
1298 | - |
1299 | -void SerializerTest::testSerializer_data() |
1300 | -{ |
1301 | - |
1302 | - QTest::addColumn<Soprano::RdfSerialization>( "serialization" ); |
1303 | - QTest::addColumn<bool>( "withContext" ); |
1304 | - |
1305 | - QTest::newRow("rdf_xml") << SerializationRdfXml << false; |
1306 | - QTest::newRow("turtle") << SerializationTurtle << false; |
1307 | - QTest::newRow("trig") << SerializationTrig << true; |
1308 | -} |
1309 | - |
1310 | - |
1311 | - |
1312 | -void SerializerTest::testSerializer() |
1313 | -{ |
1314 | - QFETCH( RdfSerialization, serialization ); |
1315 | - QFETCH( bool, withContext ); |
1316 | - |
1317 | - //qDebug() << "Serialization: " << serializationMimeType(serialization); |
1318 | - QList<const Serializer*> serializers = PluginManager::instance()->allSerializers(); |
1319 | - |
1320 | - |
1321 | - /* Step 1 - create reference statements */ |
1322 | - QList<Statement> referenceStatements = testData(withContext); |
1323 | - //QList<Statement> testStatements = testData( withContext ); |
1324 | - |
1325 | - Q_FOREACH( const Serializer * serializer, serializers ) { |
1326 | - if ( serializer->supportsSerialization( serialization ) ) { |
1327 | - // Find if we have Parser for this serialization, to parse data back. |
1328 | - // If not, then oops ) |
1329 | - const Parser * back_parser = PluginManager::instance()->discoverParserForSerialization(serialization); |
1330 | - if ( !back_parser ) { |
1331 | - qDebug() << "We can not found parser for" << |
1332 | - serializationMimeType(serialization) << |
1333 | - " Skipping it"; |
1334 | - continue; |
1335 | - } |
1336 | - |
1337 | - // Now serialize reference data |
1338 | - QByteArray data_array; |
1339 | - QTextStream serializationStorage(&data_array,QIODevice::ReadWrite); |
1340 | - |
1341 | - bool result = serializer->serialize( |
1342 | - /*what*/Util::SimpleStatementIterator(referenceStatements), |
1343 | - /*where*/serializationStorage, |
1344 | - /*type*/serialization |
1345 | - ); |
1346 | - QVERIFY(result); |
1347 | - |
1348 | - //qDebug() << "Serialization storage: " << data_array; |
1349 | - |
1350 | - // Now parse gained text stream back |
1351 | - QTextStream readStorageStream(&data_array, QIODevice::ReadOnly); |
1352 | - StatementIterator it = back_parser->parseStream( |
1353 | - readStorageStream, |
1354 | - QUrl("http://soprano.sf.net/testdata/"), |
1355 | - serialization); |
1356 | - |
1357 | - QList<Statement> all = it.allStatements(); |
1358 | - |
1359 | - |
1360 | - // Now compare recieved with reference |
1361 | - QCOMPARE( all.count(), referenceStatements.count() ); |
1362 | - |
1363 | - Q_FOREACH( Statement s, referenceStatements ) { |
1364 | - bool contains = all.contains(s); |
1365 | - if ( !contains ) { |
1366 | - qDebug() << "Not found in parsed: " << s; |
1367 | - } |
1368 | - |
1369 | - QVERIFY( contains ); |
1370 | - } |
1371 | - |
1372 | - } |
1373 | - } |
1374 | -} |
1375 | - |
1376 | - |
1377 | -#if 0 |
1378 | -void SerializerTest::testEncoding() |
1379 | -{ |
1380 | - // FIXME: provide test data for all supported encodings (no big problem so far since we only have the raptor parser) |
1381 | - |
1382 | - // parse both files, same content, different encodings and compare the results |
1383 | - const QString utf8File = SOPRANO_TEST_DATA_DIR"/rdf_xml-testdata-utf8.rdf"; |
1384 | - const QString isoFile = SOPRANO_TEST_DATA_DIR"/rdf_xml-testdata-iso8859.rdf"; |
1385 | - |
1386 | - const Soprano::Parser* parser = PluginManager::instance()->discoverParserForSerialization( SerializationRdfXml ); |
1387 | - if ( parser ) { |
1388 | - QList<Statement> utf8Statements = parser->parseFile( utf8File, QUrl(), SerializationRdfXml ).allStatements(); |
1389 | - QList<Statement> isoStatements = parser->parseFile( isoFile, QUrl(), SerializationRdfXml ).allStatements(); |
1390 | - |
1391 | - // brute force comparision, time is not an issue, no need to get inventive. ;) |
1392 | - foreach( const Statement& s, utf8Statements ) { |
1393 | - if ( !isoStatements.contains( s ) ) qDebug() << s; |
1394 | - QVERIFY( isoStatements.contains( s ) ); |
1395 | - } |
1396 | - foreach( const Statement& s, isoStatements ) { |
1397 | - if ( !utf8Statements.contains( s ) ) qDebug() << s; |
1398 | - QVERIFY( utf8Statements.contains( s ) ); |
1399 | - } |
1400 | - } |
1401 | -} |
1402 | -#endif |
1403 | - |
1404 | -QTEST_MAIN( SerializerTest ) |
1405 | - |
1406 | -#include "serializetest.moc" |
1407 | - |
1408 | diff -Naur soprano/test/serializetest.h soprano-2.6.51/test/serializetest.h |
1409 | --- soprano/test/serializetest.h 2011-07-19 18:49:58.000000000 +0200 |
1410 | +++ soprano-2.6.51/test/serializetest.h 1970-01-01 01:00:00.000000000 +0100 |
1411 | @@ -1,52 +0,0 @@ |
1412 | -/* |
1413 | - * This file is part of Soprano Project. |
1414 | - * |
1415 | - * Copyright (C) 2007-2008 Sebastian Trueg <strueg@mandriva.com> |
1416 | - * |
1417 | - * This library is free software; you can redistribute it and/or |
1418 | - * modify it under the terms of the GNU Library General Public |
1419 | - * License as published by the Free Software Foundation; either |
1420 | - * version 2 of the License, or (at your option) any later version. |
1421 | - * |
1422 | - * This library is distributed in the hope that it will be useful, |
1423 | - * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1424 | - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU |
1425 | - * Library General Public License for more details. |
1426 | - * |
1427 | - * You should have received a copy of the GNU Library General Public License |
1428 | - * along with this library; see the file COPYING.LIB. If not, write to |
1429 | - * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, |
1430 | - * Boston, MA 02110-1301, USA. |
1431 | - */ |
1432 | - |
1433 | -#ifndef SOPRANO_SERIALIZER_TEST_H |
1434 | -#define SOPRANO_SERIALIZER_TEST_H |
1435 | - |
1436 | -#include <QtCore/QObject> |
1437 | -#include <QtCore/QList> |
1438 | - |
1439 | -#include "statement.h" |
1440 | - |
1441 | - |
1442 | -/* Workflow: |
1443 | - * 1) Prepare one QList<Statement> with data, used as reference |
1444 | - * 2) For each serializer: |
1445 | - * 2.1) Serialize reference to memory |
1446 | - * 2.2) Parse this memory back to QList<Statement> |
1447 | - * 2.3) Compare with reference |
1448 | - */ |
1449 | -class SerializerTest: public QObject |
1450 | -{ |
1451 | - Q_OBJECT |
1452 | - |
1453 | -private Q_SLOTS: |
1454 | - void init(); |
1455 | - void testSerializer_data(); |
1456 | - void testSerializer(); |
1457 | - //void testEncoding(); |
1458 | - private: |
1459 | - //QList<Soprano::Statement> referenceStatements; |
1460 | -}; |
1461 | - |
1462 | -#endif |
1463 | - |