Closed luiseufrasio closed 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);
}
}
}
Já está fiz a árvore do Banco de dados, falta somente a da ontologia.
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.
Tá sim!
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.
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.
Link to vendas ontology. Use as example.
https://gist.github.com/a5be26265da7865ab2db