annotate data/fileio/SparqlResultsReader.cpp @ 282:d9319859a4cf tip

(none)
author benoitrigolleau
date Fri, 31 Oct 2008 11:00:24 +0000
parents 8bdfbd9ad418
children
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
benoitrigolleau@280 18 SparqlResultsReader::SparqlResultsReader(QueryResultsWidget* resultsWidget) :
benoitrigolleau@280 19 m_resultsWidget(resultsWidget)
benoitrigolleau@280 20 {}
lbajardsilogic@15 21
lbajardsilogic@15 22 bool SparqlResultsReader::parse(const QString & filename)
lbajardsilogic@15 23 {
benoitrigolleau@280 24 SparqlResultsHandler handler(m_resultsWidget);
lbajardsilogic@15 25 QXmlSimpleReader reader;
benoitrigolleau@280 26 reader.setContentHandler(&handler);
benoitrigolleau@280 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 {
benoitrigolleau@280 38 m_resultsWidget->displayResult();
lbajardsilogic@15 39 return true;
lbajardsilogic@15 40 }
lbajardsilogic@15 41
lbajardsilogic@15 42 return false;
lbajardsilogic@15 43 }
lbajardsilogic@15 44
benoitrigolleau@280 45 SparqlResultsHandler::SparqlResultsHandler(QueryResultsWidget* resultsWidget) : QXmlDefaultHandler(),
benoitrigolleau@280 46 m_resultsWidget(resultsWidget),
benoitrigolleau@280 47 m_inBinding(false),
benoitrigolleau@280 48 m_curBindingName("")
benoitrigolleau@280 49 {}
benoitrigolleau@280 50
benoitrigolleau@280 51 bool SparqlResultsHandler::startElement(const QString &namespaceURI, const QString &localName,
benoitrigolleau@280 52 const QString &qName, const QXmlAttributes &attributes)
benoitrigolleau@280 53 {
benoitrigolleau@280 54
benoitrigolleau@280 55 QString name = qName.toLower();
benoitrigolleau@280 56
benoitrigolleau@280 57 bool ok = false;
benoitrigolleau@280 58
benoitrigolleau@280 59 // Valid element names:
benoitrigolleau@280 60 //
benoitrigolleau@280 61 // sparql
benoitrigolleau@280 62 // head
benoitrigolleau@280 63 // variable
benoitrigolleau@280 64 // results
benoitrigolleau@280 65 // result
benoitrigolleau@280 66 // binding
benoitrigolleau@280 67
benoitrigolleau@280 68 if (name == "sparql") {
benoitrigolleau@280 69
benoitrigolleau@280 70 // nothing needed
benoitrigolleau@280 71 ok = true;
benoitrigolleau@280 72
benoitrigolleau@280 73 } else if (name == "head") {
benoitrigolleau@280 74
benoitrigolleau@280 75 // nothing needed
benoitrigolleau@280 76 ok = true;
benoitrigolleau@280 77
benoitrigolleau@280 78 } else if (name == "variable") {
benoitrigolleau@280 79
benoitrigolleau@280 80 // nothing needed
benoitrigolleau@280 81 ok = true;
benoitrigolleau@280 82
benoitrigolleau@280 83 } else if (name == "results") {
benoitrigolleau@280 84
benoitrigolleau@280 85 // nothing needed
benoitrigolleau@280 86 ok = true;
benoitrigolleau@280 87
benoitrigolleau@280 88 } else if (name == "result") {
benoitrigolleau@280 89
benoitrigolleau@280 90 m_resultsWidget->newResult();
benoitrigolleau@280 91 ok = true;
benoitrigolleau@280 92
benoitrigolleau@280 93 } else if (name == "binding") {
benoitrigolleau@280 94
benoitrigolleau@280 95 m_curBindingName = attributes.value("name");
benoitrigolleau@280 96 ok = true;
benoitrigolleau@280 97
benoitrigolleau@280 98 } else if ( (name == "uri") || (name == "literal") ) {
benoitrigolleau@280 99 m_inBinding = true;
benoitrigolleau@280 100 ok = true;
benoitrigolleau@280 101 }
benoitrigolleau@280 102
benoitrigolleau@280 103 if (!ok) {
benoitrigolleau@280 104 std::cerr << "WARNING: SparqlResultsHandler-XML: Failed to completely process element \""
benoitrigolleau@280 105 << name.toLocal8Bit().data() << "\"" << std::endl;
benoitrigolleau@280 106 }
benoitrigolleau@280 107
benoitrigolleau@280 108 return true;
lbajardsilogic@15 109 }
lbajardsilogic@15 110
benoitrigolleau@280 111 bool SparqlResultsHandler::endElement(const QString &namespaceURI, const QString &localName,
benoitrigolleau@280 112 const QString &qName)
benoitrigolleau@280 113 {
benoitrigolleau@280 114 QString name = qName.toLower();
benoitrigolleau@280 115
benoitrigolleau@280 116 if ( (name == "uri") || (name == "literal") )
benoitrigolleau@280 117 {
benoitrigolleau@280 118 m_inBinding = false;
benoitrigolleau@280 119 m_curBindingName = "";
benoitrigolleau@280 120
benoitrigolleau@280 121 } else if (name == "result")
benoitrigolleau@280 122 {
benoitrigolleau@280 123 /*m_resultsWidget->addInfo("composer", m_composer);
benoitrigolleau@280 124 m_resultsWidget->addInfo("arranger", m_arranger);
benoitrigolleau@280 125 m_composer.clear();
benoitrigolleau@280 126 m_arranger.clear();
benoitrigolleau@280 127 m_composer.append(" -");
benoitrigolleau@280 128 m_arranger.append(" -");*/
benoitrigolleau@280 129
benoitrigolleau@280 130 m_resultsWidget->saveCurResult();
benoitrigolleau@280 131 }
benoitrigolleau@280 132
benoitrigolleau@280 133 return true;
benoitrigolleau@280 134 }
benoitrigolleau@280 135
benoitrigolleau@280 136 bool SparqlResultsHandler::characters(const QString &str)
benoitrigolleau@280 137 {
benoitrigolleau@280 138 if (m_inBinding)
benoitrigolleau@280 139 {
benoitrigolleau@280 140 /*if (m_curBindingName.contains("composer"))
benoitrigolleau@280 141 {
benoitrigolleau@280 142 m_composer.append(" " + str);
benoitrigolleau@280 143 }
benoitrigolleau@280 144 else if (m_curBindingName.contains("arranger"))
benoitrigolleau@280 145 {
benoitrigolleau@280 146 m_arranger.append(" " + str);
benoitrigolleau@280 147 }
benoitrigolleau@280 148 else
benoitrigolleau@280 149 {*/
benoitrigolleau@280 150 m_resultsWidget->addInfo(m_curBindingName, str);
benoitrigolleau@280 151 //}
benoitrigolleau@280 152 }
benoitrigolleau@280 153
benoitrigolleau@280 154 return true;
benoitrigolleau@280 155 }
benoitrigolleau@280 156
benoitrigolleau@280 157 bool SparqlResultsHandler::error(const QXmlParseException &exception)
benoitrigolleau@280 158 {
benoitrigolleau@280 159 QString errorString;
benoitrigolleau@280 160 errorString += QString("ERROR: SparqlResultsHandler-XML: %1 at line %2, column %3")
benoitrigolleau@280 161 .arg(exception.message())
benoitrigolleau@280 162 .arg(exception.lineNumber())
benoitrigolleau@280 163 .arg(exception.columnNumber());
benoitrigolleau@280 164 std::cerr << errorString.toLocal8Bit().data() << std::endl;
benoitrigolleau@280 165 return QXmlDefaultHandler::error(exception);
benoitrigolleau@280 166 }
benoitrigolleau@280 167
benoitrigolleau@280 168 bool SparqlResultsHandler::fatalError(const QXmlParseException &exception)
benoitrigolleau@280 169 {
benoitrigolleau@280 170 QString errorString;
benoitrigolleau@280 171 errorString += QString("FATAL ERROR: SparqlResultsHandler-XML: %1 at line %2, column %3")
benoitrigolleau@280 172 .arg(exception.message())
benoitrigolleau@280 173 .arg(exception.lineNumber())
benoitrigolleau@280 174 .arg(exception.columnNumber());
benoitrigolleau@280 175 std::cerr << errorString.toLocal8Bit().data() << std::endl;
benoitrigolleau@280 176 return QXmlDefaultHandler::fatalError(exception);
benoitrigolleau@280 177 }