簡體   English   中英

將Owl API DB轉換為OWL

[英]Protege Owl API DB to OWL

如果基數為1:1,則需要從第一個表名稱創建OWL類,而從第二個表名稱創建OWL類。 如果基數為1:*並且其中一個表描述了對象屬性,則從第一個表名稱創建OWL對象屬性,而不是從第二個表名稱創建OWL類。 如何從列名創建OWL類,其余的做些什么? 我在Eclipse中安裝了Protege OWL API。

package snippet;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import edu.stanford.smi.protege.exception.OntologyLoadException;
import edu.stanford.smi.protegex.owl.ProtegeOWL;
import edu.stanford.smi.protegex.owl.model.OWLModel;
import edu.stanford.smi.protegex.owl.model.OWLNamedClass;

public class Snippet {

public static void main(String[] args) throws OntologyLoadException {
    //-Dprotege.dir=

    //  SQL Server DB with JDBC
     String url = "jdbc:sqlserver://xxx:1433";
     String userName = "xxx";
     String password = "xxx";

    try {
        Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        Connection con = DriverManager.getConnection (url, userName, password);
        Statement smt = con.createStatement();
        smt.executeQuery("SELECT * from table_references");
        ResultSet rs = smt.getResultSet();

        while (rs.next()) { 
            String column1 = rs.getString("referenced_object_id");
            String column2 = rs.getString("name");
            String column3 = rs.getString("parent_column_id");
            String column4 = rs.getString("referenced_column_id");

            System.out.println(column1 + " | " + column2 + " | " + column3 + " | " + column4);
        }   

    } 
    catch (ClassNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (SQLException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }

    //Protege API   
}

}

您需要創建一個OWLEntity,然后將其添加到您的經理中。 就像是:

String axiom=ontoIRI+"#"+input;

        //convert String into OWLAxiom
        OWLEntity entity=factory.getOWLEntity(EntityType.CLASS,IRI.create(axiom));

        //executing addition
        OWLDeclarationAxiom tempAxiom= factory.getOWLDeclarationAxiom(entity) ;

        // Add the axiom to our ontology
        AddAxiom addAx = new AddAxiom(tempOnto, tempAxiom);
        tempManager.applyChange(addAx);

這僅允許您將建模元素添加到本體中。 每個建模元素都可以添加適當的限制。 遵循相同的AddAxiom語法來添加限制。

我不知道公理。 我是那樣做的:

     OWLModel owlModel = ProtegeOWL.createJenaOWLModel();
        while (rs.next()) { 
            String column1 = rs.getString("referenced_object_id");
            String column2 = rs.getString("name");
            String column3 = rs.getString("parent_column_id");
            String column4 = rs.getString("referenced_column_id");

            System.out.println(column1 + " | " + column2 + " | " +    column3 + " | " + column4);

            String sql = "SELECT name from sys.tables WHERE object_id='" + column1 + "'";

            if(column2.startsWith("op_")) {

                // create object property,class and point if its domain or range class
                //Now gettin error,that Object property already exist. Need to do something, I don't know what. 
               // if(owlModel.getJenaModel().contains(column2))  maybe

                OWLObjectProperty Property = owlModel.createOWLObjectProperty(column2);

            } else {
                // create class
                OWLNamedClass clas = owlModel.createOWLNamedClass(column2);
            }

[sreen]( http://postimg.org/image/m8vbeer7h/

您使用的Jena API不如OWL API修改本體。 在最初的問題中,您提到了OWL API的使用。 我建議您看一下,它更簡單: OWLAPI

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM