2017-04-25 1 views
1

je dois réaliser un tel format OWL:Jena OWL/RDF FunctionalProperty

<owl:DatatypeProperty rdf:ID="Role-description"> <rdfs:range 
rdf:resource="http://www.w3.org/2001/XMLSchema#string"/> 
<rdfs:domain rdf:resource="#Role"/> 
<rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/> 

J'utilise Jena et quand je tente de faire ensuite:

DatatypeProperty datatypeProperty = ontModel.createDatatypeProperty(OWL.NS + "Role-description"); 
datatypeProperty.addRDFType(OWL.FunctionalProperty); 
datatypeProperty.asDatatypeProperty(); 

Obtenez tous un étau versa.

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"> 
    <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Task"/> 
    <owl:Class rdf:about="http://www.w3.org/2002/07/owl#Actor"/> 
    <owl:ObjectProperty rdf:about="http://www.w3.org/2002/07/owl#Task-performedBy-Actor"/> 
    <owl:ObjectProperty rdf:about="http://www.w3.org/2002/07/owl#Actor-performs-Task"/> 
    <owl:FunctionalProperty rdf:about="http://www.w3.org/2002/07/owl#Role-description"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#DatatypeProperty"/> 
    </owl:FunctionalProperty> 
</rdf:RDF> 

apprécieront tous les conseils

+0

Je ne comprends pas d'importance de wh YIT comment les données sont sérialisés. La sémantique est supposée être la même et tout analyseur correct obtiendra la même information complète et correcte. Il n'y a pas d'ordre dans la sérialisation de OWL puisqu'une ontologie OWL consiste en un ensemble d'axiomes OWL – AKSW

+0

@AKSW J'ai souvent vu des 'besoins' similaires, souvent à la suite de demandes ou d'affectations trop spécifiques. Souvent le résultat de l'interaction avec des chaînes d'outils non-RDF ou non-OWL. – Ignazio

Répondre

2

La sortie que vous obtenez est pas vice versa. Ce que vous avez essentiellement est une ressource RDF avec plusieurs types. C'est à Iéna de savoir comment les sérialiser (c'est-à-dire lequel considérer comme "primaire"). Pour illustrer, je serialise votre exemple Turtle (légèrement modifié pour utiliser l'espace de noms personnalisé):

@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 
@prefix owl: <http://www.w3.org/2002/07/owl#> . 
@prefix roles: <http://example.com/ns/roles#> . 
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> . 
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 

roles:Role-description 
     a  owl:DatatypeProperty , owl:FunctionalProperty . 

Maintenant, voici comment vous pouvez manipuler l'ordre des types pour une sérialisation pratique:

public static final String ROLES_NS = "http://example.com/ns/roles#"; 

public static void main(String[] args) { 
    OntModel ontModel = ModelFactory.createOntologyModel(OntModelSpec.OWL_DL_MEM); 
    ontModel.setNsPrefix("roles", ROLES_NS); 

    DatatypeProperty prop = ontModel.createDatatypeProperty(
      ROLES_NS + "Role-description"); 
    prop.setRDFType(OWL.FunctionalProperty); 
    prop.addRDFType(OWL.DatatypeProperty); 

    RDFDataMgr.write(System.out, ontModel, RDFFormat.RDFXML_PRETTY); 
} 

Il produit la sortie suivante:

<rdf:RDF 
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" 
    xmlns:owl="http://www.w3.org/2002/07/owl#" 
    xmlns:roles="http://example.com/ns/roles#" 
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" 
    xmlns:xsd="http://www.w3.org/2001/XMLSchema#"> 
    <owl:DatatypeProperty rdf:about="http://example.com/ns/roles#Role-description"> 
    <rdf:type rdf:resource="http://www.w3.org/2002/07/owl#FunctionalProperty"/> 
    </owl:DatatypeProperty> 
</rdf:RDF> 
+0

Ut fonctionne, j'apprécie, merci! – Svitlana