annotate data/fileio/SparqlResultsReader.cpp @ 15:11e298cdb9e7

add - EasaierSessionManager - Easaier menus - Interval model
author lbajardsilogic
date Mon, 14 May 2007 13:10:49 +0000
parents
children f3dce7a985cf
rev   line source
lbajardsilogic@15 1 /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */
lbajardsilogic@15 2
lbajardsilogic@15 3 /* Sound Access
lbajardsilogic@15 4 EASAIER client application.
lbajardsilogic@15 5 Silogic 2007. Laure Bajard.
lbajardsilogic@15 6
lbajardsilogic@15 7 This program is free software; you can redistribute it and/or
lbajardsilogic@15 8 modify it under the terms of the GNU General Public License as
lbajardsilogic@15 9 published by the Free Software Foundation; either version 2 of the
lbajardsilogic@15 10 License, or (at your option) any later version. See the file
lbajardsilogic@15 11 COPYING included with this distribution for more information.
lbajardsilogic@15 12 */
lbajardsilogic@15 13
lbajardsilogic@15 14 #include "SparqlResultsReader.h"
lbajardsilogic@15 15
lbajardsilogic@15 16 #include <iostream>
lbajardsilogic@15 17
lbajardsilogic@15 18 SparqlResultsReader::SparqlResultsReader(QueryResultsWidget* resultsWidget) :
lbajardsilogic@15 19 m_resultsWidget(resultsWidget)
lbajardsilogic@15 20 {}
lbajardsilogic@15 21
lbajardsilogic@15 22 bool SparqlResultsReader::parse(const QString & filename)
lbajardsilogic@15 23 {
lbajardsilogic@15 24 SparqlResultsHandler handler(m_resultsWidget);
lbajardsilogic@15 25 QXmlSimpleReader reader;
lbajardsilogic@15 26 reader.setContentHandler(&handler);
lbajardsilogic@15 27 reader.setErrorHandler(&handler);
lbajardsilogic@15 28
lbajardsilogic@15 29 QFile file(filename);
lbajardsilogic@15 30
lbajardsilogic@15 31 if (!file.open(QFile::ReadOnly | QFile::Text)) {
lbajardsilogic@15 32 return false;
lbajardsilogic@15 33 }
lbajardsilogic@15 34
lbajardsilogic@15 35 QXmlInputSource xmlInputSource(&file);
lbajardsilogic@15 36 if (reader.parse(xmlInputSource))
lbajardsilogic@15 37 {
lbajardsilogic@15 38 return true;
lbajardsilogic@15 39 }
lbajardsilogic@15 40
lbajardsilogic@15 41 return false;
lbajardsilogic@15 42 }
lbajardsilogic@15 43
lbajardsilogic@15 44 SparqlResultsHandler::SparqlResultsHandler(QueryResultsWidget* resultsWidget) : QXmlDefaultHandler(),
lbajardsilogic@15 45 m_resultsWidget(resultsWidget),
lbajardsilogic@15 46 m_inBinding(false),
lbajardsilogic@15 47 m_curBindingName("")
lbajardsilogic@15 48 {}
lbajardsilogic@15 49
lbajardsilogic@15 50 bool SparqlResultsHandler::startElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 51 const QString &qName, const QXmlAttributes &attributes)
lbajardsilogic@15 52 {
lbajardsilogic@15 53
lbajardsilogic@15 54 QString name = qName.toLower();
lbajardsilogic@15 55
lbajardsilogic@15 56 bool ok = false;
lbajardsilogic@15 57
lbajardsilogic@15 58 // Valid element names:
lbajardsilogic@15 59 //
lbajardsilogic@15 60 // sparql
lbajardsilogic@15 61 // head
lbajardsilogic@15 62 // variable
lbajardsilogic@15 63 // results
lbajardsilogic@15 64 // result
lbajardsilogic@15 65 // binding
lbajardsilogic@15 66
lbajardsilogic@15 67 if (name == "sparql") {
lbajardsilogic@15 68
lbajardsilogic@15 69 // nothing needed
lbajardsilogic@15 70 ok = true;
lbajardsilogic@15 71
lbajardsilogic@15 72 } else if (name == "head") {
lbajardsilogic@15 73
lbajardsilogic@15 74 // nothing needed
lbajardsilogic@15 75 ok = true;
lbajardsilogic@15 76
lbajardsilogic@15 77 } else if (name == "variable") {
lbajardsilogic@15 78
lbajardsilogic@15 79 // nothing needed
lbajardsilogic@15 80 ok = true;
lbajardsilogic@15 81
lbajardsilogic@15 82 } else if (name == "results") {
lbajardsilogic@15 83
lbajardsilogic@15 84 // nothing needed
lbajardsilogic@15 85 ok = true;
lbajardsilogic@15 86
lbajardsilogic@15 87 } else if (name == "result") {
lbajardsilogic@15 88
lbajardsilogic@15 89 m_resultsWidget->newResult();
lbajardsilogic@15 90 ok = true;
lbajardsilogic@15 91
lbajardsilogic@15 92 } else if (name == "binding") {
lbajardsilogic@15 93
lbajardsilogic@15 94 m_curBindingName = attributes.value("name");
lbajardsilogic@15 95 ok = true;
lbajardsilogic@15 96
lbajardsilogic@15 97 } else if ( (name == "uri") || (name == "literal") ) {
lbajardsilogic@15 98 m_inBinding = true;
lbajardsilogic@15 99 ok = true;
lbajardsilogic@15 100 }
lbajardsilogic@15 101
lbajardsilogic@15 102 if (!ok) {
lbajardsilogic@15 103 std::cerr << "WARNING: SparqlResultsHandler-XML: Failed to completely process element \""
lbajardsilogic@15 104 << name.toLocal8Bit().data() << "\"" << std::endl;
lbajardsilogic@15 105 }
lbajardsilogic@15 106
lbajardsilogic@15 107 return true;
lbajardsilogic@15 108 }
lbajardsilogic@15 109
lbajardsilogic@15 110 bool SparqlResultsHandler::endElement(const QString &namespaceURI, const QString &localName,
lbajardsilogic@15 111 const QString &qName)
lbajardsilogic@15 112 {
lbajardsilogic@15 113 QString name = qName.toLower();
lbajardsilogic@15 114
lbajardsilogic@15 115 if ( (name == "uri") || (name == "literal") )
lbajardsilogic@15 116 {
lbajardsilogic@15 117 m_inBinding = false;
lbajardsilogic@15 118 m_curBindingName = "";
lbajardsilogic@15 119
lbajardsilogic@15 120 } else if (name == "result")
lbajardsilogic@15 121 {
lbajardsilogic@15 122 m_resultsWidget->displayResult();
lbajardsilogic@15 123 }
lbajardsilogic@15 124
lbajardsilogic@15 125 return true;
lbajardsilogic@15 126 }
lbajardsilogic@15 127
lbajardsilogic@15 128 bool SparqlResultsHandler::characters(const QString &str)
lbajardsilogic@15 129 {
lbajardsilogic@15 130 if (m_inBinding)
lbajardsilogic@15 131 {
lbajardsilogic@15 132 m_resultsWidget->addInfo(m_curBindingName, str);
lbajardsilogic@15 133 }
lbajardsilogic@15 134
lbajardsilogic@15 135 return true;
lbajardsilogic@15 136 }
lbajardsilogic@15 137
lbajardsilogic@15 138 bool SparqlResultsHandler::error(const QXmlParseException &exception)
lbajardsilogic@15 139 {
lbajardsilogic@15 140 QString errorString;
lbajardsilogic@15 141 errorString += QString("ERROR: SparqlResultsHandler-XML: %1 at line %2, column %3")
lbajardsilogic@15 142 .arg(exception.message())
lbajardsilogic@15 143 .arg(exception.lineNumber())
lbajardsilogic@15 144 .arg(exception.columnNumber());
lbajardsilogic@15 145 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 146 return QXmlDefaultHandler::error(exception);
lbajardsilogic@15 147 }
lbajardsilogic@15 148
lbajardsilogic@15 149 bool SparqlResultsHandler::fatalError(const QXmlParseException &exception)
lbajardsilogic@15 150 {
lbajardsilogic@15 151 QString errorString;
lbajardsilogic@15 152 errorString += QString("FATAL ERROR: SparqlResultsHandler-XML: %1 at line %2, column %3")
lbajardsilogic@15 153 .arg(exception.message())
lbajardsilogic@15 154 .arg(exception.lineNumber())
lbajardsilogic@15 155 .arg(exception.columnNumber());
lbajardsilogic@15 156 std::cerr << errorString.toLocal8Bit().data() << std::endl;
lbajardsilogic@15 157 return QXmlDefaultHandler::fatalError(exception);
lbajardsilogic@15 158 }