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@257
|
18 SparqlRelatedMediaReader::SparqlRelatedMediaReader(std::map<QString, 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@257
|
44 SparqlRelatedMediaHandler::SparqlRelatedMediaHandler(std::map<QString, QString> *relMediaList) : QXmlDefaultHandler(),
|
lbajardsilogic@143
|
45 m_relMediaList(relMediaList),
|
lbajardsilogic@257
|
46 m_inUriBinding(false),
|
lbajardsilogic@257
|
47 m_inLiteralBinding(false),
|
lbajardsilogic@257
|
48 m_curUriName("")
|
lbajardsilogic@143
|
49 {}
|
lbajardsilogic@143
|
50
|
lbajardsilogic@143
|
51 bool SparqlRelatedMediaHandler::startElement(const QString &namespaceURI, const QString &localName,
|
lbajardsilogic@143
|
52 const QString &qName, const QXmlAttributes &attributes)
|
lbajardsilogic@143
|
53 {
|
lbajardsilogic@143
|
54
|
lbajardsilogic@143
|
55 QString name = qName.toLower();
|
lbajardsilogic@143
|
56
|
lbajardsilogic@143
|
57 bool ok = false;
|
lbajardsilogic@143
|
58
|
lbajardsilogic@143
|
59 // Valid element names:
|
lbajardsilogic@143
|
60 //
|
lbajardsilogic@143
|
61 // sparql
|
lbajardsilogic@143
|
62 // head
|
lbajardsilogic@143
|
63 // variable
|
lbajardsilogic@143
|
64 // results
|
lbajardsilogic@143
|
65 // result
|
lbajardsilogic@143
|
66 // binding
|
lbajardsilogic@143
|
67
|
lbajardsilogic@143
|
68 if (name == "sparql") {
|
lbajardsilogic@143
|
69
|
lbajardsilogic@143
|
70 // nothing needed
|
lbajardsilogic@143
|
71 ok = true;
|
lbajardsilogic@143
|
72
|
lbajardsilogic@143
|
73 } else if (name == "head") {
|
lbajardsilogic@143
|
74
|
lbajardsilogic@143
|
75 // nothing needed
|
lbajardsilogic@143
|
76 ok = true;
|
lbajardsilogic@143
|
77
|
lbajardsilogic@143
|
78 } else if (name == "variable") {
|
lbajardsilogic@143
|
79
|
lbajardsilogic@143
|
80 // nothing needed
|
lbajardsilogic@143
|
81 ok = true;
|
lbajardsilogic@143
|
82
|
lbajardsilogic@143
|
83 } else if (name == "results") {
|
lbajardsilogic@143
|
84
|
lbajardsilogic@143
|
85 // nothing needed
|
lbajardsilogic@143
|
86 ok = true;
|
lbajardsilogic@143
|
87
|
lbajardsilogic@143
|
88 } else if (name == "result") {
|
lbajardsilogic@143
|
89
|
lbajardsilogic@143
|
90 // nothing needed
|
lbajardsilogic@143
|
91 ok = true;
|
lbajardsilogic@143
|
92
|
lbajardsilogic@143
|
93 } else if (name == "binding") {
|
lbajardsilogic@143
|
94
|
lbajardsilogic@143
|
95 // nothing needed
|
lbajardsilogic@143
|
96 ok = true;
|
lbajardsilogic@143
|
97
|
lbajardsilogic@257
|
98 //} else if ( (name == "uri") || (name == "literal") ) {
|
lbajardsilogic@257
|
99 } else if (name == "uri") {
|
lbajardsilogic@257
|
100 m_inUriBinding = true;
|
lbajardsilogic@257
|
101 ok = true;
|
lbajardsilogic@257
|
102 } else if (name == "literal") {
|
lbajardsilogic@257
|
103 m_inLiteralBinding = true;
|
lbajardsilogic@143
|
104 ok = true;
|
lbajardsilogic@143
|
105 }
|
lbajardsilogic@143
|
106
|
lbajardsilogic@143
|
107 if (!ok) {
|
lbajardsilogic@143
|
108 std::cerr << "WARNING: SparqlResultsHandler-XML: Failed to completely process element \""
|
lbajardsilogic@143
|
109 << name.toLocal8Bit().data() << "\"" << std::endl;
|
lbajardsilogic@143
|
110 }
|
lbajardsilogic@143
|
111
|
lbajardsilogic@143
|
112 return true;
|
lbajardsilogic@143
|
113 }
|
lbajardsilogic@143
|
114
|
lbajardsilogic@143
|
115 bool SparqlRelatedMediaHandler::endElement(const QString &namespaceURI, const QString &localName,
|
lbajardsilogic@143
|
116 const QString &qName)
|
lbajardsilogic@143
|
117 {
|
lbajardsilogic@143
|
118 QString name = qName.toLower();
|
lbajardsilogic@143
|
119
|
lbajardsilogic@257
|
120 //if ( (name == "uri") || (name == "literal") )
|
lbajardsilogic@257
|
121 if (name == "uri")
|
lbajardsilogic@143
|
122 {
|
lbajardsilogic@257
|
123 m_inUriBinding = false;
|
lbajardsilogic@257
|
124 }
|
lbajardsilogic@257
|
125 if (name == "literal")
|
lbajardsilogic@257
|
126 {
|
lbajardsilogic@257
|
127 m_inLiteralBinding = false;
|
lbajardsilogic@143
|
128 }
|
lbajardsilogic@143
|
129
|
lbajardsilogic@143
|
130 return true;
|
lbajardsilogic@143
|
131 }
|
lbajardsilogic@143
|
132
|
lbajardsilogic@143
|
133 bool SparqlRelatedMediaHandler::characters(const QString &str)
|
lbajardsilogic@143
|
134 {
|
lbajardsilogic@257
|
135 if (m_inUriBinding)
|
lbajardsilogic@143
|
136 {
|
lbajardsilogic@257
|
137 m_curUriName = str;
|
lbajardsilogic@257
|
138
|
lbajardsilogic@257
|
139 } else if (m_inLiteralBinding)
|
lbajardsilogic@257
|
140 {
|
lbajardsilogic@257
|
141 m_relMediaList->insert(std::make_pair(m_curUriName,str));
|
lbajardsilogic@143
|
142 }
|
lbajardsilogic@143
|
143
|
lbajardsilogic@143
|
144 return true;
|
lbajardsilogic@143
|
145 }
|
lbajardsilogic@143
|
146
|
lbajardsilogic@143
|
147 bool SparqlRelatedMediaHandler::error(const QXmlParseException &exception)
|
lbajardsilogic@143
|
148 {
|
lbajardsilogic@143
|
149 QString errorString;
|
lbajardsilogic@143
|
150 errorString += QString("ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3")
|
lbajardsilogic@143
|
151 .arg(exception.message())
|
lbajardsilogic@143
|
152 .arg(exception.lineNumber())
|
lbajardsilogic@143
|
153 .arg(exception.columnNumber());
|
lbajardsilogic@143
|
154 std::cerr << errorString.toLocal8Bit().data() << std::endl;
|
lbajardsilogic@143
|
155 return QXmlDefaultHandler::error(exception);
|
lbajardsilogic@143
|
156 }
|
lbajardsilogic@143
|
157
|
lbajardsilogic@143
|
158 bool SparqlRelatedMediaHandler::fatalError(const QXmlParseException &exception)
|
lbajardsilogic@143
|
159 {
|
lbajardsilogic@143
|
160 QString errorString;
|
lbajardsilogic@143
|
161 errorString += QString("FATAL ERROR: SparqlRelatedMediaHandler-XML: %1 at line %2, column %3")
|
lbajardsilogic@143
|
162 .arg(exception.message())
|
lbajardsilogic@143
|
163 .arg(exception.lineNumber())
|
lbajardsilogic@143
|
164 .arg(exception.columnNumber());
|
lbajardsilogic@143
|
165 std::cerr << errorString.toLocal8Bit().data() << std::endl;
|
lbajardsilogic@143
|
166 return QXmlDefaultHandler::fatalError(exception);
|
lbajardsilogic@143
|
167 }
|