lbajardsilogic@143: /* -*- c-basic-offset: 4 indent-tabs-mode: nil -*- vi:set ts=8 sts=4 sw=4: */ lbajardsilogic@143: lbajardsilogic@143: /* Sound Access lbajardsilogic@143: EASAIER client application. lbajardsilogic@143: Silogic 2007. Laure Bajard. lbajardsilogic@143: lbajardsilogic@143: This program is free software; you can redistribute it and/or lbajardsilogic@143: modify it under the terms of the GNU General Public License as lbajardsilogic@143: published by the Free Software Foundation; either version 2 of the lbajardsilogic@143: License, or (at your option) any later version. See the file lbajardsilogic@143: COPYING included with this distribution for more information. lbajardsilogic@143: */ lbajardsilogic@143: lbajardsilogic@143: #include "SparqlRelatedMediaReader.h" lbajardsilogic@143: lbajardsilogic@143: #include lbajardsilogic@143: lbajardsilogic@257: SparqlRelatedMediaReader::SparqlRelatedMediaReader(std::map *relMediaList) : lbajardsilogic@143: m_relMediaList(relMediaList) lbajardsilogic@143: {} lbajardsilogic@143: lbajardsilogic@143: bool SparqlRelatedMediaReader::parse(const QString & filename) lbajardsilogic@143: { lbajardsilogic@143: SparqlRelatedMediaHandler handler(m_relMediaList); lbajardsilogic@143: QXmlSimpleReader reader; lbajardsilogic@143: reader.setContentHandler(&handler); lbajardsilogic@143: reader.setErrorHandler(&handler); lbajardsilogic@143: lbajardsilogic@143: QFile file(filename); lbajardsilogic@143: lbajardsilogic@143: if (!file.open(QFile::ReadOnly | QFile::Text)) { lbajardsilogic@143: return false; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: QXmlInputSource xmlInputSource(&file); lbajardsilogic@143: if (reader.parse(xmlInputSource)) lbajardsilogic@143: { lbajardsilogic@143: return true; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: return false; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@257: SparqlRelatedMediaHandler::SparqlRelatedMediaHandler(std::map *relMediaList) : QXmlDefaultHandler(), lbajardsilogic@143: m_relMediaList(relMediaList), lbajardsilogic@257: m_inUriBinding(false), lbajardsilogic@257: m_inLiteralBinding(false), lbajardsilogic@257: m_curUriName("") lbajardsilogic@143: {} lbajardsilogic@143: lbajardsilogic@143: bool SparqlRelatedMediaHandler::startElement(const QString &namespaceURI, const QString &localName, lbajardsilogic@143: const QString &qName, const QXmlAttributes &attributes) lbajardsilogic@143: { lbajardsilogic@143: lbajardsilogic@143: QString name = qName.toLower(); lbajardsilogic@143: lbajardsilogic@143: bool ok = false; lbajardsilogic@143: lbajardsilogic@143: // Valid element names: lbajardsilogic@143: // lbajardsilogic@143: // sparql lbajardsilogic@143: // head lbajardsilogic@143: // variable lbajardsilogic@143: // results lbajardsilogic@143: // result lbajardsilogic@143: // binding lbajardsilogic@143: lbajardsilogic@143: if (name == "sparql") { lbajardsilogic@143: lbajardsilogic@143: // nothing needed lbajardsilogic@143: ok = true; lbajardsilogic@143: lbajardsilogic@143: } else if (name == "head") { lbajardsilogic@143: lbajardsilogic@143: // nothing needed lbajardsilogic@143: ok = true; lbajardsilogic@143: lbajardsilogic@143: } else if (name == "variable") { lbajardsilogic@143: lbajardsilogic@143: // nothing needed lbajardsilogic@143: ok = true; lbajardsilogic@143: lbajardsilogic@143: } else if (name == "results") { lbajardsilogic@143: lbajardsilogic@143: // nothing needed lbajardsilogic@143: ok = true; lbajardsilogic@143: lbajardsilogic@143: } else if (name == "result") { lbajardsilogic@143: lbajardsilogic@143: // nothing needed lbajardsilogic@143: ok = true; lbajardsilogic@143: lbajardsilogic@143: } else if (name == "binding") { lbajardsilogic@143: lbajardsilogic@143: // nothing needed lbajardsilogic@143: ok = true; lbajardsilogic@143: lbajardsilogic@257: //} else if ( (name == "uri") || (name == "literal") ) { lbajardsilogic@257: } else if (name == "uri") { lbajardsilogic@257: m_inUriBinding = true; lbajardsilogic@257: ok = true; lbajardsilogic@257: } else if (name == "literal") { lbajardsilogic@257: m_inLiteralBinding = true; lbajardsilogic@143: ok = true; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: if (!ok) { lbajardsilogic@143: std::cerr << "WARNING: SparqlResultsHandler-XML: Failed to completely process element \"" lbajardsilogic@143: << name.toLocal8Bit().data() << "\"" << std::endl; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: return true; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: bool SparqlRelatedMediaHandler::endElement(const QString &namespaceURI, const QString &localName, lbajardsilogic@143: const QString &qName) lbajardsilogic@143: { lbajardsilogic@143: QString name = qName.toLower(); lbajardsilogic@143: lbajardsilogic@257: //if ( (name == "uri") || (name == "literal") ) lbajardsilogic@257: if (name == "uri") lbajardsilogic@143: { lbajardsilogic@257: m_inUriBinding = false; lbajardsilogic@257: } lbajardsilogic@257: if (name == "literal") lbajardsilogic@257: { lbajardsilogic@257: m_inLiteralBinding = false; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: return true; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: bool SparqlRelatedMediaHandler::characters(const QString &str) lbajardsilogic@143: { lbajardsilogic@257: if (m_inUriBinding) lbajardsilogic@143: { lbajardsilogic@257: m_curUriName = str; lbajardsilogic@257: lbajardsilogic@257: } else if (m_inLiteralBinding) lbajardsilogic@257: { lbajardsilogic@257: m_relMediaList->insert(std::make_pair(m_curUriName,str)); lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: return true; lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: bool SparqlRelatedMediaHandler::error(const QXmlParseException &exception) lbajardsilogic@143: { lbajardsilogic@143: QString errorString; lbajardsilogic@143: errorString += QString("ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3") lbajardsilogic@143: .arg(exception.message()) lbajardsilogic@143: .arg(exception.lineNumber()) lbajardsilogic@143: .arg(exception.columnNumber()); lbajardsilogic@143: std::cerr << errorString.toLocal8Bit().data() << std::endl; lbajardsilogic@143: return QXmlDefaultHandler::error(exception); lbajardsilogic@143: } lbajardsilogic@143: lbajardsilogic@143: bool SparqlRelatedMediaHandler::fatalError(const QXmlParseException &exception) lbajardsilogic@143: { lbajardsilogic@143: QString errorString; lbajardsilogic@143: errorString += QString("FATAL ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3") lbajardsilogic@143: .arg(exception.message()) lbajardsilogic@143: .arg(exception.lineNumber()) lbajardsilogic@143: .arg(exception.columnNumber()); lbajardsilogic@143: std::cerr << errorString.toLocal8Bit().data() << std::endl; lbajardsilogic@143: return QXmlDefaultHandler::fatalError(exception); lbajardsilogic@143: }