10
votes

Comment créer une ontologie en Java?

J'ai quelques triplets de données que je veux écrire dans une sorte d'ontologie de base de la chouette. J'ai des tripléts comme: xxx

ou xxx

notez que j'ai des relations telles que "IS-A", "," ", ou" liée à ". Quel est le moyen le plus simple de construire une ontologie? Tout exemple de travail ou une référence à un exemple de site Web sera une bonne aide!


2 commentaires

Quelle est la partie que vous avez des problèmes avec, l'extraction de l'information ou l'API de Jena?


J'ai besoin d'un exemple simple pour créer un fichier de hibou basé sur les déclarations ou triples ci-dessus. Je suis débutant et je n'ai pas beaucoup de connaissances sur l'ontologie ou Jena. Un exemple simple de création de modèle de chouette sera utile pour moi!


5 Réponses :


0
votes

Vous venez de déclarer une classe triplet composée d'un sujet, d'un objet et d'un prédicat. "HAS-A" est un prédicat, de sorte que vos éléments ontologiques ressembleraient à: xxx

ceci ne répond pas aux requêtes, bien sûr, mais donné un magasin de données décent (même une base de données ferait ) Vous pourriez commencer à créer une ontologie flexible avec un mécanisme de requête décent.

Jena est loin, beaucoup plus capable que ce que cela créerait, bien sûr; Il fournit les trucs de requête sémantique, ainsi que Loin meilleure définition de ressources et résolution. Cependant, c'est beaucoup plus impliqué qu'une simple structure triplet; Tout dépend de ce dont vous avez besoin.


3 commentaires

Je veux juste créer un fichier ontology basé sur celui-ci, j'essaie d'utiliser Modelfactory.createontoTeontologyModel (Onmodelspec.owl_mem), mais j'ai des problèmes dans la définition de mes propres déclarations, etc. Je ne sais pas aussi quel espace de noms à utiliser? N'importe quel exemple?


Je ne suis pas capable d'écrire un code précis pour mon problème. Je veux juste montrer mes données sous forme d'ontologie de la hibou. Il existe trois types de relations, c'est-A, a et connexe à. Et j'ai triplé comme "Inde", "est-a-a", "pays" et "caméra", "liée à", "photographie"


Il suffit de créer un fichier OWL basé sur ces informations, plus si un triple est plusieurs fois, j'ai également besoin d'ajouter sa fréquence en tant qu'attribut!



10
votes

Il y a beaucoup de choses différentes mélangées dans votre question, je vous suggère fortement de prendre un peu de temps (loin du clavier!) Pour réfléchir à ce que vous essayez d'atteindre ici.

Premièrement, les ontologies géographiques peuvent devenir assez complexes et beaucoup de travail a déjà été fait dans ce domaine. Probablement le point de départ évident est le geonames ontology , qui donne des noms aux caractéristiques géographiques, y compris les villes comme Dehli et des pays comme l'Inde. Au moins, vous devez réutiliser ces noms pour les lieux de votre application, comme cela maximisera les chances que vos données puissent être jointes avec succès avec d'autres sources de données liées disponibles.

Cependant, vous ne voulez probablement pas que l'ensemble des géographiques dans votre application (je devine), vous devez donc aussi être clair pourquoi vous avez besoin d'une ontologie. Un bon moyen d'aborder cela est de l'extérieur de votre candidature: plutôt que de vous inquiéter de la sorte de modèle de Jena à utiliser, commencez par réfléchir à des moyens de compléter la phrase "à l'aide de l'ontologie, un utilisateur de ma candidature sera Capable de ... ". Cela devrait ensuite vous amener à établir des questions compétences (voir, par exemple, section 3 de ce guide ) pour votre ontologie. Une fois que vous savez quels types d'informations que vous souhaitez représenter et quels types de questions vous devez appliquer, vos choix technologiques seront beaucoup plus clairs. Je me rends compte que ces applications sont généralement développées de manière itéitée et que vous voudrez essayer du code assez tôt, mais je préconisons toujours obtenir votre destination plus clairement à l'esprit avant de commencer votre voyage de codage.

Vous impliquez que vous souhaitez utiliser Jena pour conduire un site Web. Il y a beaucoup de choix ici. Ne soyez pas induit en erreur par le terme Web Semantic - cela signifie réellement apporter des qualités de type Web à des ensembles de données interlinés, plutôt que de mettre la sémantique dans des pages Web lisibles par soi. Pendant que vous pouvez le faire, et beaucoup de gens le font, vous aurez besoin de couches supplémentaires dans votre architecture. Nous utilisons généralement l'une des deux approches: Utilisation de Jena avec un moteur de modèles, tels que vélocité , dans un conteneur de servlets, Ou utiliser un cadre Web Ruby et conduire Jena via Jruby . Il existe de nombreuses autres façons de résoudre ce problème particulier: Jena n'adresse pas directement à la publication Web, mais elle peut être utilisée dans tout cadre Web basé sur Java.

Enfin, en ce qui concerne les espaces de noms, vous devez vraiment réutiliser les vocabulaires existants, et donc les espaces de noms, dans la mesure du possible. Ne composez pas de nouveaux noms pour des choses qui ont déjà des représentations sur le Web des données quelque part. Utilisez Geonames ou dbpedia ou l'une des nombreuses autres vocabulaires publiées où elles correspondent. S'ils ne correspondent pas, vous devez créer un nouveau nom plutôt que d'utiliser un nom existant de manière non compatible. Dans ce cas, vous devez utiliser le domaine Web de votre demande (par exemple votre entreprise ou votre université) comme base de l'espace de noms. Idéalement, vous devriez publier votre ontologie à l'URL de base de l'espace de noms, mais cela peut parfois être difficile à organiser en fonction des politiques Web locales.


