luiseufrasio / rdb2rdfMB

Relational Database (rdb) to (2) Resource Description Framework (rdf) Mapping (M) Builder(B)
1 stars 0 forks source link

Load Ontology and Database Trees from Mapping Configuration #2

Closed luiseufrasio closed 11 years ago

luiseufrasio commented 11 years ago

Link to vendas ontology. Use as example.

https://gist.github.com/a5be26265da7865ab2db

luiseufrasio commented 11 years ago

Exemplo para ler ontologia:

import java.awt.BorderLayout; import java.awt.Container; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.util.HashMap; import java.util.Iterator; import java.util.List; import java.util.Map;

import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPopupMenu; import javax.swing.JScrollPane; import javax.swing.JSplitPane; import javax.swing.JTabbedPane; import javax.swing.JTextField; import javax.swing.JTree; import javax.swing.event.TreeSelectionEvent; import javax.swing.event.TreeSelectionListener; import javax.swing.tree.DefaultMutableTreeNode;

import model.Assertion; import model.AssertionType; import model.Class_; import model.DataProperty; import model.ObjProperty; import model.Property;

import com.hp.hpl.jena.ontology.DatatypeProperty; import com.hp.hpl.jena.ontology.ObjectProperty; import com.hp.hpl.jena.ontology.OntClass; import com.hp.hpl.jena.ontology.OntModel; import com.hp.hpl.jena.ontology.OntModelSpec; import com.hp.hpl.jena.rdf.model.ModelFactory; import com.hp.hpl.jena.util.iterator.ExtendedIterator;

public class RBA extends JFrame implements TreeSelectionListener { private static final long serialVersionUID = 1L; private static String srcPrefix = "a"; private static String tgPrefix = "v";

private JTabbedPane tabbedPane = new JTabbedPane();
private JPopupMenu jPopupMenu;
private JLabel label;
private JTree targetTree;
private JTree srcTree;
private JTextField currentSelectionField;
static Map<String, Class_> classesTarget = new HashMap<String, Class_>();
static Map<String, Class_> classesSource = new HashMap<String, Class_>();
static Map<DefaultMutableTreeNode, Assertion> assertions = new HashMap<DefaultMutableTreeNode, Assertion>();

public static void main(String[] args) throws Exception {
    String targetOnto = "vendas.owl";
    String srcOnto = "direto.owl";

    loadOntology(srcOnto, classesSource);
    loadOntology(targetOnto, classesTarget);
    new RBA(targetOnto, srcOnto);
}

public RBA(String rootTarget, String rootSource) {
    super("R2RML Mapping By Assertions");
    Container content = getContentPane();
    content.add(tabbedPane);

    JPanel panelDesign = new JPanel(false);
    panelDesign.setLayout(new BorderLayout());
    tabbedPane.addTab("Design", panelDesign);

    DefaultMutableTreeNode rootT = new DefaultMutableTreeNode(rootTarget
            + " (Target Ontology)");

    DefaultMutableTreeNode child;

    jPopupMenu = new JPopupMenu();
    JMenuItem itemAdd = new JMenuItem("Add Constraint");
    itemAdd.addActionListener(new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            Object o = srcTree.getLastSelectedPathComponent();

            if (o == null) {
                JOptionPane.showMessageDialog(null, "Please select a property of the source ontology.");
            } else {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
                if (node.isLeaf()) {
                    Property p = (Property) node.getUserObject();
                    String value = JOptionPane.showInputDialog(null, p.getName() + " = ");
                    label.setText("Constraint: " + p.getName() + " = " + value);

                    DefaultMutableTreeNode targetNode = (DefaultMutableTreeNode) targetTree
                            .getLastSelectedPathComponent();
                    Assertion a = assertions.get(targetNode);

                    if (a != null) {
                        a.setConstraint(p.getName() + " = " + value);
                        currentSelectionField.setText(a.toString());
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Please select a property of the source ontology.");
                }
            }
        }
    });
    JMenuItem itemDel = new JMenuItem("Del Constraint");
    itemDel.addActionListener(new ActionListener() {

        @Override
        public void actionPerformed(ActionEvent e) {
            Object o = srcTree.getLastSelectedPathComponent();

            if (o == null) {
                JOptionPane.showMessageDialog(null, "Please select a property of the source ontology.");
            } else {
                DefaultMutableTreeNode node = (DefaultMutableTreeNode) o;
                if (node.isLeaf()) {
                    DefaultMutableTreeNode targetNode = (DefaultMutableTreeNode) targetTree
                            .getLastSelectedPathComponent();
                    Assertion a = assertions.get(targetNode);
                    label.setText("Constraint: ");
                    if (a != null) {
                        a.setConstraint(null);
                        currentSelectionField.setText(a.toString());
                    }
                } else {
                    JOptionPane.showMessageDialog(null, "Please select a property of the source ontology.");
                }
            }
        }
    });

