annotate data/fileio/SparqlRelatedMediaReader.cpp @ 143:97fd6148fb8e

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