0 commentaires

1
votes

Regardez à Stanford's Protége . C'est un éditeur d'ontologie.


0 commentaires

4
votes

Je suggère hibou API de l'Université Manchester. De cette façon, vous pouvez commencer à créer votre ontologie "à la volée" en Java et avec une seule invocation de méthode, vous pouvez le sérialiser dans votre format préféré (RDF, la syntaxe de Manchester, etc.) si vous avez besoin ou qui travaille directement sur le Représentation de la mémoire. De cette façon, vous pouvez vous prototyper et expérimenter rapidement votre ontologie dans le contexte de votre programme.

Pour un aperçu de la bibliothèque et de ses composants principaux, je suggère le tutoriel ( Tutoriel de code ) Fourni par le créateur de la bibliothèque, il couvre 90% des besoins de base.

PS: PROTEGÉ est basé sur OWL API, vous pouvez également l'essayer comme suggéré, mais de manière appropriée au début, j'ai préféré jouer rapidement avec des ontologies et passer à un environnement d'ingénierie comme de la protége lorsque mon esprit était suffisamment clair. En outre, avec une ontologie externe, vous devez apprendre à le naviguer, que je ne vaut vraiment pas au tout début.


1 commentaires

Je n'ai pas remarqué qu'il y avait déjà une réponse acceptée, j'espère que le mien pourrait s'avérer utile à quelqu'un d'autre :)



0
votes
/**  
  - This is maven dependencies for owl-api
    <dependency>
        <groupId>net.sourceforge.owlapi</groupId>
        <artifactId>owlapi-api</artifactId>
    </dependency>
    <dependency>
        <groupId>net.sourceforge.owlapi</groupId>
        <artifactId>owlapi-apibinding</artifactId>
    </dependency>

    * First of all you need to initialize ontology:

 **/   
                    private OWLDataFactory factory;

                    private PrefixManager pm;

                    private OWLOntology ontology;

                    private String pmString = "#";

                    private OWLOntologyManager manager;

                    private OWLReasoner reasoner;

                    private ShortFormEntityChecker entityChecker;

                    private BidirectionalShortFormProviderAdapter bidirectionalShortFormProviderAdapter;

             private void initializeOntology(String fileContent)
                            throws OWLOntologyCreationException {
                        InputStream bstream = new ByteArrayInputStream(fileContent.getBytes());
                        this.manager = OWLManager.createOWLOntologyManager();
                        this.ontology = this.manager.loadOntologyFromOntologyDocument(bstream);
                        IRI ontologyIRI = this.ontology.getOntologyID().getOntologyIRI();
                        this.pm = new DefaultPrefixManager(ontologyIRI.toString()
                                + this.pmString);
                        this.factory = this.manager.getOWLDataFactory();

                        ReasonerFactory factory = new ReasonerFactory();
                        this.reasoner = factory.createReasoner(this.ontology);

                        Set<OWLOntology> onts = new HashSet<>();
                        onts.add(this.ontology);

                        DefaultPrefixManager defaultPrefixManager = new DefaultPrefixManager(
                                this.pm);
                        ShortFormProvider shortFormProvider = new ManchesterOWLSyntaxPrefixNameShortFormProvider(
                                defaultPrefixManager);
                        this.bidirectionalShortFormProviderAdapter = new BidirectionalShortFormProviderAdapter(
                                this.manager, onts, shortFormProvider);
                        this.entityChecker = new ShortFormEntityChecker(
                                this.bidirectionalShortFormProviderAdapter);

                    }

/*
    After that you need to define your classes and the relations of the classes. These relations calls as object properties in ontology. Instance of each ontology class calls as individual and the attributies of the classes (for person name, age , adress) calls as data-property.
*/
//    To create a new individual of an ontology class : 



         public OWLClass getClass(String className) {
                 return this.factory.getOWLClass(":" + className, this.pm);
            }




            public OWLNamedIndividual createInvidual(String cls, String invname) {
                                        OWLNamedIndividual res = this.factory.getOWLNamedIndividual(":"
                                                + invname, this.pm);
                                        this.manager.addAxiom(this.ontology,
                                                this.factory.getOWLDeclarationAxiom(res));
                                        OWLClassAssertionAxiom axiom = this.factory.getOWLClassAssertionAxiom(
                                                getClass(cls), res);
                                        this.manager.addAxiom(this.ontology, axiom);
                                        return res;
            }

 //   To create an object property :

 //   This method will create an object property named prop if it is not exist.



         public OWLObjectProperty getObjectProperty(String prop) {
                    return this.factory.getOWLObjectProperty(":" + prop, this.pm);
                }

            public void addObjectProperty(String propname, OWLNamedIndividual prop,
                        OWLNamedIndividual obj) {
                    OWLObjectPropertyAssertionAxiom axiom = this.factory
                            .getOWLObjectPropertyAssertionAxiom(
                                    getObjectProperty(propname), obj, prop);
                    this.manager.addAxiom(this.ontology, axiom);
                }

  //  And finally , to add a data-property to individuals :

        public OWLDataProperty getDataProperty(String prop) {
                        return this.factory.getOWLDataProperty(":" + prop, this.pm);
                    }

        public void addDataProperty(String propname, boolean propvalue,
                        OWLNamedIndividual inv) {
                    OWLAxiom axiom = this.factory.getOWLDataPropertyAssertionAxiom(
                            getDataProperty(propname), inv, propvalue);
                    this.manager.addAxiom(this.ontology, axiom);
        }

0 commentaires