    jPopupMenu.add(itemAdd);
    jPopupMenu.add(itemDel);

    classesTarget.values();
    for (Iterator<Class_> iterator = classesTarget.values().iterator(); iterator
            .hasNext();) {
        Class_ c = (Class_) iterator.next();

        if (c.getSuperClass() != null) {
            continue;
        }

        child = new DefaultMutableTreeNode(c);
        rootT.add(child);

        addProperties(child, c);

        List<Class_> subclasses = Class_.getSubClasses(c,
                classesTarget.values());
        for (Class_ class_ : subclasses) {
            DefaultMutableTreeNode classChild = new DefaultMutableTreeNode(
                    class_);
            child.add(classChild);

            addProperties(classChild, class_);
        }
    }
    targetTree = new JTree(rootT);
    targetTree.addTreeSelectionListener(this);

    DefaultMutableTreeNode rootS = new DefaultMutableTreeNode(rootSource
            + " (Source Ontology)");
    classesSource.values();
    for (Iterator<Class_> iterator = classesSource.values().iterator(); iterator
            .hasNext();) {
        Class_ c = (Class_) iterator.next();

        child = new DefaultMutableTreeNode(c);
        rootS.add(child);

        addProperties(child, c);

        List<Class_> subclasses = Class_.getSubClasses(c,
                classesSource.values());
        for (Class_ class_ : subclasses) {
            DefaultMutableTreeNode classChild = new DefaultMutableTreeNode(
                    class_);
            child.add(classChild);

            addProperties(classChild, class_);
        }
    }
    srcTree = new JTree(rootS);
    srcTree.addMouseListener(new MouseAdapter() {
        public void mousePressed(MouseEvent evt) {
            if (evt.isPopupTrigger()) {
                jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
            }
        }

        public void mouseReleased(MouseEvent evt) {
            if (evt.isPopupTrigger()) {
                jPopupMenu.show(evt.getComponent(), evt.getX(), evt.getY());
            }
        }
    });
    srcTree.addTreeSelectionListener(new TreeSelectionListener() {
        @Override
        public void valueChanged(TreeSelectionEvent e) {
            DefaultMutableTreeNode srcNode = (DefaultMutableTreeNode) srcTree
                    .getLastSelectedPathComponent();

            DefaultMutableTreeNode targetNode = (DefaultMutableTreeNode) targetTree
                    .getLastSelectedPathComponent();
            Assertion a = assertions.get(targetNode);

            if (a == null) {
                JOptionPane.showMessageDialog(null,
                        "Please select the target element first.");
                return;
            }

            Object o = srcNode.getUserObject();
            if (o instanceof Class_) {
                Class_ c = (Class_) o;
                a.setSrcClass(c.getName());
            } else {
                Property p = (Property) o;
                a.setSrcClass(srcNode.getParent().toString());

                if (o instanceof DataProperty) {
                    a.setSrcDP(p.getName());
                } else {
                    a.setSrcOP(p.getName());
                }
            }

            currentSelectionField.setText(a.toString());
        }
    });

    JSplitPane jSplitPane = new JSplitPane(JSplitPane.HORIZONTAL_SPLIT,
            new JScrollPane(targetTree), new JScrollPane(srcTree));
    panelDesign.add(jSplitPane, BorderLayout.CENTER);
    jSplitPane.setOneTouchExpandable(true);
    jSplitPane.setDividerLocation(600);

    label = new JLabel("Constraint:");
    panelDesign.add(label, BorderLayout.NORTH);

    currentSelectionField = new JTextField("NONE");
    currentSelectionField.setHorizontalAlignment(JTextField.CENTER);
    panelDesign.add(currentSelectionField, BorderLayout.SOUTH);
    setSize(250, 275);
    setVisible(true);
}

private void addProperties(DefaultMutableTreeNode child, Class_ c) {
    DefaultMutableTreeNode grandChild;

    List<DataProperty> dProperties = c.getdProperties();
    for (DataProperty dataProperty : dProperties) {
        grandChild = new DefaultMutableTreeNode(dataProperty);
        child.add(grandChild);
    }

    List<ObjProperty> oProperties = c.getoProperties();
    for (ObjProperty objProperty : oProperties) {
        grandChild = new DefaultMutableTreeNode(objProperty);
        child.add(grandChild);
    }
}

