Projects/Nepomuk/SparqlQueries: Difference between revisions

    From KDE TechBase
    (Created page with "Depending on the needs of your application you may need to directly run sparql queries. == Sparql Prefixes == When writing SPARQL queries, according to the standard one needs...")
     
    (3 intermediate revisions by the same user not shown)
    Line 1: Line 1:
    Depending on the needs of your application you may need to directly run sparql queries.
    Depending on the needs of your application you may need to directly run sparql queries.
    = Running Sparql Queries =
    Nepomuk uses one main [http://soprano.sourceforge.net/apidox/stable/classSoprano_1_1Model.html Soprano model] which is accessed through the [http://api.kde.org/4.x-api/kdelibs-apidocs/nepomuk-core/html/classNepomuk_1_1ResourceManager.html ResourceManager]:
    <syntaxhighlight lang="cpp-qt">
        Soprano::Model* model = Nepomuk::ResourceManager::instance()->mainModel();
    </syntaxhighlight>
    The queries can be run via this model -
    <syntaxhighlight lang="cpp-qt">
        QString query = QString::fromLatin1("select ?r where { ?r a nco:Contact . }");
        Soprano::Model* model = Nepomuk2::ResourceManager::instance()->mainModel();
        Soprano::QueryResultIterator it = model->executeQuery( query, Soprano::Query::QueryLanguageSparql );
        while( it.next() ) {
            kDebug() << it["r"].uri();
        }
    </syntaxhighlight>


    == Sparql Prefixes ==
    == Sparql Prefixes ==
    Line 8: Line 28:
    </syntaxhighlight>
    </syntaxhighlight>


    When running queries in Nepomuk, you do not need to explicitly add the prefix. The prefix will automatically be added by the storage service.
     
    When running queries in Nepomuk, you do not need to explicitly add the prefix. The prefix will automatically be added by the storage service. In the future we will try to make virtuoso automatically understand all prefixes.


    == Full Text Indexing ==
    == Full Text Indexing ==

    Revision as of 08:30, 24 August 2012

    Depending on the needs of your application you may need to directly run sparql queries.

    Running Sparql Queries

    Nepomuk uses one main Soprano model which is accessed through the ResourceManager:

        Soprano::Model* model = Nepomuk::ResourceManager::instance()->mainModel();
    


    The queries can be run via this model -

        QString query = QString::fromLatin1("select ?r where { ?r a nco:Contact . }");
        Soprano::Model* model = Nepomuk2::ResourceManager::instance()->mainModel();
        Soprano::QueryResultIterator it = model->executeQuery( query, Soprano::Query::QueryLanguageSparql );
    
        while( it.next() ) {
            kDebug() << it["r"].uri();
        }
    


    Sparql Prefixes

    When writing SPARQL queries, according to the standard one needs to prepend the queries with the prefixes that have been used. For example -

    PREFIX nco: <http://www.semanticdesktop.org/ontologies/2007/03/22/nco#> .
    select ?r ?name where { ?r a nco:Contact . ?r nco:fullname ?name . }
    


    When running queries in Nepomuk, you do not need to explicitly add the prefix. The prefix will automatically be added by the storage service. In the future we will try to make virtuoso automatically understand all prefixes.

    Full Text Indexing

    Nepomuk depends on Virtuoso for data storage. Virtuoso brings a lot of nice extensions to SPARQL. Most importantly the full text search which is used through the artificial bif:contains property.

    This allows to combine graph queries with full text queries in a nice way:

    select ?r where { ?r nao:prefLabel ?label .
                      ?label bif:contains 'nepomuk' . }
    

    The query above will find any resources that contain nepomuk in their label.

    Of course wildcards are supported, too. However, be aware that when using wildcards the expression itself needs to be enclosed in quotes as follows:

    select ?r where { ?r nao:prefLabel ?label .
                      ?label bif:contains "'nepomuk*'" . }
    


    Please note the virtuoso requires a minimum of 4 leading characters in order to use wildcards.