Как прочитать несколько моделей OWLOntology в одной переменной?

avatar
Sami
8 апреля 2018 в 09:27
91
0
2


У меня есть список онтологий (ListofOntologiesName), я могу читать их одну за другой. В настоящее время, как вы видите в моем коде, я загружаю 1-ю онтологию, сохраняю ее классы, аксиомы, сущности, затем загружаю 2-ю онтологии, читаю ее классы, аксиомы и сущности и добавляю их к моим предыдущим переменным. Но этого недостаточно. Позже, в моем коде, мне нужно работать с «myOWLmodel», но, очевидно, в нем есть только моя последняя загруженная онтология, а не все.
Как прочитать несколько онтологий в одной модели?
P.S. Я не хочу иметь, например. «Set<OWLOntology> allModell = new HashSet();» Потому что позже мне разрешили работать только с одной моделью из этого списка.

public static void BuildOnt(String ListofOntologiesName) {
    OWLOntology myOWLmodel = null;
    OwlOntologyManager owl = new OwlOntologyManager();
    OWLOntologyID currentOntologyID = null;
    ArrayList<OWLClass> tempClasses=new ArrayList<OWLClass>();
    Set<OWLAxiom> tempaxioms = new HashSet<OWLAxiom> ();
    Set<OWLEntity> tempEntities = new HashSet<OWLEntity> ();

    try {
        OWLOntologyManager manager = OWLManager.createOWLOntologyManager();
        String[] nm = ListofOntologiesName.split("\n");
        for (int ontID = 0; ontID < nm.length; ontID++) {
            if (!nm[ontID].toString().equals("null")) {
                String OntName = nm[ontID];
                File file = new File(OntName);
                myOWLmodel = manager.loadOntologyFromOntologyDocument(file);

                Set<OWLAxiom> tempAx = myOWLmodel.getAxioms();
                tempaxioms.addAll(tempAx);      

                ArrayList<OWLClass> classes = owl.getClasses(myOWLmodel);
                tempClasses.addAll(classes);

                Set<OWLEntity> ent = myOWLmodel.getSignature();
                tempEntities.addAll(ent);
            }
        }

        IRI ontologyIRI = IRI.create("http://www.semanticweb.org/mergedontology.owl");
        IRI versionIRI = IRI.create(ontologyIRI + "/version1");
        OWLOntologyID newOntologyID = new OWLOntologyID(ontologyIRI, versionIRI);
        SetOntologyID setOntologyID = new SetOntologyID(myOWLmodel, newOntologyID);
        manager.applyChange(setOntologyID);
        currentOntologyID = myOWLmodel.getOntologyID();
    } catch (Exception e) {
        e.printStackTrace();
}

    //Remaining of code:
   //Do some processes on all Entities by "tempEntities", all axioms by "tempaxioms", and all classes by "tempClasses"
    //Here I need more operation on "myOWLmodel", but it only saves the last loaded ontology
}

ОБНОВЛЕНИЕ:


Спасибо, я понял. ниже мой новый код:
public static OWLOntology ReadMultiOnt(String ListofOntologiesName) throws OWLOntologyCreationException {

    // Create an empty ontology
    OWLOntologyManager MergedManager = OWLManager.createOWLOntologyManager();
    File fileM = new File("NameOfMyMergedOntology");
    OWLOntology MergedOntology = MergedManager.loadOntologyFromOntologyDocument(fileM);
    OWLOntologyManager tempManager = OWLManager.createOWLOntologyManager();

    // Load each ontology, and add their axioms to my created empty ontology
    String[] nm = ListofOntologiesName.split("\n");
    for (int ontID = 0; ontID < nm.length; ontID++) {
        if (!nm[ontID].toString().equals("null")) {
            String OntName = nm[ontID];
            File file = new File(OntName);
            OWLOntology tempOntology = tempManager.loadOntologyFromOntologyDocument(file);

            Set<OWLAxiom> tempAx = tempOntology.getAxioms();
            MergedManager.addAxioms(MergedOntology, tempAx);

        }
    }

    return MergedOntology;
    // After that, I am able to do any process of all axioms, objects etc of all input ontologies
}
Источник
UninformedUser
8 апреля 2018 в 16:19
0

Ваш вопрос непонятен: "Я не хочу иметь, например, "Set setowlModle = new HashSet();"" "не хочу" или "хочу"?

UninformedUser
8 апреля 2018 в 16:22
0

В чем проблема иметь набор онтологий? Если вы хотите построить объединённую онтологию, что это: manager.applyChange(setOntologyID); — это бесполезно. Почему бы вам НЕ добавить все аксиомы в новую онтологию mergedOntology, которую вы создаете перед загрузкой онтологий? Это довольно прямолинейно

UninformedUser
8 апреля 2018 в 16:23
0

Ваш стиль кода далек от передовой практики... стиль верблюжьего регистра имен методов и имен переменных, сами имена переменных должны четко указывать тип объекта и т. д.

Sami
8 апреля 2018 в 17:59
0

У меня есть все аксиомы из входных онтологий в «tempaxioms», но для любых других операций, где мне нужно вызвать модель или фабрику OWLontology и т. д., у меня есть только информация о последней загруженной онтологии. Например, «myOWLmodel.getObjectPropertiesInSignature()» возвращает только свойства объекта последней онтологии.

Sami
8 апреля 2018 в 18:07
0

Извините, я исправляю это, я не хочу иметь набор модели owlontology. Например, если у меня есть Set<OWLOntology> allModell = new HashSet<OWLOntology>(); Затем, если я вызову Iterator<OWLOntology> iter = allModell.iterator(); Set<OWLObjectProperty> seperatedObj = iter.next().getObjectPropertiesInSignature(); Для любого процесса, такого как getObject, он дает мне отдельный список.

UninformedUser
9 апреля 2018 в 06:02
0

И вы можете объединить любой из этих списков в один список... Я не вижу здесь проблемы, это базовая Java. В любом случае, я рассказал вам, как это сделать. 1) создать пустую онтологию o 2) для каждой загружаемой онтологии o_i добавить ее аксиомы в o. OWLOntologyManager предоставляет все эти методы.

Sami
9 апреля 2018 в 08:30
0

Спасибо, меня смутило сохранение всех операций вместо сохранения всей онтологии. Я обновляю свой код. Спасибо еще раз.

Stanislav Kralin
9 апреля 2018 в 10:30
3

Вместо добавления «[решено]» к заголовку и редактирования вопроса опубликуйте свой ответ и примите его.

Ответы (0)