public void valueChanged(TreeSelectionEvent event) {
    DefaultMutableTreeNode targetNode = (DefaultMutableTreeNode) targetTree
            .getLastSelectedPathComponent();

    Assertion a = assertions.get(targetNode);
    if (a == null) {
        a = new Assertion(srcPrefix, tgPrefix);
        if (targetNode.isLeaf()) {
            Property property = (Property) targetNode.getUserObject();
            String nome = property.getName();
            if (property instanceof DataProperty) {
                a.setTgDP(nome);
                a.setTgClass(property.getDomain().getName());
                a.setType(AssertionType.DP_TO_DP);
            } else {
                a.setTgOP(nome);
                a.setTgClass(property.getDomain().getName());
                a.setType(AssertionType.OP_TO_OP);
            }
        } else {
            a.setTgClass(targetNode.toString());
            a.setType(AssertionType.CLASS_TO_CLASS);
        }

        assertions.put(targetNode, a);
    } else {
        // TODO selecionar na fonte os elementos
    }

    currentSelectionField.setText(a.toString());

    if (a.getConstraint() != null) {
        label.setText("Constraint: " + a.getConstraint());
    } else {
        label.setText("Constraint: ");
    }
}

private static void loadOntology(String onto, Map<String, Class_> classes)
        throws FileNotFoundException {
    OntModel ontModel = ModelFactory
            .createOntologyModel(OntModelSpec.OWL_MEM);
    ontModel.read(new FileInputStream(new File(onto)),
            "http://example.org/vendas/", "TURTLE");

    ExtendedIterator<OntClass> i = ontModel.listClasses();
    while (i.hasNext()) {
        OntClass ontClass = (OntClass) i.next();

        String name = ontClass.getLocalName();

        if (classes.get(name) == null) {
            Class_ c = new Class_(name);
            classes.put(name, c);

            OntClass superClass = ontClass.getSuperClass();
            if (superClass != null) {
                String superName = superClass.getLocalName();
                Class_ superC = classes.get(superName);

                if (superC == null) {
                    superC = new Class_(superName);
                    classes.put(superName, superC);
                }

                c.setSuperClass(superC);
            }
        }
    }

    ExtendedIterator<DatatypeProperty> i2 = ontModel
            .listDatatypeProperties();
    while (i2.hasNext()) {
        DatatypeProperty datatypeProperty = (DatatypeProperty) i2.next();

        String dClassName = datatypeProperty.getDomain().getLocalName();
        Class_ dClass = classes.get(dClassName);
        String dpName = datatypeProperty.getLocalName();
        String rangeName = datatypeProperty.getRange().getLocalName();

        DataProperty dp = new DataProperty(dpName, dClass, rangeName);
        dClass.getdProperties().add(dp);
    }

    ExtendedIterator<ObjectProperty> i3 = ontModel.listObjectProperties();
    while (i3.hasNext()) {
        ObjectProperty objectProperty = (ObjectProperty) i3.next();

        String dClassName = objectProperty.getDomain().getLocalName();
        String rClassName = objectProperty.getRange().getLocalName();
        String opName = objectProperty.getLocalName();

        Class_ dClass = classes.get(dClassName);
        Class_ rClass = classes.get(rClassName);

        ObjProperty op = new ObjProperty(opName, dClass, rClass);
        dClass.getoProperties().add(op);
    }
}

}

iagocc commented 11 years ago

Já está fiz a árvore do Banco de dados, falta somente a da ontologia.

luiseufrasio commented 11 years ago

Beleza cara, tá navegando nas chaves? Em 15/01/2013 12:28, "Iago Chaves" notifications@github.com escreveu:

Já está fiz a árvore do Banco de dados, falta somente a da ontologia.

— Reply to this email directly or view it on GitHubhttps://github.com/luiseufrasio/rdb2rdfMB/issues/2#issuecomment-12269230.

iagocc commented 11 years ago

Tá sim!

luiseufrasio commented 11 years ago

Show! Depois que você fizer a ontologia faz o pull request que eu aceito lá. Em 15/01/2013 14:37, "Iago Chaves" notifications@github.com escreveu:

Tá sim!

— Reply to this email directly or view it on GitHubhttps://github.com/luiseufrasio/rdb2rdfMB/issues/2#issuecomment-12276058.

iagocc commented 11 years ago

Eufrasio estou me enrolando um pouco pra utilizar esse método postado, mas o mais rápido que eu puder eu te dou o pull request.