2015-03-10 4 views
1

Доброе утро, я работаю с OWL API, и я пытаюсь получить данные внутри совы: Ограничение. Например, я использую для пиццы онтологию, и я хочу, чтобы получить данные для onProperty и someValuesFrom, который является частьюИзвлечь сову: ограничения с использованием OWL API

<owl:Class rdf:about="#American"> 
    <rdfs:label xml:lang="pt">Americana</rdfs:label> 
    <rdfs:subClassOf> 
    <owl:Restriction> 
     <owl:onProperty rdf:resource="#hasTopping"/> 
     <owl:someValuesFrom rdf:resource="#TomatoTopping"/> 
    </owl:Restriction> 
    </rdfs:subClassOf> 
    ... 
</owl:Class> 

Так что, если у меня есть американский OWLClass, как я могу получить список OwlRestrictions и к свойствам, к которым он относится. Что-то вроде американец -> subClassOf -> Ограничение -> onProperty -> hasTopping. Есть ли способ создать структуру данных, в которой есть все эти шаги?

+0

Что вы пробовали? Что не сработало? OWL-API хорошо документирован, и документация содержит множество примеров. Не слишком сложно получить подклассы класса, проверить, являются ли они ограничениями, и вытащить части ограничения, если они есть. –

+0

Вы также можете взглянуть на этот пример https://github.com/owlcs/owlapi/blob/version3/contract/src/test/java/org/coode/owlapi/examples/Examples.java#L1171-L1267, который описывает его довольно приятно с помощью посетителя. –

ответ

2

Я не уверен, что именно вы подразумеваете под «шагами», но я думаю, что у вас есть класс, и вам нужны все ограничения, применимые к подклассам. Однако, что произойдет, если вы также хотите применить ограничения к эквивалентным классам? Поэтому я решил написать более общий. Здесь:

PrefixManager pm= new DefaultPrefixManager("http://www.co-ode.org/ontologies/pizza/pizza.owl#"); 
    OWLClass american=factory.getOWLClass("American", pm); 
    Set<OWLClassAxiom> tempAx=localOntology.getAxioms(american); 
    for(OWLClassAxiom ax: tempAx){ 
     for(OWLClassExpression nce:ax.getNestedClassExpressions()) 
      if(nce.getClassExpressionType()!=ClassExpressionType.OWL_CLASS) 
       System.out.println(ax); 
    } 
+0

Удивительный, это помогает тонне! Спасибо огромное! –

+0

Если ответ правильный, вы можете принять ответ, чтобы вопрос закрылся. – Artemis