• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdelibs API Reference
  • KDE Home
  • Contact Us
 

Nepomuk-Core

  • sources
  • kde-4.12
  • kdelibs
  • nepomuk-core
  • libnepomukcore
  • query
resultiterator.cpp
Go to the documentation of this file.
1 /*
2  This file is part of the Nepomuk KDE project.
3  Copyright (C) 2012 Vishesh Handa <me@vhanda.in>
4  Copyright (C) 2007-2010 Sebastian Trueg <trueg@kde.org>
5 
6  This library is free software; you can redistribute it and/or
7  modify it under the terms of the GNU Lesser General Public
8  License as published by the Free Software Foundation; either
9  version 2.1 of the License, or (at your option) version 3, or any
10  later version accepted by the membership of KDE e.V. (or its
11  successor approved by the membership of KDE e.V.), which shall
12  act as a proxy defined in Section 6 of version 3 of the license.
13 
14  This library is distributed in the hope that it will be useful,
15  but WITHOUT ANY WARRANTY; without even the implied warranty of
16  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17  Lesser General Public License for more details.
18 
19  You should have received a copy of the GNU Lesser General Public
20  License along with this library. If not, see <http://www.gnu.org/licenses/>.
21 */
22 
23 #include "resultiterator.h"
24 
25 #include <resource.h>
26 #include <resourcemanager.h>
27 
28 #include <Soprano/Model>
29 #include <Soprano/QueryResultIterator>
30 
31 namespace Nepomuk2 {
32  namespace Query {
33  class ResultIterator::Private {
34  public:
35  RequestPropertyMap m_requestMap;
36  Soprano::QueryResultIterator m_it;
37  };
38  }
39 }
40 
41 Nepomuk2::Query::ResultIterator::ResultIterator(const Nepomuk2::Query::Query& query)
42  : d( new Nepomuk2::Query::ResultIterator::Private() )
43 {
44  Soprano::Model* model = ResourceManager::instance()->mainModel();
45 
46  d->m_requestMap = query.requestPropertyMap();
47  d->m_it = model->executeQuery( query.toSparqlQuery(), Soprano::Query::QueryLanguageSparql );
48 }
49 
50 Nepomuk2::Query::ResultIterator::ResultIterator(const QString& sparql, const Nepomuk2::Query::RequestPropertyMap& map)
51  : d( new Nepomuk2::Query::ResultIterator::Private() )
52 {
53  d->m_requestMap = map;
54 
55  if( !sparql.isEmpty() ) {
56  Soprano::Model* model = ResourceManager::instance()->mainModel();
57  d->m_it = model->executeQuery( sparql, Soprano::Query::QueryLanguageSparql );
58  }
59 }
60 
61 Nepomuk2::Query::ResultIterator::~ResultIterator()
62 {
63  delete d;
64 }
65 
66 
67 Nepomuk2::Query::Result Nepomuk2::Query::ResultIterator::current() const
68 {
69  Result result( Resource::fromResourceUri( d->m_it[0].uri() ) );
70 
71  // make sure we do not store values twice
72  QStringList names = d->m_it.bindingNames();
73  names.removeAll( QLatin1String( "r" ) );
74 
75  RequestPropertyMap::const_iterator rpIt = d->m_requestMap.constBegin();
76  for ( ; rpIt != d->m_requestMap.constEnd(); ++rpIt ) {
77  result.addRequestProperty( rpIt.value(), d->m_it.binding( rpIt.key() ) );
78  }
79 
80  static const char* s_scoreVarName = "_n_f_t_m_s_";
81  static const char* s_excerptVarName = "_n_f_t_m_ex_";
82 
83  Soprano::BindingSet set;
84  int score = 0;
85  Q_FOREACH( const QString& var, names ) {
86  if ( var == QLatin1String( s_scoreVarName ) )
87  score = d->m_it[var].literal().toInt();
88  else if ( var == QLatin1String( s_excerptVarName ) )
89  result.setExcerpt( d->m_it[var].toString() );
90  else
91  set.insert( var, d->m_it[var] );
92  }
93 
94  result.setAdditionalBindings( set );
95  result.setScore( ( double )score );
96 
97  return result;
98 }
99 
100 bool Nepomuk2::Query::ResultIterator::next()
101 {
102  return d->m_it.next();
103 }
104 
105 bool Nepomuk2::Query::ResultIterator::isValid() const
106 {
107  return d->m_it.isValid();
108 }
109 
110 Nepomuk2::Query::Result Nepomuk2::Query::ResultIterator::operator*() const
111 {
112  return current();
113 }
114 
115 Nepomuk2::Query::Result Nepomuk2::Query::ResultIterator::result() const
116 {
117  return current();
118 }
119 
Nepomuk2::Query::Query::toSparqlQuery
QString toSparqlQuery(SparqlFlags flags=NoFlags) const
Convert the query into a SPARQL query which can be used with the Nepomuk query service or directly in...
Definition: query.cpp:409
Nepomuk2::Query::ResultIterator::~ResultIterator
~ResultIterator()
Definition: resultiterator.cpp:61
Nepomuk2::Query::Query::requestPropertyMap
RequestPropertyMap requestPropertyMap() const
Build a request property map as used in QueryServiceClient::sparqlQuery() from the request properties...
Definition: query.cpp:585
Nepomuk2::Query::ResultIterator::current
Result current() const
Definition: resultiterator.cpp:67
Nepomuk2::Query::ResultIterator::isValid
bool isValid() const
Check if the iterator is in a valid state.
Definition: resultiterator.cpp:105
Nepomuk2::Query::ResultIterator::next
bool next()
Get the next result.
Definition: resultiterator.cpp:100
Nepomuk2::Query::ResultIterator::result
Result result() const
Definition: resultiterator.cpp:115
Nepomuk2::Query::ResultIterator::ResultIterator
ResultIterator(const QString &sparql, const RequestPropertyMap &map=RequestPropertyMap())
Constructor used to run sparql queries.
Definition: resultiterator.cpp:50
Nepomuk2::Query::ResultIterator
A class to iterate over Nepomuk query results.
Definition: resultiterator.h:45
Nepomuk2::Query::RequestPropertyMap
QHash< QString, Nepomuk2::Types::Property > RequestPropertyMap
Convinience definition for request property mappings as used in QueryServiceClient::sparqlQuery() and...
Definition: query.h:41
Nepomuk2::Query::Query
A Nepomuk desktop query.
Definition: query.h:76
resource.h
Nepomuk2::ResourceManager::instance
static ResourceManager * instance()
Definition: resourcemanager.cpp:270
Nepomuk2::Query::Result::addRequestProperty
void addRequestProperty(const Types::Property &property, const Soprano::Node &value)
Add the value of a request property.
Definition: result.cpp:93
Nepomuk2::Resource::fromResourceUri
static Resource fromResourceUri(const KUrl &uri, const Nepomuk2::Types::Class &type=Nepomuk2::Types::Class())
Allows to quickly load a resource from its resource URI without any additional checks.
Definition: resource.cpp:743
resourcemanager.h
Nepomuk2::Query::Result::setExcerpt
void setExcerpt(const QString &text)
Set the excerpt from the query.
Definition: result.cpp:141
resultiterator.h
Nepomuk2::Query::ResultIterator::operator*
Result operator*() const
Definition: resultiterator.cpp:110
Nepomuk2::Query::Result
A single search result.
Definition: result.h:57
Nepomuk2::Query::Result::setAdditionalBindings
void setAdditionalBindings(const Soprano::BindingSet &bindings)
Set the additional bindings a query returned besides the result itself and the request properties...
Definition: result.cpp:123
Nepomuk2::Query::Result::setScore
void setScore(double score)
Set the score of the result.
Definition: result.cpp:87
Nepomuk2::ResourceManager::mainModel
Soprano::Model * mainModel()
Retrieve the main data storage model.
Definition: resourcemanager.cpp:363
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:48:09 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

Nepomuk-Core

Skip menu "Nepomuk-Core"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Modules
  • Related Pages

kdelibs API Reference

Skip menu "kdelibs API Reference"
  • DNSSD
  • Interfaces
  •   KHexEdit
  •   KMediaPlayer
  •   KSpeech
  •   KTextEditor
  • kconf_update
  • KDE3Support
  •   KUnitTest
  • KDECore
  • KDED
  • KDEsu
  • KDEUI
  • KDEWebKit
  • KDocTools
  • KFile
  • KHTML
  • KImgIO
  • KInit
  • kio
  • KIOSlave
  • KJS
  •   KJS-API
  • kjsembed
  •   WTF
  • KNewStuff
  • KParts
  • KPty
  • Kross
  • KUnitConversion
  • KUtils
  • Nepomuk
  • Nepomuk-Core
  • Nepomuk
  • Plasma
  • Solid
  • Sonnet
  • ThreadWeaver

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal