Hi Manish,

Yes, typically this is done by using the Stanbol Entiyhub in
combination with a referenced site for dbpedia.

(1) Configuring the dbpedia ReferencedSite
------

But NOTE that all pre-build dbpedia indexes for the Entityhub do not
include the dbpedia-owl:industry property. Meaning that you will need
to create your own DBpedia index that does include this property by
using the Entityhub Indexing Tool for dbpedia.

As alternative you could also configure a Referenced Site for dbpedia
that directly accesses the dbpedia SPARQL endpoint and stores
retrieved entities in a local cache. For that you can install the

    <groupId>org.apache.stanbol</groupId>
    <artifactId>org.apache.stanbol.data.sites.dbpedia.cached</artifactId>
    <version>1.2.0-SNAPSHOT</version>

NOTE: with revision http://svn.apache.org/r1482702 I changed the name
of the ReferencedSite configured by this bundle from 'dbpedia' to
'dbpedia-cached' so that it does not conflict with the default
'dbpedia' ReferencedSite that does use a full local index.

(2) Access the information of the dbpedia ReferencedSite
---------

To get the required information you will need to use the Entityhub
API. See the code samples below.

    import org.apache.stanbol.entityhub.servicesapi.site.SiteManager

    //inject a reference to the Entityhub SiteManager
    @Reference
    SiteManager siteManager

    //siteName is the name of the Referenced Site (most likely
'dbpedia' or 'dbpedia-cached')
    private someMethod(String siteName, String entityId){

        Site site = siteManager.getSite(siteName);
        //check for not null (site with that name is not active)
        Entity entity = site.getEntity(entityId);
        Representation data = entity.getRepresentation();
        //get the RDF type values of the Entity
        Iterator<Reference> types = data.getReferences(RDF_TYPE);
        //iterate over the types and check for dbp-ont:Organisation
(the full URI)

        Iterator<Reference> industryValues =
data.gerReferences(DBPEDIA_INDUSTRY);
        //iterate over the values for the industry values

    }

If you prefer to use the Clerezza RDF API instead of the API of
Representation you can also convert the Representation to RDF

    import org.apache.stanbol.entityhub.model.clerezza.RdfValueFactory;
    import import org.apache.clerezza.rdf.utils.GraphNode;

    private static RdfValueFactory vf = RdfValueFactory.getInstance();

    private GraphNode convertRepresentationToRdf(Representation r){
        return new GraphNode(new UriRef(r.getId()),
            vf.toRdfRepresentation(rep).getRdfGraph();
    }

The above code would create a new MGraph for each Representation. If
you want to add multiple Representation to the same Graph you need to
use

    import org.apache.stanbol.commons.indexedgraph.IndexedMGraph;

    private someMethod(...) {

    MGrpah graph = new IndexedMGrpah(); //a fast in-memory graph implementation
    RdfValueFactory vf = new RdfValueFactory(graph);

    //now use this RdfValueFactory to convert all Representations
    GraphNode entityRdfData = convertRepresentationToRdf(vf,representation)

    }

    private GraphNode convertRepresentationToRdf(RdfValueFactory vf,
Representation r){
        return new GraphNode(new UriRef(r.getId()),
            vf.toRdfRepresentation(rep).getRdfGraph();
   }

hope this helps

best
Rupert

On Tue, May 14, 2013 at 2:29 PM, Manish Aggarwal <[email protected]> wrote:
> Hi,
>
> Is it possible to query dbpedia database from a custom enhancement engine
> and find out more about a keyword. For example, if the keyword classify
> under organization (dbp-ont:Organisation), I will be interested to know
> what is the industry (dbpedia-owl:industry) this keyword belongs to.
> In a custom enhancement engine how can I get the required information?
>
> Regards,
> Manish



-- 
| Rupert Westenthaler             [email protected]
| Bodenlehenstraße 11                             ++43-699-11108907
| A-5500 Bischofshofen

Reply via email to