Archive:Development/Tutorials/Metadata/Nepomuk/Quickstart (zh CN): Difference between revisions

    From KDE TechBase
    (Created page with '{{Template:I18n/Language Navigation Bar|Development/Tutorials/Metadata/Nepomuk/Quickstart}} {{TutorialBrowser| series=[[../|Nepomuk]]| name=Nepmuk Quickstart| pre=[[Getting_Star...')
     
     
    (2 intermediate revisions by 2 users not shown)
    Line 1: Line 1:
    {{Template:I18n/Language Navigation Bar|Development/Tutorials/Metadata/Nepomuk/Quickstart}}
     


    {{TutorialBrowser|
    {{TutorialBrowser|
    Line 17: Line 17:
    资源管理器是 KMetaData 配置中心,在 KDE 4.2 和其后的版本中,为了连接 Nepomuk 服务,我们必须显式对它进行初始化。
    资源管理器是 KMetaData 配置中心,在 KDE 4.2 和其后的版本中,为了连接 Nepomuk 服务,我们必须显式对它进行初始化。


    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    Nepomuk::ResourceManager::instance()->init();
    Nepomuk::ResourceManager::instance()->init();
    </code>
    </syntaxhighlight>


    这个方法的返回值是一个<i>整型数</i>,如果成功(返回0),表示与 Nepomuk 的服务连接已经建立,我们可以使用它。如果失败(返回负整数),表示 Nepomuk 服务没有应答。任何与 Nepomuk 相关代码不能正常工作。可能的原因是用户在当前会话中禁用了 Nepomuk 服务。
    这个方法的返回值是一个<i>整型数</i>,如果成功(返回0),表示与 Nepomuk 的服务连接已经建立,我们可以使用它。如果失败(返回负整数),表示 Nepomuk 服务没有应答。任何与 Nepomuk 相关代码不能正常工作。可能的原因是用户在当前会话中禁用了 Nepomuk 服务。
    Line 27: Line 27:
    获取某个文件的元数据,假设 URL 或文件存储在<i>uri</i>里。
    获取某个文件的元数据,假设 URL 或文件存储在<i>uri</i>里。


    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    Nepomuk::Resource res( uri );
    Nepomuk::Resource res( uri );
    QHash<QUrl, Variant> properties = res.properties();
    QHash<QUrl, Variant> properties = res.properties();
    </code>
    </syntaxhighlight>


    这使我们能够获得分配给该文件的所有属性。
    这使我们能够获得分配给该文件的所有属性。
    Line 36: Line 36:
    使用 Nepomuk 获得文件属性中的可读性标签,并用普通的方法显示它:
    使用 Nepomuk 获得文件属性中的可读性标签,并用普通的方法显示它:


    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    for( QHash<QUrl, Variant>::const_iterator it = properties.constBegin();
    for( QHash<QUrl, Variant>::const_iterator it = properties.constBegin();
         it != properties.constEnd(); ++it ) {
         it != properties.constEnd(); ++it ) {
    Line 46: Line 46:
       someList->appendItem( propertyType.label() + ": " + value.toString() );
       someList->appendItem( propertyType.label() + ": " + value.toString() );
    }
    }
    </code>
    </syntaxhighlight>


    ===设置元数据===
    ===设置元数据===
    Line 54: Line 54:
    先从tag(标签)开始,使用简单的 Nepomuk 成员函数:
    先从tag(标签)开始,使用简单的 Nepomuk 成员函数:


    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    Nepomuk::Tag tag( "This is my nice tag name" );
    Nepomuk::Tag tag( "This is my nice tag name" );
    Nepomuk::Resource res( uri );
    Nepomuk::Resource res( uri );
    res.addTag( tag );
    res.addTag( tag );
    </code>
    </syntaxhighlight>


    简单吧!实际上,若 tag(标签)已经存在,会被重用
    简单吧!实际上,若 tag(标签)已经存在,会被重用
    Line 64: Line 64:
    现在为这个文件设置 comment(注释),不使用 Nepomuk 所提供的方法:
    现在为这个文件设置 comment(注释),不使用 Nepomuk 所提供的方法:


    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    Nepomuk::Resource res( uri );
    Nepomuk::Resource res( uri );
    QString comment = getFancyFileComment();
    QString comment = getFancyFileComment();
    res.setProperty( Soprano::Vocabulary::NAO::description(), comment );
    res.setProperty( Soprano::Vocabulary::NAO::description(), comment );
    </code>
    </syntaxhighlight>


    就这些,我们为文件添加的 comment(注释)保存好了,通过 Nepomuk 就可以搜到。
    就这些,我们为文件添加的 comment(注释)保存好了,通过 Nepomuk 就可以搜到。
    Line 74: Line 74:
    ===文件包含和库连接===
    ===文件包含和库连接===
    在上述例子中,需要包含如下头文件:
    在上述例子中,需要包含如下头文件:
    <code cppqt>
    <syntaxhighlight lang="cpp-qt">
    #include <Nepomuk/ResourceManager>
    #include <Nepomuk/ResourceManager>
    #include <Nepomuk/Variant>
    #include <Nepomuk/Variant>
    #include <Nepomuk/Types/Class>
    #include <Nepomuk/Types/Class>
    </code>
    </syntaxhighlight>
    在 CMakeLists.txt 文件中,需要添加查找 Nepomuk 的宏和连接到 Nepomuk 的声明 :-)
    在 CMakeLists.txt 文件中,需要添加查找 Nepomuk 的宏和连接到 Nepomuk 的声明 :-)
    <code cppqt>
    <syntaxhighlight lang="cmake">
    find_package(Nepomuk REQUIRED)
    find_package(Nepomuk REQUIRED)
    target_link_libraries(myfile ${NEPOMUK_LIBRARIES} )
    target_link_libraries(myfile ${NEPOMUK_LIBRARIES} )
    </code>
    </syntaxhighlight>

    Latest revision as of 16:01, 23 June 2013


    Nepmuk Quickstart
    Tutorial Series   [[../|Nepomuk]]
    Previous   KDE 开发入门
    What's Next   [[../Resources|用 Nepomuk 处理资源元数据]]
    Further Reading   n/a

    Nepomuk 快速起步

    在你的程序中使用 Nepomuk 读取和设置元数据可以非常容易,但是请记住,如下所描述的过程在大量修改元数据时有性能缺陷。 我们现在来看一个简单的访问资源元数据的方法。

    初始化资源管理器

    资源管理器是 KMetaData 配置中心,在 KDE 4.2 和其后的版本中,为了连接 Nepomuk 服务,我们必须显式对它进行初始化。

    Nepomuk::ResourceManager::instance()->init();
    

    这个方法的返回值是一个整型数,如果成功(返回0),表示与 Nepomuk 的服务连接已经建立,我们可以使用它。如果失败(返回负整数),表示 Nepomuk 服务没有应答。任何与 Nepomuk 相关代码不能正常工作。可能的原因是用户在当前会话中禁用了 Nepomuk 服务。

    元数据检索

    获取某个文件的元数据,假设 URL 或文件存储在uri里。

    Nepomuk::Resource res( uri );
    QHash<QUrl, Variant> properties = res.properties();
    

    这使我们能够获得分配给该文件的所有属性。

    使用 Nepomuk 获得文件属性中的可读性标签,并用普通的方法显示它:

    for( QHash<QUrl, Variant>::const_iterator it = properties.constBegin();
         it != properties.constEnd(); ++it ) {
       QUrl propertyUri = it.key();
       Variant value = it.value();
    
       Nepomuk::Types::Class propertyType( propertyUri );
    
       someList->appendItem( propertyType.label() + ": " + value.toString() );
    }
    

    设置元数据

    同样,假设 uri 是某个文件的 URL,我们为这个文件设置一些元数据,例如设置一个tag(标签)和 comment(注释),并会为此使用两种略有不同的方法:

    先从tag(标签)开始,使用简单的 Nepomuk 成员函数:

    Nepomuk::Tag tag( "This is my nice tag name" );
    Nepomuk::Resource res( uri );
    res.addTag( tag );
    

    简单吧!实际上,若 tag(标签)已经存在,会被重用

    现在为这个文件设置 comment(注释),不使用 Nepomuk 所提供的方法:

    Nepomuk::Resource res( uri );
    QString comment = getFancyFileComment();
    res.setProperty( Soprano::Vocabulary::NAO::description(), comment );
    

    就这些,我们为文件添加的 comment(注释)保存好了,通过 Nepomuk 就可以搜到。

    文件包含和库连接

    在上述例子中,需要包含如下头文件:

    #include <Nepomuk/ResourceManager>
    #include <Nepomuk/Variant>
    #include <Nepomuk/Types/Class>
    

    在 CMakeLists.txt 文件中,需要添加查找 Nepomuk 的宏和连接到 Nepomuk 的声明 :-)

    find_package(Nepomuk REQUIRED)
    target_link_libraries(myfile ${NEPOMUK_LIBRARIES} )