My notes about computer science, programming, and software
© 2008-2009 Jean-Marc Vanel
e-mail: Send your comments - My home page my FOAF URI: http://jmvanel.free.fr/jmv.rdf#me
Last update:
This is my blog. Sometimes I say things in French there, and sometimes in
english here.
Parfois je dis les choses en Français, et parfois ici en Anglais.
Table of contents - Years before blog (2004-2007) .
AI use for software development : the new paradigm
EulerGUI Download statistics - To view the EulerGUI downloads: http://sourceforge.net/projects/eulergui/files/
Intermediary versions of EulerGUI - EulerGUI Feature requests
dd if=~/Téléchargements/Fedora-15-x86_64-Live-Desktop.iso of=/dev/sdb
https://github.com/droolsjbpm/drools
-- Don't forget to add /usr/local/mercury-11.01/bin to your PATH, -- /usr/local/mercury-11.01/man to your MANPATH, -- and /usr/local/mercury-11.01/info to your INFOPATH, -- and to add the following lines to the `.emacs' file -- in your home directory: (add-to-list 'load-path "/usr/local/mercury-11.01/lib/mercury/elisp")
AgentSpeak(L): BDI Agents speak out in a logical computable language
http://goanna.cs.rmit.edu.au/~ssardina/courses/Roma07PhDcourse/lect07/rao96agentspeakl.pdf
Jason / OWL2MAS
https://sourceforge.net/mailarchive/message.php?msg_id=19542173
GRAVE: Drools Error in file:/home/jmv/src/deductions/n3_nojs/generic_gui_projection-rules.n3 , Error: [ERR 103] Line 721:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "generic_gui_projection-rules.n3 13" Error Lines: - 721 ; see Drools source in droolsSources/*.drl 10 juin 2011 11:08:28 eulergui.inference.drools.impl.N3SourcetoDrools showDroolsCompilationErrors GRAVE: Drools compile ERROR: [0,0]: Parser returned a null Package Drools Error: Parser returned a null Package ........ GRAVE: Drools compile ERROR: [323,15]: [ERR 103] Line 323:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 7" Drools Error: [ERR 103] Line 323:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 7" ErrorLines: - 323 10 juin 2011 11:08:29 eulergui.inference.drools.impl.N3SourcetoDrools showDroolsCompilationErrors GRAVE: Drools Error in file:/home/jmv/src/deductions/n3_nojs/app_gui-rules2.n3 , Error: [ERR 103] Line 323:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 7" Error Lines: - 323 ; see Drools source in droolsSources/*.drl 10 juin 2011 11:08:29 eulergui.inference.drools.impl.N3SourcetoDrools showDroolsCompilationErrors GRAVE: Drools compile ERROR: [354,15]: [ERR 103] Line 354:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 8" Drools Error: [ERR 103] Line 354:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 8" ErrorLines: - 354 10 juin 2011 11:08:29 eulergui.inference.drools.impl.N3SourcetoDrools showDroolsCompilationErrors GRAVE: Drools Error in file:/home/jmv/src/deductions/n3_nojs/app_gui-rules2.n3 , Error: [ERR 103] Line 354:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 8" Error Lines: - 354 ; see Drools source in droolsSources/*.drl 10 juin 2011 11:08:29 eulergui.inference.drools.impl.N3SourcetoDrools showDroolsCompilationErrors GRAVE: Drools compile ERROR: [385,15]: [ERR 103] Line 385:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 9" Drools Error: [ERR 103] Line 385:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 9" ErrorLines: - 385 10 juin 2011 11:08:29 eulergui.inference.drools.impl.N3SourcetoDrools showDroolsCompilationErrors GRAVE: Drools Error in file:/home/jmv/src/deductions/n3_nojs/app_gui-rules2.n3 , Error: [ERR 103] Line 385:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "app_gui-rules2.n3 9" Error Lines: - 385 ; see Drools source in droolsSources/*.drl
GRAVE: Drools Error in file:/home/jmv/src/deductions/n3_nojs/generic_gui_projection-rules.n3 , Error: [ERR 103] Line 720:15 rule 'class_key' failed predicate: {(helper.validateIdentifierKey(DroolsSoftKeywords.CLASS))}? in rule "generic_gui_projection-rules.n3 13"
http://docs.jboss.org/drools/release/5.2.0.CR1/droolsjbpm-introduction-docs/html_single/#d0e47
http://eulersharp.svn.sourceforge.net/svnroot/eulersharp/trunk/2003/03swap/rpo-rules.n3 Thread [N3 sources modification Checker] (Suspended) N3Source.manageN3Cache(N3Source) line: 463 N3Source.doUpdate() line: 356 N3Source.update() line: 348 N3ConversionRefesher.updateN3(N3Source) line: 102 N3ConversionRefesher.n3SourceChanged(Project, N3Source) line: 46 ProjectChangeSupport.fireN3SourceChanged(Project, N3Source) line: 145 Project.fireN3SourceChanged(N3Source) line: 1383 URIModificationChecker.checkN3Source(N3Source) line: 90 URIModificationChecker.run() line: 62 Thread.run() line: 662
index.rdf Thread [N3 sources modification Checker] (Suspended (breakpoint at line 42 in CacheFacade)) CacheFacade.manageLocalCache(String) line: 42 ProjectFactory.readProjectFromURL(URL) line: 233 ProjectFactory.restoreXMLURL(URL, boolean) line: 215 ProjectFactory.restore(String, boolean) line: 53 ProjectFactory.restoreAny(URI, boolean) line: 376 SWRLTranslator.n3SourceAdded(Project, N3Source) line: 42 SWRLTranslator.n3SourceChanged(Project, N3Source) line: 32 ProjectChangeSupport.fireN3SourceChanged(Project, N3Source) line: 145 Project.fireN3SourceChanged(N3Source) line: 1383 URIModificationChecker.checkN3Source(N3Source) line: 90 URIModificationChecker.run() line: 62 Thread.run() line: 662
_____________
#TRACE ( ":form_no_subclasses :DEBUG" <http://jmvanel.free.fr/ontology/gui_generic.owl#DatatypeInputWidget> ) #TRACE ( "1" <http://jmvanel.free.fr/ontology/gui_generic.owl#inputWidgetSpecification> "ObjectProperty" "a :OWLProperty" ) org.drools.runtime.rule.ConsequenceException: rule: project-java-rules.n3 4 at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927) at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856) at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751) at unif.TripleStoreDrools.fireAllRules(TripleStoreDrools.java:330) at eulergui.gui.controller.ApplicationKB.fireAllRules(ApplicationKB.java:204) at eulergui.gui.controller.ApplicationKB.n3SourceChanged(ApplicationKB.java:509) at eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:145) at eulergui.project.Project.fireN3SourceChanged(Project.java:1377) at eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:90) at eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:62) at java.lang.Thread.run(Thread.java:662) Caused by: java.lang.NullPointerException at org.drools.common.EqualityAssertMapComparator.hashCodeOf(EqualityAssertMapComparator.java:48) at org.drools.core.util.ObjectHashMap.get(ObjectHashMap.java:100) at org.drools.common.SingleThreadedObjectStore.getHandleForObject(SingleThreadedObjectStore.java:122) at org.drools.common.AbstractWorkingMemory.getFactHandle(AbstractWorkingMemory.java:861) at n3_project.helpers0.Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.evaluate(Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.java:33) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917) ... 12 more |
12:03:15 [AWT-EventQueue-0] [warning] View: Buffer /tmp/dl-safe_small.owl.as.rules.n3 doesn't exist 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: org.drools.runtime.rule.ConsequenceException: rule: project-java-rules.n3 4 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at unif.TripleStoreDrools.fireAllRules(TripleStoreDrools.java:330) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.gui.controller.ApplicationKB.fireAllRules(ApplicationKB.java:204) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.gui.controller.ApplicationKB.n3SourceChanged(ApplicationKB.java:509) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:145) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.project.Project.fireN3SourceChanged(Project.java:1377) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:90) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:62) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.lang.Thread.run(Thread.java:662) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: Caused by: java.lang.NullPointerException 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.EqualityAssertMapComparator.hashCodeOf(EqualityAssertMapComparator.java:48) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.core.util.ObjectHashMap.get(ObjectHashMap.java:100) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.SingleThreadedObjectStore.getHandleForObject(SingleThreadedObjectStore.java:122) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.AbstractWorkingMemory.getFactHandle(AbstractWorkingMemory.java:861) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at n3_project.helpers0.Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.evaluate(Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.java:33) 12:03:21 [N3 sources modification Checker] [error] N3 sources modification Checker: at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917) |
http://lambda-the-ultimate.org/search/node/rules+GUI
AgentSpeak(L): programming with beliefs, desires and intentions
http://lambda-the-ultimate.org/node/3003#comment-43996
http://jason.sourceforge.net/Jason/Documents.html
Kawa - Java integration has nice features, comparable to N3 Java integration.
http://www.gnu.org/software/kawa/toc.html
./configure --enable-kawa-frontend make java kawa.repl make check ./bin/kawa -w |
http://per.bothner.com/blog/2007/ReplPane/
(define but1 (javax.swing.JButton "Salut") ) (set! but1:text "Bonjour!") |
BDI model (Belief-Desire-Intention model)
AgentSpeak(L): programming with beliefs, desires and intentions http://lambda-the-ultimate.org/node/3003
Norman swartz, Professor of Philosophy, Emeritus http://www.sfu.ca/~swartz/
TODO EulerGUI: remove subclassOf rules in Swing rule base, as it is now done with pre-processing OWL or N3 (?) .
Twit:
It would be nice to develop an agent / expert in finding ontologies on the web, if that does not exist already :)
Ontology to use for querying
http://answers.semanticweb.com/questions/2623/ontology-to-use-for-querying#2630
http://schemacache.test.talis.com/api-config
http://schemapedia.com/search?q=material&action=Search
http://sindice.com/search?q=material
http://swse.deri.org/list?keyword=material
http://schemacache.com/?q=material+type%3Ahttp\%3A%2F%2Fwww.w3.org%2F2000%2F01%2Frdf\-schema%23Class&q=component+
http://schemacache.com/Res/?uri=http%3A%2F%2Fwww.ontologydesignpatterns.org%2Fcp%2Fowl%2Fcomponency.owl%23hasComponent
http://labs.mondeca.com/dataset/lov/index.html
http://dublincore.org/2010/10/11/dcterms.rdf#PhysicalMedium
http://ontologydesignpatterns.org/wiki/Main_Page
http://schemapedia.com/search?q=material&action=Search
Where can I find useful ontologies?
http://answers.semanticweb.com/questions/1039/where-can-i-find-useful-ontologies
The DBpedia Ontology
http://wiki.dbpedia.org/Ontology?v=1cql
COMMIT
class EulerGUI : fixed excessive log for getLogger("cache")
Twitted by Ontologiae : Jason, a AgentSpeak interpreter (BDI oriented language) uses a Description Logic Reasoner
http://lambda-the-ultimate.org/node/3003
How to enforce max Cardinality with rules ?
{ ?C owl:maxCardinality ?MAX. ?C owl:onProperty ?P. _:d eu:findall ( ?SUBJECT { ?O ?P ?SUBJECT } ?SUBJECTS ). ?SUBJECTS math:memberCount ?COUNT . ?COUNT math:greaterThan ?MAX. } => { false # ??? }.
It seems better to control input , as this is obviously a closed world feature.
This is the "concrete" example:
If there is a n : concrete X1
then the n : concrete X1 v : contains a n : cement
and the n : concrete X1 v : contains a n : granulate .
This is also the "koala" example:
:Animal a owl:Class ; rdfs:seeAlso "Male" ; rdfs:subClassOf [ a owl:Restriction ; owl:minCardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ; owl:onProperty :hasHabitat ] ; rdfs:subClassOf [ a owl:Restriction ; owl:cardinality "1"^^<http://www.w3.org/2001/XMLSchema#int> ; owl:onProperty :hasGender ] |
on oasis IRC
jmvanel_> Hello
<jmvanel_> I'm looking for testers for EulerGUI 1.9 beta: Semantic Web / N3 GUI and framework, rules engines, mixing business rules and Java
<jmvanel_> open source
COMMIT
remove class MyResourceBundle duplicate of GuiResourceBundle
- move several helper classes to package eulergui.util
- mark helper classes with a private constructor
- generalize a little ReaderUtils.copyReader()
- add commented suggestions in ~/.eulergui/preferences.n3 , when empty :
@prefix app: <http://jmvanel.free.fr/ontology/software_applications.owl#> . app:currentApplication app:userLanguage "de" .
Thread [N3 sources modification Checker] (Suspended (breakpoint at line 1053 in ProjectGUI)) ProjectGUI.setLanguage(String) line: 1053 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 DeferredPropertyAssignment.findAndInvokeMethod(Object, Object, Class<?>) line: 103 DeferredPropertyAssignment.assign(Object) line: 45 DeferredPropertyAssignment.assign(Assignment) line: 39 Rule_DeferredPropertyAssignment_literal_argument_0.defaultConsequence(KnowledgeHelper, DeferredPropertyAssignment, FactHandle, Assignment, FactHandle) line: 13 Rule_DeferredPropertyAssignment_literal_argument_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: 34 DefaultAgenda.fireActivation(Activation) line: 917 DefaultAgenda.fireNextItem(AgendaFilter) line: 856 DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1071 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 785 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 751 TripleStoreDrools.fireAllRules() line: 330 ApplicationKB.fireAllRules() line: 204 ApplicationKB.n3SourceChanged(Project, N3Source) line: 509 ProjectChangeSupport.fireN3SourceChanged(Project, N3Source) line: 145 Project.fireN3SourceChanged(N3Source) line: 1377 URIModificationChecker.checkN3Source(N3Source) line: 90 URIModificationChecker.run() line: 62 Thread.run() line: 662
ECA Event Condition Action rules
I added starDict with a couple of dictionaries; everytime you select a word anywhere, a popup appears with definitions.
<jmvanel_> I'm ready for an EG release; couldn't find anyone on swig for testing :(
<jmvanel_> found this possibly interesting community : #Genifer, but they don't talk much
<jmvanel_> now I'm working to clean things in EG with the internal KB so that applicative rules can be triggered whenener something happens. As a concrete case, redraw the GUI when user update the preference N3 file.
The sequence of events:
~/.eulergui/preferences.n3
which replaces the old one in the
KBapp:currentApplication app:userLanguage "de" .
replaces the old one
Is there a standard design pattern in rule to have new inserted value of MyClass . myField replace the previous one ?
I mean assume :
class MyClass { public String myField ; }
insert object o1
COMMITS
remove ProjectGUI . updateWindow(), that was very similar to redoLayoutFrame
- watch preference file modifications
N3Source.parseResult(): parseResult (file:/home/jmv/.eulergui/preferences.n3) was null ==> re-parse (and possibly re-read N3 source) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: [Fatal Error] :1:55: White spaces are required between publicId and systemId. 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.RuntimeException: N3SourceFromXML_Gloze.extractXMLNamespaces(): 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Could not load from URL http://eulergui.sourceforge.net/examples# 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: reason: White spaces are required between publicId and systemId. 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: cause: null 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.inputs.dispatcher.FormatRecognizer.<init>(FormatRecognizer.java:36) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.SourceFactory.addSource(SourceFactory.java:103) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.tools.AddReferredOntologies.actionPerformed(AddReferredOntologies.java:52) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.JToggleButton$ToggleButtonModel.setPressed(JToggleButton.java:291) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton.doClick(AbstractButton.java:357) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.plaf.basic.BasicMenuItemUI.doClick(BasicMenuItemUI.java:809) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.plaf.basic.BasicMenuItemUI$Handler.mouseReleased(BasicMenuItemUI.java:850) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Component.processMouseEvent(Component.java:6289) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Component.processEvent(Component.java:6054) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Container.processEvent(Container.java:2041) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Component.dispatchEventImpl(Component.java:4652) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Container.dispatchEventImpl(Container.java:2099) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Component.dispatchEvent(Component.java:4482) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4577) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Container.dispatchEventImpl(Container.java:2085) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Window.dispatchEventImpl(Window.java:2478) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Component.dispatchEvent(Component.java:4482) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:644) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue.access$000(EventQueue.java:85) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue$1.run(EventQueue.java:603) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue$1.run(EventQueue.java:601) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessController.doPrivileged(Native Method) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:98) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue$2.run(EventQueue.java:617) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue$2.run(EventQueue.java:615) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessController.doPrivileged(Native Method) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue.dispatchEvent(EventQueue.java:614) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Caused by: org.xml.sax.SAXParseException: White spaces are required between publicId and systemId. 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.inputs.dispatcher.FormatRecognizer.<init>(FormatRecognizer.java:22) 15:03:31 [AWT-EventQueue-0] [error] AWT-EventQueue-0: ... 41 more
INTERNAL ERROR when initializing internal rule engine Erreur pendant re-parsing N3 source eulergui.project.N3Source.manageParseN3(N3Source.java:377) eulergui.project.N3Source.update(N3Source.java:350) eulergui.project.N3Source.parseResult(N3Source.java:390) eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:240) eulergui.inference.drools.impl.N3DroolsEngineFacade.translate(N3DroolsEngineFacade.java:90) eulergui.project.Project.doTranslateN32Drools(Project.java:905) eulergui.project.Project.translateN32Drools(Project.java:859) eulergui.project.Project.prepareDrools(Project.java:837) eulergui.gui.controller.ApplicationKB.<init>(ApplicationKB.java:98) eulergui.gui.controller.ApplicationKB.instance(ApplicationKB.java:76) Cause: file:/home/jmv/src/eulergui_new/target/classes-eclipse/eulergui/gui/controller/application-rules.n3 n3_project.exceptions.parser.ParsingException: parse succeed reduce error: bad data class class net.sf.parser4j.parser.entity.parsenode.data.NullParseNodeData no prefix for "javap:" bad data class class net.sf.parser4j.parser.entity.parsenode.data.NullParseNodeData no prefix for "javap:"
Looking for IRC channels:
specification, formal, intelligence, model, domain, generation, semantic .
Working on presentation "connaissances_DL_CNL_règles" in french .
Good evening
I'm looking for testers for EulerGUI 1.9 beta: Semantic Web / N3 GUI and framework, rules engines, mixing business rules and Java
join us at #eulergui .
Features (Fact Sheet) : http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#Features
Tests run: 169, Failures: 0, Errors: 0, Skipped: 0 INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 16 minutes 20 seconds [INFO] Finished at: Fri May 27 15:52:54 CEST 2011
Debugging Tests with Maven
http://maven.apache.org/plugins/maven-surefire-plugin/examples/debugging.html
TODO : implement uncompress with HTTP URL's returning e.g. :
Content-Type: application/x-bzip2
every n : concrete v : contains a n : cement
and v : contains a n : granulate .
Paraphrase:
If there is a n : concrete X1
then the n : concrete X1 v : contains a n : cement
and the n : concrete X1 v : contains a n : granulate .
Possible Utilisations :
Remarks:
Material<>---Component{int percentage}
Dialog on SWIG IRC
Hi any recommendation for a vocabulary about materials, e.g. "cement and granulate are Materials which are components of the concrete Material; the notion of component includes a percentage"
SUMO seems to have these concepts
<zazi> jmvanel_, I dunno a good vocabulary on that, however a funny jingle on cement in German ;) http://download.fritz.de/jingles/Fritz_Entschuldigung_Zement.MP3
<jmvanel_> :)
<jmvanel_> SUMO in OWL in 36 Mb ! :( attempt to load it in Protégé from HTTP fails ! But wget got it , and from that local file Protégé said "OutOfMemoryError: Java heap space"
<jmvanel_> not asking for help on that ...
<jmvanel_> but what is needed is a small vocab ...
<zazi> btw, what about dbpedia?
<jmvanel_> good idea
http://downloads.dbpedia.org/3.6/dbpedia_3.6.owl.bz2
<jmvanel_> zazi, FYI, I could this time load dbpedia ontology in Protégé :) , but not directly the bz2 URL ) ; however dbpedia is strong in science and technics :(
http://bellard.org/jslinux/
TODO COMMIT
- Added toString() in FormulaMutableImpl.java
DISPLAY=localhost:0.0 gvim -c 'a|bisous !!!!!!!!!!!!!!!!!.' E233: ouverture du display impossible
This was a problem that was here for more than a year. One of the dependency jars, jEdit, that was prepared for this project on our Maven depot, had all classes duplicated in a wrong directory classes/ in the jar. This was badly interaracting with recent changes in Maven. As a consequence, the jEdit editor windows were not working.
This is now fixed, and if you build from sources, these command should get you going :
rm $HOME/.m2/repository/org/jedit/jedit/4.3.1/jedit-4.3.1.jar mvn clean rm -r $HOME/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/ mvn -Dmaven.test.skip=true install |
Asked on Maven IRC
I have a class C1 (jEdit) that is in src/main/java , and also in one (direct) dependency ; this used to work for a long time , and since a few days the C1 from the dependency seems to be chosen by the Maven build , plugin maven-assembly-plugin with predefined descriptor jar-with-dependencies .
What happens is that it copies all classes from dependencies, and when C1 comes from source, it says "C1.class already added, skipping".
What puzzles me is that I can't go back to a version that works.
Note that Surefire (and eclipse) work fine about this.
it's not normal that the classes made with maven-assembly-plugin with predefined descriptor jar-with-dependencies differ from those executed by surefire.
I noticed something strange : inside the generated jar-with-dependencies.jar for the problematic dependency, classes are duplicated : once normally, and once in a classes/ directory . And this happens only for this dependency .
OK, I removed the useless classes/ directory in the dependency jar , plus also the manifest , and it works now !
<jmvanel> my guess is that Maven assembly tries to be too smart , and takes classes that are not at the root of the dependency jars ;
<jmvanel> and this behavior is recent .
I got the same problem again on the laptop, even after republishing the jar that was bad on our repository. After running mvn install one time unsuccessfuly, I removed the generated eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar from the local repo, but not the source jar .
The whole issue may be related to an artifact without source jar .
need visualizers for RDF graphs: as table, as graph.
could just generate an HTML table from an N3 template with eu:format .
% 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.NoSuchFieldError: view 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.TextEditor.displayEditor(TextEditor.java:289) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.EditorManagement.openJavaEditor(EditorManagement.java:133) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.EditorManagement.doOpenEditor(EditorManagement.java:103) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.EditorManagement.reallyDoOpenEditor(EditorManagement.java:71) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.EditorManagement$1.actionPerformed(EditorManagement.java:41)2011-05-24 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Component.processMouseEvent(Component.java:6289) 14:59:41 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.JComponent.processMouseEvent(JComponent.java:3267)
http://sourceforge.net/projects/eulergui/files/ : 1919 downloads today !!!
COMMIT
After recent class moves refactoring , test suite was broken due to hard coded packge path in Drools N3 engine.
any way to move *several* methods together from one class C1 to class C2 of one field of C1 ?
( works with one method at a time )
Is there a plugin that tells which methods can become private or package visible ?
According to stackoverflow.com , findbugs seems the best before PMD and Checkstyle ; so I ran :
mvn findbugs:gui
http://findbugs.sourceforge.net/contributing.html
The machine is running Windows 7, with latest JDK 25 .
I installed: JDK, Maven 3.0.3, Subversion, Cygwin (facultative).
Then I ran this with the Cygwin shell:
svn co https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui eulergui export PATH=~/apps/apache-maven-3.0.3/bin:$PATH export JAVA_HOME="C:/Program Files/Java/jdk1.6.0_25" export M2_HOME=C:/cygwin/home/Daphné/apps/apache-maven-3.0.3 cd eulergui mvn install |
According to http://maven.apache.org/scm/subversion.html , it is necessary to create this file :
$user.home/.scm/svn-settings.xml
with (at least) this content:
<svn-settings> <configDirectory>C:\Users\Daphné\AppData\Roaming\Subversion</configDirectory> </svn-settings> |
I installed Subversion from subversion.tigris.org , hence the above configDirectory.
If you don't create this file, you can run svn commands directly from the cmd or Cygwin shell , but with Maven you get this ugly and hard to trace in internet message:
svn: Can't determine the user's config path |
The first results are not wonderful :
Tests run: 164, Failures: 11, Errors: 7, Skipped: 0 |
TestDroolsQuery testSearchFromProject + [ Detail ]0 result.size() expected:<1> but was:<0> ----- TestN3JavaMapping testUpdateJavaFromN3 + [ Detail ]0 a rule activation directly affects a Java object expected:<1> but was:<0> ---------- TestEulerGUIOutputs testXMLOutputFromRDF + [ Detail ]0 kml.xml translated to RDF and back should be identical, testXMLOutputFromN3 + [ Detail ]0 kml.xml translated to RDF and back should be identical, -------- TestFacebookSearch testLocalFacebookSearch + [ Detail ]0 Wait for "Action NAME Component Chooser "./facebook-search.n3" " subcomponent to be displayed ---------- TestGenericGuiGeneration testOWLReasoner + [ Detail ]0 Frame with title "Ontology Hierarchy" ----- TestGenericGuiGenerationInsertLogical test_person_import30 test_foaf_import20 test_cv2 + [ Detail ]0 Wait AbstractButton with text "Skill" loaded ---------------------- TestImportSwrl testLocalImportSwrlWithDrools + [ Detail ]0 Wait for "getText() Component Chooser ".as.rules.n3" " subcomponent to be displayed testRemoteImportSwrlWithDrools + [ Detail ]0 Wait for "getText() Component Chooser "<http://owldl.com/ontologies/dl-safe.owl#bc> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://owldl.com/ontologies/dl-safe.owl#BadChild>" " subcomponent to be displayed testLocalImportSwrlWithEuler + [ Detail ]0 Wait for "getText() Component Chooser ".as.rules.n3" " subcomponent to be displayed ------------ |
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" \ -cp $HOME/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar \ deductions.runtime.BasicRuntimeShell
The JLine example does not work correctly in the eclipse console. So I need to run with remote debugger:
java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" \ -classpath /home/jmv/.m2/repository/jline/jline/1.0/jline-1.0.jar:target/test-classes \ jline.example.Example simple
http://lea-linux.org/documentations/index.php/Hardware-hard_plus-smart#Soyez_Smart_.21
sudo smartctl --all /dev/sda1 sudo smartctl --smart=on --offlineauto=on --saveauto=on /dev/sda1 sudo smartctl -l selftest /dev/sda1 sudo smartctl -A /dev/sda1 sudo smartctl -t short /dev/sda1 sudo smartctl -l selftest /dev/sda1 sudo smartctl -A /dev/sda1
COMMIT
Add Jline library in N3 shell for completion, history, like a real shell
- new class BasicRuntimeShell tested in KDE console: foaf: is completed :)
net.sf.joafip.service.FilePersistenceException: net.sf.joafip.store.service.StoreException: creation failed at net.sf.joafip.service.FilePersistence.<init>(FilePersistence.java:284) at net.sf.joafip.service.TestFilePersistenceSetupByProperties.setUp(TestFilePersistenceSetupByProperties.java:65) at junit.framework.TestCase.runBare(TestCase.java:128) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:120) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at junit.framework.TestSuite.runTest(TestSuite.java:230) at junit.framework.TestSuite.run(TestSuite.java:225) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: net.sf.joafip.store.service.StoreException: creation failed at net.sf.joafip.store.service.AbstractStoreDelegatingToDataManager.<init>(AbstractStoreDelegatingToDataManager.java:135) at net.sf.joafip.store.service.AbstractDelegatingToStoreManagers.<init>(AbstractDelegatingToStoreManagers.java:196) at net.sf.joafip.store.service.Store.<init>(Store.java:203) at net.sf.joafip.service.FilePersistence.<init>(FilePersistence.java:279) ... 18 more Caused by: net.sf.joafip.heapfile.service.HeapException: no files in stable state, file store.data exist=true, file store.bak exist=false at net.sf.joafip.heapfile.record.service.HeapElementManager.inconsistencyCheck(HeapElementManager.java:443) at net.sf.joafip.heapfile.record.service.HeapElementManager.wasBadFileStableState(HeapElementManager.java:404) at net.sf.joafip.heapfile.service.HeapFileDataManager.<init>(HeapFileDataManager.java:193) at net.sf.joafip.store.service.AbstractStoreDelegatingToDataManager.<init>(AbstractStoreDelegatingToDataManager.java:132) ... 21 more
The last thing in kern.log before a reboot :
May 17 09:35:32 jmv-desktop kernel: [130719.686882] eclipse[23001] trap divide error ip:7fda7812f788 sp:7fff3d013c10 error:0 in libgtk-x11-2.0.so.0.2400.4[7fda78004000+436000]
The last thing in syslog before a reboot :
May 17 09:39:01 jmv-desktop CRON[1160]: (root) CMD ( [ -x /usr/lib/php5/maxlifetime ] && [ -d /var/lib/php5 ] && find /var/lib/php5/ -depth -mindepth 1 -maxdepth 1 -type f -cmin +$(/usr/lib/php5/maxlifetime) -delete)
Downloaded and tested JLine: a good library for managing user keyboard input, with completion.
cd ~/src/jline-1.0/src/ mvn install java -classpath /home/jmv/.m2/repository/jline/jline/1.0/jline-1.0.jar:target/test-classes jline.example.Example files
Now the question is to find a console GUI component in Java. I think I need just to receive the KeyEvent's .
http://www.faqs.org/docs/javap/c6/s5.html
http://www.faqs.org/docs/javap/index.html
for f in src-*test/**/*.java do sed -e 's/TestConstant.RUNTIME_DIR/TestConstant.getRuntimeDir()/' $f > $f.tmp mv $f.tmp $f echo $f Done done |
cd rifle hg pull hg up cd trunk cd apps cd rifle-ast mvn package cd .. cd rifle-psparser mvn package cd .. cd rifle-prd-xml-bind rm /home/jmv/.m2/repository/net/sourceforge/rifle/rifle-prd-xml-bind/1.0/* mvn package cd rifle-prd-xml ; mvn package cd ../rifle-dtb ; mvn package cd ../rifle-jsr94 ; mvn package [INFO] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 5.102s [INFO] Finished at: Mon May 16 14:24:53 CEST 2011 [INFO] Final Memory: 3M/116M [INFO] ------------------------------------------------------------------------ [ERROR] Failed to execute goal on project rifle-jsr94: Could not resolve dependencies for project org.fundacionctic:rifle-jsr94:jar:0.1-SNAPSHOT: Failed to collect dependencies for [org.fundacionctic:rifle-validator:jar:0.1-SNAPSHOT (compile), log4j:log4j:jar:1.2.14 (compile), commons-logging:commons-logging:jar:1.1.1 (compile), slf4j-log4j12:slf4j-log4j12:jar:1.5.6 (compile), slf4j-api:slf4j-api:jar:1.5.6 (compile), junit:junit:jar:4.1 (compile), xalan:xalan:jar:2.7.0 (compile), xerces:xercesImpl:jar:2.7.1 (compile), jsr94:jsr94:jar:1.1 (compile)]: Failed to read artifact descriptor for org.fundacionctic:rifle-validator:jar:0.1-SNAPSHOT: Could not transfer artifact org.fundacionctic:rifle-validator:pom:0.1-SNAPSHOT from/to java.net (https://maven-repository.dev.java.net/nonav/repository): No connector available to access repository java.net (https://maven-repository.dev.java.net/nonav/repository) of type legacy using the available factories WagonRepositoryConnectorFactory -> [Help 1] cd ../rifle-dtb-rest ; ant BUILD FAILED /home/jmv/src/rifle/trunk/apps/rifle-dtb-rest/nbproject/build-impl.xml:348: The libs.CopyLibs.classpath property is not set up. This property must point to org-netbeans-modules-java-j2seproject-copylibstask.jar file which is part of NetBeans IDE installation and is usually located at <netbeans_installation>/java<version>/ant/extra folder. Either open the project in the IDE and make sure CopyLibs library exists or setup the property manually. For example like this: ant -Dlibs.CopyLibs.classpath=a/path/to/org-netbeans-modules-java-j2seproject-copylibstask.jar
- clean TestEulerGUITooltip
- BasicRuntime: now listener does not Use a New Thread
- SwingHelper.disposeWindows() : revert to SwingUtilities.invokeLater() : more riskky !!! but possibly quicker test suite
- DroolsInferenceEngine . launch() : remove call to waitUpdateThreads() : more riskky !!! but possibly quicker test suite
- N3Source.manageParseN3 () : add : synchronized (parseResult)
- N3SourcetoDrools . launchDroolsKeepWM() : synchronized (ruleBase)
- N3toDroolsUpdater . launchDrools* : comment ou call to waitUpdateThreads() : more riskky !!! but possibly quicker test suite
Tests run: 156, Failures: 0, Errors: 0, Skipped: 0
[INFO] [surefire-report:report {execution: default-cli}]
[WARNING] Unable to locate Test Source XRef to link to - DISABLED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16 minutes 54 seconds
|
http://en.wikipedia.org/wiki/List_of_emoticons
do you know this? http://www.kanzaki.com/docs/sw/img-annotator.html
<rszeno> there is a perlscript to get feed from youtube but i didn't had time to make clear how i can use it, :)
http://www.kanzaki.com/works/2003/imagedesc/030824_0958e.rdf looks nice !
the result of the img-annotator
<rszeno> yes, need a jquery plugin, :)
data flow in EulerGUI
N3 remote ==> N3 local ==> parse tree ==> facts, project rule base
<bregma> jmv__, I think we'll need an input capture to analyze the userspace side of your problem
<bregma> see https://wiki.edubuntu.org/DebuggingTouchpadDetection/evtest
<bregma> (it's from edubuntu but it is universally applicable)
<bregma> attach the log to a bug so developers can rerun the same input through the software stack for performance analysis
Last messages:
in syslog:
May 15 09:46:32 jmv-desktop gdm-simple-greeter[26385]: Gtk-WARNING: /build/buildd/gtk+2.0-2.24.4/gtk/gtkwidget.c:5687: widget not within a GtkWindow May 15 09:46:33 jmv-desktop gdm-simple-greeter[26385]: WARNING: Unable to load CK history: no seat-id found
in kern.log :
May 15 09:46:07 jmv-desktop kernel: [233710.098684] show_signal_msg: 36 callbacks suppressed
May 15 09:46:07 jmv-desktop kernel: [233710.098695] npviewer.bin[31353]: segfault at ed22bae8 ip 00000000f701fbc8 sp 00000000ea6d004c error 6 in libpthread-2.13.so[f7015000+15000]
Here someone met the same problem :
http://ubuntuforums.org/showthread.php?t=647961
http://www.adobe.com/devnet/flashplayer.html proposes 10.3.181.14 (Windows, Mac, Linux, Solaris) , but Ubuntu is still at 10.2.159.1ubuntu1 !?!
COMMIT
- ProjectFileManagement : when adding URIModificationChecker , the project waits Update Threads
- TestJemmy : when searching generatedFrame, sysematically exclude "EulerGUI Message" windows
Mysteriously in TestGenericGuiGenerationInsertLogicalRefactorRules . test_person_import3 (), the initial thread runs badly, as if the download was not finished before parsing :
TemporaryFrame.TemporaryFrame(): update N3; PARSE ERROR in http://deductions.svn.sourceforge.net/svnroot/deductions/n3_nojs/person-app-spec.n3 ( /home/jmv/.eulergui/n3_cache/person-app-spec.n35514610858284335823.n3 ) Error during re-parsing N3 source eulergui.project.N3Source.manageParseN3(N3Source.java:370) eulergui.project.N3Source.update(N3Source.java:348) eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:96) eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:38) Cause: http://deductions.svn.sourceforge.net/svnroot/deductions/n3_nojs/person-app-spec.n3 n3_project.exceptions.parser.ParsingException: Last character read : " " on line 1 Expecting one of these : eulergui.drools_engine.ParserLink.parse(ParserLink.java:117) eulergui.project.N3Source.doParseN3(N3Source.java:399) eulergui.project.N3Source.manageParseN3(N3Source.java:367) eulergui.project.N3Source.update(N3Source.java:348) eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:96) eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:38) ERROR |
N3Source.parseResult(): parseResult (person-events.n3) was null ==> re-parse (and possibly re-read N3 source) N3SourcetoDrools.translate(): java.lang.NullPointerException N3Source.parseResult(): parseResult (person-app-spec.n3) was null ==> re-parse (and possibly re-read N3 source) N3SourcetoDrools.translate(): java.lang.NullPointerException N3Source.parseResult(): parseResult (gui_generic.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (java_event-rules.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (generic_gui_projection-rules.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (software_applications.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (rpo-rules-small.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (java_library-rules.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (form-rules.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (generic_to_java-rules.n3) was null ==> re-parse (and possibly re-read N3 source) N3JavaMappingBuiltin.acceptConsequent(): Drools compile WARNING: javax.swing.border.LineBorder has no No Argument Constructor! Rule: ?W <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#javax-swing-border-LineBorder> in generic_to_java-rules.n3 ,5 N3Source.parseResult(): parseResult (java_library.n3) was null ==> re-parse (and possibly re-read N3 source) N3Source.parseResult(): parseResult (app_gui-rules2.n3) was null ==> re-parse (and possibly re-read N3 source)
<plants-q.n3> <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true . #U # Assign>> file:/home/jmv/src/eulergui_new/examples/plants.n3 ==> class N3Source : file:/home/jmv/src/eulergui_new/examples/plants.n3 <file:/home/jmv/src/eulergui_new/examples/newproject.n3p.n3> <http://eulergui.sf.net/ontology/project.owl.n3#hasN3Query> <plants-q.n3> . #U <file:/home/jmv/src/eulergui_new/./examples/newproject.n3p.n3> <http://eulergui.sf.net/ontology/project.owl.n3#imports> <http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml> . May 14, 2011 10:59:36 AM eulergui.drools_engine.DroolsHelper printWorkingMemory org.drools.runtime.rule.ConsequenceException: rule: project-java-rules.n3 4 at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927) at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856) at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751) at unif.TripleStoreDrools.fireAllRules(TripleStoreDrools.java:310) at eulergui.gui.controller.ApplicationKB.fireAllRules(ApplicationKB.java:197) at eulergui.gui.controller.ApplicationKB.loadN3Project(ApplicationKB.java:432) at eulergui.project.ProjectFactory.restoreN3P(ProjectFactory.java:271)
Hi
I have an HP ProBook 4310s ; I follow the latest updates of Ubuntu 11.04, and since about 1 week there is a transient problem with the touchpad : after a few minutes it becomes very slow to react ; that is the pointer lags the motion on the touchpad.
And it's the same with an USB mouse.
Of course memory and disk have been checked.
When I work through an ssh console , it's fine.
I suspect a recent update ...
I'm using the gnome interface, but I think it's the same with Unity.
<jmv__> my vendor specializing in Ubuntu said I have better installing preceding Ubuntu release ...
<jmv__> I think I can try to solve this with community ...
<bregma> jmv__, it sounds like a problem in the kernel causing input event backlogs
xserver-xorg-input-synaptics
Synaptics TouchPad driver for X.Org server
Java: Regular expression summary
http://www.leepoint.net/notes-java/data/strings/40regular_expressions/25sum-regex.html
New mother board, AMD Phenom CPU and 8 Gb !!!!!!!!!!!!!!
Regular expresion Maven tests console:
Running |Failures:
COMMIT
- clean TestJemmy, TestImportSwrl, RETETest
- URIModificationChecker . requestStop() : add call to thread.join();
- SwingHelper . disposeWindows() : call SwingUtilities.invokeAndWait() instead of invokeLater()
- ProjectFileManagement : change thread name
After waiting URI refresing thread's stop :
Tests run: 166, Failures: 0, Errors: 0, Skipped: 0
[INFO] [surefire-report:report {execution: default-cli}]
[WARNING] Unable to locate Test Source XRef to link to - DISABLED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16 minutes 17 seconds
[INFO] Finished at: Fri May 13 14:43:05 CEST 2011
|
Tests run: 150, Failures: 0, Errors: 0, Skipped: 0 [INFO] [surefire-report:report {execution: default-cli}] [WARNING] Unable to locate Test Source XRef to link to - DISABLED [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 12 minutes 8 seconds [INFO] Finished at: Fri May 13 12:27:41 CEST 2011 |
Tests run: 153, Failures: 0, Errors: 1, Skipped: 0 [ERROR] There are test failures. Please refer to /home/jmv/src/eulergui_new/target/surefire-reports for the individual test results. [INFO] [surefire-report:report {execution: default-cli}] [WARNING] Unable to locate Test Source XRef to link to - DISABLED [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 17 minutes 6 seconds testLocalFacebookSearch - [ Detail ]0.015 Wait for "Action NAME Component Chooser "./facebook-search.n3" " subcomponent to be displayed org.netbeans.jemmy.TimeoutExpiredException: Wait for "Action NAME Component Chooser "./facebook-search.n3"" subcomponent to be displayedat org.netbeans.jemmy.Waiter.waitAction(Waiter.java:147)at org.netbeans.jemmy.operators.ContainerOperator.waitSubComponent(ContainerOperator.java:298)at org.netbeans.jemmy.operators.JButtonOperator.<init>(JButtonOperator.java:74)at org.netbeans.jemmy.operators.JButtonOperator.<init>(JButtonOperator.java:86)at eulergui.gui.TestFacebookSearch.checkSearchResultsBeforeAndAfterDrools(TestFacebookSearch.java:38)at eulergui.gui.TestFacebookSearch.testLocalFacebookSearch(TestFacebookSearch.java:28) |
TODO
With new translations of OWL subclass assertions to N3 rules as a pre-processing step, the Swing rule base should be changed, because some form fields are duplicated.
COMMIT
- refactor in TestJemmy the way to get the EuleGUI Frame : should fix the last Error in test suite in TestFacebookSearch
- Fix bad URI in testFieldOldArchitecture
TODO : test suite lasts now 17 minutes , N3 parsing or conversions probably occur 2 times
- Fix test suite, broken by new " has changed on " messages due to new translations of OWL subclass assertions to N3 rules
- call waitUpdateThreads in DroolsInferenceEngine (maybe not necessary, but more safe)
java.net.MalformedURLException: no protocol: anotherURI at java.net.URL.<init>(URL.java:567) at java.net.URL.<init>(URL.java:464) at java.net.URL.<init>(URL.java:413) at n3_project.helpers.N3toDroolsUpdater.getTimeStamp(N3toDroolsUpdater.java:123) at n3_project.helpers.N3toDroolsUpdater.getTimeStamp(N3toDroolsUpdater.java:113) at n3_project.helpers.N3toDroolsUpdater.outdated(N3toDroolsUpdater.java:138) at n3_project.helpers.N3toDroolsUpdater.uptodate(N3toDroolsUpdater.java:147) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:78) at eulergui.project.Project.doTranslateN32Drools(Project.java:898) at eulergui.project.Project.translateN32Drools(Project.java:869) at eulergui.project.Project.prepareDrools(Project.java:830) at eulergui.project.Project.doRunDrools(Project.java:784) at eulergui.project.Project.runDroolsTriples(Project.java:739) at eulergui.project.Project.runDroolsTriples(Project.java:749) at eulergui.project.Project.runDroolsTriples(Project.java:760) at deductions.runtime.TestRulesForUserEvents.testFieldOldArchitecture(TestRulesForUserEvents.java:83) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at junit.framework.TestCase.runTest(TestCase.java:168) at junit.framework.TestCase.runBare(TestCase.java:134) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:124) at junit.framework.TestSuite.runTest(TestSuite.java:243) at junit.framework.TestSuite.run(TestSuite.java:238) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:24) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at org.junit.runner.JUnitCore.run(JUnitCore.java:136) at org.junit.runner.JUnitCore.run(JUnitCore.java:127) at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:51) at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:110) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) at $Proxy0.invoke(Unknown Source) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:74) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69)
Thread [doN3SourceAdded: person-app-spec.n3] (Suspended (exception NullPointerException)) ResultManagement.displayOriginalSourceWithErrors(N3Source, N3ParseResult) line: 245 N3ParsingExceptionProcessor.process(Throwable, ProjectGUI, TemporaryFrame) line: 36 N3ConversionRefesher.updateN3(N3Source) line: 121 UpdateN3Thread.run() line: 38
update N3; PARSE ERROR in http://deductions.svn.sourceforge.net/svnroot/deductions/n3_nojs/person-app-spec.n3 ( /home/jmv/.eulergui/n3_cache/person-app-spec.n35664059993073976050.n3 ) Erreur pendant re-parsing N3 source eulergui.project.N3Source.manageParseN3(N3Source.java:370) eulergui.project.N3Source.update(N3Source.java:348) eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:96) eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:38) Cause: http://deductions.svn.sourceforge.net/svnroot/deductions/n3_nojs/person-app-spec.n3 n3_project.exceptions.parser.ParsingException: Last character read : "@" on line 1 Expecting one of these : eulergui.drools_engine.ParserLink.parse(ParserLink.java:117) eulergui.project.N3Source.doParseN3(N3Source.java:399) eulergui.project.N3Source.manageParseN3(N3Source.java:367) eulergui.project.N3Source.update(N3Source.java:348) eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:96) eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:38)
Drools Error: [ERR 102] Line 71:0 mismatched input 'end' expecting 'then' in rule "koala.owl.as.rules.n3 2"
ErrorLines: - 71
Added this in launcher for Amaya :
bash -c 'UBUNTU_MENUPROXY= amaya &'
If you now open examples/koala.n3p with EG ( even version 1.8 ) , you see now a (partial ) translation of OWL into N3 rules , like :
{?VAR a ns2:Parent} => {?VAR a ns2:Animal}.
{?VAR a ns2:Person} => {?VAR a ns2:Animal}.
{?VAR a ns2:Animal} => true.
{?VAR a ns2:Quokka} => {?VAR a ns2:Marsupials}.
{?VAR a ns2:Quokka} => {?VAR ns2:isHardWorking true}.
{?VAR a ns2:Marsupials} => {?VAR a ns2:Animal}.
{?VAR a ns2:Forest} => {?VAR a ns2:Habitat}.
{?VAR a ns2:Koala} => {?VAR a ns2:Marsupials}.
{?VAR a ns2:Koala} => {?VAR ns2:isHardWorking false}.
{?VAR a ns2:Koala} => {?t0 a ns2:DryEucalyptForest. ?VAR ns2:hasHabitat ?t0}.
|
I just added an HTTP rule to a project that is run for each OWL/RDF sources :
deductions/n3_new/owl-subclass-assertions-to-rules.n3
The rule in red translates like this Drools , and this is not correct Drools:
rule "koala.owl.as.rules.n3 2" when $Triple_1 : Triple( $VAR : subject, predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>", object == "<http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#Animal>" ) end
gnome-session-save --kill
processor : 0 vendor_id : AuthenticAMD cpu family : 16 model : 2 model name : AMD Phenom(tm) 9850 Quad-Core Processor stepping : 3 cpu MHz : 1250.000 cache size : 512 KB
According to http://www.pantherproducts.co.uk/Articles/CPU/CPU%20Temperatures.shtml , it should be :
AMD Phenom X4 (9100, 9750, 9850) 61°C
and I have 98 °C , and had as much as 108 !!!!!!!!!!!
there are regressions :
Happens whn the URIModificationChecker thread starts too early , when the initial N3 processing still runs :
Thread [N3 sources modification Checker] (Suspended (exception NullPointerException)) N3SourcetoDrools.translate(N3Source, boolean, boolean, boolean) line: 232 N3toDroolsUpdater.translate(N3Source, boolean, boolean, boolean) line: 87 Project.translateToDrools(N3Source, boolean, boolean) line: 939 N3ConversionRefesher.updateKB(Project, N3Source) line: 142 N3ConversionRefesher.n3SourceChanged(Project, N3Source) line: 45 ProjectChangeSupport.fireN3SourceChanged(Project, N3Source) line: 140 Project.fireN3SourceChanged(N3Source) line: 1362 URIModificationChecker.checkN3Source(N3Source) line: 86 URIModificationChecker.run() line: 60 Thread.run() line: 662 |
TODO:
:BabyBoomer a owl:Class ; owl:equivalentClass [ a owl:Class ; owl:intersectionOf (:Person [ a owl:Restriction ; owl:onProperty :hasBirthday ; owl:someValuesFrom [ a rdfs:Datatype ; owl:onDatatype xsd:dateTime ; owl:withRestrictions ([ xsd:maxInclusive "1964-12-31T23:59:59"^^xsd:dateTime ] [ xsd:minInclusive "1946-01-01T00:00:00"^^xsd:dateTime ]) ] ]) ] .
From this I'd like to generate:
{ ?P :hasBirthday ?B . ?B string:notGreaterThan "1964-12-31T23:59:59"^^xsd:dateTime . "1946-01-01T00:00:00"^^xsd:dateTime string:notGreaterThan ?B . } => { ?B a :BabyBoomerEVENT. }. |
COMITTED in Déductions:
add owl-subclass-assertions-to-rules.n3 to swrl-n3-rules.n3p
TESTED wih examples/koala.n3p
Exception in the editor when the N3 is not parsed :
09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.NullPointerException 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.TextEditor$5.getToolTipText_KB(TextEditor.java:545) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.TextEditor$5.getToolTipText(TextEditor.java:530) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.gjt.sp.jedit.textarea.ExtensionManager.getToolTipText(ExtensionManager.java:135) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.gjt.sp.jedit.textarea.TextAreaPainter.getToolTipText(TextAreaPainter.java:663) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:662) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.Timer.fireActionPerformed(Timer.java:291) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.Timer$DoPostEvent.run(Timer.java:221) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:209) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:642) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue.access$000(EventQueue.java:85) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue$1.run(EventQueue.java:603) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue$1.run(EventQueue.java:601) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessController.doPrivileged(Native Method) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventQueue.dispatchEvent(EventQueue.java:612) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 09:31:26 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) |
It is possible to use string comparisons defined in CWM Builtins to also compare dates expressed in ISO (and XML Schema datatype) format.
They compare according to Unicode(tm) code order.
log:equalTo
string:equalIgnoringCase
string:greaterThan
string:lessThan
string:notEqualIgnoringCase
string:notGreaterThan
string:notLessThan
Here is a minimal example showing how to define that an event belongs to an interval . It supposes a minimal ontology with 3 properties hasStart , hasEnd, hasTime, and belongsTo :
{ ?INTERVAL :hasStart ?S ; :hasEnd ?E . ?EVENT :hasTime ?T . ?T string:notGreaterThan ?E . ?S string:notGreaterThan ?T . } => { ?EVENT :belongsTo ?INTERVAL. }.
Of source it is possible to modify this to support the owl-time ontology.
xsd:dataTime^^""
@prefix : <http://www.w3.org/TR/owl-time/> . :telecon a :Interval ; :hasBeginning :teleconStart . :meeting a :Interval ; :hasBeginning :meetingStart ; :hasDurationDescription :meetingDuration . :teleconStart a :Instant ; :inXSDDateTime 2006-11-05T18:00:00-5:00 . :meetingStart a :Instant ; :inXSDDateTime 2006-11-05T14:00:00-8:00 . :meetingDuration a :DurationDescription ; :minutes 45 .
Tests run: 150, Failures: 0, Errors: 0, Skipped: 0
SNAPSHOT UPLOADED
COMMITS
- added deleteCache in TestGenericGuiGeneration, TestGenericGuiGenerationInsertLogical ;
it is necessary to delete the cache because same projects are compiled twice with and without useInsertLogical
- more thread safe fixes in N3SourcetoDrools : factPerN3Source, rulePackageNumber
DONE : still tailure in TestEulerGUITooltip ( probably the N3 parsing is not yet done when the test checks tooltips )
- N3SourcetoDrools: remove current_document , that is not thread safe
- N3SourcetoDrools: synchronize ruleBase; tripleResult : no need because no used in parallel N3 source processing
- N3SourcetoDrools: firstRule is moved to DroolsTripleHandler
- N3toDroolsUpdater: compilationTimestamps, threads are now concurrent collections
- Project : sourcess , searches are now concurrent collections
TODO: factPerN3Source, n3DocumentCount, current_document, globalRuleCount, droolsElapsedTime
- unactivate test_uml2() in TestGenericGuiGeneration (not clear why this stopped working ; was OK at revision 2394 )
- reactivated test_uml2() , test_foaf_import2(), in TestGenericGuiGenerationInsertLogical
-r 2407 # crash !!!!!!!
-r 2405 # crash !!!!!!!
svn update -r 2403 # crash !!!!!!!
svn update -r 2401 # crash !!!!!!!
svn update -r 2394 OK
I read an interesting discussion on "create HTML based on RDF?" on the public-lod mailing list.
Suppose an ontology like this:
|
N3 rules are well suited to express commercial or regulation rules, like determining a category, or estimating prices. However, It would not be convenient for complex mathematical computations, for example to express in N3 the computation of the surface of a room.
So these computations would be written in a imperative language, Java for instance. Then there are two implementation questions:
For point 1, we currently have nothing smart implemented, just access to the interface ITripleStoreRETE extending ITripleStore. But there are hints that need to be generalised, see Calling user Java code , Extension points with interfaces . Also there several projects for RDF to Java mapping frameworks, see Experience using Java-based frameworks for RDF-to-POJO (and vice versa) mapping, rdf2java, Tripresso .
For point 2, here is the recommended idiom:
# First, assign a Java class to an RDF resource: { ?CC a re:ClosedCurve. } => { ?CC a java:geometry-ClosedCurve . }. # Then, the computation is triggered, and the result goes into the RDF KB: { ?CC a re:ClosedCurve. # facultative ?CC javam:getSurface ?SURFACE. } => { ?CC re:hasSurface ?SURFACE. }. |
http://www.dcc.fc.up.pt/~vsc/Yap/documentation.html#index-format_002f2
update N3; PARSE ERROR in file:/home/jmv/src/deductions/n3_nojs/form-rules.n3 ( /home/jmv/src/deductions/n3_nojs/form-rules.n3 ) Erreur pendant re-parsing N3 source eulergui.project.N3Source.manageParseN3(N3Source.java:368) eulergui.project.N3Source.update(N3Source.java:348) eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:96) eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:38) Cause
COMMIT
IOManager.downloadURLToLocalCache() : rethrow exception instead of return value
COMMIT
URICacheOSCache : if object == null , nothing to cache
Test run with full or empty cache
Tests run: 152, Failures: 0, Errors: 0, Skipped: 0
May 7, 2011 7:37:18 PM eulergui.drools_engine.DroolsHelper printWorkingMemory org.drools.runtime.rule.ConsequenceException: rule: project-java-rules.n3 4 at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:927) at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:856) at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1071) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:785) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:751) at unif.TripleStoreDrools.fireAllRules(TripleStoreDrools.java:310) at eulergui.gui.controller.ApplicationKB.fireAllRules(ApplicationKB.java:197) at eulergui.gui.controller.ApplicationKB.loadN3Project(ApplicationKB.java:432) at eulergui.project.ProjectFactory.restoreN3P(ProjectFactory.java:273) at eulergui.project.ProjectFactory.restoreAny(ProjectFactory.java:374) at eulergui.project.PostprojectHelper.projectLoaded(PostprojectHelper.java:36) at eulergui.gui.controller.N3ConversionRefesher.projectLoaded(N3ConversionRefesher.java:160) at eulergui.project.ProjectChangeSupport.fireProjectLoaded(ProjectChangeSupport.java:96) at eulergui.project.Project.rethrowEventsPlease(Project.java:1350) at n3_project.ProjectGUI.newWindow(ProjectGUI.java:222) at n3_project.ProjectGUI.main(ProjectGUI.java:181) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.netbeans.jemmy.ClassReference.invokeMethod(ClassReference.java:137) at org.netbeans.jemmy.ClassReference.startApplication(ClassReference.java:101) at eulergui.gui.TestJemmy.launchEulerGUIWithArgument(TestJemmy.java:222) at eulergui.gui.TestN3FormatForProject.test_person_import3(TestN3FormatForProject.java:25) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at junit.framework.TestCase.runTest(TestCase.java:168) at junit.framework.TestCase.runBare(TestCase.java:134) at junit.framework.TestResult$1.protect(TestResult.java:110) at junit.framework.TestResult.runProtected(TestResult.java:128) at junit.framework.TestResult.run(TestResult.java:113) at junit.framework.TestCase.run(TestCase.java:124) at junit.framework.TestSuite.runTest(TestSuite.java:243) at junit.framework.TestSuite.run(TestSuite.java:238) at org.junit.internal.runners.JUnit38ClassRunner.run(JUnit38ClassRunner.java:83) at org.junit.runners.Suite.runChild(Suite.java:128) at org.junit.runners.Suite.runChild(Suite.java:24) at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193) at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52) at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191) at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42) at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184) at org.junit.runners.ParentRunner.run(ParentRunner.java:236) at org.junit.runner.JUnitCore.run(JUnitCore.java:157) at org.junit.runner.JUnitCore.run(JUnitCore.java:136) at org.junit.runner.JUnitCore.run(JUnitCore.java:127) at org.apache.maven.surefire.junitcore.JUnitCoreWrapper.execute(JUnitCoreWrapper.java:51) at org.apache.maven.surefire.junitcore.JUnitCoreProvider.invoke(JUnitCoreProvider.java:110) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.apache.maven.surefire.booter.ProviderFactory$ClassLoaderProxy.invoke(ProviderFactory.java:103) at $Proxy0.invoke(Unknown Source) at org.apache.maven.surefire.booter.SurefireStarter.invokeProvider(SurefireStarter.java:150) at org.apache.maven.surefire.booter.SurefireStarter.runSuitesInProcess(SurefireStarter.java:74) at org.apache.maven.surefire.booter.ForkedBooter.main(ForkedBooter.java:69) Caused by: java.lang.NullPointerException at org.drools.common.EqualityAssertMapComparator.hashCodeOf(EqualityAssertMapComparator.java:48) at org.drools.core.util.ObjectHashMap.get(ObjectHashMap.java:100) at org.drools.common.SingleThreadedObjectStore.getHandleForObject(SingleThreadedObjectStore.java:122) at org.drools.common.AbstractWorkingMemory.getFactHandle(AbstractWorkingMemory.java:861) at n3_project.helpers0.Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.evaluate(Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.java:33) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:917) ... 58 more May 7, 2011 7:37:18 PM eulergui.project.ProjectFactory restoreN3P May 7, 2011 7:37:18 PM eulergui.project.ProjectChangeSupport addProjectListener
mvn surefire-report:report-only |
text/turtle and text/n3 are both now IANA registered media types:
http://www.iana.org/assignments/media-types/text/turtle
http://www.iana.org/assignments/media-types/text/n3
Very good news !
This should not appear only , N3 files also :
manageN3Cache() ./employee.uml
Still problems with the test suite, but SNAPSHOT uploaded : Révision : 2430
remove unused class ProjectsIndexer
( pour faire plaisir à Luc )
COMMIT
solved 2 big multi-thread problems: isQuery and noCompilation were fields in N3SourceToDrools, modified concurrently
TODO still one multi-thread problem
java.util.ConcurrentModificationException
at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
at java.util.AbstractList$Itr.next(AbstractList.java:343)
at n3_project.helpers.N3SourcetoDrools.copyN3factsToDrools(N3SourcetoDrools.java:581)
at n3_project.helpers.N3toDroolsUpdater.copyN3factsToDrools(N3toDroolsUpdater.java:197)
at eulergui.project.Project.translateToDrools(Project.java:1005)
at eulergui.gui.controller.N3ConversionRefesher.updateKB(N3ConversionRefesher.java:137)
at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:39)
FIX infinite loop : opening locally deductions/n3_nojs/foaf_import2.n3p ; open one N3 source, put mouse other the editor
- cause : ParsingException constructor was calling indirectly ParserLink.parse()
at eulergui.project.N3Source.parseResult(N3Source.java:380) at n3_project.exceptions.parser.ParsingException.<init>(ParsingException.java:33) at eulergui.drools_engine.ParserLink.parse(ParserLink.java:118) at eulergui.project.N3Source.doParseN3(N3Source.java:394) at eulergui.project.N3Source.manageParseN3(N3Source.java:365) at eulergui.project.N3Source.update(N3Source.java:348) at eulergui.project.N3Source.parseResult(N3Source.java:380)
New twit: http://twitter.com/#!/jmvanel
Keeping business logic and infrastructure and platform code separate: pure business logic are N3 rules, or OWL: http://tinyurl.com/664cvvw
New snapshot uploaded for Revision 2412 ; see CHANGELOG
Then ready for a release, when the parser multithtread issue is solved .
Tested without network with project deductions/n3_nojs/cv2.n3p
COMMITS
- class EulerGUI : set Level WARNING for Logger("cache") : TESTED
(necessary to keep a reference for the setting to remain in effet, as the javadoc says ) )
FIX NPE in URIModificationChecker . checkN3Source
- in class ProjectGUI assert that there is only one URIModificationChecker (assertion is not violated)
- ensure that the URIModificationChecker is stopped when the windows is closed
TODO: FIX (random) Exception due to N3 parser; in test TestJavaEditor ( project deductions/n3_new/foaf_import.n3p )
thread "doN3SourceAdded: ./foaf.n3" java.lang.RuntimeException: Error during re-parsing N3 source
at eulergui.project.N3Source.manageParseN3(N3Source.java:368)
Caused by: java.lang.NullPointerException
at eulergui.parser.n3.impl.parser4j.service.N3Parser.createUri(N3Parser.java:475)
Exception in thread "doN3SourceAdded: ./foaf.n3" java.lang.RuntimeException: Error during re-parsing N3 source at eulergui.project.N3Source.manageParseN3(N3Source.java:368) at eulergui.project.N3Source.update(N3Source.java:348) at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:96) at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:38) Caused by: java.lang.NullPointerException at eulergui.parser.n3.impl.parser4j.service.N3Parser.createUri(N3Parser.java:475) at eulergui.parser.n3.impl.parser4j.service.N3Parser.createSubject(N3Parser.java:300) at eulergui.parser.n3.impl.parser4j.service.N3Parser.createStatementData(N3Parser.java:276) at eulergui.parser.n3.impl.parser4j.service.N3Parser.computeN3Model(N3Parser.java:262) at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:227) at eulergui.drools_engine.ParserLink.doParse(ParserLink.java:132) at eulergui.drools_engine.ParserLink.parse(ParserLink.java:110) at eulergui.project.N3Source.doParseN3(N3Source.java:394) at eulergui.project.N3Source.manageParseN3(N3Source.java:365)
- inhibit URIModificationChecker (refreshing N3 sources) when inference runs
- in URIModificationChecker no need to set initial timestamps anymore
- in N3Source , suppress inappropriate messages "N3 source has changed"
- class EulerGUI : try to set Level WARNING for Logger("cache")
- TemporaryFrame : print status "WARNING" or "ERROR"
- DroolsTripleHandler : attempt to fix Drools compile errors in query2.n3 due to new Java objects in N3 KB feature
TODO: this does fix not issues in test suite
Thread [main] (Suspended (exception NullPointerException))
EqualityAssertMapComparator.hashCodeOf(Object) line: 48
ObjectHashMap.get(Object) line: 100
SingleThreadedObjectStore.getHandleForObject(Object) line: 122
ReteooStatefulSession(AbstractWorkingMemory).getFactHandle(Object) line: 861
Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: 33
DefaultAgenda.fireActivation(Activation) line: 917
DefaultAgenda.fireNextItem(AgendaFilter) line: 856
DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1071
ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 785
ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 751
TripleStoreDrools.fireAllRules() line: 310
ApplicationKB.fireAllRules() line: 194
ApplicationKB.n3SourceAdded(Project, N3Source) line: 221
ApplicationKB.projectLoaded(Project) line: 293
ProjectChangeSupport.fireProjectLoaded(Project) line: 96
Project.prepare() line: 1192
ProjectFactory.prepareProject(Project, URL, boolean) line: 330
ProjectFactory.restoreXMLFile(File, URL, boolean) line: 130
ProjectFactory.restoreXMLURL(URL, boolean) line: 224
ProjectFactory.restore(String, boolean) line: 53
ProjectFactory.restoreAny(URI, boolean) line: 378
CommandLineArguments.makeProjectFromUserArgument(String[]) line: 43
ProjectGUI.main(String[]) line: 171
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ClassReference.invokeMethod(String, Object[], Class[]) line: 137
ClassReference.startApplication(String[]) line: 101
TestJavaEditor(TestJemmy).launchEulerGUIWithArgument(String) line: 218
TestJavaEditor.testSimpleURLProject() line: 41
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
TestJavaEditor(TestCase).runTest() line: 168
TestJavaEditor(TestCase).runBare() line: 134
TestResult$1.protect() line: 110
TestResult.runProtected(Test, Protectable) line: 128
TestResult.run(TestCase) line: 113
TestJavaEditor(TestCase).run(TestResult) line: 124
TestSuite.runTest(Test, TestResult) line: 243
TestSuite.run(TestResult) line: 238
JUnit3TestReference.run(TestExecution) line: 130
TestExecution.run(ITestReference[]) line: 38
RemoteTestRunner.runTests(String[], String, TestExecution) line: 467
RemoteTestRunner.runTests(TestExecution) line: 683
RemoteTestRunner.run() line: 390
RemoteTestRunner.main(String[]) line: 197
Thread [main] (Suspended (exception NullPointerException))
EqualityAssertMapComparator.hashCodeOf(Object) line: 48
ObjectHashMap.get(Object) line: 100
SingleThreadedObjectStore.getHandleForObject(Object) line: 122
ReteooStatefulSession(AbstractWorkingMemory).getFactHandle(Object) line: 861
Rule_project_java_rules_n3_4_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: 33
DefaultAgenda.fireActivation(Activation) line: 917
DefaultAgenda.fireNextItem(AgendaFilter) line: 856
DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1071
ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 785
ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 751
TripleStoreDrools.fireAllRules() line: 310
ApplicationKB.fireAllRules() line: 194
ApplicationKB.n3SourceAdded(Project, N3Source) line: 221
ApplicationKB.projectLoaded(Project) line: 293
ProjectChangeSupport.fireProjectLoaded(Project) line: 96
Project.prepare() line: 1186
ProjectFactory.prepareProject(Project, URL, boolean) line: 330
ProjectFactory.restoreXMLFile(File, URL, boolean) line: 130
ProjectFactory.restoreXMLURL(URL, boolean) line: 224
ProjectFactory.restore(String, boolean) line: 53
ProjectFactory.restoreAny(URI, boolean) line: 378
CommandLineArguments.makeProjectFromUserArgument(String[]) line: 43
ProjectGUI.main(String[]) line: 171
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
ClassReference.invokeMethod(String, Object[], Class[]) line: 137
ClassReference.startApplication(String[]) line: 101
TestJavaEditor(TestJemmy).launchEulerGUIWithArgument(String) line: 218
TestJavaEditor.testSimpleURLProject() line: 41
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25
Method.invoke(Object, Object...) line: 597
TestJavaEditor(TestCase).runTest() line: 154
TestJavaEditor(TestCase).runBare() line: 127
TestResult$1.protect() line: 106
TestResult.runProtected(Test, Protectable) line: 124
TestResult.run(TestCase) line: 109
TestJavaEditor(TestCase).run(TestResult) line: 118
TestSuite.runTest(Test, TestResult) line: 208
TestSuite.run(TestResult) line: 203
JUnit3TestReference.run(TestExecution) line: 130
TestExecution.run(ITestReference[]) line: 38
RemoteTestRunner.runTests(String[], String, TestExecution) line: 467
RemoteTestRunner.runTests(TestExecution) line: 683
RemoteTestRunner.run() line: 390
RemoteTestRunner.main(String[]) line: 197
"null" . equals( e1.getLocalizedMessage() ) && "null" . equals( e1.getCause() )
e1.getLocalizedMessage() .contains( "null" ) && e1.getCause().toString() . contains( "null" );
COMMIT
- pom.xml : upgrade commons-cli:commons-cli 1.0 -> 1.2 ; log4j:log4j 1.2.14 -> 1.2.16 ; opensymphony:oscache 2.4 -> 2.4.1
- pom.xml : try to remove output in console during tests
- synchronize on N3Source.localN3File in manageN3Cache
- reestablish warning window when an N3 source has been updated on file or Internet
mvn surefire:help -Ddetail=true
- TestGenericGuiGenerationInsertLogical , TestGenericGuiGenerationInsertLogicalRefactorRules : set drools options explicitely
- in N3SourcetoDrools add synchronize blocks when working memory of rule base could be modified in parallel by new UpdateN3Thread
N3SourcetoDrools : default n3JavaPathSeparator = '-';
FIX : keys in cache : were identical for the rule base and for the local copy of the .n3p project
FIX : Cache File for the local copy of the .n3p project was deleteOnExit()
Thread [doN3SourceAdded: person-events.n3] (Suspended (breakpoint at line 737 in N3JavaMappingBuiltin))
N3JavaMappingBuiltin.setN3JavaPathSeparator(char) line: 737
DroolsTripleHandler.setJavaObjectsInDrools(boolean, TripleStoreDrools) line: 1934
N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) line: 280
N3SourcetoDrools.translate(N3Source, boolean, boolean) line: 242
N3toDroolsUpdater.translate(N3Source, boolean) line: 90
Project.translateToDrools(N3Source, boolean, boolean) line: 983
N3ConversionRefesher.updateKB(Project, N3Source) line: 137
UpdateN3Thread.run() line: 39
COMMIT
URIModificationChecker : reestablish "check less frequently the URL's on Internet"
FIX EyeHelper.addN3SourceToEulerArguments() in the case of RDF N3 source ( was breaking SWRL tests )
java.lang.RuntimeException: ** ERROR ** file:///home/jmv/src/eulergui_new/examples/dl-safe_small.owl ** invalid_document(after_line(46))
When launching Drools :
Daemon Thread [SwingWorker-pool-4-thread-1] (Suspended (breakpoint at line 98 in ParserLink)) ParserLink.parse(N3Source) line: 98 ParserLink.parseAndUpdateSource(N3Source) line: 128 N3SourcetoDrools.translate(N3Source, boolean, boolean) line: 240 N3toDroolsUpdater.translate(N3Source, boolean) line: 87 Project.doTranslateN32Drools(boolean) line: 934 Project.translateN32Drools(boolean) line: 887 Project.prepareDrools(boolean) line: 866 Project.doRunDrools(boolean) line: 821 Project.runDroolsTriples(boolean) line: 777 DroolsInferenceEngine.launch() line: 28 RunActionGeneric$EngineSwingWorker.doInBackground() line: 117 RunActionGeneric$EngineSwingWorker.doInBackground() line: 1 SwingWorker$1.call() line: 277 FutureTask$Sync.innerRun() line: 303 SwingWorker$2(FutureTask<V>).run() line: 138 RunActionGeneric$EngineSwingWorker(SwingWorker<T,V>).run() line: 316 ThreadPoolExecutor$Worker.runTask(Runnable) line: 886 ThreadPoolExecutor$Worker.run() line: 908 Thread.run() line: 662 |
At application startup :
Thread [main] (Suspended (breakpoint at line 98 in ParserLink))
ParserLink.parse(N3Source) line: 98
ParserLink.parseAndUpdateSource(N3Source) line: 128
N3SourcetoDrools.translate(N3Source, boolean, boolean) line: 240
N3toDroolsUpdater.translate(N3Source, boolean) line: 87
Project.translateToDrools(N3Source, boolean, boolean) line: 980
N3ConversionRefesher.updateKB(Project, N3Source) line: 131
N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 51
ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 73
Project.rethrowEventsPlease() line: 1355
ProjectGUI.newWindow(Project, boolean) line: 227
ProjectGUI.main(String[]) line: 180
|
Thread [main] (Suspended (breakpoint at line 98 in ParserLink))
ParserLink.parse(N3Source) line: 98
N3Source.doUpdate() line: 367
N3Source.update() line: 358
N3ConversionRefesher.updateN3(N3Source) line: 90
N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 50
ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 73
Project.rethrowEventsPlease() line: 1355
ProjectGUI.newWindow(Project, boolean) line: 227
ProjectGUI.main(String[]) line: 180
|
[INFO] The following dependencies in Dependencies have newer versions: [INFO] commons-cli:commons-cli ................................... 1.0 -> 1.2 [INFO] commons-logging:commons-logging ......... 1.0.4 -> 99.0-does-not-exist [INFO] log4j:log4j ......................................... 1.2.14 -> 1.2.16 [INFO] opensymphony:oscache .................................... 2.4 -> 2.4.1 [INFO] org.drools:drools-api .............................. 5.1.1 -> 5.2.0.M1 [INFO] org.drools:drools-compiler ......................... 5.1.1 -> 5.2.0.M2
COMMIT
- simplify URIModificationChecker by calling N3Source.manageN3Cache()
- TestJemmy : fix TestGenericGuiGeneration where the "EulerGUI Message" window was taken for the generated application
- add 2 s timeout also for "add URL" button, implemented in SourceFactory
- in N3SourceFromXMI, remove the useless "retry once"
Ubuntu 11.04 'Natty Narwhal'.
Thread [main] (Suspended (breakpoint at line 132 in ApplicationKB)) ApplicationKB.makeInternalProject() line: 132 ApplicationKB.<init>() line: 84 ApplicationKB.instance() line: 71 Project.prepare() line: 1198 ProjectFactory.prepareProject(Project, URL, boolean) line: 329 ProjectFactory.restoreXMLFile(File, URL, boolean) line: 134 ProjectFactory.restoreXML(File, boolean) line: 85 ProjectFactory.restore(File) line: 79 ProjectFactory.restore() line: 195 CommandLineArguments.makeProjectFromUserArgument(String[]) line: 39 BasicRuntime.initialize(String[]) line: 100 BasicRuntimeTest.testSimpleInference() line: 59 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 BasicRuntimeTest(TestCase).runTest() line: 154 BasicRuntimeTest(TestCase).runBare() line: 127 TestResult$1.protect() line: 106 TestResult.runProtected(Test, Protectable) line: 124 TestResult.run(TestCase) line: 109 BasicRuntimeTest(TestCase).run(TestResult) line: 118 JUnit3TestReference.run(TestExecution) line: 130 TestExecution.run(ITestReference[]) line: 38 RemoteTestRunner.runTests(String[], String, TestExecution) line: 467 RemoteTestRunner.runTests(TestExecution) line: 683 RemoteTestRunner.run() line: 390 RemoteTestRunner.main(String[]) line: 197
I discovered that the cause of random tests result lays in the FOAF site being often down.
I must catch the network timeout exception so that project loading can go on, and eventually the failing URI will be gotten by the URI checker thread.
http://classic-web.archive.org/web/20080611134628/http://xmlns.com/foaf/spec/index.rdf
Fixing the issues in EG regarding timeouts , and how to work best with failing URI's : they are flagged with N3Source.setAccessible(false) , and no more checked with manageN3Cache() .
Also exception are caught so that project loading can go on in case of failing URI's; just error windows are produced.
TESTED with this FOAF site down : http://xmlns.com/foaf/spec/index.rdf,
Running deductions.runtime.TestRulesForUserEvents Tests run: 4, Failures: 2, Errors: 1, Skipped: 0, Time elapsed: 67.174 sec <<< FAILURE! Running eulergui.gui.TestFacebookSearch Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 316.559 sec <<< FAILURE! |
Thread [N3 sources modification Checker] (Suspended (breakpoint at line 101 in RDFToN3Converter)) (out of synch) RDFToN3Converter.getN3FromRDFSynchronously(String, File) line: 101 (out of synch) RDFToN3Converter.downloadRDFAndMakeN3(String, File) line: 55 (out of synch) N3SourceFromRDF.convertToN3() line: 105 N3Source.manageN3Cache(N3Source) line: 475 N3SourceFromRDF.doUpdate() line: 69 N3SourceFromRDF(N3Source).update() line: 414 N3ConversionRefesher.updateN3(N3Source) line: 90 N3ConversionRefesher.n3SourceChanged(Project, N3Source) line: 43 ProjectChangeSupport.fireN3SourceChanged(Project, N3Source) line: 140 Project.fireN3SourceChanged(N3Source) line: 1412 URIModificationChecker.checkN3Source(N3Source) line: 129 URIModificationChecker.run() line: 77 Thread.run() line: 662 |
COMMIT
- Work around a problem with Eye : URL beginning with file:/// work, but not with a single / .
- could not pass the test suite, because FOAF ontology is not available at http://xmlns.com/foaf/spec/index.rdf
* I added a connection timeout of 1000 ms in URICacheImpl.getURITimeStamp() to have a quick fail .
- extract code into convertToN3() for N3SourceFromRDF , N3SourceFromOWL
eye --pass --nope \ --wcache http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/swrl-n3-rules.n3 /home/jmv/.eulergui/n3_cache/swrl-n3-rules.n32976197904589621514.n3 \ --wcache http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/variableSubstitution.n3 /home/jmv/.eulergui/n3_cache/variableSubstitution.n32031038912161997742.n3 \ http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/swrl-n3-rules.n3 \ http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/variableSubstitution.n3 \ file:/tmp/translation-724542147409490235.n3 \ --query http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/swrl-n3-rulesQ.n3 |
TODO :
- also use same N3 sources Internet cache mechanism for N3 projects
- tests duration went from 8 mn to 15 mn
COMMIT
- activate --wcache for Euler engine, TESTED with
eulergui --no-qnames --pass http://eulersharp.sourceforge.net/2007/07test/abc.n3
COMMIT
cache for N3 sources from Internet (5). This is necessary for doing demos without Internet :) .
- remove IOMAnager.getLocalCache(); change getLocalN3() to call manageN3Cache()
- fix N3SourceFromXMI, N3SourceFromXML_Gloze,
- fix TestJavaEditor, because title of windows for translated non N3 sources do not include "translated" anymore
TESTS PASS !
Pave the way for a cache for N3 sources from Internet (4). This is necessary for doing demos without Internet :) .
- avoid useless copy from one temp location to another in N3SouceFromXML_Gloze
- pave the way in N3SourceFromXMI
TODO :
- extract code into convertToN3() for each N3Source subclass
- remove IOMAnager.getLocalCache(); change getLocalN3() to call manageN3Cache()
- also use same mechanism for N3 projects
Pave the way for a cache for N3 sources from Internet
This is necessary for doing demos without Internet :) .
TODO : to be able to make demos without Internet : minimal Web cache for SWRL rules
SNAPSHOT uploaded !
Suppose I have arguments that run fine e.g. :
eye http//a.org/a.n3 --query http//a.org/q.n3
- By default in N3Source accessible = true
eye --wcache : sent mail to Jos .
file:///home/jmv/src/eulergui_new/target/site/emma/index.html
java.lang.RuntimeException: ** ERROR ** sem ** error(type_error(atom,format([60,112,62,65,110,32,105,110,102,101,114,101,110,99,101,59,32,103,105,118,105, 110,103,32,116,104,105,115,32,114,101,115,117,108,116,58,32,126,97,32,60,47,112,62], charsio:[<http://example.com#connected>(<http://example.com#Davis>, <http://example.com#Hancock>)])),[format/2|local_sp(269799044,270097676,[],[])])
Why is the subproject in WM having correct N3 source ?
Thread [main] (Suspended) SubProjectsManagement.addButton(Project) line: 33 ProjectGUI_Updater.subprojectAdded(Project, Project) line: 143 ProjectChangeSupport.fireAddSubproject(Project, Project) line: 104 Project.addSubProject(Project) line: 227 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 DeferredMethodCall.doPperformMethodCall(Object, Map<String,Object>) line: 118 DeferredMethodCall.performMethodCall(Object, Map<String,Assignment>) line: 90 DeferredMethodCall.assign(Object, List<Assignment>) line: 70 DeferredMethodCall.assign(Assignment, List<Assignment>) line: 40 Rule_DeferredMethodCall_0.defaultConsequence(KnowledgeHelper, ArrayList, FactHandle, Assignment, FactHandle, DeferredMethodCall, FactHandle) line: 10 Rule_DeferredMethodCall_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: 39 DefaultAgenda.fireActivation(Activation) line: 917 DefaultAgenda.fireNextItem(AgendaFilter) line: 856 DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1071 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 785 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 751 TripleStoreDrools.fireAllRules() line: 310 ApplicationKB.fireAllRules() line: 204 ApplicationKB.n3SourceAdded(Project, N3Source) line: 232 ApplicationKB.projectLoaded(Project) line: 304 ProjectChangeSupport.fireProjectLoaded(Project) line: 96 Project.rethrowEventsPlease() line: 1369 ProjectGUI.newWindow(Project, boolean) line: 227 ProjectGUI.main(String[]) line: 180
Thread [main] (Suspended (breakpoint at line 25 in SubProjectsManagement)) SubProjectsManagement.addButton(Project) line: 25 ProjectGUI_Updater.subprojectAdded(Project, Project) line: 143 ProjectChangeSupport.fireAddSubproject(Project, Project) line: 104 Project.rethrowEventsPlease() line: 1393 ProjectGUI.newWindow(Project, boolean) line: 227 ProjectGUI.main(String[]) line: 180
COMMITED
Work on new N3 Format For Project : subproject does not work
- in ParserLink, in subjects and objects (not in lists nor predicates) , systematically expand the <> URI ; return '<' + modelURI + '>' if "<>" equals raw N3 String
- in ProjectFactory . restoreAny , normalize input URI
TESTS PASS
Work on new N3 Format For Project : subproject does not work
- TestN3FormatForProject does pass again
TODO
- the URI <> appears both in project and subproject , and <> is not expanded internally
- still random error in deductions.runtime.BasicRuntimeTest.*4
- test reading new N3 Format from an URL
TODO stop using rdfs:seeAlso for real loacation of an EulerGUI project .
Thread [main] (Suspended (breakpoint at line 23 in SubprojectHelper)) SubprojectHelper.projectLoaded(Project) line: 23 N3ConversionRefesher.projectLoaded(Project) line: 148 ProjectChangeSupport.fireProjectLoaded(Project) line: 96 Project.rethrowEventsPlease() line: 1362 ProjectGUI.newWindow(Project, boolean) line: 223 ProjectGUI.main(String[]) line: 176
21:23:55 [jEdit I/O #1] [error] ErrorListDialog$ErrorEntry: http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml:
21:23:55 [jEdit I/O #1] [error] ErrorListDialog$ErrorEntry: The file could not be loaded correctly (some data might be lost) with
21:23:55 [jEdit I/O #1] [error] ErrorListDialog$ErrorEntry: the encoding "UTF-8Y".
ISSUE
This does not work in the consequent with current Drools N3 engine, because ?CP is not declared with a type.
However, it does not matter what the type is, because the property call is deferred. ?CP should be created as a new blank mode in the usual way.
?PANE a gengui:Frame .
?Layout a java:java-awt-GridLayout
; javam:setColumns ( 1 )
; javam:setRows ( 10 ) .
?PANE javap:contentPane ?CP .
?CP javam:setLayout ( ?Layout ).
|
COMMITED
ReflectionHelper : in method findMethod , return method With Same Name And Arguments Length also in case of 1 argument
N3JavaMappingBuiltin.acceptConsequent(): Drools compile WARNING: javax.swing.border.LineBorder has no No Argument Constructor! Rule: ?W <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#javax-swing-border-LineBorder> in file:/home/jmv/src/deductions/n3_nojs/generic_to_java-rules.n3 ,5 ReflectionHelper.findMethod(): java.lang.NoSuchMethodException: javax.swing.JFrame.setLayout(java.awt.GridBagLayout)
subscribed to deductions_commits all developers : XXX@users.sourceforge.net
FitNesse:
http://fitnesse.org/FitNesse.UserGuide.TwoMinuteExample
COMMITED
generic_to_java-rules.n3 : solved the old issue of refreshing generated GUI dynamically : simply updated the rules calling Container.add()
TODO
Remove thse messages :
N3JavaMappingBuiltin.acceptConsequent(): Drools compile WARNING: javax.swing.border.LineBorder has no No Argument Constructor! Rule: ?W <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#javax-swing-border-LineBorder> in file:/home/jmv/src/deductions/n3_nojs/generic_to_java-rules.n3 ,5 ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: javax.swing.JFrame.revalidate() ==> null ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JTextField, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JLabel, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JTextField, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JLabel, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JTextField, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JLabel, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JTextField, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int) ReflectionHelper.findMethod() 4: substituted non-Object type did not work: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JLabel, java.lang.Integer) ==> public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int)
This rule in query2.n3 is wrongly translated in Drools, and is not useful anymore , so I remove it from swing-rules3.n3p :
{ ?X <http://java.sun.com/method#pack> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil>. } => { ?X <http://java.sun.com/method#pack> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil>. }
- WIP : further simplifying the N3 - Java mapping by adding Triple.setObject() methods for each primitive type
- errors in Drools compilation (considered as internal errors) are marked SEVERE
TESTS PASS
WIP : simplifying the N3 - Java mapping (working on updating the KB on focus lost events) : large commit
Needed to deactivate some tests in :
- TestGenericGuiGenerationInsertLogical : pending_test_foaf_import2 , pending_test_uml2
- TestReasonning : 2 math tests
- BasicRuntimeTest : pending_testJavaMappingAntecedentVariable , pending_testJavaMappingAntecedentVariableString2 , etc
class TestJemmy: in tearDown() reestablish global defaults:
setUseInsertLogical(true);
setN3JavaPathSeparator( '-' );
setJavaObjectsInDrools(true);
TestGenericGuiGenerationInsertLogical : in setUp N3 Java Path Separator '_' was not set
TestReasonning : print Working Memory when test fails
BasicRuntime : concerning empty prefix ( : ) , USER_INPUT_URI take precedence over prefix Declarations From Project
B: http://elefant.developer.nicta.com.au/ from danbri
<danbri> B:Elefant (Efficient Learning, Large-scale Inference, and Optimisation Toolkit) is an open source library for machine learning licensed under the Mozilla Public License
REFACTOR ReflectionHelper.javaPropertyIsN3Literal()
- that paves the way for correct processing of String typed Java properties in N3 antecedent in N3JavaMappingBuiltin.makeDroolsCriterium() .
- GUIKBAdapter: also forward GUI Events To KB if source is instanceof JButton
INFO: XMI ou UMLT analysé: http://deductions.svn.sourceforge.net/svnroot/deductions/n3_logical/extlibrary.ecore org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: java.net.SocketException: Connection reset at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397) at eulergui.inputs.XMIToN3Converter.loadECoreURI(XMIToN3Converter.java:236) at eulergui.inputs.XMIToN3Converter.loadEcoreURIAndTranslateToN3(XMIToN3Converter.java:69) at eulergui.inputs.XMIToN3Converter.loadURIAndTranslateToN3(XMIToN3Converter.java:55) at eulergui.inputs.N3SourceFromXMI.prepare(N3SourceFromXMI.java:44) at eulergui.project.Project.setLocation(Project.java:118) at eulergui.project.Project.setUri(Project.java:171) at eulergui.project.ProjectFactory.prepareProject(ProjectFactory.java:284) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:122) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:216) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:50) at eulergui.CommandLineArguments.makeProjectFromUserArgument(CommandLineArguments.java:40) at n3_project.ProjectGUI.main(ProjectGUI.java:171) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.netbeans.jemmy.ClassReference.invokeMethod(ClassReference.java:137) at org.netbeans.jemmy.ClassReference.startApplication(ClassReference.java:101) at eulergui.gui.TestJemmy.launchEulerGUI(TestJemmy.java:220) at eulergui.gui.TestJemmy.generateAndLaunch(TestJemmy.java:241) at eulergui.gui.TestGenericGuiGenerationInsertLogical.test_ecore2(TestGenericGuiGenerationInsertLogical.java:55) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.MeteredStream.read(MeteredStream.java:116) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672) at org.apache.xerces.impl.XMLEntityManager$RewindableInputStream.read(Unknown Source) at org.apache.xerces.impl.io.UTF8Reader.read(Unknown Source) at org.apache.xerces.impl.XMLEntityScanner.load(Unknown Source) at org.apache.xerces.impl.XMLEntityScanner.scanName(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanAttribute(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanStartElement(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source) at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source) at javax.xml.parsers.SAXParser.parse(SAXParser.java:395) at org.eclipse.emf.ecore.xmi.impl.XMLLoadImpl.load(XMLLoadImpl.java:181) at org.eclipse.emf.ecore.xmi.impl.XMLResourceImpl.doLoad(XMLResourceImpl.java:180) at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1445) at org.eclipse.emf.ecore.resource.impl.ResourceImpl.load(ResourceImpl.java:1241) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoad(ResourceSetImpl.java:255) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:270)
env LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype
Now it's possible to work on focus lost processing in the swing3 generated application with the N3 shell.
TODO search for a predicate ?P in consequent side.
{ ?A => ?C . ?C log:includes { ?S ?P ?O } .?P :log:equalTo :searchedResource . } => { ?A => { ?S ?P ?O } }. |
:SB a java:java-lang-StringBuilder . :SB javam:append ( "bla" ) . :SB javam:toString ?RESULT . # this does not work currently with N3 Java mapping ! methods return values are lost :(( :TF a java:javax-swing-JTextField . :TF javam:setText ( "bla" ). @prefix javap: <http://java.sun.com/predicate#> . ?X javap:text ?T . # search does not work wih Java objects @prefix javap: <http://java.sun.com/predicate#> . { ?TF a java:javax-swing-JTextField . ?TF javap:text ?T } => { :text :is ?T } . # outputs nothing, this is normal, but this is added to the KB: # <http://example.com#text> <http://example.com#is> bla .
There is a bug here : should be "bla"
COMMITS
Now N3 shell (BasicRuntime) can show Déductions generated applications
- class N3SourcetoDrools : add Infrastructure Objects In WM (i.e. instance of GUIKBAdapter)
not only when calling LaunchDrools()
Now a rule base is only cached if the project has a permanent location.
So now testCreateProjectInGUI and testCreateProjectInGUI2() in TestFacebookSearch pass in succession .
They differ in reverting calls to pushRunDrools() and pushAddN3Search();
NOTE: The problem was possible because the Drools package name generated e.g. n3_project_helper0 , is not specific , which is not normally a problem because there is a Map associating the Drools package name with theN3 source.
I can reproduce deterministically this NullPointerException in addPackage : http://pastebin.com/sCtLMj7r
<jmvanel> with 5.1.1 ;
<jmvanel> does it make sense to try 5.2.0 BETA ?
I could not reproduce it on my laptop , then I cleaned in eclipse, and no NPE now.
java.lang.RuntimeException: Drools exception during package addition to rule base at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:391) at n3_project.helpers.N3QueryToDroolsQuery.translate(N3QueryToDroolsQuery.java:39) at n3_project.helpers.N3toDroolsUpdater.translateQuery(N3toDroolsUpdater.java:207) at eulergui.project.Project.addN3Search(Project.java:419) at n3_project.SourceFilesManagement$N3SearchAction.actualAction(SourceFilesManagement.java:285) Caused by: java.lang.NullPointerException at org.drools.reteoo.CompositeObjectSinkAdapter.unregisterFieldIndex(CompositeObjectSinkAdapter.java:313) at org.drools.reteoo.CompositeObjectSinkAdapter.removeObjectSink(CompositeObjectSinkAdapter.java:163) at org.drools.reteoo.ObjectSource.removeObjectSink(ObjectSource.java:167) at org.drools.reteoo.ObjectTypeNode.doRemove(ObjectTypeNode.java:355) at org.drools.reteoo.ObjectTypeNode.remove(ObjectTypeNode.java:325) at org.drools.reteoo.ObjectSource.doRemove(ObjectSource.java:209) at org.drools.common.BaseNode.remove(BaseNode.java:109) at org.drools.reteoo.ObjectSource.doRemove(ObjectSource.java:209) at org.drools.common.BaseNode.remove(BaseNode.java:109) at org.drools.reteoo.BetaNode.doRemove(BetaNode.java:289) at org.drools.common.BaseNode.remove(BaseNode.java:109) at org.drools.reteoo.BetaNode.doRemove(BetaNode.java:293) at org.drools.common.BaseNode.remove(BaseNode.java:109) at org.drools.reteoo.QueryTerminalNode.doRemove(QueryTerminalNode.java:252) at org.drools.common.BaseNode.remove(BaseNode.java:109) at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:237) at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:432) at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:831) at org.drools.common.AbstractRuleBase.mergePackage(AbstractRuleBase.java:623) at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:539) at org.drools.reteoo.ReteooRuleBase.addPackages(ReteooRuleBase.java:445) at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:452) at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:389) |
- test N3 search in interaction with inference : class TestFacebookSearch :new pending test with Project Created In GUI
- call setName() for several GUI components, to ease debug and tests
TestJmmy
- REFACTOR : extract pushRunDrools
- in tearDown() : call mainFrame.dispose() instead of SwingHelper.disposeWindows()
- in setUp() : no more call to SwingHelper.disposeWindows();
- SwingHelper.disposeWindows() done with invokeLater()
- TestFacebookSearch : no more specific setUp()
INFO: Project.findN3ByURI(): NOT FOUND: file:/tmp/translation-7279232034800042879.n3 java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.MeteredStream.read(MeteredStream.java:116) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2667) at n3_project.IOManager.copy(IOManager.java:190) at n3_project.IOManager.getLocalCache(IOManager.java:169) at n3_project.IOManager.getLocalCache(IOManager.java:148) at eulergui.project.N3Source.getLocalCache(N3Source.java:568) at eulergui.project.N3Source.getLocalN3(N3Source.java:576) at n3_project.helpers.EyeHelper.addN3SourceToEulerArguments(EyeHelper.java:168) at n3_project.helpers.EyeHelper.getEulerArguments(EyeHelper.java:140) at n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:47) at eulergui.project.Project.reasonExternalProlog(Project.java:507) at eulergui.tools.SWRLTranslator.n3SourceAdded(SWRLTranslator.java:54) at eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:73) at eulergui.project.Project.rethrowEventsPlease(Project.java:1335) at n3_project.ProjectGUI.newWindow(ProjectGUI.java:223)
Tried the N3 shell with the generated applications:
n3shell person-app.n3p ?FIELD gui:inputWidgetSpecification ?SPEC . ?EVENT gui::eventSource ?FIELD . n3shell person_import3.n3p
Note that rules are not fired until a triple (or a comment ) is entered.
But only the button "Address" is here, but no text field.
In search , a blank node is treated as variable , e.g. this prints all the KB :
_:sk_FORM_4 ?P ?V .
N3 search do not seem to run right after creation; the only test is with ready made projects.
DONE
http://www.plantontology.org/
COMMITED
Pave the way for processing a Java AWT FocusEvent in generated application:
Now possible to get value of a primitive accessor in antecedent of an N3 rule
Test: BasicRuntimeTest.testJavaMappingAntecedentVariable()
Thread [main] (Suspended (breakpoint at line 877 in N3JavaMappingBuiltin))
N3JavaMappingBuiltin.acceptList(String, String, List<String>, String) line: 877
DroolsTripleHandler.acceptList(String, LinesAndCols, String, LinesAndCols, List<String>, List<LinesAndCols>, String, LinesAndCols) line: 182
ParserLink.visitAllURI(LineTrackingTripleHandler) line: 617
N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) line: 284
N3SourcetoDrools.translate(N3Source, boolean, boolean) line: 241
N3toDroolsUpdater.translate(N3Source, boolean) line: 87
Project.doTranslateN32Drools(boolean) line: 911
Project.translateN32Drools(boolean) line: 872
Project.prepareDrools(boolean) line: 852
BasicRuntime.initialize(String[]) line: 93
BasicRuntimeTest.testSimpleInference() line: 56
"Ext JS is the developer's choice for building powerful desktop web applications using JavaScript and web standards."
http://www.sencha.com/products/extjs/
TODO
FIX: class GUIKBAdapter : call to fireAllRules() was missing in forwardGUIEventsToKBEmbed()
Different facets of variables in Drools N3 engine
Assignment.name
, and an objet
Assignment.reference
( can itself be of a primitive type or
not )N3Symbol getN3Symbol( String n3term ); class N3Symbol { String n3term; List<TripleInRule> inTriples; boolean isLiteral() {} boolean isUniversal() {} boolean isExistential() {} String getPlainVariable(); String getReferenceVariable(); } class TripleInRule extends Triple { N3Symbol subject, predicate, object; boolean inAntecedent; } |
TODO : replace
java.awt.event.FocusEvent( temporary == "false" , this == $JEVENT_reference )
by:
java.awt.event.FocusEvent( temporary == false, this == $JEVENT_reference )
For this N3 :
:l a java:java-util-ArrayList .
:l javam:add ( "bla" ).
{ ?L a java:java-util-List .
?L javap:empty ?E.
} => {
:test :is :ok .
:test :is ?E .
} .
|
The Drools is currently the following.
WHAT IS WRONG: ?E is actually universal (and moreover initialised by a Java
property, because its first appearance is here). So ?E cannot be treated as an
existential in the consequent , as it is below in red. Also, empty
is Java property with a primitive type, so it makes sense not to use the Java
reference variable $E_reference for it. I implemented this last
criterium.
rule "match_Java_object.n3 0" when $L_reference : java.util.List() Assignment( $L : name, reference == $L_reference ) java.util.List( $E_reference : empty , this == $L_reference ) then Triple newTriple; TripleResult newTripleResult; newTriple = new Triple( ); newTriple.setSubject( "<test/match_Java_object.n3#test>" ); newTriple.setPredicate( "<test/match_Java_object.n3#is>".toString() ); newTriple.setObject( "<test/match_Java_object.n3#ok>".toString() ); insertLogical( newTriple ); String E = Triple.resource("E") ; newTriple = new Triple( ); newTriple.setSubject( "<test/match_Java_object.n3#test>" ); newTriple.setPredicate( "<test/match_Java_object.n3#is>".toString() ); newTriple.setObject( E.toString() ); insertLogical( newTriple ); end |
Commited the generated version of gui_generic.owl, like it was generated by rule-documentor :
# ontology for generic GUI widgets / components, strongly inspired by Java Swing
# temporarily put in http://jmvanel.free.fr/ontology/gui_generic.owl#
# reference version in https://deductions.svn.sourceforge.net/svnroot/deductions/html/ontology
# see runtime-rules.html , unification.html#Supporting in https://deductions.svn.sourceforge.net/svnroot/deductions/n3_nojs/html/
at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:194) at eulergui.drools_engine.ParserLink.doParse(ParserLink.java:116) at eulergui.drools_engine.ParserLink.parse(ParserLink.java:97) at eulergui.drools_engine.ParserLink.parseAndUpdateSource(ParserLink.java:127) at n3_project.helpers.N3toDroolsUpdater.translateQuery(N3toDroolsUpdater.java:205) at eulergui.project.Project.searchFromString(Project.java:1081) at eulergui.gui.view.RDFTooltipsInEditor.getDetailsForResource(RDFTooltipsInEditor.java:105) at eulergui.gui.view.RDFTooltipsInEditor.getLabelForResource(RDFTooltipsInEditor.java:126) at eulergui.gui.view.RDFTooltipsInEditor.getFormattedDetailsForResource_old(RDFTooltipsInEditor.java:40) at eulergui.gui.view.TextEditor$5.getToolTipText_KB(TextEditor.java:568) at eulergui.gui.view.TextEditor$5.getToolTipText(TextEditor.java:535) ...... in http://aURI842617598199753 at 3,3 thru 3,10: DefaultParseNodeInErrorStatus: no prefix for "javap:" 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: ParserLink.parse(): n3ParseResult.isInError: file:/tmp/translation-6900811067490934545.n3 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: ParserLink.parse(): LineNumber: -1 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.RuntimeException: ParsingException: N3 source: 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . 14:31:16 [AWT-EventQueue-0] [error] AWT-EventQueue-0: { javap:ID rdfs:label ?DETAIL } => { javap:ID rdfs:label ?DETAIL}.
N3JavaMappingBuiltin.acceptConsequent(): WARNING: ?EVENT a ?JTEXT_FIELD. : this variable was Already Met; put this Java object creation BEFORE its uses.
BUILD SUCCESSFUL in 10mn 40 on my laptop !
Snapshot uploaded : Revision : 2306 ; also with new Euler 04-29 snapshot:
http://eulersharp.sourceforge.net/maven2/euler/euler/2011-04-29/
However, on my desktop :
Running eulergui.gui.TestEulerGUIInputsTests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 86.4 sec <<< FAILURE!Running eulergui.gui.TestGenericGuiGenerationInsertLogicalTests run: 6, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 97.784 sec <<< FAILURE!
FIX TestN3FormatForProject by updating project-java-rules.n3
- some defense against null URI's in N3Source and Project
- refactor a bit ApplicationKB
Added http://prefix.cc/kb
With the Drools N3 engine, I try to match a Java AWT FocusEvent, to actually catch the Focus Lost Events at runtime.
When working focus lost processing, I saw that the actuel event is not FocusEvent, but a platform-specific subclass :
FocusEvent.class.isAssignableFrom( e.getClass() ) (boolean) true e.getClass() (java.lang.Class<T>) class sun.awt.CausedFocusEvent |
So I need to change the Drools translation in antecedent from :
Assignment( $JEVENT : name, reference.class == java.awt.event.FocusEvent, $JEVENT_reference : reference ) |
to :
Assignment( $JEVENT : name, $CLASS_1 : reference.class,
$JEVENT_reference : reference )
eval( FocusEvent.class.isAssignableFrom( $CLASS_1 ) )
|
or , simpler :
Assignment( $JEVENT : name, $JEVENT_reference : reference )
eval( FocusEvent.class.isAssignableFrom( $JEVENT_reference.class ) )
|
Alas ! This is not not good , see this message:
org.drools.RuntimeDroolsException: Exception executing predicate reference.ID == "1005" ... Caused by: [Error: unable to resolve method: deductions.runtime.GUIKBAdapter.ID() [arglength=0]] |
This could not pass because FocusEvent has no no-parameter constructor , but it does not seem to be a problem .
$JEVENT_reference : FocusEvent()
Assignment( $JEVENT : name, reference == $JEVENT_reference )
|
But other Assignment conditions must still have
Assignment( $VAR : name, $VAR_reference : reference ) |
if VAR was never met before. So $JEVENT_reference should be recorded as a Drools variable with a type.
This creates the same RuntimeDroolsException. It seems that Drools never peeks into eval() expressions .
Assignment( $JEVENT : name, $JEVENT_reference : reference )
eval( $JEVENT_reference instanceof FocusEvent )
|
Next try :
$JEVENT_reference : FocusEvent()
Assignment( $JEVENT : name,
reference.class == $JEVENT_reference.class )
|
Now the property criteria should be changed from :
Assignment( name == $JEVENT , reference == $JEVENT_reference , reference.ID == "1005" ) |
to:
Assignment( name == $JEVENT , reference == $JEVENT_reference,
reference.class == $JEVENT_reference.class
reference.ID == "1005" )
|
For motivation and explanation, see <http://www.w3.org/DesignIssues/Diff>
class N3Comparator : attempt to make a valid comparator for 2 RDF graphs,
* taking in account blank nodes renaming, e.g. for these 2 graphs, it will say "identical" :
* @prefix : <http://a.b/#>. _:a :p _:b.
* @prefix : <http://a.b/#>. _:a2 :p _:b2.
*
* Alas it says :
* [] <http://a.b/#p> [] .
28 mars 2011 17:13:34 deductions.runtime.GUIKBAdapter focusLost INFO: _GUIKBAdapter.focusLost() java.awt.FocusEvent[FOCUS_LOST,permanent,opposite=javax.swing.JTextField[,82,5,114x19,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@74bdc868,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=10,columnWidth=11,command=,horizontalAlignment=LEADING],cause=TRAVERSAL_BACKWARD] on javax.swing.JTextField[,60,5,114x19,layout=javax.swing.plaf.basic.BasicTextUI$UpdateHandler,alignmentX=0.0,alignmentY=0.0,border=javax.swing.plaf.BorderUIResource$CompoundBorderUIResource@74bdc868,flags=296,maximumSize=,minimumSize=,preferredSize=,caretColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],disabledTextColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],editable=true,margin=javax.swing.plaf.InsetsUIResource[top=0,left=0,bottom=0,right=0],selectedTextColor=sun.swing.PrintColorUIResource[r=51,g=51,b=51],selectionColor=javax.swing.plaf.ColorUIResource[r=184,g=207,b=229],columns=10,columnWidth=11,command=,horizontalAlignment=LEADING] 28 mars 2011 17:13:34 unif.TripleStoreDrools createId INFO: Creation de l'Id: event5 28 mars 2011 17:13:34 unif.TripleStoreDrools store INFO: TripleStoreDrools.store( _:null <http://java.sun.com/predicate#text> "JMV" . |
This piece of code is not working anymore:
// to satisfy this triple pattern: // ?JTEXT_FIELD java:text ?TEXT . // assert in the KB the textField Text: String textFieldId = instantiator.objectToID( textField ); |
Idea: put the EulerGUI framework Id in the component itself with :
JTextField.setName()
eulergui generic_gui_projection-rules.n3 java_event-rules.n3 \ https://deductions.svn.sourceforge.net/svnroot/deductions/n3_logical/rules-documentor.n3 \ --query https://deductions.svn.sourceforge.net/svnroot/deductions/n3_logical/rules-documentorQ.n3
ADDED : http://prefix.cc/eg
Snapshot uploaded : Revision : 2300
Tomorrow will add http://prefix.cc/kb
deductions//n3_logical/person_import3.n3p.n3
erroneous , but works quite good !
On project deductions/n3_nojs/person-app.n3p
, Euler engine now
gives a quick result !
COMMIT in déductions :
n3_nojs/person-app.n3 : add callback in N3 that adds a label when user input is "JMV"
TODO :
the deferred method calls are probably re-created when firing rules; this should be avoided maybe by keeping the deferred method calls objects in a processed state, or actually adding the method call triples in the N3 KB (not sure ??)
Refactoring N3 Swing rule base will enable changing GUI platform.
TODO
With the new Swing rule base in n3_nojs/ , in 50% of the runs , the fields do not appear until the window is slightly resized.
COMMITS:
REFACTOR: move rules refering to java* prefixes to generic_to_java-rules.n3 ; still 43 to do :
grep --count java generic_gui_projection-rules.n3
43
- TestGenericGuiGenerationInsertLogical : test projects are now taken from deductions/n3_nojs/
- TestJemmy : to detect the EulerGUI JFrame , give it a name with setName()
DeferredMethodCall : enhance debug print
DeferredPropertyAssignment : FIX for focus lost in generated app.: Integer etc types are converted to String when method argument demands String.
http://swordfish.rdfweb.org/discovery/2003/11/rdfical/www2004-draft-20031113-final-1.html
http://owlapi.sourceforge.net/documentation.html
http://code.google.com/p/spade2/
http://sourceforge.net/apps/trac/eulergui/wiki/EulerGUIServer
http://www.inf.unibz.it/~franconi/dl/course/
java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.MeteredStream.read(MeteredStream.java:116) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2672) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2667) at n3_project.IOManager.copy(IOManager.java:190) at n3_project.IOManager.getLocalCache(IOManager.java:169) at n3_project.IOManager.getLocalCache(IOManager.java:148) at eulergui.project.N3Source.getLocalCache(N3Source.java:565) at eulergui.project.N3Source.getLocalN3(N3Source.java:573) at n3_project.helpers.EyeHelper.addN3SourceToEulerArguments(EyeHelper.java:168) at n3_project.helpers.EyeHelper.getEulerArguments(EyeHelper.java:140) at n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:47) at eulergui.project.Project.reasonExternalProlog(Project.java:506) at eulergui.tools.SWRLTranslator.n3SourceAdded(SWRLTranslator.java:54) at eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:73) at eulergui.project.Project.rethrowEventsPlease(Project.java:1329) at n3_project.ProjectGUI.newWindow(ProjectGUI.java:221) at n3_project.ProjectGUI.main(ProjectGUI.java:174) N3Source.getLocalN3(): Impossible de créer une copie locale pour lemplacement {0} cause: null ; retry once
Trying to discover when the problem started.
svn update -r 2285 DISPLAY=:1 LANG=en mvn -DPARSER4J_TESTS=no --no-plugin-updates --offline ... test[INFO] Total time: 13:30.735s svn update -r 2286 [INFO] Total time: 13:47.805s
At this revision result are incorrect, but time is acceptable :)
rm -r ~/.eulergui/rule_bases_cache DISPLAY=:1 LANG=en mvn -DPARSER4J_TESTS=no --no-plugin-updates --offline test [INFO] Total time: 13:59.223s
svn update DISPLAY=:1 LANG=en mvn -DPARSER4J_TESTS=no --no-plugin-updates --offline test [INFO] Total time: 14:16.812s
So the long test problem disappeared, it was probably due to a server problem. In the long term, it would be nice to start a local server for tests.
However there is still a problem with post-processing projects :
Running eulergui.gui.TestGenericGuiGenerationInsertLogical Tests run: 6, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 123.245 sec <<< FAILURE! Results : Tests in error: test_cv2(eulergui.gui.TestGenericGuiGenerationInsertLogical) test_uml2(eulergui.gui.TestGenericGuiGenerationInsertLogical) test_ecore2(eulergui.gui.TestGenericGuiGenerationInsertLogical)
All this will be easier and more stable with the new N3 file format backed by the internal Knowledge Base. Note that this vicious loop should be avoided:
add N3 source in KB => Java event => add N3 isource in KB
One possibility is to replace the N3 source collection in Project with a direct access to the KB.
maybe problem is obtaining timestamp from URI;
to avoid that, thought of keeping the last timestamp obtained, and only reconnect to the HTTP server if the timestamp is too old
on end each thread should send event "N3 fully prepared" for GUI;
join threads when all N3 source are fully prepared
Thread [main] (Suspended (breakpoint at line 83 in URICacheImpl)) URICacheImpl.getURITimeStamp(String, boolean) line: 83 URICacheImpl.getURITimeStamp(String) line: 78 ProjectUtils.computeTimeStamp(Project) line: 62 Project.compiledRulebaseLoadedFromCache(String) line: 696 Project.translateN32Drools(boolean) line: 868 Project.prepareDrools(boolean) line: 849 ApplicationKB.<init>() line: 93 ApplicationKB.instance() line: 73 Project.prepare() line: 1154 ProjectFactory.prepareProject(Project, URL, boolean) line: 291 ProjectFactory.restore(File, URL, boolean) line: 121 ProjectFactory.restore(File, boolean) line: 74 ProjectFactory.restoreAny(File, boolean) line: 347 ProjectFactory.restore(String, boolean) line: 58 ProjectFactory.restore(String) line: 65 TestDroolsQuery.setUp() line: 24 TestDroolsQuery(TestCase).runBare() line: 125 TestResult$1.protect() line: 106 TestResult.runProtected(Test, Protectable) line: 124 TestResult.run(TestCase) line: 109 TestDroolsQuery(TestCase).run(TestResult) line: 118 JUnit3TestReference.run(TestExecution) line: 130 TestExecution.run(ITestReference[]) line: 38 RemoteTestRunner.runTests(String[], String, TestExecution) line: 467 RemoteTestRunner.runTests(TestExecution) line: 683 RemoteTestRunner.run() line: 390 RemoteTestRunner.main(String[]) line: 197
still worries with the test suite : now 2 tests run for a long time 1000s or more , but do not fail !
Running n3_project.helpers.TestDroolsQuery is lasting 2000 s :
[INFO] Total time: 106 minutes 22 seconds
[INFO] Finished at: Fri Mar 25 14:12:25 CET 2011
In isolationin eclipse it lasts 1mn30 , already too long !
Also eulergui.gui.TestFacebookSearch does not print its elapsed time :(
Trying to relaunch inProjectGUI.<init> is not working :(((
Caused by: sun.awt.X11.XException: Cannot write XdndAware property
at sun.awt.X11.XDnDDropTargetProtocol.registerDropTarget(XDnDDropTargetProtocol.java:79)
at sun.awt.X11.XDropTargetRegistry.registerDropSite(XDropTargetRegistry.java:554)
at sun.awt.X11.XWindowPeer.addDropTarget(XWindowPeer.java:1633)
at sun.awt.X11.XComponentPeer.addDropTarget(XComponentPeer.java:1509)
at java.awt.dnd.DropTarget.addNotify(DropTarget.java:493)
at java.awt.Component.addNotify(Component.java:6688)
at java.awt.Container.addNotify(Container.java:2567)
at javax.swing.JComponent.addNotify(JComponent.java:4685)
at java.awt.Container.addNotify(Container.java:2578)
at javax.swing.JComponent.addNotify(JComponent.java:4685)
at java.awt.Container.addNotify(Container.java:2578)
at javax.swing.JComponent.addNotify(JComponent.java:4685)
at java.awt.Container.addNotify(Container.java:2578)
at javax.swing.JComponent.addNotify(JComponent.java:4685)
at java.awt.Container.addImpl(Container.java:1068)
at java.awt.Container.add(Container.java:927)
at n3_project.ProjectGUI.layoutFrame(ProjectGUI.java:308)
at n3_project.ProjectGUI.<init>(ProjectGUI.java:136)
at n3_project.ProjectGUI.newWindow(ProjectGUI.java:198)
at n3_project.ProjectGUI.main(ProjectGUI.java:160)
|
isListNil(statement) (boolean) true model.getStatementSet() (java.util.LinkedHashSet<E>) [_:list0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> "eeeeeeeeeee". , _:list0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest> <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil>. , <http://example.com#lab> <http://java.sun.com/method#setText> _:list0. ] |
Found regression in revision 2284 :
svn update -r 2284 mvn -Dmaven.test.skip=true --no-plugin-updates --offline package java -jar target/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar ~/src/deductions/n3_logical/person_import3.n3p |
DONE
BasicRuntime : removed log; now the Java package separator is from EulerGUI singleton.
Shoud be
:lab javam:setText ( "eeeeeeeeeee" ) .
, but no warning is produced :
==> :myWindow java:title "gggggggggggggggg" .
FactCount: 2
==> :lab a java:javax_swing_JLabel ; java:setText ( "eeeeeeeeeee" ) .
java.lang.NullPointerException
at n3_project.helpers.DeferredPropertyAssignment.assign(DeferredPropertyAssignment.java:60)
at n3_project.helpers.N3JavaMappingBuiltin.acceptTriple(N3JavaMappingBuiltin.java:799)
at n3_project.helpers.DroolsTripleHandler.acceptTriple(DroolsTripleHandler.java:161)
at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:609)
|
==> :lab a java:javax_swing_JLabel . ==> :myWindow javam:add :lab . ReflectionHelper.findMethod(): java.lang.NoSuchMethodException: javax.swing.JFrame.add(n3_project.helpers.Assignment)
RDF + XQuery :
http://demo.exist-db.org/exist/xquery.xml?q=.%2F%2Fsection[ft%3Aquery%28.%2F%2Ftitle%2C%20%27RDF%27%29]%20or%20.%2F%2Fsection[ft%3Aquery%28.%2C%20%27RDF%27%29]&id=3.3.6#3.3.6
Found tool resembling EulerGUI : JRDF :
http://code.google.com/p/jrdf/wiki/GettingStarted
Alas the GUI does not start ! Sent a mail to the list , just to check.
builtins do not include N3JavaMappingBuiltin :
[n3_project.helpers.CRUD_builtins@68a980fa, n3_project.helpers.ListBuiltins@5052d2c4, n3_project.helpers.MathBuiltins@6d8b6b0e]
Thread [main] (Suspended (breakpoint at line 182 in DroolsTripleHandler)) DroolsTripleHandler.acceptList(String, LinesAndCols, String, LinesAndCols, List<String>, List<LinesAndCols>, String, LinesAndCols) line: 182 ParserLink.visitAllURI(LineTrackingTripleHandler) line: 617 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) line: 284 N3SourcetoDrools.translate(N3Source, boolean, boolean) line: 241 N3toDroolsUpdater.translate(N3Source, boolean) line: 87 Project.translateToDrools(N3Source, boolean, boolean) line: 953 N3ConversionRefesher.updateKB(Project, N3Source) line: 129 N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 49 ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 73 Project.rethrowEventsPlease() line: 1328 ProjectGUI.newWindow(Project, boolean) line: 207 ProjectGUI.main(String[]) line: 160 |
To compare result s with EYE, after Jos' mail.
cd ~/src/eulersharp/2006/02swap/
java -cp /home/jmv/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar \
deductions.runtime.BatchRunner --nope http://eulersharp.sourceforge.net/2003/03swap/socrates.n3 \
--query http://eulersharp.sourceforge.net/2003/03swap/socratesF.n3
|
This works, but I must get rid of the standard output by setting the log to SEVERE.
http://www.agfa.com/w3c/Talks/2011/01swig/
http://repast.sourceforge.net/docs.html#
http://www.jedit.org/api/org/gjt/sp/jedit/gui/CompletionPopup.html
JavaScript functions :
function createInputWidgetFromClass( classURI, container ) function createInputWidgetFromResource( uri, container )
Since I'm now working on a more flexible way of using the N3 Swing rule base (see application-examples.html ), it's time to refactor this rule base .
All things below DONE
TODO : remove javapr:projection here in generic_gui_projection-rules.n3 :
{ ?CONTAINER gui:components ?COMPONENT . ?CONTAINER javapr:projection ?JCONTAINER . ?COMPONENT javapr:projection ?JCOMPONENT . } => { ?JCONTAINER javam:add ( ?JCOMPONENT ) . ?JCONTAINER gengui:hasComponent ?JCOMPONENT . _:d eg:trace ( "generic_gui_projection 6 >>> implement gui:components" ?JCONTAINER ?JCOMPONENT ?CONTAINER ?COMPONENT ) . }. |
Due to deferred Java method calls created by the framework, the Java method add will be called as soon as called object and argument are bound to Java objects.
Also gengui:hasComponent is useless, as it is used only in consequents of rules.
Also, this rule must be moved to generic_to_java-rules.n3 , like all rules refering to java* prefixes .
And for every pair of triples such as :
?JBUTTON a gengui:Button . ?FIELD javapr:projection ?JBUTTON . |
replace it with:
?FIELD a gengui:Button . |
An in the rule every occurence of ?JBUTTON should be replaced with ?FIELD .
So we will get rid of the javapr:projection predicate altogether.
This is the rule design pattern "Annotate the existing objects".
This pattern is already used in generic_to_java-rules.n3 , e.g. :
{ ?W a gengui:Panel. javapr:thisApplication app:platform app:Java . } => { ?W a java:javax-swing-JPanel } . |
person-app.n3 : tested Building Applications : How to reuse the swing-rules3 rule base
WIP : less ugly , less direct reference to Java calls, still works !
person-app.n3 : tested Building Applications : How to reuse the swing-rules3 rule base
WIP : ugly because direct reference to Java calls, but works !
( cf eulergui/html/application-examples.html )
Notes:
KO:
<http://jmvanel.free.fr/ontology/examples/person#WINDOW> <http://deductions.sf.net/generic_gui#hasComponent> _:sk_label_64 .
Works OK :
_:sk_JFRAME_44 <http://deductions.sf.net/generic_gui#hasComponent> _:sk_JPANEL_FORM_43 . <http://jmvanel.free.fr/ontology/examples/person#WINDOW> <http://jmvanel.free.fr/ontology/java_projection.owl#projection> _:sk_JFRAME_44 . |
Difficult to reproduce : SOLVED
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException at unif.TripleStoreDrools.store(TripleStoreDrools.java:45) at deductions.runtime.GUIKBAdapter.forwardGUIEventsToKB(GUIKBAdapter.java:97) at deductions.runtime.GUIKBAdapter.focusGained(GUIKBAdapter.java:125) at java.awt.AWTEventMulticaster.focusGained(AWTEventMulticaster.java:203) at java.awt.Component.processFocusEvent(Component.java:6178) at java.awt.Component.processEvent(Component.java:6045) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4652) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4482) at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850) |
true => { ?FORM gui:createFormFromClass foaf:Person . } .
TODO : should detect Java package separator .
java.lang.ClassNotFoundException: java-util-Date at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at java.lang.Class.forName0(Native Method) at java.lang.Class.forName(Class.java:169) at n3_project.helpers.N3JavaMappingBuiltin.acceptConsequent(N3JavaMappingBuiltin.java:561) at n3_project.helpers.DroolsTripleHandler.acceptConsequent(DroolsTripleHandler.java:229) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:743) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:274) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:239) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.doTranslateN32Drools(Project.java:908) at eulergui.project.Project.translateN32Drools(Project.java:869) at eulergui.project.Project.prepareDrools(Project.java:849) at eulergui.project.Project.doRunDrools(Project.java:804) at eulergui.project.Project.runDroolsTriples(Project.java:761) at eulergui.inference.drools.DroolsInferenceEngine.launch(DroolsInferenceEngine.java:27) |
svn propset svn:keywords 'Date Author' tasks.html
http://wiki.preshweb.co.uk/doku.php?id=svn:propset
Upload snapshot for revision 2273.
http://www.codingforums.com/ : recommanded by Ruset.
http://www.mkbergman.com/391/more-structure-more-terminology-and-hopefully-more-clarity/
http://contraintes.inria.fr/
http://www.w3.org/2000/04/maillog2rdf/email
Why is it that sites like http://www.w3.org/2000/01/sw/ are no more active ?
<jmv> It's because things happen here : http://www.w3.org/2001/sw/
TODO post in EulerGUI users : new embedded Java objects.
Twit:
Embedded Java objects in SemWeb rule engine EulerGUI : now this works:
{ pure N3 } => { :myLabel java:setText ("something happened" ?T)}
http://chatlogs.planetrdf.com/swig/2011-03-14.html
With Ubuntu 10.10 , I still have this error in the test suite :
sun.awt.X11.XException: Cannot write XdndAware property at sun.awt.X11.XDnDDropTargetProtocol.registerDropTarget(XDnDDropTargetProtocol.java:79) at sun.awt.X11.XDropTargetRegistry.registerDropSite(XDropTargetRegistry.java:554) at sun.awt.X11.XWindowPeer.addDropTarget(XWindowPeer.java:1633) at sun.awt.X11.XComponentPeer.addDropTarget(XComponentPeer.java:1509) at java.awt.dnd.DropTarget.addNotify(DropTarget.java:493) |
Let's build an application to manage business contacts. It's possible to reuse the ICAL RDF vocabulary , e.g. attendee below. But the Vevent class should be particularized into physical meetings, telephone calls, Internet based conference (chat, shared computer via VNC, shared document, ...).
cal:attendee rdf:type owl:ObjectProperty ; rdfs:label "ATTENDEE" ; rdfs:comment "The property defines an \"Attendee\" within a calendar component." , """ value type: CAL-ADDRESS""" ; spec:valueType "CAL-ADDRESS" ; rdfs:range cal:Value_CAL-ADDRESS ; rdfs:domain [ rdf:type owl:Class ; owl:unionOf ( cal:Valarm cal:Vevent cal:Vfreebusy cal:Vjournal cal:Vtodo ) ] . |
It's possible to import in batch or connect to an IMAP server for mails.
http://www.w3.org/2002/12/cal/
Commited in EulerGUI: eulergui/html/application-examples.html
This is a translation and enhancement of the seminal (!) post in french group deductions-fr "Applications exemples".
The user interaction is based on a simple semantics for user interaction, involving these concepts: CRUD data manipulations (CReate, Update, Remove), plus log, statistics, current tasks, represented by these imperative properties :
I propose to model declaratively user interaction with the concept of user transaction. A user transaction is a list of data manipulations.
A data manipulation is an elementary input from the user. There are four kinds of data manipulations for the two kinds of properties as defined in OWL (Properties "object" and properties "datatype"):
A data manipulation is associated with a subject and property in the OWL / RDF sense. Modification and destruction have in addition an object in RDF sense .
For example, adding a statement corresponds to the addition of an identifier article in a commercial order.
A creation of a new RDF identifier is the creation of a new bank account, for later making money transfers with it.
When you create a transaction via a rule, there is every possibility of the N3 language to add additional conditions. For example adding an ID article in a commercial order, we can restrict proposals to categories corresponding to the user's interests, or its past orders.
It remains only to create implementations for the language to user interaction through rules mixing Java and pure business. One can consider several implementations: Swing, GWT, SWT, command, etc..
To begin, one must write this small N3 vocabulary . We'll put it in the
project Deductions in owl/user_interaction.owl.n3
Here is an example of using the app:hasLogEntry predicate . Assume we are in the RHS of a rule (the consequent) . So a variable ?CONTACT, non existent in the left side of the rule (the antecedent) is a creation of a new identifier.
@prefix app: <http://eulergui.sf.net/ontology/application.owl.n3#>. :myApp app:log [ "Ajout d'un nouveau contact"@fr ?CONTACT ]. ?CONTACT a :Contact. |
Here is an example of using the app:hasStatistic predicate:
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#> . { _:d e:findall( ?CONTACT { ?CONTACT a :Contact } ?CONTACTS ). ?CONTACTS math:memberCount ?NB_CONTACT. } => { ?S a app:Statistic. ?S rdfs:label "Nombre de contacts: "@fr . ?S app:information ?NB_CONTACT . :myApp app:hasStatistic ?S. }. |
It's possible to reuse the swing-rules3 rule base, with small modification to make it more flexible.
Currently, the infered GUI is only partly MVC (Model-View-Controler). The controler is provided by the rule base. However, the Views do not (yet) listen to the Model ( which is, for this framework , the RDF Knowledge Base).
The swing-rules3 rule base gathers all properties that are reachable from an RDF node, taking in account class assertions, domains, ranges , etc. However user interaction needs more flexibility:
For point 1, the trick is to design a class specific for the user interaction, plus rules to interpret the user interaction data, and transform it into regular ontolgy data that is stored in the Knowledge Base.
For point 2, we would like to write verification as pure domain rules, like this :
@prefix ded: <http://deductions.sf.net/owl/events#> . @prefix : <http://jmvanel.free.fr/ontology/examples/person#> . # <http://deductions.sf.net/owl/events#exception> { ?P a :Person . ?P :name "bush" . } => { ?E a ded:Exception ; rdfs:label " is already retired!" ; rdf:subject ?P ; rdf:predicate :name . } . |
Something close to this used to work in the very first version of the framework, where the focus lost listener was implemented 100% in Java.
It is possible to add in the Swing rule base rules to match ded:Exception, retrieve the associated input field widget, and reestablish the former value in the widget and the KB.
For point 3, the current framework with embedded Java objects allows to instatiate any custom widget , add it to relevant panel, and add it as a listener.
A typical inference flow :
application => main window and panels for data manipulations, log, statistics, current tasks user => create Form From Class ?C => create new RDF ID => create input widget for new RDF ID in data manipulations panel |
The user action to create a Form From Class ?C can be done in a specific button or menu entry, whose callback simply asserts the imperative RDF in the KB. Or, for the developer, the imperative RDF can be entered in the N3 shell.
The predicate in form-rules.n3 is used like this :
?FORM gui:createFormFromClass ?CLASS .
Currently one gets this exception when clicking on Tools / Snapshot of the user KB in N3 editor :
Exception in thread "AWT-EventQueue-0" com.hp.hpl.jena.n3.turtle.TurtleParseException: Encountered " <BLANK_NODE_LABEL> "_:sk_FORM_3 "" at line 12, column 15. Was expecting one of: "a" ... <IRIref> ... <PNAME_NS> ... <PNAME_LN> ... "=" ... "=>" ... at com.hp.hpl.jena.n3.turtle.ParserTurtle.parse(ParserTurtle.java:41) at com.hp.hpl.jena.n3.turtle.TurtleReader.readWorker(TurtleReader.java:21) at com.hp.hpl.jena.n3.JenaReaderBase.readImpl(JenaReaderBase.java:101) at com.hp.hpl.jena.n3.JenaReaderBase.read(JenaReaderBase.java:35) at n3_project.ResultEditorN3Action.convertReaderIntoN3(ResultEditorN3Action.java:98) at eulergui.tools.LaunchUserWMN3Editor.actionPerformed(LaunchUserWMN3Editor.java:41) at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995) |
Ha ha, Jena grunts at this :
_:sk_WINDOW_1 _:sk_FORM_3 <http://jmvanel.free.fr/ontology/examples/person#Person> .
Apparently predicate should not be a blank node ! I'll have to change the Swing rule base. This was an attempt to make a ternary association. But I may have to change the Drools/N3 engine, because I'm not sure that matching lists really works with the Drools/N3 engine.
I'll have to think about this when I refactor the Swing rule base.
you need to put in .xinitrc this two lines
<rszeno> errorlog=path to logs
<rszeno> exec >> $errorlog 2>&1
<rszeno> before exec kde window manager
http://www.karlrunge.com/x11vnc/faq.html#faq-accept-opt
x11vnc -accept popup
TODO : does not work:
@prefix java: <http://java.sun.com/class#> . @prefix javam: <http://java.sun.com/method#> . true => { :x javam:setVisible ( true ) ; javam:setSize ( 400 200 ) ; javam:setTitle ( "generated by rule" ) . :x a java:javax_swing_JFrame . } . |
Hors d'oeuvre : le shell N3 :
==> { :a :a :a } => { :b :b :b } . ==> :a :a :a . ==> :b ?X ?Y . |
test/true_antecedent_java.n3 :
true => { ?x a java:javax_swing_JFrame; javam:setVisible ( true ); javam:setSize ( 400 200 ); javam:setTitle ( "generated by rule" ) . } . |
Montrer la traduction Drools
information sens N3 ==> Java
Montrer src/main/resources/eulergui/inference/drools/impl/infrastructure-rules.drl
Montrer swing-rules3 : nouveau menu "outils"
règle dans generic_gui_projection-rules.n3 :
{ ?CONTAINER gui:components ?COMPONENT . ?CONTAINER javapr:projection ?JCONTAINER . ?COMPONENT javapr:projection ?JCOMPONENT . } => { ?JCONTAINER javam:add ( ?JCOMPONENT ) . ?JCONTAINER gengui:hasComponent ?JCOMPONENT . } .
information sens Java ==> N3 : via GUIKBAdapter
http://en.wikipedia.org/wiki/Extensible_Resource_Descriptor
generic_gui_projection-rules.n3 : remove tests in antecedent involving abstract Java classes, e. .g :
?JCONTAINER a java:java_awt_Container.
?JCOMPONENT a java:java_awt_Component
Now the new embedded Java objects architecture works in EulerGUI !!!
( it also works with the current architecture with JavaScript engine )
I discovered the map feature : https://sourceforge.net/projects/eulergui/files/eulergui/stats/map
also OS : https://sourceforge.net/projects/eulergui/files/eulergui/stats/os
<jmv> ( click on grey rectangle "TOP COUNTRY" or "TOP OS"
https://sourceforge.net/projects/eulergui/files/eulergui/stats/map?dates=2011-01-01%20to%202011-03-16
https://sourceforge.net/projects/joafip/files/stats/map?dates=2011-01-01%20to%202011-03-16
@prefix java: <http://java.sun.com/class#> . @prefix javam: <http://java.sun.com/method#> . :x a java:javax-swing-JFrame . :x javam:setVisible ( true ) .
public void deductions.runtime.GUIKBAdapter.add(java.awt.Container,java.awt.Component,int)
FIXED java.awt.Window.setSize(int,int) in ReflectionHelper.findMethod(): substitute non-Object type
TODO: take care of :
ReflectionHelper.findMethod() 4: java.lang.NoSuchMethodException: deductions.runtime.GUIKBAdapter.add(javax.swing.JPanel, javax.swing.JLabel, java.lang.Integer)
I want to accumulate instances of MyClass in the WM, whose property "name" is contained in $LIST , which is a List of Strings.
accumulate( $AS : MyClass( $OO contains $AS.name ) )
$ARR : ArrayList() from collect ( MyClass( $LIST contains name ) )
Drools says : Unable to create Field Extractor for '$LIST of '[ClassObjectType class=MyClass
$ARGS_OBJ : ArrayList() from collect ( Assignment( name memberOf $OO ) )
$ARR: ArrayList() from collect ( MyClass( name memberOf $LIST ) )
16 mars 2011 17:39:02 eulergui.inputs.N3SourceFromXML_Gloze convertToN3 INFO: _N3SourceFromXML_Gloze.prepare(): gloze =_ new Gloze() N3Source.getKnownURIPrefixes(): parsing had not been done. N3Source.getKnownURIPrefixes(): parsing had not been done. N3Source.getKnownURIPrefixes(): parsing had not been done. N3Source.getKnownURIPrefixes(): parsing had not been done. 16 mars 2011 17:39:04 eulergui.inputs.N3SourceFromXML_Gloze convertToN3 INFO: Namespaces XML extraits depuis la sources XML "http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml" 16 mars 2011 17:39:04 eulergui.inputs.N3SourceFromXML_Gloze convertToN3 INFO: {http://maven.apache.org/POM/4.0.0=http://maven.apache.org/maven-v4_0_0.xsd} 16 mars 2011 17:39:04 eulergui.inputs.N3SourceFromXML_Gloze convertToN3 INFO: gloze.target=/tmp/translation-33405222027830969.n3 16 mars 2011 17:39:04 eulergui.inputs.N3SourceFromXML_Gloze convertToN3 INFO: Démarrage de Gloze.main() avec les arguments http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd Exception in thread "main" java.lang.IllegalAccessError: tried to access field com.hp.gloze.Gloze.target from class eulergui.inputs.N3SourceFromXML_Gloze at eulergui.inputs.N3SourceFromXML_Gloze.convertToN3(N3SourceFromXML_Gloze.java:110) at eulergui.inputs.N3SourceFromXML_Gloze.doUpdate(N3SourceFromXML_Gloze.java:148) at eulergui.project.N3Source.update(N3Source.java:405) at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:88) at eulergui.gui.controller.N3ConversionRefesher.n3SourceAdded(N3ConversionRefesher.java:48) at eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:73) at eulergui.project.Project.rethrowEventsPlease(Project.java:1328) at n3_project.ProjectGUI.newWindow(ProjectGUI.java:207) at n3_project.ProjectGUI.main(ProjectGUI.java:160)
Solved:
ReflectionHelper.findMethod(): java.lang.NoSuchMethodException: javax.swing.JFrame.setSize(java.lang.Number) ReflectionHelper.findMethod(): java.lang.NoSuchMethodException: javax.swing.JFrame.addWindowListener(deductions.runtime.GUIKBAdapter)
Testing embedded Java objects - WIP
- new DeferredMethodCall for 0 to 3 arguments, object or literal
- TODO: change Drools translator to actually populate the KB with DeferredMethodCall objects
http://www.researchgate.net/profile/Cedric_Becquey/
An issue is that EulerGUI should warn when such triples are not consistent with Java method and class :
?JEVENT a java:java_awt_event_FocusEvent ; # AWTEvent ; # Event ; javap:ID 1005 ; # 1005 means FOCUS_LOST in Swing class FocusEvent
java.lang.NullPointerException at n3_project.helpers.URLHelper.getURI_prefix(URLHelper.java:29) at unif.Instanciator.getNameSpace(Instanciator.java:572) at unif.N3JavaHelper.isJavaPropertyOrIdentifier(N3JavaHelper.java:86) at n3_project.helpers.N3JavaMappingBuiltin.acceptConsequent(N3JavaMappingBuiltin.java:545) at n3_project.helpers.DroolsTripleHandler.acceptConsequent(DroolsTripleHandler.java:229) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:775) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:274) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:239) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.doTranslateN32Drools(Project.java:908) at eulergui.project.Project.translateN32Drools(Project.java:869) at eulergui.project.Project.prepareDrools(Project.java:849) at eulergui.project.Project.doRunDrools(Project.java:804) at eulergui.project.Project.runDroolsTriples(Project.java:761) at eulergui.inference.drools.DroolsInferenceEngine.launch(DroolsInferenceEngine.java:27) at eulergui.gui.inference.RunActionGeneric$EngineSwingWorker.doInBackground(RunActionGeneric.java:117) at eulergui.gui.inference.RunActionGeneric$EngineSwingWorker.doInBackground(RunActionGeneric.java:92) at javax.swing.SwingWorker$1.call(SwingWorker.java:277) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at javax.swing.SwingWorker.run(SwingWorker.java:316) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662)
_:sk_JLABEL_DT_28 ; reference == null
Now this triple
?JEVENT javap:ID 1005 .
is translated as:
$JEVENT_reference : java.awt.Event( ID == 1005 )
whenever ?JEVENT is already known as a Java object.
The test suite PASSES , including eulergui.gui.TestN3FormatForProject !
[ERROR] - 2011-03-15 18:15:17,962 [main] com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler (RDFDefaultErrorHandler.java:error:40)http://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/test/ontologies/cv.rdfs(line 110 column 3): {E213} Connection reset |
The hypothesis is now that the thread to watch URI modifications interferes with normal project download.
A remedy could be to postpone the thread to watch URI modifications by an arbitray time, or , even better, to deactivate until normal project download is over.
17 downloads at 17:00 CET ; top : US 29% ; W$ 71% https://sourceforge.net/projects/eulergui/files/eulergui/1.8/eulergui-1.8-jar-with-dependencies.jar/stats/timeline
Announces on Jena, Drools, Pellet, CWM, semantic-web@w3.org, Protégé , FuXi, EulerGUI french and english private lists, Twitter.
TODO
grep -l X11.XException target/surefire-reports/* | grep -v output.txt | grep -v '.xml'
COMMIT:
doc.: add Maven 3, Semantic Web
TODO: need to have predicates for SPARQL updates; also a setting and binding for the generated application.
The Simple Widget Markup Language (SWM)
http://swm.deri.org/
http://mondeca.wordpress.com/tag/gwt/
Is there an utility telling me when some dependencies ( or Maven plugins ) are updatable, that is, they have newer versions available ?
http://mojo.codehaus.org/versions-maven-plugin/display-dependency-updates-mojo.html
But no similar stuff for Maven plugins , or does it also process them ?
<bentmann> you might want to check the other plugin goals
[INFO] The following dependencies in Dependencies have newer versions: [INFO] commons-cli:commons-cli ................................... 1.0 -> 1.2 [INFO] commons-logging:commons-logging ......... 1.0.4 -> 99.0-does-not-exist [INFO] hsqldb:hsqldb ...................................... 1.8.0.10 -> 1.7.2 [INFO] junit:junit ........................................... 3.8.1 -> 4.8.2 [INFO] log4j:log4j ......................................... 1.2.14 -> 1.2.16 [INFO] opensymphony:oscache .................................... 2.4 -> 2.4.1 [INFO] org.drools:drools-api .......................... 5.1.1 -> 5.2.0-alpha1 [INFO] org.drools:drools-compiler ..................... 5.1.1 -> 5.2.0-alpha1 [INFO] org.eclipse.emf:common .................. 2.4.0.v200902171115 -> 2.4.0 [INFO] org.eclipse.emf:ecore ................... 2.4.2.v200902171115 -> 2.4.2 [INFO] org.eclipse.emf.ecore:xmi ... [INFO] 2.4.1.v200902171115 -> 2.3.0-v200706262000 [INFO] org.eclipse.uml2:common ... 1.4.0.v200805131030 -> 1.3.0-v200706251652 [INFO] org.eclipse.uml2:uml ...... 2.2.2.v200811051031 -> 2.1.0-v200706251652 [INFO] parser4j:all ......................................... trunk2 -> trunk |
mvn versions:display-plugin-updates ... [INFO] The following plugin updates are available: [INFO] maven-surefire-plugin .................................. 2.7.2 -> 2.8 [INFO] org.codehaus.mojo:build-helper-maven-plugin .............. 1.1 -> 1.5 [INFO] org.codehaus.mojo:buildnumber-maven-plugin . 1.0-beta-3 -> 1.0-beta-4 [INFO] org.codehaus.mojo:exec-maven-plugin ...................... 1.1 -> 1.2 [INFO] [WARNING] The following plugins do not have their version specified: [WARNING] org.apache.felix:maven-bundle-plugin ................... (unknown) [WARNING] maven-assembly-plugin .................................. (unknown) [WARNING] maven-compiler-plugin .................................. (unknown) [WARNING] maven-eclipse-plugin ................................... (unknown) [WARNING] org.codehaus.mojo.webstart:webstart-maven-plugin ....... (unknown) |
COMMIT:
Upgrade Maven plugins to latest versions : maven-surefire-plugin, build-helper-maven-plugin, buildnumber-maven-plugin, exec-maven-plugin
I finally found the recipe for release:perform with Maven 3 ! :)
<build> <extensions> <extension> <groupId>org.apache.maven.wagon</groupId> <artifactId>wagon-ssh</artifactId> <version>1.0-beta-7</version> </extension> </extensions> |
[WARNING] Some problems were encountered while building the effective model for eulergui:eulergui:jar:1.9-SNAPSHOT [WARNING] 'build.plugins.plugin.version' for org.codehaus.mojo.webstart:webstart-maven-plugin is missing. @ line 278, column 15 [WARNING] 'build.plugins.plugin.version' for org.apache.felix:maven-bundle-plugin is missing. @ line 432, column 11 [WARNING] 'build.plugins.plugin.version' for org.apache.maven.plugins:maven-eclipse-plugin is missing. @ line 421, column 15 [WARNING] [WARNING] It is highly recommended to fix these problems because they threaten the stability of your build. [WARNING] [WARNING] For this reason, future Maven versions might no longer support building such malformed projects. [WARNING] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] Building eulerGUI 1.9-SNAPSHOT [INFO] ------------------------------------------------------------------------ [WARNING] The POM for org.apache.lucene:lucene-core:jar:2.3.1 is invalid, transitive dependencies (if any) will not be available, enable debug logging for more details [WARNING] The artifact xstream:xstream:jar:1.2 has been relocated to com.thoughtworks.xstream:xstream:jar:1.2
[INFO] [DEBUG] Using connector WagonRepositoryConnector with priority 0 for sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2 as jmvanel,eulergui [INFO] Uploading: sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2/eulergui/eulergui/1.8/eulergui-1.8.jar [INFO] [DEBUG] Could not set user agent for wagon org.apache.maven.wagon.providers.ssh.jsch.SftpWagon: java.lang.NoSuchMethodException: org.apache.maven.wagon.providers.ssh.jsch.SftpWagon.setHttpHeaders(java.util.Properties) [INFO] [INFO] Uploading: sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2/eulergui/eulergui/1.8/eulergui-1.8.pom [INFO] [INFO] [INFO] ------------------------------------------------------------------------ [INFO] [INFO] BUILD FAILURE [INFO] [INFO] ------------------------------------------------------------------------ [INFO] [INFO] Total time: 13:22.273s [INFO] [INFO] Finished at: Mon Mar 14 16:34:20 CET 2011 [INFO] [INFO] Final Memory: 51M/388M [INFO] [INFO] ------------------------------------------------------------------------ [INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project eulergui: Failed to deploy artifacts: Could not transfer artifact eulergui:eulergui:jar:1.8 from/to repository.eulergui.sf.net (sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2): Cannot connect. Reason: Auth fail -> [Help 1] [INFO] org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project eulergui: Failed to deploy artifacts: Could not transfer artifact eulergui:eulergui:jar:1.8 from/to repository.eulergui.sf.net (sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2): Cannot connect. Reason: Auth fail |
[INFO] 1) No implementation for org.apache.maven.wagon.Wagon annotated with @Named(value=sftp) was bound.
[INFO] [ERROR] Failed to execute goal org.apache.maven.plugins:maven-deploy-plugin:2.5:deploy (default-deploy) on project eulergui: Failed to deploy artifacts/metadata: No connector available to access repository repository.eulergui.sf.net (sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2) of type default using the available factories WagonRepositoryConnectorFactory -> [Help 1]
https://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html
http://repo1.maven.org/maven2/org/apache/maven/wagon/wagon-ssh/
DISPLAY=:1 LANG=en ~/apps/apache-maven-3.0.2/bin/mvn -X release:perform -DconnectionUrl=scm:svn:https://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.8/eulergui/
rm wget.dot
mv pom.xml.edited java_find_method_with_parameter_drools.n3 java_find_method_with_parameter.n3 quick_tests_mvn3.sh test/new_source.n3 test/instances.n3 examples/herbivores.owl examples/java_find_method_with_parameterQ.n3
Cannot prepare the release because you have local modifications :
[wget.dot:unknown]
[quick_tests_mvn3_pom_new.sh:unknown]
[quick_tests_deductions_local.sh:unknown]
[java_find_method_with_parameter_drools.n3:unknown]
[OWL+SWRL:unknown]
[pom.xml.edited:unknown]
[java_find_method_with_parameter.n3:unknown]
[pom_new.xml:unknown]
[quick_tests_mvn3.sh:unknown]
[test/new_source.n3:unknown]
[test/instances.n3:unknown]
[src/main/resources/eulergui_save.properties:unknown]
[src/main/resources/eulergui/gui/controller/test-rules_var.n3:unknown]
[examples/herbivores.owl:unknown]
[examples/java_find_method_with_parameterQ.n3:unknown]
N3JavaMappingBuiltin : reference to DroolsTripleHandler was not set prior to running
extracted the algorithmic part of N3ParsingExceptionProcessor, keeping only the GUI aspect.
TODO : this does not work with Drools translation :
true => { :x a java:javax-swing-JFrame . :x javam:setVisible ( true ) . } . |
true => { ?x a java:javax-swing-JFrame . ?x javam:setVisible ( true ) . } . |
then is not produced :
when javax.swing.JFrame "<http://example.com#x>"_reference = new javax.swing.JFrame (); insert( new Assignment( "<http://example.com#x>".toString(), "<http://example.com#x>"_reference )); DeferredPropertyAssignment dpa_x2 = new DeferredPropertyAssignment(); dpa_x2.setSubject("<http://example.com#x>".toString() ); dpa_x2.setPredicate( "<http://java.sun.com/method#setVisible>" ); dpa_x2.setObject("true"); insert( dpa_x2 ); end |
grep -l X11.XException target/surefire-reports/* | grep -v output.txt | grep -v '.xml'
There is flexibility for deployment of an EG runtime.
Here are the options for the pure expert system part ( business rules + possibly some RDFS + OWL generic rules ).
Now for database access here are the options:
And for user interface generation here are the options. This is very promising, but it's work in progress.
we are finishing the new architecture for embedding Java objects in KB, so that they are activable by rules.
N3ConversionRefesher now has a field updateDroolsRuleBase ( false by default) to enable dynamic addition of rules ;
tested in a empty BasicRuntime :
==> { :a :a :a } => { :b :b :b } . ==> :a :a :a . ==> :b ?X ?Y .
PENDING:
There is a problem with N3 source from string, in the N3 shell, when the same URI is re-used; the compilationTimestamps Map in N3toDroolsUpdater is set the first time; then getTimeStamp() returns 0, so outdated() returns false.
As a consequence the new line in the shell in not processed.
Possible remedy:
Thread [main] (Suspended) N3toDroolsUpdater.getTimeStamp(String) line: 129 N3toDroolsUpdater.getTimeStamp(N3Source) line: 109 N3toDroolsUpdater.outdated(N3Source) line: 134 N3toDroolsUpdater.uptodate(N3Source) line: 143 N3toDroolsUpdater.translate(N3Source, boolean) line: 79 Project.translateToDrools(N3Source, boolean, boolean) line: 953 N3ConversionRefesher.updateKB(Project, N3Source) line: 129 N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 49 ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 73 Project.addN3Source(N3Source, boolean) line: 309 Project.addN3Source(N3Source) line: 290 BasicRuntime.processTriplesOrRules(String) line: 147 BasicRuntime.executeLine(String) line: 136 BasicRuntime.eventLoop() line: 100 BasicRuntime.main(String[]) line: 62 |
==> { :a :a :a } => { :b :b :b } .
==> :a :a :a .
TripleStoreDrools.store( <http://user_input#a> <http://user_input#a> <http://user_input#a> .
==> :b ?X ?Y .
http://main.csregistry.org/tiki-index.php?page=my+account&bl=y
I'll do the release this week end , no hurry ...
TODO
maybe in the domain of contact management (PIM) : FOAF + nepomuk ontologies
Re-working on the N3 shell :) .
The N3 shell is a laboratory for exploring application generation , generally N3 <--> Java interaction , and other stuff. These extensions are planned :
* integrate in the GUI, probably in a tab
* keep all N3 input from user in an N3 file
* have commands for actions in EulerGUI: open N3 source, launch inference engine X, etc
% cat ~/bin/n3shell java -cp $HOME/.m2/repository/eulergui/eulergui/1.8-SNAPSHOT/eulergui-1.8-SNAPSHOT-jar-with-dependencies.jar deductions.runtime.BasicRuntime $* % n3shell examples/java_gen.n3p
Enter N3 / RDF triples, or queries like: :x ?P ?O . , line by line; empty line to stop.
Bound prefixes: [:, e:, java:, javam:, os:, owl:, rdfs:, xsd:, :, java:, javam:]
:x a java:javax-swing-JFrame . :x javam:setVisible ( true ) .
Something is missing in N3 - Java mix: this should instantiate and display the window. This happens through rules, but not through plain triples like here :( .
Thinking more, this cannot be by default in EulerGUI; otherwise any Java triples in any of the N3 sources will trigger lots of Java calls right on opening the project !
:x pimo:attendee :a , :b . ?A foaf:knows ?B .
also retry once URLK download for XMI sources (for connection reset )
INFO: XMI or UMLT parsed: http://deductions.svn.sourceforge.net/svnroot/deductions/n3/extlibrary.ecore org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: java.net.SocketException: Connection reset at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397) at eulergui.inputs.XMIToN3Converter.loadECoreURI(XMIToN3Converter.java:236) at eulergui.inputs.XMIToN3Converter.loadEcoreURIAndTranslateToN3(XMIToN3Converter.java:69) at eulergui.inputs.XMIToN3Converter.loadURIAndTranslateToN3(XMIToN3Converter.java:55) at eulergui.inputs.N3SourceFromXMI.prepare(N3SourceFromXMI.java:51) at eulergui.project.Project.setLocation(Project.java:115) at eulergui.project.Project.setUri(Project.java:169) at eulergui.project.ProjectFactory.prepareProject(ProjectFactory.java:285) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:121) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:217) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:50) at n3_project.ProjectGUI.main(ProjectGUI.java:161) |
I'm trying something not so trivial:
when network is not reachable the remote N3 sources are shown as buttons ; download later when network is reachable again;
generally I try to make a few things more robust before release ...
<rszeno> this is where caching is a good thing, :)
well, there is no file caching now for downloaded things ; except for really long things : compiled Drools rule bases; "compiled" XSD 's .
There is already a loop in a background thread that checks file or URL timestamp every 0.5 s ; I leverage on that.
However there is a cache , for ownloaded things, for the duration of the session.
Thread [N3 sources modification Checker] (Suspended (breakpoint at line 83 in RDFToN3Converter)) RDFToN3Converter.getN3FromRDFSynchronously(String) line: 83 RDFToN3Converter.getN3FromRDF(String) line: 41 N3SourceFromRDF.doUpdate() line: 157 N3SourceFromRDF(N3Source).update() line: 408 N3SourceFromRDF(N3Source).parseResult() line: 103 N3ConversionRefesher.updateKB(Project, N3Source) line: 123 N3ConversionRefesher.n3SourceChanged(Project, N3Source) line: 41 ProjectChangeSupport.fireN3SourceChanged(Project, N3Source) line: 139 Project.fireN3SourceChanged(N3Source) line: 1364 URIModificationChecker.checkN3Source(N3Source) line: 117 URIModificationChecker.run() line: 70 Thread.run() line: 662 |
http://www.w3.org/2001/XMLSchema#
http://jmvanel.free.fr/ontology/software_applications.owl#
COMMIT: rules-documentor.n3 : enhance : when ones documents a property, the output containing a skeleton documetation becomes empty .
There is a rule base that acts as a helper for documenting a rule base. Here a how-to. We may later add a button to facilitate that even more in EulerGUI.
First create an EulerGUI project with all the rules URI's you want to document, plus rules-documentor.n3 rules and as a query rules-documentorQ.n3 . This can be done e.g. by such a command line :
% eulergui generic_gui_projection-rules.n3 generic_to_java-rules.n3 rules-documentor.n3 --query rules-documentorQ.n3
A project containing all the rules you want to document can also be imported as a subproject.
Then click on Tools / Add all referred ontologies; this way you retrieve all definitions of properties and classes for the used prefixes.
Then you run the project with Euler ; this is very quick :
#ENDS 140 [msec] TC=136 TP=544 BC=0 BP=223 PM=0 CM=0 FM=0 AM=0
Look at the output of the inference: every Property that has no
documentation, at least with rdfs:comment
will appear. Now click
on the second yellow button on the top right; you'll see that every
undocumented RDF Property has gotten a skeleton documentation like this :
app:hasWindow a rdf:Property ; rdfs:comment "???" ; rdfs:domain "???" ; rdfs:label "???" ; rdfs:range "???" . |
The next step is to save this output of the inference in a non temporary
file, and add it to the project. Then, of course, you have to complete by hand
the "???" strings, and URI's for RDFS label and range. You should also change
rdf:Property into owl:DatatypeProperty
or
owl:DatatypeProperty
, as appropriate.
Then, for a check, you can re-run the project with Euler; every Property
that has been completed by hand, at least with rdfs:comment
, will
not appear in the output.
And the cool thing with that is: N3 rules (rules-documentor.n3) process N3 rules to create N3 output !
To think more: how to design an RDF graph for Simulation data along these lines ?
:s a :SimulationSpecification ; rdfs:label "Simulation of multiple pendulum" ; :gravitation "9.81" ; simulationEngine <http://ptolemy.eecs.berkeley.edu/> . |
Idea: build the equivalent of Spring configuration in N3.
http://www.semanticoverflow.com/
pom.xml : upgraded some Maven plugins, by adding missing versions: buildnumber-maven-plugin, maven-jar-plugin, exec-maven-plugin, maven-source-plugin; tested with Maven 3.0.2 .
Uploaded an EulerGUI snapshot at Révision 2206
http://java.dzone.com/articles/upgrading-maven-3
doc : https://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html
TODO
testFocusLost(deductions.runtime.TestRulesForUserEvents) Time elapsed: 0.624 sec <<< ERROR! java.lang.RuntimeException: ERROR in restore( URL http://deductions.svn.sourceforge.net/svnroot/deductions/n3/person_test.n3p at eulergui.project.ProjectFactory.restore(ProjectFactory.java:229) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:189) at deductions.runtime.TestRulesForUserEvents.getTestProjectFromURL(TestRulesForUserEvents.java:187) at deductions.runtime.TestRulesForUserEvents.testFocusLost(TestRulesForUserEvents.java:234) Caused by: java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.MeteredStream.read(MeteredStream.java:116) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.nio.cs.StreamDecoder.readBytes(StreamDecoder.java:264) at sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:306) at sun.nio.cs.StreamDecoder.read(StreamDecoder.java:158) at java.io.InputStreamReader.read(InputStreamReader.java:167) at java.io.BufferedReader.read1(BufferedReader.java:185) at java.io.BufferedReader.read(BufferedReader.java:261) at java.io.BufferedReader.fill(BufferedReader.java:136) at java.io.BufferedReader.readLine(BufferedReader.java:299) at java.io.BufferedReader.readLine(BufferedReader.java:362) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:214) |
In project person_import3.n3p :
// drools compile Time: 0 ms// drools fireAllRules: 381 ms, N3SourcetoDrools.queryTripleResults(): 489 Mar 7, 2011 5:25:47 PM n3_project.helpers.N3SourcetoDrools launchDroolsKeepWM INFO: result Triples: 489 [ERROR] - 2011-03-07 17:25:48,053 [AWT-EventQueue-1] n3_project.ResultManagement (ResultManagement.java:displayStandardError:190) java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.MeteredStream.read(MeteredStream.java:116) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664) at n3_project.IOManager.copy(IOManager.java:190) at n3_project.IOManager.getLocalCache(IOManager.java:169) at n3_project.IOManager.getLocalCache(IOManager.java:148) at eulergui.project.N3Source.getLocalCache(N3Source.java:566) at eulergui.project.N3Source.getLocalN3(N3Source.java:573) at eulergui.drools_engine.ParserLink.parse(ParserLink.java:139) at eulergui.drools_engine.ParserLink.parseAndUpdateSource(ParserLink.java:178) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:238) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.doTranslateN32Drools(Project.java:909) at eulergui.project.Project.translateN32Drools(Project.java:885) at eulergui.project.Project.prepareDrools(Project.java:850) at eulergui.project.Project.doRunDrools(Project.java:805) |
In project ecore2.n3p :
INFO: XMI or UMLT parsed: http://deductions.svn.sourceforge.net/svnroot/deductions/n3_logical/extlibrary.ecore org.eclipse.emf.ecore.resource.impl.ResourceSetImpl$1DiagnosticWrappedException: java.net.SocketException: Connection reset at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.handleDemandLoadException(ResourceSetImpl.java:315) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.demandLoadHelper(ResourceSetImpl.java:274) at org.eclipse.emf.ecore.resource.impl.ResourceSetImpl.getResource(ResourceSetImpl.java:397) at eulergui.inputs.XMIToN3Converter.loadECoreURI(XMIToN3Converter.java:236) at eulergui.inputs.XMIToN3Converter.loadEcoreURIAndTranslateToN3(XMIToN3Converter.java:69) at eulergui.inputs.XMIToN3Converter.loadURIAndTranslateToN3(XMIToN3Converter.java:55) at eulergui.inputs.N3SourceFromXMI.prepare(N3SourceFromXMI.java:51) at eulergui.project.Project.setLocation(Project.java:115) at eulergui.project.Project.setUri(Project.java:169) at eulergui.project.ProjectFactory.prepareProject(ProjectFactory.java:267) at eulergui.project.ProjectFactory.restore(ProjectFactory.java:120) |
DONE
add Package "infrastructure_rules" in ruleBase only if is not already there ( NOTE; had NullPointerException in ClassFieldReader.getIndex() line: 78 )
Fixed TestDroolsQuery , after regression due to bad change in literal processing in N3 terms; added unit test in TestReasoning.
We still have these random errors in TestGenericGuiGeneration, TestGenericGuiGenerationInsertLogical, TestSwingGeneration .
Must kill these random errors !!!
I had this NPE with Drools :
Daemon Thread [SwingWorker-pool-4-thread-1] (Suspended (exception NullPointerException)) ClassFieldReader.getIndex() line: 78 LeftTupleIndexHashTable.<init>(int, float, AbstractHashTable$FieldIndex[]) line: 64 LeftTupleIndexHashTable.<init>(AbstractHashTable$FieldIndex[]) line: 51 SingleBetaConstraints.createBetaMemory(RuleBaseConfiguration) line: 176 JoinNode(BetaNode).createMemory(RuleBaseConfiguration) line: 400 ConcurrentNodeMemories.createNodeMemory(NodeMemory) line: 94 ConcurrentNodeMemories.getNodeMemory(NodeMemory) line: 73 ReteooStatefulSession(AbstractWorkingMemory).getNodeMemory(NodeMemory) line: 1521 JoinNode.assertObject(InternalFactHandle, PropagationContext, InternalWorkingMemory) line: 101 CompositeObjectSinkAdapter.doPropagateAssertObject(InternalFactHandle, PropagationContext, InternalWorkingMemory, ObjectSink) line: 450 CompositeObjectSinkAdapter.propagateAssertObject(InternalFactHandle, PropagationContext, InternalWorkingMemory) line: 378 ObjectTypeNode.assertObject(InternalFactHandle, PropagationContext, InternalWorkingMemory) line: 190 EntryPointNode.assertObject(InternalFactHandle, PropagationContext, ObjectTypeConf, InternalWorkingMemory) line: 145 ReteooStatefulSession(AbstractWorkingMemory).insert(InternalFactHandle, Object, Rule, Activation, ObjectTypeConf) line: 1174 ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule, Activation) line: 1123 ReteooStatefulSession(AbstractWorkingMemory).insert(Object) line: 917 N3SourcetoDrools.addInfrastructureObjectsInWM() line: 544 N3SourcetoDrools.launchDrools() line: 535 N3toDroolsUpdater.launchDrools() line: 49 Project.doRunDrools(boolean) line: 810 Project.runDroolsTriples(boolean) line: 762 DroolsInferenceEngine.launch() line: 27 RunActionGeneric$EngineSwingWorker.doInBackground() line: 117 RunActionGeneric$EngineSwingWorker.doInBackground() line: 1 SwingWorker$1.call() line: 277 FutureTask$Sync.innerRun() line: 303 SwingWorker$2(FutureTask<V>).run() line: 138 RunActionGeneric$EngineSwingWorker(SwingWorker<T,V>).run() line: 316 ThreadPoolExecutor$Worker.runTask(Runnable) line: 886 ThreadPoolExecutor$Worker.run() line: 908 Thread.run() line: 662
Other debugging session:
ApplicationKB.projectLoaded(Project) line: 287 ProjectChangeSupport.fireProjectLoaded(Project) line: 95 Project.prepare() line: 1151 ProjectFactory.prepareProject(Project, URL, boolean) line: 272 ProjectFactory.restore(File, URL, boolean) line: 120 ProjectFactory.restore(File, boolean) line: 73 ProjectFactory.restoreAny(File, boolean) line: 328 N3SourcetoDrools.droolsCompile(String) line: 381 N3QueryToDroolsQuery.translate(IRDFIterator, String, boolean) line: 39 N3toDroolsUpdater.translateQuery(N3Source) line: 205 Project.addN3Search(N3Source) line: 420 ProjectLegacy$2.put(String, N3Source) line: 144 |
thisn3_project.helpers.N3SourcetoDrools (id=86) n3_project.helpers.N3SourcetoDrools
ruleBaseorg.drools.reteoo.ReteooRuleBase (id=132) org.drools.reteoo.ReteooRuleBase
workingMemoryorg.drools.reteoo.ReteooStatefulSession (id=147) org.drools.reteoo.ReteooStatefulSession
http://botego.com/howdoesitwork.htm
http://www.nltk.org/getting-started
prymas - Question and Answering, Knowledge Management, Information Retrieval blog
http://whatisprymas.wordpress.com/
http://code.google.com/p/nlp2rdf/
http://groups.engin.umd.umich.edu/CIS/course.des/cis479/projects/agent/Intelligent_agent.html
International Conference on Web Intelligence, Mining and Semantics (WIMS'11)
http://wims.vestforsk.no/pro-is.html
Let's drink to rules, which will rule the world ! Another play on words: I went this summer to a school on CHR, and there I got a bag saying : "make your own rules".
temporarily unactivate TestEulerGUIInputs . testXMLInputGloze() , pending correction of N3 parser's NPE regression
This is a vicious consequence of new N3 format stuff, that also gets activated with ordinary .n3p format, due to the fact that ApplicationKB is a Project listener , and has rules to add things to the project. That could even lead to infinite loops !
org.eclipse.jdt.internal.junit.runner.RemoteTestRunner at localhost:55629 Thread [main] (Suspended (exception MalformedURLException)) URL.<init>(URL, String, URLStreamHandler) line: 567 URL.<init>(URL, String) line: 464 N3Source.uri() line: 314 N3toDroolsUpdater.getTimeStamp(N3Source) line: 108 N3toDroolsUpdater.outdated(N3Source) line: 134 N3toDroolsUpdater.uptodate(N3Source) line: 143 N3toDroolsUpdater.translateQuery(N3Source) line: 194 Project.addN3Search(N3Source) line: 428 Project.setN3Query(N3Source) line: 374 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 DeferredPropertyAssignment.findAndInvokeMethod(Assignment, Object, Class<?>) line: 82 DeferredPropertyAssignment.assign(Assignment, Assignment) line: 47 Rule_DeferredPropertyAssignment2_0.defaultConsequence(KnowledgeHelper, DeferredPropertyAssignment, FactHandle, Assignment, FactHandle, Assignment, FactHandle) line: 7 Rule_DeferredPropertyAssignment2_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: 39 DefaultAgenda.fireActivation(Activation) line: 917 DefaultAgenda.fireNextItem(AgendaFilter) line: 856 DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1071 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 785 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 751 TripleStoreDrools.fireAllRules() line: 312 ApplicationKB.fireAllRules() line: 185 ApplicationKB.n3SearchAdded(Project, N3Source) line: 180 ApplicationKB.projectLoaded(Project) line: 289 ProjectChangeSupport.fireProjectLoaded(Project) line: 95 Project.prepare() line: 1170 ProjectFactory.prepareProject(Project, URL, boolean) line: 271 ProjectFactory.restore(File, URL, boolean) line: 166 ProjectFactory.restore(File, boolean) line: 73 ProjectFactory.restoreAny(File, boolean) line: 327 ProjectFactory.restore(String, boolean) line: 57 ProjectFactory.restore(String) line: 64 TestDroolsQuery.setUp() line: 24 TestDroolsQuery(TestCase).runBare() line: 125 TestResult$1.protect() line: 106 TestResult.runProtected(Test, Protectable) line: 124 TestResult.run(TestCase) line: 109 TestDroolsQuery(TestCase).run(TestResult) line: 118 JUnit3TestReference.run(TestExecution) line: 130 TestExecution.run(ITestReference[]) line: 38 RemoteTestRunner.runTests(String[], String, TestExecution) line: 467 RemoteTestRunner.runTests(TestExecution) line: 683 RemoteTestRunner.run() line: 390 RemoteTestRunner.main(String[]) line: 197 Thread [ReaderThread] (Running)
TODO : TestRulesForUserEvents :
java.net.MalformedURLException: no protocol: aURI at java.net.URL.<init>(URL.java:567) at java.net.URL.<init>(URL.java:464) at eulergui.project.N3Source.uri(N3Source.java:314) at n3_project.helpers.N3toDroolsUpdater.getTimeStamp(N3toDroolsUpdater.java:108) at n3_project.helpers.N3toDroolsUpdater.outdated(N3toDroolsUpdater.java:134) at n3_project.helpers.N3toDroolsUpdater.uptodate(N3toDroolsUpdater.java:143) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:79) at eulergui.project.Project.doTranslateN32Drools(Project.java:933) at eulergui.project.Project.translateN32Drools(Project.java:885) at eulergui.project.Project.prepareDrools(Project.java:865) at eulergui.project.Project.doRunDrools(Project.java:820) at eulergui.project.Project.runDroolsTriples(Project.java:777) at eulergui.project.Project.runDroolsTriples(Project.java:785) at eulergui.project.Project.runDroolsTriples(Project.java:796) at deductions.runtime.TestRulesForUserEvents.testFieldOldArchitecture(TestRulesForUserEvents.java:82)
Luc has corrected the triple order issue, so I continue testing embedded Java objects :) .
ERROR in running Drools Inference EngineCause:org.drools.RuntimeDroolsException: Exception executing predicate reference.ID == 1005 64 |
The issue is that Drools does NOT take in account the class criterium below, so its stops on ID property , when the first object is inserted in the Working Memory.
rule "java_event-rules.n3 0" when ... Assignment( $JEVENT : name, reference.class == java.awt.Event, $JEVENT_reference : reference ) Assignment( name == $JEVENT, reference == $JEVENT_reference, reference.ID == 1005 ) ... |
I tried to add methods equals() and hashCode() in class Assignment, so that Droools should know that these two object criteria refer to the same objects.
But no success!
Asked on Drools IRC :
There 2 new snapshots on Maven repo :
5.1.2-SNAPSHOT (yesterday) , 5.2.0-SNAPSHOT (today ) ; what's the status of this ?
Thread [main] (Suspended (exception NullPointerException)) MatchSquareBracket.reduceAction(IParseSessionForMatchMgr, IParseNode, IParseNode[], int[]) line: 39 MatchMgrInvoker.reduceAction(int, IMatchMgr, IParseNode, IParseNode[], int[], IParseSessionForMatchMgr) line: 261 MatchMgrInvoker.computeData(IParseSessionForMatchMgr, IParseNode) line: 560 MatchMgrInvoker.endVisitImpl(IParseNode) line: 527 MatchMgrInvoker(AbstractParseNodeVisitor).endVisit(IParseNode) line: 57 ConcatParseNode(AbstractNonTerminalParseNode).accept(IParseNodeVisitor) line: 414 AlternativeParseNode(AbstractNonTerminalParseNode).accept(IParseNodeVisitor) line: 402 AlternativeParseNode(AbstractNonTerminalParseNode).accept(IParseNodeVisitor) line: 402 MatchMgrInvoker.checkDataComputed(IParseSessionForMatchMgr, IParseNode) line: 462 MatchMgrInvoker.computeParseNodeData(IParseSessionForMatchMgr, ParseStack) line: 449 ParseStackAction.reduce(ParseStack, boolean, int, EnumSource, EnumSource, int, int, IParseNode[], int[], boolean) line: 222 Parser.matchManagement(ParseStack, boolean, MatchEntrySet, List<IParseNode>) line: 1020 Parser.checkForMatch(ParseStack) line: 917 Parser.matchManagement(ParseStack, boolean, MatchEntrySet, List<IParseNode>) line: 1031 Parser.checkForMatch(ParseStack) line: 917 Parser.matchManagement(ParseStack, boolean, MatchEntrySet, List<IParseNode>) line: 1031 Parser.checkForMatch(ParseStack) line: 917 Parser.matchManagement(ParseStack, boolean, MatchEntrySet, List<IParseNode>) line: 1031 Parser.checkForMatch(ParseStack) line: 917 Parser.shiftByToken() line: 808 Parser.parse(ParserFileReader, boolean, boolean) line: 398 N3Parser.parseN3(String, InputStream) line: 194 ParserLink.doParse(URL, String) line: 167 ParserLink.parse(N3Source) line: 140 N3Source.doUpdate() line: 440 N3Source.update() line: 432 N3ConversionRefesher.updateN3(N3Source) line: 75 N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 47 ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 72 Project.rethrowEventsPlease() line: 1392 ProjectGUI.newWindow(Project, boolean) line: 314 ProjectGUI.main(String[]) line: 206
Disorder in the triples out of parser N3: WIP
add (failing) pending_testTripleOrderInAntecedent in class TestN3FileParser
http://vocab.org/vann/.html
http://sort-of.homelinux.org/sb/
http://www.google.com/search?client=ubuntu&channel=fs&q=treat+rete
TREAT or RETE, neither, LEAPS is best.
http://www.cs.utexas.edu/~miranker/treator.htm
1988-Comparison of the Rete and Treat Production Matchers for Soar , byP Nayak
RETE and TREAT are prominent algorithms that have been designed to perform match in production .... the RETE and TREAT matchers, factoring out the effect of ...
www.aaai.org/Papers/AAAI/1988/AAAI88-123.pdf
I have a big problem with how eulergui.n3model.impl.< wbr>FormulaMutableImpl populates its field statementSet .
Tested with : deductions/n3_logical/java_< wbr>event-rules.n3
But the rule is :
{ |
The stack :
At this URI :
http://eulersharp.sourceforge.net/2003/03swap/log-rules#
there is this prefix declaration :
@prefix e: <log-rules#> .
I think that this really means :
@prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#> .
because the original URI is a relative URI, which is expanded with the base URI .
Indeed CWM says on the original URI :
# Base was: http://eulersharp.sourceforge.net/2003/03swap/log-rules
@prefix e: <#> .
We have this piece of code in class PrefixMap:
if (uriUtil.isRelativeUri(prefixUri)) { absoluteUri = baseUri + prefixUri; |
This is , alas, not so simple !
I searched a simple link explaning how base URI is computed , and how N3 prefixes are interpreted .
Well , I don't have to really understand in depth http://www.ietf.org/rfc/rfc1808.txt , there is a class URI with methods resolve() and relativize() that do the job !
So the right code is :
if (uriUtil.isRelativeUri(prefixUri)) { absoluteUri = new URI(baseUri).resolve(prefixUri).toString(); |
baseUri
was set by EG beforehand:
http://eulersharp.sourceforge.net/2003/03swap/log-rules#
and prefixUri
is: log-rules# .
So absoluteUri
is computed to be just equal to
baseUri
in this case.
I fixed reading new N3 projects like newproject.n3p.n3), now fixing writing.
There are some subtleties. The example has typical triples like this:
<> owl:imports <book.n3> .
But it could be like this with the explicit project's URI:
<file:/home/jmv/myProj.n3p.n3> owl:imports <book.n3> .
Anyway, the internal KB has triples like this, because it can host several EulerGUI projects , and the internal KB must distinguish them.
Now, when user says "Save as ... (new format)" , under say
myNewProj.n3p.n3
, EulerGUI should take all triples :
<file:/home/jmv/myProj.n3p.n3> ?P ?O . ?O ?PO ?OO .
and save them as :
<file:/home/jmv/myNewProj.n3p.n3> ?P ?O . ?O ?PO ?OO .
Note that we don't need all the transitive closure from the project's URI, given the kind of triples that new N3 format for EulerGUI project contains .
Due to a bad update on W$ on Samsung phones, the phone does not boot anymore, and costumers are obliged to exchange the phone !
Pave the way for Subprojects with N3 format for EulerGUI project: harmonize properties Uri and Location in class Project.
The current issue is not when there is one N3 source with :isActivated
false
, all N3 sources become also unactivated. This rule seems to fire
when it should not :
{ # r2
?N3S a java:eulergui-project-N3Source .
?N3S java:URI ?IMPORT_URI .
?IMPORT log:uri ?IMPORT_URI .
?IMPORT :isActivated ?ACTIV .
} => {
?N3S java:activated ?ACTIV .
}.
|
The cause of this is : log:uri does not take in account that ?IMPORT_URI is
bound and ?IMPORT is not. So a single triple ?IMPORT :isActivated ?ACTIV
.
is enough to trigger the rule for any N3 source.
Remedies:
?N3S a java:eulergui-project-N3Source . ?N3S java:URIAsN3 ?IMPORT . ?IMPORT :isActivated ?ACTIV . |
string:concatenation
(not implemented at the moment)log:uri
so that it takes in account that object is
bound Solution 1 is the quickest to implement, and also makes for a shorter rule.
Another issue is that when there is a <> URI for the project, it does not allow to distinguish several project in a the (shared) internal KB. Happily , a listener corrects that after the inference :
Unité d'exécution [main] (Suspendue) ApplicationKB.add_project_n3_imports(Project, String) ligne : 218 ApplicationKB.n3SourceAdded(Project, N3Source) ligne : 201 ApplicationKB.projectLoaded(Project) ligne : 278 ProjectChangeSupport.fireProjectLoaded(Project) ligne : 95 Project.prepare() ligne : 1208 ProjectFactory.prepareProject(Project, URL, boolean) ligne : 271 ProjectFactory.restoreN3P(File) ligne : 244 ProjectFactory.restoreAny(File, boolean) ligne : 324 ProjectFactory.restore(String, boolean) ligne : 57 ProjectGUI.main(String[]) ligne : 188 |
This KB content seems correct, except that the Project's URI is not set:
<book.n3> <http://eulergui.sf.net/ontology/project.owl.n3#isActivated> false . #U
# Assign: _:sk_N3S_1 ==> eulergui.project.N3Source: file:/tmp/plants.n3
# Assign: _:sk_N3S_0 ==> eulergui.project.N3Source: file:/tmp/book.n3
<> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/project_ontology.html> . #U
<> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Ontology> . #U
# Assign: <> ==> eulergui.project.Project: URI not set
<> <http://www.w3.org/2002/07/owl#imports> <book.n3> . #U
<> <http://www.w3.org/2000/01/rdf-schema#comment> " example: Proposal for a new N3 format for RDF + OWL + rules projects " . #U
<> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <file:/home/jmv/src/eulergui_new/examples/newproject_isActivated_1.n3p.n3> .
<> <http://www.w3.org/2002/07/owl#imports> <plants.n3> . #U
|
BIG COMMIT: N3 format for EG project: WIP: added DeferredPropertyAssignment
Tested with examples/BloodPressure.n3p.n3
TODO : test suite, test examples/newproject.n3p.n3.owl ; clean new code
TODO
I've got a solution to a long time problem with N3 + Java cohabitation.
In the case of a Java object coming from another rule, a Drools rule that says: "when there is a deferred property assignment ?X ?P ?V , and ?X is a Java object, then make the property assignment and delete the deferred property assignment".
Note that this will actually simplify N3 to Drools translation, because this will work in both cases: is the Java object has been declared or not.
Note that this could be expressed in N3 or in Drools language.
Is this also the case for user callback binding ?
It could be with pre-procesising by Euler engine, if we could get the rule from the rule number.
[INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9 minutes 42 seconds [INFO] Finished at: Wed Feb 16 19:30:57 CET 2011
Need to generate two versions, depending on whether variable $IMPORT_URI has already been defined or not:
Assignment( name == $N3S, $N3S_reference : reference, $IMPORT_URI : reference.URI )
or:
Assignment( name == $N3S, $N3S_reference : reference, reference.URI == $IMPORT_URI )
I can reuse the method:
String processTripleElement( TripleRole role, String uri, String ruleId) {
with TripleRole role
changed to: String
javaProperty
; and IMPORT_URI is argument uri, reference.URI being
argument javaProperty
--------------------------------------- tmp --------------------------
Assignment( $N3S : name, reference.class == eulergui.project.N3Source, $N3S_reference : reference )
Assignment( name == $N3S, $N3S_reference : reference, $IMPORT_URI : reference.URI )
after modif:
Assignment( $N3S : name, reference.class == eulergui.project.N3Source ) Assignment( name == $N3S, $N3S_reference : reference, $IMPORT_URI : reference.URI )
COMMITED: New N3 - Java mapping: Method or property call: fix $VAR_reference and $VAR : reference.javaProperty
propset --revprop -r 2117 --force "svn:log" "svn propset svn:mime-type text/html *.html" https://eulergui.svn.sourceforge.net/svnroot/eulergui
Snapshot with new features:
:m a nmo:EMail .
After questions by <rszeno>
What is an implicit button?
An implicit button is a button that is inferred by the GUI generator e.g. from an OWL object property, where button action launches a new few form.
Can I add an explicit button ?
Here is the kind of N3 to put in a consequent side of a rule :
?BUTTON_id1 a gengui:Button . ?CONTAINER gui:components ?BUTTON_id1 . |
How does the multi-platform GUI generation work?
When a generic Button is created, it is qualified as a platform specific component by a simple rule, e.g. for Java:
{ ?W a gengui:Button. javapr:thisApplication app:platform app:Java } => { ?W a java:javax_swing_JButton } . |
Can I add a callback to a button ?
We are working on this.
Any widget (aka component) , Button or other, implicit or explicit, is
accessible by the framework through its URI. The component specific URI is
derived from the N3 variable , e.g. ?BUTTON_id1
above.
The runtime framework maintains a a multimap of all generated components keyed by URI's and component types. Using an N3 vocabulary, the developer can bind a callback class she has writen to the component URI ( TODO specify ). Then, at runtime, the framework binds the associated callback class (if any) to the newly instanciated component.
For example in Java, MyListener is a plain Java class implementing ActionListener that is associated to URI associated to N3 variable ?BUTTON_id1 . The runtime framework will call :
BUTTON_id1-instance . addActionListener (MyListener )
whenever a ?BUTTON_id1 is created through the rule.
Can I add validation to a input when user loses focus?
We are also working on this. Basically a business rule with false in the consequent side should be enough. However this does not provide any explanation to the user. So we had this in the very version of the framework, where the GUI events are managed by Java code and not by N3 rules. In project deductions/n3/test_person.n3p , we have this in person-events.n3 :
{ ?P a :Person . ?P :name "bush" . } => { ded:exception :throw " is already retired!" . } . |
This is interpreted by the Java driver (runtime framework ) so that it shows a popup window and refuses the user input when it's "bush" .
To make this work, in tools, click on "JavaScript console, OLD ARCH." , after a Drools inference.
We should re-establish this in the latest framework version, as hooks for arbitrary Java code (see callback to a button question).
Can I have datatype validation in input fields?
This worked in some old version of EulerGUI , also with "JavaScript console, OLD ARCH.". It should refuse a non-number when the range of the property is a Number.
We should re-establish this in the latest framework version, as hooks for arbitrary Java code (see callback to a button question).
79.92.90.238
http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/running_eclipse.htm
After upgrading Parser4J (which new features ?) , Luc tested on Windows ( 7? ) and provided in class InErrorTests a suite of Tests in error. And here are my analysis of problems :
Test name | Errors | Failure | Comments |
TestLineTracking.test_LineTracking_fromN3 | 1 | COMMITED comment out where current result is wrong
NOTE: this LineTracking mechanism is not much used currently, except for highlighting syntax errors |
|
TestSwingGeneration . test_person_import |
1 | SocketException, TimeoutExpiredException
passes in isolation; see below |
|
TestImportSwrl . testRemoteImportSwrlWithEuler |
1 | TimeoutExpiredException
passes in isolation |
|
TestDroolsQuery . testSearch |
1 | Maybe related to my Revision 2097
Modified Wed Feb 9 17:42:51 2011 UTC (44 hours, 30 minutes ago) by jmvanel Basic Runtime with a command line N3 interface ( class BasicRuntime ): - adding queries like: :x ?P ?O . - also FIX in N3Source when given by N3 string and URI: URI was lost - TODO : issues with default namespace in queries ==> in fact clearing the cache was enough (because due to this modification the URI of the search has changed) |
These are the stacks I copied in an error popup during TestSwingGeneration . test_person_import () :
java.net.SocketException: Connection reset at java.net.SocketInputStream.read(SocketInputStream.java:168) at java.io.BufferedInputStream.fill(BufferedInputStream.java:218) at java.io.BufferedInputStream.read1(BufferedInputStream.java:258) at java.io.BufferedInputStream.read(BufferedInputStream.java:317) at sun.net.www.MeteredStream.read(MeteredStream.java:116) at java.io.FilterInputStream.read(FilterInputStream.java:116) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2669) at sun.net.www.protocol.http.HttpURLConnection$HttpInputStream.read(HttpURLConnection.java:2664) at n3_project.IOManager.copy(IOManager.java:190) at n3_project.IOManager.getLocalCache(IOManager.java:169) at n3_project.IOManager.getLocalCache(IOManager.java:148) at eulergui.project.N3Source.getLocalCache(N3Source.java:595) at eulergui.project.N3Source.getLocalN3(N3Source.java:602) at eulergui.drools_engine.ParserLink.parse(ParserLink.java:139) at eulergui.drools_engine.ParserLink.parseAndUpdateSource(ParserLink.java:178) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:236) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.doTranslateN32Drools(Project.java:886) at eulergui.project.Project.translateN32Drools(Project.java:862) at eulergui.project.Project.prepareDrools(Project.java:827) at eulergui.project.Project.doRunDrools(Project.java:782) at eulergui.project.Project.runDroolsTriples(Project.java:739) at eulergui.inference.drools.DroolsInferenceEngine.launch(DroolsInferenceEngine.java:33) at eulergui.gui.inference.RunActionGeneric$EngineSwingWorker.doInBackground(RunActionGeneric.java:112) at eulergui.gui.inference.RunActionGeneric$EngineSwingWorker.doInBackground(RunActionGeneric.java:1) at javax.swing.SwingWorker$1.call(SwingWorker.java:277) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at javax.swing.SwingWorker.run(SwingWorker.java:316) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) java.lang.RuntimeException: Impossible de créer une copie locale pour lemplacement {0} at n3_project.IOManager.getLocalCache(IOManager.java:173) at n3_project.IOManager.getLocalCache(IOManager.java:148) at eulergui.project.N3Source.getLocalCache(N3Source.java:595) at eulergui.project.N3Source.getLocalN3(N3Source.java:602) at eulergui.drools_engine.ParserLink.parse(ParserLink.java:139) at eulergui.drools_engine.ParserLink.parseAndUpdateSource(ParserLink.java:178) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:236) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.doTranslateN32Drools(Project.java:886) at eulergui.project.Project.translateN32Drools(Project.java:862) at eulergui.project.Project.prepareDrools(Project.java:827) at eulergui.project.Project.doRunDrools(Project.java:782) at eulergui.project.Project.runDroolsTriples(Project.java:739) at eulergui.inference.drools.DroolsInferenceEngine.launch(DroolsInferenceEngine.java:33) at eulergui.gui.inference.RunActionGeneric$EngineSwingWorker.doInBackground(RunActionGeneric.java:112) at eulergui.gui.inference.RunActionGeneric$EngineSwingWorker.doInBackground(RunActionGeneric.java:1) at javax.swing.SwingWorker$1.call(SwingWorker.java:277) at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:303) at java.util.concurrent.FutureTask.run(FutureTask.java:138) at javax.swing.SwingWorker.run(SwingWorker.java:316) at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886) at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908) at java.lang.Thread.run(Thread.java:662) |
My idea is that is due to several threads acting in parallel, the Java socket layer is lost.
This is coherent with these facts:
Currently we have Threads in all these classes:
% grep -l --recursive Thread src/main/java/**/*.java src/main/java/eulergui/drools_engine/ParserLink.java src/main/java/eulergui/gui/view/TextEditor.java src/main/java/eulergui/infrastructure/cache/URICacheOSCache.java src/main/java/eulergui/infrastructure/URIModificationChecker.java src/main/java/eulergui/inputs/N3SourceFromOtherFormat.java src/main/java/eulergui/inputs/N3SourceFromXMI.java src/main/java/eulergui/project/N3Source.java src/main/java/eulergui/tools/SWRLTranslator.java src/main/java/n3_project/ConsoleFrame.java src/main/java/n3_project/helpers/CoddHelper.java src/main/java/n3_project/ProjectFileManagement.java src/main/java/n3_project/RDFToN3Converter.java src/main/java/org/gjt/sp/jedit/jEdit.java src/main/java/unif/TemporaryFrame.java |
and we have synchronizedblocks in different areas :
grep -l --recursive synchronized src/main/java/**/*.java src/main/java/eulergui/infrastructure/cache/URICacheImpl.java src/main/java/eulergui/infrastructure/cache/URICacheOSCache.java src/main/java/eulergui/infrastructure/URIModificationChecker.java src/main/java/eulergui/inputs/JavaToN3Converter.java src/main/java/eulergui/n3model/impl/StringUriType.java src/main/java/eulergui/project/ProjectChangeSupport.java src/main/java/eulergui/project/ProjectFactory.java src/main/java/n3_project/IOManager.java src/main/java/n3_project/OWLToN3Converter.java src/main/java/n3_project/RDFToN3Converter.java src/main/java/org/gjt/sp/jedit/jEdit.java |
In summary, my feeling is that the new inference execution thread must wait that all HTTP downloads , and local translations (not always cached) are finished.
Note that only local translations to N3 from XML are always cached, not the rest like RDF/OWL.
Unité d'exécution [main] (Suspendue (point d'arrêt à la ligne 518 de N3JavaMappingBuiltin)) N3JavaMappingBuiltin.setN3JavaPathSeparator(char) ligne : 518 N3JavaMappingBuiltin.<init>() ligne : 40 DroolsTripleHandler.setJavaObjectsInDrools(boolean) ligne : 1936 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 267 N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 237 N3toDroolsUpdater.translate(N3Source, boolean) ligne : 85 Project.doTranslateN32Drools(boolean) ligne : 886 Project.translateN32Drools(boolean) ligne : 862 Project.prepareDrools(boolean) ligne : 827 Project.prepareDrools() ligne : 807 ApplicationKB.<init>() ligne : 77 ApplicationKB.instance() ligne : 62 Project.prepare() ligne : 1199 ProjectFactory.prepareProject(Project, URL, boolean) ligne : 271 ProjectFactory.restore(File, URL, boolean) ligne : 166 ProjectFactory.restore(File, boolean) ligne : 73 ProjectFactory.restoreAny(File, boolean) ligne : 327 ProjectFactory.restore(String, boolean) ligne : 57 ProjectFactory.restore(String) ligne : 64 BasicRuntime.intiialize(String) ligne : 130 BasicRuntime.main(String[]) ligne : 58 |
Unité d'exécution [main] (Suspendue (point d'arrêt à la ligne 401 de N3JavaMappingBuiltin)) N3JavaMappingBuiltin.acceptConsequent(String, String, String, String, String, DroolsTripleHandler) ligne : 401 DroolsTripleHandler.acceptConsequent(String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String) ligne : 226 ParserLink.visitAllURI(LineTrackingTripleHandler) ligne : 780 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 272 N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 237 N3toDroolsUpdater.translate(N3Source, boolean) ligne : 85 Project.doTranslateN32Drools(boolean) ligne : 886 Project.translateN32Drools(boolean) ligne : 862 Project.prepareDrools(boolean) ligne : 827 Project.prepareDrools() ligne : 807 BasicRuntime.intiialize(String) ligne : 131 BasicRuntime.main(String[]) ligne : 58
INFO: Starting jEdit.main -gui -noserver file:/home/jmv/src/deductions/samples/crm/jmv-contacts.n3 19:04:10 [AWT-EventQueue-0] [error] EditBus: Exception while sending message on EditBus: 19:04:10 [AWT-EventQueue-0] [error] EditBus: java.lang.NegativeArraySizeException 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.jEdit.getViews(jEdit.java:2480) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bufferset.BufferSetManager.visit(BufferSetManager.java:293) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bufferset.BufferSetManager.handleMessage(BufferSetManager.java:110) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.EditBus.dispatch(EditBus.java:212) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.EditBus.sendImpl(EditBus.java:247) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.EditBus.send(EditBus.java:188) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.jEdit.propertiesChanged(jEdit.java:944) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.jEdit.main(jEdit.java:459) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at eulergui.gui.view.TextEditor.displayEditor(TextEditor.java:304) 19:04:10 [AWT-EventQueue-0] [error] EditBus: at n3_project.EditorManagement.openJavaEditor(EditorManagement.java:133)
<rszeno> attempto, just take the vocabulary and map
<rszeno> they don't fully understand if mapping is ok or not to reject what's wrong and confirm what's good
NEPOMUK Message Ontology
http://www.semanticdesktop.org/ontologies/nmo/
PIMO - Personal Information Model
http://www.semanticdesktop.org/ontologies/2007/11/01/pimo#
Context: a mini-application to manage contacts; ontology: FOAF + extensions for Meetings and Talks.
Need to import contacts from gmail.
Need to have a an import or notification for mails from gmail.
The failures are not 100% reproductible!
Cyril suggest that some components can be out of the window size ...
Or there can be troubles in one of the servers ...
Another trouble is that Xephyr and/or fluxbox disappears in the middle of tests without any message. For the latter thing I try to remove -terminate argument to Xephyr
Cyril will add a callback for the end of inference , that will be leveraged , so that tests duration will go down from 16 to 10 minutes.
COMMITED: in TestFacebookSearch , raise the Thread.sleep() to 6000 , to avoid failure
Tests run: 133, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 18 minutes 23 seconds
[After replacing my car's lights]
Software engineering is just like any engineering: to repair or use a device, one has to think like the original designers and respect the original spirit.
somebody have a signature "if Barbie is so popular, why d you have to buy her a friend?"
good example for polysemic word leading to logic false model
In jEdit Options / shortcuts, I changed the keys for "Complete Word" , and set it to Control Space (initially Control b) ; this is the same feature as Control P in gvim, and Control Space in eclipse.
I also changed "Line comment"
Rules:
take in account rdfs:subClassof declarations
mvn doap:generate
Commited in déductions :
added transforms/maven-pom_to_doap.n3p ; the first real-life example of an XML to RDF conversion based on N3 rules
We basically have the bricks for that.
env LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype
http://developer.skype.com/LinuxSkype
http://doc.ubuntu-fr.org/skype
doing an exercise with EG: tackling the POM ==> DOAP conversion. So I started with project in deductions/transforms/ ; added a doap: prefix that was completed by prefix.cc , opened http://usefulinc.com/ns/doap# in EG ; then launched OWL reasonner just to have a class tree.
Then adding a search for ?P a rdf:Property.
added http://prefix.cc/pom
Thanks to Cyril !
[INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 16 minutes 20 seconds
ParserLink objects were not reusable twice ==> TestImportSwrl was broken when binding new Reasoner4J inference engine
substitute viewvc with svnroot in examples/
COMMITED in Déductions:
To cope with current outage of Sourceforge server viewvc, substitute viewvc with svnroot in **/*.n3p
COMMITED in EulerGUI:
To cope with current outage of Sourceforge server viewvc, substitute viewvc with svnroot in URL's
Still errors and 1 failure:
Running eulergui.gui.TestJavaEditor
Tests run: 4, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 27.931 sec <<< FAILURE!
Running eulergui.gui.TestImportSwrl
Tests run: 5, Failures: 0, Errors: 4, Skipped: 0, Time elapsed: 6.169 sec <<< FAILURE!
Running n3_project.helpers.TestDroolsQuery
Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 11.163 sec <<< FAILURE!
Running n3_project.TestProject
Tests run: 5, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.073 sec <<< FAILURE!
Running eulergui.gui.TestSwingGeneration
Tests run: 6, Failures: 0, Errors: 5, Skipped: 0, Time elapsed: 5.039 sec <<< FAILURE!
Running eulergui.gui.TestFacebookSearch
Tests run: 3, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 12.018 sec <<< FAILURE!
Back from south India !
This is due to a problem on the SF.NET site;
they got attacks and were obliged to shut down ViewVC ( Web access to
SVN ) ; see :
https://sourceforge.net/blog/sourceforge-attack-full-report/
https://sourceforge.net/apps/wordpress/sourceforge/
I got help on #ubuntu on freenode ( 1574 users ! ).
F2 is the key to set boot order in the bios options.
I just installed Linux on Asus EeePC; but the network does not work, even the ethernet.
<jmv_> We'll talk of a possible partnership wth logilab.fr , a Parisian Service Company in SemWeb , OSS, and scientific soft .
Every man likes at least 3 cars .
In OWL parlance:
man SubClassOf like min 3 car
There are 2 ways of translating with rules:
Well, for point 1, one must quit Open World Assumption.
For point 2, blank nodes will be added.
Problem accessing /acewiki/. Reason:
com/thoughtworks/xstream/io/HierarchicalStreamDriver
java.lang.NoClassDefFoundError: com/thoughtworks/xstream/io/HierarchicalStreamDriver at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) at java.lang.Class.getConstructor0(Class.java:2699) at java.lang.Class.newInstance0(Class.java:326) at java.lang.Class.newInstance(Class.java:308) at nextapp.echo.app.util.PeerFactory.<init>(PeerFactory.java:72) at nextapp.echo.webcontainer.PropertySerialPeerFactory.<init>(PropertySerialPeerFactory.java:79) at nextapp.echo.webcontainer.PropertySerialPeerFactory.forClassLoader(PropertySerialPeerFactory.java:65) at nextapp.echo.webcontainer.SynchronizationContext.get(SynchronizationContext.java:106) at nextapp.echo.webcontainer.InputProcessor$InputContext.get(InputProcessor.java:78) at nextapp.echo.webcontainer.ClientPropertiesInputProcessor.process(ClientPropertiesInputProcessor.java:115) at nextapp.echo.webcontainer.ClientMessage.process(ClientMessage.java:163) at nextapp.echo.webcontainer.InputProcessor.process(InputProcessor.java:144) at nextapp.echo.webcontainer.Synchronization.process(Synchronization.java:104) at nextapp.echo.webcontainer.service.SynchronizeService.service(SynchronizeService.java:78) at nextapp.echo.webcontainer.WebContainerServlet.process(WebContainerServlet.java:398) at ch.uzh.ifi.attempto.acewiki.AceWikiServlet.process(Unknown Source) at nextapp.echo.webcontainer.WebContainerServlet.doPost(WebContainerServlet.java:305) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:475) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:516) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:929) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:403) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:864) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:151) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114) at org.eclipse.jetty.server.Server.handle(Server.java:352) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1068) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:805) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:508) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:451) at java.lang.Thread.run(Thread.java:619) Caused by: java.lang.ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:417) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:370) ... 44 more
java.lang.ClassNotFoundException: com.thoughtworks.xstream.io.HierarchicalStreamDriver at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:417) at org.eclipse.jetty.webapp.WebAppClassLoader.loadClass(WebAppClassLoader.java:370) at java.lang.Class.getDeclaredConstructors0(Native Method) at java.lang.Class.privateGetDeclaredConstructors(Class.java:2389) at java.lang.Class.getConstructor0(Class.java:2699) at java.lang.Class.newInstance0(Class.java:326) at java.lang.Class.newInstance(Class.java:308) at nextapp.echo.app.util.PeerFactory.<init>(PeerFactory.java:72) at nextapp.echo.webcontainer.PropertySerialPeerFactory.<init>(PropertySerialPeerFactory.java:79) at nextapp.echo.webcontainer.PropertySerialPeerFactory.forClassLoader(PropertySerialPeerFactory.java:65) at nextapp.echo.webcontainer.SynchronizationContext.get(SynchronizationContext.java:106) at nextapp.echo.webcontainer.InputProcessor$InputContext.get(InputProcessor.java:78) at nextapp.echo.webcontainer.ClientPropertiesInputProcessor.process(ClientPropertiesInputProcessor.java:115) at nextapp.echo.webcontainer.ClientMessage.process(ClientMessage.java:163) at nextapp.echo.webcontainer.InputProcessor.process(InputProcessor.java:144) at nextapp.echo.webcontainer.Synchronization.process(Synchronization.java:104) at nextapp.echo.webcontainer.service.SynchronizeService.service(SynchronizeService.java:78) at nextapp.echo.webcontainer.WebContainerServlet.process(WebContainerServlet.java:398) at ch.uzh.ifi.attempto.acewiki.AceWikiServlet.process(Unknown Source) at nextapp.echo.webcontainer.WebContainerServlet.doPost(WebContainerServlet.java:305) at javax.servlet.http.HttpServlet.service(HttpServlet.java:727) at javax.servlet.http.HttpServlet.service(HttpServlet.java:820) at org.eclipse.jetty.servlet.ServletHolder.handle(ServletHolder.java:534) at org.eclipse.jetty.servlet.ServletHandler.doHandle(ServletHandler.java:475) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:119) at org.eclipse.jetty.security.SecurityHandler.handle(SecurityHandler.java:516) at org.eclipse.jetty.server.session.SessionHandler.doHandle(SessionHandler.java:226) at org.eclipse.jetty.server.handler.ContextHandler.doHandle(ContextHandler.java:929) at org.eclipse.jetty.servlet.ServletHandler.doScope(ServletHandler.java:403) at org.eclipse.jetty.server.session.SessionHandler.doScope(SessionHandler.java:184) at org.eclipse.jetty.server.handler.ContextHandler.doScope(ContextHandler.java:864) at org.eclipse.jetty.server.handler.ScopedHandler.handle(ScopedHandler.java:117) at org.eclipse.jetty.server.handler.ContextHandlerCollection.handle(ContextHandlerCollection.java:247) at org.eclipse.jetty.server.handler.HandlerCollection.handle(HandlerCollection.java:151) at org.eclipse.jetty.server.handler.HandlerWrapper.handle(HandlerWrapper.java:114) at org.eclipse.jetty.server.Server.handle(Server.java:352) at org.eclipse.jetty.server.HttpConnection.handleRequest(HttpConnection.java:596) at org.eclipse.jetty.server.HttpConnection$RequestHandler.content(HttpConnection.java:1068) at org.eclipse.jetty.http.HttpParser.parseNext(HttpParser.java:805) at org.eclipse.jetty.http.HttpParser.parseAvailable(HttpParser.java:218) at org.eclipse.jetty.server.HttpConnection.handle(HttpConnection.java:426) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.handle(SelectChannelEndPoint.java:508) at org.eclipse.jetty.io.nio.SelectChannelEndPoint.access$000(SelectChannelEndPoint.java:34) at org.eclipse.jetty.io.nio.SelectChannelEndPoint$1.run(SelectChannelEndPoint.java:40) at org.eclipse.jetty.util.thread.QueuedThreadPool$2.run(QueuedThreadPool.java:451) at java.lang.Thread.run(Thread.java:619)
Subscribed to mailing list .
https://sourceforge.net/apps/mediawiki/rifle/
Features
It is nice to hear EulerGUI is so rapidly developing!
Well, not as quick as I'd wish ; the list of planned features is huge :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#TODO
We need users and feedback!
I'm not only for rules, it's a general tool for semantic web; if I knew another I'd use it or extend it.
By Ruset; this works :
@prefix : <#> . :bob :said { :gigi :know :lucy . } . :charly :said { :lucy :know :gigi . } . @forAll :x, :y . { [] :said { :x :know :y . } . [] :said { :y :know :x . } . } => { :x :know-each-other :y . } . |
Ruset's attempt:
@prefix log: <http://www.w3.org/2000/10/swap/log#> . @prefix : <#> . :bob :said { :gigi :know :lucy . } . :charly :said { :lucy :know :gigi . } . { [] :said ?whatever . [] :said { ?x :know ?y . ?whatever log:includes { ?y :know ?x . } . } . } => { ?x :know-each-other ?y . } . |
attempt to run a rule that is *inside* a context
:ctx1 :said { :me :know :luc . }. { :ctx1 :said ?FORMULA } => { ?FORMULA log:includes {{ ?x :know ?y . ?y :know ?x . } => { ?x :know-each-other ?y }} } |
https://sourceforge.net/mailarchive/message.php?msg_id=26570111
https://sourceforge.net/mailarchive/forum.php?thread_name=AANLkTim9D3q1RLE1_tLihFiW_sTxO48bUfBVPem55NDB%40mail.gmail.com&forum_name=eulergui-user
mkdir eulergui-parser mkdir -p eulergui-parser/src/main/java mv src/main/java/eulergui/parser src/main/java/eulergui/n3model eulergui-parser/src/main/java mkdir -p eulergui-parser/src/test/java mv src/test/java/eulergui/parser eulergui-parser/src/test/java cp pom.xml eulergui-parser/ cd eulergui-parser/echo 'in pom.xml : change artifactId ; comment out scm section.' mvn --no-plugin-updates --offline compile
I exchanged mails with Nicolas Peltier.
What do you think of CYC ?
http://www.w3.org/TR/curie/
http://nekohtml.sourceforge.net/usage.html
http://mvnrepository.com/artifact/nekohtml/nekohtml/1.9.6.1
Problems with oneOf
Currently this OWL axiom :
[] a owl:Class ; rdfs:subClassOf :rock-fan ; owl:intersectionOf (owl:Thing [ a owl:Restriction ; owl:onProperty :like ; owl:someValuesFrom [ a owl:Class ; owl:oneOf (:Jimi_Hendrix) ] ]) . |
gives this N3 rule :
{?VAR :like ?t16. ?t16 a ?e56. ?VAR a owl:Thing} => {?VAR a :rock-fan}. # BAD
DIAGNOSTIC:
When the object of owl:someValuesFrom were a class URI, it works. The rule currently is:
{ # someValuesFrom Restriction ( ?ORIGINAL ?CLASS ?VAR ?Z) :owlClassExpressionHasFormula ?FORMULA . ?CLASS a owl:Restriction; owl:someValuesFrom ?VALUES_CLASS; owl:onProperty ?PROP . ?V e:tuple ?CLASS. } => { ?FORMULA :includes { ?VAR ?PROP ?V. ?V a ?VALUES_CLASS }. }. |
There must be a way to generate a class membership test from a class URI. When the class URI is an explicit class, the above rule in green works. But for more complex class definitions, I must invent something ...
I'm trying to take inspiration from http://www.w3.org/TR/rif-owl-rl/ to enhance my OWL -> N3 rules translation.
I'm trying to learn RIf , just to understand the OWL RL rules given in rif-owl-rl .
SOLVED
http://vocab.org/vann/.html
http://eulersharp.sourceforge.net/2003/03swap/eye-note.txt
http://www-formal.stanford.edu/guha/guha-thesis.ps about contexts .
http://en.wikipedia.org/wiki/Ramanathan_V._Guha
http://bnode.org/media/2009/07/08/semantic_web_technology_stack.png
http://esw.w3.org/Foaf%2Bssl
http://foafssl.org/
http://www.nltk.org/faq
Project.showShortName()
snapshot uploaded
Looking at http://ontotext.com/ , and I'm impressed by what they achieved.
Troubles when reading a bad XHTML
Unité d'exécution [main] (Suspendue) SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) ligne : non disponible [méthode native] SocketInputStream.read(byte[], int, int) ligne : 129 BufferedInputStream.fill() ligne : 218 BufferedInputStream.read1(byte[], int, int) ligne : 258 BufferedInputStream.read(byte[], int, int) ligne : 317 HttpClient.parseHTTPHeader(MessageHeader, ProgressSource, HttpURLConnection) ligne : 687 HttpClient.parseHTTP(MessageHeader, ProgressSource, HttpURLConnection) ligne : 632 HttpURLConnection.getInputStream() ligne : 1200 XMLEntityManager.setupCurrentEntity(String, XMLInputSource, boolean, boolean) ligne : non disponible XMLEntityManager.startEntity(String, XMLInputSource, boolean, boolean) ligne : non disponible XMLEntityManager.startEntity(String, boolean) ligne : non disponible XMLDTDScannerImpl.startPE(String, boolean) ligne : non disponible XMLDTDScannerImpl.skipSeparator(boolean, boolean) ligne : non disponible XMLDTDScannerImpl.scanDecls(boolean) ligne : non disponible XMLDTDScannerImpl.scanDTDExternalSubset(boolean) ligne : non disponible XMLDocumentScannerImpl$DTDDispatcher.dispatch(boolean) ligne : non disponible XMLNSDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) ligne : non disponible XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) ligne : non disponible XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) ligne : non disponible SAXParser(XMLParser).parse(XMLInputSource) ligne : non disponible SAXParser(AbstractSAXParser).parse(InputSource) ligne : non disponible FormatRecognizer.<init>(URL) ligne : 22 SourceFactory.addSource(URL, Project) ligne : 76 ProjectGUI.makeProjectFromEulerCommandLine(String[]) ligne : 245 ProjectGUI.main(String[]) ligne : 184 |
Applied to Wine ontology, the translation is awfully long: 835830 [msec] .
Anyway, there are some errors still :
Today's result for ACE examples with : owl-subclass-assertions-to-rules.n3
{?VAR a owl:Thing. ?VAR a ?e2} => {?VAR a :vegetarian-food}. # BAD {?VAR a :man. ?VAR :like ?t8. ?t8 a ?e17} => {_:sk22 e:findall (?t0 {?VAR :like ?t0. ?VAR a :car} ?t1). ?t1 math:memberCount _:sk23. _:sk23 math:notLessThan "3"^^xsd:nonNegativeInteger}. # BAD {?VAR a :person. ?VAR :manages ?t6. ?t6 a owl:Thing} => {?VAR a ?e7}. # BAD {?VAR :manages ?t6. ?t6 a owl:Thing. ?VAR a :person} => {?VAR a :manager}. {?VAR :like ?t8. ?t8 a ?e17. ?VAR a :man} => {?VAR :own ?t2. ?t2 a :stick}. # BAD {?VAR a :cat} => {_:sk20 e:findall (?t4 {?VAR ?e45 ?t4} ?t5). ?t5 math:memberCount _:sk21. _:sk21 math:notLessThan "2"^^xsd:nonNegativeInteger}. # BAD {?VAR :like ?t10. ?t10 a :carrot. ?VAR a owl:Thing} => {?VAR a :herbivore}. {?VAR ?e50 ?t12. ?t12 a :man. ?VAR a owl:Thing} => {?VAR a :good}. # BAD {?VAR :have ?t14. ?t14 a :subordonate. ?VAR a :employee} => {?VAR a :manager}. {?VAR :like ?t16. ?t16 a ?e56. ?VAR a owl:Thing} => {?VAR a :rock-fan}. # BAD |
Every cat is liked by at least 2 things.
If X is-a-friend-ofs Y then Y is-a-friend-ofs X. Everything that is managesed by something is a subordinate. /* MOS: person(?x2), person(?x4), user(?x1), has-as-friend(?x1, ?x2), has-as-friend(?x1, ?x4), has-as-friend(?x2, ?x7), has-as-friend(?x4, ?x7), DifferentFrom (?x2, ?x4), DifferentFrom (?x7, ?x1) -> is-a-proposed-friend-for(?x7, ?x1) */ John likes at most 1 woman. Every employee that has a subordonate is a manager. Everything that is manageded by something is a subordinate. jmv likes Jimi_Hendrix. Everything that is bought by a man is a good. John is not Joseph. Every subordinate is a subordonate. Every subordonate is a subordinate. Everything that does not has-as-topping something that is not a vegetable-topping is a vegetarian-food. Everything that likes Jimi_Hendrix is a rock-fan. Every man likes at least 3 cars. Every person is something that is an unemployed-person or that has a job. If X contains something that contains Y then X contains Y. Estonia is bordered by exactly 2 countries. Everything ancestprs at most 1 thing. Every man that likes something that is Mary and that hates a dog owns a stick. Everything that likes a carrot is a herbivore. Every person that manageses something is a manager. If X borderses Y then Y borderses X. |
Jos wrote:
In the case of an unbound e:findall subject, scope will be bound to the list of knowledge source uris that were used and span will be bound to 1.
find . -maxdepth 1 -name '*n3' -size 0 -exec ls -l '{}' \; find . -maxdepth 1 -name '*n3' -size 0 -exec rm '{}' \;
takes about 1 mn
incorrect results : not a single =>
eulergui owl-subclass-assertions-to-rules.n3 http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine.rdf
After some correction, the result is not wrong from a logical point of view, but not good enough :
{?t0 a ns1:Anjou. ?t1 a ns1:Anjou. ?t2 a ns1:Anjou. ?t3 a ns1:Anjou } => { ?t0 ns1:hasFlavor ns1:Delicate. ?t1 ns1:hasSugar ns1:OffDry. ?t2 ns1:hasColor ns1:Rose. ?t3 ns1:hasBody ns1:Light}. |
It should be:
{ ?t0 a ns1:Anjou. } => { ?t0 ns1:hasFlavor ns1:Delicate; ns1:hasSugar ns1:OffDry; ns1:hasColor ns1:Rose; ns1:hasBody ns1:Light }. |
It may be due to this at line 43:
?VAR e:tuple (?SUBCLASS rdfs:subClassOf ?SUPERCLASS).
By this I hope that everytime this appears in an antecedent , the same ?VAR is retrieved. In fact it was just "called" once, but caling it where needed does not change anything.
I follow advice by Jos in march28 2010:
After a correction in euler.yap you can now use free variables (*) for this purpose:
@prefix : <http://test.com#>.
@prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#> .
@prefix log: <http://www.w3.org/2000/10/swap/log#> .
@prefix list: <http://www.w3.org/2000/10/swap/list#> .
@prefix var: <http://localhost/var#>.
{
:crit :classes ?CC .
?SCOPE e:findall ({var:V a ?C} {?C list:in ?CC} ?CRITS0).
?CRITS0 log:conjunction ?CRITS.
} => {
?CRITS => {var:V :consequence :inferred}.
}.
(*) free variable are not quantified with @forSome or @forAll and for euler they live in <http://localhost/var#>
IT WORKS !
TODO implement owl:equivalentClass
Using SWRL for Rule-Driven Applications ( Mission Critical IT)
https://sourceforge.net/projects/eulergui/files//stats/timeline?dates=2007-08-24+to+2011-01-04
Towards Ontology-Driven Development of Applications for Smart Environments
by: Artem Katasonov, and Marko Palviainen
http://www.bibsonomy.org/bibtex/2b0abc07ce6ec4603ac0b73467895ec00/sjbutler
I'm translating directly OWL subclass assertions into N3 rules , using N3 rules:
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/owl-subclass-assertions-to-rules.n3
I have this rule :
{ # minCardinality Restriction ( ?ORIGINAL ?CLASS ?VAR ?Z) :owlClassExpressionHasFormula ?FORMULA . ?CLASS a owl:Restriction; owl:minCardinality ?MIN; owl:onProperty ?PROP . ?V e:tuple ?CLASS. ?Y e:tuple (?CLASS). } => { ?FORMULA :includes { _:d e:findall (?V {?VAR ?PROP ?V} ?Y). ?Y math:memberCount ?C. ?C math:notLessThan ?MIN }. }. |
and I'm tempted to copy and paste it with 2 modifications :
{ # maxCardinality Restriction ( ?ORIGINAL ?CLASS ?VAR ?Z) :owlClassExpressionHasFormula ?FORMULA . ?CLASS a owl:Restriction; owl:maxCardinality ?MIN; owl:onProperty ?PROP . ?V e:tuple ?CLASS. ?Y e:tuple (?CLASS). } => { ?FORMULA :includes { _:d e:findall (?V {?VAR ?PROP ?V} ?Y). ?Y math:memberCount ?C. ?C math:notGreaterThan ?MIN }. }. |
What better can I do ?
I first thought of factoring the common part in antecedent:
{ # maxCardinality Restriction ( ?ORIGINAL ?CLASS ?VAR ?Z) :owlClassExpressionHasFormula ?FORMULA . ?CLASS a owl:Restriction; ?RESTRICTION ?MIN; owl:onProperty ?PROP . ?V e:tuple ?CLASS. ?Y e:tuple (?CLASS). } => { ?FORMULA :formulaForRestriction ( ?VAR ?PROP ?RESTRICTION ?MIN ). }. |
But this has the inconvenient of only acting on the antecedent. So I thought of parametrizing the part that differs in both rules, and - guess what ? It works !
owl:minCardinality :hasOperator math:notLessThan. owl:maxCardinality :hasOperator math:notGreaterThan. { # maxCardinality Restriction ( ?ORIGINAL ?CLASS ?VAR ?Z) :owlClassExpressionHasFormula ?FORMULA . ?CLASS a owl:Restriction; ?CardinalityProperty ?NUMBER; owl:onProperty ?PROP . ?V e:tuple ?CLASS. ?Y e:tuple (?CLASS). ?CardinalityProperty :hasOperator ?OPERATOR. } => { ?FORMULA :includes { _:d e:findall (?V {?VAR ?PROP ?V} ?Y). ?Y math:memberCount ?C. ?C ?OPERATOR ?NUMBER }. }. |
Now there is yet another group of three Object Property Restrictions, the qualified ones, e.g. :
_:x rdf:type owl:Restriction. _:x owl:onProperty P. _:x owl:qualifiedCardinality n. _:x owl:onClass C. |
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 12 minutes 28 seconds
http://www.agfa.com/w3c/Talks/2004/03swig/slide4-0.html
Asked on IRC #Openoffice.org
Do you know how to set OO on Linux, so that I can copy and paste in the X-Window way ?
( not only Control C and V ) , but implicit selection and middle button
ANSWER: in Options / OpenOffice.org / Display / middle button / paste
What are the end user tools for collaborative SW developements? I know Collaborative Protégé (http://protegewiki.stanford.edu/wiki/Collaborative_Protege) .
<kwijibo> semantic mediawiki ?
http://semantic-mediawiki.org/wiki/Introduction_to_SMW
http://dev.w3.org.cvsweb.info/2000/scribe-bot/
eulergui --quiet --quick-false --quick-possible http://eulersharp.sourceforge.net/2007/07test/pd_hes_tactic.n3 --query http://eulersharp.sourceforge.net/2007/07test/pd_hes_query.n3 http://eulersharp.sourceforge.net/2007/07test/pd_hes_theory.n3 &
Id: euler.yap 4022 2010-12-31 10:41:25Z josd YAP 6.2.0 (i686-linux): Fri Dec 17 21:16:16 CET 2010 starting 50 [msec cputime] 53 [msec walltime] GET /tmp/translation-5007022677345039164.n3 GET /tmp/translation-8172267930067690675.n3 GET /tmp/translation-6030004360966864743.n3 networking 20 [msec cputime] 12 [msec walltime] java.lang.RuntimeException: ** ERROR ** sem ** maximimum_step_count(5000000) at euler.Process.execute(Process.java:56) at euler.ProofEngine.runProofEngine(ProofEngine.java:170) at euler.ProofEngine.runProofEngine(ProofEngine.java:185) at n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:49)
</void><string>file:/home/jmv/src/deductions/n3_new/owl-subclass-assertions-to-rules_post.n3p</string>
eulergui owl-subclass-assertions-to-rules.n3 http://www.w3.org/TR/2003/PR-owl-guide-20031209/wine.rdf
As a side note, it's now possible to enter Euler/EYE arguments in EulerGUI command line arguments; a project will be created (but not saved) :
eulergui --nope --quiet --quick-possible \ http://eulersharp.sourceforge.net/2007/07test/alpP001.n3 \ http://eulersharp.sourceforge.net/2007/07test/alpA010.n3 \ --query http://eulersharp.sourceforge.net/2007/07test/alpQ001.n3 |
In this example the project name will be alpP001.n3.n3p .
In the following output , ones sees that possible models compatible with the inputs and query are listed, as well as one counter Model.
[ e:possibleModel {:Peter :ascribed :smokes} ; r:gives { :Peter :ascribed :wheezing. } ]. [ e:counterModel {:Peter :ascribed :nonsmoker} ]. [ e:possibleModel {:Peter :ascribed :influenza} ; r:gives { :Peter :ascribed :wheezing. } ]. |
It seems that all examples with possible model also have e:disjunction in them.
Tomorrow , I'll try to reason with possible models with Euler, with an OWL ontology, and
_:x a SomeClass .
to see if Euler can infer
_:x _:someProp _:y .
INFO: _removeRulePackage(): aucun fait correspondant à file:/home/jmv/src/deductions/rule-process/flatten-rules.n3 java.lang.NullPointerException at n3_project.helpers.DroolsTripleHandler.processLogBuiltin(DroolsTripleHandler.java:408) at n3_project.helpers.DroolsTripleHandler.makeDroolsCriterium(DroolsTripleHandler.java:251) at n3_project.helpers.DroolsTripleHandler.acceptAntecedent(DroolsTripleHandler.java:215) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:718) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:272) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:237) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.translateToDrools(Project.java:925)
qu'y aurait-il pour vous faire plaisir ?
<lcpvrr> à si, découper EG en sous projets:
<lcpvrr> - model java N3
<lcpvrr> - parser N3
<lcpvrr> - editeur N3
<lcpvrr> - moteur N3 commun
<lcpvrr> - par implementation de moteur
<lcpvrr> - et EG principal bien sûr
<lcpvrr> vous avez peut être d'autres composants en tête
<jmvanel> oui, c'est sur la road map
je passe à l'anglais :)
ça paut intéresser l'assistance :)
i think of splitting into several Maven sub-projects ;
within the same EulerGUI project on sf.net
this way people can reuse just what they need
But to that we need another developer !
my priority is to extend the framework: outputting non-RDF like Java code , XML;
mix business triples with Java objects in N3 rules;
backward chaining engine to access SPARQL databases.
java.lang.NullPointerException at n3_project.helpers.N3SourcetoDrools.setRuleBase(N3SourcetoDrools.java:863) at n3_project.helpers.N3toDroolsUpdater.setRuleBase(N3toDroolsUpdater.java:165) at eulergui.project.Project.compiledRulebaseLoadedFromCache(Project.java:675) at eulergui.project.Project.translateN32Drools(Project.java:844) at eulergui.project.Project.prepareDrools(Project.java:825) at eulergui.project.Project.doRunDrools(Project.java:780) at eulergui.project.Project.runDroolsTriples(Project.java:737) at n3_project.RunDroolsAction.actionPerformed(RunDroolsAction.java:48)
commited:
- Feature: before launching Euler / EYE, expand Arguments entered in the input field
TESTED with test/BloodPressure.n3p
- add a key listener in TextFieldWithLabel , so that when the project is saved, the fields Euler and CWM arguments are also saved
java.lang.NullPointerException at org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1261) at org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1242) at n3_project.helpers.N3SourcetoDrools.removeRulePackage(N3SourcetoDrools.java:767) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:84) at eulergui.project.Project.doTranslateN32Drools(Project.java:827) at eulergui.project.Project.translateN32Drools(Project.java:788) at eulergui.project.Project.prepareDrools(Project.java:768) at eulergui.project.Project.doRunDrools(Project.java:723) at eulergui.project.Project.runDroolsTriples(Project.java:680) at n3_project.RunDroolsAction.actionPerformed(RunDroolsAction.java:48)
if you want the eclipse stuff, just use the last hudson build
<conan> https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/target/
http://sort-of.homelinux.org/foaf.rdf
TODO : continue
I'm thinking about using Euler for generating the Drools code.
One of the problems is generating the variable declarations.
From the rules, ones extracts a list of variable references, like:
( ?X ?Y ?X )
To each variable reference, one must associate :declaration if it is the first use, and :use otherwise.
( :declaration :declaration :use )
The condition for :declaration is : "the list of variable before current variable with the same id is empty" .
For this I need a predicate to output the list of sub-elements preceding an element :
:sublistBefore a rdf:Property. ( (:a :b :c :d :e) :c ) :sublistBefore ( :a :b ).
I could probably define this with 2 recursions, one for the begining of list, and another for the end, but I tried this :
{ ( ?L1 (?ELEM) ?L2) list:concatenation ?LIST . } => { (?LIST ?ELEM) :sublistBefore ?L1 . } . |
Alas, I tried with --pass , and also with a query ; anyway it loops forever.
Solution from Jos: add ?LIST a rdf:List
in the antecedent
.
Begining of a solution by recursion, without any builtin:
@forAll ?X. ( () ?X ) :sublistBefore (). @forAll ?X , ?W . ( (?W ?X) ?X ) :sublistBefore (?W). |
flatten-rules.n3 : WIP : wonder if it's right way to go for flatening N3 rules:
- hard to avoid that flatening rules are processed by themselves
( currently rules with notEqual are skipped )
- maybe do it in a single big rule
- can still do it in Java with TripleHelper
- TODO: for Drools generation, generate declarations when meeting a variable for the first time
announce on jEdit
internship: rules and queries on OWL models
jEdit completion
Ugly messages:
22 déc. 2010 17:31:06 n3_project.helpers.N3SourcetoDrools droolsCompile INFO: // drools ruleBase.addPackage( http://aURI1753638619817718 ) : 15 ms, drools Total Time 1 388 ms 22 déc. 2010 17:31:06 n3_project.helpers.N3SourcetoDrools droolsCompile INFO: _// Compilation Drools http://aURI1753638619817718 : 16 ms
---------------------
INFO: _removeRulePackage(): aucun fait correspondant à file:/home/jmv/src/deductions/rule-process/flatten-rules.n3 java.lang.NullPointerException at n3_project.helpers.DroolsTripleHandler.processLogBuiltin(DroolsTripleHandler.java:405) at n3_project.helpers.DroolsTripleHandler.makeDroolsCriterium(DroolsTripleHandler.java:248) at n3_project.helpers.DroolsTripleHandler.acceptAntecedent(DroolsTripleHandler.java:212) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:718) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:272) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:237) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:85) at eulergui.project.Project.translateToDrools(Project.java:868) at eulergui.gui.controller.N3ConversionRefesher.updateKB(N3ConversionRefesher.java:108)
FIXED Bug with plain XML import with Gloze : one N3 prefix was swalowed by preceding comments; tested with
http://www.w3.org/2010/rif-schema/core/CoreCond.xsd
( need to clean the whole cache )
Revision : 2027
un: 133, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9 minutes 45 seconds [INFO] Finished at: Wed Dec 22 11:26:00 CET 2010 [INFO] Fina
All went smoothly ! ( except warnings for one depedendency)
[INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 34 minutes 12 seconds [INFO] Finished at: Wed Dec 22 12:25:07 CET 2010 [INFO] Final Memory: 21M/288M
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/convert-UML2_metamodel_to_OWL.n3p : BAD LINK <<<<<<<<<<<<
n3_new/convert-UML2_metamodel_to_OWL.n3p
http://deductions.svn.sourceforge.net/viewvc/deductions/?view=log
http://liftweb.net/
The DLV Project
A Disjunctive Datalog System (and more)
http://www.dbai.tuwien.ac.at/proj/dlv/
E-Business and Web Science Research Group at Bundeswehr University Munich.
http://ebusiness-unibw.org/
http://www.brcommunity.com/brcsearch.php?zoom_query=Silvie+Spreeuwenberg&zoom_per_page=20&zoom_and=1&zoom_sort=1
Who's Afraid of Ontologies?
http://blog.pingoured.fr/
http://www.ilrt.bris.ac.uk/aboutus/staff/staffprofile/?search=cmdms
Jean Bézivin
LRSG
Université de Nantes
http://www.flaterco.com/purls/oopsla98_bezivin/
http://www.juansequeda.com/
AIR Reasoner: The reasoner for the semantic-web rules language AIR
http://www.pipian.com/blog/category/projects/
http://www.dicosmo.org/coordinates.html
# Contenu de la base:
<file:/home/jmv/src/eulergui_new/test/math.n3p> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Ontology> .
_:sk_N3S_0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#eulergui-project-N3Source> .
<file:/home/jmv/src/eulergui_new/test/math.n3p> <http://java.sun.com/method#setN3Query> ( _:sk_N3S_0) .
<file:/home/jmv/src/eulergui_new/test/math.n3p> <http://eulergui.sf.net/ontology/project.owl.n3#imports> <math.n3> .
<file:/home/jmv/src/eulergui_new/test/math.n3p> <http://eulergui.sf.net/ontology/project.owl.n3#hasN3Query> <./math_q.n3> .
<file:/home/jmv/src/eulergui_new/test/math.n3p> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#eulergui-project-Project> .
<file:/home/jmv/src/eulergui_new/test/math.n3p> <http://java.sun.com/class#Uri> file:/home/jmv/src/eulergui_new/test/math.n3p .
<./math_q.n3> <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true .
# - Fin - 8elements.
http://www.pipian.com/blog/category/projects/
# Assign: file:/home/jmv/src/eulergui_new/test/math.n3 ==> eulergui.project.N3Source: file:/home/jmv/src/eulergui_new/test/math.n3 # Assign: file:/home/jmv/src/eulergui_new/test/math.n3p ==> eulergui.project.Project: file:/home/jmv/src/eulergui_new/test/math.n3p <file:/home/jmv/src/eulergui_new/test/math.n3p> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Ontology> . _:sk_N3S_0 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#eulergui-project-N3Source> . # Assign: file:/home/jmv/src/eulergui_new/test/math.n3 ==> eulergui.project.N3Source: file:/home/jmv/src/eulergui_new/test/math.n3 <file:/home/jmv/src/eulergui_new/test/math.n3p> <http://java.sun.com/method#setN3Query> ( _:sk_N3S_0) . # Assign: file:/home/jmv/src/eulergui_new/test/math.n3p ==> eulergui.project.Project: file:/home/jmv/src/eulergui_new/test/math.n3p <file:/home/jmv/src/eulergui_new/test/math.n3p> <http://eulergui.sf.net/ontology/project.owl.n3#imports> <math.n3> . <file:/home/jmv/src/eulergui_new/test/math.n3p> <http://eulergui.sf.net/ontology/project.owl.n3#hasN3Query> <./math_q.n3> . # Assign: file:/home/jmv/src/eulergui_new/test/math.n3 ==> eulergui.project.N3Source: file:/home/jmv/src/eulergui_new/test/math.n3 <file:/home/jmv/src/eulergui_new/test/math.n3p> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#eulergui-project-Project> . <file:/home/jmv/src/eulergui_new/test/math.n3p> <http://java.sun.com/class#Uri> file:/home/jmv/src/eulergui_new/test/math.n3p . file:/home/jmv/src/eulergui_new/test/math_q.n3 <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true . _:sk_N3S_0 <http://java.sun.com/class#URI> ./math_q.n3 .
Sent! for 1.7.1
EulerGUI is a GUI for N3 / RDF and rules, centered on the N3 language.
It can launch these inference engines for N3 logic :
- Euler (embedded for Linux and Windows)
- Drools / N3 (embedded)
- CWM, FuXi (external programs)
It is Open Source, written in Java Swing.
It has an N3 textual editor, with syntax coloring, tooltips on terms based on rdfs:label and rdfs:comment. This N3 editor is reusing the famous jEdit editor.
EulerGUI includes SPARQL queries, Pellet OWL reasoner, Graphviz diagram, etc.
It has importers for OWL+SWRL ontologies, plain XML, UML, eCore, java bytecode (just method signatures).
DOWNLOAD:
http://sourceforge.net/projects/eulergui/
User Manual: http://eulergui.sourceforge.net/documentation.html
Sent! for 1.7 and 1.7.1
Reminder:
EulerGUI is a GUI for N3 / RDF and rules, centered on the N3 language. It is Open Source, written in Java Swing.
N3 is a human readable language for RDF, OWL, and rules. It is used by many tools (including Protégé); N3 rules look like the query language SPARQL.
EulerGUI has an N3 textual editor, with syntax coloring, tooltips on terms based on rdfs:label and rdfs:comment. This N3 editor is reusing the famous jEdit editor.
EulerGUI includes SPARQL queries, Pellet OWL reasoner, Graphviz diagram, etc.
It has importers for OWL+SWRL ontologies, plain XML, etc.
It can launch several N3 logic engines.
For Protégé users, the main new features are:
- Read an OWL/XML document; from a file XXX.xml, XXX.owl, or from an URL;
- when an OWL, RDF, XML, XMI file is modified on disk by Protégé, it is re-loaded and re-translated automatically to N3 within EulerGUI
This allows to enter OWL + SWRL in Protégé 4.1 or older, and run the SWRL rules in the EulerGUI window, by just clicking a button in EulerGUI.
More details in the CHANGELOG.
Sent! for 1.7 and 1.7.1
Reminder:
EulerGUI is a GUI for N3 / RDF and rules, centered on the N3 language. It is Open Source, written in Java Swing, and reuses Jena, Arq, and Gloze.
It has an N3 textual editor, with syntax coloring, tooltips on terms based on rdfs:label and rdfs:comment. This N3 editor is reusing the famous jEdit editor.
EulerGUI includes SPARQL queries, Pellet OWL reasoner, Graphviz diagram, etc.
It has importers for OWL+SWRL ontologies, plain XML, plain XML, UML, eCore, java bytecode (just method signatures).
It can launch several N3 logic engines.
For Jena users, the main new features are:
- Read an OWL/XML document; from a file XXX.xml , XXX.owl, or from an URL; recognizes the root XML element (uses OWL API 3.1.0)
- when an N3, OWL, RDF, XML, XMI file is modified on disk or Internet, it is re-loaded, re-translated to N3, re-parsed, and syntax errors are highlighted
- editor uses the nice http://prefix.cc Webservice for filling missing N3 prefixes when saving N3 files
- N3 conversions of plain XML documents (by Gloze) are cached
- new N3 - Java mapping, leverages on Drools inference engine to call Java methods in real time from N3 rules; will replace the JavaScript+Java translator in most places
More details in the CHANGELOG.
Sent! for 1.7.1
rules-users@lists.jboss.org
Reminder:
EulerGUI is a GUI for Semantic Web plus rules, centered on the N3 language. It is Open Source, written in Java Swing, and reuses Drools, Jena, etc.
It has an N3 textual editor, with syntax coloring, tooltips. This N3 editor is reusing the famous jEdit editor.
EulerGUI includes SPARQL queries, Pellet OWL reasoner, Graphviz diagram, etc.
It has importers for OWL+SWRL ontologies, plain XML, plain XML, UML, eCore, java bytecode (just method signatures).
It can launch several N3 logic engines, the main being based on Drools, by translating N3 rules (adapted to the Semantic Web) to Drools rules language.
For Drools users, the main new features are:
- Drools N3 engine :
* Use Drools' insertLogical() feature for automatic retraction of consequences no more holding,
* implement e:max, e:min (with dynamic RDF lists coming from e:findall)
* better handling of RDF lists, predicates list:in, math:memberCount
* better translation of e:findall
* fewer calls to the eval() macro of Drools,
* implement add and multiply builtins with more than 2 operands
* eg:trace works with variables created in an algebraic formula
* Jos de Roo's owl rules for OWL now passes Drools translation
- new cache for compiled rule bases using OSCache
- new N3 - Java mapping, leverages on Drools to call Java methods in real time from N3 rules; will replace the JavaScript+Java translator in most places
More details in the CHANGELOG.
DOWNLOAD:
http://sourceforge.net/projects/eulergui/
User Manual: http://eulergui.sourceforge.net/documentation.html
Sent! for 1.7.1
EulerGUI is a GUI for N3 / RDF and rules, centered on the N3 language.
It is Open Source, written in Java Swing.
It has an N3 textual editor, with syntax coloring, tooltips on terms based on rdfs:label and rdfs:comment. This N3 editor is reusing the famous jEdit editor.
EulerGUI includes SPARQL queries, Pellet OWL reasoner, Graphviz diagram, etc.
It has importers for OWL+SWRL ontologies, plain XML, UML, eCore, java bytecode (just method signatures).
It can launch these N3 logic engines:
- Euler (embedded for Linux and Windows)
- Drools / N3 (embedded)
- CWM, FuXi (external programs)
More details in the CHANGELOG.
DOWNLOAD:
http://sourceforge.net/projects/eulergui/
User Manual: http://eulergui.sourceforge.net/documentation.html
Sent! for 1.7.1
EulerGUI is a GUI for N3 / RDF and rules, centered on the N3 language.
It is Open Source, written in Java Swing.
It has an N3 textual editor, with syntax coloring, tooltips on terms based on rdfs:label and rdfs:comment. This N3 editor is reusing the famous jEdit editor.
EulerGUI includes SPARQL queries, Pellet OWL reasoner, Graphviz diagram, etc.
It has importers for OWL+SWRL ontologies, plain XML, UML, eCore, java bytecode (just method signatures).
It can launch these N3 logic engines:
- Euler (embedded for Linux and Windows)
- Drools / N3 (embedded)
- CWM, FuXi (external programs)
More details in the CHANGELOG.
DOWNLOAD:
http://sourceforge.net/projects/eulergui/
User Manual: http://eulergui.sourceforge.net/documentation.html
Sent! for 1.7.1
Rappel
EulerGUI est une interface graphique pour N3 / RDF et les règles, centrée sur le langage N3.
Il est Open Source, écrit en Java Swing.
Il dispose d'un éditeur textuel N3, avec coloration syntaxique, des info-bulles sur les termes à partir de rdfs:comment et rdfs:label . Cet éditeur N3 est la réutilisation du célèbre éditeur jEdit .
EulerGUI comprend les requêtes SPARQL, le raisonneur OWL Pellet , des diagrammes avec Graphviz, etc.
Il a des importateurs pour: ontologies OWL + SWRL , XML brut, UML, eCore, bytecode java (signatures de méthodes seulement ).
Il peut lancer ces moteurs en logique N3:
- Euler (embarqué pour Linux et Windows)
- Drools / N3 (embarqué)
- CWM, Fuxi (programmes externes)
Plus de détails dans le CHANGELOG.
Téléchargement: http://sourceforge.net/projects/eulergui/
Manuel utilisateur : http://eulergui.sourceforge.net/documentation.html
Corrections to DesignIssues/N3Logic was sent :
19 février 2010 17:08
I was based on this Revision :
Tim Berners-Lee, August 2005
$Revision: 1.19 $ of $Date: 2011-06-13$
Today, http://www.w3.org/DesignIssues/N3Logic.html says:
Tim Berners-Lee, August 2005
$Revision: 1.19 $ of $Date: 2011-06-13$
The version commited in eulergui :
% head html/N3Logic.html<!-- saved from url=(0063)file:///home/jmv/Documents/www.w3.org/DesignIssues/N3Logic.html --><HTML xmlns="http://www.w3.org/1999/xhtml"><HEAD><META http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"><TITLE>Notation 3 Logic </TITLE><LINK href="file:///home/jmv/Documents/www.w3.org/DesignIssues/di.css" rel="stylesheet" type="text/css"></HEAD><BODY xml:lang="en" lang="en"><ADDRESS>Tim Berners-Lee, August 2005<BR><SMALL>$Revision: 1.19 $ of $Date: 2011-06-13$</SMALL><BR>
This old HTML formatting is bad , and I can't remember how I made it.
The version sent to Tim Berners-Lee :
% head -33 /home/jmv/Téléchargements/N3Logic.html <?xml version="1.0" encoding="iso-8859-1"?> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1" /> <title>Notation 3 Logic </title> <link href="di.css" rel="stylesheet" type="text/css" /> </head> <body xml:lang="en" lang="en"> <address> Tim Berners-Lee, August 2005<br /> <small>$Revision: 1.19 $ of $Date: 2011-06-13$</small><br /> Status: An early draft of a semi-formal semantics of the N3 logical properties. </address>
And a version downloaded from W3C 3 days ago :
% head -33 N3Logic.html
<?xml version="1.0" encoding="iso-8859-1"?>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta name="generator" content=
"HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org" />
<meta http-equiv="content-type" content=
"text/html; charset=us-ascii" />
<title>
Notation 3 Logic
</title>
<link href="di.css" rel="stylesheet" type="text/css" />
</head>
<body>
<address>
Tim Berners-Lee, August 2005<br />
<small>$Revision: 1.19 $ of $Date: 2011-06-13$</small><br />
Status: An early draft of a semi-formal semantics of the N3
logical properties.
</address>
Now diffing my version passed in Tidy with the latest Tim version gives this :
1a2,3 > <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" > "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 5c7 < "HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org" /> --- > "HTML Tidy for Linux (vers 25 March 2009), see www.w3.org" /> 8,10c10 < <title> < Notation 3 Logic < </title> --- > <title>Notation 3 Logic</title>
So the real issue is that the two tidy versions differ in formatting.
For now, I'll commit this version.
I tried a smart thing. I pass Time latest version in my Linux version of Tidy :
tidy -asxml N3Logic.html > N3Logic_tidy.html
Now the diff gets much better!
COMMITED:
Enhanced N3Logic.html (my corrections to DesignIssues/N3Logic by Tim Berners-Lee)
The old HTML formatting was bad , and I can't remember how I made it.
I took the version that I mailed to timbl on 19 feb. 2010 17:08 ,
and applied to it tidy -asxml
Now the diff with current timbl's version on W3C gets much better,
provided that I also apply tidy -asxml to timbl's version;
this is because he used
HTML Tidy for Mac OS X (vers 31 October 2006 - Apple Inc. build 13), see www.w3.org"
and I use
HTML Tidy for Linux (vers 25 March 2009)
TODO: still a problem with differences in nbsp's
1,$s/ / \ /g
http://www.w3.org/DesignIssues/Notation3
new snapshot with last new feature http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L6597
Revision 2012
eulergui.gui.TestImportSwrl
Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 37.479 sec <<< FAILURE!
in N3ConversionRefesher.updateKB(Project project, N3Source n3)
add n3 to KB only if it is Activated
Unité d'exécution [main] (Suspendue (point d'arrêt à la ligne 513 de N3SourcetoDrools)) N3SourcetoDrools.copyN3factsToDrools() ligne : 513 N3toDroolsUpdater.copyN3factsToDrools() ligne : 186 Project.translateToDrools(N3Source, boolean) ligne : 868 N3ConversionRefesher.updateKB(Project, N3Source) ligne : 106 N3ConversionRefesher.n3SourceAdded(Project, N3Source) ligne : 47 ProjectChangeSupport.fireAddN3Source(Project, N3Source) ligne : 72 Project.rethrowEventsPlease() ligne : 1352 ProjectGUI.newWindow(Project, boolean) ligne : 247 ProjectGUI.main(String[]) ligne : 191
17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.NullPointerException 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1261) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.drools.common.AbstractWorkingMemory.retract(AbstractWorkingMemory.java:1242) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.helpers.N3SourcetoDrools.removeRulePackage(N3SourcetoDrools.java:767) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:84) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.project.Project.translateToDrools(Project.java:867) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.controller.N3ConversionRefesher.updateKB(N3ConversionRefesher.java:106) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.controller.N3ConversionRefesher.n3SourceActivationChanged(N3ConversionRefesher.java:56) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.project.ProjectChangeSupport.fireN3SourceActivationChanged(ProjectChangeSupport.java:151) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.project.Project.fireN3SourceActivationChanged(Project.java:1374) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.project.N3Source.setActivated(N3Source.java:282) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.ButtonsForN3Source$ActivatedItemListener.itemStateChanged(ButtonsForN3Source.java:163) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton.fireItemStateChanged(AbstractButton.java:2023) 17:08:22 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.AbstractButton$Handler.itemStateChanged(AbstractButton.java:2325)
Gonzalez Hugo Universidad Politécnica de Cataluña Spain
Larrañaga Xabier Amutxastegi SJER Spain
Ortiz Rebón Grupo de Inteligencia Computacional de la UPV/EHU Spain
Toro Carlos VICOMTech Spain
Yepez Luis Universidad Politécnica de Cataluña Spain
Zuloaga Urko SJER Spain
Fixed a regression in SWRL import introduced at revision 1991
Still test in timeout : TestSwingGeneration.test_ecore()
In N3ConversionRefesher.n3SourceActivationChanged()
when N3 source is Activated ( and was deActivated before), add the Triple facts to the user KB
http://reasoner4j.svn.sourceforge.net/viewvc/reasoner4j/
TODO before release
New popup messages for bad URL in N3 source, open project, and open sub-project
TODO
<jmv_> Besides RIF_In_RDF http://www.w3.org/2005/rules/wiki/RIF_In_RDF , is there another RDF vocab for rules ?
RIF:
rule raise_rate { when { a: Account(r: rate; r > 1; r < 2); } then { modify a { rate = 2; } } } |
N3 equivalent in EulerGUI:
{ a1 a Account; rate ?r. ?r math:greaterThan 1; math:lessThan 2 . } => { -:d kb:replaceValue ( a1 rate 1 2 ) . } |
Thinking of writing a rule-based generic compiler for RETE engines.
Using @cygri's nice and useful http://prefix.cc Web service for filling missing N3 prefixes when saving files in EulerGUI
Searching people knowledgeable in rule engines and/or logic programming
I had a look at RIF_In_RDF http://www.w3.org/2005/rules/wiki/RIF_In_RDF ; I think the mapping should be done like Gloze does. (mail to Sandro )
spinrdf
I actually have rules in N3 to transform SWRL into N3
refactoring : put all of class EulerBuiltins into class MathBuiltins
http://www.w3.org/2005/rules/wiki/RIF_In_RDF
RIF In RDF
Editors
Sandro Hawke, W3C/MIT
Axel Polleres, DERI, NUI Galway
Abstract
This document specifies a reversible mapping (or transformation) from Rule Interchange Format (RIF) XML documents to Resource Description Framework (RDF) graphs. This mapping allows the contents of RIF documents to be interoperably stored and processed as RDF triples, using existing serializations and tools for RDF. When used with the standard mapping from RDF triples to RIF frames, this also provides a "reflection" or "introspection" mechanism, an interoperable way for RIF rules to operate on RIF documents.
The N3 is translated 3 times into Drools :
Run Drools:
Unité d'exécution [AWT-EventQueue-0] (Suspendue (point d'arrêt à la ligne 225 de DroolsTripleHandler)) DroolsTripleHandler.acceptConsequent(String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String) ligne : 225 ParserLink.visitAllURI(LineTrackingTripleHandler) ligne : 800 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 269 N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 236 N3toDroolsUpdater.translate(N3Source, boolean) ligne : 85 Project.doTranslateN32Drools(boolean) ligne : 819 Project.translateN32Drools(boolean) ligne : 795 Project.prepareDrools(boolean) ligne : 760 Project.doRunDrools(boolean) ligne : 716 Project.runDroolsTriples(boolean) ligne : 674 RunDroolsAction.actionPerformed(ActionEvent) ligne : 48 JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) ligne : 1995 |
Open the project:
Unité d'exécution [main] (Suspendue (point d'arrêt à la ligne 225 de DroolsTripleHandler)) DroolsTripleHandler.acceptConsequent(String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String) ligne : 225 ParserLink.visitAllURI(LineTrackingTripleHandler) ligne : 800 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 269 N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 236 N3toDroolsUpdater.translate(N3Source, boolean) ligne : 85 Project.translateToDrools(N3Source, boolean) ligne : 860 N3ConversionRefesher.updateKB(Project, N3Source) ligne : 89 N3ConversionRefesher.n3SourceAdded(Project, N3Source) ligne : 47 ProjectChangeSupport.fireAddN3Source(Project, N3Source) ligne : 72 Project.rethrowEventsPlease() ligne : 1345 ProjectGUI.newWindow(Project, boolean) ligne : 247 ProjectGUI.main(String[]) ligne : 191 |
Unité d'exécution [main] (Suspendue (point d'arrêt à la ligne 225 de DroolsTripleHandler))
DroolsTripleHandler.acceptConsequent(String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String) ligne : 225
ParserLink.visitAllURI(LineTrackingTripleHandler) ligne : 800
N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 269
N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 236
N3toDroolsUpdater.translate(N3Source, boolean) ligne : 85
Project.doTranslateN32Drools(boolean) ligne : 819
Project.translateN32Drools(boolean) ligne : 795
Project.prepareDrools(boolean) ligne : 760
Project.prepare() ligne : 1138
ProjectFactory.prepareProject(Project, URL, boolean) ligne : 272
ProjectFactory.restore(File, URL, boolean) ligne : 165
ProjectFactory.restore(File, boolean) ligne : 72
ProjectFactory.restoreAny(File, boolean) ligne : 328
ProjectFactory.restore(String, boolean) ligne : 56
ProjectGUI.main(String[]) ligne : 186
|
- Prefix was wrong : http://www.w3.org/2005/xpath-functions
- added tests in math.n3 for:
- process statically created lists in e:max , e:min
- process dynamically created lists in math:sum, etc
I wonder if automatic retract works for Collections, e.g. :
when $c : Customer( totalsOrders > 100000 ) then $list.add( $c )
Well, it can't, as for automatic retract , an insertLogical() is to be used, and we have no addLogical() for Collections.
This will do automatic retract :
when $c : Customer( totalsOrders > 100000 ) then insertLogical(new Display( $c, $goodCustomersPanel ) )
But the question : how to have a GUI display of the Display objects without too much ad-hoc code ?
The solution I see is to have Drools query for the Display objets , launch this query at every firing of rules, and re-populate the GUI with the result of the query.
On swig IRC :
<jmv_> Any idea of an ontology for units and physical elements like mass, length, temperature ... maybe as properties on DataType Properties, or classes Unit and Measurement ?
<tobyink> jmv_: take a look at http://forge.morfeo-project.org/wiki_en/index.php/Units_of_measurement_ontology
<tobyink> However, it uses the http://esw.w3.org/InterpretationProperties antipattern.
<tobyink> i.e. it models things like this: <#me> :height [ :value 178 ; :unit :centimetres ] .
<tobyink> whereas it's better to model things like this: <#me> :height [ :centimetres 178 ] .
<tobyink> or even: <#me> :height "178"^^:centimetres .
remove field editedN3Source in Project
TODO : remove URIModificationChecker when the GUI is closed
- statically created lists in e:max , e:min
TODO in
( 3 2 4 1 ) e:max ?MAX .
?MAX is 4.0 . e:max should return 4 , or ?MAX log:equalTo 4.0 be true
# TODO anyway I don't know how to make use of ?MAX in the antecedent;
# same old problem of creating variables in the antecedent that are not
# associated to a Drools object criterium (alias Pattern in Drools doc)
Maybe we can use from accumulate create the list from its elements
- ensure the bidirectional association between EditorManagement and ProjectGUI
- pave the way for using http://prefix.cc for filling missing prefixes when saving N3 files
http://twitter.com/josderoo
?LIST e:max ?MAX . ?MAX log:equalTo 8848 .
jmv> I try to compute in the LHS the sum of a List of String ; the problem is parse the strings as number; I tried this :
$MAX : Number() from accumulate( $MAX_STRING : String from $LIST , max( Double.parseDouble($MAX_STRING) ) )
Trials in Drools:
$MAX : Number() from accumulate( $NUM : Number() , $LIST.contains( $NUM ) , max($NUM) )
??????????????? or :
$MAX : Number() from accumulate( $NUM : Number() from $LIST , max($NUM) ) // rather: $MAX : Number() from accumulate( $S : String from $LIST , $NUM : Double(Double.parseDouble($S)) , max($NUM) )
Unité d'exécution [AWT-EventQueue-0] (Suspendue (point d'arrêt à la ligne 267 de ResultManagement)) ResultManagement.displayOriginalSourceWithErrors(N3Source, N3ParseResult) ligne : 267 N3ConversionRefesher.updateN3(N3Source) ligne : 81 N3ConversionRefesher.n3SourceAdded(Project, N3Source) ligne : 50 ProjectChangeSupport.fireAddN3Source(Project, N3Source) ligne : 72 Project.rethrowEventsPlease() ligne : 1345 ProjectFileManagement$1.actionPerformed(ActionEvent) ligne : 82 JMenu$1(AbstractButton).fireActionPerformed(ActionEvent) ligne : 1995 AbstractButton$Handler.actionPerformed(ActionEvent) ligne : 2318 DefaultButtonModel.fireActionPerformed(ActionEvent) ligne : 387 DefaultButtonModel.setPressed(boolean) ligne : 242 JMenu$1(AbstractButton).doClick(int) ligne : 357 BasicMenuItemUI.doClick(MenuSelectionManager) ligne : 1223 |
file:/home/jmv/src/eulergui_new/bbtransitiveProp.n3 has changed on disk or on Internet Error during re-parsing N3 source Cause: n3_project.exceptions.parser.ParsingException: parse succeed reduce error: bad data class class net.sf.parser4j.parser.entity.parsenode.data.NullParseNodeData no prefix for "rdfs:" bad data class class net.sf.parser4j.parser.entity.parsenode.data.NullParseNodeData no prefix for "rdfs:"
http://prefix.cc/eu
http://prefix.cc/eg TODO
http://www-sop.inria.fr/edelweiss/software/corese/kgram/index.php
COMMITED
FEATURE: now N3 conversions of plain XML documents (by Gloze) are cached
CAVEAT: HTTP URL's without "last updated" header are never updated
implementation: using URICacheOSCache
ProjectFactory : Remove unnecessary call to prepareN3Sources()
Tests run: 133, Failures: 0, Errors: 0, Skipped: 0
BUILD SUCCESSFUL
[INFO] Total time: 12 minutes 28 seconds
TODO
needed to cut method Project.prepare() in pieces , to be able to recompile by Drools for one N3 source
feature:
- after adding an N3 file, the tooltips in N3 editor are active
TESTED : scenario: adding to an empty project: examples/person-app-spec.n3
- now adding an erroneous N3 file triggers the usual red popup
- ensure the bidirectional association between EditorManagement and ProjectGUI
- DONE: further error in the newly added N3 file triggers nothing
[INFO] BUILD SUCCESSFUL [INFO] Total time: 11 minutes 16 seconds [INFO] Finished at: Wed Dec 08 16:41:22 CET 2010 [INFO] Final Memory: 63M/361M % svn info Révision : 1963
TODO
COMITTED
Remove the preparations during reading by XMLDecoder, in the case of subprojects
With these commits, the tests in trunk are correct again:
Revision 1959 - Directory Listing
Modified Wed Dec 8 10:50:11 2010 UTC (2 minutes, 5 seconds ago) by jmvanel
Project : for subprojects, during Drools runs, the argument useInsertLogical was not passed,
which caused functional tests TestGenericGuiGeneration and TestSwingGeneration to fail
(they require useInsertLogical == false , which is not the default anymore )
Revision 1958 - Directory Listing
Modified Wed Dec 8 10:20:47 2010 UTC (31 minutes, 29 seconds ago) by jmvanel
TestRulesForUserEvents was doing an infinite loop ; need to call
project.runDroolsTriples()
with useInsertLogical == false
TODO
java.net.ConnectException: Connexion terminée par expiration du délai d'attente
the application is not reactive:
should do the inference runs in threads
( note that currently things are NOT done anyway in Project.rethrowEventsPlease() )
{ P? :hasChild ?C } => { ?P :parentRole ?R }.
GOALS
ISSUES
in ProjectFactory.restore(File projectFile, URL url, boolean inactivateListeners)
Removed this in Project's comments
* For Euler SEM reasoner, We would like to reuse the same rules and facts
* compiled in Prolog for several queries, but this is not currently possible in
* Euler due to 2 problems. There is a problem when translating in Prolog the
* query alone: no query on output.
* <p/>
* A 2nd problem is with the namespace prefix renaming that could be the case in
* the query file, so the transaction approach is the only feasible one at the
* moment.
COMITTED
although running the projects manually with useInsertLogical==true meets no problem;
also running the homolog projects in n3_logical/ meets no problem
Tests run: 120, Failures: 0, Errors: 0, Skipped: 0
[INFO] -------------------------------------------------------
[ERROR] BUILD FAILURE
I tried to pass tests like this, but this does not exclude anything.
DISPLAY=:1 LANG=en mvn -e -DPARSER4J_TESTS=no \ '-Dmaven.test.excludes=**/TestGenericGuiGeneration.java' test |
<bentmann> I see no expression mentioned in the Surefire docs for the excludes param which means it can't be set from CLI
<jmv> bentmann, you mean Surefire docs == http://maven.apache.org/plugins/maven-surefire-plugin/test-mojo.html#excludes ?
<bentmann> yes
<jmv> I optimistically though that CLI were available for everything that is available with pom.xml .
Last prints for TestGenericGuiGeneration with cv2.n3p with useInsertLogical==false :
#TRACE ( ">>> implement DatatypeInputWidget" _:sk_PROPERTY_43 _:sk_FIELD_173 _:sk_JPANEL_FIELD_174 ) #TRACE ( "generic_gui_projection 7" _:sk_JPANEL_FORM_129 "gengui:hasComponent" _:sk_JPANEL_FIELD_174 ) #TRACE ( "9 gui:label" _:sk_FIELD_173 _:sk_PROPERTY_43 _:sk_NAME_44 ) #TRACE ( "9 gui:label" _:sk_FIELD_173 _:sk_PROPERTY_43 "cvCopyright" ) #TRACE ( "6" _:sk_PROPERTY_43 <http://www.w3.org/2000/01/rdf-schema#range> <http://www.w3.org/2001/XMLSchema#string> ) #TRACE ( "added a subject to the field: " _:sk_RESOURCE_128 _:sk_FIELD_173 ) #TRACE ( ":form_no_subclasses :DEBUG" _:sk_OWL_CLASS_6 ) #TRACE ( "generic_gui_projection 12" _:sk_FIELD_132 "gui:type" _:sk_OWL_CLASS_6 ) #TRACE ( "2" _:sk_PROPERTY_36 "a :OWLProperty" ) #TRACE ( ":form_no_subclasses :DEBUG" _:sk_OWL_CLASS_27 ) #TRACE ( "generic_gui_projection 12" _:sk_FIELD_131 "gui:type" _:sk_OWL_CLASS_27 ) #TRACE ( "2" _:sk_PROPERTY_115 "a :OWLProperty" ) #TRACE ( ":form_no_subclasses :DEBUG" _:sk_OWL_CLASS_120 ) #TRACE ( "generic_gui_projection 12" _:sk_FIELD_160 "gui:type" _:sk_OWL_CLASS_120 ) #TRACE ( "2" _:sk_PROPERTY_9 "a :OWLProperty" ) #TRACE ( "1" _:sk_PROPERTY_98 "ObjectProperty" "a :OWLProperty" ) |
http://downloads.jboss.com/drools/updatesite3.5/
I have a very simple rule with a single criterium, a single insert on the RHS, and a single matching initial fact , but I can't understand why it triggers twice .
Unité d'exécution [main] (Suspendue (point d'arrêt à la ligne 390 de N3SourcetoDrools)) N3SourcetoDrools.droolsCompile(String) ligne : 390 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 298 N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 236 N3toDroolsUpdater.translate(N3Source, boolean) ligne : 88 Project.doTranslateN32Drools(boolean) ligne : 817 Project.translateN32Drools(boolean) ligne : 789 Project.prepareDrools(boolean) ligne : 753 Project.prepare() ligne : 1119 ProjectFactory.prepareProject(Project, URL, boolean) ligne : 193 ProjectFactory.restore(File, URL, boolean) ligne : 167 ProjectFactory.restore(File) ligne : 71 ProjectFactory.restoreAny(File) ligne : 364 ProjectFactory.restore(String, boolean) ligne : 59 ProjectGUI.main(String[]) ligne : 186
Unité d'exécution [AWT-EventQueue-0] (Suspendue (point d'arrêt à la ligne 390 de N3SourcetoDrools)) N3SourcetoDrools.droolsCompile(String) ligne : 390 N3SourcetoDrools.translate(IRDFIterator, boolean, boolean) ligne : 298 N3SourcetoDrools.translate(N3Source, boolean, boolean) ligne : 236 N3toDroolsUpdater.translate(N3Source, boolean) ligne : 88 Project.doTranslateN32Drools(boolean) ligne : 817 Project.translateN32Drools(boolean) ligne : 789 Project.prepareDrools(boolean) ligne : 753 Project.doRunDrools(boolean) ligne : 709 Project.runDroolsTriples(boolean) ligne : 667 RunDroolsAction.actionPerformed(ActionEvent) ligne : 48 JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) ligne : 1995
#TRACE ( "FocusLostEvent" "kb:replaceValue" _:sk_FIELD_259 _:sk_RESOURCE_55 <http://jmvanel.free.fr/ontology/examples/person#birthday> "" "" ) replaceValue [fact 0:13750:1793879339:-2043207012:1056078:DEFAULT:_:sk_RESOURCE_55 <http://jmvanel.free.fr/ontology/examples/person#birthday> "" . #U ]
Started a thread about expressing counting, maximum, sums in ACE:
https://lists.ifi.uzh.ch/pipermail/attempto/2010-December/000672.html
See entry in my blog yesterday: "Représentation des connaissances : exprimer maximum, sommation"
FIXED REGRESSION from refactoring branch: in doing "Save as"; the subproject's query was saved in the main project as a seemingly local file;
TESTED with examples/acceleration_form.n3p.
Note that the project's main query coming from the subproject is present as a button.
java.lang.OutOfMemoryError: PermGen space
java.lang.IllegalArgumentException: URI scheme is not "file" at java.io.File.<init>(File.java:366) at n3_project.IOManager.getInputStream(IOManager.java:41) at eulergui.parser.n3.impl.parser4j.service.TestForJos.doTheTestForOneFile(TestForJos.java:89) at eulergui.parser.n3.impl.parser4j.service.TestForJos.doTheTest(TestForJos.java:77) at eulergui.parser.n3.impl.parser4j.service.TestForJos.testFromEulerSharp(TestForJos.java:62) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at junit.framework.TestCase.runTest(TestCase.java:154) at junit.framework.TestCase.runBare(TestCase.java:127) at junit.framework.TestResult$1.protect(TestResult.java:106) at junit.framework.TestResult.runProtected(TestResult.java:124) at junit.framework.TestResult.run(TestResult.java:109) at junit.framework.TestCase.run(TestCase.java:118) at junit.framework.TestSuite.runTest(TestSuite.java:208) at junit.framework.TestSuite.run(TestSuite.java:203) at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130) at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197) [ INFO] - 2010-12-04 17:25:55,368 [main] eulergui.parser.n3.impl.parser4j.service.TestForJos (TestForJos.java:doTheTestForOneFile:84) http://eulersharp.sourceforge.net/2003/03swap/graph.axiom.n3
TODO
DONE
Now the GUI for pricing appears in EulerGUI
- add query2.n3 (it is already in the subproject, but there is a bug in EulerGUI right now )
Form generation examples, like deductions/samples/pricing/pricing-gui.n3p , give a correct (but simple) result.
Implement sum rule; syntax correct with CWM, Euler and Parser4J/N3 , e.g. :
eye --pass --nope pricing.n3
With useInsertLogical == true in EulerGUI , the test suite seems without error or failure but it says :
Tests run: 128, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [ERROR] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] There are test failures. Please refer to /home/jmv/src/eulergui_test/eulergui/target/surefire-reports for the individual test results. [INFO] ------------------------------------------------------------------------ [INFO] For more information, run Maven with the -e switch [INFO] ------------------------------------------------------------------------ [INFO] Total time: 12 minutes 49 seconds |
Moreover, some form generation examples run forever, like examples/acceleration_form.n3p .
With useInsertLogical == false in EulerGUI :
Running eulergui.gui.TestGenericGuiGeneration Tests run: 8, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 176.882 sec <<< FAILURE!
CONCLUSION: TODO:
We must debug the form generation rule base in swing-rules3.n3p . There are 2 different problems: 1) infinite loop 2) pricing-gui.n3p gives an empty result, due to main query from subproject not taken in account . This is also the oportunity to enhance debugging tools.
In fact the problem was not "main query from subproject not taken in account", it was in doing "Save as"; the subproject's query was saved in the main project.
Other TODO:
com.hp.hpl.jena.n3.turtle.parser.TokenMgrError: Lexical error at line 65, column 161. Encountered: "\n" (10), after : "\" describes what the application is used for;"
I upload a snapshot for Revision : 1944 . <<<<<<
TODO
Three lines are incorrect in the internal KB:
file:/home/jmv/src/deductions/samples/pricing/query2.n3 <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true . http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/query2.n3 <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true . <file:/home/jmv/src/deductions/samples/pricing/pricing-gui.n3p> <http://java.sun.com/class#Uri> file:/home/jmv/src/deductions/samples/pricing/pricing-gui.n3p .
Should be:
<file:/home/jmv/src/deductions/samples/pricing/query2.n3> <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true .
<http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/query2.n3> <http://eulergui.sf.net/ontology/project.owl.n3#isMainQuery> true .
<file:/home/jmv/src/deductions/samples/pricing/pricing-gui.n3p> <http://java.sun.com/class#Uri> <file:/home/jmv/src/deductions/samples/pricing/pricing-gui.n3p> .
12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: java.net.ConnectException: Connection refused: connect 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.PlainSocketImpl.socketConnect(Native Method) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.PlainSocketImpl.doConnect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.PlainSocketImpl.connectToAddress(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.PlainSocketImpl.connect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.SocksSocketImpl.connect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.Socket.connect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.net.Socket.connect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.NetworkClient.doConnect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.http.HttpClient.openServer(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.http.HttpClient.openServer(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.http.HttpClient.<init>(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.http.HttpClient.New(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.http.HttpClient.New(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.protocol.http.HttpURLConnection.plainConnect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at sun.net.www.protocol.http.HttpURLConnection.connect(Unknown Source) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.infrastructure.cache.URICacheImpl.getURITimeStamp(URICacheImpl.java:95) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.infrastructure.cache.URICacheImpl.getURITimeStamp(URICacheImpl.java:77) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:70) 12:18:49 [N3 sources modification Checker] [error] N3 sources modification Checker: at java.lang.Thread.run(Unknown Source) |
N3 mode (syntax) now works from within the jar, in /modes/n3.xml
but if present, the mode $HOME/.jedit/modes/n3.xml will be applied instead.
Solved by defensive programming:
Thread [AWT-EventQueue-0] (Suspended (exception NullPointerException))
Hashtable<K,V>.put(K, V) line: not available
JEditMode(Mode).setProperty(String, Object) line: 179
jEdit$7(ModeCatalogHandler).startElement(String, String, String, Attributes) line: 81
SAXParser(AbstractSAXParser).startElement(QName, XMLAttributes, Augmentations) line: not available
SAXParser(AbstractXMLDocumentParser).emptyElement(QName, XMLAttributes, Augmentations) line: not available
XMLNSDTDValidator(XMLDTDValidator).emptyElement(QName, XMLAttributes, Augmentations) line: not available
XMLNSDocumentScannerImpl.scanStartElement() line: not available
XMLNSDocumentScannerImpl$NSContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean) line: not available
XMLNSDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) line: not available
XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: not available
XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) line: not available
SAXParser(XMLParser).parse(XMLInputSource) line: not available
SAXParser(AbstractSAXParser).parse(InputSource) line: not available
XMLUtilities.parseXML(InputStream, DefaultHandler) line: 139
jEdit.loadModeCatalog(String, boolean) line: 4251
jEdit.reloadModes() line: 1324
jEdit.main(String[]) line: 467
TextEditor.displayEditor(ProjectGUI, N3Source) line: 277
EditorManagement.openJavaEditor(N3Source) line: 134
EditorManagement.doOpenEditor(N3Source) line: 104
EditorManagement.reallyDoOpenEditor(ProjectGUI, N3Source) line: 72
EditorManagement$1.actionPerformed(ActionEvent) line: 42
JButton(AbstractButton).fireActionPerformed(ActionEvent) line: not available
AbstractButton$Handler.actionPerformed(ActionEvent) line: not available
|
Microsoft Windows XP [version 5.1.2600] (C) Copyright 1985-2001 Microsoft Corp. C:\Documents and Settings\luc.PEUVRIER-LUC.000>java -version java version "1.6.0_22" Java(TM) SE Runtime Environment (build 1.6.0_22-b04) Java HotSpot(TM) Client VM (build 17.1-b03, mixed mode, sharing) |
INFO: Starting jEdit.main -gui -noserver file:/C:/_DATA/deductions/samples/pricing/pricing.n3 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: java.io.FileNotFoundException: \modes\text.xml (Le chemin d'accs spcifi est introuvable) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.io.FileInputStream.open(Native Method) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.io.FileInputStream.<init>(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.io.FileInputStream.<init>(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.syntax.ModeProvider.loadMode(ModeProvider.java:150) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.jEdit.loadMode(jEdit.java:2981) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.JEditMode.loadIfNecessary(JEditMode.java:100) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.Mode.getTokenMarker(Mode.java:114) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.buffer.JEditBuffer.setMode(JEditBuffer.java:1822) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.Buffer.setMode(Buffer.java:1152) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.Buffer.finishLoading(Buffer.java:1953) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.Buffer.access$400(Buffer.java:89) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.jedit.Buffer$1.run(Buffer.java:255) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.util.WorkThreadPool.doAWTRequest(WorkThreadPool.java:398) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.util.WorkThreadPool.doAWTRequests(WorkThreadPool.java:383) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.util.WorkThreadPool.access$200(WorkThreadPool.java:37) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at org.gjt.sp.util.WorkThreadPool$RunRequestsInAWTThread.run(WorkThreadPool.java:483) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.event.InvocationEvent.dispatch(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EventQueue.dispatchEvent(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EventDispatchThread.pumpEvents(Unknown Source) 13:55:52 [AWT-EventQueue-0] [error] jEdit$3: at java.awt.EvenDispatchThread.run(Unknown Source)
http://protege.stanford.edu/conference/2009/attendees.html
% date --rfc-3339=date 2010-12-01 % date --rfc-3339=seconds 2010-12-01 12:12:25+01:00 |
I added this update source:
babel R0.8.0 helios - http://download.eclipse.org/technology/babel/update-site/R0.8.0/helios
I works fine, but at the same time I had a hardware crash when restarting eclipse, so I lost my workspace, but not my projects.
- FIXED Infinite loops in Drools inference: hard-coded useInsertLogical = true and false was remaining
in N3SourceToDrools and N3SourceUpdater
- added a missing I18 string
#TRACE ( ">>>> starting createFormFromResource: " _:sk_FORM_33 <http://eulergui.sf.net/example#creamTart> ) #TRACE ( " " _:sk_WINDOW_32 <http://eulergui.sf.net/example#Mobile> ) #TRACE ( ">>>> createFormFromResource: " _:sk_FORM_33 <http://eulergui.sf.net/example#creamTart> <http://eulergui.sf.net/example#Mobile> ) #TRACE ( "generic_gui_projection 5" _:sk_FORM_33 "javapr:projection" _:sk_JPANEL_FORM_34 ) log:notEqualTo RT : <http://www.w3.org/2002/07/owl#Thing> <http://eulergui.sf.net/example#Mobile> #TRACE ( "3" <http://eulergui.sf.net/example#Mobile> <http://jmvanel.free.fr/ontology/gui_generic.owl#hasForm> _:sk_FORM_33 ) |
Changing this in Project.doTranslateN32Drools() solves the problem :
// getTranslator().translate( n3, useInsertLogical ); TODO test <<<<<<<<<<<<<<<<<<<<<< getTranslator().translate( n3 );
This could mean that the rule base for form generation is still not clean enough to work with insertLogical.
Or the parameter useInsertLogical
is not transmitted
correctly.
With the old line translate( n3 )
, this test runs forever :
eulergui.gui.TestGenericGuiGeneration
but the other 2 TestXXXGeneration run fine.
In fact a hard-coded useInsertLogical = true was remaining somewhere :(((
That solves the problem ! :((
A stop in the middle of the infinite run :
Unité d'exécution [AWT-EventQueue-1] (Suspendue) Class<T>.getMethod(String, Class<?>...) ligne : 1605 ReteooStatefulSession(AbstractWorkingMemory).removePropertyChangeListener(FactHandle) ligne : 1216 ReteooStatefulSession(AbstractWorkingMemory).retract(FactHandle, boolean, boolean, Rule, Activation) ligne : 1271 TruthMaintenanceSystem$LogicalRetractCallback.execute(InternalWorkingMemory) ligne : 278 ReteooStatefulSession(AbstractWorkingMemory).executeQueuedActions() ligne : 1471 ReteooStatefulSession(AbstractWorkingMemory).insert(InternalFactHandle, Object, Rule, Activation, ObjectTypeConf) ligne : 1179 ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule, Activation) ligne : 1123 DefaultKnowledgeHelper.insertLogical(Object, boolean) ligne : 160 DefaultKnowledgeHelper.insertLogical(Object) ligne : 138 Rule_generic_gui_projection_rules_n3_12_0.defaultConsequence(KnowledgeHelper) ligne : 12 Rule_generic_gui_projection_rules_n3_12_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) ligne : 24 DefaultAgenda.fireActivation(Activation) ligne : 917 DefaultAgenda.fireNextItem(AgendaFilter) ligne : 856 DefaultAgenda.fireAllRules(AgendaFilter, int) ligne : 1071 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) ligne : 785 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() ligne : 751 N3SourcetoDrools.launchDroolsKeepWM() ligne : 583 N3SourcetoDrools.launchDrools() ligne : 551 N3toDroolsUpdater.launchDrools() ligne : 48 Project.doRunDrools(boolean) ligne : 720 Project.runDroolsTriples(List<ITriple>) ligne : 670 Project.runDroolsTriples(boolean) ligne : 664 RunDroolsAction.actionPerformed(ActionEvent) ligne : 48 JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) ligne : 1995 AbstractButton$Handler.actionPerformed(ActionEvent) ligne : 2318 DefaultButtonModel.fireActionPerformed(ActionEvent) ligne : 387 DefaultButtonModel.setPressed(boolean) ligne : 242 BasicButtonListener.mouseReleased(MouseEvent) ligne : 236 AWTEventMulticaster.mouseReleased(MouseEvent) ligne : 272 JToolBar$1(Component).processMouseEvent(MouseEvent) ligne : 6267 JToolBar$1(JComponent).processMouseEvent(MouseEvent) ligne : 3267 JToolBar$1(Component).processEvent(AWTEvent) ligne : 6032 JToolBar$1(Container).processEvent(AWTEvent) ligne : 2041 JToolBar$1(Component).dispatchEventImpl(AWTEvent) ligne : 4630 JToolBar$1(Container).dispatchEventImpl(AWTEvent) ligne : 2099 JToolBar$1(Component).dispatchEvent(AWTEvent) ligne : 4460 QueueTool$JemmyQueue(EventQueue).dispatchEvent(AWTEvent) ligne : 599 QueueTool$JemmyQueue.dispatchEvent(AWTEvent) ligne : 588 EventDispatchThread.pumpOneEventForFilters(int) ligne : 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) ligne : 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) ligne : 174 EventDispatchThread.pumpEvents(int, Conditional) ligne : 169 EventDispatchThread.pumpEvents(Conditional) ligne : 161 EventDispatchThread.run() ligne : 122
Still get some test waiting forever with 100% of 1 CPU, but the preject alone runs fine (deductions/n3_logical/person_import3.n3p),
COMMITED
in N3Source.getLocation() line: 47 recompute the location everytime
TODO : that's not enough , and Tests in error:
testXMLOutputFromRDF(eulergui.gui.TestEulerGUIOutputs)
testXMLOutputFromN3(eulergui.gui.TestEulerGUIOutputs)
- REGRESSION FIXED: N3 sources' URI broken for a Web subproject of a file project:
- also changes in ProjectFactory.prepareN3Sources() : only call prepare on Direct N3 Sources and direct N3 Query
TODO: is ProjectFactory.prepareN3Sources() useful at all ?
- clean unused imports
The other problem is in this stack :
Thread [main] (Suspended (breakpoint at line 58 in N3Source)) N3Source.getLocation() line: 58 N3Source.prepare(Project) line: 405 N3Source.setProject(Project) line: 365 N3Source.prepare(Project) line: 401 ProjectFactory.prepareN3Sources(Project) line: 328 ProjectFactory.prepareProject(Project, URL, boolean) line: 186 ProjectFactory.restore(File, URL, boolean) line: 167 ProjectFactory.restore(File) line: 71 ProjectFactory.restoreAny(File) line: 362 ProjectFactory.restore(String, boolean) line: 59 ProjectGUI.main(String[]) line: 186 |
At this point the N3Source has a bad location: file:/home/jmv/src/eulergui_new/examples/software_applications.n3
within Project file:/home/jmv/src/eulergui_new/examples/acceleration_form.n3p
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 831 in Project)) Project.doTranslateN32Drools(boolean) line: 831 Project.translateN32Drools(boolean) line: 779 Project.prepareDrools(boolean) line: 759 Project.doRunDrools(boolean) line: 715 Project.runDroolsTriples(List<ITriple>) line: 670 Project.runDroolsTriples(boolean) line: 664 RunDroolsAction.actionPerformed(ActionEvent) line: 48 JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) line: 1995 |
In fact the N3Source inside the subproject
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/swing-rules3.n3p
already have this bad location.
This probably happens during ProjectFatory.restore() .
Adding this breakpoint in Project.addN3Source(N3Source n3, boolean isTransient)
n3.getLocation().toString().contains( "form-rules.n3" ) |
And this at the begining of N3Source.getLocation() :
( location != null && location.toString().contains( "form-rules.n3" ) ) || ( uri_ != null && uri_.toString().contains( "form-rules.n3" ) ) |
Now I'm here for :
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/form-rules.n3
those project is the correct one :
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/swing-rules3.n3p
but the location field was pre-computed false:
file:/home/jmv/src/eulergui_new/form-rules.n3
Thread [main] (Suspended (breakpoint at line 47 in N3Source)) N3Source.getLocation() line: 47 N3Source.prepare(Project) line: 405 N3Source.setProject(Project) line: 365 Project.addN3Source(N3Source, boolean) line: 282 Project.addN3Source(N3Source) line: 277 ProjectLegacy$1.put(String, N3Source) line: 126 ProjectLegacy$1.put(Object, Object) line: 1 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Trampoline.invoke(Method, Object, Object[]) line: 37 GeneratedMethodAccessor1.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 MethodUtil.invoke(Method, Object, Object[]) line: 244 MutableExpression(Statement).invokeInternal() line: 239 Statement.access$000(Statement) line: 39 Statement$2.run() line: 140 AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method] MutableExpression(Statement).invoke() line: 137 MutableExpression(Expression).getValue() line: 98 MutableExpression.getValue() line: 445 ObjectHandler.getValue(Expression) line: 108 ObjectHandler.endElement(String) line: 372 SAXParserImpl$JAXPSAXParser(AbstractSAXParser).endElement(QName, Augmentations) line: not available XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanEndElement() line: not available XMLDocumentScannerImpl$ContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean) line: not available XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) line: not available XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: not available XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) line: not available SAXParserImpl$JAXPSAXParser(XMLParser).parse(XMLInputSource) line: not available SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) line: not available SAXParserImpl$JAXPSAXParser.parse(InputSource) line: not available SAXParserImpl(SAXParser).parse(InputSource, HandlerBase) line: 364 SAXParserImpl(SAXParser).parse(InputStream, HandlerBase) line: 142 XMLDecoder.getHandler() line: 238 XMLDecoder.readObject() line: 201 ProjectFactory.restore(File, URL, boolean) line: 134 ProjectFactory.restore(URL, boolean) line: 239 ProjectFactory.restore(URL) line: 207 ProjectLegacy.injectSubproject(String) line: 203 ProjectLegacy.setSubProjects(HashSet<String>) line: 218 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Trampoline.invoke(Method, Object, Object[]) line: 37 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 MethodUtil.invoke(Method, Object, Object[]) line: 244 MutableExpression(Statement).invokeInternal() line: 239 Statement.access$000(Statement) line: 39 Statement$2.run() line: 140 AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method] MutableExpression(Statement).invoke() line: 137 MutableExpression(Expression).getValue() line: 98 MutableExpression.getValue() line: 445 ObjectHandler.getValue(Expression) line: 108 ObjectHandler.endElement(String) line: 372 SAXParserImpl$JAXPSAXParser(AbstractSAXParser).endElement(QName, Augmentations) line: not available XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanEndElement() line: not available XMLDocumentScannerImpl$ContentDispatcher(XMLDocumentFragmentScannerImpl$FragmentContentDispatcher).dispatch(boolean) line: not available XMLDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) line: not available XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: not available XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) line: not available SAXParserImpl$JAXPSAXParser(XMLParser).parse(XMLInputSource) line: not available SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) line: not available SAXParserImpl$JAXPSAXParser.parse(InputSource) line: not available SAXParserImpl(SAXParser).parse(InputSource, HandlerBase) line: 364 SAXParserImpl(SAXParser).parse(InputStream, HandlerBase) line: 142 XMLDecoder.getHandler() line: 238 XMLDecoder.readObject() line: 201 ProjectFactory.restore(File, URL, boolean) line: 134 ProjectFactory.restore(File) line: 71 ProjectFactory.restoreAny(File) line: 362 ProjectFactory.restore(String, boolean) line: 59 ProjectGUI.main(String[]) line: 187
Regressions
the project has as subProject
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_logical/swing-rules3.n3p
which has a different base URI than the project, which is different from the test suite;
however it has already worked ==> REGRESSION
in princing2.n3 without @keywords
the tooltips are
correct
MINOR BUG , as few N3 have @keywords
Strategies for Building Semantic Web ApplicationsStrategies for Building Semantic Web Applications
http://notes.3kbo.com/rdf2gae
http://richard.cyganiak.de/blog/2007/02/debugging-semantic-web-sites-with-curl/
FEATURE TODO
prefix.cc is useful: from this kind of URL one gets ( with N3 content type) :
http://prefix.cc/foaf,dc,owl.file.n3
@prefix foaf: <http://xmlns.com/foaf/0.1/> . @prefix dc: <http://purl.org/dc/terms/> . @prefix owl: <http://www.w3.org/2002/07/owl#> .
By entering somehow "foaf" in the GUI, the @prefix declaration will be added in the editor.
At the same time, the ontology (loaded from its URI) will be added to the project as a transient N3 source.
DONE
Regression
when saving a legacy project (with ProjectWithSubProjects) with a sub-project, everything in the sub-project was put in the main project
[FEATURE] (had been lost in the big merge) Creation of an input Form from a click in Class tree, using rules from Déductions project;
class CreateClassFormMouseListener: uses JavaScript Instantiation, not the new N3JavaMappingBuiltin
- activated; tested with new project : examples/test_form_from_treeview.n3p
- doc. updated
show using TemporaryFrame the explanation of the OWL
inconsistency when calling Pellet reasoner , using :
kb.getExplanation()
I tried the Java Swing version.
Pretty bugged and not maintained since 2003, but there are good ideas :
http://rdfweb.org/people/damian/RDFAuthor/Tutorial/Tutorial1/
http://www.ip-adress.com/
A discussion on SWIG IRC:
Hi ! In the RDF GUI I'm developing, I need to have a list of well-known RDF/N3 prefixes with the URI of the ontology which defines the URI having the prefix; e.g. :
<http://xmlns.com/foaf/0.1/> eg:prefixOf <http://xmlns.com/foaf/spec/index.rdf> .
Any suggestion for the predicate eg:prefixOf ?
<kwijibo> eulergui-1.7_: see prefix.cc/vanni est parti (Read error: Connection reset by peer) <webr
<webr3> that's not realy a prefix foaf -> http://xmlns.com/foaf/0.1/ is a prefix, the mapping you've got there is one which changes over time
<webr3> http://xmlns.com/foaf/0.1/ <-- perma uri
-dc_swig/#swig- A: http://xmlns.com/foaf/0.1/ from webr3
<eulergui-1.7__> webr3, sounds good, but what would be permanent URI for http://xmlns.com/foaf/spec/index.rdf ?
<eulergui-1.7__> kwijibo, vann has good stuff ( and my family name is Vanel ;) ) ,et by peer) <webr
<eulergui-1.7__> but it lacksiation between a prefiw and the dereferentiable location of the ontolo the association between a prefiw and the dereferentiable location of the ontology .
<webr3> eulergui-1.7__, tbh this is to do with the way FOAF and DC are published and the URIs they use, for nearly every other ontology you don't have this problem, as they all use #frag properties
<jmv__> kwijibo, in the GUI we develop (EulerGUI), there tooltips showing rdf:label and rdf:comment about the term under the mouse ( in a N3 editor ).
<kwijibo> jmv__: so?
<jmv__> so when the user is editing for example a FOAF N3 document, it needs to find the ontology ,
<jmv__> and this should be done from an N3 configuration file
<kwijibo> jmv__: you can let your http client dereference it for you? what's the use-case for knowing what it derferences to in advance ?
<jmv__> thanks, kwijibo, vann indeed suits my purpose; however I don't understand what you don't understand about my use case ...
<kwijibo> jmv__: if you do a GET on http://xmlns.com/foaf/0.1/ (and follow the redirect), you get the URL of the document - why do you need to know anything other than the http://xmlns.com/foaf/0.1/ URI ?
<kwijibo> after all, it could change it every day
<kwijibo> (the spec.rdf URL )
<jmv__> kwijibo, alas if I do a GET on http://xmlns.com/foaf/0.1/ , at least in my browser, I get an HTML page saying : FOAF Vocabulary Specification 0.98
<jmv__> Namespace Document 9 August 2010 - Marco Polo Edition , etc
<kwijibo> jmv__: that's because you're not sending an accept: application/rdf+xml header
<kwijibo> (or rather, your browser isn't)
<jmv__> Maybe if I did by program an HTTP query with content negotiation, but in the most general case the prefix URI of an ontology is not enough to donwload its definition.
<kwijibo> yeah it is
<kwijibo> if a vocab namespace URI doesn't deref, with conneg, to RDF, it's not doing it right
<jmv__> I'd like that , but It's not garantied AFAIK
<kwijibo> I bet it's more reliable than a hard coded mapping
<kwijibo> which vocabs don't deref to RDF?
<jmv__> the hard coded mapping is just for the vocabs that don't do things right
<kwijibo> which ones are they?
<jmv__> I'll try to pick one , kwijibo :)
<jmv__> kwijibo, indeed that works fine :
wget --header=accept:application/rdf+xml http://xmlns.com/foaf/0.1/
<jmv__> after dinner I'll try many more .
<kwijibo> lol
Following advice by Keith Alexander on the SWIG IRC, I'm trying RDF download with HTTP header accept:application/rdf+xml , e.g. this works:
wget --header=accept:application/rdf+xml http://xmlns.com/foaf/0.1/
From the browser, http://xmlns.com/foaf/0.1/ returns the HTML man readable specification.
In the case of SIOC, the URI is the ontology definition, and the HTML man readable specification:
http://rdfs.org/sioc/spec/
only ever returns HTML, no matter what the HTTP header accept says.
TODO
configuration file: a N3 document with lines such as :
dcterms:creator rdfs:seeAlso http://purl.org/dc/terms/
will be used to associate the the property with the ontology defining it;
or :
dcterms: eg:prefix http://purl.org/dc/terms/
<http://xmlns.com/foaf/0.1/> eg:prefixOf
http://xmlns.com/foaf/spec/index.rdf
examples/famous-ontologies.n3p
DONE
doc.: enhance:
- Finding data on the Web (LOD),
- Finding rules on the Web; rules for OWL concepts
- difference in behavior between queries like SPARQL queries, and rules like N3 or SWRL rules
TODO: update with respect to CHANGELOG
SNAPSHOT uploaded on nov. 29 at 14: SCM-Revision: 1928
Tests run: 132, Failures: 0, Errors: 0, Skipped: 0[INFO] -------------------------------------------------------- [INFO] BUILD SUCCESSFUL[INFO] [INFO] Total time: 13 minutes 8 seconds [INFO] Finished at: Mon Nov 29 13:45:41 CET 2010
- for now ( no incremental N3 parser) we cannot create tooltips on a file with parse errors:, so they are deactivated in this case
- When there is an N3 parse error (seen when saving in the editor or pushing the parse button), set the caret in the editor
- at the same time a TemporaryFrame is shown
- in ProjectFactory catch Exceptions occurring in parsing and compiling N3 sources , and display them in a TemporaryFrame
- in Project.prepare, re-throw any Exception as RuntimeException, to be caught later in the GUI layer
- in RunDroolsAction, show any Exception in a TemporaryFrame
- TextEditor: WIP : try to really make the caret visible
- N3ParseResult : remove the stack from the error message
- TODO; When there is an N3 parse error, set the caret in the editor
SNAPSHOT uploaded on nov. 29
- tidy code in TextEditor and EditorManagement (but was unable to make the jEdit window move to top the second time)
- When there is a SPARQL error such as a QueryParseException, set the caret in the editor;
- in EditorManagement catch any error to display it in TemporaryFrame
- refactoring : extract and move new method TemporaryFrame.showException()
TODO : make corresponding functional test
SELECT DISTINCT ?pname ?v
CONSTRUCT { dbpedia:Buddy_Guy ?pname ?v }
Semantic Web training finished !!!!!!!!!
TODO
after several "new project window" , open and close editor, the leftmost button was not working anymore , and I got a NegativeArraySizeException: reproduce, debug, and fix that
DONE
- for N3SourceFromSPARQLSource, make visible dynamically the button for table view for SELECT queries and the leftmost N3 editor button
- in URIModificationChecker catch any error to display it in TemporaryFrame
TODO : make corresponding functional test
src/test/java/eulergui/gui/TestEulerGUIInputs.java
src/main/java/eulergui/gui/controller/ProjectGUI_Updater.java
src/main/java/eulergui/gui/view/ButtonsForN3Source.java
src/main/java/n3_project/ProjectGUI.java
ARQ - Basic Federated SPARQL Query
TODO
When there is a SPARQL error such as :
N3SourceFromSPARQLSource.doUpdate(): file:/home/jmv/src/eulergui_test/eulergui/examples/service2.sparql ; Cause: com.hp.hpl.jena.query.QueryParseException: Lexical error at line 3, column 9. Encountered: " " (32), after : "SERVICE"
set the caret in the editor;
implementation: NO need of a correspondance N3Source --> jEdit editor, as jEdit does that when calling jEdit.openFile(jEdit.view, toOpen) .
DONE
- URIModificationChecker: display the temporary frame when there is a unchecked exception in the forever loop
- N3ConversionRefesher was not added as a ProjectListener
- doc:Added the famous Linked Open Data image map graph view to EG documentation
Following "Give yourself a URI" , I made my URI: http://jmvanel.free.fr/jmv.rdf#me .
Asked on the swig IRC:
Are there documents or sites about making URI's for the most common things, to enhance interoperability of data sources ?
Web search: semantic web URI cities species companies products
Found a nice presentation by Sandro Hawke:
[PDF] Introduction to Linked Data
June 8 2010, Cambridge Semantic Web Gathering ... City of Boston website: http://www.cityofboston.gov. Subject: http://www.cityofboston.gov ... People, places, governments, companies, products, ... species of plants, species of animals, … ... A URI for a Web page/information source about it ...
files.meetup.com/1336198/LinkedDataPresentation-SandroHawke.pdf
http://dbpedia.org/page/Boston
http://linkeddata.uriburner.com/ode/?uri=http%3A%2F%2Fdbpedia.org%2Fresource%2FBoston
http://www.w3.org/DesignIssues/LinkedData.html
Jena has been accepted into the Apache Incubator:
http://mail-archives.apache.org/mod_mbox/incubator-general/201011.mbox/%3C4CEC31E4.9080401@apache.org%3E
The proposal was:
http://wiki.apache.org/incubator/JenaProposal
DONE, SNAPSHOT uploaded
- deactivate DroolsHelper.printRuleBase() in all places
- class URIModificationChecker: close the HTTP connection, which should prevent the messages "java.net.SocketException: Too many open files"
- automatically save generated Drools source in case of error
- this rule in Jos' owl-rules.n3 did not pass Drools translator, because list related triples are processed together at the next non list related triple, and a single list related triple was not implemented
{ <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://www.w3.org/1999/02/22-rdf-syntax-ns#first> ?X. } => false.
- this rule in Jos' owl-rules.n3 does not pass Drools translator, because an empty antecedent was not implemented
{ } => { <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil> <http://eulersharp.sourceforge.net/2003/03swap/owl-rules#notItem> ?X. }
- add a version of owl-rules.n3 in examples/ ; just move log:notEqualTo at the end of the antecedent.
TODO
The problem is that the implementation of log:notEqualTo
expects that all variables were already used in preceding triples in same
rule.
This is not easy to implement with Drools. The translation should be postponed to end of the antecedent.
./ape.exe -guess -text "A fruit-tree is a tree which v:bears some fruits." -solo owlfsspp Ontology( http://attempto.ifi.uzh.ch/ontologies/owlswrl/test ClassAssertion( ObjectMinCardinality( 2 ObjectProperty(:bears) Class(:fruits) ) AnonymousIndividual(764411320891237613) ) ClassAssertion( Class(:tree) AnonymousIndividual(764411320891237613) ) ClassAssertion( Class(:fruit-tree) AnonymousIndividual(764411320891237613) ) )
I'm thinking about using ATTEMPTO for speficying rules for RDF graph transforms.
Take for exemple these rules in the N3 rule langage [1] , that are part of a rule base [2] for transforming an UML model into an OWL model :
{?UML_CLASS a uml:Class . } => { ?OWL_CLASS a owl:Class .?OWL_CLASS :translatedFromUML ?UML_CLASS .} . { # transfer uml:name predicate to rdfs:label for Classes, properties, etc ?UML_CLASS uml:name ?NAME .?OWL_CLASS :translatedFromUML ?UML_CLASS . } => { ?OWL_CLASS rdfs:label ?NAME .} .
A naive verbalization of these 2 rules reads:
If UC is a uml-class then there is a owl-class OC, and OC is transtaled-from UC.
If UC has-uml-name N, and OC is transtaled-from UC then UC has-rds-label N.
This does not work directly, as "variable names consist of a single upper case letter, optionally followed by an integer".
If U is a uml-class then there is a owl-class O, and O is transtaled-from U.
If U has-uml-name N, and O is transtaled-from U then U has-rds-label N.
Note that the first can also be writen:
If U is a uml-class then there is a owl-class O, and O is translated-from U.
Now let's try that last one in ACE View:
SubClassOf( ObjectIntersectionOf( Class(owl:Thing) Class(:uml-class) ) ObjectSomeValuesFrom( ObjectInverseOf(ObjectProperty(:translated-from)) Class(:owl-class) ) )
This is perfectly sound logically, but we are quite far from a rule suitable for a forward chaining engine.
I look now at what the OWL N3 rules by Jos de Roo from the Euler project can do. I first generate the OWL+SWRL file :
./ape.exe -guess -text \ "If U is a uml-class then there is a owl-class O, and O is translated-from U. If U has-uml-name N, and O is transtaled-from U then U has-rds-label N." \ -solo owlxml > uml-owl.owl
Then I can open uml-owl.owl
in EulerGUI. The rule 1 (name
transmission rule) was an SWRL rule and is now become an N3 rule:
{?t0 ns1:has-uml-name ?t2. ?t1 ns1:transtaled-from ?t0} => {?t0 ns1:has-rds-label ?t2}.
No logical problem, but the identifiers were transformed from the original N3.
Now the other, pure OWL, sentence.
There are 35 OWL N3 rules by Jos de Roo from the Euler project :
~/src/eulersharp/2003/03swap/ % ls owl-*.n3 owl-AllDifferent.n3 owl-FunctionalProperty.n3 owl-propertyChainAxiom.n3 owl-AllDisjointClasses.n3 owl-hasKey.n3 owl-propertyDisjointWith.n3 owl-AllDisjointProperties.n3 owl-hasValue.n3 owl-rules-200.n3 owl-allValuesFrom.n3 owl-intersectionOf.n3 owl-rules-660.n3 owl-AsymmetricProperty.n3 owl-InverseFunctionalProperty.n3 owl-rules.n3 owl-complementOf.n3 owl-inverseOf.n3 owl-sameAs-ext.n3 owl-differentFrom.n3 owl-IrreflexiveProperty.n3 owl-sameAs.n3 owl-disjointUnionOf.n3 owl-maxCardinality.n3 owl-someValuesFrom.n3 owl-disjointWith.n3 owl-maxQualifiedCardinality.n3 owl-SymmetricProperty.n3 owl-distinctMembers.n3 owl-NegativePropertyAssertion.n3 owl-TransitiveProperty.n3 owl-equivalentClass.n3 owl-Nothing.n3 owl-unionOf.n3 owl-equivalentProperty.n3 owl-oneOf.n3 |
The owl-rules.n3 file gathers all the rules. We see that there are rules for all the OWL primitives used in our OWL expression (colored in green). So we add this URL to the EulerGUI project, together with a simple test data and query.
http://www.agfa.com/w3c/euler/owl-rules.n3
Alas with Euler, the result is empty, and Drools crashes :
java.lang.NullPointerException at n3_project.helpers.DroolsTripleHandler.processLogBuiltin(DroolsTripleHandler.java:378) at n3_project.helpers.DroolsTripleHandler.makeDroolsCriterium(DroolsTripleHandler.java:240) at n3_project.helpers.DroolsTripleHandler.acceptAntecedent(DroolsTripleHandler.java:207) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:707) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:266) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:237) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:88) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:78) at eulergui.project.Project.doTranslateN32Drools(Project.java:829) |
The reason is that this rules is not translated correctly from N3 to Drools , that is, the rule owl-differentFrom.n3 :
{
?X <http://www.w3.org/2000/10/swap/log#notEqualTo> ?Y.
?A <http://www.w3.org/2002/07/owl#distinctMembers> ?L.
?L <http://eulersharp.sourceforge.net/2003/03swap/owl-rules#item> ?Y.
?L <http://eulersharp.sourceforge.net/2003/03swap/owl-rules#item> ?X.
} => {
?X <http://www.w3.org/2002/07/owl#differentFrom> ?Y.
} .
|
TODO
The problem is that the implementation of log:notEqualTo
expects that all variables were already used in preceding triples in same rule,
which is not the case for first triple here.
This is not easy to implement with Drools. The translation should be postponed to end of the antecedent.
Or I could ask Jos to change the rule :) .
DONE
- new class URIModificationChecker, that starts a loop to check Modification status of files and URL's, for all original sources, and then if modified call Project.fireN3SourceChanged(N3Source) , to refresh the N3 conversion
- the old mechanism with jEdit to get notifications of LOADED events for original source should be commented out and replaced with this one
TODO : more manual testing
I thought about implementing the processing of the N3 source in a lazy way with timestamp in doUpdate() for XML and XMI sources (so that the project opens more quickly), but it is more useful to have a generic file and URL modification checking service, so that N3 refreshing occurs even when the original source is not opened.
For the file and URL modification checking service, I saw that jEdit offers no service to reuse.
We would like to register a file to get its modifications events, even though it has not been opened by the user.
http://www.cambridgesemantics.com/2008/09/sparql-by-example/
http://staff.um.edu.mt/mros1/cnl2010/prog_after.html
http://www.w3.org/TR/sparql11-query/
http://www.ted.com/
http://objectmix.com/prolog/183275-abusing-chr.html
Description Logic and Rules the CHR Way Extended Abstract
+chr unbound variables
http;//www.informatik.uni-ulm.de/pm/mitarbeiter/fruehwirth/Papers/dl-rules-chr07-slides.pdf
TODO
- loading a project from the command line should not be done in main() , because the GUI hooks are not there
- remove the "active" checkbox in the case of SELECT SPARQL
- reestablish the "active" checkbox and the N3 converted blue link button when a SPARQL query becomes CONSTRUCT from SELECT
- implement the processing of the N3 source in a lazy way in doUpdate() and the refreshment when the original source changes: for XMI sources
TESTED with examples/docbook.n3p
- temporary popup ( class TemporaryFrame ) to inform user of problems; add this in RDF/OWL , XML , XMI sources
- XML conversion (Gloze) : add N3 prefixes in converted N3
DONE
- put TemporaryFrame in Color RED if error status
- implement the processing of the N3 source in doUpdate() and the N3 refreshment when the original source changes, for XML sources
TESTED with examples/docbook.n3p
- move towards having a temporary popup ( class TemporaryFrame ) to inform user of problems
added this in SPARQL sources
- REGRESSION: preceding commits caused adding a new SPARQL source to fail
It is not possible to get more information than "500 SPARQL Request Failed".
The stack is :
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 33 in QueryExceptionHTTP)) QueryExceptionHTTP.<init>(int, String) line: 33 HttpQuery.execCommon() line: 302 HttpQuery.execGet() line: 192 HttpQuery.exec() line: 147 QueryEngineHTTP.execSelect() line: 133 SPARQLToN3Converter.doSelectQuery(Query, URL, String) line: 135 N3SourceFromSPARQLSource.doUpdate() line: 68 N3SourceFromSPARQLSource(N3Source).update() line: 425 ButtonsForN3Source$3.actionPerformed(ActionEvent) line: 215 JButton(AbstractButton).fireActionPerformed(ActionEvent) line: 1995
http://sparql.org/sparql.html
I get this for
SELECT DISTINCT ?p WHERE {?s ?p ?o}
but this is normal :(
N3SourceFromSPARQLSource.doUpdate(): file:/home/jmv/src/eulergui_new/examples/find_properties.sparql ; http://dbpedia.openlinksw.com:8890/sparql Cause:HttpException: HttpException: 500 SPARQL Request Failed: HttpException: 500 SPARQL Request Failed
Alas the Web page at http://dbpedia.org/sparql says more:
42000 Error The estimated execution time 4453 (sec) exceeds the limit of 1500 (sec).
http://mondeca.wordpress.com/2007/12/06/requeter-le-contenu-de-wikipedia-avec-sparql/
http://wiki.dbpedia.org/OnlineAccess
http://dbpedia.org/About
http://wiki.dbpedia.org/Ontology
http://dbpedia.org/ontology/Place
<jmv> In fact my initial request SELECT DISTINCT ?p WHERE {?s ?p ?o} is pretty useless and would give a huge result ;
<jmv> happily if I add one triple in the WHERE part to restrict subject to belong to a class, I get an answer :)
PREFIX dbpedia: <http://dbpedia.org/resource/> PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#> SELECT DISTINCT ?p ?pname WHERE { ?mus ?p ?v . ?mus a <http://dbpedia.org/class/yago/AmericanBluesGuitarists>. ?p rdfs:label ?pname . } |
<MacTed> the public DBpedia instance *being* public ... yes, there are limits on execution times, results sets, etc.
<MacTed> people who want to run longer queries or get larger result sets can quickly get their own EC2 mirrors ( http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/VirtAWSDBpedia351C ), or set up local LAN instances. ultra-special cases may get pinhole permission grants on the main service.
- FIXED: got an infinite loop with jEdit LOADED event when clicking on the XXX.owl button;
TESTED with examples/koala.n3p
- change architecture to process the N3 source in a lazy way in doUpdate() :
for SPARQL , tested with examples/dplb.n3p
RDF ==> tmp N3 ==> editor
DONE
The actual SPARQL query is done when opening the editor for the result or updating the query
Google translate
First thing, we must improve the current design and implementation of the Java engine + N3, based on Drools, as with N3 rules language, which is a unique combination of Semantic Web, rules engine, and the platform Java.Dans form the existing implementation, the translator N3 to Drools is a simple architecture that spits strings over water. We need something like a compilation technique driven by rules. And we would also generate rules Jena, Mercury code, Scala, CHR rules, etc.. I thought about using transformation rules in N3 N3 for input, and GF (GrammaticalFramework) for the release of the final string.
Second thing, we need to design and implement a backward chaining engine for querying databases SPARQL in the presence of business rules in N3. It will generate a large accumulation by recursive query SPARQL criteria, substitution variables, renaming variables if necessary. I think to this point 2, CHR capacity to manage the free variables can be used.
Another issue concerns the generation of user interfaces
from high level specifications, including ontologies
OWL, business rules in SWRL or N3, and other specifications
declarative user interaction.
Linked to this, a rule-based board would operate
history of user actions to infer their intentions,
and propose appropriate actions (good servant paradigm).
Finally, we apply the inference techniques for
semantic manipulation of existing software assets: guess
calling sequences from sample code, annotate
semantically libraries, classes and methods, generating code
join from semantic annotations (Modularity
intelligent).
First thing, we need to enhance the current design and implementation
of the Java + N3 engine, based on Drools, with N3 as rule language;
this is a unique combination of Semantic Web, rule engine, and Java
platform. There already something working, but that is a simplistic
architecture spitting strings along the way; we need something like a
compiler technique piloted by rules.
Second thing, we need to design and implement a backward engine for
querying SPARQL databases; it will generate a big SPARQL query by
recursively accumulating criterium terms, substituting bound
variables, renaming variables if necessary.
I think that for point 2, the capabilities of CHR to handle unbound
variables can be leveraged.
Another thema is generating user interfaces from high level specifications.
Still thinking about possible tasks for you .
Among the things we talked in the last months:
- cleaning ACE=>OWL by using Thea stuff
- verbalizing N3 and SWRL rules
- adding more of the OWL "semantyic sugar" like transitive properties,
equivalent classes, etc
Plus reusing in ACE URI's for classes and properties, which is
certainly on top priority.
Related to that is verbalization of some typical OWL ontologies; a
default verbalization of these ontologies and of instances by ACE
often looks bad, for lack of noun and verb forms.
A good test case is FOAF's official OWL spec. .
These is also the algebraic formulas.
By the way I'm worried about how the ACE as a whole is going. Still no
answer from Norbert and the team about the depot question, which is just
the first of a series of questions about gouvernance.
About my projects EulerGUI and Déductions, I must set a road map ;
this is larger than the CNL stuff, as we are building a whole
framework for building business and scientific applications. There are
several important things to do or enhance :
- mix in rules triples for domain data with Java objects , leveraging Drools
- at runtime query SPARQL sources taking in account rules in the KB
- generate easily all formats from RDF
DONE
- EditorManagement: simplify fileToOpen() : in all cases call N3Source.getFileName()
- XmiInputAction : remove duplicated action of Translating To N3 the underlying XMI
- remove all call to IOManager.getTemporaryN3File() , except in RDFToN3Converter
- FEATURE: Jena view of the result (second yellow button) : add N3 prefixes
- show using TemporaryFrame the explanation of the OWL inconsistency when calling Pellet reasoner
- encapsulate ResultManagement().result, pProjectGUI.toolBar
- FEATURE: view of the result as GraphViz graph
- FIX: in GraphViz graphs labels for URI's were blank
TEST SUITE PASSES !!!
TODO
- FIX: in GraphViz graphs labels for URI's should be N3 abbreviated form
- simplify RDFToN3Converter : get rid of rdfUrlToLocalN3TranslationFile like other XXXConverter
EulerGUI TODO
Set<Set<OWLAxiom>> getInconsistencyExplanations(int
maxExplanations)
Find all customers having an adress in Germany
SPARQL queries:
TODO: redo the SPARQL query when the SPARQL source file is updated (saved or loaded)
- now N3 terms like :xx or p:xx work also, provided there are rdfs:label or rdfs:comment in the project
- arrange the assertions in eulergui.gui.TestEulerGUITooltip
- some comments in code
SNAPSHOT uploaded
http://stackoverflow.com/questions/76327/how-can-i-prevent-java-from-creating-hsperfdata-files
DONE
get rid of class ProjectIndexer; now the Drools-based searches get the RDF labels and coments, while simple string manipulation get the N3 term under the mouse
TODO arrange the assertions in eulergui.gui.TestEulerGUITooltip
- pom.xml : add maven-javadoc-plugin
- doc. : link to javadoc on the site
Reference: Jena 2 Inference support ; Jena JavaDoc ; EulerGUI JavaDoc (NEW!)
InfGraph ---|> Graph ---|> GraphAdd bound Reasonner <>------ InfGraph schema Reasonner <>------ Graph |
InfGraph is a Graph where Triples added by inference can be distinguished.
Each Reasoner implementation is associated to ReasonerFactory.
ReasonerFactory are registered in a singleton ReasonerRegistry.
Graph is on the SPI side (Service Provider Interface), while Model (a huge interface) is on the API side.
In EulerGUI this does not exist:
In EulerGUI this exists:
Project and N3Source are at the heart of EulerGUI. The accent is put on how to build a RDF + rules Model out of heterogeneous parts. In contrast in Jena the accent is put on the RDF Model itself, and once a source is added to the Model, this action of adding is forgotten.
About reasoner support, there are differences. In Jena, one can bind many reasoners of the same or different implementation to the same Graph, resulting in as many InfGraph objects. In EulerGUI, each different engine implementation is a unique service. A common feature is that different rule engines do not collaborate, each has its own augmented model.
Currently (alas) the glue code for the inference engines (alias reasoners) in EulerGUI is all in class Project. The first task is to modularize the inference engines support in EulerGUI. To this end, these hardships exist:
The first thing in modularizing the inference engines support in EulerGUI is to design an API to be used by the GUI layer. The possible inference engines should not be hard coded in the class Project, but offered as a uniform list of services. The minimal capabilities expected from an inference engine instance (already bound to a Project) are in this interface :
public interface InferenceEngine { void setArguments(String args); String getArguments(); N3Source launch(); String getWarnings(); // and errors also } |
This is easy to do, but does not take in account the dynamic knowledge base features of Drools. Drools' RuleBase and WorkingMemory are used directly in Project. These existing EulerGUI interfaces should be used more:
ITripleStoreRETE ---|> ITripleStore
The idea is to simply add this method in interface
InferenceEngine
:
/** non dynamic knowledge base can return a NullTripleStore */ ITripleStore getTripleStore();
Note the use of the null object design pattern. A non dynamic knowledge base can also return a real ITripleStore, that can be implemented by parsing and aggregating the N3 sources. This is a service that is not currently provided by EulerGUI.
Here the interface ITripleStoreRETE
is not necessary, as one
can call InferenceEngine.launch()
.
The GUI layer should be able to get a uniform list of services corresponding to the possible inference engines, and bind a Project to an inference engine:
public interface InferenceEngineSupport {
List<InferenceEngineFactory> getInferenceEngines();
}
The interface InferenceEngineFactory is just a place holder for an Inference Engine implementation, and a concrete implementation knows how to create an actual InferenceEngine, and bind it to a Project.
public interface InferenceEngineFactory { InferenceEngine bindInferenceEngine( InferenceEngineFactory e, Project p );
String showShortName();
String showLongName();
}
Now to add SPI support, one can just add an interface
InferenceEngineRegistry
:
public interface InferenceEngineRegistry { void register( InferenceEngineFactory e ); InferenceEngineSupport getInferenceEngineSupport(); }
The interface InferenceEngineRegistry should be implemented as a singleton.
Note that other design goals could be worked on:
Hi I have 2 JFrames from the same application ; both have the same icon, but when the 2 are grouped by Gnome in the bottom line, the group has the Java icon instead of mine :(
test setting to false: Project.prepareWMEarly:
Running eulergui.gui.TestEulerGUITooltipTests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 9.812 sec <<< FAILURE!
TODO test addition of a new search and run at once
TEST PROJECT:
eulergui_new/examples/swrl-n3-rules-owl.n3p
edit manually in another (external) editor :
eulergui_new/examples/dl-safe_small.owl
Then the stack is:
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 222 in TextEditor$2)) TextEditor$2.handleMessage(EBMessage) line: 222 EditBus.dispatch(EditBus$EBMessageHandler, EBMessage) line: 212 EditBus.sendImpl(EBMessage) line: 247 EditBus.send(EBMessage) line: 188 Buffer$1.run() line: 282 WorkThreadPool.doAWTRequest(WorkThreadPool$Request) line: 398 WorkThreadPool.doAWTRequests() line: 383 WorkThreadPool.access$200(WorkThreadPool) line: 37 WorkThreadPool$RunRequestsInAWTThread.run() line: 483 InvocationEvent.dispatch() line: 209 EventQueue.dispatchEvent(AWTEvent) line: 597 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122 |
http://jedit.svn.sourceforge.net/viewvc/jedit/jEdit/trunk/org/gjt/sp/jedit/
http://www.jedit.org/api/index.html
In fact, in the case of a non N3 source, we do not need a copy of the
original source. Indeed, various tools can cope with a URL obtained from
N3Source.getURI()
): jEdit editor, inference engines, translator
of SPARQL to N3.
COMMITED revision 1895. ( let's not breathe too strong, tests may break !!!
- Enhance IOManager.getLocalCache() : in all cases except local N3 source, initializes the Local Cache File object;
only for non local N3 source fills the Local Cache File
- change accordingly class XMLExport
BUILD SUCCESSFUL
[INFO] Total time: 22 minutes 39 seconds
~/src/eulergui/ % svn info .Chemin : .URL : https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulerguiRacine du dépôt : https://eulergui.svn.sourceforge.net/svnroot/eulerguiUUID du dépôt : d5d6ab8c-d186-441e-ab20-4354300cfa0eRévision : 1863 |
TODO I should add that in EulerGUI:
For an inconsistent ontology, Pellet can calculate an "explanation" of the inconsistency, which consists of 1 or more sets of axioms. The combination of all of the axioms in any one of these sets is sufficient to make the ontology inconsistent.
Check out ExplanationExample.java in the "examples" directory of the Pellet distribution for an example of programmatically obtaining explanations. You'll probably want to use the following method of the PelletExplanation class:
Set<Set<OWLAxiom>> getInconsistencyExplanations(int
maxExplanations)
REGRESSION:
- populating the N3 from SPARQL was broken
- proposal for API change in N3Source : see mailing list deuctions-fr
- NOT tested : dbpedia is down
Still 1380 lines !
SOLVED : failure in TestRulesForUserEvents
- cause: useless code in Project.addN3Query() caused the temporary location to be lost, in the case of an N3 source given by an N3 string
Thread [main] (Suspended (breakpoint at line 917 in Project)) Project.translateN32Drools(boolean) line: 917 Project.prepareDrools(boolean) line: 891 Project.doRunDrools(boolean) line: 842 Project.runDroolsTriples(List<ITriple>) line: 797 Project.runDroolsTriples(boolean) line: 791 Project.runDroolsTriples() line: 820 TestRulesForUserEvents.testFieldOldArchitecture() line: 81
When trying past revisions, it is necessary to set --offline:
LANG=en mvn --offline -Dtest=deductions.runtime.TestRulesForUserEvents clean test
DONE
{_:t0 :sibling _:t1. _:t0 :hates _:t1. _:t0 a :Grandchild} => {_:t0 a :BadChild}.
RDFToN3Converter.rdfUrlToLocalN3TranslationFile :
{file:/home/jmv/src/eulergui_new/examples/dl-safe_small.owl=/tmp/translation-6059220547887949513.n3}
but uri argument from N3SourceFromRDF.uri() is:
file:///home/jmv/src/eulergui_new/examples/dl-safe_small.owl
The former is generated by this in ProjectFactory :
projectFile.toURI().toURL()
DONE
Feature: when the OWL or RDF file is modified in the editor, it is re-translated to N3
TODO:
- does not work yet;
- also implement case when the OWL or RDF file is modified outside of the editor
- also implement other non N3 sources
- timestamp stuff not implemented; reuse what is done for RuleBase cache
IMPLEMENTATION: new method update() in N3Source, which calls new overriden method doUpdate()
Hi all ! I'm looking for a simple Java implementation of a Unix-like shell , with commands mv cp rm cd , echo "bla" > file.txt ;
My use case is to ease my tests.
http://www.wikihow.com/Register-a-User-Name-on-Freenode
/nick jmvanel /msg nickserv register my_password jeanmarc.vanel@gmail.com # after receiving the mail: /msg NickServ VERIFY REGISTER jmvanel password_received
http://blog.athico.com/2010/08/drools-51-released.html
Asked on the Drools IRC:
when reloading a RuleBase from serialized file, the field ReteooBuilder.rules does not seem to be populated, which leads to this NPE when replacing a Drools Package that was part of a reloaded RuleBase from serialized file :
Caused by: java.lang.NullPointerException
at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:235)
DONE: in method Project.searchFromString() , now get rid of the temporary search in the RuleBase
Interesting stack:
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 484 in AbstractRuleBase)) ReteooRuleBase(AbstractRuleBase).addPackages(Collection<Package>) line: 484 ReteooRuleBase.addPackages(Collection<Package>) line: 445 ReteooRuleBase.addPackage(Package) line: 452 N3SourcetoDrools.droolsCompile(String) line: 421 N3QueryToDroolsQuery.translate(IRDFIterator, String, boolean) line: 39 N3toDroolsUpdater.translateQuery(N3Source) line: 197 Project.searchFromString(String, Object[]) line: 1054 Project.getDetailsForResource(String, String) line: 1096 Project.getLabelForResource(String) line: 1071 TextEditor$5.getToolTipText(int, int) line: 570 ExtensionManager.getToolTipText(int, int) line: 135 TextAreaPainter.getToolTipText(MouseEvent) line: 663 ToolTipManager$insideTimerAction.actionPerformed(ActionEvent) line: 662 Timer.fireActionPerformed(ActionEvent) line: 271 Timer$DoPostEvent.run() line: 201 InvocationEvent.dispatch() line: 209 EventQueue.dispatchEvent(AWTEvent) line: 597 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122
With examples/swrl*.n3p ???
java.lang.NullPointerException at n3_project.helpers.DroolsTripleHandler.processLogBuiltin(DroolsTripleHandler.java:378) at n3_project.helpers.DroolsTripleHandler.makeDroolsCriterium(DroolsTripleHandler.java:240) at n3_project.helpers.DroolsTripleHandler.acceptAntecedent(DroolsTripleHandler.java:207) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:706)
TODO
FIX TestImportSwrl : was broken in eclipse, not with Maven
- the N3 generated by Euler from the SWRL, being transient, must not be taken in account in the Project timestamp
- TODO: there is still a Drools problem: when reloading a RuleBase a from serialized file, the field ReteooBuilder.rules does not seem to be populated, which leads to this NPE when modifying an N3 rule file when the corresponding Drools Package was part of a reloaded RuleBase from serialized file :
Caused by: java.lang.NullPointerExceptionat org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:235)at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:432)at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:831)at org.drools.common.AbstractRuleBase.mergePackage(AbstractRuleBase.java:623)at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:539)at org.drools.reteoo.ReteooRuleBase.addPackages(ReteooRuleBase.java:445)at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:452)at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:421)
AbstractRuleBase.pkgs
Map<Rule, BaseNode[]>
ReteooBuilder.rules
ReteooBuilder line 235
file:/home/jmv/src/eulergui_new/examples/swrl-n3-rules-owl.n3p
REGRESSIONS
I tried a simple rule to flatten a rule base:
{?A => ?C} => {?R a :Rule.?R :hasAntecedent ?A.?R :hasConsequent ?C.} .
When I run with --no-qvars (or without) , the information that EYE has already inferred, namely which variables are existential and which are universal, is lost. Is there a way to recover this information in the output ?
Hi Jean-Marc,
The real good thing about coherent logic is that there is only 1 kind of variable and the quantification is automatic.
So there is ultimately no problem.
http://www.webkb.org/doc/model/comparisons.html by Philippe Martin.
DONE
doc.: add details in :
- list of arguments in parag. "Main use case"
- parag. "Tests : CAUTION - TROUBLESHOOTING;"
- add DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa
When adding an N3 sources the GUI does not show the new N3, one has to resize manually the window.
remove empty implementation of ProjectListener in class Project
The arguments for Euler are in the .n3p file , but were not shown in the input, nor processed in a run
mvn test -Dtest=eulergui/gui/TestImportSwrl
The order of clauses has changed in the N3 generated by Euler !
# !!! This file was generated automatically from data source at: file:/home/jmv/src/eulergui_refactoring/eulergui/examples/dl-safe_small.owl. !!!
...
@prefix n3: <http://www.w3.org/2004/06/rei#>.
{?t0 :sibling ?t1.
?t0 :hates ?t1.
?t0 a :Grandchild} => {?t0 a :BadChild}.
#ENDS 10 msec
#Trunk : 60/792 = 7.57575757575758 %
#Branch: 0/63 = 0.0 %
After correcting the regular expression, there was a problem in Drools. Solved by clearing the rule bases cache:
rm -rf $HOME/.eulergui/rule_bases_cache/application/*
java.lang.RuntimeException: Drools exception during package addition to rule base at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:423) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:304) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:237) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:88) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:78) at eulergui.project.Project.doTranslateN32Drools(Project.java:967) at eulergui.project.Project.translateN32Drools(Project.java:907) at eulergui.project.Project.prepareDrools(Project.java:881) at eulergui.project.Project.doRunDrools(Project.java:832) at eulergui.project.Project.runDroolsTriples(Project.java:787) at eulergui.project.Project.runDroolsTriples(Project.java:781) at n3_project.RunDroolsAction.actionPerformed(RunDroolsAction.java:46) ... Caused by: java.lang.NullPointerException at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:235) at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:432) at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:831) at org.drools.common.AbstractRuleBase.mergePackage(AbstractRuleBase.java:623) at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:539) at org.drools.reteoo.ReteooRuleBase.addPackages(ReteooRuleBase.java:445) at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:452) at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:421) ... 32 more
TODO
java.lang.NullPointerException at n3_project.helpers.DroolsTripleHandler.aggregateLinesAndCols(DroolsTripleHandler.java:1316) at n3_project.helpers.DroolsTripleHandler.acceptSubjectList(DroolsTripleHandler.java:183) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:684) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:266) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:237) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:88) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:78) at eulergui.project.Project.doTranslateN32Drools(Project.java:967) at eulergui.project.Project.translateN32Drools(Project.java:907) at eulergui.project.Project.prepareDrools(Project.java:881) at eulergui.project.Project.prepareDrools(Project.java:856) at eulergui.project.Project.prepare(Project.java:1415) at eulergui.project.ProjectFactory.prepareProject(ProjectFactory.java:181)
Suppose we have a Knowledge Base with basic facts involving one predicate: hasParent, and 3 classes : Man, Woman and Human, and some facts.
Suppose we want to a have the Knowledge Base entail :
Every person has a grandparent.
Then we must first "define" grandparent by a rule using parent in the antecedent.
Then we must have an existential rule for the primitive notion of parent.
starting 60 [msec cputime] 60 [msec walltime]
GET /home/jmv/src/eulergui_refactoring/eulergui/examples/family3.n3
networking 0 [msec cputime] 1 [msec walltime]
Exception in thread "Thread-6" java.lang.RuntimeException: ** ERROR ** sem ** maximimum_step_count(5000000)
at euler.ProcessErr.run(ProcessErr.java:18)
at java.lang.Thread.run(Thread.java:619)
http://www.brcommunity.com/
Silvie Spreeuwenberg, "Count your Rules!" Business Rules Journal, Vol. 11, No. 10 (Oct. 2010), URL: http://www.BRCommunity.com/a2010/b557.html
Original JRules sentence:
If the shopping cart value is greater than $100 and the customer category is Gold then apply a 15% discount.
Unsuccessful attemps:
If the shopping-cart value is greater than $100 and the customer-category is Gold then apply a 15% discount.
If the shopping-cart value is greater than $100 and the customer-category is Gold then order-mangement, apply a 15% discount !
There is a problem with paraphrase of imperative sentences:
./ape.exe -guess -text 'John, go to a bank !' -cdrs
./ape.exe -guess -text 'John, go to a bank !' -solo paraphrase
# ...
Aurélien Pelletier - Java, Architecture, Web 2.0: Drools
http://www.w3.org/2005/rules/wiki/Implementations
cd rifle hg pull hg update --verbose cd trunk/apps/rifle-dtb mvn -Dmaven.test.skip=true install cd ../rifle-psparser mvn clean install cd ../rifle-jsr94 mvn clean install cd ../rifle-validator mvn clean install [WARNING] repository metadata for: 'snapshot org.fundacionctic:rifle-dtb:0.1-SNAPSHOT' could not be retrieved from repository: jena HP due to an error: Error transferring file: Connection timed out [INFO] Repository 'jena HP' will be blacklisted [INFO] ------------------------------------------------------------------------ [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Error building POM (may not be this project's POM). Project ID: org.fundacionctic:rifle-dtb Reason: Error getting POM for 'org.fundacionctic:rifle-dtb' from the repository: Unable to read local copy of metadata: Cannot read metadata from '/home/jmv/.m2/repository/org/fundacionctic/rifle-dtb/0.1-SNAPSHOT/maven-metadata-java.net.xml': end tag name </body> must match start tag name <hr> from line 7 (position: TEXT seen ...</address>\n</body>... @9:8) org.fundacionctic:rifle-dtb:pom:0.1-SNAPSHOT
Exchanged several mails with MK whom I met at CNL2010
http://code.google.com/p/revelator/
http://code.google.com/p/etalis/
ETALIS is an open source system for Complex Event Processing with two accompanied languages called: ETALIS Language for Events (ELE) and Event Processing SPARQL (EP-SPARQL). ETALIS is based on a declarative semantics, grounded in Logic Programming. Due to its root in logic, ETLAIS also supports reasoning about events, context, and real-time complex situations (i.e., Knowledge-based Event Processing). ETALIS stands for Event TrAnsaction Logic Inference System.
ETALIS is implemented in Prolog. The engine runs on many Prolog systems: YAP, SWI, SICStus and XSB. Download ETALIS from here.
Prova Rule Language -- version 3.0.3 is released on October 17, 2010
there's an open thread at http://ubuntuforums.org/showthread.php?t=225019.
at the end of it says:
Fix: Double click on the volume applet, File>Change Devices>AK5370, and raise the volume as high as it goes.
==> It works !!!!!
First thing, we need to enhance the current design and implementation of the Java + N3 engine, based on Drools, with N3 as rule language; this is a unique combination of Semantic Web, rule engine, and Java platform. There is already something working. But the N3 to Drools translator is a simplistic architecture spitting strings along the way; we need something like a compiler technique piloted by rules. And we would like to generate also Jena rules, Mercury code, Scala code, CHR rules. I thought about using N3 rules for transforming input N3, and GF for outputting the final string .
Second thing, we need to design and implement a backward engine for querying SPARQL databases; it will generate a big SPARQL query by recursively accumulating criterium terms, substituting bound variables, renaming variables if necessary.
I think that for point 2, the capabilities of CHR to handle unbound variables can be leveraged.
Another thema is generating user interfaces from high level specifications.
We are on the way to release ICOM 3, the latest reincarnation an old proof of concept which evolved in the last 13 years or so.
ICOM is an advanced conceptual modelling tool, which allows the user to design multiple ER or UML class diagrams with inter- and intra-model constraints, expressed in a rich view but usable language similar to OCL and relational algebra (based on a very expressive description logic).
It is the first time I'm advertising the new version - still in beta; I'd be happy to get comments.
http://www.inf.unibz.it/~franconi/icom/
P. R. Fillottrani, E. Franconi, S. Tessaris. The ICOM 3.0 Intelligent Conceptual Modelling tool and methodology. White Paper, KRDB Research Centre for Knowledge and Data (2010), Free University of Bozen-Bolzano, Italy.
Kaarel Kaljurand just got back from his trip around the world, and went back to work on ACEView. Soon ACEView will be available with Protégé 4.1.
I became a developper in ACEView. For now, I just added a GUI test with Jemmy.
https://code.google.com/u/jeanmarc.vanel/
http://code.google.com/p/support/wiki/GettingStarted
http://code.google.com/p/aceview/
https://code.google.com/p/owlverbalizer/
http://protegewiki.stanford.edu/wiki/Protege4DevDocs#Building_Protege4.1_from_scratch_using_ant
http://smi-protege.stanford.edu/svn/protege4/ide/eclipse/protege4.1/
Toulouse belongs-to France .
Toulouse belong-to France
http://www.irchelp.org/irchelp/networks/servers/
Text below the panel after launching a Inference Engine: added JScrollPane
Variants of this do not work:
export LANG=de_DE.ISO-8859-1
This works:
java -Duser.language=de -jar
target/eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar &
DONE
COMMITED
the roundtrip project load - save - reload was not correct, especially with post-precessing
added class ProjectData for saving
SNAPSHOT uploaded for revision
The internal rules project is now loaded from the Web:
http://eulergui.sourceforge.net/rules/internal.n3p
and the rule base is cached as any other project
printing and computing of a project's timestamps enhahnced
DONE
TODO
diff -w --recursive --exclude=entries --exclude=all-wcprops src/main/java ~/src/eulergui_refactoring/eulergui/src/main/java
Thread [main] (Suspended (breakpoint at line 112 in SourceFilesManagement)) SourceFilesManagement.addSourceActions(ProjectGUI) line: 112 ProjectGUI.addMenus() line: 341 ProjectGUI.getMenu() line: 271 ProjectGUI.layoutFrame() line: 292 ProjectGUI.<init>(Project) line: 118 ProjectGUI.newWindow(Project, boolean) line: 209 ProjectGUI.main(String[]) line: 166
java.lang.NullPointerException at org.drools.base.ClassFieldReader.getIndex(ClassFieldReader.java:78) at org.drools.core.util.LeftTupleIndexHashTable.<init>(LeftTupleIndexHashTable.java:64) at org.drools.core.util.LeftTupleIndexHashTable.<init>(LeftTupleIndexHashTable.java:51) at org.drools.common.SingleBetaConstraints.createBetaMemory(SingleBetaConstraints.java:176) at org.drools.reteoo.BetaNode.createMemory(BetaNode.java:400) at org.drools.common.ConcurrentNodeMemories.createNodeMemory(ConcurrentNodeMemories.java:94) at org.drools.common.ConcurrentNodeMemories.getNodeMemory(ConcurrentNodeMemories.java:73) at org.drools.common.AbstractWorkingMemory.getNodeMemory(AbstractWorkingMemory.java:1521) at org.drools.reteoo.JoinNode.assertLeftTuple(JoinNode.java:61) at org.drools.reteoo.SingleLeftTupleSinkAdapter.doPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:189) at org.drools.reteoo.SingleLeftTupleSinkAdapter.createAndPropagateAssertLeftTuple(SingleLeftTupleSinkAdapter.java:138) at org.drools.reteoo.LeftInputAdapterNode.assertObject(LeftInputAdapterNode.java:148) at org.drools.reteoo.SingleObjectSinkAdapter.propagateAssertObject(SingleObjectSinkAdapter.java:59) at org.drools.reteoo.AlphaNode.assertObject(AlphaNode.java:145) at org.drools.reteoo.CompositeObjectSinkAdapter.doPropagateAssertObject(CompositeObjectSinkAdapter.java:450) at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:368) at org.drools.reteoo.CompositeObjectSinkAdapter.propagateAssertObject(CompositeObjectSinkAdapter.java:360) at org.drools.reteoo.ObjectTypeNode.assertObject(ObjectTypeNode.java:190) at org.drools.reteoo.EntryPointNode.assertObject(EntryPointNode.java:145) at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1174) at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:1123) at org.drools.common.AbstractWorkingMemory.insert(AbstractWorkingMemory.java:917) at n3_project.helpers.N3SourcetoDrools.copyN3factsToDrools(N3SourcetoDrools.java:548) at n3_project.helpers.N3SourcetoDrools.launchDrools(N3SourcetoDrools.java:537) at n3_project.helpers.N3toDroolsUpdater.launchDrools(N3toDroolsUpdater.java:48) at eulergui.project.Project.doRunDrools(Project.java:837) at eulergui.project.Project.runDroolsTriples(Project.java:787) at eulergui.project.Project.runDroolsTriples(Project.java:781) at n3_project.RunDroolsAction.actionPerformed(RunDroolsAction.java:46)
Asked on #eclipse IRC on freenode:
Is there an eclipse plugin that can suggest methods to be made private or package scope ?
anli_> That would be great
<jmv_> or even methods have only 1 or 2 out-of-context calls ...
<anli_> whats that?
<jmv_> a public method that is called many times inside the class but just once outside .
<jmv_> candidate to be made private
/error\|exception
DONE
if an N3 Source (from the Web) can't be assigned a last modified date, it will be assigned a timestamp of Long.MAX_VALUE,
so that a possible update can't be missed;
and so it will be considered as needing to be re-processed
n3_project.TestProjectSequence Tests run: 3, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 6.193 sec <<< FAILURE!
this happens after clearing the cache, and running 3 times TestProjectSequence.testpostproc() ; then a wrong rule base (from the post-processing project) is replacing the rule base of the main project; the error was in getRuleBase()
TODO
http://en.wikipedia.org/wiki/Deductive_database
http://www.prova.ws/
http://people.cs.kuleuven.be/~peter.vanweert/
We are considering connecting an OO persistent store to Drools, and I have some questions regarding JPA+Drools.
Is there other documentation besides drools-expert paragraph " 3.3.10. Persistence and Transactions" ? Some design documents ?
How are you storing objects in JPA? User classes as such, or just a limited number or Drools classes, and user classes are stored as serialized blobs ?
How is Drools using JPA Transactions ? After each fireAllRules ?
Is Drools using JPA rollback on its own initiative , or just when the end application calls a roolback ?
Which kind of JPA query is Drools doing ?
cd ~/src/eulergui_refactoring/eulergui/target/
ls -l eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar
-rw-r--r-- 1 jmv jmv 44613942 2010-10-06 00:00 eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar
zip -d eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar '*.java'
ls -l eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar
-rw-r--r-- 1 jmv jmv 41287225 2010-10-06 13:29 eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar
import a very simple JPA implementation based on JoaFip; no rollback, no Id, no query
* * Mapping of concepts:
* EntityManager ~ FilePersistence
* EntityTransaction ~ IDataAccessSession
class SimpleJPA actually runs.
To import JPA jar, run:
mvn dependency:sources
http://maven.apache.org/ref/2.2.1/maven-model/maven.html#class_build
http://www.jpox.org/docs/1_2/tutorials/jpa_tutorial.html#step5
COMMITED
Add this triple to each subproject: when adding an N3 , e.g. :
<./swing-rules3.n3p> <http://eulergui.sourceforge.net/engine.owl#subproject> <file:/home/jmv/src/deductions/n3_logical/person_import3.n3p> .
To test, open deductions/n3_logical/person_import3.n3p , that has subproject swing-rules3.n3p
- regression FIXED: Save as ... has no triples ( in Project )
- Manage subprojects in new N3 project file: Save as file is correct
WIP: TODO:
- test reading a new N3 project file with subprojects
- implement post-processing projects
- generalize to an URL : ProjectFactory.restoreN3P(
File projectFile )
- set the project's URI in the GUI
regression FIXED: saving and re-reading correctly a project in new N3 format
( in class ApplicationKB )
WIP: problem when reading a new N3 format converted from .n3p format, when it has a subproject: the subproject stays in .n3p, and the latter is badly read as N3, resulting in all N3 sources being at the first level in the GUI
The new format, pretty-printed by CWM :
# Base was: file:///home/jmv/src/deductions/n3_logical/person_import3.n3p.n3 @prefix : <http://www.w3.org/2002/07/owl#> . <swing-rules3.n3p> <http://eulergui.sourceforge.net/engine.owl#subproject> <file:/home/jmv/src/deductions/n3_logical/person_import3.n3p> . <file:/home/jmv/src/deductions/n3_logical/person_import3.n3p> a :Ontology; <http://eulergui.sf.net/ontology/project.owl.n3#hasN3Query> <query2.n3>; :imports <app_gui-rules2.n3>, <form-rules.n3>, <generic_gui_projection-rules.n3>, <generic_to_java-rules.n3>, <gui_generic.n3>, <java_event-rules.n3>, <java_library-rules.n3>, <java_library.n3>, <person-app-spec.n3>, <person-data.n3>, <person-events.n3>, <rpo-rules-small.n3>, <software_applications.n3>, <swing-rules3.n3p>, <http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/rpo-rules.n3> . |
COE is a project whose goal is to develop an integrated suite of software tools for constructing, sharing and viewing OWL encoded ontologies based on CmapTools, a concept mapping software used in educational settings, training, and knowledge capturing. Concept maps provide a human-centered interface to display the structure, content, and scope of an ontology.
What is the recommended location in a project for Java code examples ?
mvn dependency:sources
There is a nice discussion between participants of CNL 2010. Some (Enrico) want to keep ambiguity in the formal language resulting form parsing the CNL, others (Norbert) want to remove any ambiguity by a strict grammar.
Enroco has nice arguments, but Norbert is more in line with real business knowledge management.
I made a nice example of ambiguity solved by context (see just below) :
set an expiration time for OSCache ( 2 weeks )
COMMITED
Cache for Drools compiled Rule Bases
Now BUILD (SUCCESSFUL) is only 7 minutes 18 seconds !!!
TODO
add new N3 statements
because then we need to also provide editor for the main ontology
DroolsCompilationOptions
public void enableCompilation()
public void disableCompilation()
Cache for Drools compiled Rule Bases
assert ruleBase == workingMemory getRuleBase()
1) OK:
Thread [main] (Suspended (modification of field ruleBase in N3SourcetoDrools)) N3SourcetoDrools.setRuleBase(RuleBase) line: 900 N3toDroolsUpdater.setRuleBase(RuleBase) line: 149 Project.compiledRulebaseLoadedFromCache(String) line: 735 Project.translateN32Drools(boolean) line: 887 Project.prepareDrools(boolean) line: 863 Project.prepareDrools() line: 838 ApplicationKB.<init>() line: 76 ApplicationKB.instance() line: 43 ProjectFactory.restoreN3P(File) line: 248 ProjectFactory.restoreAny(File) line: 332 ProjectFactory.restore(String, boolean) line: 55 ProjectGUI.main(String[]) line: 161
2) KO :
Thread [main] (Suspended (breakpoint at line 33 in DroolsHelper)) DroolsHelper.printRuleBase(RuleBase) line: 33 ApplicationKB.loadN3Project(URI) line: 303 ProjectFactory.restoreN3P(File) line: 249 ProjectFactory.restoreAny(File) line: 332 ProjectFactory.restore(String, boolean) line: 55 ProjectGUI.main(String[]) line: 161
Remedy: setRuleBase() was not re-creating the Project's Workingmemory
TODO
Manage subprojects in new N3 project file:
<./subproject.n3p.n3> <http://eulergui.sf.net/ontology/project.owl.n3#subproject> :project .
COMMITED
Read an OWL/XML document; tested with examples/example_owl_xml.owl ;
should also work from a file XXX.xml or from an URL
(use OWL API 3.X)
cd ~/src/gf/examples/tutorial/food/
gf
import FoodEng.gf
parse "this delicious cheese is very Italian" | visualize_tree -view="open"
TestAttempto> p "a clerk is an animal ." baseText (sText (vpS (aNP clerk_N) (npVP (aNP animal_N))))
I joined the #mercury IRC chanel on freenode.
I found this abstract grammar :
examples/RDF/RDF.gf
I guess that I could write a concrete grammar for N3.
What's the use of the grammars in examples/SUMO/ ?
darcs get --lazy --set-scripts-executable http://code.haskell.org/gf/
Warning: no linearization of young_A Compiling [AllTenses] lib/src/urdu/AllUrd.gf Running: dist/build/gf/gf '-batch' '-gf-lib-path=lib/src' '+RTS' '-K16M' '-RTS' '-s' '--gfo-dir=dist/build/rgl/alltenses' 'lib/src/urdu/AllUrd.gf' checking module VerbUrd Warning: no linearization of CompCN Stack space overflow: current size 16000000 bytes. Use `+RTS -Ksize -RTS' to increase it. Setup.hs: gf exited with exit code: 2
The Attempto grammars are in GF/examples/attempto/. The main file for each language L is TestAttemptoL.gf.
I should try this
http://code.google.com/p/grammatical-framework/wiki/LaunchWebDemos
In "Lesson 7: Embedded grammars", there are intructions to generate Haskell and Javascript programs, but not Java. I guess I have to use the Java Scripting facility.
I have trouble with the dependency to Syntax.
I found no way to extend the search directory list.
> i TestAttemptoEng.gf
File Syntax.gf does not exist.
searched in:
/home/jmv/src/gf-src-3.1.6/examples/attempto
/usr/local/share/gf-3.1.6/lib
/usr/local/share/gf-3.1.6/lib/prelude
Languages:
30 msec
> i /home/jmv/src/gf-src-3.1.6/examples/tutorial/syntax/Syntax.gf
+ reading /usr/local/share/gf-3.1.6/lib/prelude/Predef.gfo
+ reading /usr/local/share/gf-3.1.6/lib/prelude/Prelude.gfo
+ reading /home/jmv/src/gf-src-3.1.6/examples/tutorial/syntax/Grammar.gfo
+ reading /home/jmv/src/gf-src-3.1.6/examples/tutorial/syntax/Syntax.gfo
linking ... no module found for Syntax
> i TestAttemptoEng.gf
<same thing>
Answer by Aarne:
You need lib/present. This is not produced by Cabal/Setup.hs currently because (as I've been told) Windows doesn't support the preprocessor that making the 'present' library involves. But it can be produced by
cd GF/lib/src
make present
A lighter alternative is to use alltenses instead of present:
i -path=.:alltenses TestAttemptoEng.gf
p -lang=Eng "there are at least ten apples ."
Try this first, so you don't need to compile any libraries. It will make the compilation slower, but should work for all languages except perhaps Finnish ;-)
TestAttempto> p -lang=Eng "there are at least nine apples ." no trees found; unknown words: nine
This one is funny:
TestAttempto> gr | l -treebank TestAttempto: baseText (impVP (theNP beginning_N) (v3VP give_V3 (pnNP england_PN) (allCollNP form_N))) TestAttemptoEng: give all forms to England , the beginning !
These were made with help from TAB :
TestAttempto> p -lang=Eng "a customer rejects a course . " baseText (sText (vpS (aNP customer_N) (v2VP reject_V2 (aNP course_N)))) 20 msec TestAttempto> 0 msec TestAttempto> p -lang=Eng "a customer rejects one course . " baseText (sText (vpS (aNP customer_N) (v2VP reject_V2 (cardNP one_Card course_N)))) 10 msec TestAttempto> p -lang=Eng "a customer rejects two course . " no trees found, but all words are known 0 msec TestAttempto> p -lang=Eng "a customer rejects two courses . " baseText (sText (vpS (aNP customer_N) (v2VP reject_V2 (cardNP two_Card course_N)))) 0 msec TestAttempto> p -lang=Eng "a customer rejects three courses . " no trees found; unknown words: three 0 msec TestAttempto> p -lang=Eng "a customer rejects five courses . " baseText (sText (vpS (aNP customer_N) (v2VP reject_V2 (cardNP five_Card course_N)))) 10 msec TestAttempto> p -lang=Eng "a customer rejects six courses . " no trees found; unknown words: six
svn diff --diff-cmd /usr/bin/diff -x -bw \
src/main/java/eulergui/project/N3Source.java
COMMITED
- remove misleading message : when opening the application, Drools compilation forced for N3 rules
- N3Source.uri() now really returns the absolute URI
I finally found the Proceedings of CNL 2009
http://sunsite.informatik.rwth-aachen.de/Publications/CEUR-WS/Vol-448/
Workshop on Controlled Natural Language
Pre-Proceedings of the Workshop on Controlled Natural Language (CNL 2009)
Marettimo Island, Italy, 8-10 June, 2009
Edited by
Norbert E. Fuchs
Sent a message to the participants.
Articles:
Implementing Controlled Languages in GF
Aarne Ranta, Krasimir Angelov
software specification authoring (Hähnle & al. 2005)
The main mailing list is the Google group
http://groups.google.com/group/gf-dev
I joined !
The Attempto grammars are in GF/examples/attempto/. The main file for each language L is TestAttemptoL.gf.
I found the tutorial's examples in the source in :
~/src/gf-src-3.1.6/examples/tutorial/hello/
https://sites.google.com/a/octo.com/nosql/home
With subclipse, I could recover my project without re-download from Subversion. I just deleted the project and re-created it.
With subclipse, in the history of a file , I was able to change the Log Message a posteriori.
should implement the file cache for compiled rules bases just for that
==> in fact the message is misleading
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at eulergui.drools_engine.ParserLink.preprocessLists(ParserLink.java:817)
at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:489)
at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:914)
at eulergui.gui.controller.ApplicationKB.loadN3URL(ApplicationKB.java:263)
at eulergui.gui.controller.ApplicationKB.loadN3Project(ApplicationKB.java:298)
at eulergui.project.ProjectFactory.restoreN3P(ProjectFactory.java:249)
there were two listener actions, one from projectLoaded, one from n3SourceAdded through rethrowEventsPlease
remedy: remove projectLoaded
TODO: maybe replace the call to rethrowEventsPlease with the callback projectLoaded
unchecked is replaced (partially) by rawtypes
Caution, Grape needs latest Groovy 1.8, not the Groovy 1.6 from Ubuntu !
http://groovy.codehaus.org/Grape
http://blog.mycila.com/2010/04/subversion-password-recovery.html
Symptom
Failed to load JavaHL Library.
These are the errors that were encountered:
no libsvnjavahl-1 in java.library.path
no svnjavahl-1 in java.library.path
no svnjavahl in java.library.path
java.library.path = /home/jmv/apps/jdk1.6.0_21/jre/lib/amd64/server:/home/jmv/apps/jdk1.6.0_21/jre/lib/amd64:/home/jmv/apps/jdk1.6.0_21/jre/../lib/amd64:/usr/lib64/xulrunner-addons:/usr/java/packages/lib/amd64:/usr/lib64:/lib64:/lib:/usr/lib
Remedy
/home/jmv/apps/eclipse/eclipse \ -vmargs -Djava.library.path=/usr/lib/jn |
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 1741 in Project))
Project.addProjectListener(ProjectListener) line: 1741
ProjectGUI_Updater.<init>(ProjectGUI) line: 29
ProjectGUI.setProject(Project) line: 695
ProjectFileManagement$1.actionPerformed(ActionEvent) line: 70
JMenu$1(AbstractButton).fireActionPerformed(ActionEvent) line: 2015
AbstractButton$Handler.actionPerformed(ActionEvent) line: 2338
DefaultButtonModel.fireActionPerformed(ActionEvent) line: 402
DefaultButtonModel.setPressed(boolean) line: 259
JMenu$1(AbstractButton).doClick(int) line: 376
BasicMenuItemUI.doClick(MenuSelectionManager) line: 829
BasicMenuItemUI$Handler.mouseReleased(MouseEvent) line: 873
JMenu$1(Component).processMouseEvent(MouseEvent) line: 6341
JMenu$1(JComponent).processMouseEvent(MouseEvent) line: 3311
JMenu$1(Component).processEvent(AWTEvent) line: 6106
JMenu$1(Container).processEvent(AWTEvent) line: 2122
JMenu$1(Component).dispatchEventImpl(AWTEvent) line: 4701
JMenu$1(Container).dispatchEventImpl(AWTEvent) line: 2180
JMenu$1(Component).dispatchEvent(AWTEvent) line: 4527
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4706
LightweightDispatcher.processMouseEvent(MouseEvent) line: 4369
LightweightDispatcher.dispatchEvent(AWTEvent) line: 4299
ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2166
ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2611
ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4527
EventQueue.dispatchEvent(AWTEvent) line: 618
EventDispatchThread.pumpOneEventForFilters(int) line: 286
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 201
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 191
EventDispatchThread.pumpEvents(int, Conditional) line: 186
EventDispatchThread.pumpEvents(Conditional) line: 178
EventDispatchThread.run() line: 139
By opening with the owl button, examples/car_ace.owl , from a non-empty project for example examples/koala.n3p ), the N3 sources appears twice in the GUI.
However, from a blank project it works fine. Same thing with opening an N3 file .
NOT REPRODUCED !
I sent a mail to the list :
I continued practicing with the tutorial. I came to the dictionary example in 2.7 Abstract types.
Being proficient enough in Prolog, I understand the code in the tutorial.
But I found no example of actually using an abstract type, or other flavours of types.
To be concrete, I wrote this minimal piece of code, but how to create an empty dictionary , with the right type (string) of key and value in variable Dic ?
Dic2 = set( Dic, "jmv", "JM Vanel" ),
search( Dic2, "jmv", V),
io.write_string( "search( dic, jmv, V) : V= ", !IO),
io.write_string( V, !IO) .
% ./eliza
Hi! I'm Eliza. Please tell me your problem.
> I'm happy.
Did you come to me because you are happy?
> No.
Are you saying no just to be negative?
> Yes.
You seem quite positive.
> Fuck.
I'm not sure I understand you fully.
> My wife beats me.
What does that suggest to you?
> Revenge.
I see.
> What do you see ?
Why do you ask?
Scala in command line :
scala> val x=4 x: Int = 4 scala> 1 + 2 * 3 / x res2: Int = 2 scala> x=x+1 <console>:5: error: reassignment to val x=x+1 ^ scala> "ggGg" . exists(_.isUpperCase) res5: Boolean = true
Scala IDE for eclipse
I took a brand new eclipse 3.6.
http://download.scala-ide.org/nightly-update-helios-2.8.0.final
Strong background in software engineering.
Concerns about keeping a clean code base, avoiding forks, avoiding re-implementations, while still preserving the freedom of researchers.
http://gribble.dreamhosters.com/viewfactoids.php?db=%23sourceforge
jmv_> Hi all
<ctsai-sf> Hello.
<jmv_> When creating a new project, is ti possible to import a whole repository changes database of a previously existing project elsewhere ?
<ctsai-sf> What exactly would you like to import? An SCM repository?
<jmv_> yes
<jmv_> don't know yet if it is CVS, or another
<ctsai-sf> Okay, well, the answer is yes. If you need to import to CVS, you can use the ,,cvsadminrepo tool to do that.
<gribble> You can manage your CVS repository from the shell using the adminrepo tool: http://sourceforge.net/apps/trac/sourceforge/wiki/CVS%20adminrepo
<ctsai-sf> To import to SVN, use ,,svnadminrepo
<gribble> You can manage your SVN repository from the shell using the adminrepo tool: http://sourceforge.net/apps/trac/sourceforge/wiki/SVN%20adminrepo
<ctsai-sf> Or if you're importing to Git, Bazaar or Mercurial, you have direct access to those via the ,,shell if you need that to manage the import.
<gribble> Documentation on the SourceForge shell services is here: http://sourceforge.net/apps/trac/sourceforge/wiki/Shell%20service
<ctsai-sf> And, it's not a necessary step, but, whatever SCM the original source repository uses, you may want to consider migrating to something different before importing.
<jmv_> OK, I already used the SF shell , and I'm mainly working with *sh for 20 years + ; I'm satisfied by your answers :)
<jmv_> But why are writing ,,shell and ,,svnadminrepo with2 commas in front ?
<gribble> Documentation on the SourceForge shell services is here: http://sourceforge.net/apps/trac/sourceforge/wiki/Shell%20service
<gribble> You can manage your SVN repository from the shell using the adminrepo tool: http://sourceforge.net/apps/trac/sourceforge/wiki/SVN%20adminrepo
<ctsai-sf> Because that's the syntax to call the bot (gribble) to post the links.
<ctsai-sf> Factoids rather.
<jmv_> ok :)
<ctsai-sf> Factoids list here: http://gribble.dreamhosters.com/viewfactoids.php?db=%23sourceforge
<ctsai-sf> More info on bot here: http://sourceforge.net/apps/mediawiki/gribble/index.php?title=Main_Page
<jmv_> OK, I saw the factoids page; is there also a web log of the chat ?
<ctsai-sf> No, we are not allowed to have public logs of this channel
TODO : exceptions in jEdit with:
Resource not found: null!/org/gjt/sp/jedit/icons/themes/closebox.gif
DONE
now possible to read projects files in N3 with URI's différent from <>
implementation: to retrieve the right project in the ApplicationKB after fireAllRules, this triple is asserted:
<project URI> <http://www.w3.org/2000/01/rdf-schema#seeAlso> <location URI> .
TODO :
- also read project from an URL
- comment out save in old format XMLEncode
- re-test opening an ontology from Protégé with owl:imports
- specify GUI behavior in the case of opening an ontology from Protégé with
other content as owl:imports
* how to edit this other content , and possibly take in account
modifications of owl:imports
triples
* how to represent recursive owl:imports
* read-write-read round-trip with sub-projects
Some good questions by Animesh S.:
How does the user ask for some data (e.g. how are menu selections turned into some kind of search)
How does that search get marshalled into something that can be sent to the server
How does the marshalled data actually get transmitted and what does the client do while it’s waiting for a response
How does the server receive the request
How does the server unmarshall the search, and what kind of structure is it unmarshalled into
How is the search sent to the database
How does that data returned by the database get marshalled into something that can be sent back to the client.
How is the marshalled data sent back to the client
How does the client unmarshall the data, and what kind of model does the data get unmarshalled into
What does the client do if the returned data overlaps something it already has in another window, what if the returned data relates to a different entity but has different attributes values
How does the model data get transferred to display fields
When the user makes a change to the displayed fields how is that input validated.
If the change is to data that the user is displaying in another window, how does that other window get updated.
How is the change sent back to the server
How does the server apply the change to the database
How do other clients connected to the same workspace find out about the change
You could also add login/session logic, application of a system filter (e.g. for embargoed data) and application of a user filter on the server. You could then add authorisation features – how does the server check the users authority to do something, what does it do if the user isn’t allowed to do it. Etc. etc.
A more complicated case would use Drools to validate data on the server and retrieve and present validation results.
AceWiki suggestion
export as OWL/RDF or N3
With the EulerGUI tool chain, one can enter ontologies + rules in Controled English with AVE View http://attempto.ifi.uzh.ch/aceview/ , or soon AceWiki http://attempto.ifi.uzh.ch/acewiki/ , and have all this translated in Drools.
There is a set of N3 rules for OWL RL, that can be translated into Drools and executed along with the business rules.
Asked on swig IRC:
What would be the most consensual and widely accepted property for expressing the (dereferentiable) URL origin (file or Web) of an URI ?
<gromgull> jmv: rdfs:seeAlso :)
<gromgull> jmv: I would use the Nepomuk Information Element ontology, but this is hardly consensual
<jmv> danke, gromgull , I'll use rdfs:seeAlso for now , although it's not specific enough ;
<jmv> I had a look at Nepomuk Information Element ontology , but it's a big ontology where I couldn't find my need
http://xradar.sourceforge.net/usage/maven-plugin/howto.html
mvn site
DOES NOT WORK:
EulerGUI regression:
after drag-and-drop of an OWL file, the line of buttons is not shown ; the user has to resize the window
DONE
an URL for an RDF document was treated as plain XML,
e.g. http://www.w3.org/2008/05/skos-xl
in class SourceFactory, accept content Type like
application/rdf+xml; qs=0.9
TODO: why was this commented out ?
//projectGUI.getProject().applicationKB.fireFileSavedEvent(pathSaved);
Debugging with the Maven Jetty Plugin in Eclipse
http://docs.codehaus.org/display/JETTY/Debugging+with+the+Maven+Jetty+Plugin+inside+Eclipse
After the session has expired :
010-09-18 16:32:28.503:WARN::Error for /acewiki/ java.lang.UnsatisfiedLinkError: Native Library /usr/lib/swi-prolog/lib/amd64/libjpl.so already loaded in another classloader at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1768) at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1728) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1028) at jpl.JPL.loadNativeLibrary(JPL.java:100) at jpl.fli.Prolog.<clinit>(Prolog.java:85) at jpl.JPL.init(JPL.java:177) at ch.uzh.ifi.attempto.ape.APELocal.<init>(APELocal.java:74) at ch.uzh.ifi.attempto.ape.APELocal.init(APELocal.java:114) at ch.uzh.ifi.attempto.acewiki.AceWikiServlet.newApplicationInstance(AceWikiServlet.java:61) at nextapp.echo2.webcontainer.ContainerInstance.init(ContainerInstance.java:206)
I get this error when I run:
mvn -Djava.library.path=/usr/lib/swi-prolog/lib/amd64 jetty:run
2010-09-17 17:31:43.687:WARN::Error for /acewiki/ java.lang.UnsatisfiedLinkError: no jpl in java.library.path at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1734) at java.lang.Runtime.loadLibrary0(Runtime.java:823) at java.lang.System.loadLibrary(System.java:1028) at jpl.JPL.loadNativeLibrary(JPL.java:100) at jpl.fli.Prolog.<clinit>(Prolog.java:85) at jpl.JPL.init(JPL.java:177) at ch.uzh.ifi.attempto.ape.APELocal.<init>(Unknown Source) at ch.uzh.ifi.attempto.ape.APELocal.init(Unknown Source) at ch.uzh.ifi.attempto.acewiki.AceWikiServlet.newApplicationInstance(AceWikiServlet.java:61) at nextapp.echo2.webcontainer.ContainerInstance.init(ContainerInstance.java:206)
/SRC/attempto_java_packages-091207/src
/SRC/pl/packages/jpl/src/java/jpl
But it runs OK with:
eval `swipl -dump-runtime-variables` mvn package java -Djava.library.path=$PLBASE/lib/$PLARCH \ -jar $HOME/apps/jetty-runner*.jar target/acewiki-0.4.2-SNAPSHOT.war
This also runs OK (complete suite of commands ) :
cd ~/src/acewiki-0.4.1/ ln -s $HOME/src/ape/ape.exe . eval `swipl -dump-runtime-variables` export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH/server:$LD_LIBRARY_PATH export MAVEN_OPTS="-Djava.library.path=$PLBASE/lib/$PLARCH" mvn jetty:run |
To debug in eclipse, add this to MAVEN_OPTS :
-Xdebug -Xnoagent -Djava.compiler=NONE -Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=n
./prepare
The following submodules are not yet initialised
bench
packages/chr
packages/clpqr
packages/inclpr
packages/jpl
packages/protobufs
Do you want me to run git submodule update --init? yes
I search for the JPL library :
locate libjpl.so /usr/lib/swi-prolog/lib/amd64/libjpl.so
I paste this in the shell (inspired by the README.txt and by my previous experience of starting the local APE server for ACE View) :
eval `swipl -dump-runtime-variables` export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH/server:$LD_LIBRARY_PATH
which adds this in the environment:
% echo $LD_LIBRARY_PATH /home/jmv/apps/jdk1.6.0_21/jre/lib/amd64/server:/home/jmv/apps/jdk1.6.0_21/jre/lib/amd64: % echo $LD_PRELOAD /usr/lib/swi-prolog/lib/amd64/libjpl.so
After Maven adaptation, run the sofware so :
mvn -Djetty.port=8088 -Djava.library.path=$PLBASE/lib/$PLARCH jetty:run
http://localhost:8088/acewiki/acewiki/
Note that the how-to "Testing ACE editor again from sources" still works with the unmodified AceWiki source directory.
I found this grammar :
http://www.grammaticalframework.org/examples/attempto/AttemptoFre.gf
with this content :
--# -path=.:present concrete AttemptoFre of Attempto = SymbolsC ** AttemptoI with (Syntax = SyntaxFre), (Symbolic = SymbolicFre), (LexAttempto = LexAttemptoFre) ;
Is this the reference version for Attempto Controled English in GF ?
Or should I generically translate the french into english with GF, and then apply the standard ACE tools ?
Compiled from sources following :
http://code.google.com/p/grammatical-framework/wiki/DevelopersPage
The build step does not complete , but the install step seem to work :
runghc Setup.hs build +RTS -K100M -RTS
...
Running: dist/build/gf/gf '-batch' '-gf-lib-path=lib/src' '-s' '--gfo-dir=dist/build/rgl/alltenses' 'lib/src/api/TryEng.gf'
Compiling [AllTenses] lib/src/api/TryFin.gf
Running: dist/build/gf/gf '-batch' '-gf-lib-path=lib/src' '-s' '--gfo-dir=dist/build/rgl/alltenses' 'lib/src/api/TryFin.gf'
Stack space overflow: current size 8388608 bytes.
Use `+RTS -Ksize -RTS' to increase it.
Setup.hs: gf exited with exit code: 2
REMEDY:
export GHCRTS=-K100M
runghc Setup.hs build
I may use GF to help serialize N3 / RDF graphs in various formats (see ??? ).
2nd Workshop on Controlled Natural Language
Gordon Pace! ! University of Malta ! ! ! ! gordon.pace@um.edu.mt
ask for for reference of article about using rule engine in user interaction
send to Marcos Cramer! University of Bonn! ! ! ! ! marcos.cramer@gmail.com link to the Prolog module for using Mercury declarations
Think about how to use Enrico's CNL GUI for user interaction, and ask for a visit to Bolzano
Enrico Franconi! ! Free University of Bozen-Bolzano! ! franconi@inf.unibz.it
Send to Mary links to my tools, and ask for pointers to her game :
Mary Keeler!! ! CyberCORE!! ! ! ! ! mkeeler@uw.edu
New repository for ACE prolog code
Since soon no one working on ACE will be in the University of Zürich, it is time to setup a new repository .
I propose to do that.
ACE Wiki is on LaunchPad.
The ACE View source code is hosted by Google Code .
There is also CodeHaus, and certainly others.
preserve history.
strong background in software engineering
concerns about keeping a clean code base, avoiding forks, avoiding re-implementations, while still preserving the freedom of researchers.
Send to Hans links to my tools :
Hans Leiss! ! ! CIS University of Munich! ! leiss@cis.uni-muenchen.de
Send to Silvie links to my blogs:
Silvie Spreeuwenberg! LibRT, Amsterdam! ! ! ! ! silvie@librt.com
Send to Adam links to my tools :
Adam Wyner ! ! University of Leeds!! ! ! ! adam@wyner.info
re-use ACE View Prolog format à la sauce N3
Questions
Send to Tobias pointers to Maven
Tobias Kuhn!! ! University of Zurich! ! ! ! kuhntobias@gmail.com
Here is what I did to adapt the directory structure of AceWiki to Maven. Of course the file moves should be done with Software Configuration Management, to preserve files history.
mkdir --parents src/main/java
mv src/ch src/main/java
mkdir --parents src/main/resources
mv src/overview.html src/main/resources
# all these files should be moved to src/main/resources :
ls -l src/main/java/**/*.pl | grep -v '.java$' | grep -v /test/ mkdir --parents src/main/resources/ch/uzh/ifi/attempto/codeco/ mv src/main/java/ch/uzh/ifi/attempto/codeco/ src/main/resources/ch/uzh/ifi/attempto/codeco/ mkdir --parents src/main/resources/ch/uzh/ifi/attempto/acewiki/gui/img/ mv src/main/java/ch/uzh/ifi/attempto/acewiki/gui/img/* src/main/resources/ch/uzh/ifi/attempto/acewiki/gui/img/ mkdir --parents src/main/resources/ch/uzh/ifi/attempto/aceeditor/img/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/img/* src/main/resources/ch/uzh/ifi/attempto/aceeditor/img/ mkdir --parents src/main/resources/ch/uzh/ifi/attempto/echocomp/style/ mv src/main/java/ch/uzh/ifi/attempto/echocomp/style/* src/main/resources/ch/uzh/ifi/attempto/echocomp/style/ mkdir --parents src/main/resources/ch/uzh/ifi/attempto/aceeditor/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/*.pl src/main/resources/ch/uzh/ifi/attempto/aceeditor/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/*.html src/main/resources/ch/uzh/ifi/attempto/aceeditor/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/*.tex src/main/resources/ch/uzh/ifi/attempto/aceeditor/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/*.pdf src/main/resources/ch/uzh/ifi/attempto/aceeditor/ mkdir src/main/resources/ch/uzh/ifi/attempto/acewiki/core mv src/main/java/ch/uzh/ifi/attempto/acewiki/core/{*.pl,*.html,*.pdf,*.tex} src/main/resources/ch/uzh/ifi/attempto/acewiki/core mkdir --parents src/test/resources/ch/uzh/ifi/attempto/aceeditor/test/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/test/* src/test/resources/ch/uzh/ifi/attempto/aceeditor/test/ mkdir --parents src/test/resources/ch/uzh/ifi/attempto/acewiki/core/test/ mv src/main/java/ch/uzh/ifi/attempto/acewiki/core/test/* src/test/resources/ch/uzh/ifi/attempto/acewiki/core/test/
# all these Java files should be moved to src/test/java :
grep test build.xml
mkdir --parents src/test/java mkdir --parents src/test/java/ch/uzh/ifi/attempto/aceeditor/test/ mkdir --parents src/test/java/ch/uzh/ifi/attempto/acewiki/core/test/ mv src/main/java/ch/uzh/ifi/attempto/aceeditor/test/*.java src/test/java/ch/uzh/ifi/attempto/aceeditor/test/ mkdir src/main/webapp mv webapps/war/* src/main/webapp # deploy locally the attempto ape jar (later should be put on a public repo from sources) mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/attempto-ape.jar \ -DgroupId=attempto -DartifactId=ape -Dversion=1.0 -Dpackaging=jar # same for OWLAPI mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/owlapi-bin.jar \ -DgroupId=owlapi -DartifactId=owlapi -Dversion=3.1.0 -Dpackaging=jar # same for HermiT mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/HermiT.jar \ -DgroupId=hermit -DartifactId=hermit -Dversion=1.2.4 -Dpackaging=jar # same for OWLLINK; not sure which implementation is used, so groupId/artifactId/version is tentative # ? http://owllink-owlapi.sourceforge.net/ ? mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/owllink-bin.jar \ -DgroupId=owllink -DartifactId=owllink -Dversion=1.0 -Dpackaging=jar # same for JPL from SWI Prolog mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/jpl.jar \ -DgroupId=jpl -DartifactId=jpl -Dversion=1.0 -Dpackaging=jar # same for Echo2 from NextApp mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/Echo2_App.jar \ -DgroupId=com.nextapp -DartifactId=echo2-app -Dversion=2.1.1 -Dpackaging=jar # same for echopointng mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ \ -Dfile=${HOME}/src/acewiki-0.4.1/lib/echopointng-2.2.0rc2.jar \ -DgroupId=net.sourceforge.echopoint -DartifactId=echopointng -Dversion=2.2.0rc2 -Dpackaging=jar mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ -Dfile=${HOME}/src/acewiki-0.4.1/lib/Echo2_WebContainer.jar -DgroupId=com.nextapp -DartifactId=echo2-webcontainer -Dversion=1.0 -Dpackaging=jar mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ -Dfile=${HOME}/src/acewiki-0.4.1/lib/Echo2_FileTransfer_WebContainer.jar -DgroupId=com.nextapp -DartifactId=echo2-filetransfer -Dversion=1.0 -Dpackaging=jar mvn deploy:deploy-file -Durl=file:${HOME}/.m2/repository/ -Dfile=${HOME}/src/acewiki-0.4.1/lib/Echo2_Extras_WebContainer.jar -DgroupId=com.nextapp -DartifactId=echo2-webcontainer -Dversion=1.0 -Dpackaging=jar
I created the pom.xml file (attached). After that, if you have installed Maven 2, it's possible to run the test suite:
mvn test ... T E S T S ------------------------------------------------------- Running ch.uzh.ifi.attempto.aceeditor.test.ChartParserGenerationTest Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.022 sec Running ch.uzh.ifi.attempto.aceeditor.test.TestGrammar Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec Running ch.uzh.ifi.attempto.aceeditor.test.ChartParserParsingTest Tests run: 0, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.005 sec Results : Tests run: 0, Failures: 0, Errors: 0, Skipped: 0
and then run the sofware:
mvn -Djetty.port=8088 jetty:run
Note that this will do: compile, build, test, build, and launch.
The existing build.xml is not used at all by Maven.
LePUS3, SEMAT
00 46 73 822 8179
Krasimir
http://www.owllink.org/
http://www.naproche.net/inc/downloads.php
http://www.inf.unibz.it/~franconi/publications.html#quelo
http://www.inf.unibz.it/~franconi/
Latino: text to ontology
Rabbit Clone, SOS
Questions to Tobias
EulerGUI
EulerGUI
turn table
formats
inference engines
framework
second inner reasoner ( the consience of the application )
good practices of design for OO applications
questions
reuse ontologies
use probabilistic methods to "translate" natural language into CNL
CNL used in speech undertanding
GUI that flags non CNL parts in a NL text
Visio
qualitative physics
interchange language: n3
common sense
RuleBurst
Search, but did not find:
maven give hint about repository for Downloading far
{?S <p> ?V } => {?S <q> ?V }.
should be translated in CHR like this:
triple(S, '<p>', V) ==> triple(S, '<q>', V).
--no-qvars
I 'm stiil looking at Prova for a backward chaining engine , more adapted to reason on databases (SPARQL or SQL ).
After weeks, I redo it on my laptop:
svn co https://mandarax.svn.sourceforge.net/svnroot/mandarax/prova3/prova-compact/trunk/ prova-compact cd prova-compact mvn test
Alas it stays forever here with 100% CPU:
Timeout detected: [[[sensor1,async,0,data,[temp,101.0]]]] Order order2 cancelled Timeout elapsed for order order1 Proceed with the order as timeout for cancel is elapsed order1 Timeout elapsed for order order3 Proceed with the order as timeout for cancel is elapsed order3 Order order1 cannot be cancelled
Committed revision 1817
refactoring branch:
- read a new N3 Project file with extension .n3p.n3 or .owl from command line
- N3 sources are now opened in the editor relative to project; Euler and Drools runs are correct;
tested with examples/BloodPressure.n3p.n3
TODO:
- test open BloodPressure.n3p.n3 from the File menu;
- open an OWL file from Protégé
- implement sub-Projects and post-processing projects
Revision 1814
Modified Thu Sep 9 08:12:25 2010 UTC (113 minutes, 34 seconds ago) by jmvanel
project-java-rules.n3 : WIP : add on the LHS:
?ONTO a java:eulergui-project-Project .
But this does not yet compile in Drools on the RHS:
?N3S a java:eulergui-project-N3Source .
?N3S java:URI ?IMPORT. # <<<
?ONTO javam:addN3Source ?N3S .
The N3 rule is now :
{ ?ONTO a java:eulergui-project-Project . ?ONTO owl:imports ?IMPORT. ?IMPORT log:uri ?IMPORT_URI . } => { ?N3S a java:eulergui-project-N3Source . ?N3S java:URI ?IMPORT_URI . ?ONTO javam:addN3Source ?N3S . }. |
TODO: enhance the translator; this is wrong translation :
( N3S_reference ) . setURI( $IMPORT_URI_reference );
Committed revision 1815
refactoring branch:
- Now project-java-rules.n3 compiles in Drools
- updated the class N3JavaMappingBuiltin : Now we store the Java type (String) of the subject of log:uri.
- now when opening a .n3p.n3 file, the N3 sources appears in the GUI ! :)
but TODO: when trying to open an N3 source in the editor:
java.net.MalformedURLException: no protocol: <./catch_allQ.n3> at java.net.URL.<init>(URL.java:567) at java.net.URL.<init>(URL.java:464) at java.net.URL.<init>(URL.java:413) at eulergui.project.N3Source.getLocation(N3Source.java:49) at eulergui.project.N3Source.prepare(N3Source.java:341) at eulergui.project.N3Source.setProject(N3Source.java:306) at eulergui.project.Project.addN3Source(Project.java:296) at eulergui.project.Project.addN3Source(Project.java:291) at n3_project.helpers0.Rule_project_java_rules_n3_3_0.consequence( Rule_project_java_rules_n3_3_0.java:14)
DONE:
- copied the class N3JavaMappingBuiltin from trunk
- in method Project.save() , reestablish the XML format save ( TestProject was broken )
I updated the class N3JavaMappingBuiltin from the trunk,reading projects in N3 get better, but still not good :
INFO: Rule Compilation error : [Rule name='project-java-rules.n3 1'] n3_project/helpers0/Rule_project_java_rules_n3_1_0.java (12:847) : $IMPORT_reference cannot be resolved n3_project/helpers0/Rule_project_java_rules_n3_1_0.java (13:870) : $ONTO_reference cannot be resolved
The problem is that ?IMPORT and ?ONTO are ordinary URI's on the antecedent side, and Java objects on the right side :
rule "project-java-rules.n3 1" when $Triple_1 : Triple( $ONTO : subject, predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>", object == "<http://www.w3.org/2002/07/owl#Ontology>" ) $Triple_2 : Triple( subject == $ONTO, predicate == "<http://www.w3.org/2002/07/owl#imports>", $IMPORT : object ) then Triple newTriple; TripleResult newTripleResult; String N3S = Triple.resource("N3S") ; eulergui.project.N3Source N3S_reference = new eulergui.project.N3Source (); insert( new Assignment( N3S.toString(), N3S_reference )); ( N3S_reference ) . setURI( $IMPORT_reference ); ( $ONTO_reference ) . addN3Source( N3S_reference ); end |
One could leverage on the Java object creation that happens in another rule. The criterium in green could be applied on the antecedent side when the predicate is a Java predicate; problems with project-java-rules.n3 : a criterium
Assignment( $ONTO : String, $ONTO_reference : Object,
reference.class == $ONTO_class )
could be applied on the antecedent side when the predicate is a Java prédicate.
rule "project-java-rules.n3 0"
when
$Triple_1 : Triple( $ONTO : subject, predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>", object == "<http://www.w3.org/2002/07/owl#Ontology>" )
then
Triple newTriple;
TripleResult newTripleResult;
eulergui.project.Project $ONTO_reference = new eulergui.project.Project ();
insert( new Assignment( $ONTO.toString(), $ONTO_reference ));
end
|
The N3 rule is:
{ ?ONTO a owl:Ontology . ?ONTO owl:imports ?IMPORT. } => { ?N3S a java:eulergui-project-N3Source . ?N3S java:URI ?IMPORT. ?ONTO javam:addN3Source ?N3S . }. |
// ---------- N3 rule 1 ----------
/* {
?ONTO <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/2002/07/owl#Ontology>.
?ONTO <http://www.w3.org/2002/07/owl#imports> ?IMPORT.
}
=> {
_:N3S <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://java.sun.com/class#eulergui-project-N3Source>.
_:N3S <http://java.sun.com/class#URI> ?IMPORT.
?ONTO <http://java.sun.com/method#addN3Source> _:N3S.
}
.
*/
rule "project-java-rules.n3 1"
when
$Triple_1 : Triple( $ONTO : subject, predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>", object == "<http://www.w3.org/2002/07/owl#Ontology>" )
$Triple_2 : Triple( subject == $ONTO, predicate == "<http://www.w3.org/2002/07/owl#imports>", $IMPORT : object )
then
Triple newTriple;
TripleResult newTripleResult;
eulergui.project.N3Source N3S_reference = new eulergui.project.N3Source ();
insert( new Assignment( N3S.toString(), N3S_reference ));
( $N3S_reference ) . setURI( $IMPORT );
( $ONTO_reference ) . addN3Source( N3S );
end
DONE:
Trunk: Upgrade euler to 2010-09-03, pellet to 2.2.1
TODO
create the N3 project file with a <> as RDF subect.
"range restricted" rule : i.e. each variable in the conclusion of a rule must also appear in a not negated clause in the premise of this rule.
CHR solver to support cardinality restrictions
persistent CHR ?
TODO mail to Kaarel about CHR
cd /home/jmv/src/eulersharp/trunk/ unzip 2004/01swap/bin/Euler.jar 'eye/linux/**' chmod u+x eye/linux/bin/yap eye/linux/bin/yap consult( 'trunk/2006/02swap/euler.yap' ) . ?- n3_pcl( '/home/jmv/src/eulergui/examples/parents.n3', semantics ). GET /home/jmv/src/eulergui/examples/parents.n3 yes
Christiansen thinks that Attempto could benefit from a CHR implementation
Questions about CHR
Fixed:
following scenario is was buggy:
- Open http://deductions.svn.sourceforge.net/viewvc/deductions/n3/test_person_import.n3p
- Open local examples/koala.n3p
We saw a stack with horus. I did not see a stack, but a display with two projects combined.
NOT fixed: Save As:
Thread [AWT-EventQueue-0] (Suspended (exception MalformedURLException)) URL.<init>(URL, String, URLStreamHandler) line: 567 URL.<init>(URL, String) line: 464 Project.addN3Query(N3Source) line: 357 Project.setN3Query(N3Source) line: 347 ProjectLegacy.setN3Query(N3Source) line: 73 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Trampoline.invoke(Method, Object, Object[]) line: 37 GeneratedMethodAccessor5.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 MethodUtil.invoke(Method, Object, Object[]) line: 244 Statement.invokeInternal() line: 239 Statement.access$000(Statement) line: 39 Statement$2.run() line: 140 AccessController.doPrivileged(PrivilegedExceptionAction<T>, AccessControlContext) line: not available [native method] Statement.invoke() line: 137 Statement.execute() line: 128 XMLEncoder(Encoder).writeStatement(Statement) line: 253 XMLEncoder.writeStatement(Statement) line: 331 DefaultPersistenceDelegate.invokeStatement(Object, String, Object[], Encoder) line: 235 DefaultPersistenceDelegate.doProperty(Class, PropertyDescriptor, Object, Object, Encoder) line: 229 DefaultPersistenceDelegate.initBean(Class, Object, Object, Encoder) line: 247 DefaultPersistenceDelegate.initialize(Class<?>, Object, Object, Encoder) line: 395 DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 100 XMLEncoder(Encoder).writeObject(Object) line: 54 XMLEncoder.writeObject(Object) line: 257 XMLEncoder(Encoder).writeExpression(Expression) line: 279 XMLEncoder.writeExpression(Expression) line: 372 DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 97 XMLEncoder(Encoder).writeObject(Object) line: 54 XMLEncoder.writeObject(Object) line: 257 XMLEncoder(Encoder).writeObject1(Object) line: 206 XMLEncoder(Encoder).cloneStatement(Statement) line: 219 XMLEncoder(Encoder).writeStatement(Statement) line: 250 XMLEncoder.writeStatement(Statement) line: 331 XMLEncoder.writeObject(Object) line: 260 Project.save(Project) line: 1091 Project.saveAs(Project, File) line: 1113 ProjectFileManagement$4.actionPerformed(ActionEvent) line: 131 JMenu$1(AbstractButton).fireActionPerformed(ActionEvent) line: 1995 AbstractButton$Handler.actionPerformed(ActionEvent) line: 2318 DefaultButtonModel.fireActionPerformed(ActionEvent) line: 387 DefaultButtonModel.setPressed(boolean) line: 242 JMenu$1(AbstractButton).doClick(int) line: 357 BasicMenuItemUI.doClick(MenuSelectionManager) line: 1223 BasicMenuItemUI$Handler.mouseReleased(MouseEvent) line: 1264 JMenu$1(Component).processMouseEvent(MouseEvent) line: 6267 JMenu$1(JComponent).processMouseEvent(MouseEvent) line: 3267 JMenu$1(Component).processEvent(AWTEvent) line: 6032 JMenu$1(Container).processEvent(AWTEvent) line: 2041 JMenu$1(Component).dispatchEventImpl(AWTEvent) line: 4630 JMenu$1(Container).dispatchEventImpl(AWTEvent) line: 2099 JMenu$1(Component).dispatchEvent(AWTEvent) line: 4460 LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4577 LightweightDispatcher.processMouseEvent(MouseEvent) line: 4238 LightweightDispatcher.dispatchEvent(AWTEvent) line: 4168 ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2085 ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2478 ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4460 EventQueue.dispatchEvent(AWTEvent) line: 599 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122
Next week i'll be at First International Summer School on Constraint Handling Rules
Programming and Reasoning with Rules and Constraints
August 30th - September 3rd, 2010
Leuven, Belgium
TODO : upgrade to jEdit 4.3.2, and write a how-to in the manual for upgrading jEdit dependency .
upgrade to Pellet 2.2.1.
Attempto sentence:
Every n : PersonList contains at least one person .
OWL syntax:
PersonList subClassOf contain some person
If there is a n : PersonList X1 then the n : PersonList X1 contains at least 1 person . |
And in N3:
@prefix : <http://www.w3.org/2002/07/owl#> . @prefix acetext: <http://attempto.ifi.uzh.ch/acetext#> . @prefix multi: <http://deductions.sourceforge.net/ontologies/multi.owl#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . acetext:acetext a :AnnotationProperty . <http://deductions.sourceforge.net/ontologies/multi.owl> a :Ontology . multi:PersonList a :Class; rdfs:subClassOf [ a :Restriction; :onProperty multi:contain; :someValuesFrom multi:person ] . multi:contain a :ObjectProperty . multi:person a :Class . [ a :Axiom; acetext:acetext "Every n: PersonList contains at least one person."; <http://purl.org/dc/elements/1.1/date> "2010-08-27 17:23:43"; :object [ a :Restriction; :onProperty multi:contain; :someValuesFrom multi:person ]; :predicate rdfs:subClassOf; :subject multi:PersonList ]. |
Rule:
If there is an OWL restriction on class C and property P, with someValuesFrom, or cardinality>1, or minCardinality>1, or maxCardinality>1, then the field for P should be multi-valued.
Idea:
Is there some method to generalize rules, like when having Swing rules, and generalizing to abstract GUI? It is neither abduction or induction I think.
Slightly extending the OWL format, see "Interoperability with Protégé" and "Proposal for a new ontology and N3 format for RDF + OWL + rules projects" .
I realize that we must somehow merge the classes N3Source and Project. Indeed an N3Source can contain owl:imports triples, which must be interpreted as sub-projects in the EulerGUI sense. In the other direction, a Project will soon be saved as OWL in N3 format.
One way to merge the classes N3Source and Project is to add a new interface,
IN3Source
.
As a side benefit, we can now use unlimited properties about the project itself, like Dublin Core, or simply :
<> rdf:label "name of the project".
to be displayed in the GUI.
Fixed:
examples/car_ace.owl
from an
empty project : the SWRL tranlation into N3 does not appear in GUI :
for an empty project the listeners where not set because prepare() was
not calledexamples/car_ace.owl
to
from a non empty project such as examples/koala.n3p : nothing appears
inside the GUINOT Fixed:
- Many yellow warnings with Eclipse
- new TODO, as in N3Source
I discovered that the start of the branch was worng ( too late ). So I try to re-merge the remaining differences not yet applied.
svn merge --dry-run \ https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui@1686 \ https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui@1716 \ src/main/java/eulergui/drools_engine/ParserLink.java
svn merge --dry-run \ https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/main/java/eulergui/drools_engine/ParserLink.java@1686 \ https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/main/java/eulergui/drools_engine/ParserLink.java@1716 \ src/main/java/eulergui/drools_engine/ParserLink.java
t=https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui s=src/main/java/n3_project/helpers/DroolsTripleHandler.java svn merge --dry-run \ $t/$s@1686 \ $t/$s@1716 \ $s
==> compilation error
t=https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui s=src svn merge --dry-run \ $t/$s@1686 \ $t/$s@1716 \ $s --- Fusion de r1687 à r1716 dans 'src': C src/main/java/eulergui/tools/CreateClassFormMouseListener.java C src/main/java/eulergui/EulerGUI.java U src/main/java/eulergui/gui/controller/ApplicationKB.java C src/main/java/eulergui/project/ProjectWithSubProjects.java C src/main/java/n3_project/helpers/N3JavaMappingBuiltin.java C src/main/java/n3_project/helpers/N3SourcetoDrools.java C src/main/java/n3_project/helpers/N3toDroolsUpdater.java C src/main/java/unif/Instanciator.java C src/main/java/com/hp/hpl/jena/rdf/model C src/test/java/eulergui/gui/TestJemmy.java Résumé des conflits : Conflits textuels : 7 Arborescences en conflit : 2
I merge , but still 2 tests in error:
unning n3_project.helpers.TestDroolsQuery Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 15.353 sec <<< FAILURE! Running eulergui.gui.TestFacebookSearch Tests run: 3, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 20.616 sec <<< FAILURE!
and also one minor error that is also in the trunk:
//////// Traduction de ./variableSubstitution.n3 ./variableSubstitution.n3 class eulergui.project.N3Source //////// 25 août 2010 17:46:57 n3_project.helpers.N3SourcetoDrools removeRulePackage INFO: _removeRulePackage(): aucun fait correspondant à file:///home/jmv/src/deductions/n3_new/variableSubstitution.n3 java.lang.NullPointerException at n3_project.helpers.DroolsTripleHandler.processLogBuiltin(DroolsTripleHandler.java:370) at n3_project.helpers.DroolsTripleHandler.makeDroolsCriterium(DroolsTripleHandler.java:240) at n3_project.helpers.DroolsTripleHandler.acceptAntecedent(DroolsTripleHandler.java:207) at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:671)
This is due to this pattern :
{?S ?P ?O} :substituteVariable (?V ?VT). ?V log:notEqualTo ?S.
COMMITED
Fixed the Failure and 2 Errors, due to rules not been compiled in presence of N3 searches ( bad ruleBase cache management in class Project )
We first merge the developpements in the main branch onto the refactoring branch. This is because the refactoring branch has more structural changes.
cp -r eulergui_refactoring eulergui_refactoring_merge cd eulergui_refactoring_merge/eulergui/ svn merge https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui@1716 \
https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui@HEAD
I typed "p" for postponed on all conflicts. Then we see that there are only 11 conflicts :
ls **/*fusion-droit.r* pom.xml.fusion-droit.r1785 src/main/java/eulergui/EulerGUI.java.fusion-droit.r1785 src/main/java/eulergui/drools_engine/ParserLink.java src/main/java/eulergui/gui/controller/ApplicationKB.java.fusion-droit.r1785 src/main/java/eulergui/project/Project.java.fusion-droit.r1785 src/main/java/eulergui/project/ProjectWithSubProjects.java.fusion-droit.r1785 src/main/java/eulergui/tools/ClassTree.java.fusion-droit.r1785 src/main/java/eulergui/tools/ComboTreeView.java.fusion-droit.r1785 src/main/java/n3_project/helpers/N3SourcetoDrools.java.fusion-droit.r1785 src/main/java/unif/Instanciator.java.fusion-droit.r1785 src/test/java/eulergui/gui/TestJemmy.java.fusion-droit.r1785
Note that ProjectGUI has been merged smoothly. All files in conflict have 1 or 2 conflicts, excepts Project.java which has 10 conflicts.
After almost 1 day of merging manually, here are the test resuls:
Running eulergui.gui.TestEulerGUIInputs Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 84.35 sec <<< FAILURE! Running deductions.runtime.TestRulesForUserEvents Tests run: 4, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 26.692 sec <<< FAILURE! Running n3_project.helpers.TestDroolsQuery Tests run: 2, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 35.37 sec <<< FAILURE! Running n3_project.TestProjectSequence Tests run: 3, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 6.421 sec <<< FAILURE! Running eulergui.gui.TestFacebookSearch Tests run: 3, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 23.274 sec <<< FAILURE! ... Tests run: 129, Failures: 1, Errors: 7, Skipped: 0 [INFO] ------------------------------------------------------------------------ [ERROR] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] Total time: 15 minutes 27 seconds [INFO] Finished at: Tue Aug 24 20:24:51 CEST 2010 [INFO] Final Memory: 45M/341M
I commit anyway !
QUESTIONS
oneOf applied to a Class must be a list of individuals :
http://www.w3.org/TR/2004/REC-owl-ref-20040210/#EnumeratedClass
and oneOf applied to a DataRange must be a list of literals:
http://www.w3.org/TR/2004/REC-owl-ref-20040210/#EnumeratedDatatype
so the translation by Gloze from XSD to OWL must not be :
pmxml_:enumResourceType
a owl:Class ;
owl:equivalentClass
[ a owl:DataRange ;
owl:oneOf (0 1)
] .
but:
pmxml_:enumResourceType a owl:DataRange ;
owl:oneOf (0 1) .
23 août 2010 18:58:51 org.coode.owlapi.rdfxml.parser.IndividualListItemTranslator translate INFO: Cannot translate list item to individual, because rdf:first triple is a literal triple 23 août 2010 18:58:51 org.coode.owlapi.rdfxml.parser.IndividualListItemTranslator translate INFO: Cannot translate list item to individual, because rdf:first triple is a literal triple Exception in thread "main" java.lang.NullPointerException at org.coode.owlapi.rdfxml.parser.OneOfTranslator.translate(OneOfTranslator.java:56) at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.translateClassExpression(OWLRDFConsumer.java:1645) at org.coode.owlapi.rdfxml.parser.AbstractTripleHandler.translateClassExpression(AbstractTripleHandler.java:79) at org.coode.owlapi.rdfxml.parser.TPEquivalentClassHandler.handleTriple(TPEquivalentClassHandler.java:62) at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.handle(OWLRDFConsumer.java:1089) at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer$1.handleResourceTriple(OWLRDFConsumer.java:1215) at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.iterateResourceTriples(OWLRDFConsumer.java:1994) at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.endModel(OWLRDFConsumer.java:1213) at uk.ac.manchester.cs.owl.owlapi.turtle.parser.OWLRDFConsumerAdapter.handleEnd(OWLRDFConsumerAdapter.java:107) at uk.ac.manchester.cs.owl.owlapi.turtle.parser.TurtleParser.parseDocument(TurtleParser.java:153) at uk.ac.manchester.cs.owl.owlapi.turtle.parser.TurtleOntologyParser.parse(TurtleOntologyParser.java:60) at uk.ac.manchester.cs.owl.owlapi.ParsableOWLOntologyFactory.loadOWLOntology(ParsableOWLOntologyFactory.java:165) at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:619) at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(OWLOntologyManagerImpl.java:580) at org.coode.owlapi.examples.LoadingOntologiesArgument.main(LoadingOntologiesArgument.java:41)
Update of Old EulerGUI Tasks ( from april 2010 )
<> owl:imports <plants.n3> .
# KO: IllegalArgumentException: URI is not absolute
cf my mail on the OWL API list a few months ago (it's NOT corrected today, and I sent a new mail)
(4h)
Dependencies:
Other recent tasks:
--no-qvar
Dependencies:
3->4
8->9
5+13 -> 14
On list jena-dev, Thu Jul 8, 2010
I want to write a simple framework to write strings out of RDF graphs, and I want to share ideas about that.
It may , or not, have been done using Jena API.
It is fulfills the same purpose as templating frameworks like FreeMarker, but with more semantics.
As an example, imagine that one wants to write Java classes.
The RDF model has already been prepared, typically by a rule engine, from maybe an RDF Schema.
Then you have something like this:
:C1 a j:Class; j:extends :C2; j:implements :C3; j:hasMethod :m1. :m1 j:hasArgument :a1 . :a1 j:hasType :C4 ; j:hasName "x". :m1 j:hasStatements ([]). |
which should generate this:
public class C1 extends C2 implements C3 { void m1( C4 x ) { } } |
So we have "contained" ("owned") properties like j:hasMethod, j:hasArguments, and j:hasStatements, that need to be expanded in place. And we have "reference" ("pointer") properties that somehow point to another structure, like j:extends, j:implements, j:hasType .
First architecture:
interface RDFExporter { /** returns : public class C1 */ String beginTypedObject( String rdfId, String rdfTypeId); /** returns : extends C2 */ String referenceProperty( String subject, String property, String object); /** returns : { */ String typedObjectContainedPropertySeparator( String rdfId, String rdfTypeId); /** returns : void m1( */ String beginContainedProperty( String subject, String property, String object); /** returns : ) { */ String containedPropertySeparator( String subject, String property, String object); /** returns : } */ String endContainedProperty( String subject, String property, String object); /** returns : } */ String endTypedObject( String rdfId, String rdfTypeId); }
RDFExporter can be implemeted for Java, XML or other formats, or there can be a generic implemetation with plugins for each case. Note that the XXXSeparator mechanism works also for XML.
Second possible architecture: use N3 rules TODO <<<<<<<<<<<<<<???
Third possible architecture: use Prolog DCG .
Here are more use case examples:
In all these cases , white spaces are not significant, and end-of-lines count as white spaces. Also, the "reference" properties are before the "contained" properties.
We suppose that the N3 or RDF has already been transformed by some rule engine, so that (as is the case in the Java source example above):
with possible exceptions for "reference" properties that generate no wrapper "structure";
<urn:blah> ded:associatedFilePath "dir/file.txt"
Any API to walk though an RDF graph is suitable, e.g. Jena's. So one needs to distinguish "contained" property and "reference" property.
In the former case a callback should be called by the framework to close the structure.
But in general, when a Maven plugin has a newer version, can I get a warning ?
COMMITED
Simple cache for Drools compiled RuleBase activated (TESTS PASS); still need to assess the speed gained
- also corrected the fake URL for inner ApplicationKB project
- added forkMode=pertest to avoid cache remanence between tests
- was obliged to explicitely clear the cache in two tests
- maven-surefire-plugin passed to version 2.6 :
now -DPARSER4J_TESTS=no in script quick_tests.sh is taken in account together with
<argLine>-Xms512m etc , in the pom.xml
Tests run: 129, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 10 minutes 46 seconds [INFO] Finished at: Mon Aug 23 12:30:37 CEST 2010 [INFO] Final Memory: 61M/348M
http://conceptbase.sourceforge.net/userManual72/
We don't try to develop a complete environment from scratch, we develop the core architecture, fill the gaps, and reuse as much as possible.
So this is an open project in every sense of the word. Open to other frameworks, to import-export to other formats.
The main language, N3, is just a readable and widely used variant of the W3C's RDF format. For rule language, there is really no standard, as W3C's RIF (Rule Interchange Format) is very new.
So we will continue to develop or reuse translators with the main logical languages (KIF, RIF, RuleML, Prolog, TPTP, ...).
We developped a translator for the well-established SWRL, and for Drools to reuse the Drools engine.
Unified approach for models + rules + specifications ;
seamless path from specifications to application, but no closed world implementation , but possibility to integrate existing libraries and code.
ideas for a quite generic RDF exporter on the Jena list :
http://tech.groups.yahoo.com/group/jena-dev/message/44523
WIP: cache Drools RuleBase instead of Packages.
~/src/eulersharp/ % Actualisé à la révision 3601.
COMMITED:
pom.xml :
- upgrade to Drools 5.1.0 FINAL
- Added maven-bundle-plugin just for a try (OSGi stuff)
I just uploaded a snapshot of EulerGUI at the usual place:
http://eulergui.sourceforge.net/tmp/
As usual, because of Maven, all tests, unit and functional, (129) have passed.
It embeds Euler.jar from Subversion at today's revision 3601.
It has latest ARQ 2.8.5 ( for SPARQL ), and latest Drools 5.1.0 FINAL (with a bug fix following my report).
The Drools translation is enhanced with better manipulation of RDF lists, less calls to Drools' eval() macro, and above all using Drools' insertLogical() feature in the consequents, activated by default. Drools' insertLogical() does thruth maintenance; it retracts objects automatically when there are no more facts to support the truth of the currently firing rule.
Going hand in hand with the addition of insertLogical() , I stopped adding the negation of the consequent to the antecedent in the Drools translation. This was useless but not harmful before, and with insertLogical() it creates infinite loops.
Other news on the technical side, I 'm looking at Prova for a backward chaining engine , more adapted to reason on databases (SPARQL or SQL ).
I 'm also considering using OSGi and Felix in EulerGUI, for a better modularity and for installing plugins automatically when necessary. Felix is also used in Protégé 4.1 . There are Maven plugins for Felix that may be helpful . An EulerGUI plugin for Protégé 4.1 is planned, but not before ACE View is updated to Protégé 4.1 .
On the business side, I'm still looking for clients being small business developing their own software with domain experts in house. I'm also looking for partnership with classical IT service companies.
I'm also looking for developpers, some Java and some logic-oriented.
I'll attend CNL 2010 in september (http://staff.um.edu.mt/mros1/cnl2010/index.html).
Monday I travel to Mediteranean with 10 or 15 days of rest and cultivating my garden.
Added in N3SourcetoDrools and TripleStoreDrools the recommanded calls :
((StatefulSession)workingMemory).dispose();
TESTS: 2 minutes gained at 9 minutes, but 7 Mb more at 50M.
Before:
Tests run: 129, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 11 minutes 15 seconds [INFO] Finished at: Fri Aug 06 11:05:15 CEST 2010 [INFO] Final Memory: 43M/197M
After:
[INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9 minutes 1 second [INFO] Finished at: Fri Aug 06 11:16:18 CEST 2010 [INFO] Final Memory: 50M/217M
COMMITED : upgrade to ARQ 2.8.5
What is the status of the negation by failure in Mercury?
ws.prova.api2.ProvaCommunicatorImpl
http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html
First I added a completely vanilla configuration in my pom.xml :
<plugin> <groupId>org.apache.felix</groupId> <artifactId>maven-bundle-plugin</artifactId> <extensions>true</extensions> <configuration> <instructions> </instructions> </configuration> </plugin>
Then , just for a try:
mvn org.apache.felix:maven-bundle-plugin:manifest ... [INFO] [bundle:manifest {execution: default-cli}] [WARNING] Warning in manifest for eulergui:eulergui:jar:1.7-SNAPSHOT : Superfluous export-package instructions: [com, net.sf.parser4j, net.rhizomik, eulergui.parser.n3, eulergui.infrastructure, eulergui.parser.n3.impl, eulergui.gui, eulergui.parser, org.gjt.sp, org.gjt, org, net, net.sf.parser4j.parsetreeinspector, eulergui.parser.umlt, com.hp, net.sf, jdepend, n3_project.exceptions, net.sf.parser4j.parser, eulergui.parser.n3.impl.parser4j, eulergui.n3model.service] [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL
This created :
target/classes/META-INF/MANIFEST.MF
I like the warning, it looks smart, these packages indeed not suitable for export.
Now to go further, I should learn more about OSGi and Felix.
The Apache Felix Maven SCR Plugin is a great tool to ease the development of OSGi components and services. Components and services are defined through annotations and the plugin creates the necessary descriptors for the OSGi Declarative Services, Config Admin and Metatype services.
Differences with Prolog of the Prolog subset of Prova.
Differences are far greater than similarities. Prova is a system for reactive agents, workflows, and event processing, as well as a number of specialized reasoning modes, like deontic logic and ontology derived typing. Prova allows you to work directly with Java datatypes and classes so you can write algorithms that are very awkward to write in Prolog. You have annotations, reaction groups, reactivity bassed on direct continuations. Prova keeps lists in arrays. The differences are so many that pretty much you can say, there is very little in common with Prolog proper in terms of WHAT you can write with Prova.
Differences with Mercury.
???
Would it make sense to implement the JSR 94 API with ProvaCommunicator?
I'm not sure about the value of this. We discussed this with Mark Proctor of JBoss and he had really cold feet about the need for it. Prova is a reactive agent language. We use it in an OSGi container or behind ESB and interact with it by sending and receiving messages. Every Prova goal is a message and goal execution is a reaction so Prova is not a rule language, it is a reactive agent language.
Are gards in Prova the same as guards in CHR ?
@author(dev22) r2(X):-q(X). @author(dev32) r2(X):-s(X). trusted(dev1). trusted(dev22). % Author dev22 is trusted but dev32 is not, so one solution is found: X1=2 p1(X):- @author(A) r2(X) [trusted(A)]. :-solve(p1(X1)).
It is clear that the guard is attached to a body literal rather than
the body. You can use annotation variables together with it. You can
use CUT inside for splicing in a dynamic CUT.
Typo in manual 2.0 : commas and point instead of semicolon, % instead of // , no import for Map, missing public for class, incorrect signature for main
class test_collections { int main() { Map map = new java.util.HashMap(), % HashMap Constructor map.put(0,"false"), % Instance method calls map.put(1,"true"), System.out.println("Map="+map). % Built-in printing } }
Surefire is the Maven plugin for tests.
http://maven.apache.org/guides/development/guide-testing-development-plugins.html
Upgrade this in the pom.xml:
<version>2.6-SNAPSHOT</version>
Add this in ~/.m2/settings.xml :
<profiles>
<profile>
<id>apache</id>
<pluginRepositories>
<pluginRepository>
<id>apache.snapshots</id>
<name>Maven Plugin Snapshots</name>
<url>http://repository.apache.org/snapshots/</url>
<releases>
<enabled>false</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</pluginRepository>
</pluginRepositories>
</profile>
</profiles>
|
Then you can start Maven this way:
DISPLAY=:1 LANG=en mvn -Papache -DPARSER4J_TESTS=no test
...
Tests run: 129, Failures: 0, Errors: 0, Skipped: 0
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 8 minutes 56 seconds
[INFO] Finished at: Thu Aug 05 10:02:09 CEST 2010
[INFO] Final Memory: 38M/193M
<jmv> In maven-surefire-plugin, when I add <argLine> tag inside <configuration> , this disactivates the -D command line argument ; bug or feature ?
<bentmann> this is not related to a single plugin but applies to maven in general, i.e. explicit POM configuration is dominant over CLI args
<bentmann> whether this is really nice/intended, is indeed a good question
<bentmann> but one can always just use the project's <properties> to reach the same effect for those params
<jmv> bentmann, well, is this case I'm adding -D arguments that are not Maven specific, I think they should pass.
<bentmann> I can't follow
<jmv> I mean, when it's a Maven parameter like -DforkMode=pertest , it is good that the POM forkMode applies, but in my case it's a system variable that is not known to Maven .
<bentmann> do you mean http://jira.codehaus.org/browse/SUREFIRE-121 ?
<jmv> bentmann, yes, so this has been fixed 3 days ago :)
<jmv> is there any inconvenient to migrate to Maven 2.1.0 ?
<bentmann> Maven 2.1.0 and 2.2.0 aren't really recommended due to issues with checksum generation upon deployment
<bentmann> so if you consider upgrading, you should aim for Maven 2.2.1
<bentmann> I can't remember any major breaking change between 2.0.x and 2.2.1, so upgrading should generally be rather smooth, you could check the release notes for details
<bentmann> in any case, you want to make sure you have all your plugin versions locked down, otherwise newer default versions used by Maven 2.2.1 might cause surprises
<jmv> bentmann, well in fact in already use 2.2.1 (rdebian-1) ; so the the -DmyArg=bla should be active in mvn test ?!
<jmv> I already use 2.2.1
<bentmann> if you use the surefire plugin from SVN trunk
<jmv> I thought that Maven was updating itself, can I do this updating of surefire that without recompiling myself surefire ?
<bentmann> maven doesn't update itself
<bentmann> and no, you would have to build surefire yourself
<jmv> bentmann, Ok, so Maven takes exactly the versions of plugins that are in the POM; it doesn't update itself, it just dowloads what is not already in the local repo , correct ?
<bentmann> yes
<jmv> But in some cases, can't Maven download a bug fix at the same version level ?
<bentmann> nope, in fact automatic plugin updates (in case the POM doesn't specify a version) are considered a danger to the build which is why this behavior is scheduled for removal
<bentmann> besides, the new surefire plugin isn't released yet, so there's nothing to download
<jmv> thanks bentmann , any clue about a date for surefire 2.6 ?
<bentmann> no
http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/foaf_import2.n3p
I tried semanticreports.com and created my own :
http://semanticreports.com/reports/2e534985-efc9-4912-b338-b68e79f1a23d
I see the potential .
I'd like to add that to my EulerGUI tool, if that 's open source .
Is there a code sample showing how one can reuse the Maven core to enable an application to load dependencies as needed?
I think to embed a Maven kernel to load dependencies as and when required, as Maven does itself. I guess I must, at each start of each feature, add a call to some method to load needed dependencies. Apart from that, there are other things to develop?
Subscribed to http://lists.owldl.com/mailman/listinfo/pellet-users
To post to this list, send your email to: pellet-users@lists.owldl.com
scache
:
final public static void main(String argv[])
cp samples/*.cnf .
localhost
, port: 3128svn co https://mandarax.svn.sourceforge.net/svnroot/mandarax mandarax
Révision 689 extraite. cd mandarax/prova2/trunk/ mvn compile ... mvn test ... mvn install [ERROR] BUILD ERROR [INFO] ------------------------------------------------------------------------ [INFO] Failed to create assembly: File to filter not found: /src/main/assembly/prova3.bat (No such file or directory)
Using the compiled distribution:
~/src/prova-3.0.1/bin/ % ./prova3.sh ../rules/test001_args.prova anticoagulant Parent=molecular_function
Response by Adrian:
Unfortunately, we have not found time yet to port the Semantic Web built-ins from Prova 2.0 to Prova 3.0.
You can find them documented in Prova 2.0
http://www.ag-nbi.de/lehre/0809/V_NBI/uebung5/NBI_Prova.pdf
http://www.prova.ws/etc/provauserguide_2_0.pdf
Open Source Rule Engines Written In Java on manageability.org ( asked for EulerGUI to be included )
http://wiki.github.com/vangelisv/thea/
Lambda Prolog
Mentionned by Nicolas P.: Lambda Prolog:
http://www.lix.polytechnique.fr/~dale/lProlog/
http://www.lix.polytechnique.fr/Labo/Dale.Miller/lProlog/docs.html
http://www.irisa.fr/lande/ridoux/LPAZ/lpaz_html.html
http://www.lix.polytechnique.fr/Labo/Dale.Miller/lProlog/faq/faq.html
Search for "prova backward chaining database" :
[PDF] Please Pass the Rules: A Rule Interchange Demonstration
Chapter 2 QUERYING SEMANTIC WEB CONTENTS
http://www.mail-archive.com/user@mule.codehaus.org/msg00802.html
http://www.pathf.com/blogs/2006/06/prova_son_of_ma/
Wanderings of the Mind: Full Opportunistic Backward Chaining ...
I'm surprised that ViewVC / Subversion HTTP URL's from SourceForge have to header field "Last-Modified" :
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/gui_generic.n3
conn.getHeaderFields() (java.util.Collections$UnmodifiableMap<K,V>) { null=[HTTP/1.1 200 OK], ETag=["299"], Date=[Sun, 01 Aug 2010 18:18:58 GMT], Transfer-Encoding=[chunked], Vary=[Accept-Encoding, User-Agent], Expires=[Sun, 01 Aug 2010 18:28:58 GMT], Content-Type=[text/plain; charset=UTF-8], Connection=[keep-alive], Server=[nginx/0.7.63], Cache-Control=[max-age=600]} Evaluation failed. Reason(s): com.sun.jdi.VMDisconnectedException: Got IOException from Virtual Machine occurred invoking method..getLastModified()
I used the regular Subversion URL's instead of ViewVC; the regular Subversion server sends the HTTP header Last-Modified.
After updating Euler to 2010-08-13 :
Failed tests: testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl) testRemoteImportSwrlWithDrools(eulergui.gui.TestImportSwrl) testLocalImportSwrlWithEuler(eulergui.gui.TestImportSwrl) testRemoteImportSwrlWithEuler(eulergui.gui.TestImportSwrl) Tests in error: testXMLOutputFromRDF(eulergui.gui.TestEulerGUIOutputs) testXMLOutputFromN3(eulergui.gui.TestEulerGUIOutputs) testRunDrools(eulergui.drools_engine.RETETest) testParserLink(eulergui.drools_engine.RETETest)
In fact , TestImportSwrl runs fine within eclipse. This was because the Euler jar was 2010-04-25 in my project.
COMMITED: revision 1768:
eulergui_refactoring branch : upgrade Euler to 2010-08-13
(and copy TestImportSwrl.java from trunk, as the format of rules translated from SWRL by EYE has changed )
COMMITED: revision 1769:
eulergui_refactoring branch : TestN3JavaMapping was failing
an assertEquals is commented out in TestN3JavaMapping, as in the trunk .
CAUTION: these reports by Maven were wrong, the test in error was another test !!!!
Just by curiosity, has someone tried to compile and run Drools with gcj , the java to native code compiler ?
This may allow to call Drools from C applications.
http://generic-concept.com/blogs/olivier/
I have a variable $V assigned to a List in the LSH . This works :
$V : java.util.List( this contains "my string" ) from accumulate( ...
)
Instead if I do it in another element it does not work :
$V : java.util.List() from accumulate( ... ) java.util.List( this == $V, this contains "my string" )
Bug or feature ?
I have a variable $V assigned to a List in the LSH . How can I say eval ( $V.contains( "my string") ) without using eval() ?
<etirelli> jmv:
$V : java.util.List( this contains "my string" ) from accumulate( ...
)
Instead if I do it in another element it does not work :
$V : java.util.List() from accumulate( ... ) java.util.List( this == $V, this contains "my string" )
cd rifle hg pull hg update --verbose cd trunk/apps/rifle-psparser mvn package [INFO] Building jar: ... /home/jmv/src/rifle/trunk/apps/rifle-psparser/target/psparser-1.0-SNAPSHOT.jar cd ../rifle-dtb mvn test Failed tests: testEvaluate(org.fundacionctic.rifle.dtb.impl.divide_yearMonthDuration_fpTest) cd ../rifle-validator mvn test
http://portal.acm.org/citation.cfm?id=291108
Towards a general computational framework for model-based interface development systems
Full text Pdf (2.18 MB)
SourceInternational Conference on Intelligent User Interfaces archive
Proceedings of the 4th international conference on Intelligent user interfaces table of contents
Los Angeles, California, United States
Pages: 171 - 178
Year of Publication: 1998
ISBN:1-58113-098-8
Authors
Angel Puerta Stanford University, 251 Campus Drive - MSOB x215, Stanford, CA
Jacob Eisenstein Stanford University, 251 Campus Drive - MSOB x215, Stanford, CA
http://community.jboss.org/wiki/DroolsLanguageEnhancements
My introduction on the Drools IRC:
I'm Jean-Marc Vanel from Versailles France, and I'm using the Drools API in my Semantic Web application, EulerGUI, where I generate Drools code from other rule langages.
inference engines ( maybe Jena ? )
Project
Pave the way for using Drools' insertLogical() feature in the GUI by default
- switch in class RunDroolsAction
- not activated yet because of tests and examples of form generation not updated
added an update of swing-rules3.n3p for use with Drools' insertLogical() feature (activable in EulerGUI in class RunDroolsAction).
https://deductions.svn.sourceforge.net/svnroot/deductions/n3_logical
conan, Good news!
After good advice from Edson, my form generator works fine with insertLogical() in most places.
It actually simplifies the Drools code generation.
But there is still a problem with the GUI callback.
It seems that 3 things play baldly together:
With these ingredients I get an infinite loop. The object that has been logically inserted is updated to the same (equal) value, but it triggers the rule anyway.
...
sure, but my point is that The object that has been logically inserted is updated to the same (equal) value; that should not triggers the rule, because of AssertBehaviour.EQUALITY option.
jmv> conan, adding no-loop to the relevant places only (that is, the rules with update or retract, works ! :)
Note that I wanted to use -DforkMode=pertest because I had OutOfMemory : PermGen space on Linux 64 bit , but not on Windows.
http://maven.apache.org/plugins/maven-surefire-plugin/examples/forking.html
Running one process per test solves some problems:
DISPLAY=:1 LANG=en mvn -DargLine="-DPARSER4J_TESTS=no" \ -DforkMode=pertest test
Running eulergui.gui.TestImportSwrl Tests run: 5, Failures: 4, Errors: 0, Skipped: 0, Time elapsed: 21.866 sec <<< FAILURE! ... Running eulergui.drools_engine.TestN3JavaMapping Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.492 sec <<< FAILURE!
This is a new error :
Test set: eulergui.drools_engine.TestN3JavaMapping ------------------------------------------------------------------------------- Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 4.723 sec <<< FAILURE! testUpdateJavaFromN3(eulergui.drools_engine.TestN3JavaMapping) Time elapsed: 4.681 sec <<< FAILURE! junit.framework.AssertionFailedError: a rule activation directly affects a Java object expected:<2> but was:<0> at junit.framework.Assert.fail(Assert.java:47) at junit.framework.Assert.failNotEquals(Assert.java:282) at junit.framework.Assert.assertEquals(Assert.java:64) at junit.framework.Assert.assertEquals(Assert.java:201) at eulergui.drools_engine.TestN3JavaMapping.testUpdateJavaFromN3(TestN3JavaMapping.java:65)
Testing on eulergui_test ( verbatim )
trying mvn -DforkMode=pertest test for the fisrt time, I get strange things : java.lang.NoClassDefFoundError: Could not initialize class sun.awt.X11GraphicsEnvironment
<krosenv> jmv: Google "Java headless".
<krosenv> there's a system property you need to set
<jmv> merci krosenv
<jmv> krosenv, my app is a swing app, the GUI testing uses Jemmy framework and have been working for mounths, so a don't want to be headless .
It was just that my secondary X server for tests needed restarting ; it's OK now.
A little longer , 2 mn:
Tests run: 123, Failures: 0, Errors: 0, Skipped: 0 [INFO] ------------------------------------------------------------------------ [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 9 minutes 15 seconds
export MAVEN_OPTS="-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m"
export JAVA_HOME=$HOME/apps/jdk1.6.0_21
export PATH=$JAVA_HOME/bin:$PATH
export MAVEN_OPTS="-Xms512m -Xmx3024m -XX:PermSize=256m -XX:MaxPermSize=1024m"
... Results : Failed tests: testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl) testRemoteImportSwrlWithDrools(eulergui.gui.TestImportSwrl) testLocalImportSwrlWithEuler(eulergui.gui.TestImportSwrl) testRemoteImportSwrlWithEuler(eulergui.gui.TestImportSwrl) Tests in error: testXMLOutputFromRDF(eulergui.gui.TestEulerGUIOutputs) testXMLOutputFromN3(eulergui.gui.TestEulerGUIOutputs) testRunDrools(eulergui.drools_engine.RETETest) testParserLink(eulergui.drools_engine.RETETest) Tests run: 123, Failures: 4, Errors: 4, Skipped: 0
The problem:
Test set: eulergui.gui.TestEulerGUIOutputs
-------------------------------------------------------------------------------
Tests run: 3, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 24.89 sec <<< FAILURE!
testXMLOutputFromRDF(eulergui.gui.TestEulerGUIOutputs) Time elapsed: 20.963 sec <<< ERROR!
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.netbeans.jemmy.ClassReference.invokeMethod(ClassReference.java:137)
at org.netbeans.jemmy.ClassReference.startApplication(ClassReference.java:101)
at eulergui.gui.TestJemmy.launchEulerGUI(TestJemmy.java:167)
at eulergui.gui.TestEulerGUIOutputs.launchEulerGUIAndExportXML(TestEulerGUIOutputs.java:67)
at eulergui.gui.TestEulerGUIOutputs.testXMLOutputFromRDF(TestEulerGUIOutputs.java:39)
Caused by: java.lang.OutOfMemoryError: PermGen space
at sun.misc.Unsafe.defineClass(Native Method)
at sun.reflect.ClassDefiner.defineClass(ClassDefiner.java:45)
at sun.reflect.MethodAccessorGenerator$1.run(MethodAccessorGenerator.java:381)
at java.security.AccessController.doPrivileged(Native Method)
at sun.reflect.MethodAccessorGenerator.generate(MethodAccessorGenerator.java:377)
at sun.reflect.MethodAccessorGenerator.generateSerializationConstructor(MethodAccessorGenerator.java:95)
at sun.reflect.ReflectionFactory.newConstructorForSerialization(ReflectionFactory.java:313)
at java.io.ObjectStreamClass.getSerializableConstructor(ObjectStreamClass.java:1327)
at java.io.ObjectStreamClass.access$1500(ObjectStreamClass.java:52)
at java.io.ObjectStreamClass$2.run(ObjectStreamClass.java:437)
at java.security.AccessController.doPrivileged(Native Method)
at java.io.ObjectStreamClass.<init>(ObjectStreamClass.java:413)
at java.io.ObjectStreamClass.lookup(ObjectStreamClass.java:310)
at java.io.ObjectStreamClass.initNonProxy(ObjectStreamClass.java:547)
at java.io.ObjectInputStream.readNonProxyDesc(ObjectInputStream.java:1583)
at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:1496)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1732)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.defaultReadFields(ObjectInputStream.java:1947)
at java.io.ObjectInputStream.readSerialData(ObjectInputStream.java:1871)
at java.io.ObjectInputStream.readOrdinaryObject(ObjectInputStream.java:1753)
at java.io.ObjectInputStream.readObject0(ObjectInputStream.java:1329)
at java.io.ObjectInputStream.readObject(ObjectInputStream.java:351)
at net.sf.parser4j.parser.service.data.ParserDataIO.readFromInputStream(ParserDataIO.java:101)
at net.sf.parser4j.parser.service.data.ParserDataIO.readFromClassPath(ParserDataIO.java:73)
at eulergui.parser.n3.impl.parser4j.service.N3Parser.initialize(N3Parser.java:87)
In Drools, can I refer to Conditional Element to add criteria to it , like this :
$v : Class1 ( prop1=="x" )
$v == Class1 ( prop2=="xx" )
of course this does not compile ...
It would be convenient because I generate Drools code ...
I FOUND !!!
$v : Class1 ( prop1=="x" )
Class1 ( this==$v, prop2=="xx" )
So the translation for
?X :p :v. :s :q ?Y. ?X log:notEqualTo ?Y.
would be:
$T1 : Triple( $X: subject, ... ) $T2 : Triple( $Y: object, ... ) Triple( this==$T1, subject != $Y )
e:findall
when empty resultnow use
not( exists( conjunction_of_criteria )
instead of
TripleList( $XXX_s_SIZE_ : size) from collect( ) eval( $XXX_s.isEmpty() )
TESTS PASS
The advantage is that now a findall with several criteria is possible.
How to say that in Drools ?
The set of orders for the client X for the item Y has cardinality N.
Said another way:
How can I in the LHS get the set of all values of variable $V satisfying the criterium :
Class1( $V : prop1 , ... ) Class2( prop2 == $V , ... ) ...
<etirelli> jmv: something like:
$vs : Set() from accumulate( Class1($v:prop1) and Class2( prop2==$v ), collectSet( $v ) )
This will be useful to simplify the translation of
e:findall
.
DONE
More on collectSet and collectList :
http://blog.athico.com/2009/03/drools-50-cr1-new-and-noteworthy.html
https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/docs/drools-introduction/html_single/index.html#d4e160
set Drools insertLogical by default, without spoiling the existing demos and tests : set useInsertLogical==false just for the 2 tests that need it
implement findall with empty result with not( exists ( ... ))
implement findall with several criteria with from accumulate( ...
collectSet( $v ) )
( see above )
I did not work the first time !
e:findall
seem to be a problem.
This way I could simplify the translation into Drools of my N3 rules ... and benefit of the automatic retractions by insertLogical() . But maybe discover new problems ...
Merci à Edson Tirelli !
This works when one removes the not() clause.
rule "domotic-rules.n3 0" when $Triple_2 : Triple( $t0: subject, predicate == "<http://www.simple-ontology.owl#hasControl>", $t1 : object ) $Triple_3 : Triple( subject == $t1, predicate == "<http://www.simple-ontology.owl#hasState>", $t2 : object ) not( $Triple_4 : Triple( subject == $t0, predicate == "<http://www.simple-ontology.owl#hasState>", object == $t2 ) ) then Triple newTriple = new Triple( ); newTriple.setSubject( $t0 ); newTriple.setPredicate( "<http://www.simple-ontology.owl#hasState>" ); newTriple.setObject( $t2.toString() ); insertLogical( newTriple ); // insert ( newTriple ); System.out.println( "insertLogical( "+ newTriple); end
Is there a mvn command to download a pom from the Web , create a local project directory, download the sources, and build , all in one step ?
scm:bootstrap is close to what I want : http://maven.apache.org/scm/maven-scm-plugin/examples/bootstrapping-with-pom.html
but one still needs to have a small bootstrap pom.xml locally , if I understand ...
I'd like something like :
mvn scm:bootstrap_from_URL http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml
I have a rule base with a single rule saying "if the switch has a state, then the light has the same state".
<jmv> I'm trying to use insertLogical on the RHS to avoid having to explicitely remove the lamp's old state, but Drools enters in an infinite loop ...
<jmv> The only example I have with insertLogical is with exists on the LHS ...
<jmv> bug, feature, or workaround ?
<etirelli> jmv: ok... look, the rule is evaluated, it is true and then it executes
<etirelli> the consequence of the rule logically inserts a fact
<etirelli> jmv: lets call it lf
<etirelli> lf matches the "not" pattern
<etirelli> making the LHS false
<etirelli> so the engine automatically retracts lf
<etirelli> the retraction makes the rule true again, since that fact is not there anymore
<etirelli> so the rule fires again...
<jmv> ok, i see,
<jmv> so removing the not() would work ...
<etirelli> well, removing the not would prevent the rule becoming false after it is executed
<jmv> somehow insertLogical does the job of the not() here in this case
<jmv> let me try
<jmv> ok, works fine
<jmv> fire just once
<etirelli> cool :)
DROOLS + INSERTLOGICAL =&... ON THE 22ND OF JUL 2010 11:52:10 AM
rule "domotic-rules.n3 0"
when
$Triple_2 : Triple( $t0: subject, predicate == "<http://www.simple-ontology.owl#hasControl>", $t1 : object )
$Triple_3 : Triple( subject == $t1, predicate == "<http://www.simple-ontology.owl#hasState>", $t2 : object )
not(
$Triple_4 : Triple( subject == $t0, predicate == "<http://www.simple-ontology.owl#hasState>", object == $t2 )
)
then
Triple newTriple = new Triple( );
newTriple.setSubject( $t0 );
newTriple.setPredicate( "<http://www.simple-ontology.owl#hasState>" );
newTriple.setObject( $t2.toString() );
insertLogical( newTriple );
// insert ( newTriple );
System.out.println( "insertLogical( "+ newTriple);
end
Is insertLogical supposed to work with AssertBehaviour.EQUALITY ?
About the exists pattern; in the doc. there is "Since only the existence matters, no bindings will be established." is this a limitation by design to ensure cleaner rules, or a limitation of the implemetation ?
Use case : one might want to say xists Bus(color == "red", name: brand ) and print name .
Can there be 2 threads working on the same WM ?<conan> jmv: yes and no
<conan> it's thread safe
<conan> but only one thread can execute at a time
<conan> one thread gets a lock and will block the other thread
Maven build fails in Linux with LANG=fr_FR.utf8
https://jira.jboss.org/browse/JBRULES-2590
running HonestPolitician from a Maven created eclipse project for drools-examples-drl => NoClassDefFoundError: XStream
https://jira.jboss.org/browse/JBRULES-2589
Re-trying eulergui_refactoring branch:
Failed tests: testimport(n3_project.TestProjectWithSubProjects) testimportQ(n3_project.TestProjectWithSubProjects) testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl) testRemoteImportSwrlWithDrools(eulergui.gui.TestImportSwrl) testLocalImportSwrlWithEuler(eulergui.gui.TestImportSwrl) testRemoteImportSwrlWithEuler(eulergui.gui.TestImportSwrl) testSearchFromProject(n3_project.helpers.TestDroolsQuery) testpostproc_import(n3_project.TestProjectSequence) testRunDrools(n3_project.TestReasonning) Tests in error: testXMLOutputFromRDF(eulergui.gui.TestEulerGUIOutputs) testXMLOutputFromN3(eulergui.gui.TestEulerGUIOutputs) testRunDrools(eulergui.drools_engine.RETETest) testParserLink(eulergui.drools_engine.RETETest) Tests run: 123, Failures: 9, Errors: 4, Skipped: 0
project.addProjectListener(new SWRLTranslator()); // TODO SWRLTranslator should be added by default
insertLogical(new Something()); is similar to insert, but the object will be automatically retracted when there are no more facts to support the truth of the currently firing rule.
Trying insertLogical:
Thread [AWT-EventQueue-0] (Suspended) System.identityHashCode(Object) line: not available [native method] DefaultFactHandle.getIdentityHashCode() line: 127 IdentityAssertMapComparator.hashCodeOf(Object) line: 47 ObjectHashMap.put(Object, Object, boolean) line: 52 SingleThreadedObjectStore.addHandle(InternalFactHandle, Object) line: 140 ReteooStatefulSession(AbstractWorkingMemory).createHandle(Object, ObjectTypeConf) line: 1100 ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule, Activation) line: 989 DefaultKnowledgeHelper.insertLogical(Object, boolean) line: 162 DefaultKnowledgeHelper.insertLogical(Object) line: 133 Rule_domotic_rules_n3_0_0.defaultConsequence(KnowledgeHelper, Object, FactHandle, String, FactHandle) line: 12 Rule_domotic_rules_n3_0_0DefaultConsequenceInvoker.evaluate(KnowledgeHelper, WorkingMemory) line: 34 DefaultAgenda.fireActivation(Activation) line: 917 DefaultAgenda.fireNextItem(AgendaFilter) line: 856 DefaultAgenda.fireAllRules(AgendaFilter, int) line: 1071 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules(AgendaFilter, int) line: 738 ReteooStatefulSession(AbstractWorkingMemory).fireAllRules() line: 704 N3SourcetoDrools.launchDroolsKeepWM() line: 533 N3SourcetoDrools.launchDrools() line: 501 N3toDroolsUpdater.launchDrools() line: 48 Project.doRunDrools() line: 943 Project.runDroolsTriples() line: 921 RunDroolsAction.actionPerformed(ActionEvent) line: 43 JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) line: 1995 AbstractButton$Handler.actionPerformed(ActionEvent) line: 2318 DefaultButtonModel.fireActionPerformed(ActionEvent) line: 387 DefaultButtonModel.setPressed(boolean) line: 242 BasicButtonListener.mouseReleased(MouseEvent) line: 236 AWTEventMulticaster.mouseReleased(MouseEvent) line: 272 JToolBar$1(Component).processMouseEvent(MouseEvent) line: 6263 JToolBar$1(JComponent).processMouseEvent(MouseEvent) line: 3267 JToolBar$1(Component).processEvent(AWTEvent) line: 6028 JToolBar$1(Container).processEvent(AWTEvent) line: 2041 JToolBar$1(Component).dispatchEventImpl(AWTEvent) line: 4630 JToolBar$1(Container).dispatchEventImpl(AWTEvent) line: 2099 JToolBar$1(Component).dispatchEvent(AWTEvent) line: 4460 LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4574 LightweightDispatcher.processMouseEvent(MouseEvent) line: 4238 LightweightDispatcher.dispatchEvent(AWTEvent) line: 4168 ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2085 ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2478 ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4460 EventQueue.dispatchEvent(AWTEvent) line: 599 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122
It works the first time, but the reading of the cache does not work.
Running deductions.runtime.TestRulesForUserEvents
Tests run: 4, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 54.21 sec <<< FAILURE!
Runs forever:
Running eulergui.gui.TestEulerGUIOutputs
http://jmvanel.free.fr/presentations/pres-owl-anglais-controle.odp
I asked myself the question of finding a simple cache implementation, to keep both compiled by Drools rules, and the documents downloaded from the Web.
http://sourceforge.net/search/?type_of_search=soft&words=java+cache
http://www.opensymphony.com/oscache/wiki/API%20Usage.html
http://www.opensymphony.com/oscache/wiki/Configuration.html
I'd like to have a Java persistent cache with these features :
dependency management like the Unix make utility; for example a rule package compiled by Drools is dependent on a URL of the Drools source
A rule base could do the job ! The main rule could be: If there is a dependency from A to B, and A's timestamp is younger than B's , then B is remade. Let's leave that aside for now (the idea behind Déductions is that Object Oriented code is good for infrastructure, and rules are rather for domain objects).
The implementation will need to get the timestamp from an URI, and the actual timestamp of the cached stuff.
An API draft :
interface URICache { /** @return retrieves Object if up-to-date, otherwise returns null. */ Object getCachedURIAsObject( String uri ); /** automatically retrieves up-to-date versions of File or Object */ void cacheObject(String uri, Object object); File getCachedURIAsFile( String uri ); }
An SPI (Service Provider Interface) draft :
/** encapsulates an algorithm to "compile" an URI to a Java Object - UNUSED */ interface URICompiler { /** @return non null <=> this object knows how to cache this object */ Object compileURIAsObject( String uri ); } /** This SPI (Service Provider Interface) is the raw cache that unconditionally stores given objects or dereferenced URI's */ interface URICacheStore { void cacheObject( String uri, Object object ); File cacheURIAsFile( String uri ); long getObjectTimeStamp( String uri ); Object getObject( String uri ); File getFile( String uri ); }
boolean needsRefresh( String uri );
To implement the URICache, I need to persist a Map from URI's to Objects, and it should be safe for concurrent access.
I could use OSCache 2.4 from Maven, it's only 131 kb:
http://mvnrepository.com/artifact/opensymphony/oscache/2.4
They write, which is good :
Persistent Caching - The cache can optionally be disk-based, thereby allowing expensive-to-create data to remain cached even across application restarts.
With OSCache, the interface EntryRefreshPolicy can encapsulate the logic of data expiration, with this single method :
boolean needsRefresh(CacheEntry entry)
However, I don't like that the logic of data expiration is separed from the logic of data refreshing , which happens in this code sample:
try { // Get from the cache myValue = (String) admin.getFromCache(myKey, myRefreshPeriod); } catch (NeedsRefreshException nre) { try { // Get the value (probably from the database) myValue = "This is the content retrieved."; // Store in the cache admin.putInCache(myKey, myValue); } catch (Exception ex) { // We have the current content if we want fail-over. myValue = (String) nre.getCacheContent(); // It is essential that cancelUpdate is called if the // cached content is not rebuilt admin.cancelUpdate(myKey); } }
So I had a look at the implementions of persistant maps in Java .
to be continued ...
DONE
CreateClassFormMouseListener: add a toolTip in the class tree view to tell user to click and edit an instance of the OWL class.
TODO
DONE
svn propset svn:keywords LastChangedRevision
generic_gui_projection-rules.n3 : make Button the default for Object Input Widgets
change accordingly wine-app-spec.n3, person-app-spec.n3
add wine-app2.n3p a simple Wine example withit explicit import of swing-rules
(the forms are now generated from the Pellet class tree)
There are very many plugins (http://neon-toolkit.org/wiki/Neon_Plugins):
file:///home/jmv/src/mercury-compiler-10.04-beta-2010-06-24/doc/mercury_ref.html
"Connexions" http://cnx.org/
Intro to Logic : http://cnx.org/content/m10728/latest/
MIT OpenCourseWare http://ocw.mit.edu/index.htm
Modal logic : http://ocw.mit.edu/courses/linguistics-and-philosophy/24-244-modal-logic-fall-2009/lecture-notes/
!Logic II: Computability: http://ocw.mit.edu/courses/linguistics-and-philosophy/24-242-logic-ii-spring-2004/lecture-notes/
http://community.jboss.org/wiki/MavenGettingStarted-Users
mvn -e exec:java -Dexec.mainClass="DroolsRunExportedProjectOldAPI"
https://jira.jboss.org/browse/JBRULES-2574
It seems related to having a not too small Working Memory (622 objects), and then compiling and adding several not too small rules packages. It runs fine on 5.1.0.M1 and before, but crashes 5.1.0.M2 and on today's 5.1.0.SNAPSHOT.
Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 128 at org.drools.core.util.LeftTupleIndexHashTable$FieldIndexHashTableFullIterator.next(LeftTupleIndexHashTable.java:153) at org.drools.reteoo.NotNode.updateSink(NotNode.java:471) at org.drools.reteoo.RuleTerminalNode.attach(RuleTerminalNode.java:395) at org.drools.reteoo.builder.ReteooRuleBuilder.addSubRule(ReteooRuleBuilder.java:177) at org.drools.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:128) at org.drools.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:117) at org.drools.reteoo.ReteooRuleBase.addRule(ReteooRuleBase.java:409) at org.drools.common.AbstractRuleBase.addRule(AbstractRuleBase.java:638) at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:520) at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:435) at DroolsRunExportedProjectOldAPI.loadSource(DroolsRunExportedProjectOldAPI.java:124) at DroolsRunExportedProjectOldAPI.main(DroolsRunExportedProjectOldAPI.java:79)
To reproduce, I made a regular Maven project.
You can run the main class this way:
mvn -e exec:java -Dexec.mainClass="DroolsRunExportedProjectOldAPI"
The eclipse project has been generated with:
mvn eclipse:eclipse
See stack on 2010-07-08.
Adding class DroolsRunExportedProjectOldAPI,
using the same way of running Drools than EulerGUI 1.6
currently demonstrates an ArrayIndexOutOfBoundsException: 128
in Drools code
at org.drools.core.util.LeftTupleIndexHashTable$FieldIndexHashTableFullIterator.next
(LeftTupleIndexHashTable.java:153)
when running the project
deductions/n3_new/foaf_import2.n3p
exported as Drools
% ldd /tmp/Eye/bin/yap linux-gate.so.1 => (0xf7789000) libgmp.so.3 => not found libreadline.so.5 => not found
Installed 32 bits packages lib32readline5-dev and lib32gmp3-dev .
Jos commited a new version soving all the problems, so I could update file /home/jmv/.m2/repository//euler/euler/2010-05-26/euler-2010-05-26.jar with the latest Jar, for revision 3522, actually more advanced than Release 2010-07-07 .
I took in account someValuesFrom OWL restrictions.
But now I have regressions, but only with the new Drools 5.1.0.M2 , and I can't reproduce the ArrayIndexOutOfBoundsException with the separate main.
./quick_tests_deductions_local.sh
....
Tests in error:
test_foaf_import2(eulergui.gui.TestGenericGuiGeneration)
test_cv2(eulergui.gui.TestGenericGuiGeneration)
----------------------------------
java.lang.ArrayIndexOutOfBoundsException: 128 at org.drools.core.util.LeftTupleIndexHashTable$FieldIndexHashTableFullIterator.next (LeftTupleIndexHashTable.java:153) at org.drools.reteoo.NotNode.updateSink(NotNode.java:471) at org.drools.reteoo.RuleTerminalNode.attach(RuleTerminalNode.java:395) at org.drools.reteoo.builder.ReteooRuleBuilder.addSubRule(ReteooRuleBuilder.java:177) at org.drools.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:128) at org.drools.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:117) at org.drools.reteoo.ReteooRuleBase.addRule(ReteooRuleBase.java:409) at org.drools.common.AbstractRuleBase.addRule(AbstractRuleBase.java:638) at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:520) at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:435) at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:345)
svn diff form-rules.n3
Index: form-rules.n3
===================================================================
--- form-rules.n3 (révision 307)
+++ form-rules.n3 (copie de travail)
@@ -300,3 +300,18 @@
} => {
?WINDOW gui:name ?NAME .
} .
+
+# observer pattern.
+# When a field that is already displayed, is updated in the KB, the GUI field should be updated.
+{
+ ?SUBJECT ?PREDICATE ?VALUE .
+ # get the abstract field from the RDF predicate
+ ?FIELD gui:inputWidgetSpecification ?PREDICATE .
+ # get the JTextField object
+ ### TEST >>>>
+ ?JTEXT_FIELD javapr:generic_field ?FIELD .
+} => {
+ ## TEST >>>> ??JTEXT_FIELD javap:text ?VALUE .
+ _:d eg:trace ( ">>>> observer pattern: " ?SUBJECT ?PREDICATE ?VALUE
+ ?JTEXT_FIELD javapr:generic_field ?FIELD ).
+}.
Conséquence ?
app_gui-rules2.n3
java_event-rules.n3 : unchanged !
Got a mail from Karel with enhancements leveraging on mine :
tar tvf drs_to_owlswrl_update20100705.tar.gz -rw-r--r-- kaarel/kaarel 2676 2010-07-05 17:49 owlfss_ascii.pl -rw-r--r-- kaarel/kaarel 22018 2010-07-05 17:48 owlfss_owlrdfxml.pl -rw-r--r-- kaarel/kaarel 35018 2010-07-05 16:50 drs_to_owlswrl_core.pl -rw-r--r-- kaarel/kaarel 9045 2010-07-05 17:57 implication_to_swrl.pl
He tested with these examples:
text1="If a n:rectangle R has a n:length L1 and R has a n:length L2 then R v:has-surface S, and S = ( L1 * L2 )." text2="If a rectangle R has a length L1 and R has a length L2 then R v:has-surface ( L1 * L2 )." text3="If there is a circle C and C's radius is R and C's area is S then S = Pi * (R * R) / 1." echo "$text1" ./ape.exe -text "$text1" -guess -solo owlfsspp ./ape.exe -text "$text1" -guess -solo owlrdf echo "$text2" ./ape.exe -text "$text2" -guess -solo owlfsspp ./ape.exe -text "$text2" -guess -solo owlrdf echo "$text3" ./ape.exe -text "$text3" -guess -solo owlfsspp ./ape.exe -text "$text3" -guess -solo owlrdf
APE updates for algebraic expressions: commit Kaarel's mail of 2010-07-05 verbatim
owlfss_owlrdfxml.pl : add clause to description_atom/3 , to translate DataProperty/3 into swrl:IndividualPropertyAtom ;
now this produces a result:
text2="If a rectangle R has a length L1 and R has a length L2 then R v:has-surface ( L1 * L2 )."
./ape.exe -text "$text2" -guess -solo owlrdf
But not yet with:
text3="If there is a circle C and C's radius is R and C's area is S then S = Pi * (R * R) / 1."
One can buid simple auxiliary classes or properties just as a support for making forms. Then there will be rules like this to update "real" triples from the auxiliary classes or properties.
{ ?M :hasXAcceleration ?G. ?M :hasElapsedTime ?T. ( 0.5 ?G ?T ?T ) math:product ?X. } => { # :d kb:retract ( ?M :hasX ?OLD_VALUE ). ?M :hasX ?X. _:d eg:trace ( "Acceleration computed" ?G ?T ?X ). }.
Idea: use this to denote a Parameter of a query:
gui:hasForm a :Parameter.Idea: make a rule to find rules having some property P in their consequent.
{ ?A => ?C. ?C log:includes { ?IA ?P ?IC } } => { { ?A => ?C } :result ( :includes_property_in_consequent ) . }.
Working with eulergui/examples/acceleration_form.n3p
We could refresh all the GUI fields for the subject being edited, but we really need an observer pattern.
When a field that is already displayed, is updated in the KB, the GUI field should be updated.
{ ?SUBJECT ?PREDICATE ?VALUE . # get the abstract field from the RDF predicate ?FIELD gui:inputWidgetSpecification ?PREDICATE . # get the JTextField object ?JTEXT_FIELD javapr:generic_field ?FIELD . } => { ?JTEXT_FIELD javap:text ?VALUE . }.
ATTENTION: Ignoring rule Rule([rectangle(?x1), have(?x1,?x2), have(?x1,?x4), multiply([?x6, ?x2, ?x4])] => [has-surface(?x1,?x6)]): Head atom has-surface(?x1,?x6) contains variables not found in body.
Drools N3 engine: eg:trace works with variables created in an algebraic formula;
tested with examples/acceleration.n3 :
{
?M :hasXAcceleration ?G.
?M :hasElapsedTime ?T.
( 0.5 ?G ?T ?T ) math:product ?X.
} => {
?M :hasX ?X.
_:d eg:trace ( "Acceleration computed" ?G ?T ?X ).
}.
http://www.ai.sri.com/~stickel/pttp.html
No assert or retract, just 20 cuts, 1228 lines.
LeanTaP, Satchmo
http://www.mercury.csse.unimelb.edu.au/applications.html
Is it as simple as with Scala to mix Java and Mercury ?
A Java ‘pragma foreign_type’ declaration has the form:
:- pragma foreign_type("Java", MercuryTypeName, "JavaType").
The JavaType can be any accessible non-primitive Java type.
The effect of this declaration is that Mercury values of type MercuryTypeName will be
passed to and from Java foreign procs as having type JavaType.
Is there a command line interactive interpreter tool in Mercury ?
For "green" cuts , it is sufficient that the compiler accepts the Mercury at the syntactic level.
For "red" cuts the developper should do something by hand, as explained in mercury_trans_guide. I wonder if it is feasible to automatically detect "red" cuts, at least in some cases. Or if there are standards for declaring a cut "red".
Posted here: http://tomschrijvers.blogspot.com/2008/02/types-for-prolog.html
How easy would it be to add probabilistic features to ATTEMPTO, e.g. fuzzy logic ?
I wonder if all the cuts in ACE are green cuts.
% grep '!' **/*.pl | wc 744 2593 31095 jmv-desktop: ~/src/ape/ % grep 'assert' **/*.pl | wc 131 643 9426 jmv-desktop: ~/src/ape/ % grep 'retract' **/*.pl | wc 55 165 3221
Information on accessing the Mercury CVS repository is here:
<http://www.mercury.csse.unimelb.edu.au/information/developers/remote_cvs.html>
cvs -d :pserver:guest@cvs.mercury.cs.mu.oz.au:/home/mercury/mercury1/repository login
:NotYetDeclaredJavaObjet javam:m1 "arg" .
white-man-van subClassOf ( drive some van and white-thing
)
Failed tests: testimport(n3_project.TestProjectWithSubProjects) testimportQ(n3_project.TestProjectWithSubProjects) testimportQ2(n3_project.TestProjectWithSubProjects) testPath(eulergui.project.TestN3Source) testpostproc_import(n3_project.TestProjectSequence) testRunDrools(eulergui.drools_engine.RETETest) testParserLink(eulergui.drools_engine.RETETest) Tests in error: testXMLInputGloze(eulergui.gui.TestEulerGUIInputs) test_person_import(eulergui.gui.TestSwingGeneration) test_foaf_import(eulergui.gui.TestSwingGeneration) test_uml(eulergui.gui.TestSwingGeneration) test_ecore(eulergui.gui.TestSwingGeneration) test_person_import2(eulergui.gui.TestGenericGuiGeneration) test_person_import3(eulergui.gui.TestGenericGuiGeneration) test_foaf_import2(eulergui.gui.TestGenericGuiGeneration) test_cv2(eulergui.gui.TestGenericGuiGeneration) test_uml2(eulergui.gui.TestGenericGuiGeneration) test_ecore2(eulergui.gui.TestGenericGuiGeneration) Tests run: 123, Failures: 7, Errors: 11, Skipped: 0
With Drools 5.1.0. beta 2:
Results :
Failed tests:
testPath(eulergui.project.TestN3Source)
testSearchFromProject(n3_project.helpers.TestDroolsQuery)
testpostproc_import(n3_project.TestProjectSequence)
testRunDrools(eulergui.drools_engine.RETETest)
testParserLink(eulergui.drools_engine.RETETest)
Tests in error:
testXMLInputGloze(eulergui.gui.TestEulerGUIInputs)
test_person_import(eulergui.gui.TestSwingGeneration)
test_foaf_import(eulergui.gui.TestSwingGeneration)
test_uml(eulergui.gui.TestSwingGeneration)
test_ecore(eulergui.gui.TestSwingGeneration)
test_person_import2(eulergui.gui.TestGenericGuiGeneration)
test_person_import3(eulergui.gui.TestGenericGuiGeneration)
test_foaf_import2(eulergui.gui.TestGenericGuiGeneration)
test_cv2(eulergui.gui.TestGenericGuiGeneration)
test_uml2(eulergui.gui.TestGenericGuiGeneration)
test_ecore2(eulergui.gui.TestGenericGuiGeneration)
Tests run: 123, Failures: 5, Errors: 11, Skipped: 0
Searched for "temporal logic user interface" .
Questions to IA scientist
Would it be easy to port to Mercury ATTEMPTO or Euler?
Installing rotd (release of the day) does work:
-- Installation complete. -- Don't forget to add /usr/local/mercury-rotd-2010-06-23/bin to your PATH, -- /usr/local/mercury-rotd-2010-06-23/man to your MANPATH, -- and /usr/local/mercury-rotd-2010-06-23/info to your INFOPATH, -- and to add the following lines to the `.emacs' file -- in your home directory: (add-to-list 'load-path "/usr/local/mercury-rotd-2010-06-23/lib/mercury/elisp") (autoload 'mdb "gud" "Invoke the Mercury debugger" t)
PATH=$PATH:/usr/local/mercury-rotd-2010-06-23/bin
However this does not work:
% mmc −−make samples/hello.m
mercury_compile: cannot find source for module `−−make' in directories .
This was also due to the bad characters pasted from the PDF.
1,$s/−/-/g 1,$s/import module/import_module/ 1,$s/“/"/g 1,$s/”/"/g 1,$s/cc multi/cc_multi/
Installing 13.1 does not work:
mmc --generate-dependencies --grade hlc.gc --mercury-linkage shared --flags LIB_FLAGS --flags INTER_FLAGS --no-warn-nothing-exported mer_std
*** Mercury runtime: caught segmentation violation ***
cause: bad permissions for mapped object
address involved: 0xa588f0
This may have been caused by a stack overflow, due to unbounded recursion.
exiting from signal handler
make[2]: *** [mer_std.depend] Erreur 1
make[2]: quittant le répertoire « /home/jmv/src/mercury-compiler-0.13.1/tmp_dir/library »
To clean up from failed install, remove tmp_dir
make[1]: *** [install_grades] Erreur 1
make[1]: quittant le répertoire « /home/jmv/src/mercury-compiler-0.13.1 »
make: *** [install] Erreur 2
Et voila! --> Et voilà!
SOAR is a RETE engine , and more. At the start of the tutorail , it looks like an english interface to Java:
hello-world: If I exist, then write “Hello World” and halt.
This looks superficially like ACE (ATTEMPTO) :
water-jug*elaborate*empty If the state is named water-jug and a jug can hold volume v and currently has contents c, then add that it has v – c available (empty) space.
Slides by rinke hoekstra on owl & uml
[Attempto] ambiguous prefixes in APE
noun_mass(cement, cement, neutr).
When APE will understand prefixes (but when ?), we can leverage on that to distinguish WordNet synsets.
http://www.ontologyportal.org/FAQ.html
I wonder if a translation from ATTEMPTO DRS to KIF would be easy. It would allow one to enter new knowledge into the SUMO family of ontologies.
The reverse translation from KIF to ATTEMPTO DRS would allow one to verbalize KIF and SUMO stuff. But there is already some tools for this.
http://forums.prover9.org/
After switching to Drools 5.1.0.M2, eulergui-1.7-SNAPSHOT-jar-with-dependencies.jar is now
40114037 bytes (used to be 34Mb). This is due to many new dependencies, or new versions of existing dependencies.
For example: generate XML, or classes in Java or Python, or other Knowledge Representation languages like KIF (Knowledge Interchange Format).
Concrete examples:
We will suppose that the N3 or RDF has already been transformed so that:
with possible exceptions for "reference" properties that generate no wrapper "structure";
<urn:blah> ded:associatedFilePath "dir/file.txt"
Any API to walk though an RDF graph is suitable, e.g. Jena's. In addition one needs to distinguish:
References
I'm looking for one of my old dreams: reusable business models in OWL or RDFS.
Design Patterns by Martin Fowler
Analysis patterns – Reusable Object Models
E. Evans - Domain-Driven Design; Tackling Complexity in the Heart of Software (Addison-Wesley, 2003)
Accountability
Observations and Measurements
Referring to Objects
Inventory and Accounting
Planning
Trading
It would cover these concepts ;
- client order invoice
- Client command
Project-tasking, team-company
Bank Accounts
Management Documents
RCMP (request, user)
HR (CV post)
Industrial Design (CAD), PLM
My modifications of the ACE --> OWL translator are commited in the Déductions depot on Sourceforge in directory ape/ . To download them:
svn co
https://deductions.svn.sourceforge.net/svnroot/deductions/ape
I used this snippet for testing :
If a n:rectangle R has a n:length L1 , and R has a n:length L2 , and S = ( L1 * L2 ) then R v:has-surface S .
I also tested the same, but with the formula moved in the consequent (not suited to EulerGUI )
If a n:rectangle R has a n:length L1 and R has a n:length L2 then R v:has-surface S, and S = ( L1 * L2 ) .
I generated the SWRL with Prolog in command line.
The generated SWRL looks good in Protégé 4.1 and 4.0 , visualized as :
length(?x2), length(?x4), rectangle(?x1), Thing(?x6), have(?x1, ?x2),
have(?x1, ?x4), multiply(?x6, ?x2, ?x4) -> has-surface(?x1, ?x6)
and in EulerGUI , translated in N3 as:
{?t0 a ns1:rectangle. ?t1 a ns1:length. ?t2 a ns1:length. ?t0 ns1:have
?t1. ?t0 ns1:have ?t2. (ns1:x2 ns1:x4) math:product ?t3} => {?t0
ns1:has-surface ?t3}.
:(((((((( Alas in Protégé, after selecting "ACE local" in the ACE View preferences, and when adding this snippet:
If a n:rectangle R has a n:length L1 and R has a n:length L2 then R v:has-surface S, and S = ( L1 * L2 ) .
I get this exception . This exception is not present when reparsing tens of snippets that were already in the opened OWL file. This exception is also not present when using the ACE --> OWL translator in Zürich (there is another exception saying that the OWL is empty).
ERROR: /usr/lib/swi-prolog/library/socket.pl:57: Initialization goal raised exception: ERROR: '$open_shared_object'/3: socket: cannot open shared object file: No such file or directory ERROR: /usr/lib/swi-prolog/library/memfile.pl:45: Initialization goal raised exception: ERROR: '$open_shared_object'/3: memfile: cannot open shared object file: No such file or directory ERROR: /usr/lib/swi-prolog/library/sgml.pl:79: Initialization goal raised exception: ERROR: '$open_shared_object'/3: sgml2pl: cannot open shared object file: No such file or directory ERROR: /usr/lib/swi-prolog/library/http/http_stream.pl:43: Initialization goal raised exception: ERROR: '$open_shared_object'/3: http_stream: cannot open shared object file: No such file or directory ERROR: /usr/lib/swi-prolog/library/time.pl:97: Initialization goal raised exception: ERROR: '$open_shared_object'/3: time: cannot open shared object file: No such file or directory ERROR: /usr/lib/swi-prolog/library/mime.pl:37: Initialization goal raised exception: ERROR: '$open_shared_object'/3: /usr/lib/mime: cannot read file data: Is a directory
Then later:
Event: SELECTED_SNIPPET_CHANGED Init: Add axiom: SubClassOf(ObjectIntersectionOf(Thing ObjectSomeValuesFrom(manage Thing)) manager) (2 annotations) ACE annotation: Everybody that manages something is a manager. Selected: Everybody that manages something is a manager. Event: SELECTED_SNIPPET_CHANGED Parsing with lexicon: tv_finsg('has', 'have'). tv_infpl('have', 'have'). tv_pp('had', 'have'). Error logged java.lang.StackOverflowError at jpl.fli.Prolog.new_term_refs(Native Method) at jpl.Term.putTerms(Term.java:477) at jpl.Compound.put(Compound.java:354) at jpl.Term.putTerms(Term.java:486) at jpl.Compound.put(Compound.java:354) at jpl.Term.putTerms(Term.java:486) at jpl.Query.open(Query.java:320) at jpl.Query.hasMoreSolutions(Query.java:256) at jpl.Query.oneSolution(Query.java:688) at jpl.Compound.quotedName(Compound.java:306) at jpl.Compound.toString(Compound.java:248) at jpl.PrologException.<init>(PrologException.java:64) at jpl.Query.get1(Query.java:336) at jpl.Query.hasMoreSolutions(Query.java:258) at jpl.Query.oneSolution(Query.java:688) at jpl.Compound.quotedName(Compound.java:306) at jpl.Compound.toString(Compound.java:248) at jpl.PrologException.<init>(PrologException.java:64) at jpl.Query.get1(Query.java:336) etc ...
Happily it works when selecting "ACE web service" and http://localhost:8000/ in the ACE View preferences, after starting the web service :
./ape.exe -httpserver
The things that work with ace_to_owl.pl work also with the standard ape.exe
, but one needs to run ./make_exe.sh
to refresh
ape.exe
.
./ape.exe -guess -text 'If a n:rectangle R has a n:length L1 , and
R has a n:length L2 , and S = ( L1 * L2 ) then R v:has-surface S .'
-cowlrdf
returns the right result
./ape.exe -guess -text 'If a n:rectangle R has a n:length L1 , and
R has a n:length L2 , and S = ( L1 * L2 ) then R v:has-surface S .'
-cowlfsspp
returns the right result
./ape.exe -guess -text 'If a n:rectangle R has a n:length L1, and R
has a n:length L2 then R v:has-surface ( L1 * L2 ) .' -cowlrdf
returns empty result; my modifications are not trigerred in this case;
but -cowlfsspp returns the right result, and OWL XML returns
<Consequent> <description> <DataProperty URI="http://test#has-surface"/> <I-variable>x1</I-variable> <expr> <*/> <I-variable>x2</I-variable> <I-variable>x4</I-variable> </expr> </description> </Consequent>
The OWL RDF is empty, and the OWL XML is not correct :
<builtIn> <multiply/> <I-variable>x4</I-variable> <expr> <*/> <expr> <*/> <expr> <//> <int cardinality="1"/> <int cardinality="2"/> </expr> <$VAR cardinality="2"/> </expr> <$VAR cardinality="3"/> </expr> <I-variable>x3</I-variable> </builtIn> </Consequent>
First this is for the ACE==>OWL+SWRL translator.
See aceview : Which APE interface to use?
I made this script to start ACE View with the right initialization for JPL.
( eval `swipl -dump-runtime-variables` export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH/server:$LD_LIBRARY_PATH export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so echo export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so \; LD_LIBRARY_PATH=$LD_LIBRARY_PATH cd ~/apps/Protege_4 # ./run.sh -Djava.library.path=$PLBASE/lib/$PLARCH $* & java ${CMD_OPTIONS} -Xmx200M -Dosgi.clean=true -DentityExpansionLimit=100000000 -Dfile.encoding=utf-8 \ -Djava.library.path=$PLBASE/lib/$PLARCH -jar org.eclipse.osgi.jar $* & )
Second this is for the OWL==>ACE translator (SWRL is not implemented in this direction).
See aceview : Installing the OWL verbalizer locally
In make_exe.sh , had to change this:
# jmv swipl=/opt/local/bin/swipl
swipl=swipl # jmv
Then I can start the server :
./owl_to_ace.exe -httpserver -port 5123
and change the setting of the ACE View plugin.
Marettimo Island, Sicily (ITALY)
September 13-15 2010
http://staff.um.edu.mt/mros1/cnl2010/index.html
echo ':- system:set_prolog_flag(history, 50).' > ~/.plrc
I think there are tools to check the Mercury style declarations. Is there a binding for the checker within the IDE?
More generally, is there some kind of plugin architecture for the SWI Prolog IDE?
Using SWI-Prolog (Multi-threaded, 64 bits, Version 5.8.0) on Ubuntu 10.4
swipl -s ace_to_owl.pl -g cli
Try to make this clause recusive:
get_argument(expr(X, Y, Z), _RefList, data, EXPR)
http://github.com/sandhawke
RIF Basic Logic Dialect : http://www.w3.org/TR/rif-bld/
eye --nope --plugin 2006/02swap/fcm-plugin.yap 2003/03swap/example002P.n3 2003/03swap/fl-rules.n3 --query 2003/03swap/example003Q.n3
eye --nope --plugin http://eulersharp.sourceforge.net/2006/02swap/fcm-plugin.yap http://eulersharp.sourceforge.net/2003/03swap/example002P.n3 http://eulersharp.sourceforge.net/2003/03swap/fl-rules.n3 --query http://eulersharp.sourceforge.net/2003/03swap/example003Q.n3
Pay attention to the syntax, especially if the words are unkown. ACE can be completely wrong, even if the paraphrase looks good:
./ape.exe -guess -text "The brain arteriovenous malformations have dilated arteries." \ -solo syntaxpp specification ____________________|____________________ s | __________________|__________________ | np vp | __|__ | | det nbar vbar | | | ____________|_____________ | | n vcompl vmod | | | ________________|_________________ | | | | v np prep np adv | | | | | | | | | | | | pname | pname | | | | | | | | | | the brain arteriovenous malformations have dilated arteries .
The first remedy is to add prefixes for word types:
./ape.exe -guess -text "The n:brain a:arteriovenous n:malformations have a:dilated n:arteries." \
-solo syntaxpp
Then you see that the syntax was in fact wrong:
the n:brain a:arteriovenous <> n:malformations have a:dilated n:arteries ."
This is the first sentence that was not ACE. The sign <> indicates the position where parsing failed.
From this, one should understand (sic!) that the combination noun + adjective is here forbiden. I also add the missing "some"; see "2.1.2 Plural Countable Noun Phrases" in ACE construction rules . ACE is quite fussy about articles and determinants .
./ape.exe -guess -text "The a:arteriovenous n:malformations of the n:brain have some a:dilated n:arteries." \
-solo syntaxpp
Maybe the verb "have" could be replaced with a less general verb, like "consist-in".
The original sentence was:
Brain arteriovenous malformations have dilated arteries and veins with dysplastic vessels and no capillary bed and no neural parenchyma.
Now it's easy to complete the ACE rewriting of the original sentence:
All a:arteriovenous n:malformations of a n:brain have some a:dilated n:arteries, and veins with some a:dysplastic vessels, and have no a:capillary bed, and have no neural n:parenchyma. |
The embolization can be used as an initial procedure or the only technique.
which we rewrite thus:
It is possible that an n:embolization is used as an a:initial n:procedure, or is used as an a:only n:technique. |
In this example, the following is noteworthy:
The cerebral aneurysm can be saccular, fusiform or dissecting.
which we rewrite thus:
A a:cerebral n:aneurysm is a:saccular, or is a:fusiform, or is a:dissecting. |
In this example, the following is noteworthy:
ACE crashes, due a bad update in the trunk, but happily ACE editor works.
Here is a complete shell session that started the web application:
cd ~/src/acewiki/ bzr pull ant createwebapps ln -s /home/jmv/src/ape/ape.exe . # After looking at run_preloaded in the SWI Prolog distribution in : # pl-5.8.3/packages/jpl/examples/java/env.sh # I came with this shell fragment that works for me : eval `swipl -dump-runtime-variables` export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH:$LD_LIBRARY_PATH export LD_LIBRARY_PATH=$JAVA_HOME/jre/lib/$PLARCH/server:$LD_LIBRARY_PATH export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so java -Djava.library.path=$PLBASE/lib/$PLARCH \ -jar $HOME/apps/jetty-runner*.jar webapps/war &
Then access http://localhost:8080/acewiki/
Alas ! AceWiki does not start :
2010-06-15 16:12:08.860:WARN::Error for /acewiki/
java.lang.NoClassDefFoundError: org/semanticweb/owl/inference/OWLReasonerException
at ch.uzh.ifi.attempto.acewiki.Wiki.<init>(Unknown Source)
at ch.uzh.ifi.attempto.acewiki.AceWikiApp.init(Unknown Source)
at nextapp.echo2.app.ApplicationInstance.doInit(ApplicationInstance.java:247)
The reason is that the OWL API jar is not in accordance with the acewiki.Wiki class :
unzip -l webapps/war/WEB-INF/lib/owlapi-bin.jar | grep OWLReasonerException
725 2010-01-28 12:51 org/semanticweb/owlapi/reasoner/OWLReasonerException.class
eye --nope --plugin 2006/02swap/rif-plugin.yap ./2007/07test/rifP.n3 \ --query ./2007/07test/rifQ.n3 | grep -v PASS
BUG CORRECTED: with more than one argument, Euler did not work with EulerGUI.
http://java.dzone.com/articles/jenabean-bridging-gap-between
http://code.google.com/p/jenabean/wiki/WhatsUpWithThat
Dave Beckett's Resource Description Framework (RDF) Resource Guide
http://planetrdf.com/guide/
Applied the remedy to :
Undefined procedure: prolog_navigator:prolog_file_type/2
http://prolog.cs.vu.nl/git/pl.git?a=blobdiff;f=packages/xpce/prolog/lib/trace/browse.pl;h=454024fd5c57e85696d670c471004208a33c3150;hp=6a92415e7530bd2efa832c7f36a277cd2e80da09;hb=21783f2cc3bd233ee59d1d328113ea536b4f4209;hpb=5e469788520ac0fd3dc8679080b566ee6cbf2b5f
http://www.manageability.org/blog/stuff/rule_engines
http://www.hammurapi.biz/hammurapi-biz/ef/xmenu/hammurapi-group/products/hammurapi-rules/index.html
http://code.google.com/p/take/wiki/Example
http://www.mulgara.org/index.html
http://liris.cnrs.fr/~pchampin/research/
Today 1,200 downloads for EulerGUI !!!
For a detailed description of the ACE subset used in the verbalization,
as well as a bidirectional Definite Clause Grammar for this subset, see
http://attempto.ifi.uzh.ch/site/documentation/owlace_constructionrules.html
For all acceleration G for all n:elapsed-time T there is one distance D that a mobile travels and D is 1/2*G*T*T.
Alas, with APE last version 6.5-100128, the following outputs are empty:
-cparaphrase -cowlxml -cowlrdf
but -cowlfsspp
gives this:
Ontology( http://attempto.ifi.uzh.ch/ontologies/owlswrl/test Implies( Antecedent( description( Class(:acceleration) I-variable(1) ) description( Class(:elapsed-time) I-variable(2) ) ) Consequent( description( Class(:distance) I-variable(3) ) description( Class(:mobile) I-variable(4) ) description( ObjectProperty(:travels) I-variable(4) I-variable(3) ) sameAs( I-variable(3) I-variable( expr( * expr( * expr( * expr( / int( 1 ) int( 2 ) ) $VAR( 1 ) ) $VAR( 2 ) ) $VAR( 2 ) ) ) ) ) ) )
http://corz.org/serv/tricks/htaccess.php
Pythian Goodies - IO Basics :
http://www.veoh.com/collection/pythiangoodies/watch/v237408rJb8XQWX
http://attempto.ifi.uzh.ch/site/docs/writing_owl_in_ace.html
Every Person is a Person.
/*[DataPropertyDomain(skypeID Agent)]*/
Everything that primaryTopics something is a Document.
Everything primaryTopics at most 1 thing.
Everything that pages something is something.
Everything that interests something is a Person.
Every Person is an Agent.
If X imgs Y then X depictions Y.
If X icqChatIDs Y then X nicks Y.
Everything that is thumbnailed by something is an Image.
Everything that is accountServiceHomepaged by something is a Document.
Everything that is workplaceHomepaged by something is a Document.
Everything that is paged by something is a Document.
Everything that is accounted by something is an OnlineAccount.
Everything that members something is a Group.
Everything that is webloged by something is a Document.
No Organization is a Person.
Everything that is depictsed by something is something.
Everything is webloged by at most 1 thing.
Everything that accounts something is an Agent.
Everything that is schoolHomepaged by something is a Document.
If X names Y then X labels Y.
Everything that jabberIDs something is an Agent.
Everything is msnChatIDed by at most 1 thing.
Everything that themes something is something.
If X skypeIDs Y then X nicks Y.
Every OnlineEcommerceAccount is an OnlineAccount.
Everything that thumbnails something is an Image.
If X isPrimaryTopicOfs Y then X pages Y.
Everything that schoolHomepages something is a Person.
If X weblogs Y then X pages Y.
If X creators Y then X makers Y. If X makers Y then X creators Y.
Everything that is tipjared by something is a Document.
Every PersonalProfileDocument is a Document.
Everything that is homepaged by something is a Document.
Everything that is publicationsed by something is a Document.
Everything that knowses something is a Person.
Everything that imgs something is a Person.
Every OnlineChatAccount is an OnlineAccount.
No Person is a Project.
Every OnlineGamingAccount is an OnlineAccount.
No Document is an Organization.
Everything that is logoed by something is something.
Everything that is knowsed by something is a Person.
Everything that depictions something is something.
Everything that depictses something is an Image.
If X depictions Y then Y depictses X. If X depictses Y then Y depictions X.
Everything that is topiced by something is something.
Everything that workInfoHomepages something is a Person.
Everything that mades something is an Agent.
Everything that accountServiceHomepages something is an OnlineAccount.
If X msnChatIDs Y then X nicks Y.
Everything is aimChatIDed by at most 1 thing.
Everything that is makered by something is an Agent.
Everything that is isPrimaryTopicOfed by something is a Document.
Everything that pastProjects something is a Person.
No Document is a Project.
If X yahooChatIDs Y then X nicks Y.
If X homepages Y then X isPrimaryTopicOfs Y.
Everything that homepages something is something.
Everything that is mboxed by something is something.
Everything that logoes something is something.
Everything that mbox_sha1sums something is an Agent.
Everything is jabberIDed by at most 1 thing.
Everything that is imged by something is an Image.
No Agent is a Document.
Everything that is depictioned by something is an Image.
Everything that is membered by something is an Agent.
If X tipjars Y then X pages Y.
Everything that is themed by something is something.
Everything that makers something is something.
Every Organization is an Agent.
Everything that topic_interests something is a Person.
Everything that is maded by something is something.
Everything that is baseded_near by something is a SpatialThing.
Everything that tipjars something is an Agent.
If X primaryTopics Y then Y isPrimaryTopicOfs X. If X isPrimaryTopicOfs Y then Y primaryTopics X.
Everything that is topic_interested by something is something.
Everything that is primaryTopiced by something is something.
Every Person is a SpatialThing.
Everything is icqChatIDed by at most 1 thing.
Every Agent is an Agent. Every Agent is an Agent.
Everything that topics something is a Document.
Everything that is interested by something is a Document.
Everything is yahooChatIDed by at most 1 thing.
If X aimChatIDs Y then X nicks Y.
Everything that baseds_near something is a SpatialThing.
Everything that isPrimaryTopicOfs something is something.
Everything that openids something is an Agent.
If X openids Y then X isPrimaryTopicOfs Y.
Everything is mboxed by at most 1 thing.
Everything that is pastProjected by something is something.
Everything that publicationses something is a Person.
Everything that mboxes something is an Agent.
Everything that weblogs something is an Agent.
Everything that workplaceHomepages something is a Person.
Everything that holdsAccounts something is an Agent.
If X topics Y then Y pages X. If X pages Y then Y topics X.
Everything that is fundedBied by something is something.
Everything that fundedBies something is something.
Everything that is currentProjected by something is something.
If X homepages Y then X pages Y.
If X mades Y then Y makers X. If X makers Y then Y mades X.
Every Group is an Agent.
No Document is a Person.
Everything is openided by at most 1 thing.
Everything that is workInfoHomepaged by something is a Document.
Everything is homepaged by at most 1 thing.
Every OnlineAccount is something.
Everything is isPrimaryTopicOfed by at most 1 thing.
Everything that is openided by something is a Document.
Everything that is holdsAccounted by something is an OnlineAccount.
Everything is mbox_sha1sumed by at most 1 thing.
Everything that currentProjects something is a Person.
TO READ: Posted on the Protégé list: http://www.linkeddatatools.com/semantic-web-basics
Since there is several days of work to make it work, I postponed N3 Java Mapping Builtin.
[FEATURE] Creation of an input Form from a click in Class tree, using rules from Déductions project
class CreateClassFormMouseListener: uses JavaScript Instanciation, not the new
N3JavaMappingBuiltin
Add some Java declaration in N3 for the new N3 Java mapping (WIP)
Mark :inputSpecification as :InfrastructureProperty , in addition to being a owl:ObjectProperty (WIP)
add axiom for owl:intersectionOf :
{?C owl:intersectionOf ?L. ?D list:in ?L} => {?C rdfs:subClassOf ?D}.
Commit a WIP version of the new forms from the class tree view
Indicated by Bertrand C. :
http://code.google.com/intl/fr-FR/apis/predict/
cat swing-rules3.n3p | grep '<string>' | sed -e 's/ *//' | sed -e 's/<string>//' \ | sed -e 's=</string>==' | uniq | sort ./app_gui-rules2.n3 ./form-rules.n3 ./generic_gui_projection-rules.n3 ./generic_to_java-rules.n3 ./gui_generic.n3 http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/rpo-rules.n3 ./java_event-rules.n3 ./java_library.n3 ./java_library-rules.n3 ./query2.n3 ./rpo-rules-small.n3 ./software_applications.n3
Upgrading to Pellet 2.1.1 ; removing ModelCom_jmv.java RDFListImpl.java modifed from Jena
tests pass; tested an RDF file: http://xmlns.com/foaf/spec/index.rdf
Variable not yet intanciated in Java involved in method call
DIFFICULT
Triples like this involves a variable ?JPANEL_FIELD that is not yet intanciated at the Java level :
javapr:GUIKBAdapter javam:add (?JPANEL_FIELD ?JLABEL_DT 0).
With the post-translation into JavaScript, we had the flexibility to do that, because all the object creations are done before all the method calls.
This is difficult with the new N3 Java Mapping, but it seems that moving method call in other rules were a Java type can be inferred or assigned brings a solution. This would also bring a a better separation of rule layers (see Supporting ontologies).
But see also "Predefined Java objects" below for another solution.
Variable declared in the consequent side as an abstract Java type
SIMPLE, SEVERAL SOLUTIONS
Related to previous problem, here the variable ?JPANEL_FIELD is declared in the consequent side as an abstract Java type, just to enable subsequent call (otherwise Drools will not compile). No object creation must occur for abstract Java type, just declaration.
?JTEXT_FIELD a java:java_awt_Component .
javapr:GUIKBAdapter javam:add (?JPANEL_FIELD ?JLABEL_DT 0).
This must be combined with
Using introspection for Java calls
Another solution to avoid altogether such declaration in N3 is to use introspection (a.k.a. reflection) in the generated code, probably using Spring core framework reflection and introspection library (need a code sample).
Pure N3 variable in Java involved in method call
DIFFICULT
In this fragment, the variable ?INDIVIDUAL will never be instanciated at the Java level. So it must be added as String in the Java method call.
?Property rdfs:range ?CLASS . ?INDIVIDUAL a ?CLASS . ... } => { ?JCOMBOBOX javam:addItem ?INDIVIDUAL . } .
I see no way of faclitating things in the framework. The designer will have to declare the variable in N3 , e.g. here:
?INDIVIDUAL javac:java_lang_String ( ?INDIVIDUAL ) .
where the N3 prefix javac: represents a Java constructor. This will be a new possibility in the Java - N3 mapping . It would have to be implemented in the class Instanciator also, for compatibility.
Predefined Java objects
SEVERAL SOLUTIONS
In the post-translation into JavaScript, the predefined Java objects (e.g. GUIKBAdapter) were just added as JavaScript variables to the JavaScript engine. They didn't need to be detected and processed neither in thr translator nor in the instanciator. Now it is different.
javapr:GUIKBAdapter javam:add (?JPANEL_FIELD ?JLABEL_DT 0).
I see 2 solutions:
Assignment( name = "<http://../GUIKBAdapter>" , reference.class = ?GUIKBAdapter_class reference = ?GUIKBAdapter_reference )
In both cases the Drools Working Memory must be populated beforehand, in different ways.
Solution 1. also solves elegantly issue "Variable not yet intanciated in Java involved in method call". But the Java must be declared in N3, or otherwise use introspection.
N3JavaMappingBuiltin : WIP : for the Swing rules,
solve problems with empty lists, and boolean in arguments of Java methods , e.g. :
( JFRAME_reference ) . setVisible( true );
( JFRAME_reference ) . setSize( 600, 300 );
( JFRAME_reference ) . pack( );
( JFRAME_reference ) . toFront( );
http://bytes.com/topic/java/answers/18107-test-if-string-integer
svn co --username jmvanel https://eulergui.svn.sourceforge.net/svnroot/eulergui/branches/refactoring/eulergui/ svn cleanup mvn eclipse:eclipse -Declipse.downloadSources=true
TODO
detect non-java variable used in Java statement, e.g. ?V here :
{ _:x _:p ?V . ?listModel a java:javax-swing-DefaultListModel. } => { ?listModel <http://java.sun.com/method#add> ( 0 ?V ). } .
NOTE:
It is possible (like before) to assign non-Java predicates to Java objects.
java_event-rules.n3 : add declarations in N3 of Java types
I added these declarations in java_event-rules.n3 ; example person_import3.n3p still works .
{
?JTEXT_FIELD a java:javax_swing_JTextField .
?JEVENT a java:java_awt_Event ;
javap:ID 1005 ; # 1005 means FOCUS_LOST in Swing class FocusEvent
javap:source ?JTEXT_FIELD ;
javap:temporary false .
?JTEXT_FIELD javapr:generic_field ?FIELD .
?JTEXT_FIELD javap:text ?TEXT .
} => {
?JEVENT a gui:FocusLostEvent ;
gui:eventSource ?FIELD
; gui:newValue ?TEXT .
_:d eg:trace ( "FocusLostEvent" ?JTEXT_FIELD ?FIELD "gui:newValue" ?TEXT ) .
} .
But for other rules files like generic_gui_projection-rules.n3 , this reveals an architectural problem . This rule file is not supposed to depend on Java vocabulary. But it does, e.g. :
# instantiate a (naked) window
{ ?APPINST app:hasWindow ?PANE
} => {
?JFRAME a java:javax_swing_JFrame .
?PANE javapr:projection ?JFRAME .
?JFRAME a gengui:Frame .
?JFRAME java:visible true .
?JFRAME javam:setSize ( 600 300 ).
# ?FlowLayout a java:java_awt_FlowLayout .
#?FlowLayout a gengui:FlowLayout .
#?JFRAME javam:setLayout ( ?FlowLayout ).
?JFRAME javam:pack () .
?JFRAME javam:toFront () .
_:d eg:trace ( ">>> instantiated a window" ?JFRAME ).
} .
TODO
for the Drools engine, the main query will be a Drools query, or for GUI generation no query ar all .
possible confusion; infrastructure rules and user rules
I wonder if there are some Open Source tools applying the ideas of linear logic.
acceleration_form.n3p
http://code.google.com/p/aceview/issues/detail?id=4
TODO: EulerGUI editor:
add classical prefixes by completion: owl, etc.
SWRL translator: add: What is implemented; update to 1.6 release
http://www.agence-nationale-recherche.fr/Agence
Swappiness lets an admin decide how quickly they want the VM to reclaim mapped pages,
rather than just try to flush out dirty page cache data. The algorithm for deciding whether to
reclaim mapped pages is based on a combination of the percentage of the inactive list scanned
in an effort to reclaim pages, the amount of total system memory mapped, and the swappiness
value.
By tuning swappiness up, the kernel will dedicate more resources to try to free existing
memory pages in RAM, generating less I/O, but also increasing system CPU time. If your system
is running at acceptable levels and you have 20% to 30% idle time, you may tune this parameter
higher to dedicate more CPU time to freeing memory.
By tuning swappiness down, the kernel will spend less system CPU time freeing memory and
generate more I/O. If your system is CPU intensive with relatively idle I/O, then tuning this
parameter down will decrease CPU cycles and leverage the idle I/O channels. I/O is not CPU
intensive or expensive.
From this link:
https://docs.google.com/viewer?url=http://www.ufsdump.org/papers/uuasc-june-2006.pdf
I've read 30 pages of the introduction of Jean-Yves Girard's book The Blind Spot, Lectures on proof-theory :
http://iml.univ-mrs.fr/~girard/coursang/coursang.html
I like his frame of mind.
To read the Girard book, I get help from the Bezem course, in the 18th European Summer School in Logic, Language and Information (31 July - 11 August, 2006 Málaga, Spain), Introduction to automated reasoning, by Hans de Nivelle and Marc Bezem, and also from this by Roberto Di Cosmo (whom I met thursday) :
For what concerns the topic "Formal Logic" a real nice place is the wikibook
http://en.wikibooks.org/wiki/Formal_Logic/Detailed_Table_of_Contents
http://www.joelonsoftware.com/articles/fog0000000043.html
http://www.illc.uva.nl/lia/farewell_kamp.html
Hans Kamp & Uwe Reyle (1996). A Calculus for First Order Discourse Representation Structures. Journal of Logic, Language and Information 5 (3-4).
http://philpapers.org/rec/KAMACF
./ape.exe -guess -solo drspp -text 'Every human is a male or is a female.' [] [A] object(A, human, countable, na, eq, 1)-1/2 => [] [B, C] object(B, male, countable, na, eq, 1)-1/7 predicate(C, be, A, B)-1/3 v [D, E] object(D, female, countable, na, eq, 1)-1/11 predicate(E, be, A, D)-1/9
v represents disjunction.
I'm surprised by this (2 times B):
A card is valid and correct.
A B C
object(A,card,countable,na,eq,1)
property(B,valid,pos)
property(B,correct,pos)
predicate(C,be,A,B)
But this is less surprising if I see this:
A rich and old customer waits.
A B
object(A,customer,countable,na,eq,1)
property(A,rich,pos)
property(A,old,pos)
predicate(B,wait,A)
http://www.semanticoverflow.com/questions/897/generic-rules-for-owl
This is the official document for rules that a forward chaining inference engine may use to implement OWL semantics (at least for the RL profile) :
http://www.w3.org/TR/owl2-profiles/#Reasoning_in_OWL_2_RL_and_RDF_Graphs_using_Rules
Dave Reynolds added something useful.
Olivier did another answer :
http://www.semanticoverflow.com/questions/883/technology-stack-for-semantic-web-application
See also :
H.J. ter Horst, Completeness, Decidability and Complexity of Entailment for RDF
# Schema and a Semantic Extension Involving the OWL Vocabulary, Revised and
# extended version of [11], Journal of Web Semantics 3 (2005) 79-115.
# http://www.websemanticsjournal.org/ps/pub/2005-15
http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B758F-4H16P4Y-1&_user=10&_coverDate=10/31/2005&_rdoc=1&_fmt=high&_orig=search&_sort=d&_docanchor=&view=c&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=012ba4e3bbf60f518f944fc9f6c7881a
http://www.ontotext.com/inference/rdfs_rules_owl.html
Description_Logic_Rules, Markus Krötzsch, Sebastian Rudolph, Pascal Hitzler
swipl
consult( 'ace_to_owl.pl' ).
cli.
In deductions/n3_new/test/aceview_swrl_tests.owl , these sentences do not pass right now:
Everybody likes everybody.
does not pass right now, because I excluded arbitrarily the criterium :
?X a owl:Thing.
REMEDY: keep this criterium when there is no other criterium for ?X
129: Every man that owns a car and that is not a manager cleans the car.
because we do not translate this :
<swrl:ClassAtom> <swrl:argument1 rdf:resource="#x1"/> <swrl:classPredicate> <owl:Class> <owl:complementOf> <owl:Class rdf:about="#manager"/> </owl:complementOf> </owl:Class> </swrl:classPredicate> </swrl:ClassAtom>
Which reads as SWRL:
car(?x2), man(?x1), not (manager)(?x1), own(?x1, ?x2) -> clean(?x1, ?x2)
REMEDY: translate as:
?x1 a ?CLASS . ?CLASS rdfs:subClassOf ?SUPERCLASS. ?SUPERCLASS log:notEqualTo :manager .
COMMENTS:
not (manager)(?x1)
in SWRL means " ?x1 is not provably
member of class manager" ; while the proposed N3 translation applies
negation as failure137: For every day a man does not see a woman.
because we do not translate this :
<swrl:classPredicate> <owl:Class> <owl:complementOf> <owl:Restriction> <owl:onProperty rdf:resource="#see"/> <owl:someValuesFrom> <owl:Class rdf:about="#woman"/> </owl:someValuesFrom> </owl:Restriction> </owl:complementOf> </owl:Class> </swrl:classPredicate>
REMEDY: use findall :
findall( ?MAN {?MAN :see ?W. ?W a :woman.} () ).
COMMENTS:
I added a simpler test without complementOf :
For every day a man sees a woman.
<swrl:ClassAtom> <swrl:argument1 rdf:resource="#x2"/> <swrl:classPredicate rdf:resource="#man"/> </swrl:ClassAtom> ... <swrl:classPredicate> <owl:Restriction> <owl:onProperty rdf:resource="#see"/> <owl:someValuesFrom> <owl:Class rdf:about="#woman"/> </owl:someValuesFrom> </owl:Restriction> </swrl:classPredicate>
Which sould translate this way:
?MAN :see ?W. ?W a :woman.
Or , rather (no need to create a variable) :
?MAN :see [ a :woman ] .
Sent a bug report to Jos: Euler: problem with e:optional , rdf:type and log:notEqualTo
140: For every day John sees a dog or sees a cat.
because we do not translate this :
<swrl:classPredicate> <owl:Class> <owl:unionOf rdf:parseType="Collection"> <owl:Restriction> <owl:onProperty rdf:resource="#see"/> <owl:someValuesFrom> <owl:Class rdf:about="#dog"/> </owl:someValuesFrom> </owl:Restriction> <owl:Restriction> <owl:onProperty rdf:resource="#see"/> <owl:someValuesFrom> <owl:Class rdf:about="#cat"/> </owl:someValuesFrom> </owl:Restriction> </owl:unionOf> </owl:Class> </swrl:classPredicate>
REMEDY: owl:unionOf should be translated using e:disjunction , and owl Restriction onProperty by a simple triple:
( {:John :see ?D. ?D a :dog.} { :John:see ?C. } { ?C a :cat.} ) ! e:disjunction .
185: If a man owns a car then the man likes the car and likes exactly 3 cats.
because we do not translate this :
<swrl:classPredicate> <owl:Restriction> <owl:onProperty rdf:resource="#like"/> <owl:cardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">3</owl:cardinality> <owl11:onClass> <owl:Class rdf:about="#cat"/> </owl11:onClass> </owl:Restriction> </swrl:classPredicate>
REMEDY: in antecedent , use findall and math:memberCount , and make the Unique Name Assumption
findall( ?MAN {?MAN :like ?C. ?C a :cat.} ?CATS ). ?CATS math:memberCount 3 .
On consequent side, I think it's not possible with a RETE engine ??? , but maybe with Euler.
186: If John owns a car then Mary likes a car and likes at most 3 cats.
because we do not translate this :
<swrl:ClassAtom> <swrl:argument1 rdf:resource="#Mary"/> <swrl:classPredicate> <owl:Restriction> <owl:onProperty rdf:resource="#like"/> <owl:maxCardinality rdf:datatype="http://www.w3.org/2001/XMLSchema#nonNegativeInteger">3</owl:maxCardinality> <owl11:onClass> <owl:Class rdf:about="#cat"/> </owl11:onClass> </owl:Restriction> </swrl:classPredicate> </swrl:ClassAtom>
REMEDY: in antecedent , use findall and math:memberCount ; in consequent I think it's not possible with a RETE engine ??? , but maybe with Euler.
owl ontology vocabulary computation simulation formulas
Hi
I set myself the use case of making a tool that, out of an algebraic formula with identified variables, in OWL, will generate a small GUI with a form to enter the values and a display of calculation result .
For a concrete example, consider the accelerated movement formula:
D = 1/2 G T*T
There would be an input field for the acceleration G (nice to have : default value 9.81), one for the elapsed time T, and a display of the distance D.
With the EulerGUI - Déductions framework, we have the form generator. We will implement the display of selected inferred statements.
I come to my question.
With this use my mind, I would like to re-use an existing ontology.
Of course I looked in the usual places. This morning , the swoogle site is temporarily unavailable. Watson gave nothing suitable. In the tones repo I found sme ontologies from dumortier.com (see below).
The main notions I need are :
expression, variable, value, parameter, result, quantity
A difficulty is that a variable can be considered as an independent variable or as a parameter, depending on context and usage of a formula. But for a first approach I can do without these notions.
In the domain of unit of measurement , unity , dimension , I found this in Tones:
http://ontology.dumontierlab.com/property-complex
but dimensional analysis is rather sketchy there.
Later I will need ontology about :
equation , solver
Tried the owl swrl test of sent by Kaarel.
./test_owlswrl.pl
Every human is a male or is a female. ==> output empty !?!
Every driver owns a car. ==> output empty !?!
Verbalizing OWL in Attempto Controlled English
Kaarel Kaljurand and Norbert E. Fuchs
Upload snaphot : SCM-Revision: 1653
In fact, I don't even know how an algebric expression would be in OWL+SWRL.
I guess it uses the SWRL builtins for mathematical operations.
But what if it is pure OWL ?
Pending the correction Kaarel mentionned last time, I need some workaround to make my small demonstrator that will interpret the math formulas and show some input forms.
Given some hints, I can try to arrange the Prolog code ...
Here is the sentence that was not working with ACE View (cf mail from Kaarel, april 19) :
This seems to be a bug:
./ape.exe -text "For each mobile M for each n:acceleration G for each
elapsed-time T there is a distance D such that M travels-during the
elapsed-time T, and D is (1/2)*G*T*T." -guess -solo owlrdf
Results in:
ERROR: Unexpected error.
The bug is that transformation from SWRL functional syntax into RDF/XML fails
I simplified the sentence (removing the red part ) that was not working with ACE View :
For each mobile M for each n : acceleration G for each elapsed-time T there is a distance D ,
and D is ( 1 / 2 ) * G * T * T .
Same problem ! "the snippet contains no ACE syntax errors, but cannot be expressed in OWL/SWRL" !;
A very simple sentence gives "subject or object of this verb majkes an illegal reference" :
( ( 1 / 2 ) * G * T * T ) is an expression .
./ape.exe -guess -solo paraphrase -text "An expression is ( ( 1 / 2 ) * G * T * T ) ."
There is an n:expression X1.
There is something X2.
There is something X3.
The n:expression X1 is ( ( ( ( 1 / 2 ) * X2 ) * X3 ) * X3 ).
but ACE View says: "subject or object of this verb majkes an illegal reference" .
Same for :
An n : acceleration has-expression ( ( 1 / 2 ) * G * T * T ) .
Same for :
There is a time T .
There is an n : acceleration G .
An n : accelerated-movement has-expression ( ( 1 / 2 ) * G * T * T ) .
Using a personal noun is a hope :
There is a time T .
There is an n : acceleration G .
An n : accelerated-movement has-expression p :bla.
Indeed !
There is a time T .
There is an n : acceleration G .
An n : accelerated-movement has-expression p : acceleration-formula .
p : acceleration-formula has-formula ( ( 1 / 2 ) * G * T * T ) .
Alas! No error flagged, but the last line is not in the OWL at all.
There is a time T .
There is an n : acceleration G .
p : accelerated-movement has-expression ( ( 1 / 2 ) * G * T * T ) .
but ACE View says: "subject or object of this verb makes an illegal reference" . Same when removing the 2 first lines.
Note that using mass nouns for time and accelaration makes more sense:
./ape.exe -guess -solo drspp -text \
"There is some time T . There is some n : acceleration G . p : accelerated-movement has-expression ( ( 1 / 2 ) * G * T * T ) ."
[A, B, C]
object(A, time, mass, na, na, na)-1/6
object(B, acceleration, mass, na, na, na)-2/6
predicate(C, has-expression, named(accelerated-movement), expr(*, expr(*, expr(*, expr(/, int(1), int(2)), B), A), A))-3/6
Which gives different error messagesin ACE View, for acceleration and time:
"A reference to this noun either does not exist or is illegal."
-------------------------------------
./ape.exe -text "For each mobile M for each n:acceleration G for each elapsed-time T there is a distance D such that M travels-during the elapsed-time T, and D is (1/2)*G*T*T." -guess -solo owlfss
'Ontology'('http://attempto.ifi.uzh.ch/ontologies/owlswrl/test',
['Implies'('Antecedent'([description('Class'('':mobile),
'I-variable'(B)), description('Class'('':acceleration),
'I-variable'(C)), description('Class'('':'elapsed-time'),
'I-variable'(D))]), 'Consequent'([description('Class'('':distance),
'I-variable'(E)), description('ObjectProperty'('':'travels-during'),
'I-variable'(B), 'I-variable'(D)), sameAs('I-variable'(E),
'I-variable'(expr(*, expr(*, expr(*, expr(/, int(1), int(2)), C), D),
D)))]))])
If M is a mobile , and G is an n:acceleration , and T is an elapsed-time, the the distance that M travels during the elapsed-time T is 1/2*G*T*T .
./ape.exe -solo paraphrase -guess -text \
"For each mobile M for each n:acceleration G for each elapsed-time T the distance that M travels during the elapsed-time T is 1/2*G*T*T ."
This stack shows how the Save event is sent :
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 160 in TripleStoreDrools)) TripleStoreDrools.createId(String) line: 160 ApplicationKB.createId(String) line: 150 ApplicationKB.fireFileSavedEvent(String) line: 184 TextEditor$2.handleMessage(EBMessage) line: 233 EditBus.dispatch(EditBus$EBMessageHandler, EBMessage) line: 212 EditBus.sendImpl(EBMessage) line: 247 EditBus.send(EBMessage) line: 188 Buffer.save(View, String, boolean, boolean) line: 444 Buffer.save(View, String, boolean) line: 399 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: 39 DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 25 Method.invoke(Object, Object...) line: 597 Reflect.invokeMethod(Method, Object, Object[]) line: 134 Reflect.invokeObjectMethod(Object, String, Object[], Interpreter, CallStack, SimpleNode) line: 80 Name.invokeMethod(Interpreter, Object[], CallStack, SimpleNode) line: 855 BSHMethodInvocation.eval(CallStack, Interpreter) line: 75 BSHPrimaryExpression.eval(boolean, CallStack, Interpreter) line: 102 BSHPrimaryExpression.eval(CallStack, Interpreter) line: 47 BSHBlock.evalBlock(CallStack, Interpreter, boolean, BSHBlock$NodeFilter) line: 130 BSHBlock.eval(CallStack, Interpreter, boolean) line: 80 BshMethod.invokeImpl(Object[], Interpreter, CallStack, SimpleNode, boolean) line: 362 BshMethod.invoke(Object[], Interpreter, CallStack, SimpleNode, boolean) line: 258 BshMethod.invoke(Object[], Interpreter, CallStack, SimpleNode) line: 186 BeanShell$MyBeanShellFacade(BeanShellFacade<T>).runCachedBlock(BshMethod, T, NameSpace) line: 225 BeanShell.runCachedBlock(BshMethod, View, NameSpace) line: 423 BeanShellAction.invoke(View) line: 73 DefaultInputHandler(InputHandler).invokeAction(EditAction) line: 352 DefaultInputHandler(InputHandler).invokeAction(String) line: 317 DefaultInputHandler.handleKey(KeyEventTranslator$Key, boolean) line: 197 DefaultInputHandler(AbstractInputHandler<E>).processKeyEventKeyStrokeHandling(KeyEvent, int, String, boolean) line: 405 DefaultInputHandler(InputHandler).processKeyEvent(KeyEvent, int, boolean) line: 151 JEditTextArea(TextArea).processKeyEvent(KeyEvent) line: 4633 JEditTextArea(Component).processEvent(AWTEvent) line: 6040 JEditTextArea(Container).processEvent(AWTEvent) line: 2041 JEditTextArea(Component).dispatchEventImpl(AWTEvent) line: 4630 JEditTextArea(Container).dispatchEventImpl(AWTEvent) line: 2099 JEditTextArea(Component).dispatchEvent(AWTEvent) line: 4460 jEdit$MyFocusManager(KeyboardFocusManager).redispatchEvent(Component, AWTEvent) line: 1850 jEdit$MyFocusManager(DefaultKeyboardFocusManager).dispatchKeyEvent(KeyEvent) line: 712 jEdit$MyFocusManager(DefaultKeyboardFocusManager).preDispatchKeyEvent(KeyEvent) line: 990 jEdit$MyFocusManager(DefaultKeyboardFocusManager).typeAheadAssertions(Component, AWTEvent) line: 855 jEdit$MyFocusManager(DefaultKeyboardFocusManager).dispatchEvent(AWTEvent) line: 676 View(Component).dispatchEventImpl(AWTEvent) line: 4502 View(Container).dispatchEventImpl(AWTEvent) line: 2099 View(Window).dispatchEventImpl(AWTEvent) line: 2478 View(Component).dispatchEvent(AWTEvent) line: 4460 EventQueue.dispatchEvent(AWTEvent) line: 599 EventDispatchThread.pumpOneEventForFilters(int) line: 269 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122
svn propset svn:keywords Revision swrl-n3-rules.n3
svn co https://jena.svn.sourceforge.net/svnroot/jena jena
The #swig scratchpad, a link annotation system, is provided by Edd Dumbill. It selectively logs comments made in IRC, via an IRC bot 'dc_swig' (see chump site for details). Complete public logs of the discussions on the #swig channel are also available (in text, html and rdf flavours), thanks to Dave Beckett of ILRT.
http://www.w3.org/2001/sw/interest/
Subscribed to semantic-web@w3.org http://lists.w3.org/Archives/Public/semantic-web/2010May/thread.html
Implemented these SWRL builtins in terms of CWM builtins, and for swrlb:substring, of RIF builtin: add, divide, equal, greaterThan, greaterThanOrEqual, lessThan, lessThanOrEqual, multiply, stringConcat, substring, subtract.
:abs a swrl:Builtin; :args "2"^^XML:int . :add a swrl:Builtin; :minArgs "3"^^XML:int . :addDayTimeDurationToDate a swrl:Builtin; :args "3"^^XML:int . :addDayTimeDurationToDateTime a swrl:Builtin; :args "3"^^XML:int . :addDayTimeDurationToTime a swrl:Builtin; :args "3"^^XML:int . :addDayTimeDurations a swrl:Builtin; :args "3"^^XML:int . :addYearMonthDurationToDate a swrl:Builtin; :args "3"^^XML:int . :addYearMonthDurationToDateTime a swrl:Builtin; :args "3"^^XML:int . :addYearMonthDurations a swrl:Builtin; :args "3"^^XML:int . :anyURI a swrl:Builtin; :args "7"^^XML:int . :booleanNot a swrl:Builtin; :args "2"^^XML:int . :ceiling a swrl:Builtin; :args "2"^^XML:int . :contains a swrl:Builtin; :args "2"^^XML:int . :containsIgnoreCase a swrl:Builtin; :args "2"^^XML:int . :cos a swrl:Builtin; :args "2"^^XML:int . :date a swrl:Builtin; :args "5"^^XML:int . :dateTime a swrl:Builtin; :args "8"^^XML:int . :dayTimeDuration a swrl:Builtin; :args "5"^^XML:int . :divide a swrl:Builtin; :args "3"^^XML:int . :divideDayTimeDuration a swrl:Builtin; :args "3"^^XML:int . :divideYearMonthDuration a swrl:Builtin; :args "3"^^XML:int . :empty a swrl:Builtin; :args "1"^^XML:int . :endsWith a swrl:Builtin; :args "2"^^XML:int . :equal a swrl:Builtin; :args "2"^^XML:int . :first a swrl:Builtin; :args "2"^^XML:int . :floor a swrl:Builtin; :args "2"^^XML:int . :greaterThan a swrl:Builtin; :args "2"^^XML:int . :greaterThanOrEqual a swrl:Builtin; :args "2"^^XML:int . :integerDivide a swrl:Builtin; :args "3"^^XML:int . :length a swrl:Builtin; :args "2"^^XML:int . :lessThan a swrl:Builtin; :args "2"^^XML:int . :lessThanOrEqual a swrl:Builtin; :args "2"^^XML:int . :listConcat a swrl:Builtin; :minArgs "3"^^XML:int . :listIntersection a swrl:Builtin; :args "3"^^XML:int . :listSubtraction a swrl:Builtin; :args "3"^^XML:int . :lowerCase a swrl:Builtin; :args "2"^^XML:int . :matches a swrl:Builtin; :args "2"^^XML:int . :member a swrl:Builtin; :args "2"^^XML:int . :mod a swrl:Builtin; :args "3"^^XML:int . :multiply a swrl:Builtin; :minArgs "3"^^XML:int . :multiplyDayTimeDuration a swrl:Builtin; :args "3"^^XML:int . :multiplyYearMonthDuration a swrl:Builtin; :args "3"^^XML:int . :normalizeSpace a swrl:Builtin; :args "2"^^XML:int . :notEqual a swrl:Builtin; :args "2"^^XML:int . :pow a swrl:Builtin; :args "3"^^XML:int . :replace a swrl:Builtin; :args "4"^^XML:int . :resolveURI a swrl:Builtin; :args "3"^^XML:int . :rest a swrl:Builtin; :args "2"^^XML:int . :round a swrl:Builtin; :args "2"^^XML:int . :roundHalfToEven a swrl:Builtin; :args "2"^^XML:int . :sin a swrl:Builtin; :args "2"^^XML:int . :startsWith a swrl:Builtin; :args "2"^^XML:int . :stringConcat a swrl:Builtin; :minArgs "3"^^XML:int . :stringEqualIgnoreCase a swrl:Builtin; :args "2"^^XML:int . :stringLength a swrl:Builtin; :args "2"^^XML:int . :sublist a swrl:Builtin; :args "2"^^XML:int . :substring a swrl:Builtin; :maxArgs "4"^^XML:int; :minArgs "3"^^XML:int . :substringAfter a swrl:Builtin; :args "3"^^XML:int . :substringBefore a swrl:Builtin; :args "3"^^XML:int . :subtract a swrl:Builtin; :args "3"^^XML:int . :subtractDateTimesYieldingDayTimeDuration a swrl:Builtin; :args "3"^^XML:int . :subtractDateTimesYieldingYearMonthDuration a swrl:Builtin; :args "3"^^XML:int . :subtractDates a swrl:Builtin; :args "3"^^XML:int . :subtractDayTimeDurationFromDate a swrl:Builtin; :args "3"^^XML:int . :subtractDayTimeDurationFromDateTime a swrl:Builtin; :args "3"^^XML:int . :subtractDayTimeDurationFromTime a swrl:Builtin; :args "3"^^XML:int . :subtractDayTimeDurations a swrl:Builtin; :args "3"^^XML:int . :subtractTimes a swrl:Builtin; :args "3"^^XML:int . :subtractYearMonthDurationFromDate a swrl:Builtin; :args "3"^^XML:int . :subtractYearMonthDurationFromDateTime a swrl:Builtin; :args "3"^^XML:int . :subtractYearMonthDurations a swrl:Builtin; :args "3"^^XML:int . :tan a swrl:Builtin; :args "2"^^XML:int . :time a swrl:Builtin; :args "5"^^XML:int . :translate a swrl:Builtin; :args "4"^^XML:int . :unaryMinus a swrl:Builtin; :args "2"^^XML:int . :unaryPlus a swrl:Builtin; :args "2"^^XML:int . :upperCase a swrl:Builtin; :args "2"^^XML:int . :yearMonthDuration a swrl:Builtin; :args "3"^^XML:int .
11:00:27 [AWT-EventQueue-0] [error] EditBus: Exception while sending message on EditBus: 11:00:27 [AWT-EventQueue-0] [error] EditBus: java.lang.NullPointerException 11:00:27 [AWT-EventQueue-0] [error] EditBus: at eulergui.gui.view.TextEditor$2.handleMessage(TextEditor.java:233) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.EditBus.dispatch(EditBus.java:212) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.EditBus.sendImpl(EditBus.java:247) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.EditBus.send(EditBus.java:188) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.Buffer.save(Buffer.java:444) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.Buffer.save(Buffer.java:399) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.lang.reflect.Method.invoke(Method.java:597) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.Reflect.invokeMethod(Reflect.java:134) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.Reflect.invokeObjectMethod(Reflect.java:80) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.Name.invokeMethod(Name.java:855) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BSHMethodInvocation.eval(BSHMethodInvocation.java:75) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:102) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BSHPrimaryExpression.eval(BSHPrimaryExpression.java:47) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BSHBlock.evalBlock(BSHBlock.java:130) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BSHBlock.eval(BSHBlock.java:80) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BshMethod.invokeImpl(BshMethod.java:362) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BshMethod.invoke(BshMethod.java:258) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.bsh.BshMethod.invoke(BshMethod.java:186) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.BeanShellFacade.runCachedBlock(BeanShellFacade.java:225) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.BeanShell.runCachedBlock(BeanShell.java:423) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.BeanShellAction.invoke(BeanShellAction.java:73) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.gui.InputHandler.invokeAction(InputHandler.java:352) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.gui.InputHandler.invokeAction(InputHandler.java:317) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.gui.DefaultInputHandler.handleKey(DefaultInputHandler.java:197) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.input.AbstractInputHandler.processKeyEventKeyStrokeHandling(AbstractInputHandler.java:405) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.gui.InputHandler.processKeyEvent(InputHandler.java:151) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at org.gjt.sp.jedit.textarea.TextArea.processKeyEvent(TextArea.java:4633) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Component.processEvent(Component.java:6040) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Container.processEvent(Container.java:2041) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Component.dispatchEventImpl(Component.java:4630) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Container.dispatchEventImpl(Container.java:2099) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Component.dispatchEvent(Component.java:4460) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.KeyboardFocusManager.redispatchEvent(KeyboardFocusManager.java:1850) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.DefaultKeyboardFocusManager.dispatchKeyEvent(DefaultKeyboardFocusManager.java:712) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.DefaultKeyboardFocusManager.preDispatchKeyEvent(DefaultKeyboardFocusManager.java:990) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.DefaultKeyboardFocusManager.typeAheadAssertions(DefaultKeyboardFocusManager.java:855) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.DefaultKeyboardFocusManager.dispatchEvent(DefaultKeyboardFocusManager.java:676) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Component.dispatchEventImpl(Component.java:4502) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Container.dispatchEventImpl(Container.java:2099) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Window.dispatchEventImpl(Window.java:2478) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.Component.dispatchEvent(Component.java:4460) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) 11:00:27 [AWT-EventQueue-0] [error] EditBus: at java.awt.EventDispatchThread.run(EventDispatchThread.java:122)
sudo swapoff -a
sudo swapon -a
REGRESSIONS:
argument to Euler is not kept in the Project file;
http://semwebcentral.org/projects/swrl-test-suite/
DONE
TODO
UNUSED
AtomList
Class Variable is not used, but maybe not useful ?
The test:
Simple integer datatype rule samples. Covers the following
cases:
hasDataValue1(?i, ?v) -> Result1(?i)
hasDataValue1(?i, "3"^^integer) -> Result2(?i)
hasDataValue1(?i, ?v), greaterThanOrEqual(?v, "0"^^integer) -> Result3(?i)
hasDataValue1(?i, ?v), equal(?v, 3) -> Result4(?i)
hasDataValue2(?i, ?v), lessThan(?v, "9"^^integer) -> Result5(?i)
hasDataValue2(?i, ?v), lessThanOrEqual(?v, "9"^^integer) , greaterThanOrEqual(?v, "7"^^integer) -> Result6(?i)
Tests the rules by creating instances with hasDataValue1 and hasDataValue2 with various values and combinations.
In fact the implementation in N3 is the same for IndividualPropertyAtom and DatavaluedPropertyAtom.
Semantic Web for the Working Ontologist: Effective Modeling in RDFS and OWL (Paperback)
http://www.amazon.com/dp/0123735564/ref=cm_sw_su_dp
Title: The Linux Programmer's Toolbox
Author: John Fusco
http://www.techbookreport.com/tbr0304.html
Advances in Artificial Intelligence – SBIA 2004
Thanks to Jos
http://jamesrdf.blogspot.com/2009/04/in-searching-for-highlighting-mode-for.html
Downloaded sparql.lang from https://bugzilla.gnome.org/show_bug.cgi?id=583209
and added it in /usr/share/gtksourceview-2.0/language-specs/
I added there :
<property name="globs">*.n3</property> <property name="globs">*.nt</property> <property name="globs">*.ttl</property>
http://github.com/tialaramex/sparql-query/
It is a command line C tool; it compiles fine after installing packages :
libcurl-dev and libxml2-dev
Then I can start for example:
./sparql-query http://www4.wiwiss.fu-berlin.de/dblp/sparql \ 'SELECT * WHERE { ?s ?p ?o } LIMIT 10'
Upload a snapshot for revision 1631
Implement RIF builtins in Drools : func:substring ; ask to Martin what are his plans for SWRL builtins, maybe what he has for Jess is already usable.
The icon for Java import should not be UML.
Drag'n drop from an N3 Source onto anything, and especially another EG window.
The suffix for SPARQL file should be also rq .
This query does not bring all the used classes from DPBL.
SELECT DISTINCT ?Concept WHERE {?x a ?Concept}
For instance, are missing:
dblp:InCollection dblp:Book
When saving the SPARQL, re-run the SPARQL query.
For projects taking some time to open (e.g. dpbl.n3p), an hourglass, or another feedback is necessary.
Manage memory usage by Euler and Drools; kill these when the system is begining swapping.
N3 prefix management:
Question asked to Jos:
I get an infinite loop with findall : it may be normal or not ...
I try to get all the Knowledge Base as a list of triples.
If I match one of ?S ?P or ?O in the antecedent, the infinite loop is avoided.
Otherwise , the e:trace is not printed at all .
{
# :starting :from ?S .
_:d e:findall ( {?S ?P ?O} {
?S ?P ?O.
?P log:notEqualTo log:implies .
?P log:notEqualTo e:findall .
} ?L ).
_:d e:trace ( "after e:findall" ?L ).
} => {
:allKB :asList ?L .
} .
Solution from Jos De Roo : an infinite *list* is avoided with an additional
?P log:notEqualTo :asList .
in the WHERE clause of the e:findall .
https://help.ubuntu.com/community/SwapFaq
sudo sh -c "echo 30 > /proc/sys/vm/swappiness"
was a NullPointerException at eulergui.gui.controller.ApplicationKB.addN3Source:126
now the test suite passes
Extension points will not be added too often, but extensions will . So it is natural to think of the visitor design pattern. The element role in the visitor pattern will be played by Extension points, and the visitor role by extensions. To each Extension point, an event type is associated. ???????????
We should design the human visible outputs of EulerGUI:
We should design the intelligent extraction of data compatible with a query ; ask Martin what he thinks ... One idea is to limit a priori the depth of the extraction , for example in the FaceBook example it is 2 .
Note that RDF stores like Virtuoso that handle rdfs:subClassOf and rdfs:subPropertyOf could potentially with the same algorithms handle other transitive properties.
We are not in here :
http://www.bioontology.org/wiki/index.php/Main_Page
[PDF] Comparison of Triple Stores
http://www.bioontology.org/wiki/images/6/6a/Triple_Stores.pdf
OWLGRES from clarkparsia.com
http://clarkparsia.com/weblog/2008/03/23/owlgres-scalable-db/
SWAT Projects - the Lehigh University Benchmark (LUBM)
http://swat.cse.lehigh.edu/projects/lubm/
I installed BUM (Boot-Up Manager) on my laptop, plus ssh . Now I can have a shell on my laptop ( the keyboard on HP ProBook 4310S is so dull it's hardly readable ) :
ssh -X 192.168.1.59
Sent on 2010-05-11 :
http://sourceforge.net/mailarchive/forum.php?thread_name=...
http://dir.gmane.org/gmane.comp.java.drools.user
http://www.eclipse.org/articles/article.php?file=Article-JavaCodeManipulation_AST/index.html
09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.ArrayIndexOutOfBoundsException: Array index out of range: -1 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.gjt.sp.jedit.buffer.JEditBuffer.getLineOfOffset(JEditBuffer.java:333) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.gjt.sp.jedit.textarea.TextArea.getLineOfOffset(TextArea.java:1264) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.TextEditor$4.getToolTipText(TextEditor.java:524) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.gjt.sp.jedit.textarea.ExtensionManager.getToolTipText(ExtensionManager.java:135) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at org.gjt.sp.jedit.textarea.TextAreaPainter.getToolTipText(TextAreaPainter.java:663) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.ToolTipManager.checkForTipChange(ToolTipManager.java:622) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.ToolTipManager.mouseMoved(ToolTipManager.java:594) 09:57:23 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.AWTEventMulticaster.mouseMoved(AWTEventMulticaster.java:313)
From this N3:
{ _:d e:findall ( ?M { ?M :hasParameter [ :hasType "urn:java:eulergui.project.Project" ] . ?M :hasReturnType "" . } ?MLIST ) . } => { eg:answer eg:is ?MLIST . } .
which really means :
{ _:d e:findall ( ?M { ?M :hasParameter ?P . ?P :hasType "urn:java:eulergui.project.Project" . ?M :hasReturnType "" . } ?MLIST ) . } => { eg:answer eg:is ?MLIST . } .
This Drools does not compile:
rule "bb.n3 0" when $MLIST : TripleList( $MLIST_SIZE_ : size) from collect( $Triple_1 : Triple( $M : subject, predicate == "<http://simile.mit.edu/2004/09/ontologies/java#hasReturnType>", object == "\"\"" ) $Triple_2 : Triple( $hasType2 : subject, predicate == "<http://simile.mit.edu/2004/09/ontologies/java#hasType>", object == "\"urn:java:eulergui.project.Project\"" ) $Triple_3 : Triple( subject == $M, predicate == "<http://simile.mit.edu/2004/09/ontologies/java#hasParameter>", object == $hasType2 ) ) not( $Triple_4 : Triple( subject == "<http://eulergui.sf.net#answer>", predicate == "<http://eulergui.sf.net#is>", object == $MLIST ) ) then
Temporary conclusion : not feasible; maybe by turning the formula into a Drools rule; or by cascading "collect from" .
TODO
http://www.nridb.com/
OSGi and Equinox: Creating Highly Modular Java Systems <http://www.amazon.fr/gp/product/0321585712/ref=oss_product>
http://www.knopflerfish.org/osgi_service_tutorial.html
add in the ApplicationKB:
- instances of N3Source
- projects
- instances of ProjectGUI
WIP : some architecture to think about,like:
- why and how to have the same thing both as Triple and Assignement
- should we present a single facade to the rule engine or several objects like now ?
we actually need a singleton for the EulerGUI application
EulerGUI <>--- * ProjectGUI
EulerrGUI snapshot, revision : 1588
~/.m2/repository/org/drools/drools-compiler/5.1.0.M1/drools-compiler-5.1.0.M1.jar
these 2 projects were not working because of the presence of a query, although it is the same as the one in the sub-project:
nridb2sp.n3p test_person_import_old.n3p
il est clair que pour gérer les dépendances, il n'a pas besoin des déclarations de méthodes, il a seulement besoin des appels.
INFO: Résultat des triplets: 195
CORRECT: INFO: Résultat des triplets: 939
LA COMPILATION A LIEU DEUX FOIS
parserLink.parseAndUpdateSource(rdfModel);
A VOIR , produit :
10:11:56 [AWT-EventQueue-0] [notice] AWT-EventQueue-0: - 2
~/src/deductions_verbatim/n3/nridb2sp.n3p UTF8_STRING
alias pss="ps -o pid,sz,pcpu,args"
INFO: TripleLoadStore.load(): 0 triplets. Taille précédente: 4 567. 23:32:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 23:32:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.ClassCastException: n3_project.helpers.TripleResult cannot be cast to n3_project.helpers.Triple 23:32:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at unif.TripleStoreDrools.searchByPredicate(TripleStoreDrools.java:198) 23:32:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.ToolsManagement$1.windowOpened(ToolsManagement.java:277) 23:32:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at java.awt.Window.processWindowEvent(Window.java:1862) 23:32:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at javax.swing.JFrame.processWindowEvent(JFrame.java:274)
Tried the EulerGUI feature with :
/home/jmv/.m2/repository/org/drools/drools-compiler/5.1.0.M1/drools-compiler-5.1.0.M1.jar
Alas ! no methods nor fields in here .
Upload a snapshot for revision 1573
Work on a short presentation in french of Déductions .
These Java implemented extensions; see also here for rule base implemented extensions: Include rules to extend EulerGUI behavior .
There were strange errors on my desktop, in TestReasonning , TestSwingGeneration , TestGenericGuiGeneration,
but they could be reproduced individually, so I commit.
TestDroolsQuery passed
6 M src/main/java/unif/TripleStoreDrools.java
7 M src/main/java/unif/ITripleStoreRETE.java
8 M src/main/java/unif/Instanciator.java
9 M src/main/resources/eulergui/gui/controller/project-java-rules.n3
src/main/java/unif/TripleStoreDrools.java src/main/java/unif/ITripleStoreRETE.java src/main/java/unif/
svn commit -m 'N3JavaMappingBuiltin : WIP : more harmless stuff to pave the way: N3JavaMappingBuiltin.java is not actually used in the trunk' \
src/main/java/n3_project/helpers/N3TranslationPlugin.java src/main/java/n3_project/helpers/N3JavaMappingBuiltin.java
svn commit -m 'install_packages_ubuntu.sh and demo.sh update from recent demo in Paris' install_packages_ubuntu.sh demo.sh
----------------------------
was missing in previous commit
OK
javaObjectsInDrools
src/main/java/unif/N3JavaHelper.java \
src/main/java/n3_project/helpers/N3SourcetoDrools.java \
src/main/java/eulergui/project/Project.java \
src/main/java/n3_project/helpers/DroolsTripleHandler.java \
src/main/java/unif/N3JavaHelper.java \
src/main/java/n3_project/helpers/Assignment.java
? src/main/java/unif/TripleStoreDrools.java
( src/main/java/n3_project/helpers/N3JavaMappingBuiltin.java )
Semantic Web Drools Module, Request for Feedbak
http://drools-java-rules-engine.46999.n3.nabble.com/Semantic-Web-Drools-Module-Request-for-Feedbak-td64822.html
Uploaded snapshot
Revision 1550 - Directory Listing
Modified Fri Apr 30 15:50:43 2010 UTC (54 minutes, 1 second ago) by jmvanel
class Project : if infrastructure_project , do not prepareWMEarly
( avoids unnecessary Drools compilation for SWRLTranslator )
T E S T S
-------------------------------------------------------
Running eulergui.parser.n3.impl.parser4j.service.TestForJos
Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.905 sec
Running eulergui.gui.TestEulerGUITooltip
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 17.958 sec
Running eulergui.parser.n3.impl.parser4j.service.bugs.TestN3ForBugs
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.153 sec
Running eulergui.gui.TestEulerGUIInputs
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.579 sec
Running eulergui.parser.n3.impl.parser4j.service.TestN3FileParser
Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.713 sec
Running n3_project.helpers.TestSimplifiedURI
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.015 sec
Running eulergui.gui.TestJavaEditor
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 49.506 sec
Running deductions.runtime.TestRulesForUserEvents
Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 36.472 sec
Running eulergui.project.TestN3Source
Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec
Running n3_project.helpers.TestDroolsQuery
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESSFUL
http://attempto.ifi.uzh.ch/aceview/#Text view
n3_project.helpers.TestDroolsQuery
eulergui.inputs.TestLineTracking
Error:
"Menu pushing: (JMenuItem with text "File", JMenuItem with text "Export as XML")" action has not been produced in 61715 milliseconds
Error:
"Menu pushing: (JMenuItem with text "File", JMenuItem with text "Export as XML")" action has not been produced in 80001 milliseconds
Thread blocking:
Thread [Thread-258] (Suspended) Waiter.waitAction(Object) line: 147 QueueJMenuDriver.runAction(QueueJMenuDriver$OneReleaseAction, ComponentOperator, long, String) line: 188 QueueJMenuDriver.pushMenu(ComponentOperator, PathChooser) line: 155 JMenuBarOperator$1.launch(Object) line: 225 ActionProducer.launchAction(Object) line: 317 ActionProducer.run() line: 276
________________________________
Thread [AWT-EventQueue-1] (Suspended) Object.wait(long) line: not available [native method] QueueTool$JemmyQueue(Object).wait() line: 485 [local variables unavailable] QueueTool$JemmyQueue(EventQueue).getNextEvent() line: 479 [local variables unavailable] EventDispatchThread.pumpOneEventForFilters(int) line: 236 EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184 EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174 EventDispatchThread.pumpEvents(int, Conditional) line: 169 EventDispatchThread.pumpEvents(Conditional) line: 161 EventDispatchThread.run() line: 122
Uploaded a snapshot
svn commit "/home/jmv/src/eulergui/src/main/java" -m \
"SWRLTranslator: when it looks for SWRL rules after Project loading, it only looks in RDF files.
NOTE: the test suite was broken with out of memory, due to SWRLTranslator looking in all files;
I don't know why."
M /home/jmv/src/eulergui/src/main/java/eulergui/drools_engine/ParserLink.java
M /home/jmv/src/eulergui/src/main/java/eulergui/tools/SWRLTranslator.java
M /home/jmv/src/eulergui/src/main/java/n3_project/helpers/N3SourcetoDrools.java
Transmitting file data: /home/jmv/src/eulergui/src/main/java/eulergui/drools_engine/ParserLink.java
Transmitting file data: /home/jmv/src/eulergui/src/main/java/eulergui/tools/SWRLTranslator.java
Transmitting file data: /home/jmv/src/eulergui/src/main/java/n3_project/helpers/N3SourcetoDrools.java
Committed revision 1543
T E S T S ------------------------------------------------------- Running eulergui.parser.n3.impl.parser4j.service.TestForJos Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.705 sec Running eulergui.gui.TestEulerGUITooltip Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 18.027 sec Running eulergui.parser.n3.impl.parser4j.service.bugs.TestN3ForBugs Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.165 sec Running eulergui.gui.TestEulerGUIInputs Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 9.142 sec Running eulergui.parser.n3.impl.parser4j.service.TestN3FileParser Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.666 sec Running n3_project.helpers.TestSimplifiedURI Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 sec Running eulergui.gui.TestJavaEditor Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 48.164 sec Running deductions.runtime.TestRulesForUserEvents Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 35.862 sec Running eulergui.project.TestN3Source Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec Running n3_project.helpers.TestDroolsQuery
google alerts manage
http://www.google.fr/alerts/manage?hl=fr&gl=fr
DISPLAY=:1 LANG=en mvnDebug -DargLine="-DPARSER4J_TESTS=no" -DforkMode=never --no-plugin-updates --offline test
DISPLAY=:1 LANG=en mvnDebug -DargLine="-DPARSER4J_TESTS=no" -DforkMode=never --no-plugin-updates --offline -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test
mvn -Dmaven.surefire.debug="-Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 -Xnoagent -Djava.compiler=NONE" test
T E S T S ------------------------------------------------------- Running eulergui.parser.n3.impl.parser4j.service.TestForJos Tests run: 3, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.997 sec Running eulergui.gui.TestEulerGUITooltip Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 16.187 sec Running eulergui.parser.n3.impl.parser4j.service.bugs.TestN3ForBugs Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.03 sec Running eulergui.gui.TestEulerGUIInputs Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 8.331 sec Running eulergui.parser.n3.impl.parser4j.service.TestN3FileParser Tests run: 34, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.706 sec Running n3_project.helpers.TestSimplifiedURI Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.014 sec Running eulergui.gui.TestJavaEditor Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 51.822 sec Running deductions.runtime.TestRulesForUserEvents Tests run: 4, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 35.026 sec Running eulergui.project.TestN3Source Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.004 sec Running n3_project.helpers.TestDroolsQuery [INFO] ------------------------------------------------------------------------ [ERROR] BUILD FAILURE [INFO] ------------------------------------------------------------------------ [INFO] There are test failures.
The Eclipse Platform Architecture - Rawn Shah (rawn@us.ibm.com) - 1 November 2001
http://www.ibm.com/developerworks/library/eclipse2/
Middleware Architecture with Patterns and Frameworks
Chapter 7 Composition [© 2003-2009 S. Krakowiak,
http://sardes.inrialpes.fr/~krakowia/MW-Book/Chapters/Compo/compo.html
TODO
DONE
BUG FIX: Re-tested SPARQL GUI : create a new SPARQL source, in the project's directory or elsewhere
- In SWRLTranslator.projectLoaded() call new method Project.n3SourcesSafeCopy() to avoid ConcurrentModificationException, thrown in project examples/car_ace.owl.n3p
- also refactor to call Project.n3SourcesSafeCopy() in other places
http://www.w3.org/TR/owl2-profiles/#OWL_2_RL
N3SourcetoDrools.translate(IRDFIterator iterator) : better separate fact and rule processing, so that an error in Drools compilation does not prevent the fact processing to occur.
This will be good for tooltip in editor, for N3 sources mixing facts and rules .
Had a little conversation with kennyluck
http://people.csail.mit.edu/kennyluck/
on swig IRC
jvm, I totally refuse to create any newterms
update CHANGELOG for version 1.6
Installed al on my new laptop :).
OK:
replaceValue: retract [fact 0:1:195245781:-259644983:1:<http://exampleS.com#S> <http://exampleS.com#P> <http://exampleS.com#O> .
If I click on :name in person-app-spec.n3 in project person_import3.n3p , I get this query :
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . { <http://www.w3.org/2000/01/rdf-schema#label> rdfs:label ?DETAIL } => { <http://www.w3.org/2000/01/rdf-schema#label> rdfs:label ?DETAIL}.
what is needed is :
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . { <http://jmvanel.free.fr/ontology/examples/person#name> <http://www.w3.org/2000/01/rdf-schema#label> ?DETAIL } => { <http://jmvanel.free.fr/ontology/examples/person#name> <http://www.w3.org/2000/01/rdf-schema#label> ?DETAIL }.
Add Drools variables for each triplet, e.g. :
rule "rpo-rules-small.n3 0"
When
$ Triple_1: Triple ($ A: subject, predicate == "<http://www.w3.org/2000/01/rdf-schema#subClassOf>", $ B: object)
This will enable new features in the translation, like accessing to a list through another Triple matched in same rule.
Still working on lists in Drools, which are necessary to run the rules with OWL Jos generator application.
I update the example, adding the missing N3 ontologies. Now all what is missing are my predicates :( .
eulergui /home/jmv/src/deductions/n3_new/model-rules-coherence.n3p &
Open this project:
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/owl/busLines.n3p
OK !
Add this URL in an empty project:
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/owl/busLine.owl
: busLine.owl.rules.n3 added in current directory (OK), but :
eulergui.gui.view.QueryView is added twice when e.g. I remove a source :
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 32 in ProjectChangeSupport)) ProjectChangeSupport.addProjectListener(ProjectListener) line: 32 Project.addProjectListener(ProjectListener) line: 1627 SourceFilesView.makeButtonsPanel() line: 33 SourceFilesView$2.actionPerformed(ActionEvent) line: 201 JButton(AbstractButton).fireActionPerformed(ActionEvent) line: not available AbstractButton$Handler.actionPerformed(ActionEvent) line: not available DefaultButtonModel.fireActionPerformed(ActionEvent) line: not available DefaultButtonModel.setPressed(boolean) line: not available BasicButtonListener.mouseReleased(MouseEvent) line: not available AWTEventMulticaster.mouseReleased(MouseEvent) line: not available JButton(Component).processMouseEvent(MouseEvent) line: not available JButton(JComponent).processMouseEvent(MouseEvent) line: not available JButton(Component).processEvent(AWTEvent) line: not available JButton(Container).processEvent(AWTEvent) line: not available JButton(Component).dispatchEventImpl(AWTEvent) line: not available JButton(Container).dispatchEventImpl(AWTEvent) line: not available JButton(Component).dispatchEvent(AWTEvent) line: not available LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: not available LightweightDispatcher.processMouseEvent(MouseEvent) line: not available LightweightDispatcher.dispatchEvent(AWTEvent) line: not available ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: not available ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: not available ProjectGUI(Component).dispatchEvent(AWTEvent) line: not available EventQueue.dispatchEvent(AWTEvent) line: not available EventDispatchThread.pumpOneEventForFilters(int) line: not available EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: not available EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: not available EventDispatchThread.pumpEvents(int, Conditional) line: not available EventDispatchThread.pumpEvents(Conditional) line: not available EventDispatchThread.run() line: not available
For plain N3 URI
In an N3 query, one can use substring-after ( tested in test/concatenationQ.n3 ) to get the list of possible completions . When substring-after returns an empty string, it is not a possible completion.
One would also like to have the details about the completed suggestions. To do that, one can combine this with implementation for ordinary tooltips.
For this a rule base can do all the job, returning e.g. triples like:
eg:completion <http:my.com/foo#bar> "Foo Bar: the property FooBar means ..." .
The object could be formatted in HTML.
For prefixed N3 URI
It is more complicated, but one can get a map of prefix associations from
ParserLink.getKnownURIPrefixes()
Then, if the string to complete does not begin with "<" , nor is a number, nor a blank node, and does not include a ":", the Known URI Prefixes can be used for completion.
If the string to complete does include a ":", then expand the prefix abbreviation, and use plain N3 URI algorithm.
Inactivated sources
Inactivated sources should also be searched by the N3 editor to provide labels and comments about the predicates and classes. To achieve that, one possible design is to have an extra KB containing all the inactivated sources. This extra KB will be serached the same way as the main user KB for labels and comments.
When we will integrate the rules to flag undeclared terms, the generated declarations will be added to Inactivated sources, as well as a list of classic ontologies like OWL, FOAF, etc , if they are effectively used.
What is the right word to designate one of the 3 parts of an RDF statement ? term ?
Yes, confirmation here: http://www.w3.org/TR/rdf-sparql-query/#sparqlBasicTerms (thanks to shellac on SWIG IRC ).
http://www.ostatic.org/jxml2owl
JXML2OWL Project is divided in two sub projects: JXML2OWL API, a library for mapping XML schemas to OWL Ontologies on the JAVA plaform. JXML2OWL Mapper, an easy to use standalone application with a graphical user interface using the JXML2OWL API.
How to bypass most of syntaxic sugar with CWM:
cwm --n3=lst examples/people_pets-small.n3
test/findall3.n3p
I simplified Olivier's example; see "Test Olivier's bus line example with ACE View ".
Note that putting "and A has location X" is an error, ACE View thinking that X is declared twice.
If a busLine B has a departureTown D ,
and B has an arrivalTown A ,
and D has a location X ,
and A has X
then the busLine B is a localBusLine .
Alas! Still useless variable creation:
arrivalTown(?x4) , busLine(?x1) , departureTown(?x2) , location(?x6) , have(?x1, ?x2) , have(?x1, ?x4) , have(?x2, ?x6) , have(?x4, ?x6) -> localBusLine(?x9) ∧ sameAs(?x1, ?x9)
Then, because the variable B was causing problem, I removed it :
If a busLine has a departureTown D
and the busline has an arrivalTown A
and D has a location X
and A has X
then the busLine is a localBusLine .
But the busline reference on line 2 was not understood, with an "anaphoric" message.
And, although this sentence looks "OWL-izable" , this is a wrong interpretation:
busLine and have some (departureTown and have some (location and inv(have) some (arrivalTown and inv(have) some busline))) subClassOf localBusLine
And the paraphrase clearly shows that this a wrong interpretation:
If a busLine X1 has a departureTown X2
and the departureTown X2 has a location X3
and a n : busline has an arrivalTown X4
and the arrivalTown X4 has the location X3
then the busLine X1 is a localBusLine .
Alas! If I add to the paraphrase above the intended X1 reference at line 3, we still have useless variable creation in the SWRL.
If a busLine X1 has a departureTown X2,
and the departureTown X2 has a location X3,
and X1 has an arrivalTown X4,
and the arrivalTown X4 has the location X3
then the busLine X1 is a localBusLine .
Permuting terms does not help:
If a busLine X1 has a departureTown X2
and X1 has an arrivalTown X4
and the arrivalTown X4 has a location X3
and the departureTown X2 hasthe location X3
then the busLine X1 is a localBusLine .
With a better domain modeling, we still have useless variable creation in the SWRL; the problem is related to this reasonning pattern, that is , this pattern of navigating the object properties and common variables :
If a busLine X1 has-as-departure a town X2,
and X1 has-as-arrival a town X4,
and the town X4 belongs-to a country X3,
and the town X2 belongs-to the country X3
then the busLine X1 is a nationalBusLine .
How to make object property predicates in ACE View : simply use the predicate as a verb: examples:
Ind172872104613704311 has-as-departure Toulouse .
Ind172872104613704311 has-as-arrival Paris .
Paris belongs-to France .
Toulouse belongs-to France .
France is a country .
Every town belongs-to one country .
Sent on 2010-05-11 :
http://sourceforge.net/mailarchive/forum.php?thread_name=...
class uk.ac.manchester.cs.owl.owlapi.turtle.parser . TurtleParser is Generated By:JavaCC
Here is a file showing the problem:
@prefix owl: <http://www.w3.org/2002/07/owl#> . <> a owl:Ontology.
<> owl:imports <onto.n3> .
Here is the stack:
Exception in thread "main" java.lang.IllegalArgumentException: URI is not absolute
at java.net.URI.toURL(URI.java:1080)
at uk.ac.manchester.cs.owl.owlapi.ParsableOWLOntologyFactory.canLoad(ParsableOWLOntologyFactory.java:120)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:627)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:584)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadImports(OWLOntologyManagerImpl.java:967)
at uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.makeLoadImportRequest(OWLOntologyManagerImpl.java:988)
at org.coode.owlapi.rdfxml.parser.TPImportsHandler.handleTriple(TPImportsHandler.java:79)
at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.handleStreaming(OWLRDFConsumer.java:1428)
at org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.statementWithResourceValue(OWLRDFConsumer.java:1392)
at uk.ac.manchester.cs.owl.owlapi.turtle.parser.OWLRDFConsumerAdapter.handleTriple(OWLRDFConsumerAdapter.java:67)
at uk.ac.manchester.cs.owl.owlapi.turtle.parser.TurtleParser.parseObject(TurtleParser.java:345)
I compared the situation with the RDF Parser, when also processing a relative URI.
In this case, this is where the URI resolving occurs for an RDF file:
Thread [main] (Suspended) RDFXMLParser$1(RDFParser).resolveIRI(String) line: 396 RDFXMLParser$1(RDFParser).getIRIFromResource(String) line: 450 RDFXMLParser$1(RDFParser).getNodeIDResourceResourceIRI(Attributes) line: 500 RDFParser$EmptyPropertyElement.startElement(String, String, String, Attributes) line: 966 RDFParser$PropertyElementList.startElement(String, String, String, Attributes) line: 853 RDFXMLParser$1(RDFParser).startElement(String, String, String, Attributes) line: 240 RDFXMLParser$1.startElement(String, String, String, Attributes) line: 63 SAXParserImpl$JAXPSAXParser(AbstractSAXParser).startElement(QName, XMLAttributes, Augmentations) line: not available SAXParserImpl$JAXPSAXParser(AbstractXMLDocumentParser).emptyElement(QName, XMLAttributes, Augmentations) line: not available XMLNSDocumentScannerImpl.scanStartElement() line: not available XMLNSDocumentScannerImpl$NSContentDriver(XMLDocumentFragmentScannerImpl$FragmentContentDriver).next() line: not available XMLNSDocumentScannerImpl(XMLDocumentScannerImpl).next() line: not available XMLNSDocumentScannerImpl.next() line: not available XMLNSDocumentScannerImpl(XMLDocumentFragmentScannerImpl).scanDocument(boolean) line: not available XIncludeAwareParserConfiguration(XML11Configuration).parse(boolean) line: not available XIncludeAwareParserConfiguration(XML11Configuration).parse(XMLInputSource) line: not available SAXParserImpl$JAXPSAXParser(XMLParser).parse(XMLInputSource) line: not available SAXParserImpl$JAXPSAXParser(AbstractSAXParser).parse(InputSource) line: not available SAXParserImpl$JAXPSAXParser.parse(InputSource) line: not available SAXParserImpl(SAXParser).parse(InputSource, DefaultHandler) line: not available RDFXMLParser$1(RDFParser).parse(InputSource, RDFConsumer) line: 139 RDFXMLParser.parse(OWLOntologyDocumentSource, OWLOntology) line: 88 ParsableOWLOntologyFactory.loadOWLOntology(OWLOntologyDocumentSource, OWLOntologyFactory$OWLOntologyCreationHandler) line: 165 OWLOntologyManagerImpl.loadOntology(IRI, OWLOntologyDocumentSource) line: 632 OWLOntologyManagerImpl.loadOntologyFromOntologyDocument(IRI) line: 590 LoadingOntologiesArgument.main(String[]) line: 41
So that, when ParsableOWLOntologyFactory.canLoad() does the checking of the import for an RDF file, the URI has already been resolved :
Thread [main] (Suspended) ParsableOWLOntologyFactory.canLoad(OWLOntologyDocumentSource) line: 115OWLOntologyManagerImpl.loadOntology(IRI, OWLOntologyDocumentSource) line: 627 OWLOntologyManagerImpl.loadOntology(IRI) line: 584 OWLOntologyManagerImpl.loadImports(OWLImportsDeclaration) line: 967 OWLOntologyManagerImpl.makeLoadImportRequest(OWLImportsDeclaration) line: 988 TPImportsHandler.handleTriple(IRI, IRI, IRI) line: 79 OWLRDFConsumer.handleStreaming(IRI, IRI, IRI) line: 1428 OWLRDFConsumer.statementWithResourceValue(String, String, String) line: 1392 RDFXMLParser$1(RDFParser).statementWithResourceValue(String, String, String, String) line: 520 RDFParser$EmptyPropertyElement.startElement(String, String, String, Attributes) line: 969 RDFParser$PropertyElementList.startElement(String, String, String, Attributes) line: 853 RDFXMLParser$1(RDFParser).startElement(String, String, String, Attributes) line: 240
The common part of the stacks for Turtle and RDF/XML is in blue.
As for the remedy, somehow the resolving that is done by this line 966 in RDFParser :
String objectIRI = getNodeIDResourceResourceIRI(atts);
should be factored and reused in the Turtle parser.
The real job occurs at line 381 in RDFParser :
protected String resolveIRI(String uri) throws SAXException {
Maybe this is the method to factor out in a new class
IRIResolver
, along with fields:
m_baseIRI , resolvedIRIs , uriCache
and method
public IRI getIRI(String s) {
Then where to reuse that new class IRIResolver in TurtleParser ?
Probably somewhere in the common blue part.
I think about the method getIRI() in OWLRDFConsumer , that is called for subject, predicate and object in statementWithResourceValue() :
private IRI getIRI(String s) {
This getIRI() uses a field iriProvider , that is null , at least when using a variant of the example LoadingOntologiesArgument .
Upload a revision : Revision 1458
Modified Thu Apr 15 14:11:25 2010 UTC (8 minutes, 59 seconds ago) by iamlolive
euler arguments are now windows-compatible.
After commit 1454 - Directory Listing
Modified Thu Apr 15 08:48:58 2010 UTC (99 minutes, 15 seconds ago) by iamlolive
euler arguments are now windows-compatible.
will it break on other OSes ????
YAP version Yap-5.1.3 starting 50 [msec cputime] 76 [msec walltime] GET "/tmp/translation-6504600651148100459.n3" ** ERROR ** "/tmp/translation-6504600651148100459.n3" ** error(existence_error(source_sink,/home/jmv/src/eulergui/"/tmp/translation-6504600651148100459.n3"),[open/3|local_sp(143511768,143511608,[],[])]) GET "/home/jmv/src/deductions/owl/busLine.owl.rules.n3" ** ERROR ** "/home/jmv/src/deductions/owl/busLine.owl.rules.n3" ** error(existence_error(source_sink,/home/jmv/src/eulergui/"/home/jmv/src/deductions/owl/busLine.owl.rules.n3"),[open/3|local_sp(143511768,143511608,[],[])]) GET "/home/jmv/src/eulergui/examples/catch_allQ.n3" ** ERROR ** "/home/jmv/src/eulergui/examples/catch_allQ.n3" ** error(existence_error(source_sink,/home/jmv/src/eulergui/"/home/jmv/src/eulergui/examples/catch_allQ.n3"),[open/3|local_sp(143511768,143511608,[],[])]) networking 0 [msec cputime] 3 [msec walltime] reasoning 0 [msec cputime] 0 [msec walltime]
cd ~/src/SWRLTestSuite
grep --no-filename swrl:builtin **/*.owl | sed -e 's/^ *//' | sort | uniq
...
swrl:builtin swrlb:contains ;
swrl:builtin swrlb:containsIgnoreCase ;
swrl:builtin swrlb:equal ;
swrl:builtin swrlb:greaterThanOrEqual ;
swrl:builtin swrlb:lessThan ;
swrl:builtin swrlb:lessThanOrEqual ;
swrl:builtin swrlb:stringConcat ;
swrl:builtin swrlb:stringEqualIgnoreCase ;
swrl:builtin swrlb:stringLength ;
swrl:builtin swrlb:substring ;
I first take this one from ex4 :
[] a swrl:Imp ;
swrl:body ([ a swrl:BuiltinAtom ;
swrl:arguments ("abc"^^xsd:string ""^^xsd:string "abc"^^xsd:string) ;
swrl:builtin swrlb:stringConcat
]) ;
swrl:head ([ a swrl:ClassAtom ;
swrl:argument1 <http://www.semanticweb.org/ontologies/2009/6/test2b> ;
swrl:classPredicate Ontology1247016916140:Result2
]) .
swrl-n3-rules.n3 updated.
See my mails on the Attempto list:
https://lists.ifi.uzh.ch/pipermail/attempto/2010-April/thread.html
% ./ape.exe -solo paraphrase -guess -text \ "The distance X traveled by a mobile is (1/2)*G*T*T . G is the acceleration . T is the elapsed time."
There is something X1.
There is something X2.
There is a n:distance X3.
The n:distance X3 is ( ( ( ( 1 / 2 ) * X2 ) * X1 ) * X1 ) traveled by a n:mobile .
X2 is an n:acceleration .
X1 is an a:elapsed n:time .
Better sentence given by Norbert:
For all acceleration G for all elapsed-time T the distance that a mobile travels is 1/2*G*T*T.
This is not only simpler, but also relates the variables, and most importantly uses universal quantification.
But that does not work any more in ACE View .
Dialog with Norbert on the list:
I would have written your sentence as
For all acceleration G for all elapsed-time T the distance that a mobile travels is 1/2*G*T*T.
This is not only simpler, but also relates the variables, and most importantly uses universal quantification.
Agreed about that.
But I see that even the experts can guess imperfectly ACE text.
Your original sentence has no paraphrase at all :
./ape.exe -solo paraphrase -guess -text "For all acceleration G for all elapsed-time T the distance that a mobile travels is 1/2*G*T*T."
# ...
Looking at the DRS for a simpler sentence I saw that "all" with singular is for mass nouns only :
./ape.exe -solo drs -guess -text "For all acceleration there is a distance."
drs([], [=>(drs([A], [object(A, acceleration, mass, na, na, na)-1/5]), drs([B], [object(B, distance, countable, na, eq, 1)-1/11]))])
So I then tried :
./ape.exe -solo paraphrase -guess -text "For each acceleration G for each elapsed-time T the distance that a mobile travels is 1/2*G*T*T."
If there is an n:acceleration X1 then if there is an n:elapsed-time X2 then a n:distance X3 is ( ( ( ( 1 / 2 ) * X1 ) * X2 ) * X2 ) and a n:mobile v:travels the n:distance X3.
which is not too bad, but the relation with the mobile is not semantically correct.
After 15 mn of trials and errors, I found this to be satisfying with ACE :
./ape.exe -solo paraphrase -guess -text "For each mobile M for each acceleration G for each elapsed-time T the distance that M travels during the elapsed-time T is 1/2*G*T*T ."
If there is a n:mobile X1 then if there is an n:acceleration X2 then if there is an n:elapsed-time X3 then a n:distance X4 is ( ( ( ( 1 / 2 ) * X2 ) * X3 ) * X3 ) and the n:mobile X1 v:travels the n:elapsed-time X3 the n:distance X4.
The transitive verb travels has two complements, but one is of type distance , and the other of type elapsed-time, which is good for me.
Finally, I adapted this sentence to ACEView by transforming intransitive verbs into transitive ( e.g. travels-during ) , and removing one of the complements of travel.
But this brings the feared message: "the snippet contains no ACE syntax errors, but cannot be expressed in OWL/SWRL" .
And no more message :( !
For each mobile M for each n : acceleration G for each elapsed-time T there is a distance D such
that M travels-during the elapsed-time T ,
and D is ( 1 / 2 ) * G * T * T .
PENDING <<<<<<<<<
The ACE View text:
If a busLine B has a departureTown D
and B has an arrivalTown A
and D has a location X
and A has a location Y
and X is Y
then the busLine B is a localBusLine .
The SWRL translation:
arrivalTown(?x4) , busLine(?x1) , departureTown(?x2) , location(?x6) , location(?x8) , have(?x1, ?x2) , have(?x1, ?x4) , have(?x2, ?x6) , have(?x4, ?x8) , sameAs(?x6, ?x8) -> localBusLine(?x11) ∧ sameAs(?x1, ?x11)
Variable correspondance
# x4 -> t0 arrivalTown A
# x2 -> t2 departureTown D
# x1 -> t1 busLine B
# x6 -> t3 location X
# x8 -> t4 location Y
N3 Translation:
{ ?t0 a ns1:arrivalTown. ?t1 a ns1:busLine. ?t2 a ns1:departureTown. ?t3 a ns1:location. ?t4 a ns1:location. ?t1 ns1:have ?t2. ?t1 ns1:have ?t0. ?t2 ns1:have ?t3. ?t0 ns1:have ?t4. ?t3 log:equalTo ?t4 } => {?t5 a ns1:localBusLine}.
Remarks about the model :
this explains why there is no inference is made
two different object predicates should be used;
ACE View Remarks:
Installed eclipse 3.5.2 + SVNKIit 1.3.0 .
svn update -r 1442
https://wiki.bc.net/atl-conf/display/BCNETPUBLIC/SADI+Semantic+Web+Services+-+Find,+Integrate,+Analyze,+Discover
With the people and pets example froom ACE View, and this application specification:
@prefix people_pets_ace: <http://deductions.sourceforge.net/ontologies/2010/3/people_pets_ace.owl#> . # create an application from the ontology @prefix app: <http://jmvanel.free.fr/ontology/software_applications.owl#> . :GUI a app:SoftwareApplication . :GUI app:editedClass people_pets_ace:person .
I get this:
10:28:31 [AWT-EventQueue-0] [notice] AWT-EventQueue-0: #TRACE ( :form_no_subclasses :DEBUG _:_258 ) 10:28:31 [AWT-EventQueue-0] [notice] AWT-EventQueue-0: #TRACE ( :form_no_subclasses :DEBUG <http://deductions.sourceforge.net/ontologies/2010/3/people_pets_ace.owl#dog> ) 13 avr. 2010 10:31:55 sun.awt.X11.XToolkit processException ATTENTION: Exception on Toolkit thread java.lang.OutOfMemoryError: GC overhead limit exceeded
It is clear that in no way is dog a sub-class of person !
Adding a trace by gvim at the end of each rule:
1,$s/\} \?\./ _:d eg:trace "" . \} ./
I made a reduced RDF + OWL rules rpo-rules-small.n3 ; now the inference does not go into an infinite loop ! :) . But no content in the window ! From the Person class , I expect a button for each sub-class ( the Person class has no specific properties ).
Henry, available at: http://code.google.com/p/km-rdf/
It includes a DCG for N3, allowing you to store N3 data within SWI-Prolog:
http://code.google.com/p/km-rdf/source/browse/trunk/n3/n3_dcg.pl
It also includes a n3_entailment module, which you can load within the
SWI-Prolog SPARQL server to hook up N3 inferencing process on SPARQL queries.
<> owl:imports <plants.n3> . # KO: IllegalArgumentException: URI is not absolute
4h
we need the association between row numbers and columns on the Statements;
to navigate from a resource to its definition, we assume it is declared in the project, and since the "user data KB" contains all triples of the project, a simple rule and query can do the job
3h
http://www.eclipse.org/articles/Article-Plug-in-architecture/plugin_architecture.html
The base DTD for eclipse plugins:
<?xml encoding="US-ASCII"?> <?eclipse version="3.2"?> <!ELEMENT plugin (extension-point*, extension*)> <!ELEMENT fragment (extension-point*, extension*)> <!ELEMENT extension-point EMPTY> <!ATTLIST extension-point name CDATA #REQUIRED id CDATA #REQUIRED schema CDATA #IMPLIED > <!ELEMENT extension ANY> <!ATTLIST extension point CDATA #REQUIRED name CDATA #IMPLIED id CDATA #IMPLIED >
svn co https://owlapi.svn.sourceforge.net/svnroot/owlapi/v3/trunk owlapi_v3
Mail sent to the list.
In EulerGUI we need to add other data sources, like Java source code (and other programming languages), Javadoc, various databases (JDBC, XML-DB, no-SQL stores), AI sources (KIF, CLIPS, TPTP, ...). Right now we plan Java source code and Javadoc. This interface is enough to model a source factory :
interface N3SourceFactory { N3Source createFromURI( URI uri, URI baseUri ) throws N3SourceException; }
Then we need to to track all places where , e.g. , N3SourceFromRDF is created, and replace the call to constructor with a loop on all the N3SourceFactories . Plus a piece of code to setup all the N3SourceFactories; or use eclipse extension point mechanism?
We can't go on doing ad-hoc developments for each new data source. The problematic is the same for inference engines.
We got to have some plugin architecture. I will have a look at OSGi .
Extension points
One thing that is not clear is the relationship of eclipse style "extension points" with OSGi. Also the annoying thing is that the interfaces at an extension point are not enforced, and not documented in the plugin.xml files. Another annoying thing is that there are 3 kinds of configuration: plugin.xml, MANIFEST.MF, and properties files. For example I had a look at documentProviders Extension Points Reference ;
documentProviders Extension Points Reference on help.eclipse.org .
It's also clear from this discussion on protege wiki that the implemented interfaces are not enforced :
http://protegewiki.stanford.edu/index.php/PluginAnatomy#Adding_New_Plugin_Types
In this example what the infrastructure brings is the ability to find all instances of the Extension point through this class:
org.protege.editor.core.plugin.AbstractPluginLoader
It seems that at one moment Matthew Horridge used the JPF (Java Plug-in Framework) .
Protégé plugins
To kill two birds with one stone, I'll have a look at Protégé plugins :
http://protegewiki.stanford.edu/index.php/PluginAnatomy
Another question is : will Protégé Felix plugins work with Maven
http://felix.apache.org/site/apache-felix-maven-bundle-plugin-bnd.html ?
Does anybody know how to make a tab for P4.1 using Java in Eclipse?
There is a web site here [1] that talks about how to make a tab plugin for Protege 4.1. Usually there is no reason to write any code. A tab plugin developer will usually only need to write code to implement any new views that show up in his tab. The development of a view plugin is described in [2].
These pages do describe things at the level of raw java. They do not discuss the pointing and clicking and the many user preferences that are involved in setting up an ide. The ide construction is described elsewhere [3]. In particular for working with Protege 4.1 (recommended for new plugins) in eclipse, people seem to think that the [4] page is very easy to use.
I would not say that [1,2] are unix specific; I have seen windows users who are quite proficient on the command line.
-Timothy
[1] http://protegewiki.stanford.edu/index.php/PluginAnatomy#Tab_Plugins_and_the_Viewconfig.xml_File
[2] http://protegewiki.stanford.edu/index.php/PluginAnatomy#Adding_a_View_Plugin_to_the_Plugin.xml_file
[4] http://protegewiki.stanford.edu/index.php/CompileProtege4InEclipseFromSvn
I play with the Protégéplugin architecture; for now is an empty plugin.
There are 2 copies of the "vacuous plugin in five minutes" :
http://protegewiki.stanford.edu/index.php/PluginAnatomy
Problem starting plugin eulergui plugin org.osgi.framework.BundleException: Unresolved constraint in bundle net.sf.eulergui [11]: module; (bundle-symbolic-name=org.semanticweb.owlapi.owlapi) at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3263) at org.apache.felix.framework.Felix.startBundle(Felix.java:1597) at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:915)
Solved! In META-INF/MANIFEST.MF this must be changed to reflect the last package name in OWLAPI:
Require-Bundle: org.eclipse.equinox.registry,
org.eclipse.equinox.common,
org.protege.editor.core.application,
org.protege.editor.owl,
org.semanticweb.owl.owlapi
Which means that this file is wrong on Protégé 4.1 Subversion:
protege-base/etc/template-plugin-build.xml
It works! Upon stating of Protégé:
Installed plugin plugin eulergui eulergui plugin Plugin has no plugin.xml resource
Timothy's answer:
It should probably be :
getClassesInSignature(true)
yes.
But the source code for this small class Metrics is not available anywhere !
It is here (for 4.1)
http://smi-protege.stanford.edu/repos/protege/protege4/misc/examples/plugin/trunk/example.lib
http://sourceforge.net/projects/eulergui/files/
By comparison Adam Pease's Sigma is at 4400 :
https://sourceforge.net/projects/sigmakee/files/
I translated into N3 rules OWL subclass assertions involving anonymous classes into N3 rules , e.g .
[from ACE View example] Every person that has-as-pet at least 3 things is an animal-lover.
It WORKS !
Mail sent to Martin, Jos, Eulergui-users, ...
Hi all
This morning I attacked the translation of complex OWL expressions into N3 rules. I took the people and pets example from aceview Examples .
From there I translated an OWL subclass assertion involving anonymous classes into N3 rules , e.g.
[from ACE View example] Every person that has-as-pet at least 3 things is an animal-lover.
in Manchester syntax:
person and ( has-as-pet min 3 thing ) SubClassOf animal-lover
In N3:
[ a :Class;
rdfs:subClassOf people_pets_ace:animal-lover;
:intersectionOf (
people_pets_ace:person
[
a :Restriction;
:minCardinality "3"^^xsd:nonNegativeInteger;
:onProperty people_pets_ace:has-as-pet ] ) ].
Translation in N3 logic:
{ ?X a person.
_:d e:findall (?P {?X has-as-pet ?P} ?Y).
?Y math:memberCount ?C.
?C math:greaterThan 2 .
} => { ?X a animal-lover }.
The EulerGUI project for this case is :
http://deductions.svn.sourceforge.net/viewvc/deductions/n3_new/owl-subclass-assertions-to-rules.n3p
The plan is now :
[1] Euler GUI Manual: Translator from SWRL to N3 logic : http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L2219
[2] http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/owl-rules.n3
[3] http://semwebcentral.org/projects/swrl-test-suite/
[5] translator from N3 logic to Drools rules http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#Translatin
http://semwebcentral.org/projects/swrl-test-suite/
swrl-ex3-n.n3 : swrl:DatavaluedPropertyAtom
swrl-ex4-n.n3 : swrl:builtin
Upon opening the project, the translation from SWRL to N3
logic occurs, and this adds to the project the N3 document
dl-safe.owl.rules.n3
, which contains the translated N3 rules.
the temporary file name should be kept and content rewritten when re-launching inference engine
REGRESSIONS:
argument to Euler is not kept in the Project file;
Window title is not always updated (new Window+Save as...)
the tooltip in case af N3 syntax error is not there anymore
Now that rules SWRL work thanks to Jos, I see that automatic translation in EulerGUI, works only when a project file is already present.
Updated quick_tests.sh : add LANG=en
Uploaded snapshot for revision 1431
New SWRL Translator: update the doc.
uploading a snapshot for revision 1434
TODO:
TO TEST: http://ols2owl.sourceforge.net/
OLS2OWL is an ontology repository manager developped as a Protégé 4.0 plug-in which aids ontology designers in the knowledge elicitation stage during the ontology building process.
http://mojo.codehaus.org/nsis-maven-plugin/examples/sample-nsis-project.html
Due to internationalization, we need to fix the language to English for the tests:
lang=en
All tests seem to pass, but still:
[ERROR] BUILD FAILURE
One needs to run first:
mvn clean
I uploaded a snapshot for revision 1425, without using :
-Dmaven.test.skip=true
Original ACE | After back and forth to French | Remark |
No broadsheet is a tabloid. | No large format is a tabloid. | ACE View could automatically replace Adjective+Noun with an hyphenated form |
Every magazine is a publication. | Each magazine is a publication. | ??? |
Error when re-reading the people and pets ACE View Ontology with Protégé 4.0.2 (still readable with Protégé 4.1 ) :
org.coode.owl.rdfxml.parser.OWLRDFXMLParserMalformedNodeException: missing owl:object triple. Full Stack Trace ----------------------------------------------------------------------------------------- org.coode.owl.rdfxml.parser.OWLRDFXMLParserSAXException: org.coode.owl.rdfxml.parser.OWLRDFXMLParserMalformedNodeException: missing owl:object triple. at org.coode.owl.rdfxml.parser.RDFXMLParser.parse(RDFXMLParser.java:90) at uk.ac.manchester.cs.owl.ParsableOWLOntologyFactory.loadOWLOntology(ParsableOWLOntologyFactory.java:159) at uk.ac.manchester.cs.owl.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:461) at uk.ac.manchester.cs.owl.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:424) at org.protege.editor.owl.model.OWLModelManagerImpl.loadOntology(OWLModelManagerImpl.java:328) at org.protege.editor.owl.model.OWLModelManagerImpl.loadOntologyFromPhysicalURI(OWLModelManagerImpl.java:390) at org.protege.editor.owl.OWLEditorKit.handleLoadFrom(OWLEditorKit.java:147) at org.protege.editor.owl.OWLEditorKit.handleLoadRecentRequest(OWLEditorKit.java:135) at org.protege.editor.core.ProtegeManager.openAndSetupRecentEditorKit(ProtegeManager.java:173) at org.protege.editor.core.ProtegeWelcomeFrame$ProtegeWelcomePanel$5.actionPerformed(ProtegeWelcomeFrame.java:235) at org.protege.editor.core.ui.util.LinkLabel.activateLink(LinkLabel.java:97) at org.protege.editor.core.ui.util.LinkLabel.access$100(LinkLabel.java:30) at org.protege.editor.core.ui.util.LinkLabel$1.mouseReleased(LinkLabel.java:63) at java.awt.Component.processMouseEvent(Component.java:6263) at javax.swing.JComponent.processMouseEvent(JComponent.java:3267) at java.awt.Component.processEvent(Component.java:6028) at java.awt.Container.processEvent(Container.java:2041) at java.awt.Component.dispatchEventImpl(Component.java:4630) at java.awt.Container.dispatchEventImpl(Container.java:2099) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:4574) at java.awt.LightweightDispatcher.processMouseEvent(Container.java:4238) at java.awt.LightweightDispatcher.dispatchEvent(Container.java:4168) at java.awt.Container.dispatchEventImpl(Container.java:2085) at java.awt.Window.dispatchEventImpl(Window.java:2478) at java.awt.Component.dispatchEvent(Component.java:4460) at java.awt.EventQueue.dispatchEvent(EventQueue.java:599) at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:269) at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:184) at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:174) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:169) at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:161) at java.awt.EventDispatchThread.run(EventDispatchThread.java:122) Caused by: org.coode.owl.rdfxml.parser.OWLRDFXMLParserMalformedNodeException: missing owl:object triple. at org.coode.owl.rdfxml.parser.OWLRDFConsumer.endModel(OWLRDFConsumer.java:1198) at edu.unika.aifb.rdf.api.syntax.RDFParser.parse(RDFParser.java:112) at org.coode.owl.rdfxml.parser.RDFXMLParser.parse(RDFXMLParser.java:86) ... 32 more Caused by: org.coode.owl.rdfxml.parser.OWLRDFXMLParserMalformedNodeException: missing owl:object triple. at org.coode.owl.rdfxml.parser.AbstractTypeAxiomHandler.handleTriple(AbstractTypeAxiomHandler.java:89) at org.coode.owl.rdfxml.parser.OWLRDFConsumer.handle(OWLRDFConsumer.java:968) at org.coode.owl.rdfxml.parser.OWLRDFConsumer.endModel(OWLRDFConsumer.java:1151) ... 34 more
Updating past documents : TODO / EulerGUI: new , Rules for EulerGUI + taches.html in EulerGUI
FilteredTreeNode : implement a tree view with a text filter, similar to the preferences panel in Eclipse.
used in the OWL class tree view produced by Pellet.
project_ontology.html : corrected the accents in Protégé : did this in gvim: set fileencoding=utf-8
Protégé Contributor's Guide
http://protege.stanford.edu/doc/svn/contribute.html
http://smi-protege.stanford.edu/svn/
http://bmir.stanford.edu/publications/view.php/sqwrl_a_query_language_for_owl
SQWRL: a Query Language for OWL
Martin O’Connor, Amar Das
Stanford Center for Biomedical Informatics Research
Stanford, CA 94305 martin.oconnor@stanford.edu
Now I'm going to test the aceview Examples .
The first is people and pets. Be sure to paste the ACE text in the ACE text view (if you paste in the ACE Snippet editor only the first sentence will be added).
When clicking on Update, it works several seconds :
Parsing with empty lexicon.
[ one time per snippet ] ...
Event: ACETEXT_CHANGED
The model and rules are populated, e.g. from these sentences :
Everything that is read by a white-van-man is a tabloid.
Every man that drives a van that is a white-thing is a white-van-man.
Every white-van-man is a man that drives a van that is a white-thing.
these OWL ontology items are created:
ALAS !!!!!!!!
None of the 5 examples in the ACE View documentation has any rule !
http://www.eclipse.org/articles/article.php?file=Article-Swing-SWT-Integration/index.html
http://www.eclipse.org/albireo/
http://attempto.ifi.uzh.ch/aceview/#Examples
Pending a solution of the problem with the RDF format for lists in SWRL from Protégé 4.1 ( mail to Jos), I can still test SWRL files by converting them to N3 with CWM.
So I take the sentence that was enhanced by Kaarel:
If a user U knows a person X, and knows a person Y, and X is not Y,
and X knows Z, and Y knows Z, and Z is not U
then Z is-a-proposed-friend-for U.
I put this in the ACE View of Protégé 4.0.2, and then I get this in the rule view :
person(?x2) , person(?x4) , user(?x1) , Thing(?x7) , know(?x1, ?x2) , know(?x1, ?x4) , know(?x2, ?x7) , know(?x4, ?x7) , differentFrom(?x2, ?x4) , differentFrom(?x7, ?x1) -> is-a-proposed-friend-for(?x7, ?x1)
Wonderful !
The OWL+SWRL is eulergui/examples/facebook-aceview.owl . The classes person and user, the Object Properties know and is-a-proposed-friend-for, are also recorded in the ontology.
Then I try the import in EulerGUI.
Converting the OWL/RDF to N3 with CWM :
cwm --rdf facebook-aceview.owl --n3 > facebook-aceview.owl.cwm.n3
It worked the first time !!!!
ns1:support ns1:rules <http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/owl-differentFrom.n3>. {?t0 a facebook-aceview:person. ?t1 a facebook-aceview:person. ?t2 a facebook-aceview:user. ?t3 a owl:Thing. ?t2 facebook-aceview:know ?t0. ?t2 facebook-aceview:know ?t1. ?t0 facebook-aceview:know ?t3. ?t1 facebook-aceview:know ?t3. ?t0 owl:differentFrom ?t1. ?t3 owl:differentFrom ?t2} => {?t3 facebook-aceview:is-a-proposed-friend-for ?t2}.
ACE View Remarks:
EulerGUI Remarks:
?t3 a owl:Thing
ns1:support ns1:rules
...
should be used by EulerGUI to add the indicated rules to the
current project; See next paragraph.Suppose that, like in the "proposed friend" rule just above,
owl:differentFrom
appears in the antecedent side of a rule. Then
it seems reasonable to add to the project the OWL rules from Euler that can
produce triples with owl:differentFrom
. That is, we will add to
the project all the OWL rules from Euler having owl:differentFrom
in the consequent side.
In the reverse logical direction, if owl:differentFrom
appears
in the consequent side of a rule, we will add to the project all the OWL rules
from Euler having owl:differentFrom in the antecedent side.
I updated the official version on Subversion: newproject.n3p.n3
Due to current problems with OWL imports of relative URI's with Protégé 4.1, to test this file one has to convert it in RDF:
cwm newproject.n3p.n3 --rdf > newproject.n3p.n3.owl
Note that OWL API does not tolerate formulas (quoted graphs):
uk.ac.manchester.cs.owl.owlapi.turtle.parser.ParseException: Encountered " <ERROR> "{ "" at line 20, column 1.
Was expecting:
<EOF>
Mail sent to Jos
I played with the new toy that I made [1] ; I create SWRL rules with Protégé 4.1, and I try to run them with EulerGUI,
And guess what?
It does not quite work: an SWRL file created with Protégé 4.1 does not output anything with my SWRL to N3 logic translator.
This is a matter of RDF format for a list.
Compared to the file I developed with [2] , there a format difference with the recent Protégé (see the same file saved with Protégé 4.1 , attached as dl-safe-protege41.owl ).
This Protégé 4.1 format for rules (OWL/RDF plus SWRL), is converted into N3 within EulerGUI using Jena 2.6.2 ( attached as dl-safe-protege41.owl.eulergui.n3 ). Note that the N3 rewriting of this last document by CWM is markedly different ( attached as dl-safe-protege41.owl.cwm.n3 ), and that one does output the expected thing with my SWRL to N3 logic translator.
After some rule debugging , I boiled down the issue to the following test.
% cat counter-example-list2.n3
@prefix : <http://deductions.sourceforge.net/ontologies/2010/3/examples-swrl.owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix swrl: <http://www.w3.org/2003/11/swrl#> .
@prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix e: <http://eulersharp.sourceforge.net/2003/03swap/log-rules#> .
@prefix list: <http://www.w3.org/2000/10/swap/list#> .
# These facts trigger both rules
#:fact1 swrl:head [ rdf:first :my_first ; rdf:rest () ] .
:fact11 swrl:head [ rdf:first _:my_first ; rdf:rest () ] .
:fact2 swrl:head ( :my_first ) .
# :fact12 swrl:head [ rdf:first [ :p :v ] ; rdf:rest () ] .
# These facts do not trigger first rule having list:in
:fact13 swrl:head [ a :foo ; rdf:first _:my_first ; rdf:rest () ] .
:fact14 swrl:head [ a rdf:List ; rdf:first _:my_first ; rdf:rest () ] .
{ ?R swrl:head ?LIST .
?CRIT list:in ?LIST .
} => { :result :with_list_in (?R ?CRIT) . } .
{ ?R swrl:head ?H.
?H rdf:first ?F.
} => { :result :with_first (?R ?F) . }.
% eye --pass --nope $PWD/counter-example-list2.n3
Things will get better, but for now, I can not say whether it is Euler, Jena, Protégé, or my rules ...
[1] http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L2219
[2] http://owldl.com/ontologies/dl-safe.owl
Discovered that Jos played an important role in establishing RDF list syntax :
http://www.w3.org/2000/03/rdf-tracking/#rdfms-seq-representation
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L2219
CFP: 6th International Workshop on Semantic Web Enabled Software Engineering (SWESE2010)
* http://www.abdn.ac.uk/~csc280/event/workshop/swese2010/
* (for previous workshops, see http://www.csd.abdn.ac.uk/~jpan/)
*******Deadline: 25 Apr, 2010******
* located at 2010 Semantic Technology Conference
* 25 June 2010
* San Francisco, United States
DONE documentation
- add parag.: Working with controlled (formal) english through ACE View
- update: Translator from SWRL to N3 logic
Regressions:
adding an N3 file => not in the buttons
this seems only with ordinary projects , not woth projects with sub-projects.
Stack with EulerGUI
15:57:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 15:57:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.NullPointerException 15:57:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.TextEditor.setTitleAppendance(TextEditor.java:611) 15:57:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.EditorManagement.openJavaEditor(EditorManagement.java:126) 15:57:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at n3_project.ResultManagement.displayOriginalSourceWithErrors(ResultManagement.java:217) 15:57:49 [AWT-EventQueue-0] [error] AWT-EventQueue-0: at eulergui.gui.view.ButtonsForN3Source$3.actionPerformed(ButtonsForN3Source.java:178)
http://rayninfo.co.uk/vimtips.html
:1,$s/$/\r
: insert a blank line every 5 lines
Inspired from http://www.daml.org/2003/11/swrl/examples.html , I entered into Protégé 4.0.2 this SWRL rule :
Artist(?x)
, artistStyle(?x,?y)
, Style(?y)
, creator(?z,?x)
-> workStyle(?z,?y)
Alas , the SWRL => N3 translation does not output anything !!!!!!!!
The problems seems to be :
rdf:parseType="Collection"
in the one from http://owldl.com/ontologies/dl-safe.owl
, and now it uses rdf:first
and rdf:rest
;Indeed, if I run my SWRL => N3 translation with the N3 produced by CWM, it works and produces :
{?t0 a ex:Artist. ?t1 a ex:Style. ?t0 ex:artistStyle ?t1. ?t2 ex:creator ?t0} => {?t2 ex:workStyle ?t1}.
The stuff from dl-safe.owl that works with EulerGUI (and the Jena RDF==>N3 conversion) has this structure:
<swrl:head rdf:parseType="Collection"> <swrl:ClassAtom> <swrl:classPredicate rdf:resource="#BadChild" /> <swrl:argument1 rdf:resource="#x" /> </swrl:ClassAtom> </swrl:head>
Here swrl:ClassAtom is a so-called "Typed Node Element" from the RDF spec.
According to the sectiin about Syntax
parsetype Collection , the rdf:parseType="Collection"
syntax
is equivalent to the rdf:first
and rdf:rest
syntax.
// test SWRL translation with an URL based project
// we don't want n3 to belong to translatorProject:
* added the SWRL translation to the GUI ( have a listener for that on Project events ),
Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 53 in ButtonsForN3Source)) ButtonsForN3Source.<init>(SourceFilesView, N3Source, boolean) line: 53 SourceFilesView.doAddButtonForFile(N3Source, boolean) line: 142 ProjectGUIApdater.addN3Source(Project, N3Source) line: 21 ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 56 ProjectSequence(Project).addN3Source(N3Source) line: 192 DropURLTranferHandler.importData(TransferHandler$TransferSupport) line: 87 TransferHandler$DropHandler.drop(DropTargetDropEvent) line: not available TransferHandler$SwingDropTarget(DropTarget).drop(DropTargetDropEvent) line: not available TransferHandler$SwingDropTarget.drop(DropTargetDropEvent) line: not available XDropTargetContextPeer(SunDropTargetContextPeer).processDropMessage(SunDropTargetEvent) line: not available XDropTargetContextPeer.processDropMessage(SunDropTargetEvent) line: not available SunDropTargetContextPeer$EventDispatcher.dispatchDropEvent(SunDropTargetEvent) line: not available SunDropTargetContextPeer$EventDispatcher.dispatchEvent(SunDropTargetEvent) line: not available SunDropTargetEvent.dispatch() line: not available JPanel(Component).dispatchEventImpl(AWTEvent) line: not available JPanel(Container).dispatchEventImpl(AWTEvent) line: not available JPanel(Component).dispatchEvent(AWTEvent) line: not available LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: not available LightweightDispatcher.processDropTargetEvent(SunDropTargetEvent) line: not available LightweightDispatcher.dispatchEvent(AWTEvent) line: not available ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: not available ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: not available ProjectGUI(Component).dispatchEvent(AWTEvent) line: not available EventQueue.dispatchEvent(AWTEvent) line: not available EventDispatchThread.pumpOneEventForFilters(int) line: not available EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: not available EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: not available EventDispatchThread.pumpEvents(int, Conditional) line: not available EventDispatchThread.pumpEvents(Conditional) line: not available EventDispatchThread.run() line: not available
use global constant ProjectGUI.LOGGER instead of Logger.getLogger("theDefault")
because the latter has a non-externalized string
Update eulergui/html/project_ontology.html
Updated http://protegewiki.stanford.edu/index.php/CompileProtege4InEclipseFromSvn#Configuring_Eclipse
Translator from SWRL to N3 logic: implemented swrl:IndividualPropertyAtom in consequent and
swrl:DifferentIndividualsAtom in antecedent
I tested the new Translator from SWRL to N3 logic implemented in N3 logic, with a pipeline project : swrl-n3-rules-big.n3p . So now one can translate the SWRL and launch the translated N3 rules in one EulerGUI run, composed of two Euler Eye runs. So here is the global answer:
:bc a :BadChild. {?t0 a :GoodChild} => {?t0 a :Child}. {?t0 a :BadChild} => {?t0 a :Child}. {?t0 a :Grandchild. ?t0 :sibling ?t1. ?t0 :hates ?t1} => {?t0 a :BadChild}.
One definitely needs a post processing project, because the rules are generated in the query of the first run, and so cannot be part of the first run.
I will make a snapshot.
TopBraid 3.3 : Converting UML Files to RDF via Java/EMF Objects and SPARQLMotion
[jena-dev] ANN: ARQ 2.8.3
Group: com.hp.hpl.jena
Artifact: arq
Version: 2.8.3
See EulerGUI project: transitive_closure.n3p
This is more adapted to Euler engine than RETE engines like Drools. Indeed, with RETE it would populate heavily the Working Memory, whereas it is just a query. I'm not sure if it could be made into a Drools query.
{ :starting :point ?SP. ?SP ?P ?Z } => { ?SP :forwardConnection ?Z. }. # main rule { ?X :forwardConnection ?Y. ?Y ?P ?Z } => { ?X :forwardConnection ?Z. }.
The query:
{ _:d e:findall ( ?Y_ { :starting :point ?START. ?START :forwardConnection ?Y_} ?CLOSURE_REPEAT ). ?CLOSURE_REPEAT e:distinct ?CLOSURE. # TODO flatten the result } => { :rules :hasClosure ?CLOSURE. }.
In eclipse, clicking on a resource bundle entry: "The properties file could not be detected"
Examples of Resolving Relative URIs
mail to Olivier + EulerGUI server + appli. FB + expenses
implementation: use the observer pattern in class Project; later leverage on point 1.
?CURRENT_CLASS ?P ?V .
it might be detected in the source patterns which indicate the possibility of connecting observers; in Swing by example, the naming pattern is add*Listener
dependant on feature "Import Java classes"
anonymous imports is not blocking, but we need this to be working:
<> owl:imports <plants.n3> . # KO: IllegalArgumentException: URI is not absolute
dependant on feature "Import Java classes"
useful for "new N3==>Drools rule based translator"
cf mails with Martin O'Connor
expose methods via standard tools (Axis ... )
implies checking that insertLogical() in Drools removing a triple also removes the bad consequenses, and that the tests still pass
Work In Progress, see eulergui/html/project_ontology.html
an alternative to using the instanciator technology;
useful for the internal KB and generated applications
cf EulerGUIServer. I looked if there is a more of less standard way of wrapping a pre-cooked SPARQL query as a simple HTTP GET request. It would have the query name, and possibly parameters that would be replaced in the query before running it. Here is discussion for parameterized queries for SPARQL : http://www.w3.org/2009/sparql/wiki/Feature:Parameters .
There is also a proposal for Query_by_reference that proposes a query like:
/sparql?query-uri=http://www.example.org/queries/test.rq
Altogether we will accept such HTTP GET queries (urlencoded of course):
?query-uri=./myQuery.n3&myParam1="string value"&myParam2=<http://site.com/stuff1>
The relative URL ./myQuery.n3 is the query URL exactly how it appears in the EulerGUI project.
Note the difference between plain strings (myParam1) and URI parameters (myParam2).
Variables ?myParam1 and ?myParam2 in the source of the N3 query will be replaced before running the query. Behind, we leverage on the corresponding feature of Drools.
add a tab with all the messages, and a scrolling panel for important messages (both statistics and messages recapitulation, and warnings and errors)
there is already a class TemporaryFrame, modeless and disappearing quickly, for important messages
agree on the RDF vocabulary;
implementation: replace the class XMLSchemaCatalog and can either add thisCatalog to the internal KB, or use a Jena Model
implementation: we listen to the end of the current window ProjectGUI to start the next project. We should not have to change ProjectGUI.
<> owl:import <foo.n3> :app xml:lang "fr"
[from ACE View example] Every person that has-as-pet at least 3 things is an animal-lover.
in Manchester syntax:
person and ( has-as-pet min 3 thing ) SubClassOf animal-lover
In N3:
[ a :Class; rdfs:subClassOf people_pets_ace:animal-lover; :intersectionOf ( people_pets_ace:person [ a :Restriction; :minCardinality "3"^^xsd:nonNegativeInteger; :onProperty people_pets_ace:has-as-pet ] ) ].
Translation in N3 logic:
{ ?X a person. _:d e:findall (?P {?X has-as-pet ?P} ?Y). ?Y math:memberCount ?C. ?C math:greaterThan 2 . } => { ?X a animal-lover }.
Note: the reversed class inclusion also exists in this example, and also needs to be translated:
people_pets_ace:animal-lover a :Class; rdfs:subClassOf [ a :Class; :intersectionOf ( people_pets_ace:person [ a :Restriction; :minCardinality "3"^^xsd:nonNegativeInteger; :onProperty people_pets_ace:has-as-pet ] ) ] .
Suppose that, like in the "proposed friend" rule,
owl:differentFrom
appears in the antecedent side of a rule.
Then it seems reasonable to add to the project the OWL rules from Euler
that can produce triples with owl:differentFrom
. That is, we
will add to the project all the OWL rules from Euler having
owl:differentFrom
in the consequent side.
In the reverse logical direction, if owl:differentFrom
appears in the consequent side of a rule, we will add to the project all
the OWL rules from Euler having owl:differentFrom in the antecedent
side.
TODO : ask Jos about the idea
ask for ideas to CWM list
not reproduced !
Sent a bug report to Timothy Redmond: "imported ontology does not show in the GUI".
Besides this GUI bug, I saw that importing relative URI's this way OK:
<owl:imports rdf:resource="plants.owl"/>
but in N3 from N3 this fails :
<> owl:imports <plants.n3> .
with this stack:
IllegalArgumentException: URI is not absolute java.net.URI.toURL(URI.java:1080) org.protege.editor.owl.model.io.WebConnectionIRIMapper.getDocumentIRI(WebConnectionIRIMapper.java:41) uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.getDocumentIRIFromMappers(OWLOntologyManagerImpl.java:851) uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadOntology(OWLOntologyManagerImpl.java:567) uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.loadImports(OWLOntologyManagerImpl.java:967) uk.ac.manchester.cs.owl.owlapi.OWLOntologyManagerImpl.makeLoadImportRequest(OWLOntologyManagerImpl.java:988) org.coode.owlapi.rdfxml.parser.TPImportsHandler.handleTriple(TPImportsHandler.java:79) org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.handleStreaming(OWLRDFConsumer.java:1428) org.coode.owlapi.rdfxml.parser.OWLRDFConsumer.statementWithResourceValue(OWLRDFConsumer.java:1392) uk.ac.manchester.cs.owl.owlapi.turtle.parser.OWLRDFConsumerAdapter.handleTriple(OWLRDFConsumerAdapter.java:67)
I have also tried importing from N3, the imported being N3 or RDF, with relative or absolute URL's. The trials are summarized in this N3 (importer) file. you can successively uncomment each import variant:
@prefix : <http://eulergui.sf.net/ontology/project.owl.n3#>.
@prefix owl: <http://www.w3.org/2002/07/owl#> .
<> a owl:Ontology .
# <> owl:imports <file:./plants.n3> . # popup "the system couldn't locate the ontology", but answer "No" and it still works, even with the entry in "direct imports"
# <> owl:imports <plants.n3> . # KO: IllegalArgumentException: URI is
not absolute
# <> owl:imports <plants.owl> . # KO: IllegalArgumentException: URI is
not absolute
#
<> owl:imports <file:///home/jmv/src/eulergui/examples/plants.n3> . # works well without a popup, but also without the entry in "direct
imports"
protege wiki / CompileProtege4InEclipseFromSvn
Has to go to recipe 2 because (but it was OK in the end):
Exception in thread "main" java.lang.NoClassDefFoundError: org/eclipse/core/runtime/adaptor/EclipseStarter Caused by: java.lang.ClassNotFoundException: org.eclipse.core.runtime.adaptor.EclipseStarter at java.net.URLClassLoader$1.run(URLClassLoader.java:202) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(URLClassLoader.java:190) at java.lang.ClassLoader.loadClass(ClassLoader.java:307) at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) at java.lang.ClassLoader.loadClass(ClassLoader.java:248) Could not find the main class: org.eclipse.core.runtime.adaptor.EclipseStarter. Program will exit.
After the Translator from SWRL to N3 logic, I need to show the post-Processing step, as the generated rules cannot fire within the same run. DONE:
- restore the post-Processing Project from file did not work (maybe a regression)
TODO manage simplified URI's for post-Processing Projects.
- implement ProjectSequence.reasonExternalProlog() ; TODO test, after a correction to Euler (Euler does not understand file: URL's)
Regression: after new Window; save as... , the window title is not good.
removed true criteria in rule, removed useless stuff.
TODO: consequent: IndividualPropertyAtom; add a post-processing project to launch the newly created rule.
Removed true criteria in rule, removed useless stuff.
TODO: consequent: IndividualPropertyAtom; add a post-processing project to launch the newly created rule.
http://tech.groups.yahoo.com/group/jena-dev/
Answers gotten from Jos, about the var:V syntax .
Will it be enough?
Now I need to generate several different N3 variables, each corresponding to an SWRL variable.
OK !!!!!!!!!!!!!!!!!
Answers gotten from Jos, about e:tuple().
Now we get the right thing :
{?t0 a :Grandchild. ?t0 :sibling ?t1. ?t0 :hates ?t1} => {?t0 a :BadChild}.
(plus some chaff)
Forgot the case when nothing is substituted; begin removing useless stuff.
Reactivate ApplicationKB; correct error when populating the KB with project data
See "EulerGUI ideas"
In the editor, it should be good to have a tooltip explaining the use of predicates like:
e:optional
In fact, this explaination can be taken from the N3 definition of the Euler predicates, by this N3 query:
e:optional ?P ?V .
The Euler specific builtins are defined in N3 in log-rules.n3 . Cwm Builtins are defined in N3 in log.n3 .
These ontologies, plus RDF, RDFS, and OWL can be predefined. The rest is expected to be in the project.
Implementation
The implementation would use log:semantics
and
log:includes
(see log.n3 ) and other advanced
builtins that are not yet in Drool/N3 engine.
Here is a sketch of a rule to populate a tooltip for the editor.
{ :current_editor :current_predicate ?CURRENT_PREDICATE . ?CURRENT_PREDICATE :definedByURI ?ONTOLOGY. # e.g. <http://www.w3.org/2000/10/swap/log.n3> ?ONTOLOGY log:semantics ?LOG . ?LOG log:includes { ?CURRENT_PREDICATE ?P ?V } . } => { :current_editor :tooltip ( ?P ?V ). # another rule will call Java method setTooltip() }.
For performance, log:semantics
would use an application-wide
(or system or local area -wide) cache.
The key would be the URL. But what should it cache? A local file ? No. A set of Triple objects? A ParserLink with its underlying AST for N3 ?
Use a Drools KB for cache ? Why not ? But we don't need rule capability here. A TDB local store? Better, and one can use SPARQL to query the content. Then we would use a named graph for each entry (or group of entries). Is there already some code doing that for TDB?
QUESTION ASKED on the Jena list.
ADDED monday 29: this needs more reflection. There are 2 possible implementations:
log:semantics
and log:includes
must be implemented in Drool/N3 engine.:current_editor :current_predicate ?CURRENT_PREDICATE
It seems that the current state of the liaison between the KB and Java is not quick enough for a nice user experience. Indeed the tooltip implementation should subscribe to the mouse motions, which entails many events. Reasoning about software is still a good principle, but for this feature the reasoning should happen at design time, not a runtime.
Anyway, in both variants, we need a predicate or method
eg:definedByURI
that gives the actual URL location of the ontology
defining a property or class. For example, eg:definedByURI
will
assert:
<http://www.w3.org/2000/10/swap/log#conjunction> eg:definedByURI
<http://www.w3.org/2000/10/swap/log.n3>
Although one can write some heuristics, it seems that there is also a need
for a table of correspondance eg:prefixIsdefinedByURI
that will be
used in the implementation of predicate or method eg:definedByURI
. For example, eg:prefixIsdefinedByURI
will assert:
<http://www.w3.org/2000/10/swap/log#> eg:prefixIsdefinedByURI
<http://www.w3.org/2000/10/swap/log.n3>
I wonder if this has already been written. I would say: yes.
Olivier says:
A priori, ontology imports already specify more or less from what place may come a definition of class or property.
Otherwise, no salvation except a service like or sindice or watson.
It 's much the same as for predicates.
Answer gotten from Jos, with e:tuple .
Updated preceding page : N3 syntax for jedit
In script install_packages_ubuntu.sh
, I added commands to
install jEdit mode for N3.
/home/jmv/.jedit/modes/n3.xml
http://simile.mit.edu/
SIMILE is focused on developing robust, open source tools that empower users to access, manage, visualize and reuse digital assets. Learn more about the SIMILE project.
http://eulergui.svn.sourceforge.net/viewvc/eulergui/?view=log
swrl-n3-rules.n3 : fix the fully substituted triple; now we get this (also applied the simplification due to latest Euler revision 3352 ) :
( {:x :sibling :y. :x :hates :y} ((:x _:x_1) (:y _:y_1)) ) :substitutedFormula {_:x_1 :sibling _:y_1. _:x_1 :hates _:y_1}
yap -l /home/jmv/src/eulersharp/2006/02swap/euler.yap \ -g main -- --nope --pass /home/jmv/src/eulergui/examples/parents.n3
The substitution results can be recovered by finding all the triples with object an empty (substitution) list among all the :substituteVariableList stements :
_:sk3 :print ({:x :sibling :y} :substituteVariableList ((:x _:sk4) (:y _:sk5))).
_:sk13 :print ({_:sk1 :sibling :y} :substituteVariableList ((:y _:sk11))).
_:sk16 :print ({_:sk1 :sibling _:sk11} :substituteVariableList ()).
Now I need to recover the fully substituted triple:
{_:sk1 :sibling _:sk11}
from the initial non substituted triple and the substitution list
{:x :sibling :y} :substituteVariableList ( (:x ?X)(:y ?Y) ) .
A possible design is to change the predicate "signature" by changing the subject into a list whose first item is the actual (recursive) argument, and second item is the original arguments (in this case the initial non substituted triple, plus the subtitution). This second item will be kept unchanged during recursion.
( {:x :sibling :y} ( {:x :sibling :y} ( (:x ?X)(:y ?Y) ) ) ) :substituteVariableList ( (:x ?X)(:y ?Y) ) .
So I call the design pattern "add an item in the list that will be kept unchanged during recursion".
Thus the predicate "signature" in rules will be :
(?STAT ?INVARIANT) :substituteVariableList ?L .
Then the query to recover the fully substituted triple from the initial non substituted triple ?T0 and the substitution list ?L is :
(T0 ?L) substitutedTriple ?TSUBST.
implemented as:
{ ( ?STAT (?STAT ?L) # INVARIANT ) :substituteVariableList ?L . _:d e:findall ( ?STAT_ {(?STAT_ (?STAT ?L) ) :substituteVariableList ()} ?TSUBST ). } => { (?STAT ?L) substitutedTriple ?TSUBST. }.
At last !
I could do recursive variable substitution:
from {:x :sibling :y} :substituteVariableList ( (:x ?X)(:y ?Y) ) . to: ({_:sk1 :sibling :y} (:y _:sk12)) :variableSubstitution {_:sk1 :sibling _:sk12}
# TODO <<<<<<<
# variable substitution of ?V by ?VT in a triple ?T == {?S ?P ?O}
#** What: :substituteVariableList - substitution of a list of variable substitutions ?L in a triple
# @subject an RDF statement
# @object list of variable substitutions, e.g. ( (:x ?X)(:y ?Y) )
# substitution of triples in a formula ?F
# substitution of triples in a pair of formulas (?A ?C) .
Towards a Model-driven Approach for Reverse
Engineering Design Patterns
Awny Alnusair and Tian Zhao
University of Wisconsin-Milwaukee, USA
{alnusair,tzhao}@uwm.edu
Elmar Drewitz pointed me to this:
http://www2009.org/proceedings/pdf/p601.pdf
OpenRuleBench:
An Analysis of the Performance of Rule Engines
Senlin Liang Paul Fodor Hui Wan Michael Kifer
Department of Computer Science
State University of New York at Stony Brook
Stony Brook, NY 11794, USA
{sliang,pfodor,hwan,kifer}@cs.stonybrook.edu
http://www.dbai.tuwien.ac.at/proj/dlv/man/
http://www.iris-reasoner.org/
noreply@sourceforge.net
log and message windows
see if an IDE does not automatically part of the work;
add a tab or text area for messages
http://www.cs.kuleuven.be/~dtai/krr/idlogic/index.html FO(.)
http://www.commandlinefu.com/
Protege 4.1 Alpha update (build 102)
I write eulergui/html/n3_rules_good_practices.html ; this should become a training.
Introduction
Design patterns
Annotate the existing objects
Create new objects
Lists variants
Lists OWL style
Cloning a list
Accumulating by recursion
N3 refactorings
Extract part of antecedent
Translated from French
High level Use Case Déductions and EulerGUI
POSSIBLE FEATURES
mvn deploy:deploy-file \
-Durl=file:${HOME}/.m2/repository/ \
-Dfile=/home/jmv/Téléchargements/jedit.jar \
-DgroupId=org.jedit \
-DartifactId=jedit \
-Dversion=4.3.1 \ -Dpackaging=jar
After local tests :
Tests in error:
testURLProjectOWL(eulergui.gui.TestJavaEditor)
testURLProject(eulergui.gui.TestJavaEditor)
Tests run: 105, Failures: 0, Errors: 2, Skipped: 0
I upload the modified jedit.jar :
mvn deploy:deploy-file \ -Durl=sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2 \ -DrepositoryId=repository.eulergui.sf.net \ -Dfile=/home/jmv/Téléchargements/jedit.jar \
-DgroupId=org.jedit \
-DartifactId=jedit \
-Dversion=4.3.1 \ -Dpackaging=jar
Martin O'Connor pointed me to his SWRL Language FAQ: What are DL-Safe SWRL Rules?
Now copied in the EG Manual.
Some work for the new embedded (a.k.a. internal) rule engine ( this engine is only aware of the user actions, the user configuration, and the projects ) :
A KB is maintained which contains all the triples in the Project; this is the one that is already used for inferencing, and it is already resident in memory. Let's call it "user data KB".
Some work for the "user data KB" rule engine :
this implies launching a special rule base that analyses user rules and generates a skeleton for the properties and classes declarations not declared anywhere;
a rule base already exists, which warns of undeclared properties: see deductions/n3_new/model-rules-coherence.n3p
for recursion it needs the builtin log:parsedAsN3
(see
CwmBuiltins ; this built-in lacks today in the Drools N3 engine )
( could also be done with a Java callback )
we need the association between row numbers and columns on the Statements;
to navigate from a resource to its definition, we assume it is declared in the project, and since the "user data KB" contains all triples of the project, a simple rule and query can do the job
http://www.dilbert.com/strips/?Page=6
svn co https://parser4j.svn.sourceforge.net/svnroot/parser4j/trunk/parser4j/ \ parser4j
empty project ==> add source N3 ==> the link does not appear
==> Save the project ==> re-open the project ==> it appears
I created a new test and confirmed that it is revision 1301 that brought the problem:
svn update -r 1300 cp ~/src/eulergui/src/test/java/eulergui/gui/TestN3Source.java \ src/test/java/eulergui/gui/TestN3Source.java mvn --offline --no-plugin-updates -Dtest=eulergui.gui.TestN3Source test
Protege 4 Developer Documentation
swrl-jess-bridge SVN Web view:
http://smi-protege.stanford.edu/svn/swrl-jess-bridge/trunk/
svn co http://smi-protege.stanford.edu/repos/protege/swrl-jess-bridge/trunk \ swrl-jess-bridge
EulerGUI feature: add automatically catch_allQ.n3 to projects not having a main query.
DONE:
By mistake in Revision 1298 the WindowListener exitOnLastWindowClosed was not deactivated
Note that it stops the test suite prematurely.
GUI enhancement: glue together the components between the button bar and the bottom text panel, so that the bottom text panel can grow in size.
Questions to Jos
Is findall the only way to populate a list other than asserting it in the facts ?
Choosing moderated :
https://lists.sourceforge.net/lists/admin/eulergui-commits/privacy/sender
http://code.google.com/p/jenabean/wiki/Mapping
http://wigblog.blogspot.com/2004/05/gmail-lacks-basic-privacy-protections.html
Adding Jess to the latest Protégé 3.4.4 :
cd ~/apps/Protege_3.4.4 cp ../Jess70p2/lib/jess.jar plugins/edu.stanford.smi.protegex.owl/
Follow-up of Trying SWRL tab .
Exception running rule engine: error running Jess rule engine: Jess reported an error in routine invokeSWRLBuiltIn while executing (invokeSWRLBuiltIn "Query-1" "http://swrl.stanford.edu/ontologies/built-ins/3.3/query.owl#select" 0 true ?x ?z) while executing defrule MAIN::Query-1. Message: exception thrown by built-in http://swrl.stanford.edu/ontologies/built-ins/3.3/query.owl#select in rule Query-1: edu.stanford.smi.protegex.owl.swrl.bridge.exceptions.BuiltInException: exception thrown by built-in query:select in rule Query-1: The query library has been superseded by the SQWRL library; to upgrade, import the SQWRL ontology (http://sqwrl.stanford.edu/ontologies/built-ins/3.4/sqwrl.owl) from the Protege-OWL repository, give it the prefix 'sqwrl', and replace 'query' with this prefix for all existing query built-ins.
I finally found here the right version updated to Protégé 3.4 of the family.swrl.owl example :
http://sqwrl.stanford.edu/ontologies/examples/family.swrl.owl
Note that one can find all the Web pages pointing to family.swrl.owl by searching on Gooogle :
link:family.swrl.owl
And now it runs fine :
Succesful execution of rule engine.
Number of inferred axioms: 55
BTW there a typo in the message: Successful.
Here is Protégé right after clicking on "Run Jess" in bottom middle (and clicking on "OWL+SWRL-> Jess" before ):
When cliking on "Jess->OWL" , the inferred triples are added to the current ontology.
The buttons "OWL+SWRL-> Jess" and "Run Jess" are just one button in EulerGUI (with choice of several inference engines). This is a good thing.
The button "Jess->OWL" has no equivalent in EulerGUI. Currently, to achieve that, one could :
I propose to add one more button that will automatize that. The button would be at extreme top right, and bear this logo:
--\ | <-/
It will add to the projet a file named
<project_name>-<engine_name>-result.n3
. This way, the user will have no file name to choose. And, contrary to
SWRLTab in Protégé 3.4, the inferred triples will not be mixed with "pure"
asserted triples. A variation, with even less user click ( always better ! ),
is to add inconditionally the file named
<project_name>-<engine_name>-result.n3 after an inferrence run, but
with a non-activated status .
And for the users wanting to merge several ontologies, she can use CWM from
EulerGUI with --pipe
.
Deactivated in ProjectGUI : addWindowListener(exitOnLastWindowClosed);
Being a listener on the main Frame, it cannot react to other frames events.
Moreover, it seems best to rely on the dispose-window default window close operation :
"When the last displayable window within the Java virtual machine (VM) is disposed of, the VM may terminate. See AWT Threading Issues for more information."
See WindowConstants.DISPOSE_ON_CLOSE
Solved the long lasted problem: Tests in error: test_person_import(eulergui.gui.TestSwingGeneration)
- put disposeWindows() *both* in setUp() and tearDown()
- probably the cleaning with Project, ProjectSequence, and SimplifiedURI helped
Several tests were broken since revision 1289, were the Project URL string (field url) was set as a file:// URL for file projects;
this led to errors in SimplifiedURI were field baseDirectory can (alas!) be an URL or a file path.
Thread [main] (Suspended (modification of field n3ParserSession in N3Parser)) N3Parser.parseN3(String, ParserFileReader) line: 215 N3Parser.parseN3(String, String, Reader) line: 188 N3Parser.parseN3File(String, String) line: 167 ParserLink.parse(N3Source) line: 119 ParserLink.parseAndUpdateSource(N3Source) line: 147 N3SourcetoDrools.translate(N3Source) line: 199 N3toDroolsUpdater.translate(N3Source) line: 62 ProjectSequence(Project).translateN32Drools() line: 770 ProjectSequence(Project).prepareDrools() line: 754 ProjectSequence(Project).doRunDrools() line: 737 ProjectSequence(Project).runDroolsTriples() line: 722 ProjectSequence.runDroolsTriples(List<ITriple>) line: 147 ProjectSequence.runDroolsTriples() line: 143 TestProjectSequence.testpostproc() line: 24 NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method] NativeMethodAccessorImpl.invoke(Object, Object[]) line: not available DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: not available Method.invoke(Object, Object...) line: not available TestProjectSequence(TestCase).runTest() line: 154 TestProjectSequence(TestCase).runBare() line: 127 TestResult$1.protect() line: 106 TestResult.runProtected(Test, Protectable) line: 124 TestResult.run(TestCase) line: 109 TestProjectSequence(TestCase).run(TestResult) line: 118 JUnit3TestReference.run(TestExecution) line: 130 TestExecution.run(ITestReference[]) line: 38 RemoteTestRunner.runTests(String[], String, TestExecution) line: 467 RemoteTestRunner.runTests(TestExecution) line: 683 RemoteTestRunner.run() line: 390 RemoteTestRunner.main(String[]) line: 197
Someone on the Jemmy list suggested Wink , a freeware Tutorial and Presentation creation software, but it runs only on Windows. recordmydesktop runs on Linux .
I looked at this error in the test batch:
Tests in error:
test_person_import (eulergui.gui.TestSwingGeneration)
It is quite possible that with Windows does not have this error.
Indeed Project.prepare () is called twice for projects with sub-projects.
Now it is just called once.
I began to clean the cloning of Projects after XMLDecoding them, but I can't remember why I did cloning in the first place !!!
Thread [main] (Suspended (breakpoint at line 1197 in Project)) Project.setUrl(URL) line: 1197 Project.restore(URL) line: 1050 ProjectWithSubProjects(ProjectWithSubProjects).prepare() line: 188 Project.restore(File, String) line: 911 Project.restore(URL) line: 1042 Project.restore(String) line: 868 ProjectGUI.main(String[]) line: 116
http://mojo.codehaus.org/webstart/webstart-maven-plugin/jnlp-mojos-overview.html
DISPLAY=:1 mvn -Dmaven.test.skip=true -DargLine="-DPARSER4J_TESTS=no" install webstart:jnlp
//////// translating ./java_library.n3 ./java_library.n3 class eulergui.project.N3Source //////// removeRulePackage(): no facts corresponding to file:///home/jmv/src/eulergui/file:/home/jmv/src/eulergui/examples/java_library.n3 java.lang.NullPointerException at eulergui.parser.n3.impl.parser4j.service.N3Parser.getKnownURIPrefixes(N3Parser.java:546) at eulergui.drools_engine.ParserLink.getKnownURIPrefixes(ParserLink.java:658) at eulergui.drools_engine.ParserLink.parseAndUpdateSource(ParserLink.java:151) at n3_project.helpers.N3SourcetoDrools.translate(N3SourcetoDrools.java:199) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:62) at eulergui.project.Project.translateN32Drools(Project.java:770) at eulergui.project.Project.prepareDrools(Project.java:754) at eulergui.project.Project.doRunDrools(Project.java:737) at eulergui.project.Project.runDroolsTriples(Project.java:722)
https://sourceforge.net/tracker/?group_id=237733&atid=1104479
Pellet : http://on.cs.unibas.ch/maven/repository
Drools: http://repository.jboss.org/maven2/org/drools/drools-core/
Euler: http://eulersharp.sourceforge.net/maven2/euler/euler/?C=M;O=D
Jena: http://openjena.org/repo/com/hp/hpl/jena/jena/
irc://chat.freenode.net#sourceforge
<jmv_> Hello everyone !
The mail nofications from Subversion work partly :-(
Each of us two receives only mails for his own submits .
https://sourceforge.net/project/admin/svn.php?group_id=237733
Failed tests:
testFieldOldArchitecture(deductions.runtime.TestRulesForUserEvents)
testFormFromClass(deductions.runtime.TestRulesForUserEvents)
Tests in error:
test_person_import(eulergui.gui.TestSwingGeneration)
Seen on the Protégé list.
[1] is a good starting point. In particular [2] will help you write some simple example plugins. [1] includes how to setup Protege in several development environments. In particular eclipse is nice because it includes OSGi support and makes plugin development that much easier.
If you are just starting, work with Protege 4.1 rather than Protege 4.0.*.
-Timothy
[1] http://protegewiki.stanford.edu/index.php/Protege4DevDocs
[2] http://protegewiki.stanford.edu/index.php/PluginAnatomy
Commited into eulergui/html/project_ontology.html
For the EulerGUI Integrated Development Environment we define a general notion of project for ontology plus data and rules .
Indeed it is for a particular project, but it is a strength to have a specific project which demonstrates the concept.
Also we seek the broadest applicability, and to reuse as much vocabulary as possible.
Having an XMLEncoder file was convenient at first, but it means that the implementation Java classes are in the project persistance file, which is very unflexible! Also, the setters are called when too little is known, namely in our case the base URL of the project.
And of course, since we strongly believe that N3 is the exchange format that will enable universal data exchange, we must have an N3 project file!
Here is a sample of the current input file:
<java version="1.6.0_15" class="java.beans.XMLDecoder"> <object class="eulergui.project.Project"> <void property="n3Query"> <object class="eulergui.project.N3Source"> <void property="URI"> <string>./maven-pom.n3</string> </void> </object> </void> <void property="sources"> <void method="put"> <string>http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml</string> <object class="eulergui.inputs.N3SourceFromXML_Gloze"> <void property="URI"> <string>file:/tmp/translation-2727048603323236665.n3</string> </void> <void property="otherFile"> <string>http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml</string> </void> </object> </void> </void> </object> </java>
Like Protégé 4, we reuse the OWL Ontology as a wider Project object.
Note that, AFAIK, Protégé silently converts into OWL an RDF Schema. Currently in EulerGUI this is not implicit.
Another difference is that in EulerGUI, currently, all ontology, data and rules are in imported documents, whereas in Protégé (that is, OWL) ontology, data and rules can be in the main document or in imported documents, and so on recursively.
In Protégé rules (necessarily SWRL) are embedded in an ontology (probably also in imported ontologies ?); in EulerGUI rules (necessarily N3 logic for now) are embedded in an N3 source.
The core EulerGUI "Project" ontology
@prefix : <http://eulergui.sf.net/ontology/project.owl#>. @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . :RDFImport a owl:Class ; rdfs:label "RDF Import" ; rdfs:comment """RDF import means that a non RDF source like plain XML, XMI, etc is converted in a well defined way into an RDF/N3 document.""" . :hasRDFImport a owl:ObjectProperty ; rdfs:domain owl:Ontology ; rdfs:range :RDFImport ; rdfs:label "has RDF Import" ; rdfs:comment """In addition to its regular content, an owl:Ontology has RDF Imports that aware applications add to the regular content.""" . :hasURL a owl:DatatypeProperty ; rdfs:domain :RDFImport ; rdfs:range xsd:anyURI ; rdfs:label "has an (absolute) URI" ; rdfs:comment "a dereferenciable URI for the RDF import" . :hasRelativeURL a owl:DatatypeProperty ; rdfs:domain :RDFImport ; rdfs:range xsd:string ; rdfs:label "has a relative URI" ; rdfs:comment """a relative URI for the RDF import, relative to the base URI of the importing Ontology. An RDFImport has either a relative URI, or an (absolute) URI, but not both.""" . :isActivated a owl:DatatypeProperty ; rdfs:domain :RDFImport ; rdfs:range xsd:boolean ; rdfs:label "is this RDF source activated during inferencing?" ; rdfs:comment """It is convenient to have data sources belonging to the project just as reference or trial.""" . :hasQuery a owl:DatatypeProperty ; rdfs:domain owl:Ontology ; rdfs:range xsd:anyURI ; rdfs:label "has an (absolute) URI" ; rdfs:comment "a dereferenciable URI for the project's N3 query" . # TODO N3 searches, plain N3, other formats .....
In addition to the above core EulerGUI "Project" ontology, we are considering two designs for expressing the format of imported documents (plain XML, XMI, etc) :
<http://www.w3.org/XML/1998/namespace>
for plain XML .
Possibly there could be a further hint for polymorphic formats like XML and XMI, but EulerGUI is able to "pre-parse" an XML document to know the XML Schema associated to the root, and for XMI it relies on the extension .uml or .xmi, .mof, etc .
Advantages | Inconvenients | Comments | |
use JenaBean | does read and write | possibly not flexible; introduces yet another dependency | |
use the EulerGUI Java instantiator | reuses EulerGUI technology; very flexible; possibly apply validation rules | does only the N3 ==> Java objects conversion;
for the reverse need to populate an RDF database through observer Design Pattern, but we plan to do that anyway (called the "conscience" of the application) |
We'll do that; see below migration path |
Here is a sample of the N3 rules. We apply the N3 logic design pattern "annotate the existing objects".
RDFImport resources are mapped to objects of type Java class N3Source.
@prefix java: <http://java.sun.com/class#> . @prefix javam: <http://java.sun.com/method#> . { ?ONTO a owl:Ontology .
} => { ?ONTO a java:eulergui_project_Project . ?ONTO java:url ?ONTO . }. { ?ONTO a owl:Ontology . ?ONTO :hasRDFImport ?IMPORT. ?IMPORT :hasFormat <http://www.w3.org/XML/1998/namespace> . } => { ?IMPORT a java:eulergui_project_N3SourceFromPlainXML . ?ONTO javam:addN3Source ?IMPORT . }. # TODO N3Query, N3 searches, isActivated; other formats .....
The steps , that will keep the application working:
log:parsedAsN3
(see CwmBuiltins )One more thing in Protégé configuration that is not in RDF or N3 : the plugins repository
http://smi-protege.stanford.edu/protege4/plugins/4.0-plugins.repository
Installed SWRL Jess Tab following the instructions:
http://protege.cim3.net/cgi-bin/wiki.pl?SWRLJessInstall
The SWRL Jess Tab is the extension to the SWRLTab allowing rules execution.
This uses the SWRL Bridge. The bridge provides the infrastructure necessary to incorporate rule engines into Protege-OWL to execute SWRL rules.
Using this ontology with SWRL from the Pellet site:
http://owldl.com/ontologies/dl-safe.owl
Alas !!!!!!!!!!!!!
Succesful execution of rule engine.
Number of inferred axioms: 0
So I try the "official" SWRLTab example:
http://protege.cim3.net/file/pub/ontologies/family.swrl.owl/family.swrl.owl
WIP . See above the follow-up: Trying SWRL tab (SWRLTab) in Protégé 3.4.3.
Not without trials and errors, I wrote this ACE sentence that
represents a rule that a site like FaceBook might use for friend
proposals:
If the current-user C knows a person X and a person Y
and X is different from Y
and X knows Z
and Y knows Z
and Z is different from C
then Z is a friend-proposal for C .
The first version had commas at every end of line that make it clearer
for the human reader, but ACE dislikes them :( .
Then ACE View says:
The snippet contains no ACE syntax errors, but cannot be expressed in OWL/SWRL .
And the ACE Feedback panel says twice about "person" :
A reference to this noun either does not exist or is illegal.
( hard to read BTW, because the columns are too narrow, and there is
no way to select the message, and no tooltip )
Then I removed "person" like this :
If the current-user C knows X
and Y
and X is different from Y
and X knows Z
and Y knows Z
and Z is different from C
then Z is a friend-proposal for C .
Then the ACE Feedback panel says again twice the message, but this
time about "something" :
A reference to this noun either does not exist or is illegal.
The problem might be too many "and" .
Since I have (AFAIK) no way in ACE to parenthesize things, I remove some and's :
If the current-user C knows X
and the current-user C knows Y
and X is different from Y
and X knows Z
and Y knows Z
and Z is different from C
then Z is a friend-proposal for C .
I hoped that using variables would ease the analysis. But no !
Now there are 3 errors:
- Subject or Object of this verb makes an illegal reference. --> for
"know" and "be"
- Adjectives are not supported.
I give up for now, and I 'll read Kaarel's thesis .
I got an answer from Norbert E. Fuchs <fuchs@ifi.uzh.ch> : it works !
If a current-user C knows a person X
and knows a person Y
and X differs-from Y
and X knows a person Z
and Y knows Z
and Z differs-from C
then Z is a friend-proposal of C .
Now the issue is with differs-from ; in N3 logic it is log:notEquals ; in pure SWRL there is probably nothing. Maybe in ACE DRS or in SWRLTab there is something.
:) In fact there is swrlb:notEqual
; see SWRL Submission : 8.1. Built-Ins
for Comparisons .
So now the issue is with differs-from ; I saw nothing about equality in the documentation. How can equality be expressed in ACE and in DRS ?
>>>> Question asked on the list march 13th <<<<
Detailed answer by Kaarel on 15th:
The source code of AceWiki and the ACE Editor is now hosted on Launchpad
svn checkout http://aceview.googlecode.com/svn/trunk/ aceview-read-only
I could download a branch dedicated to Protégé 4.1 :
svn checkout http://aceview.googlecode.com/svn/branches/1_3 aceview-1.3
r52 | kaljurand | 2009-10-19 22:22:36 +0200 (lun. 19 oct. 2009) | 1 ligne
Branch for experimenting with ACE View 1.3.x with Protege 4.1 (OWL-API 3)
Business Rules Community
http://www.brcommunity.com/
I have a question about insertLogical ; I am tempted to use it all the time, but I wonder how much will I have to pay in terms of performances
Ontoprise: rules (F-Logic) + databases
TO READ: http://www.meetup.com/Web-Of-Data/calendar/12317420/
http://java.sun.com/developer/technicalArticles/J2EE/jpa/
TODO
Because the FOAF RDF takes some time to download and convert to N3, the button should not be active until then
Thread.sleep( 400 );
TODO
Form generator in Protégé: reuse ?
exemple in N3 :
:myClass :hasconstraint :c .
:c :hasFormula { ?P :name "bush" . }.
:c :hasMessage string:concat ( "bla" ?P " is wrong" ).
versus:
{ ?P a :Person . ?P :name "bush" . } => { ded:exception :throw " is already retired!" . } .
TODO explain in the Manual
--help --debug
W3C Working Draft 16 June 2009
http://www.w3.org/TR/dcontology/
In protege's SWRL Factory FAQ
http://protege.cim3.net/cgi-bin/wiki.pl?SWRLFactoryFAQ
I found the location of the swrl definition in owl
http://www.daml.org/rules/proposal/swrl.owl
for Protégé; in fact the original proposal for SWRL has another format for rules, related to RULEML .
Currently I obtain this:
{_:sk1 a :Grandchild. _:sk1 :sibling _:sk2. _:sk1 :hates _:sk2} => {_:sk1 a :BadChild}.
Replaced this:
{ _:d e:findall ( ?A {?RULE :n3_antecedent_has ?A} ?LA ). _:d e:findall ( ?C {?RULE :n3_consequent_has ?C} ?LC ). ?LA log:conjunction ?FA . ?LC log:conjunction ?FC . } => { ?FA => ?FC }.
Protégé 4.0.2 is in a worse shape than I thought; it's impossible to import the FOAF ontology!
[protege-owl] Importing FOAF ontology in 4.0.2
https://mailman.stanford.edu/pipermail/protege-owl/2010-February/013485.html
Then, using this snapshot 4.1 , I try to import my small N3 file:
Parser: TurtleOntologyParser uk.ac.manchester.cs.owl.owlapi.turtle.parser.ParseException: Encountered " <PNAM E_NS> "ege: "" at line 7, column 1. Was expecting: <EOF>
There is nothing special on line 7:
@prefix : <http://xmlns.com/foaf/0.1/> . @prefix owl: <http://www.w3.org/2002/07/owl#> . @prefix ege: <http://eulergui.sf.net/examples/> . @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> . @prefix xsd: <http://www.w3.org/2001/XMLSchema#> . ege: a owl:Ontology .
Then I try to enter an SWRL rule:
ege:current_user(?C,true) current_user(?C,true) -> friend_proposition(?C,?Z)
????????????????? TODO complete ??????????? It finally worked !!!!!!!!!!!!
I start writing a tutorial on writing rules, and various design patterns.
It will address issues of business rules, transformations, applications, validation, processing lists, etc..
There is little material directly on the N3 rules: there are things about SWRL, Drools, etc..
$ svn commit -m 'swrl-n3-rules.n3p: now the SWRL rules are turned into blank nodes, but the generated implication is still not working' \ dl-safe.owl_data.n3 swrl-n3-rules.n3p swrl-n3-rulesQ.n3 swrl-n3-rules.n3
http://en.wikipedia.org/wiki/Rewriting
http://rewriting.loria.fr/
http://esw.w3.org/topic/foaf+ssl
I had a chat with Henry Story on #swig IRC
working_on_ntriples_support_in NetBeans
He will be there:
http://www.meetup.com/Web-Of-Data/calendar/12317420/
<bblfish> what I would like would be an N3 editor in an IDE, which when I highlight an N3 relation will (do a HTTP get if it is not in cache) and show me the doc, and the possible relations one can use from it
<bblfish> a bit like code completion
<jmv> yeah that looks fine .
<bblfish> then have all the reasoning engine also nicely embedded
<bblfish> selectable
<bblfish> but not something too far from code
<bblfish> so for example Protege is just too far away from the code
<bblfish> most developers know how to create object hierarchies from code, so there is no need to hide that
<bblfish> as much
<jmv> you're right
<jmv> in fact Protégé lies in between code oriented tools like EulerGUI, and "natural" language tools like Attempto
DONE EulerGUI:
model-rules-coherence.n3 : test and enhance; works with Euler only
Do you know of an example of an application, a GUI or a server, that embed Maven to download jars corresponding to features in lazy way, just like Maven itself does ?
Datao by Olivier Rossel is a nice graph based GUI for RDF.
I should try Datao on Windows or 32 bit Linux :
We are an Open Source Software Editor, and as such we are very interested in students' usage and feedback of EulerGUI.
We wellcome suggestions, use cases and bug reports.
EulerGUI is a turntable for Semantic Web, and beyond (UML, ECore, XML Schema), with N3 logic rules for querying, graph transform, validation. It can be used both for software engineering and business domain reasoning. Complementary to Protégé, Pellet and Jena, it can be used for learning Web Semantic and rule-based design.
Questionnaire
First did you download EulerGUI?
Did you try the snapshot version at http://eulergui.sourceforge.net/tmp/ ? If yes which SCM revision; see it in Help / About ...
Did you try the conversion XMI or UML ==> N3 ==> OWL ?
Did you try the conversion plain XML ==> N3 ?
Do you have a prior experience with a rule language (SWRL, Drools, JRules, ...) ?
Do you have a prior experience with a pattern language (XSLT, yacc, JavaCC, AntLR, ...) ?
Do you have a prior experience with a logic language like Prolog?
What are the most annoying things with EulerGUI?
For semantic Web, do you use the N3 or Turtle languages?
Are you a Java developper?
Do you work on Windows, Linux, ou Mac ? Which version ?
What other technologies are you using?
Is there a web site or a report about your project? If not, what is the web site of your faculty department?
Wrong
Mary likes chocolate. --> an article or every, no, ... is necessary
Mary v:likes n:chocolates.
Mary likes chocolates.
Mary likes all the chocolates.
Warning anaphor
Mary v:likes the n:chocolates.
Mary likes each of the chocolates.
Right
Mary v:likes all n:chocolates.
Mary likes all chocolates.
Mary likes some chocolates. ==> Paraphrase : Mary likes at least 2 chocolates.
Mary likes each of the chocolates.
Mary likes a chocolate.
Mary likes no chocolate.
In fact what one really means with "Mary likes chocolate" is , in the countable sense :
Every chocolate is a food. Mary likes every chocolate.
or, in the mass sense :
Every chocolate is a food. Mary likes some chocolate.
or
Every chocolate is a food. Mary likes all chocolate.
In fact there is problem with the last 2 sentences ; chocolate is "countable" by first phrase, and "mass" by the second.
The wrong phrases violate the rules for noun phrases, see "2.1.3 Mass Noun Phrases" or "2.1.2 Plural Countable Noun Phrases" in :
http://attempto.ifi.uzh.ch/site/docs/ace_constructionrules.html
mvn exec:java -Dexec.args=
BUILD SUCCESSFUL on Linux, Windows 7 and XP !!!!!!!!!!!
On Windows 7 + cygwin I have the message "svn: Working copy ... locked"
Refering to http://maven.apache.org/scm/subversion.html , where should I put <svn-settings> ?
Has Maven + Subversion been tested on Windows 7 + cygwin ?
I downloaded non-cygwin svn for Windows from silksvn.com , and it works !!
adapted TestEulerGUIInputs to new JEdit-syntax component
TODO drag'n'drop of the N3 source buttons, for example towards Protégé
Protégé should take an OWL file or URL as argument.
An error occurred while collecting items to be installed
session context was:(profile=PlatformProfile, phase=org.eclipse.equinox.internal.provisional.p2.engine.phases.Collect, operand=, action=).
No repository found containing: osgi.bundle,org.eclipse.emf.ocl,1.1.101.v200808291106
No repository found containing: org.eclipse.update.feature,org.eclipse.emf.ocl,1.1.101.v200808291106-108Z7w3119193_2217
No repository found containing: osgi.bundle,org.slf4j.extendable,1.4.3
Posted on the Jena list
I made a test for a small rule from this example:
http://owldl.com/ontologies/dl-safe.owl
Grandchild(?x) , hates(?x, ?y) , sibling(?x, ?y) -> BadChild(?x)
Here is a sketch of a translation of SWRL to N3 logic, implemented in N3 logic .
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples/swrl-n3-rules.n3
This is just a sketch, because only swrl:ClassAtom and swrl:IndividualPropertyAtom criteria are translated .
The result is :
{:x rdfs:type :Grandchild} => {:x rdfs:type :BadChild}.
{:x :sibling :y} => {:x rdfs:type :BadChild}.
{:x :hates :y} => {:x rdfs:type :BadChild}.
What is wrong right now is that it generates several implies (=>) blocs, in fact one per criterium on the consequent side . But I hope it can be arranged, stay tuned .
URL: http://dbpedia.org/page/Barack_Obama
Content: application/rdf-xml
Strange error:
File not in supported encoding (UTF-8) java.io.IOException: File not in supported encoding (UTF-8) at org.wiztools.restclient.Util.inputStream2String(Util.java:88) at org.wiztools.restclient.HTTPClientRequestExecuter.execute(HTTPClientRequestExecuter.java:300) at org.wiztools.restclient.ui.RESTView$25.run(RESTView.java:1012) Caused by: java.nio.charset.MalformedInputException: Input length = 1 at java.nio.charset.CoderResult.throwException(CoderResult.java:277) at java.nio.charset.CharsetDecoder.decode(CharsetDecoder.java:798) at org.wiztools.restclient.Util.inputStream2String(Util.java:85) ... 2 more
New Java editor: prevent unsaved edits: now the window with unsaved edits does not close,
but saving it allows it to close
TODO
I discover the usage of rdf:value:
http://www.w3.org/TR/2004/REC-rdf-primer-20040210/#rdfvalue
I'm annoyed by the Java bug in URL implementation : "URL class definition voilates RFC 1738 Section 3.10"
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6561321
http://jena.hpl.hp.com/ has disapeared.
I should add myself to
http://protege.cim3.net/cgi-bin/wiki.pl?ProjectsThatUseProtege
or maybe the registration form I filled does it.
On this list of Projects That Use Protege, These Projects look good:
The EssentialProject is the collective name for a set of free, open source, Enterprise Architecture support tools that have been developed for use in conjunction with a variety of Enterprise Architecture approaches and frameworks (including TOGAF). (AI2)
DynaGent is an Enterprise Management Software, where Business Model are modeled as Ontology Model plus drools rules. We have developed a full ERP and CRM ontology Model, and we have starter to marketed it. (AHH)
gloze.base
parameterThere are things to know for the drop (RDF to XML conversion) with Gloze.
The gloze.base
parameter is "tolerant" when the "root resource"
is <> : e.g. adding this is mandatory, but any URL can be
provided, e.g. :
-Dgloze.base=file://foo.com
This should be modified: the gloze.base parameter should not be mandatory.
But when the "root resource" is not <> , the right
gloze.base
parameter is mandatory.
When the input file has root resource with a file URL, one must be cautious.
For example with this root resource:
<file:///tmp/translation-57.n3>
this does not work:
-Dgloze.base=file:/tmp/translation-57.n3
One must use this URL form:
-Dgloze.base=file:///tmp/translation-57.n3
Apparently this is related to the Java bug in URL implementation : "URL class definition voilates RFC 1738 Section 3.10"
http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6561321
Jena URI ressources from the Jena API have file:///
, contrary
to the JDK implementations of classes File, URL, URI.
Morewover, when reading an RDF file, the root resource must start with
file:///
, and gloze.base
also. When reading an RDF
file, Gloze tolerates a single slash in the resource URI for root in the file.
So it's better to stick to triple slashes when authoring or generating an RDF
for XML translation.
With the very simple N3 file based on the XHTML Schema (see below), I got that stack :
Thread [main] (Suspended (exception NullPointerException)) attribute.toXML(Element, Resource, Set<Statement>, Context) line: 326 attributeGroup.toXML(Element, Resource, Set<Statement>, Context) line: 140 attributeGroup.toXML(Element, Resource, Set<Statement>, Context) line: 136 complexType.toXML(Element, Resource, int, Set<Statement>, boolean, Context) line: 258 complexType.toXML(Element, Resource, int, Set<Statement>, Context) line: 246 element.toXML(Node, RDFNode, Context) line: 632 Context.toXML(Document, Resource) line: 221 Gloze.drop(Resource) line: 747 Gloze.drop(Model, URI) line: 724 Gloze.rdf_to_xml(URL, File, URI, Model) line: 524 Gloze.rdf_to_xml(URL, String) line: 560 Gloze.runGloze(String[]) line: 821 Gloze.main(String[]) line: 774
It was simple to apply some defensive programming.
Here a simple N3 file based on the XHTML Schema. This rather complex Schema is important in applications.
@prefix : <http://example.com#>.
@prefix html: <http://www.w3.org/1999/xhtml#>.
<> html:html _:html.
_:html html:body :body .
_:html html:head :head .
:head html:title "bla" .
With there arguments:
/home/jmv/src/eulergui/test/xhtml.n3 http://www.w3.org/1999/xhtml http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd
I got this rather long stack that is hard to understand. What is clear is that a Literal "bla" is cast as a Resource.
Thread [main] (Suspended (exception ClassCastException))
element.toXML(Node, RDFNode, Context) line: 631
element.toXML(Element, Resource, int, Set<Statement>, Context) line: 559
sequence.toXML(Element, Resource, int, Set<Statement>, Context) line: 184
choice.toXML(Element, Resource, int, Set<Statement>, Context) line: 155
sequence.toXML(Element, Resource, int, Set<Statement>, Context) line: 188
complexType.toXML(Element, Resource, int, Set<Statement>, boolean, Context) line: 263
complexType.toXML(Element, Resource, int, Set<Statement>, Context) line: 246
element.toXML(Node, RDFNode, Context) line: 632
element.toXML(Element, Resource, int, Set<Statement>, Context) line: 559
sequence.toXML(Element, Resource, int, Set<Statement>, Context) line: 184
complexType.toXML(Element, Resource, int, Set<Statement>, boolean, Context) line: 263
complexType.toXML(Element, Resource, int, Set<Statement>, Context) line: 246
element.toXML(Node, RDFNode, Context) line: 632
Context.toXML(Document, Resource) line: 221
Gloze.drop(Resource) line: 747
Gloze.drop(Model, URI) line: 724
Gloze.rdf_to_xml(URL, File, URI, Model) line: 524
Gloze.rdf_to_xml(URL, String) line: 560
Gloze.runGloze(String[]) line: 821
Gloze.main(String[]) line: 774
I also found the origin of a strange warning message :
[ WARN] - 2010-02-06 11:14:22,226 [AWT-EventQueue-0] com.hp.gloze
(BeanLoader.java:load:102)
cannot load http://www.w3.org/1999/xhtml#div
This is due to a div element , but not in the input of Gloze, in the XML Schema, inside an <xsd:documentation> . In this particular case, that is not in the main XSD :
http://www.w3.org/2002/08/xhtml/xhtml1-transitional.xsd
but in
http://www.w3.org/2001/xml.xsd ,
that is imported.
Gloze should ignore the content of <xsd:documentation> .
I modified BeanLoader to avoid the message.
I'm testing "drop" on a N3 file like this, corresponding to an XHML document :
@prefix html: <http://www.w3.org/1999/xhtml>.
_:root html:html _:html.
_:html html:body _:body.
_:body html:p _:sk1.
_:sk1 html:span :NealStephenson.
_:sk1 html:span "a".
_:sk1 html:span :scifiWriter.
First my code for "smart drop" was not good when the XML rood node is an RDF blank node ( _:sk0 ).
I did a correction in Gloze.rdf_to_xml() , but that was not enough. I got the "classical" error in method drop(Resource resource) :
[ WARN] - 2010-02-06 12:41:02,431 [main] com.hp.gloze (Gloze.java:drop:736)
drop: no schema mapping for resource: file:/home/jmv/src/eulergui/test/xhtml.n3
[ WARN] - 2010-02-06 12:41:02,435 [main] com.hp.gloze (Gloze.java:drop:739)
because no properties, is gloze.uri correctly defined?
I will let that aside <<<<
Google Search Engine Adds Support for RDFa, Or Do They?
http://googlewebmastercentral.blogspot.com/2009/05/introducing-rich-snippets.html
By popular demand, they added FOAF:
http://googlewebmastercentral.blogspot.com/2009/10/help-us-make-web-better-update-on-rich.html
TODO: this list of Converters to RDF should be made into RDFa: http://esw.w3.org/topic/ConverterToRdf
http://rdfa.info/wiki/Tools#RDFa_Extractors
phd_kaljurand.pdf ; Controlled English for Reasoning on the Semantic Web: decoi2009rewerse.pdf
Attempto Controlled English for Knowledge Representation : reasoningweb2008_fuchs.pdf
owled2007_kaljurand.pdf : Verbalizing OWL in Attempto Controlled English
owled2008eu_kaljurand.pdf : ACE View — an ontology and rule editor based on Attempto Controlled English
Faraz_Fallahi_Vorlage.pdf
Mark Watson's JavaAI3rd.pdf
http://www.faviki.com/person/Got
http://www.faviki.com/person/Got/website/www.xml.com
http://www.faviki.com/ Faviki is a social bookmarking tool that lets you use Wikipedia concepts as tags.
http://www.bbc.co.uk/blogs/radiolabs/s5/linked-data/s5.html
http://www.dfki.uni-kl.de/~sauermann/2006/11/cooluris/
http://www.w3.org/TR/cooluris/
How to Design Programs
An Introduction to Computing and Programming
http://www.htdp.org/2003-09-26/Book/curriculum.html
http://mitpress.mit.edu/sicp/
http://drupal.org/irc
http://blog.athico.com/2010/01/drools-inference-and-truth-maintenance.html
I found this called "Vim as Haskell IDE" : http://www.cs.kent.ac.uk/people/staff/cr3/toolbox/haskell/Vim/vim.html
compare ocaml haskell
http://www.haskell.org/pipermail/haskell-cafe/2005-May/009850.html
Haskell is rather mathematical, and mostly about functions, but it droped the essential of math functions syntax: the parenthesis!
Got these answers on the IRC :)
<ksf> jmv, that's because we don't multiply stuff as often as apply functions
<xerox> jmv - it's because the most important construct should use the lightest syntax: in this case function application, and the syntax is just juxaposition
[Eulergui-user] EulerGUI: new style of queries ==> snapshot, EulerGUI server
Snapshot uploaded at noon.
Revision 1200 - Directory Listing
Modified Tue Feb 2 10:09:52 2010 UTC (13 minutes, 23 seconds ago) by jmvanel
N3 searches / Drools queries: appearance in the GUI:
- buttons for search : TESTED red cross delete button
Revision 1199 - Directory Listing
Modified Mon Feb 1 23:26:04 2010 UTC (10 hours, 57 minutes ago) by jmvanel
an icon file was forgotten : search.png
LarKC: The Large Knowledge Collider http://www.larkc.eu/
Snapshot uploaded at 12pm
Revision 1198 - Directory Listing
Modified Mon Feb 1 23:12:12 2010 UTC (18 minutes, 43 seconds ago) by jmvanel
N3 searches / Drools queries: appearance in the GUI:
- test the new SEARCH action: commit the test facebook.n3p
Revision 1197 - Directory Listing
Modified Mon Feb 1 22:50:39 2010 UTC (40 minutes, 16 seconds ago) by jmvanel
N3 searches / Drools queries: appearance in the GUI:
- test the new SEARCH action
- editor button for searches the right doc.
TODO
- button for search should have a red cross delete button
Revision 1196
Add a button in ButtonsForN3Source to launch the new N3 search
Revision 1194
Refactor : extract the panel for buttons For an N3 Source to a new class ButtonsForN3Source
Revision 1193 - Directory Listing
Modified Mon Feb 1 15:39:50 2010 UTC (24 minutes, 2 seconds ago) by jmvanel
N3 searches / Drools queries: first appearance in the GUI:
- for the second query created with orange ? button and after, it is put among the searches
- button is present after re-opening project
TODO
- button for search should be different from the unique query button, without "activated" checkbox
- editor for searches open the unique query
Revision 1192 - Directory Listing
Modified Mon Feb 1 15:32:46 2010 UTC (31 minutes, 6 seconds ago) by jmvanel
doc.: more about EulerGUI Drools N3 engine built-ins
Question on irc.freenode.org##swing
Hi ! I have a multi-valued property that is a LinkedHashMap<String, Something> ,
and I want to have a listener on that for add and remove;
this does not fit well with the standard indexed property;
is there some good practice, or some support classes , similar to java.beans.PropertyChangeSupport ?
Nice post on the Jena list:
Re: [jena-dev] What is JENA inference support lacking in the technical sense
Working on the specification of EulerGUI Server:
https://sourceforge.net/apps/trac/eulergui/wiki/EulerGUIServer. That wiki is not very agreable :( .
I wonder if there is a more of less standard way of wrapping a pre-cooked SPARQL query as a simple HTTP GET request.
It would have the query name, and possibly parameters that would be replaced in the query before running it. Here is discussion for parametrized (or parameterized ?) queries for SPARQL :
http://www.w3.org/2009/sparql/wiki/Feature:Parameters
http://www.w3.org/2009/sparql/wiki/Feature:Query_by_reference
that proposes a query like:
/sparql?query-uri=http://www.example.org/queries/test.rq
See also: BioGateway: a semantic systems biology tool for the life sciences
Noop , the new Java deescendant from Google:
http://code.google.com/p/noop/
Thea is an OWL 2 and SWRL engine in Prolog . I got responses from Vangelis.
Complained on group fuxi-discussion
Here is the FuXi command that EulerGUI generates:
EX=http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples FuXi --input-format=n3 --output=n3 --ruleFacts --closure \ --rules=$EX/facebook-rules.n3 \ --rules=$EX/facebook-data.n3 \ --rules=http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/owl-SymmetricProperty.n3 \ --filter=$EX/facebookQ.n3
Here is the stack I get:
/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc_II.dev-py2.6.egg/FuXi/Rete/AlphaNode.py:6: DeprecationWarning: the sets module is deprecated from sets import Set /usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc_II.dev-py2.6.egg/FuXi/Rete/TopDown.py:12: DeprecationWarning: the md5 module is deprecated; use hashlib instead import itertools, copy, md5 Traceback (most recent call last): File "/usr/local/bin/FuXi", line 8, in <module> load_entry_point('FuXi==1.0-rc-II.dev', 'console_scripts', 'FuXi')() File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 277, in load_entry_point return get_distribution(dist).load_entry_point(group, name) File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 2180, in load_entry_point return ep.load() File "/usr/lib/python2.6/dist-packages/pkg_resources.py", line 1913, in load entry = __import__(self.module_name, globals(),globals(), ['__name__']) File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc_II.dev-py2.6.egg/FuXi/Rete/CommandLine.py", line 14, in <module> from FuXi.Rete.TopDown import * File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc_II.dev-py2.6.egg/FuXi/Rete/TopDown.py", line 16, in <module> from FuXi.Rete.Magic import AdornLiteral File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc_II.dev-py2.6.egg/FuXi/Rete/Magic.py", line 27, in <module> from rdflib.sparql.Algebra import RenderSPARQLAlgebra ImportError: No module named Algebra
https://sourceforge.net/mailarchive/forum.php?forum_name=jena-devel
http://tech.groups.yahoo.com/group/jena-dev/messages
https://launchpad.net/acewiki/
http://attempto.ifi.uzh.ch/webapps/acewikiattempto/?showpage=AceWiki
Funny , but certainly a fake interview of Sroustrup:
http://artlung.com/smorgasborg/Invention_of_Cplusplus.shtml?
ACE View — an ontology and rule editor based on Attempto Controlled English, by Kaarel Kaljurand
http://www.semanticoverflow.com/questions/235/simple-cli-useable-owl-reasoner
W3C list of OWL 2 wiki/Implementations
YSR - Yet another Semantic web Reasoner, in SWI Prolog
Sent a mail to Vangelis, the author of Thea OWL engine in Prolog
http://www.w3.org/TR/owl2-profiles/ : EL, QL, RL
http://lat.inf.tu-dresden.de/systems/cel/
http://www.hermit-reasoner.com/java.html
I tried to teach him about carpel: it has parts: style, stigma, ovary (cf Flower Morphology ).
Several things are wrong
2. ovary -- ((vertebrates) one of usually two organs that produce ova and secrete estrogen and progesterone)
Open Mind has 20 predefined predicates (MadeOf, isA) ,see :
http://openmind.media.mit.edu/en/add/
It is part of a larger project, ConceptNet .
It could maybe benefit from a cooperation with Attempto.
I wonder how to extract a part of the database, and also in which format it is available.
I also wonder how the contradictory and low-quality assertions are filrered.
documentation.html : add Other useful tools / Export from N3/RDF
Revision 1161 - Directory Listing
Modified Thu Jan 21 13:55:32 2010 UTC (100 minutes, 51 seconds ago) by jmvanel
Thanks to the exec-maven-plugin one can now launch the GUI with
mvn exec:java
Revision 1160 - Directory Listing
Modified Wed Jan 20 18:44:06 2010 UTC (20 hours, 52 minutes ago) by jmvanel
When creating a new SPARQL query, with a non-existing file, the result of the query is put in a new /tmp file, but it was not available through the leftmost button.
Revision 1159 - Directory Listing
Modified Wed Jan 20 12:33:06 2010 UTC (27 hours, 3 minutes ago) by jmvanel
was a regression : drag'n'drop of a Project .n3p was not working
Revision 1158 - Directory Listing
Modified Wed Jan 20 12:18:56 2010 UTC (27 hours, 17 minutes ago) by jmvanel
for Bernard , add the OK label on button that was missing in popup URL Chooser
When creating a new SPARQL query, with a non-existing file, the result of the query is put in a new /tmp file, but it was not available through the leftmost button.
NOTE: I "simply" redo the layout, because the action for the leftmost button is not easily accessible. I could pre-create the /tmp file, or have an observer for changes on the N3 source. The RDF case is implemented differently :( .
The main reference is:
http://eulersharp.sourceforge.net/README : "Just running Euler via RESTfull webservice" .
I unzipped the Euler distribution in
/home/jmv/apps/Euler-2009-12-18
, then
cd /home/jmv/apps/Euler-2009-12-18
chmod u+x eye
First I ensure that eye is in the path : this runs fine:
~/bin/eye --nope http://www.agfa.com/w3c/euler/medic.n3 \ --query http://www.agfa.com/w3c/euler/medicF.n3
I simply created a script ~/bin/eye containing:
( cd /home/jmv/apps/Euler-2009-12-18 ./eye $* & )
But this was useless for the server.
I simply started the class euler.Codd
in the Euler
distribution's directory /home/jmv/apps/Euler-2009-12-18 , with this argument
:
--port 8088
Then I can run from Firefox the URL-encoded version of the Euler run above :
Using REST Client ( chrome://restclient/content/restclient.xul ) , or even Firefox, one can send this (the URL-encoding is done before sending):
http://localhost:8088/.eye --nope http://www.agfa.com/w3c/euler/medic.n3 --query http://www.agfa.com/w3c/euler/medicF.n3 |
I wonder whether there is a way to output plain N-Triples (no prefixes).
http://www.2paths.com/2008/12/30/mulgara-rdf-store/
EulerGUI doc.: details on UML import, add borders
There is an OMG specification for the "Ontology Definition Metamodel (ODM)":
http://www.omg.org/spec/ODM/1.0/PDF/
Among other things, it describes "Mapping UML to OWL" (Chapter 16).
Add to doc.; add an example
Joseki is a Web for RDF in the Jena project.
cvs -d:pserver:anonymous@joseki.cvs.sourceforge.net:/cvsroot/joseki login cvs -z3 -d:pserver:anonymous@joseki.cvs.sourceforge.net:/cvsroot/joseki co Joseki3 cd Joseki3 ant jar export JOSEKIROOT=$PWD chmod u+x bin/rdfserver bin/joseki_path bin/make_classpath bin/rdfserver
That's it, I have my Joseki server here :
http://localhost:2020/query.html
To go further: Configuring Joseki + Pellet + TDB
$JOSEKIROOT/doc/configuration.html
http://www.w3.org/Submission/SPARQL-Update/#sec_examples
Now, I should add a server that wraps the class Project from EulerGUI ...
More precisely, it should wrap a Drools Working Memory that can keep the user data for the duration of the session. The data persistence needs more thinking, as the first version will be a pure expert system.
But what requests will this server accept? Several possiblities:
insert or delete an single triple, given by parameters subject, predicate, object
this is not particularly interesting, neither on the calling nor callee side; we will either use next option, N-Triples message sent by an HTTP PUT message:
this will replace options 1 and 2 ( even delete via predicates kb:replace )
this will work much like a SPARQL query, except that the syntax is N3 logic for query, and N3 or N-Triples for result;
TODO in EulerGUI Drools engine:
jmv-desktop:~/src/fuxi% hg pull pulling from https://fuxi.googlecode.com/hg/ searching for changes adding changesets adding manifests adding file changes added 6 changesets with 16 changes to 15 files (run 'hg update' to get a working copy) jmv-desktop:~/src/fuxi% hg update 15 files updated, 0 files merged, 0 files removed, 0 files unresolved
This article illustrates the subtleties of regular expressions, and their limits compared to compiler generators:
Finding Comments in Source Code Using Regular Expressions
Move towards a normalization of strings and number when Triples are created (not in toString() and equals() ).
Now the factorial test passes with initialization
0.0 :factorial 1.0 .
but not with
0 :factorial 1.
Tests were in error (solved):
test_cv2(eulergui.gui.TestGenericGuiGeneration)
test_uml2(eulergui.gui.TestGenericGuiGeneration)
test_ecore2(eulergui.gui.TestGenericGuiGeneration)
test_uml(eulergui.gui.TestSwingGeneration)
test_ecore(eulergui.gui.TestSwingGeneration)
Sesame 2.3.0 was released on December 1, 2009 . They write:
First of all, all of SPARQL's functionality is now also available in SeRQL.
but it's not clear whether Sesame 2.3.0 is fully compliant with SPARQL.
It is not clear what is the difference between Joseki and TDB, as they both support the SPARQL Protocol and the SPARQL RDF Query language.
I should announce EulerGUI 1.4 on jena-dev@yahoogroups.com .
Does not work with SWI Prolog Version 5.6.64 included in Ubuntu:
prolog_ide( open_navigator( '.' )). false.
EulerGUI is a GUI for RDF, N3 and rules, open source in Java.
The main new feature in this release is plain XML import and export, based on XML Schema and a reasonable mapping between RDF and plain XML. The following XML Schema are hard coded (but you may ask for more): XHTML, SVG, MathML, XForms, XSLT, WSDL, DocBook, XBRL, Maven, Dublin Core in XML, UBL (from Oasis), KML (geography).
There is also a new N3 / RDF source: query from SPARQL services (using ARQ 2.8.2 from Jena project ) .
The OWL reasoner Pellet is integrated in a simple way, and shows OWL class tree for each source.
We now test the GUI at the functional level . It is happiness to see all these use cases that turn on their own quickly ! It now runs in about 3 minutes, but it should even be reduced by parallelizing the Drools compilations, which takes several seconds each. Jemmy is a test library for Swing and SWT. Jemmy has been used for years by the NetBeans team. The tests are written in Java, and JUnit tests added to the EulerGUI test set. These EulerGUI tests include the use cases of the Manual of Deductions Project : generation of applications from sources on Internet in languages N3, OWL, RDFS, UML, and eCore.
Download:
http://sourceforge.net/projects/eulergui/
Change Log
- update to Euler(sharp) 2009-12-18
- D'n'D for URL of project documents
- New Action to Open result in N3 editor;
the result (originally in N-Triples) is converted in N3.
- new N3 source: query from SPARQL services (using ARQ 2.8.2)
- First shot at integrating OWL reasoner Pellet: show class tree for all sources
- export from N3/RDF to plain XML, with Gloze converter, for project sources
and inference result
- larger set of pre-configured XML Schemata for importing and exporting
- now drag'n'drop with a plain XML (non RDF) works and is processed by Gloze;
- Drools N3 engine : built-ins: combine e:findall and math:memberCount; implemented greaterThan, notLessThan, notGreaterThan, notEqualTo, equalTo
- keep the order of N3 statement by the parser
- upgrade Jena to version 2.6.2
- upgrade Drools to 5.1.0M1
- add Jemmy GUI high-level functionnal tests
- svn revision number and Class-Path are visible in Help / About ... as SCM-Revision:
- import URL with .xml suffix: distinguish RDF and plain XML files
EulerGUI is a GUI for RDF, N3 and rules, open source in Java.
The preceding announce for EulerGUI on this list was :
https://mailman.stanford.edu/pipermail/protege-owl/2009-September/012051.html
I said that the rule language is N3 logic . N3 logic is similar to SWRL in its semantics, but the syntax is similar to the body of SPARQL queries.
But I forgot to say that, contrary to SWRL, the predicates and classes do not need to be declared beforehand. There are 4 rule engines available, including one 100% Java based on the famous RETE engine Drools .
EulerGUI has a notion of project, including many kinds of sources that participate in the inference launch: N3, RDF, OWL/RDF, XMI/UML, plain XML, results of SPARQL queries.
The Euler Prolog engine can use rules in N3 logic for most of OWL concepts, see documents in owl-*.n3 in
http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/?sortby=file#dirlist
The main new feature in this release is plain XML import and export, based on XML Schema and a reasonable mapping between RDF and plain XML. The following XML Schema are hard coded (but you may ask for more): XHTML, SVG, MathML, XForms, XSLT, WSDL, DocBook, XBRL, Maven, Dublin Core in XML, UBL (from Oasis), KML (geography).
There is also a new N3 / RDF source: query from SPARQL services (using ARQ 2.8.2 from Jena project ) .
Download:
http://sourceforge.net/projects/eulergui/
Change Log
[EulerGUI 1.4 2010-01-05]
- update to Euler(sharp) 2009-12-18
- D'n'D for URL of project documents
- New Action to Open result in N3 editor;
the result (originally in N-Triples) is converted in N3.
- new N3 source: query from SPARQL services (using ARQ 2.8.2)
- First shot at integrating OWL reasoner Pellet: show class tree for all sources
- export from N3/RDF to plain XML, with Gloze converter, for project sources
and inference result
- larger set of preconfigured XML Schemata for importing and exporting
- now drag'n'drop with a plain XML (non RDF) works and is processed by Gloze;
- Drools N3 engine : combine e:findall and math:memberCount; implemented greaterThan, notLessThan, notGreaterThan, notEqualTo, equalTo
- keep the order of N3 statement by the parser
- upgrade Jena to version 2.6.2
- upgrade Drools to 5.1.0M1
- add Jemmy GUI high-level functionnal tests
- svn revision number and Class-Path are visible in Help / About ... as SCM-Revision:
- import URL with .xml suffix: distinguish RDF and plain XML files
java.lang.IndexOutOfBoundsException: index 35 at java.util.concurrent.atomic.AtomicReferenceArray.rawIndex(AtomicReferenceArray.java:31) at java.util.concurrent.atomic.AtomicReferenceArray.set(AtomicReferenceArray.java:94) at org.drools.common.ConcurrentNodeMemories.clearNodeMemory(ConcurrentNodeMemories.java:50) at org.drools.common.AbstractWorkingMemory.clearNodeMemory(AbstractWorkingMemory.java:1601) at org.drools.reteoo.QueryTerminalNode.doRemove(QueryTerminalNode.java:196) at org.drools.common.BaseNode.remove(BaseNode.java:95) at org.drools.reteoo.ReteooBuilder.removeRule(ReteooBuilder.java:237) at org.drools.reteoo.ReteooRuleBase.removeRule(ReteooRuleBase.java:414) at org.drools.common.AbstractRuleBase.removeRule(AbstractRuleBase.java:731) at org.drools.common.AbstractRuleBase.removePackage(AbstractRuleBase.java:659) at n3_project.helpers.N3SourcetoDrools.removeRulePackage(N3SourcetoDrools.java:625) at n3_project.helpers.N3toDroolsUpdater.translate(N3toDroolsUpdater.java:57) at eulergui.project.Project.translateN32Drools(Project.java:711)
The user manual is here:
Dragomir D. liked my article "AI use for software development : the new paradigm". I'm reading his article quest to automated test generation .
Thanks to him, I knew NeON toolkit . I tried it , but the pre-release is unusable ... And the 1.2.3 release has no download for Linux 64 bits.
Dialog on the Protégé list:
http://article.gmane.org/gmane.comp.misc.ontology.protege.owl/31431
To model in OWL a route through several cities, I do not know what is good practice: use rdf:List , or rdf:Seq , or something else .
You are thinking at the rdf level of abstraction and not the owl level. If you use rdf:List or rdf:Seq then you will have an owl full specification. Reasoners generally will not work and it is very likely that the meaning of the ontology will not be the same for each reader.
Nick Drummond has given several presentations where he has described how to do what you want in OWL and exactly what you can say in OWL. A quick google search gives the powerpoint presentation [1] where he describes the approach. There is also an ontology that you can find here [2].
-Timothy
[1] http://www.co-ode.org/resources/tutorials/bio/slides/owl-lists29_11_05.ppt
[2] http://www.co-ode.org/ontologies/lists/2008/09/11/list.owl
Thanks a lot Timothy .
So what I did is import the OWL List ontology from the generic URL
http://www.co-ode.org/ontologies/lists/list.owl
and particularize the class OWLList as a list of cities, by two owl:Restrictions :
Itinerary equivalentTo
hasContents only City
and OWLList
and isFollowedBy only Itinerary
As exemplified in :
http://www.co-ode.org/ontologies/lists/examples/motif-example.owl
What I regret is that the OWL List ontology is not a "standard" ontology , but it's not a big deal.
Further to the references that Timothy provided, there is a paper describing the list pattern:
Drummond, N., Rector, A.L., Stevens, R., Moulton, G., Horridge, M., Wang, H, Seidenberg, J. Putting OWL in Order: Patterns for Sequences in OWL, in 2nd OWL Experiences and Directions Workshop, Athens, GA
http://www.webont.org/owled/2006/acceptedLong/submission_12.pdf
http://granddictionaire.com/ propose pour call back, "procédure de rappel". Je dirais plutôt "rappel sur évènement"
http://foldoc.org/ Free On-line Dictionary of Computing
http://en.wikipedia.org/wiki/Non-monotonic_logic
http://en.wikipedia.org/wiki/Closed_world_assumption
http://en.wikipedia.org/wiki/Horn_clause
Subscribed to the attempto Mailing List . my message: "Introduction and translation to N3 logic"
There is in fact some Prolog sources for SWRL in utils/drs_to_owlswrl.pl , but it is not accessible through the command line predicate ...
http://www.w3.org/2005/rules/wg/wiki/List_of_Rule_Systems
Maven generated Project Dependencies
The CHANGELOG:
- update to Euler(sharp) 2009-12-18
- D'n'D for URL of project documents
- New Action to Open result in N3 editor;
the result (originally in N-Triples) is converted in N3.
- new N3 source: query from SPARQL services (using ARQ 2.8.2)
- First shot at integrating OWL reasoner Pellet: show class tree for all sources
- export from N3/RDF to plain XML, with Gloze converter, for project sources
and inference result
- larger set of preconfigured XML Schemata for importing and exporting
- now drag'n'drop with a plain XML (non RDF) works and is processed by Gloze;
- Drools N3 engine : combine e:findall and math:memberCount; implemented greaterThan, notLessThan, notGreaterThan, notEqualTo, equalTo
- keep the order of N3 statement by the parser
- upgrade Jena to version 2.6.2
- upgrade Drools to 5.1.0M1
- add Jemmy GUI high-level functionnal tests
- svn revision number and Class-Path are visible in Help / About ... as SCM-Revision:
- import URL with .xml suffix: distinguish RDF and plain XML files
jmv-desktop:~/src/eulergui_test/eulergui% DISPLAY=:1 mvn release:prepare ... [INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 8 minutes 13 seconds [INFO] Finished at: Mon Jan 04 21:30:29 CET 2010 [INFO] Final Memory: 19M/288M
I had never realized that MVEL used in Drools is in fact a separate language: http://mvel.codehaus.org/About. It will also be used in rule engine Take.
RIF is the W3C Rule Interchange Format. It's an XML language for expressing rules which computers can execute.
public-rif-comments@w3.org Mail Archives
R2ML is a comprehensive and user-friendly XML rule format.
From this RIF Implementations list , I see that Euler implements RIF ! :) , using external RIF/XML->N3 translator . But where is this external translator ?
This works, but it is just the test for RIF builtin predicates and functions:
eye --nope --plugin \
http://eulersharp.sourceforge.net/2006/02swap/rif-plugin.yap \
http://eulersharp.sourceforge.net/2007/07test/rifP.n3 --query \
http://eulersharp.sourceforge.net/2007/07test/rifQ.n3
Other implementation of RIF: SILK (by Grossof et al., site down), fuxi (see FuXiUserManual#FuXi_.SPARQL )
This is how to launch and ordinary Euler run (reminder) :
yap -l euler.yap -g main -- --nope graph.filter.n3 --query graph.axiom.n3
or
./eye --nope graph.filter.n3 --query graph.axiom.n3
Reading http://attempto.ifi.uzh.ch/site/docs/
I installed ACE without problem from the distribution. Then I can run commands e.g. (can also run on the the APE Web client without installing anything ) :
./ape.exe -cfol -text "Every cat is an animal." ./ape.exe -solo fol -text "Every cat is an animal." ./ape.exe -solo drsxml -guess -text \ "If the customer is a student then he receives a discount." ./ape.exe -solo drspp -guess -text \ "If a customer has more than 50 total purchases then he/she is a gold customer." ./ape.exe -solo drspp -guess -text "if the customer is premium and the product is luxury then the discount for a customer who buys a product is 7.5%." [] [A, B, C, D, E, F] object(C, customer, countable, na, eq, 1)-1/3 property(A, premium, pos)-1/7 predicate(B, be, C, A)-1/4 object(F, product, countable, na, eq, 1)-1/12 property(D, luxury, pos)-1/16 predicate(E, be, F, D)-1/13 => [G, H, I, J, K] object(K, discount, countable, na, eq, 1)-1/21 object(G, customer, countable, na, eq, 1)-1/24 object(H, product, countable, na, eq, 1)-1/30 predicate(I, buy, G, H)-1/26 modifier_pp(J, for, G)-1/22 predicate(J, be, K, real(7.5))-1/31
This last one coming from the RuleML tutorial is interesting because,
calling ./ape.exe -solo paraphrase
on it, one sees that the input
is wrong. After some trials and errors I got this:
./ape.exe -solo paraphrase -guess -text "If a customer C is premium and the customer C buys a product P and P is luxury then the discount is 7.5% for P applied to C ." If a customer X1 is a:premium and the customer X1 buys a n:product X2 and the n:product X2 is a:luxury then a n:discount is 7.5 applied to the customer X1 for the n:product X2.
Note also that here "the discount" triggers this message on the APE Web client :
The definite noun phrase 'the discount' does not have an antecedent and thus is not interpreted as anaphoric reference, but as a new indefinite noun phrase.
Note also that here "applied" is interpreted as an adverb. This variant is propably better:
./ape.exe -solo drspp -guess -text \ "if a customer C is premium and the customer C buys a product P and P is luxury then a discount of 7.5% for P is applied to C ." [] [A, B, C, D, E, F, G] object(A, customer, countable, na, eq, 1)-1/3 property(B, premium, pos)-1/8 predicate(C, be, A, B)-1/5 object(D, product, countable, na, eq, 1)-1/17 predicate(E, buy, A, D)-1/13 property(F, luxury, pos)-1/24 predicate(G, be, D, F)-1/21 => [H, I, J] object(H, discount, countable, na, eq, 1)-1/29 relation(H, of, real(7.5))-1/30 modifier_pp(J, for, D)-1/32 property(I, applied, pos)-1/37 predicate(J, be, H, I)-1/34 modifier_pp(J, to, A)-1/38
TODO :
Note : ACE has nothing to do with ACE - a collaborative editor :
http://en.wikipedia.org/wiki/ACE_%28editor%29
This bug is still present:
https://bugs.launchpad.net/ubuntu/+source/empathy/+bug/421572
(empathy:24589): tp-fs-DEBUG: stream 2 0x21725b0 (video) set_remote_codecs: called (empathy:24589): tp-fs-DEBUG: stream 2 0x21725b0 (video) set_remote_codecs: adding remote codec H264-SVC [96] (empathy:24589): tp-fs-DEBUG: stream 2 0x21725b0 (video) set_remote_codecs: adding remote codec H264 [97] (empathy:24589): tp-fs-DEBUG: stream 2 0x21725b0 (video) set_remote_codecs: adding remote codec H264-SVC-RFC [99] tp-fs-Message: tf_stream_error: stream error errorno=2 error=Codec negotiation failed: There was no intersection between the remote codecs and the local ones
I was looking for some solid links for resources and entry level to medium introductory material on the semantic web, RDF, and SPARQL. I like this intro by Marko A. Rodriguez: http://markorodriguez.com/Lectures_files/rdfrdfsowl.pdf
This was answered by Peter Neubauer, the guy of Neo Technology http://neo4j.org/
http://neotechnology.com/about-us
I'm surprised that one can add properties to a relationship !
Euler (updated to 2009-12-18), Jena, Pellet, Drools
I had a look at a RuleML example: http://ruleml.org/translator/exa/hunger.ruleml .
The various modularized parts of the XML Schema for RuleML are here:
For instance, datalog.xsd includes by schemaLocation 8 other modules. The hierarchy of models is detailed here:
http://ruleml.org/modularization/model/ruleml_m12n_09_uml_06-09-01.svg , which mainly says:
Binary-->datalog-->hornlog-->dishornlog-->folog
There is a PDF document called Content Models for RuleML .
http://ruleml.org/indesign.html : this design document seems to have a historical value...
http://www.ruleml.org/papers/tutorial-ruleml.html : this tutorial document is indeed the best one to understand the XML structure of RuleML.
See also the Cover pages on ruleML
I was able to compile and launch the translator from ACE to RuleML. It calls the Web service for ACE (that parses the Controlled English), and prints the XML for RuleML in a JPanel. The class DRSParser (made with JavaCC from the grammar DRSParser.jj , described in thesis "TRANSLATOR: A TRANSlator from LAnguage TO Rules", by David Z. Hirtle, April 12, 2006 ) parses the DRS from ACE, and directly generates the XOM XML elements obeying the XML Schema for RuleML. The translation rules are described in the JavaCC grammar. The crucial lines are:
queryString = QUERYBASE + PARAMS + URLEncoder.encode(aceText, "UTF-8"); nu.xom.Document doc = builder.build(queryString); String drs = doc.getRootElement().getFirstChildElement("drs").getValue(); java.io.Reader r = new java.io.BufferedReader(new java.io.StringReader(drs)); Element as = null; // parse DRS with DRS parser if (parser == null) parser = new DRSParser(r); else parser.ReInit(r); as = parser.Start();
I'm trying to figure out how I can export an ACE rule base (in DRS, discourse representation structure ) as N3 logic. RuleML is just one possible intermediary. Directly using the ACE tools in SWI Prolog might be better. There is in fact some Prolog sources for SWRL in utils/ , but no command line predicate ...
I tried to re-use the DRS XML, by converting it with EulerGUI and Gloze. Alas the order of the 2 DRS tags inside Implication is not kept in the conversion, and there is no XSD available for DRS. I could follow the same path, but with the XML RuleML translation provided by the translator from ACE to RuleML .
There is a short "Rosetta stone" between RuleML and N3, called "N3 in Object-Oriented RuleML".
An interesting article: Querying Ontologies: A Controlled English Interface for End-users
DONE
SourceFactory is used in DropURLTranferHandler instead of a duplicate implementation;
updated documentation on XML import/export, Sub-projects, Pipeline of projects (post-processing), and Launch OWL reasoner
TODO: test person_xforms.n3p
DONE
tested with test/simple.html.n3p
A MAJOR ACCOMPLISHMENT ! no need to specify anymore base URI; however depends on an accurate "catalog" of well known "root" RDF URI predicates, in class XMLExport. These "root" RDF URI predicates correspond to XML roots, according to a well known XML Schema, and follow the Gloze RDF-XML correspondence.
Tested XHTML import: TODO : clarify this:
Starting Gloze.main() with args /home/jmv/src/eulergui/test/simple.html java.io.IOException: Server returned HTTP response code: 503 for URL: http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1313) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) at com.hp.gloze.XMLUtility.read(XMLUtility.java:71) at com.hp.gloze.Gloze.xml_to_rdf(Gloze.java:370)
1. XML import
2.0 XML export if "root" RDF URI predicate is known
2.1 XML export if target namespace is known
3. XML export if only the RDF source is known ( "smart drop" )
Maybe use this constructor to initialize Gloze with the important Schema list from EulerGUI :
public Gloze(URL[] schemaLocation, URI[] targetNS) throws Exception {
DONE
Gloze.clearCache()
between; otherwise there is a
contradiction between the dynamics and static field in GlozeI wrote to Steve Battle, but that was a wrong impression:
The second time, a new Context is created, that does not have the globalElements Map (and other Maps) populated. I'll probably somehow somewhere reuse the Context object.
now all 39 Gloze specific tests pass, including TestOWL
TODO for Gloze itself:
DONE
eulergui.gui.TestEulerGUIOutputs is still failing;
WIP: find the RDF statement that will be converted to the XML root
element: added method findPredicate(Model model)
http://www.mtholyoke.edu/courses/dstrahma/cs341/myslides/Ch25_DedDB.PPT
I changed the Ant of Gloze:
<property name="java.debuglevel"
value="source,lines,vars"/>
because vars was missing !!!!!!!! The debugger showed only the arguments, not the local variables.
On december 2nd, I tested Gloze with Ant (see Testing my modifications in Gloze ). Now I can't do ant compile anymore (but did I really run it ?) ! But ant test still runs !
I applied this recipe :
"Debug Maven using Standalone Maven install"
from http://docs.codehaus.org/display/MAVENUSER/Eclipse+Integration, that is:
First of all you need to get corresponding Maven projects into the Eclipse workspace.
To debug Maven standalone Maven CLI you can set the following environment variable:
MAVEN_OPTS=-Xdebug -Xnoagent -Djava.compiler=NONE \
-Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000
Then start Maven as usual and attach remote debugger to Maven process on port 8000 using Eclipse's "Remote Java Application" configuration.
To that I added in pom.xml an ingredient from the next recipe:
<plugin> <artifactId>maven-surefire-plugin</artifactId> <configuration> <forkMode>never</forkMode> </configuration> </plugin>
Gloze "drop" (RDF to XML conversion) now works on an N3 file, but a special one, starting with :
<> kml_:kml [ a kml_:KmlType ; kml_:Placemark ...etc ...
This way the <> resource stands for the URI of the N3 file.
I discovered the role played by the gloze.base
parameter . In
the case of drop, this means the URI of the resource that will be converted to
the XML root element. Indeed in a general RDF graph there is no such thing as a
root.
I expected (naively) that Gloze was able to detect in a general RDF graph this "root" resource. But it does not, as it is not trivial.
So it has to be either given to Gloze, through the System Property
"gloze.base
" , or computed from the RDF graph and some information
related to the XML Schema. The XML root element(s) for a given Schema is
probably something that will have to be set in configuration (because an XML
Schema does not specify a root element). Then to find the RDF statement that
will be converted to the XML root element, one has to iterate on the
statements, finding one that has the right predicate ( kml_:kml
in
the example above). So we could add in Gloze this method to set the RDF
predicate of the "root" resource corresponding to the XML root:
void setRootPredicate(String root);
The root RDF predicate would also be associated to a System Property
"gloze.root
" .
Now at 1pm, it only works with eclipse; in fact there was 2 errors in file URI management:
file:/a/b
instead of
correct file:///a/b
/a/b/./c
But now from Maven I get this ( from eclipse it works in the same directory ) :
[ WARN] - 2009-12-17 13:28:56,408 [AWT-EventQueue-1] com.hp.gloze (Gloze.java:drop:663) drop: no schema mapping for resource: file:///home/jmv/src/eulergui/test/kml2.n3 [ WARN] - 2009-12-17 13:28:56,409 [AWT-EventQueue-1] com.hp.gloze (Gloze.java:drop:671) because no matching property: http://www.opengis.net/kml/2.2#kml
In fact, given the message, and the fact that this particular Schema for KML does not declare the root element <kml>, it seems normal that it does not work.
The strange effect with Maven it certainly due to a mixture of static and non-static stuff in Gloze. Before me, Gloze was never tested a a reusable object.
After even more investigations, an EulerGUI test project with 2 sources, one N3 and one RDF, both using the KML vocabulary from the Schema, shows the same problem when exporting the second RDF source [on 21st could not reproduce that].
http://ebusiness-unibw.org/ - http://www.unibw.de/ebusiness/
E-Business and Web Science Research Group
We are a young team of researchers with backgrounds in information systems, conceptual modeling, economics, computer science, and related disciplines. In our research, we work on the theoretical and practical challenges of using the World Wide Web for facilitating the exchange of tangible and intangible goods between economic actors, and economic activity in general. Our core research interest is employing Semantic Web technology for E-Procurement and Business Process Management.
DONE
Currently we have this diagram:
ProjectGUI<>---SourceFactory<>---Gloze
We need to reuse this instance of Gloze in class XMLExport, instead of the static method
GlozeAdapter.main(args);
I used XSLT to compare the output to the original XML. I tested my XSLT with:
saxonb-xslt -s:xml-export/kml2.rdf.xml -xsl:test/identquery2.xslt saxonb-xslt -s:test/kml.xml -xsl:test/identquery2.xslt
It works, my test !!!!!!!!!!!
I kill all the white spaces and line breaks with this:
<xsl:template match="text() [fn:matches(.,'^ +$|^$','m' )]" priority="100"></xsl:template>
For the rest, I'm copying recursively.
model (com.hp.hpl.jena.rdf.model.impl.ModelCom) <ModelCom {-33d905d4:12598ad7114:-7ffd @kml_:Placemark -33d905d4:12598ad7114:-7ffc; -33d905d4:12598ad7114:-7ffd @rdf:type kml_:KmlType; -33d905d4:12598ad7114:-7ffb @kml_:coordinates -33d905d4:12598ad7114:-7ffa; -33d905d4:12598ad7114:-7ffb @rdf:type kml_:PointType; file:///tmp/translation-5764596566461002629.n3 @kml_:kml -33d905d4:12598ad7114:-7ffd; -33d905d4:12598ad7114:-7ffc @kml_:name "New York City"^^http://www.w3.org/2001/XMLSchema#string; -33d905d4:12598ad7114:-7ffc @kml_:description "New York City"^^http://www.w3.org/2001/XMLSchema#string; -33d905d4:12598ad7114:-7ffc @kml_:Point -33d905d4:12598ad7114:-7ffb; -33d905d4:12598ad7114:-7ffc @rdf:type kml_:PlacemarkType; -33d905d4:12598ad7114:-7ffa @rdf:rest rdf:nil; -33d905d4:12598ad7114:-7ffa @rdf:first "-74.006393,40.714172,0"^^http://www.w3.org/2001/XMLSchema#string} | > model.getNsPrefixMap() (java.util.HashMap<K,V>) {atom=http://www.w3.org/2005/Atom, ns1=http://example.org#, xs_=http://www.w3.org/2001/XMLSchema#, kml_=http://www.opengis.net/kml/2.2#, kml=http://www.opengis.net/kml/2.2, xs=http://www.w3.org/2001/XMLSchema, rdf=http://www.w3.org/1999/02/22-rdf-syntax-ns#, xal=urn:oasis:names:tc:ciq:xsdschema:xAL:2.0, atom_=http://www.w3.org/2005/Atom#, xal_=urn:oasis:names:tc:ciq:xsdschema:xAL:2.0#} }
No JUnit tests in Gloze :( :
grep --recursive TestCase ~/src/Gloze-1.01-beta2/src/
but there are Ant tests somehow.
Expression for debugging Jena API:
resource.getModel().listStatements().toList()
resource.getModel().listObjects().toList()
Ontology+Development on hal.archives-ouvertes.fr
Eyeball , ARQ are on CVS
svn co https://jena.svn.sourceforge.net/svnroot/jena/Gloze svn co https://jena.svn.sourceforge.net/svnroot/jena/TDB svn co https://jena.svn.sourceforge.net/svnroot/jena/ARQ cvs -z3 -d:pserver:anonymous@jena.cvs.sourceforge.net:/cvsroot/jena co -P jena2
DONE
Currently it does not work.
As a side task I need to find a small XML Schema, preferably non trivial and useful. I try KML, a geographical Schema used in Google Earth, with this pair XML namespace + Schema location:
http://www.opengis.net/kml/2.2" http://schemas.opengis.net/kml/2.2.0/ogckml22.xsd
To test, I can click on XML export on a small KML document (eulergui/test/kml.xml) imported in EulerGUI. The question is: how can I find the pairs XML namespace + Schema location corresponding to an N3 /RDF documents ( typically coming from a rule engine ) ?
So from this N3, how can I find the pairs XML namespace ?
@prefix kml_: <http://www.opengis.net/kml/2.2#> . @prefix kml: <http://www.opengis.net/kml/2.2> . <file:/tmp/translation-5764596566461002629.n3> kml_:kml [ a kml_:KmlType ; kml_:Placemark [ a kml_:PlacemarkType ; kml_:Point [ a kml_:PointType ; kml_:coordinates ("-74.006393,40.714172,0"^^xs_:string) ] ; kml_:description "New York City"^^xs_:string ; kml_:name "New York City"^^xs_:string ] ] .
So we see that Jena RDF to N3 translator has created two N3 prefixes for
KML. Note that there is a loss a information here, but I don't think that Gloze
keeps the correspondance between the RDF predicate kml_:kml
and
the XML elements they come from. Note that the root <kml>
element is not in the XML Schema for KML
.
KML reference on code.google.com
So we need to get access to the list of N3 prefixes, see if some of them match the XML namespaces in namespace2schema0 in XMLExport.java, and add the pair XML namespace + Schema location to the Gloze arguments.
In fact this is what XMLExport.selectSchemataFromProject()
does
:) . But for an N3 source coming from RDF, method
N3Source.getKnownURIPrefixes()
returns an empty set. In fact, even
for an N3 source, this method returns an empty set when the Drools N3 engine
has not been launched, i.d. when the N3 parser has not run yet. So I'm adding a
"lazy" N3 parsing to method N3Source.getKnownURIs()
.
DONE
ncal -w
Need to change that in Triple, because loading factsTriples.xml currently is broken .
public Object // String getObject() {
In the Drools N3 engine , there was a confusion between the results and the rest; it was not serious as long as we did not count the triples. But this test, findall3.n3 , returns 3 instead of 2 :
{ # output the number of children for each father ?X :marriedTo ?Y . (?SCOPE ?SPAN) e:findall ( ?CHILD { ?X :hasChild ?CHILD } ?CHILDREN ) . ?CHILDREN math:memberCount ?C . } => { ?X :with_children ?C . } .
Note: on Ubuntu, the eclipse installation directory is
/usr/share/eclipse/
, but I don't need that right now.
Create a Drools project
When asked to "Select a Drools Runtime", just click on "Configure Workspace settings ..." / Add / "Create a new Drools Runtime ..." , and then just give it a new directory.
Alas, it's only possible to put breakpoints in the antecedent.
greaterThan, notLessThan, notGreaterThan,
notEqualTo, equalTo
?CHILDREN math:memberCount ?COUNT . ?COUNT math:greaterThan 1 .
?CHILDREN math:memberCount ?C . } => { ?X :with_children ?C .
First commit for this combination of e:findall , math:memberCount , and math:greaterThan :
( need more tests and code generalization, but current tests pass )
_:d e:findall ( ?CHILD { ?X :hasChild ?CHILD } ?CHILDREN ) . ?CHILDREN <http://www.w3.org/2000/10/swap/math#memberCount> ?COUNT . ?COUNT math:greaterThan 1 .
Conmmited a big change to pave the way for cardinality rules in Drools N3 engine
[INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 2 minutes 2 seconds
java.lang.NumberFormatException: For input string: ""1""
NIEM, the National Information Exchange Model, is a partnership of the U.S. Department of Justice and the Department of Homeland Security. It is designed to develop, disseminate and support enterprise-wide information exchange standards and processes that can enable jurisdictions to effectively share critical information in emergency situations, as well as support the day-to-day operations of agencies throughout the nation.
JPA FAQ (Java Persistence API)
DONE
TODO
# re-test button behavior: currently the window does not appear the second time
# creation button for multi-valued fields
# re-test persistence
# singleton classes: add a setting property
java.io.FileNotFoundException: /home/jmv/src/eulergui/XMLSchema.dtd (No such file or directory) at java.io.FileInputStream.open(Native Method) at java.io.FileInputStream.<init>(FileInputStream.java:106) at java.io.FileInputStream.<init>(FileInputStream.java:66) at sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70) at sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161) at org.apache.xerces.impl.XMLEntityManager.setupCurrentEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startEntity(Unknown Source) at org.apache.xerces.impl.XMLEntityManager.startDTDEntity(Unknown Source) at org.apache.xerces.impl.XMLDTDScannerImpl.setInputSource(Unknown Source) at org.apache.xerces.impl.XMLDocumentScannerImpl$DTDDispatcher.dispatch(Unknown Source) at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source) at org.apache.xerces.parsers.XMLParser.parse(Unknown Source) at org.apache.xerces.parsers.DOMParser.parse(Unknown Source) at org.apache.xerces.jaxp.DocumentBuilderImpl.parse(Unknown Source) at com.hp.gloze.XMLUtility.read(XMLUtility.java:71) at com.hp.gloze.Gloze.loadSchema(Gloze.java:180) at com.hp.gloze.Gloze.initSchema(Gloze.java:230) at com.hp.gloze.Gloze.initSchemaLocation(Gloze.java:307) at com.hp.gloze.Gloze.runGloze(Gloze.java:710) at com.hp.gloze.Gloze.main(Gloze.java:683)
DONE
With latest ARQ 2.8.2 from Jena these language constructs seem not to work:
I have a look in the ARQ ChangeLog to see what would be a replacement. I found this interesting page with the solution:
http://jena.sourceforge.net/ARQ/negation.html
In fact, as exemplified in
http://www.w3.org/TR/rdf-sparql-query/#func-RDFterm-equal
these operators work only inside a FILTER clause:
# This query finds the people who have multiple foaf:name triples: PREFIX foaf: <http://xmlns.com/foaf/0.1/> SELECT ?name1 ?name2 WHERE { ?x foaf:name ?name1 ; foaf:mbox ?mbox1 . ?y foaf:name ?name2 ; foaf:mbox ?mbox2 . FILTER (?mbox1 = ?mbox2 && ?name1 != ?name2) }
A Project with an N3 source throwing an exception at restore during prepare() does not prevent the project from being loaded; the N3 source is shown with a rose background and a tooltip showing the exception.
TODO : EulerGUI Manual: review recent features: SPARQL, XML import and export
The Parser4J N3 parser in EulerGUI is quite stable now. So, shorten the test time, I added this in 2 places in the Parser4J tests in EulerGUI:
// possibility to bypass long Parser4J tests: String runTests = System.getProperty("PARSER4J_TESTS"); if( "no".equals(runTests) ) return;
Now one can run the tests like this:
mvn -DargLine="-DPARSER4J_TESTS=no" test
I got an answer to my question on the Jemmy list:
https://jemmy.dev.java.net/servlets/ReadMsg?list=users&msgNo=55
It works ! Note that I used to have close request sent by Jemmy to Firefox (bug of Jemmy, of my tests, of Firefox or of X-Windows ?). Of course this trick of running inside a second X server removes also this problem.
Now with this incantation I run all the important tests in 2 minutes !
DISPLAY=:1 mvn -DargLine="-DPARSER4J_TESTS=no" \
--no-plugin-updates --offline test
All this is nox documented in the Manual .
~/src/Gloze-1.01-beta2% ant test Buildfile: build.xml test-lift: [junit] Running com.hp.gloze.test.TestLift [junit] Tests run: 2, Failures: 0, Errors: 0, Time elapsed: 4,889 sec test-owl: [junit] Running com.hp.gloze.test.TestOWL [junit] Tests run: 22, Failures: 0, Errors: 0, Time elapsed: 13,686 sec test-samples: [junit] Running com.hp.gloze.test.TestSamples [junit] Tests run: 15, Failures: 0, Errors: 0, Time elapsed: 2,909 sec test: BUILD SUCCESSFUL Total time: 23 seconds
Then I changed Gloze.java with my URL enabled version from
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/src/main/java/com/hp/gloze/Gloze.java
I restarted ant test
, and it worked !
The details of the modification are here:
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/src/main/java/com/hp/gloze/Gloze.java?view=log
export EMPATHY_DEBUG=all
There was a problem (a NPE) when adding one XML after another, both having
the same XML Schema. Related to that, Gloze.main()
was not made to
run twice.
Question; can I reactivate the standard output when Jemmy has started waiting for stuff ?
DONE
test XML Input with Gloze
WIP: cannot test the ORIG. button
gloze.target=/tmp/translation-1805042465621371530.n3 Starting Gloze.main() with args /home/jmv/src/eulergui/pom.xml http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd Ran Gloze in 4405 ms contentType: "text/xml" extracted XML Namespaces from plain XML source "http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml" {http://maven.apache.org/POM/4.0.0=http://maven.apache.org/maven-v4_0_0.xsd} fileName: /tmp/translation-3893167880162646404.n3 getSources().size(): 2 getSources().size(): 2 getSources().size(): 3 gloze.target=/tmp/translation-3893167880162646404.n3 Starting Gloze.main() with args http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd Ran Gloze in 201 ms java.lang.NullPointerException at com.hp.gloze.Gloze.initSchema(Gloze.java:229) at com.hp.gloze.Gloze.lift(Gloze.java:614) at com.hp.gloze.Gloze.xml_to_rdf(Gloze.java:363) at com.hp.gloze.Gloze.xml_to_rdf(Gloze.java:379) at com.hp.gloze.Gloze.xml_to_rdf(Gloze.java:424) at com.hp.gloze.Gloze.main(Gloze.java:745) at eulergui.inputs.N3SourceFromXML_Gloze.prepare(N3SourceFromXML_Gloze.java:61) at n3_project.SourceFactory.addSource(SourceFactory.java:58)
This Exception is currently "normal" in Gloze :
Thread [AWT-EventQueue-0] (Suspended (exception NoSuchElementException))
Tokenizer.nextToken() line: 82
Rule$Parser.nextToken() line: 719
Rule$Parser.peekToken() line: 755
Rule.parseRules(Parser) line: 603
FBRuleReasoner.loadRules(String) line: 257
RDFSRuleReasoner.loadRulesLevel(String) line: 197
RDFSRuleReasoner.<init>(ReasonerFactory) line: 69
RDFSRuleReasoner.<init>(ReasonerFactory, Resource) line: 81
RDFSRuleReasonerFactory.create(Resource) line: 46
OntModelSpec.getReasoner() line: 382
OntModelImpl.generateGraph(OntModelSpec, Graph) line: 2742
OntModelImpl.<init>(OntModelSpec, Model, boolean) line: 139
OntModelImpl.<init>(OntModelSpec, Model) line: 120
ModelFactory.createOntologyModel(OntModelSpec, Model) line: 402
ModelFactory.createOntologyModel(String) line: 361
ModelFactory.createOntologyModel() line: 344
schema.<init>() line: 207
NativeConstructorAccessorImpl.newInstance0(Constructor, Object[]) line: not available [native method]
NativeConstructorAccessorImpl.newInstance(Object[]) line: 39
DelegatingConstructorAccessorImpl.newInstance(Object[]) line: 27
Constructor<T>.newInstance(Object...) line: 513
Class<T>.newInstance0() line: 355
Class<T>.newInstance() line: 308
XMLBean.newShallowInstance(Element) line: 656
GlozeURL.loadSchema(URL) line: 240
GlozeURL.initSchema(URI, URL, Map<URL,schema>) line: 288
GlozeURL.initSchemaLocation(URI, URL, String, Map<URL,schema>) line: 365
GlozeURL.main(String[]) line: 762
N3SourceFromXML_Gloze.prepare(Project) line: 60
XMLInputAction.actionPerformed(ActionEvent) line: 47
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd
Sent a mail to users@jemmy.dev.java.net :
change a WindowWaiter.AfterWindowTimeout after the JFrame is displayed ?
https://jemmy.dev.java.net/servlets/ReadMsg?list=users&msgNo=48
http://weblogs.java.net/blog/editor/archive/2009/11/24/stephen-colebourne-update-closures-jdk-7
http://en.wikipedia.org/wiki/Closure_%28computer_science%29
http://www.jibbering.com/faq/faq_notes/closures.html
Functional (Jemmy) tests:
-Ddemo=active
to class eulergui.gui.TestGenericGuiGeneration
Jester - Test your tests with Jester
Quote from the site:
Jester finds code that is not covered by tests. Jester makes some change to your code, runs your tests, and if the tests pass Jester displays a message saying what it changed.
The changes are very simple, like changing true to false, but the "succeded" changes point to missing tests, or in some cases to unnecessary code. Here is how I launched Jester. Because it re-builds after each change, it is quite slow, so I just ran one test and provided only one source class for changes
java -jar /home/jmv/apps/simple-jester120/simple-jester.jar \ -classpath target/eulergui-1.4-SNAPSHOT-jar-with-dependencies.jar:\ /home/jmv/.m2/repository/junit/junit/3.8.1/junit-3.8.1.jar \ -buildCommand "mvn -Dtest=unif.InstanciatorTest test" \ -source src/main/java/unif/Instanciator.java -shouldShowProgressDialog true ... 196 mutations survived out of 246 changes. Score = 21 took 43 minutes
This means that only 21% of the mutations were caught by the tests. Actually in this package only one file is relevant : Instanciator.java , but a package directory could have been given instead, e.g. :
-source src/main/java/unif/
As an example, here is the result of Jester; a copy of the original source files as ".html" pages, with all the changes Jester made that did not cause the tests to fail shown in red, and the code it changed shown with a line through it : Instanciator.html
Work in progress:
mvn -Dtest=eulergui.gui.TestGenericGuiGeneration \ -Ddemo=active test
Luc worked towards actual persistence. For now, it only runs in memory, but already uses the P* modified Joafip ollections.
The Subversion incantation to copy sources from one branch to another:
cd ~/src/eulergui
svn cp examples/simplest.n3* \ https://eulergui.svn.sourceforge.net/svnroot/eulergui/branches/eulergui-joafip/examples/
It is nice for demos to keep the GUI active for interactions after scenario is played.
TODO
Add to one test the EulerGUI features: display class hierarchy with Pellet, plain XML as N3 source, SPARQL query, export as Drools, export as XML;
and also the generated aplication features: click on object properties, round trip with use N3 file, ...
I realize that the Jemmy API is like a scripting API for any Swing application. I should open the Euler GUI Manual and write the script for all the features.
DONE
=== Cumulated elapsed time: 55.809 seconds ===
[INFO] BUILD SUCCESSFUL Total time: 3 minutes 55 seconds
http://generic-concept.com/blogs/olivier/
I update Jemmy 2 test to include the main Déductions use cases: generate application from URL : N3 , OWL , RDFS , UML , and eCore documents.
While doing that, I met the annoying problem that the RDFS URL is long to download (in a separate thread), but the Drools engine does not wait.
DONE:
NOTE: cv.n3p, with older Swing infrastructure swing2.n3p does not produce a window (no JFrame generated)
Added a call to Thread.join() ; also throw a timeout exception if the URL is too long to download.
PENDING: also compile the Drools sources in parallel (multi-Thread) - Revision 1000 !!!!!!!
I also set the right entry in Maven depot for Grappa ( this will accelerate every build ) :
VERSION=1.2 mvn deploy:deploy-file \ -Durl=sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2 \ -DrepositoryId=repository.eulergui.sf.net \ -Dfile=${HOME}/apps/grappa-1.2.jar \ -DgroupId=att \ -DartifactId=grappa \ -Dversion=${VERSION} -Dpackaging=jar
So now the Maven build says:
[INFO] BUILD SUCCESSFUL [INFO] ------------------------------------------------------------------------ [INFO] Total time: 3 minutes 33 seconds [INFO] Finished at: Thu Nov 26 22:35:45 CET 2009 [INFO] Final Memory: 42M/353M
orbit from eclipse foundation
buckminster is kind of a super-Maven
generic-concept/blog/
Top 10 Principles for Software Generation
by jkennedy on June 17, 2009
Jemmy is a Java GUI testing library for Swing and SWT.
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 minutes 4 seconds
[INFO] Finished at: Wed Nov 25 15:38:15 CET 2009
[INFO] Final Memory: 58M/388M
This works:
mvn -Dtest=eulergui.gui.TestJemmy --errors --no-plugin-updates --offline test
But mvn test
has a problem:
test1(eulergui.gui.TestJemmy) Time elapsed: 61.16 sec <<< FAILURE!
junit.framework.AssertionFailedError: Test generated app. expected:<0> but was:<1> Start to wait action "Wait for "Component having "Ontologies" name." subcomponent to be displayed" Error: "Wait for "Component having "Ontologies" name." subcomponent to be displayed" action has not been produced in 60009 milliseconds org.netbeans.jemmy.TimeoutExpiredException
Apparently, the presence of the other windows from previous tests are a nuisance.
If you add; &fmt=18 in the end of each video on youtube, you will get the high quality version of the video. Works on every movie.
http://highscalability.com/product-project-voldemort-distributed-database
Searching for alternatives to Abbot (no commits since april 2009) ...
Looked in http://java-source.net/open-source/testing-tools
Considered :
Jemmy , Marathon, Jacareto, uispec4j
http://jfcunit.sourceforge.net/ : Page last updated on 12/31/2004
<dependency> <groupId>org.netbeans</groupId> <artifactId>jemmy</artifactId> <version>2.2.7.5</version> </dependency>
When calling
panel.getUIComponents( UIComponent.class, "Ontologies")
where "Ontologies" is the name of a contained JToolbar, I get this stack:
java.lang.RuntimeException: Class interface org.uispec4j.UIComponent should have a field 'public static String TYPE_NAME'
at org.uispec4j.utils.UIComponentFactory.checkTypeNameField(UIComponentFactory.java:147)
at org.uispec4j.utils.UIComponentFactory.checkClass(UIComponentFactory.java:132)
at org.uispec4j.utils.UIComponentFactory.register(UIComponentFactory.java:59)
at org.uispec4j.Panel.getComponents(Panel.java:437)
at org.uispec4j.Panel.getUIComponents(Panel.java:347)
In fact, I found no convenient way of selecting my JToolbar, except by calling
Panel.findSwingComponent()
but then I loose the facilities offered by uispec4j to select further inside the JToolbar .
removed at revision 990 in class n3_project/helpers/N3SourcetoDrools :
conf.setSequentialAgenda( SequentialAgenda.SEQUENTIAL );
export PS1="%m:%~%# "
which gives e.g. :
jmv-desktop:~/src/joafip%
Jester - Test your tests with Jester
http://findbugs.sourceforge.net/downloads.html
Scala language available via Ubuntu:
dpkg --status scala Package: scala Status: install ok installed Priority: optional Section: devel Installed-Size: 6252 Maintainer: Ubuntu MOTU Developers <ubuntu-motu@lists.ubuntu.com> Architecture: all Version: 2.7.5.dfsg-1
I tested (not latest) NetBeans available via Ubuntu. The import of my eclipse projects failed, because I have 2 eclipse projects on the Subversion depot ( trunk and a branch).
IntelliJ is open source ; IntelliJ IDEA editions_comparison_matrix
I'm having troubles updating an Abbot test script after enhancements in my GUI.
There are several entry tutorials, but I found no reference manual.
Erreur: Clicking on 'Tools' never produced a popup menu
Thread [main] (Suspended) HashSupport<E>.get(Object) line: 102 PHashSet<E>.get(Object) line: 86 PHashMap<K,V>.get(Object) line: 83 SingleThreadedObjectStore.getHandleForObject(Object) line: 125 ReteooStatefulSession(AbstractWorkingMemory).insert(Object, boolean, boolean, Rule, Activation) line: 912 ReteooStatefulSession(AbstractWorkingMemory).insert(Object) line: 829 RandomGraphMaker.insertOneTriple(Project, String, String) line: 58 RandomGraphMaker.makeRandomGraph(Project, int, int, String, String, String) line: 37 StressTestReasoning.runTest() line: 83 StressTestReasoning.main(String[]) line: 50
http://maven.apache.org/guides/mini/guide-central-repository-upload.html
Download sources and build
cd ${HOME}/src
svn co https://joafip.svn.sourceforge.net/svnroot/joafip/trunk/joafip/ ant -f buildjar.xml build
Deploy on local repository with pom.xml (just for testing) :
cd ${HOME}/src/joafip mvn deploy:deploy-file -Dfile=dist/joafip-2.2.2.jar \ -Durl=file:${HOME}/.m2/repository/ \ -DpomFile=${HOME}/src/joafip/pom.xml
To upload on remove repository, just change the url pamameter, and add repositoryId:
mvn deploy:deploy-file -Dfile=dist/joafip-2.2.2.jar \
-Durl=sftp://web.sourceforge.net/home/groups/j/jo/joafip/htdocs \
-DrepositoryId=repository.joafip.sf.net \ -DpomFile=${HOME}/src/joafip/pom.xml
The repository Id refers to the following content in <HOME_DIRECTORY>/.m2/settings.xml :
<settings> <servers> <server> <id>repository.joafip.sf.net</id> <username>jmvanel,joafip</username> <password>???</password> </server> </servers> </settings>
This allows to completely automatize the upload.
One can also add this at the end of the pom.xml, but I think it's facultative :
<repositories> <repository> <id>repository.joafip.sf.net</id> <url>http://joafip.sourceforge.net</url> </repository> </repositories>
On cygwin you should install:
ant, maven2, sftp, sun-jdk
I asked what they think on the Abbot list .
cd ${HOME}/src svn co https://abbot.svn.sourceforge.net/svnroot/abbot/abbot/trunk \ abbot cd ${HOME}/src/abbot/ ant jar
I don't want to pollute my remote Maven repository for these trials. So I first did this to upload on the local Maven repository the jar from the Abbot Sourceforge project:
ARTIFACT=abbot
VERSION=1.0.3-SNAPHOT
mvn deploy:deploy-file \ -Dfile=${HOME}/src/abbot/build/${ARTIFACT}.jar \ -Durl=file:${HOME}/.m2/repository/ \ -DgroupId=net.sourceforge.abbot \ -DartifactId=${ARTIFACT} \ -Dversion=${VERSION} -Dpackaging=jar ARTIFACT=costello # mvn deploy:deploy-file ...
I have no pom.xml at all; but it's OK, and Maven answers:
[INFO] [deploy:deploy-file {execution: default-cli}] Uploading: file:/home/jmv/.m2/repository//net/sourceforge/abbot/costello/1.0.2-SNAPHOT/costello-1.0.2-SNAPHOT.jar 599K uploaded (costello-1.0.3-SNAPHOT.jar) [INFO] Retrieving previous metadata from remote-repository [INFO] repository metadata for: 'artifact net.sourceforge.abbot:costello' could not be found on repository: remote-repository, so will be created [INFO] Uploading repository metadata for: 'artifact net.sourceforge.abbot:costello' [INFO] Uploading project information for costello 1.0.2-SNAPHOT
Then I go further and use the pom.xml for Abbot I made from this discussion on the Abbot list :
http://old.nabble.com/Maven-2-POM-ts20489891.html ,
following this Maven page: deploying-with-customed-pom.html
In fact there are 2 artifacts: the core Abbot, and the recorder GUI, Costello, depending on Abbot. For EulerGUI we will need both.
mvn deploy:deploy-file \ -Dfile=${HOME}/src/abbot/build/costello.jar \ -Durl=file:${HOME}/.m2/repository/ \ -DpomFile=${HOME}/src/abbot/pom.xml
Note that the groupId, artifactId, version and packaging informations are automatically retrieved from the given pom.
mvn deploy:deploy-file \ -Dfile=${HOME}/src/abbot/build/abbot.jar \ -Durl=file:${HOME}/.m2/repository/ \ -DpomFile=${HOME}/src/abbot/pom_abbot.xml
Then I can test the local Maven installation for Abbot, adding this in pom.xml :
<dependency> <groupId>net.sourceforge.abbot</groupId> <artifactId>abbot</artifactId> <version>1.0.3-SNAPHOT</version> <scope>test</scope> </dependency>
It seems to work.
Of course, I have another problem. My tests were recorded with Costello, and depend on some absolute positions.
http://www.octoberrulesfest.org/speakers.html
DONE
TODO
REFLEXION
There should be a way to infer the action for events, based on a semantics added to the fields.
DONE
Test with FOAF:
remove FlowLayout on frames; reestablish Button for ChoicePanel
Manage consistently events classes:
WindowOpenedEvent, WindowClosingEvent;
ApplicationStartEvent, ApplicationClosingEvent
and statements
?WINDOW gui:status gui:mainWindow .
so that N3 user file is saved and restored.
WIP: we have 0 user triples.
The roundtrip with user triples works :)))
Tested with n3_new/person_import2.n3p
Migrated to Pellet 2.0 ; show leverage on: incremental classification, fine-grained inference extraction (?), SWRL rules, SPARQL queries
TODO
svn co https://eulersharp.svn.sourceforge.net/svnroot/eulersharp/trunk \ eulersharp
Philips SPC 210NC PC Camera
But not with Empathy :(
DONE
For focus lost events there was often the creation of a new object and form;
Remedy: clean relationship between user objects, fields, forms and windows.
Precisely:
user_object---field----<>form---<>window
Questions:
# an instance of a businessClass has one and only one Form { ?RESOURCE a ?EDITED_CLASS . ?EDITED_CLASS a app:businessClass . (?SCOPE ?SPAN) e:findall ( ?WINDOW_ { ?RESOURCE app:resourceHasWindow ?WINDOW_ . } () ) . } => { ?APPINST app:hasWindow ?WINDOW . ?RESOURCE app:resourceHasWindow ?WINDOW . ?FORM :createFormFromResource ?RESOURCE . ?WINDOW gui:components ?FORM . _:d eg:trace ( ">>>> starting createFormFromResource: " ?FORM ?RESOURCE ). _:d eg:trace ( " " ?WINDOW ?EDITED_CLASS ) . } .
http://linuxfund.org/projects/
Work on creation button: in the new window there was a extra form for the main class;
also for focus lost events there is often the creation of a new object and form.
Add FOCUS_GAINED event: change the color of the text field to light gray.
Java(Script) instantiatior:
RDF objects can be interpreted as static members, e.g. :
?JTEXT_FIELD javam:setBackground java:java_awt_Color_lightGray
.
Deduction runtime: add a helper for putting a text field in bold
bddbddb stands for BDD-Based Deductive DataBase. It is an implementation of Datalog, a declarative programming language similar to Prolog for talking about relations. What makes bddbddb unique is that it represents the relations using binary decision diagrams (BDDs). BDDs are a data structure that can efficiently represent large relations and provide efficient set operations.
Third, it makes program analysis accessible, and dare I say it, actually fun.
I probably made the wrong move when upgrading to Jena 2.6.2,because it is incompatible with Pellet rc7 . So I have to wait for the next release of Pellet, says Thorsten Möller.
https://bugs.launchpad.net/ubuntu/+source/linux/+bug/55567
I connect on Marie's computer:
ssh -X jmv@192.168.1.28
I had a answer from the project lead Erik :) .
At last !!!!!!! ( like Etta sings).
I get several instances of edited class !
There was a bad extra e:findall
in app_gui-rules2.n3 .
Also tested test_person_import.n3p , foaf_import.n3p, cv.n3p (no fields at all ), uml.n3p.
TODO
http://www.comlab.ox.ac.uk/activities/machinelearning/Aleph/aleph.html
http://www.cs.mu.oz.au/481/project/aleph/aleph_workshop.html
Tidied the pom.xml after upgrading to Jena 2.6.2 : remove slf4j-api and slf4j-log4j12 .
Added explanations about the rules for form generation : Déductions - runtime Architecture : rules
Writing Business Rules Engines in Mercury: Ian MacLarty Functional Programming Union, University of Melbourne, 24 July 2009. Available here (156K).
I tried all sort of things like
sudo showkey -s
I finally discovered that my minus and vertical bar are activable with Windows key ! Equal is with = and control key on terminal and eclipse.
Now it's always successful ! :)
[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 minutes 4 seconds
I have a trunk and a branch in 2 different projects.
For the latter, I used command line svn ( version 1.5.4 (r33841)) to download, and made an eclipse project from that.
And now, I'm in a situation where some updates don't come to me,
and the command line svn does not work anymore :( .
(SOLVED when upgraded to Ubuntu 9.10 ).
If you have a question, or if you think you may have found a bug but
aren't sure, first try asking on the #ubuntu or #ubuntu-bugs IRC
channels on Freenode, on the Ubuntu Users mailing list, or on the
Ubuntu forums:
http://help.ubuntu.com/community/InternetRelayChat
http://lists.ubuntu.com/mailman/listinfo/ubuntu-users
http://www.ubuntuforums.org/
acl binutils-static cpp-4.3 cupsddk g++-4.3 gcc-4.3 gcc-4.3-base gcj-4.3-base gnome-mount gstreamer0.10-gnomevfs hotkey-setup klogd libdbus-1-qt3 libgcj9-0 libgcj9-jar libgnome-speech7 libmysqlclient15off libpolkit-gnome0 libsmbios2 libstdc++6-4.3-dev nvidia-180-modaliases openoffice.org-style-crystal phonon policykit-gnome python-clientform python-gdata python-launchpad-bugs python-mechanize python-twisted-web2 python-tz python-usb qt4-qtconfig strigi-client sysklogd ttf-kochi-gothic ttf-sazanami-gothic xulrunner-1.9 zope-common
Failed tests:
testInstanciateListOfTriple(unif.InstanciatorTest)
testProjectFile(n3_project.TestProject)
Tests run: 73, Failures: 2, Errors: 0, Skipped: 0
After a innocent change:
incorporate into the trunk most of the changes from the joafip + drools branch
(done this manually with gvim -d and kompare, as subversive eclipse is sooooo slooow)
Failed tests: testInstanciateListOfTriple(unif.InstanciatorTest)
Could this be due to multi-thread issues with reading files from the web ?
I try to upgrade to Drools 5.1.0M1 . It works !
In fact there was a modification in Instanciator introduced recently, that makes an error in the test. This modification removes the error messages in the JavaScript console.
Our Joafip man rests for a while ...
He does not a have on Windows with JDK 1.6_18 the error I have on Linux with JDK 1.6_16:
net.sf.joafip.store.service.StoreException: net.sf.joafip.store.service.classinfo.ClassInfoException: interface org.drools.FactHandle is not serializable
http://code.google.com/p/ubiquity-xforms/
Nepomuk in Mandriva 2010 Release Candidate 1.0
http://doc4.mandriva.org/bin/view/labs/Nepomuk-mdv2010-RC
http://recordmydesktop.sourceforge.net/documentation.php
http://www.transmodel.org/en/cadre1.html
http://semanticweb.org/wiki/EulerGUI
10-Open-Source-Companies-to-Watch : : lessons to draw ?
http://www.voelter.de/conferences/index.html
This is the first branch in EulerGUI, so I must create the directory branches first:
cd ~/src/eulergui_test2/eulergui ls # tags trunk mkdir branches svn add branches svn commit branches svn copy https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui \ https://eulergui.svn.sourceforge.net/svnroot/eulergui/branches/eulergui-joafip
Now to work on that branch, go to a fresh location like ~/src/ , and type :
svn co https://eulergui.svn.sourceforge.net/svnroot/eulergui/branches/eulergui-joafip cd eulergui-joafip mvn install mvn eclipse:eclipse eclipse &
Then create an eclipse project from directory eulergui-joafip.
Alas today (saturday!) the Maven site http://jena.hpl.hp.com/repo/ for Jena is awfully slow.
There is a new discussion in French :
Virtuoso versus Sesame - versus joafip
To integrate into Drools we would need a DAO design pattern, or the possibility to plug a specific implementation of ObjectStore (or SingleThreadedObjectStore).
http://joafip.sourceforge.net/
At last ! added EulerGUI here: http://semanticweb.org/wiki/EulerGUI
I made a new discussion group in French for projects Déductions and EulerGUI:
http://groups.google.com/group/deductions-fr
Discussions en Français pour les développeurs et architectes intéressés par les évolutions, les choix et la feuille de route des projets EulerGUI (http://eulergui.sourceforge.net/) et Déductions ( http://deductions.sourceforge.net/ ):
Moteurs de règle, Web Sémantique, génération d'applications
TODO : does not work with JavaScript instanciator: end-of-lines in literal strings in N3
org.drools.runtime.rule.ConsequenceException: java.lang.ClassCastException: org.drools.util.ObjectHashMap cannot be cast to org.drools.reteoo.RuleTerminalNode$TerminalNodeMemory at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:23) at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:943) at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:885) at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1086) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:660) at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:627) at org.drools.base.FireAllRulesRuleBaseUpdateListener.beforeRuleBaseUnlocked(FireAllRulesRuleBaseUpdateListener.java:41) at org.drools.event.RuleBaseEventSupport.fireBeforeRuleBaseUnlocked(RuleBaseEventSupport.java:123) at org.drools.common.AbstractRuleBase.unlock(AbstractRuleBase.java:408) at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:517) at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:388) at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:301)
I'm on Ubuntu 9.04, architecture x86_64.
Download the source from here:
http://sourceforge.net/projects/virtuoso/files/
I took the 6.0.0 version, that has no release notes :( . The licence is GPL v2. Then, according to the README, I missed these packages :
sudo apt-get install flex bison gperf libssl-dev
Otherwise this is very classic:
export CFLAGS="-O2 -m64" ./configure make sudo make install
Alors je peux lancer le serveur (toujours suivant le README) :
cd /usr/local/virtuoso-opensource/var/lib/virtuoso/db sudo chown $USER . /usr/local/virtuoso-opensource/bin/virtuoso-t -f &
I can then open the web admin interface : http://localhost:8890/conductor/
The main entry point for the documentation is: http://virtuoso.openlinksw.com/dataspace/dav/wiki/Main/
In the doc. , I find a page on "RDF Insert Methods in Virtuoso".
Since I have not created any other user, I upload an OWL file as dba with an HTTP PUT :
curl -T PeriodicTable.owl http://localhost:8890/DAV/home/dba/rdf_sink/PeriodicTable.owl -u dba:dba
The trouble is that this OWL file was uploaded as a binary, as it was sent with Content-Type application/octet-stream. You can see this by clicking on WebDAV Browser.
Let's try a .rdf file :
curl -T foaf1.rdf http://localhost:8890/DAV/home/dba/rdf_sink/foaf1.rdf -u dba:dba
Then this is recognized as RDF (Content-Type application/rdf+xml).
I'm considering a Kubuntu to Ubuntu migration.
After this site, here are the packages to remove for a Complete Kubuntu to Ubuntu migration
http://psychocats.net/ubuntu/puregnome
sudo apt-get remove akregator amarok amarok-common apport-qt ark cdrdao dolphin dontzap dragonplayer exiv2 foomatic-db-gutenprint gdebi-kde gnupg-agent gtk2-engines-qtcurve gwenview hpijs-ppds ijsgutenprint install-package jockey-kde k3b k3b-data kaddressbook kamera kate kde-icons-oxygen kde-printer-applet kde-style-qtcurve kde-window-manager kde-zeroconf kdebase-bin kdebase-data kdebase-plasma kdebase-runtime kdebase-runtime-bin-kde4 kdebase-runtime-data kdebase-runtime-data-common kdebase-workspace-bin kdebase-workspace-data kdebase-workspace-libs4+5 kdebluetooth kdegraphics-strigi-plugins kdelibs-bin kdelibs-data kdelibs4c2a kdelibs5 kdelibs5-data kdemultimedia-kio-plugins kdepasswd kdepim-kresources kdepim-strigi-plugins kdepim-wizards kdepimlibs-data kdepimlibs5 kdeplasma-addons kdeplasma-addons-data kdesudo kdm kfind khelpcenter4 klipper kmag kmail kmix kmousetool knotes konqueror konqueror-nsplugins konqueror-plugin-searchbar konsole kontact kopete korganizer kpackagekit krdc krfb ksnapshot ksysguard ksysguardd ksystemlog ktimetracker ktorrent ktorrent-data kubuntu-artwork-usplash kubuntu-default-settings kubuntu-desktop kubuntu-docs kubuntu-konqueror-shortcuts kuser kvkbd kwalletmanager language-selector-qt libakonadiprivate1 libao2 libaudio2 libavahi-qt3-1 libboost-program-options1.35.0 libclucene0ldbl libdbus-qt-1-1c2 libeet1 libexiv2-5 libflac++6 libgeoip1 libk3b3 libk3b3-extracodecs libkcddb4 libkdecorations4 libkdepim4 libkexiv2-7 libkholidays4 libkipi6 libkleo4 libkonq5 libkonq5-templates libkpgp4 libksieve4 libkwineffects1 libloudmouth1-0 liblua50 liblualib50 libmad0 libmimelib4 libmodplug0c2 libmpcdec3 libmsn0.1 libmysqlclient15off libokularcore1 libpackagekit-glib11 libpackagekit-qt11 libphonon4 libplasma3 libpoppler-qt4-3 libpq5 libqca2 libqca2-plugin-ossl libqedje0 libqimageblitz4 libqt3-mt libqt4-assistant libqt4-core libqt4-dbus libqt4-designer libqt4-help libqt4-network libqt4-opengl libqt4-qt3support libqt4-script libqt4-sql libqt4-sql-mysql libqt4-sql-sqlite libqt4-svg libqt4-test libqt4-webkit libqt4-xml libqt4-xmlpatterns libqtcore4 libqtgui4 libqzion0 libraptor1 librasqal1 librdf0 libsearchclient0 libsoprano4 libstreamanalyzer0 libstreams0 libstrigihtmlgui0 libstrigiqtdbusclient0 libvncserver0 libxcb-shape0 libxcb-shm0 libxcb-xv0 libxine1 libxine1-bin libxine1-console libxine1-misc-plugins libxine1-x libzip1 mysql-common okular okular-extra-backends openoffice.org-kde openoffice.org-style-crystal oxygen-cursor-theme packagekit packagekit-backend-apt phonon phonon-backend-xine pinentry-gtk2 pinentry-qt4 plasma-widget-network-manager plasma-widget-quickaccess python-dev python-kde4 python-packagekit python-plasma python-qt4 python-qt4-common python-qt4-dbus python-sip4 python2.6-dev qt4-qtconfig quassel quassel-data raptor-utils redland-utils software-properties-kde soprano-daemon speedcrunch strigi-client strigi-daemon system-config-printer-kde systemsettings ttf-dejavu ttf-dejavu-extra update-manager-kde update-notifier-kde && sudo apt-get install ubuntu-desktop
I briefly come back to my main topic of many years ago (see wwbota).
Data exchange standards for Biological Collection Data:
http://www.bgbm.org/TDWG/acc/Referenc.htm ; look at "The International Transfer Format (ITF) for Botanic Garden Plant Records.".
Bauble: a botanical collection manager
Open Source; in Python; easily instable on Ubuntu. Alas on a fresh database several actions lead to an internal error. The families are builtin, but completion does not always occur. Could not make the report work. Note: I'd love to make a similar applicatoin with an RDF database and my GUI generation techniques.
For XForms (and XHTML?) output, I think about using the other, more abstract, layer in my rules stack, "gui_generic.n3" (see also Supporting ontologies).
recordMyDesktop is a desktop session recorder for GNU / linux.
Found nothing!
http://www.pencil-animation.org/index.php?id=Home
http://ktoon.toonka.com/
http://wiki.svg.org/SVG_Links
http://www.openmovieeditor.org/index.html
http://kdenlive.org/
The title says it all!
% lsusb ... Bus 001 Device 005: ID 0471:032d Philips
Starting the dvr video recorder gives this:
% dvr-qtgui & [4] 27601 ~/src/deductions/n3_new% <init> : Avifile RELEASE-0.7.47-080115-14:47-4.2.3 <init> : Available CPU flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm3dnowext 3dnow constant_tsc rep_good pni mon <init> : 1250.00 MHz AMD Phenom(tm) 9850 Quad-Core Processor detected *** WARNING *** : the driver doesn't provide a correct size for memory mapping. DVR tries to correct this error, but some strange things may happend, you are warned. Can't map memory for capture : Argument invalide
Exception in thread "AWT-EventQueue-0" java.lang.ClassCastException: com.hp.hpl.jena.rdf.model.impl.LiteralImpl cannot be cast to com.hp.hpl.jena.rdf.model.Resource at com.hp.hpl.jena.rdf.model.impl.IteratorFactory$2.map1(IteratorFactory.java:45) at com.hp.hpl.jena.rdf.model.impl.IteratorFactory$2.map1(IteratorFactory.java:45) at com.hp.hpl.jena.util.iterator.Map1Iterator.next(Map1Iterator.java:35) at com.hp.hpl.jena.util.iterator.WrappedIterator.next(WrappedIterator.java:68) at com.hp.hpl.jena.rdf.model.impl.ResIteratorImpl.nextResource(ResIteratorImpl.java:31) at com.hp.hpl.jena.n3.N3JenaWriterCommon.writeModel(N3JenaWriterCommon.java:272) at com.hp.hpl.jena.n3.N3JenaWriterCommon.processModel(N3JenaWriterCommon.java:255) at com.hp.hpl.jena.n3.N3JenaWriterCommon.write(N3JenaWriterCommon.java:172) at com.hp.hpl.jena.n3.N3JenaWriterCommon.write(N3JenaWriterCommon.java:183) at com.hp.hpl.jena.n3.N3JenaWriter.write(N3JenaWriter.java:156) at com.hp.hpl.jena.rdf.model.impl.ModelCom.write(ModelCom.java:268) at jena.rdfcat.go(rdfcat.java:262) at n3_project.rdfcatOutStream.parse(rdfcatOutStream.java:24) at n3_project.ResultEditorN3Action.actionPerformed(ResultEditorN3Action.java:59)
See "Déductions & XForms"
Here is the kind of XML that must be generated in the end of the tool chain (after the RDF to XML conversion by Gloze) :
<body> <xf:textarea ref="MyTextValue"> <xf:label>Note:</xf:label> </xf:textarea> </body>
Since XML elements and attributes correspond through Gloze to RDF / N3 predicates, the kind of N3 that must be generated is (with all blank nodes explicited):
_:n1 xhtml:body _:n2. _:n2 xf:textarea _:n3. _:n3 xf:ref "MyTextValue". _:n3 xf:label "Name:".
Currently, the corresponding fragment of the generic GUI (actually very Java-oriented) that is produced before applying the N3 rules for Java translation :
_:sk_JPANEL_FIELD_34 a gengui:Panel. _:sk_JPANEL_FIELD_34 gengui:hasComponent _:sk_JTEXT_FIELD_36. _:sk_JPANEL_FIELD_34 gengui:hasComponent _:sk_JLABEL_DT_35. _:sk_JPANEL_FIELD_34 gengui:belongsToForm _:sk_JPANEL_FORM_23. _:sk_JLABEL_DT_35 a gengui:Label. _:sk_JLABEL_DT_35 <http://java.sun.com/method#setToolTipText> ("First name and last name"). _:sk_JLABEL_DT_35 java:text "name". _:sk_JTEXT_FIELD_36 a gengui:TextField.
The correspondance is indicated above with the color code: the panel becomes the subject of xf:textarea.
So, in plain english, I must for a panel having a gengui:TextField such as _:sk_JTEXT_FIELD_36, add a triple with the xf:textarea predicate:
{ ?PANEL gengui:hasComponent ?TEXT_FIELD. ?TEXT_FIELD a gengui:TextField. ?PANEL gengui:hasComponent ?LABEL_COMPONENT. ?LABEL_COMPONENT java:text ?LABEL. }=>{ ?PANEL xf:textarea ?TA. ?TA xf:ref "???". ?TA xf:label ?LABEL. }.
Of course the big trouble is the xf:ref , bacause the XML data model of XForms is not RDF.
http://www-ksl.stanford.edu/projects/TAP/
http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B758F-4B4X4HF-7&_user=10&_rdoc=1&_fmt=&_orig=search&_sort=d&_docanchor=&view=c&_searchStrId=1051473659&_rerunOrigin=google&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=1f3210ebc45ea17df5f5d3dcf43987ad
http://www.w3.org/TR/owl-xmlsyntax/apd-example.html
http://xmltwig.com/article/bw/bw_04-schema_repositories.html
http://www.oagi.org/dnn/Default.aspx?alias=www.oagi.org/dnn/oagi
http://www.xbrl.org/SpecRecommendations/
jena inference API
http://jena.sourceforge.net/inference/index.html
I first adjusted the Virtual parameter in xorg.conf.
I then used grandr to put the second screen to its maximum resolution.
Then this worked:
xrandr --output VGA-0 --above DVI-0
http://doc.ubuntu-fr.org/xrandr
Unix_way_of_sex = unzip; strip; touch; finger; mount; fsck; more; yes; gasp; umount; sleep
D'n'D of a Project URL, the N3 source buttons were not there, due to method D'n'D of a Project URL, due to method makeButtonsPanel()
TODO documentation: add something about examples for each feature;
in deductions/html/GUIgenerator.html , open Project by dropping URL
These lines in deductions/n3_new/generic_gui_projection-rules.n3 are a problem, because they are much too Java-oriented:
javapr:GUIKBAdapter javam:add (?JPANEL_FIELD ?JLABEL_DT 0). javapr:GUIKBAdapter javam:add (?JPANEL_FIELD ?JTEXT_FIELD 1).
So I added in the same rule 2 triples for a new predicate gengui:hasComponent :
# added when working on XForms ?JPANEL_FIELD gengui:hasComponent ?JLABEL_DT . ?JPANEL_FIELD gengui:hasComponent ?JTEXT_FIELD .
The tests for N3 ParserJ4 have moved here :
http://rdflib.googlecode.com/svn/branches/2.4.x/test/n3/listTest.n3
DONE add .ttl suffix recognition
Revision 894
- import URL with .xml suffix: recognize RDF and plain XML files
needed to adapt Gloze to process input URL's instead of Files : created GlozeURL as a replacement of Gloze
tested with http://www.agencexml.com/xsltforms/address.xml
Will mail to Steve Battle of Gloze, and also tell him that :
Although it's not implied by your License, it's a pleasure to share my modifications.
First I needed to adapt Gloze to process input URL's instead of Files, so I created GlozeURL as a replacement of Gloze :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/src/main/java/com/hp/gloze/GlozeURL.java?view=markup&pathrev=894
The modifications are rather systematic, replacing File by URL in the right places. So it should be really a replacement of original Gloze, and work whenever original Gloze works.
I made class GlozeURL extend Gloze, to avoid compilation errors and propagation of modifications elsewhere. But if you agree to use GlozeURL as the new Gloze, you should just remove the inheritance and rename GlozeURL to Gloze, and it should be OK. While I was here, I added generic arguments in a few places to avoid yellow markers in eclipse, and added curly braces for if blocks, that most code checkers object to.
Second, I've made a "short" list of important XML Schema that are automatically added to Gloze argument, depending on XML namespaces present in input file.
The "short" list of important XML Schema is here in class XMLExport :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/src/main/java/eulergui/export/XMLExport.java
The automatic addition to Gloze argument, depending on XML namespaces present in input file, occurs here in class N3SourceFromXML_Gloze :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/src/main/java/eulergui/inputs/N3SourceFromXML_Gloze.java
There is a small SAX ContentHandler that just records the XML namespaces present in input file.
There still problems:
Starting Gloze.main() with args http://www.agencexml.com/xsltforms/address.xml http://www.w3.org/2002/xforms http://www.w3.org/MarkUp/Forms/2007/XForms-11-Schema.xsd [ WARN] - 2009-10-14 16:06:10,749 [AWT-EventQueue-0] com.hp.gloze (Content.java:addAttributes:129) ignored attribute schemaLocation in schema [ WARN] - 2009-10-14 16:06:10,840 [AWT-EventQueue-0] com.hp.gloze (Content.java:addAttributes:129) ignored attribute default in attribute [ WARN] - 2009-10-14 16:06:10,891 [AWT-EventQueue-0] com.hp.gloze (Content.java:addAttributes:129) ignored attribute default in attribute
TODO : to be able to download a plain XML from an URL, need to detect such root elements in SourceFactory and DropURLTranferHandler:
<rdf:RDF xml:lang="en-GB"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
and
<owlx:Ontology owlx:name="http://www.example.org/wine" xmlns:owlx="http://www.w3.org/2003/05/owl-xml">
( cf http://www.w3.org/TR/owl-xmlsyntax/apd-example.html )
Enhanced XML import :
extracted XML Namespaces from plain XML source and transmit them with Schema location to Gloze.
I don't know yet how easy it will be... Anyway it is a good example of generating XML.
Commited:
Add 2 projects and 4 rules sets for generic GUI to XFORMS translation
WIP : empty result; will convert with Gloze an XForms to see how it looks like.
A generic_to_xforms-rules.n3
A query_xforms.n3
A xforms-rules.n3p
A xforms_library.n3
A person-app-spec_xforms.n3
A person_xforms.n3p
SPARQL Implementation Coverage Report
http://www.w3.org/2001/sw/DataAccess/tests/implementations
Isaac project: IsaacOS : object prototype based operating system, Lisaac : object prototype based language
TODO : watch Henry Story: http://blogs.sun.com/bblfish/entry/froscon_the_free_and_open
I need to expose the N3 prefixes to the XMLExport class. Indeed Gloze iterates on the given XML Schema for the RDF to plain XML translation, so it's not possible to add all the known XML Schema to the context. A partial list of of the most famous and useful XML Schema: XSD itself, XHTML, XForms, XSLT, SVG.
I sent this message on EulerGUI to the java-source.net team .
After more reflection, EulerGUI (http://eulergui.sourceforge.net/) is a hybrid creature.
I suggested it in the category "rules engines" because it wraps Drools as a rules engine for the N3 logic language (http://www.w3.org/DesignIssues/N3Logic), and because it integrates 4 rule engines.
But EulerGUI is also an IDE, not for Java, but for the Semantic Web.
So it could well be in categories IDE, and RDF.
EulerGUI also has importers for models and data in UML, eCore, plain XML, XML Schema. So it could well be in category UML.
Kind regards
Almost ready for EulerGUI 1.4 . I'd like to add XML export using Gloze .
Xorion will be an open source, XML-database based content/community management system that makes extensive use of XQuery and related technologies. The goal is to create a Drupal-like community project that can be used with a RESTful Services architecture to host rich XML documents as well as blogs and other components.
http://code.google.com/p/xorion/wiki/GeneralRequirements
Learning SPARQL
It refuses to start for a stupid packaging issue:
cause mère java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder org.slf4j.LoggerFactory.getSingleton(LoggerFactory.java:189) org.slf4j.LoggerFactory.bind(LoggerFactory.java:112) org.slf4j.LoggerFactory.performInitialization(LoggerFactory.java:105) org.slf4j.LoggerFactory.getILoggerFactory(LoggerFactory.java:235) org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:208) org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:221) org.openrdf.workbench.proxy.WorkbenchGateway.<init>(WorkbenchGateway.java:42) sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
Since I had problems with public servers, I wanted to try a local one.
I did this :
cvs -z3 -d:pserver:anonymous@joseki.cvs.sourceforge.net:/cvsroot/joseki co Joseki3
ant build
Then I started the server like this:
http://www.joseki.org/start.html
Then the server was here:
Alas! With a simple query pasted from using SPARQL to explore an unknown dataset :
SELECT DISTINCT ?Concept WHERE {[] a ?Concept}
I got :
HTTP ERROR: 500
INTERNAL_SERVER_ERROR
RequestURI=/sparql
Powered by Jetty://
So I started the Joseki distribution. It works !
I have to see how to add documents in the database, and also try TDB (TDB is a component of Jena. It provides for large scale storage and query of RDF datasets using a pure Java engine. TDB supports SPARQL.).
The feature is implemented and documented, but I still have to find some SPARQL public endpoint with responses for CONSTRUCT queries.
Revision 869 - Directory Listing
Modified Tue Oct 6 10:17:04 2009 UTC (3 hours, 11 minutes ago) by jmvanel
Doc.:
- reorganize into paragraphs : Data sources , Local tools , Global tools
- write new paragraphs: Show N3 parse tree, Show original source of N3 document,Launch OWL reasoner, SPARQL queries as N3 sources
Revision 866 - Directory Listing
Modified Mon Oct 5 21:52:21 2009 UTC (15 hours, 35 minutes ago) by jmvanel
query from SPARQL services (using ARQ): reloading project file is OK
TODO : change the test to have a non-empty query result - WIP
To start with nothing but a SPARQL endpoint and to dive in and learn about the data, the basic mechanism by which we can do this is by writing queries that use variables to find all of the predicates and all of the types that exist in a dataset, and then to pick out interesting predicates and types and use open-ended queries to explore the structure of the data. Dean Allemang has written a blog post on this exact subject, so I'll gladly reference his writing on using SPARQL to explore an unknown dataset.
http://www.pidgin.im/download/ubuntu/
First shot at integrating SPARQL services like in Twinkle; see ARQ
Added Thorsten's repository for Pellet in EulerGUI.
http://lists.owldl.com/pipermail/pellet-users/2009-June/003650.html
http://protegewiki.stanford.edu/index.php/Protege4DevDocs
Got a very good answer by Thomas Schneider to my question "where are the implied individuals ?"
First shot at integrating Pellet: show class tree, show unsatisfiable classes
EulerGUI doc.: add Subversion substitution for date
but also kept manual date, as Subversion substitution does not work with ViewVC
cf http://viewvc.tigris.org/issues/show_bug.cgi?id=352
http://protegewiki.stanford.edu/index.php/DLQueryTab
Using Leigh Dodds' tutorial: introducing-sparql-querying-semantic-web-tutorial page 3
See SPARQL Query Language for RDF ( W3C Recommendation 15 January 2008 )
./pellet.sh query -q ~/ontologies/examples/pe.sparql ~/ontologies/PeriodicTable.owl
where pe.sparql contains:
PREFIX table: <http://www.daml.org/2003/01/periodictable/PeriodicTable#> SELECT ?name WHERE { ?element table:name ?name. }
the answer is :
"erbium"^^http://www.w3.org/2001/XMLSchema#string "strontium"^^http://www.w3.org/2001/XMLSchema#string etc ...
Its also possible to replace the SELECT with:
CONSTRUCT { ?element table:name ?name. }
but then the result will be in RDF XML (no N3 output possible).
See also for Protégé 3 : http://protege.stanford.edu/doc/sparql/
It was:
Provides a GUI for the eulersharp.sourceforge.net Euler/SEM reasoning engine. The sources can be N3 (Notation 3), RDF, OWL, UML or eCore, files or URL's. It also wraps Drools as an N3 rules engine. It is becoming a lightweight IDE for Artificial Intelli
After suggestions by Paul:
A lightweight IDE for Artificial Intelligence. Started as GUI for the Euler reasoning engine. The sources can be N3, RDF, OWL, UM, eCore, plain XML or XSD, files or URL's. Wraps Drools (or CWM, FuXi) as N3 rules engines. Model based app. generation.
Now both ReDeFer and Gloze are integrated in EulerGUI (in Subversion), so
it's more simple to compare. The output is quite similar in both. I corrected
<xsd:all>
in ReDeFer. I did nothing in Gloze, except a bit
of defensive programming in two Jena classes. The problems I'm aware of are:
xforms_:appearanceType a owl:Class ; owl:unionOf ([ a owl:DataRange ; owl:oneOf ( "full"^^xsd:string "compact"^^xsd:string "minimal"^^xsd:string ) ]) .
when it should be:
xforms_:appearanceType a owl:Class ; owl:equivalentClass [ a owl:Class ; owl:oneOf ( xforms_:OWLIndividual_full xforms_:OWLIndividual_compact xforms_:OWLIndividual_minimal ) ] . xforms_:OWLIndividual_full a owl:Thing ; rdfs:label "full" . xforms_:OWLIndividual_compact a owl:Thing ; rdfs:label "compact" . xforms_:OWLIndividual_minimal a owl:Thing ; rdfs:label "minimal" .
From "missing features":
- open a form "Déductions style" for an N3 file in project;
this one is a nice feature that rises architectural questions:
This is quite easy to create a EulerGUI Project, add to it the current N3 source, and the swing-rules2.n3p project, then run that project (need to set the edited File to the current N3 source). The point needing more reflexion is "guess where are the RDFS or OWL sources that define used properties and prefixes".
Not in "missing features"
Using Gloze, this feature is quite easy to add.
From "missing features": that was not writen, only this was listed:
button to export the whole project:
- as a zip file, that is, the .n3p file plus all local files refered
- as a Drools project (what is a Drools project ?)
- as Protégé OWL project
- as Prolog files
TODO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
Implement <xsd:all>
XSD2OWL: implement <xsd:all>
tested with http://maven.apache.org/POM/4.0.0
The output for this test was incorrect RDF before; the message was:
Error: {E201} rdf:resource not allowed as attribute here.[Line = 21, Column = 50]
There are other messages in EulerGUI:
file:/home/jmv/ontologies/maven-v4_0_0.xsd converted to RDF/OWL in file:/tmp/translation-7228225454597360457.n3 [ WARN] - 2009-09-27 22:10:44,541 [AWT-EventQueue-0] com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler (RDFDefaultErrorHandler.java:warning:36) file:/tmp/translation-7228225454597360457.n3(line 12 column 30): {W109} The namespace URI: <&xs;> is relative. Such use has been deprecated by the W3C, and may result in RDF interoperability failures. Use an absolute namespace URI. [ WARN] - 2009-09-27 22:10:44,627 [AWT-EventQueue-0] com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler (RDFDefaultErrorHandler.java:warning:36) file:/tmp/translation-7228225454597360457.n3(line 486 column 57): {W105} Redefinition of ID: propertiesType [ WARN] - 2009-09-27 22:10:44,628 [AWT-EventQueue-0] com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler (RDFDefaultErrorHandler.java:warning:36) file:/tmp/translation-7228225454597360457.n3(line 388 column 57): {W105} Previous definition of 'propertiesType'.
Hi Roberto
I now fully integrated XML and XSD mapping in EulerGUI, see :
http://eulergui.svn.sourceforge.net/viewvc/eulergui/?view=log
Now I can work comfortably for the transforms themselves.
The OWL API used in Protégé and in other validators does not show all
accurately all problems.
An OWL RDF document has to be correct RDF, and to check that, the W3C
RDF Validator is convenient (based on the ARP Jena API:
http://www.w3.org/RDF/Validator/
About the test cases, I'll work on the Gloze samples, while also
comparing results between Gloze and ReDeFer.
Others XSD will include Maven (http://maven.apache.org/POM/4.0.0) and
XForms (http://www.w3.org/MarkUp/Forms/2007/XForms-11-Schema.xsd).
I'd like to have JUnit tests.
For conformance tests about the generated OWL, we can use the Jena
API, and the OWL API.
For testing the result themselves and non-regression, I propose to use
the test infrastructure of EulerGUI. It has the capability to query
any RDF.
Adios
http://kickjava.com/src/ : source code hyperlinked of many Open Source Java projects
Downloaded the Java source from Sun : http://download.java.net/jdk6/source/, but it is available as well through an Ubuntu package.
A list (trying to be complete) of currently available JAXP Factory implementations.
http://selfawaresystems.com/posts/
Saxon B (now at version 9) is not up-to-date on Maven central, and not anymore on ibiblio :
http://mirrors.ibiblio.org/pub/mirrors/maven2/net/sf/saxon/saxon/
<groupId>net.sf.saxon</groupId>
<artifactId>saxon</artifactId>
<version>8.7</version>
Through Pierre Attar, I heard of CIM Tools:
add Maven config. in ReDeFer (not tested; for Maven build to work, it will need some directory changes in sources)
This happens the second time the application is started, as if Jena was not aware of the real database being opened .
The stack trace:
com.hp.hpl.jena.shared.JenaException: Database created with incompatible database type for this version of Jena: HSQLDB at com.hp.hpl.jena.db.impl.DriverRDB.checkEngine(DriverRDB.java:378) at com.hp.hpl.jena.db.impl.DriverRDB.getSystemSpecializedGraph(DriverRDB.java:356) at com.hp.hpl.jena.db.DBConnection.containsModel(DBConnection.java:196) at com.hp.hpl.jena.db.impl.GraphRDBMaker.hasGraph(GraphRDBMaker.java:132) at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:94) at com.hp.hpl.jena.db.impl.GraphRDBMaker.createGraph(GraphRDBMaker.java:80) at com.hp.hpl.jena.rdf.model.impl.ModelMakerImpl.createFreshModel(ModelMakerImpl.java:55) at net.rhizomik.redefer.XSD2OWLMapper.<init>(XSD2OWLMapper.java:69) at eulergui.inputs.N3SourceFromPlainXML.prepare(N3SourceFromPlainXML.java:30) at eulergui.project.Project.prepare(Project.java:791) at eulergui.project.Project.restore(Project.java:760) at eulergui.project.Project.restore(Project.java:818) at n3_project.ProjectGUI.main(ProjectGUI.java:120)
I found this in the Jena source, which looks suspect:
package com.hp.hpl.jena.db.impl; public class Driver_HSQLDB extends Driver_HSQL { public Driver_HSQLDB() { super() ; DATABASE_TYPE = "HSQL"; } }
Haha !!!!!!!! the latest version has:
DATABASE_TYPE = "HSQLDB";
Alas there is nothing more recent than Jena 2.6.0 in the repo:
http://jena.hpl.hp.com/repo/com/hp/hpl/jena/jena/
This means that I'm forced to debug Jena just because the newest stuff is not in Maven!
Now I'm commiter to ReDeFer on Google Code !
XML2RDF is not based on a XSLT. It is implemented using Java and the Jena library. The code is available from
http://code.google.com/p/redefer
I tested this small XHTML with XForms inside: http://www.agencexml.com/xsltforms/textarea.xml
The result from the web converter at http://rhizomik.net/redefer/#XML2RDF is globally satisfying, but I saw something questionable.
For this fragment:
<body>
<xf:textarea ref="sample:MyTextValue">
<xf:label>Note:</xf:label>
</xf:textarea>
the converted fragment is:
<rdf:RDF
xmlns:j.0="http://www.w3.org/2002/xforms#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:j.1="http://www.w3.org/1999/xhtml#"
xmlns:j.2="http://www.agencexml.com/sample#">
<rdf:Description rdf:about="http://www.agencexml.com/xsltforms/textarea.xml">
<j.1:body rdf:parseType="Resource">
<j.1:div rdf:resource="http://www.agencexml.com/xsltforms/textarea.xml#console"/>
<j.0:textarea rdf:parseType="Resource">
<j.0:label>Note:</j.0:label>
<j.1:ref>sample:MyTextValue</j.1:ref>
</j.0:textarea>
According the XML namespaces Rec., the attribute ref in the input XML is in no namespace (not in default namespace in scope !). I propose to translate it with an RDF prefix correcponding to the original base URI.
Looking at the specification
http://www.w3.org/TR/REC-xml-names/#scoping-defaulting
I read
The namespace name for an unprefixed attribute name always has no value.
http://thread.gmane.org/gmane.comp.misc.ontology.protege.owl/30551/focus=30576
A binary search revealed that around
> line 371 the following representation of a class as a union of strings.
> Take this out and the file parses fine.
Thanks for having a look. After some debugging, I saw that too.
I hope that this , and other stuff not conforming to the OWL 2
structural model, will be cought with appropriate error messages.
Maybe doing XML Schema validation ; I saw this Schema for OWL XML :
http://www.w3.org/2007/OWL/wiki/OWL_XML_Schema
but I don't know whether there is one for RDF XML serialization of OWL.
In the Protégé OWL 2 tutorial I saw the way to create Enumerated Classes in Protégé 4 (see parag. 7.3 Enumerated Classes).
Then I know how it should look like in RDF XML serialization for OWL:
<owl:Class rdf:about="http://www.w3.org/2002/xforms#appearanceType">
<owl:equivalentClass>
<owl:Class>
<owl:oneOf rdf:parseType="Collection">
<rdf:Description rdf:about="#minimal"/>
<rdf:Description rdf:about="#compact"/>
<rdf:Description rdf:about="#full"/>
</owl:oneOf>
</owl:Class>
</owl:equivalentClass>
</owl:Class>
instead of :
> <owl:Class rdf:about="http://www.w3.org/2002/xforms#appearanceType">
> <owl:unionOf rdf:parseType="Collection">
> <owl:DataRange>
> <owl:oneOf rdf:parseType="Resource">
> <rdf:rest rdf:parseType="Resource">
> <rdf:rest rdf:parseType="Resource">
> <rdf:rest
> rdf:resource="http://www.w3.org/1999/02/22-rdf-syntax-ns#nil"/>
> <rdf:first
> rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
> >minimal</rdf:first>
> </rdf:rest>
> <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
> >compact</rdf:first>
> </rdf:rest>
> <rdf:first rdf:datatype="http://www.w3.org/2001/XMLSchema#string"
> >full</rdf:first>
> </owl:oneOf>
> </owl:DataRange>
> </owl:unionOf>
> </owl:Class>
Artificial Intelligence: Structures and Strategies for Complex Problem Solving : http://www.cs.unm.edu/~luger/ai-final/
What it is
Triplr (verb): a service that generates RDF Triples from URIs.
The content at the original URIs must be readable as one of the syntaxes Raptor knows - RDF ones, RSS, Atom, Microformats that have a GRDDL profile and so on. The full list is given in How... can I use it?
For instanciating a Method call with a list as object, a resource was wrongly taken in account as a literal string.
Before doing a new release of EulerGUI, I put the Déductions GUI rules in a new directory:
cp -r n3 n3_new cd n3_new sed -e 's/class="n3_project/class="eulergui.project/' -i *.n3p
I need also to change the eclipse launch configurations in workspace :
cd .metadata/.plugins/org.eclipse.debug.core/.launches sed -e 's=/deductions/n3/=/deductions/n3_new/=' -i *.launch
Alas this broke all the XML .n3p files.
A triple involving a Java object in first position (subject) will be interpreted as a JavaBean property, e.g. :
:myWindow any_prefix:visible xsd:true .
will be interpreted as :
myWindow.setVisible(true);
Precedently only predicates with the Java prefix were interpreted as Java properties.
Also method calls are now detected, no matter what the N3 prefix is, as long as it ends with # :
:myWindow any_prefix:setState ( 1 ) .
This paves the way for Déductions GUI rules: migration to generic platform.
After the correction from Roberto, it works fine :
saxonb-xslt XForms-11-Schema.xsd xsd2owl.xsl > XForms-11-Schema.redefer.owl
And I can load it readily Protégé 4 ! :))))))))
I saw this; in fact it passes through UML (two dialects!):
From OWL to Plone : I found a working path to transform an OWL ontology into a working Plone content-type. Here is my recipe
http://www.akasig.org/2005/04/28/from-owl-to-plone/
I created a new variant of the basic Person test, person_import2.n3p
,
that imports a new variant of the basic Déductions GUI rules,
swing-rules3.n3p.
For now only the classes are modified, not the java-specific predicates. The generic GUI platform objects are tagged as Java objects according to the chosen platform, e.g. :
{ ?W a gengui:TextField. javapr:thisApplication app:platform app:Java . } => { ?W a java:javax_swing_JTextField } .
This amounts to insert one more inference step.
OWL API is available through Maven: http://owlapi.sourceforge.net/source.html
Tonight I realized the big potential of having a 2 directional plain XML <--> RDF correspondance. On input, a plain XML can be added to the RDF store. For instance, it can come from an XForms form. On output, it can solve the problem of generating plain XML out of an RDF object graph. And this last feature is needed for many use cases, as plain XML is ubiquitous today (feed an instance for an XForms, XBRL report). XBRL in Cover pages .
Gloze is maintained ! Got a mail from Steve after 1 day.
There is also : Krextor – An Extensible XML→RDF Extraction Framework, by Christoph Lange, but it is not generic like Gloze, it is a framework where one has to wrtie XSLT for each XML vocabulary. I just noticed Christoph Lange's answer to my post on Protégé list :
https://mailman.stanford.edu/pipermail/protege-owl/2009-August/011907.html
I read Gleaning Resource Descriptions from Dialects of Languages (GRDDL). W3C is now completely at a stage where new specifications are meant to connect newer concepts (RDF here) to older (plain XML).
Same stack , but a 32 lines input RDF file:
http://jmvanel.free.fr/ai/XForms-11-Schema_test_small.owl.rdf
I 'm not sure if it's correct or some special case left over ...
One more project, XSLT based, to convert from XML and XSD to RDF and OWL :
Sent a mail to Roberto:
The resources provided on the Rhizomic are all interesting to me in
the perspective of developing business application with RDF
techniques.
I tried the XSD to OWL transform from your site, with this large XSD,
namely latest XForms XML Schema :
http://www.w3.org/MarkUp/Forms/2007/XForms-11-Schema.xsd
The result has an error at line 79 :
<owl:onProperty rdf:resource="#&xforms;instance"/>
as you can see e.g. in Protégé 4.
It should be :
<owl:onProperty rdf:resource="&xforms;instance"/>
or
<owl:onProperty rdf:resource="#instance"/>
I wanted to try locally, but the xsl file provided on your site is not
sufficient, because the imported XSLT xsd2owl-functions.xsl cannot be
found on your site.
XForms for HTML Authors - Steven Pemberton
https://sourceforge.net/search/?type_of_search=soft&words=xforms
https://sourceforge.net/projects/xsltforms/
"required" and "relevant" properties are interesting, as ell as "constraint" and "calculate". All are attributes of the <bind> element.
The contruct <repeat nodeset="/some/xpath">
takes care of
multi-valued domain properties.
The kind of XML to generate:
<group xmlns="http://www.w3.org/2002/xforms" > <label>Personal Information</label> <input ref="lastname"><label>Last name:</label></input> <input ref="firstname"><label>First name:</label></input> <input ref="address"><label>Address:</label></input> </group>
See "Déductions: reflexions on multi-platform generation"
{ ?W a gengui:TextField } => { ?W a java:javax_swing_JTextField }.
java_library.n3
java_library-rules.n3
java_projection-rules2.n3,
replacing java:XXX by gengui:XXY
Dbin looks interesting as an example of Web navigation and annotating of an RDF database : http://www.dbin.org/overview.php
No abstract classes in OWL:
https://mailman.stanford.edu/pipermail/protege-owl/2007-September/003823.html
Namely latest XForms XML Schema.
I had to tweek the code, and even then the result does not open in Protégé 4.
Sent a mail to Gloze author Steve Battle, and also a question on Protégé list:
It's worse with Protégé 4 (build 113). I just get a stack trace. Is there a way to get a line number in the document without using a debugger ?
Sonar enables you to collect, analyze and report metrics on source code. Sonar not only offers consolidated reporting on and across projects throughout time, but it becomes the central place to manage code quality.
I followed http://docs.codehaus.org/display/SONAR/The+2+minutes+tutorial, but I didn't like the idea of deleting something in my local Maven repo, so I did:
mvn clean install org.codehaus.mojo:sonar-maven-plugin:sonar
Then I got my project page (dashboard) at http://0.0.0.0:9000/project/index/1
The default password for settings is admin / admin .
I discovered this rule from Checkstyle:
http://stackoverflow.com/questions/662598/howto-design-for-extension
I also applied for SonarJ (unrelated and non open source )
http://www.hello2morrow.com/products/downloads
Some extensions to Jena, (Gloze, TDB, Eyeball, ... ) are on Subversion:
https://jena.svn.sourceforge.net/svnroot/jena/
while the base is in CVS:
http://jena.cvs.sourceforge.net/viewvc/jena/
Among this, the core is on jena2/ .
TDB is a high performance, pure-Java, non-SQL storage subsystem for Jena that scales to billions of triples.
I downloaded Eyeball from CVS. Then I added this small script
run_main_class.sh
:
#!/bin/bash echo running $* for file in lib/*.jar do echo $file classpath=${classpath}":"${file} done echo java -cp $classpath $* java -cp $classpath $*
Then I can check one of the example (bad) files:
./run_main_class.sh jena.eyeball -check examples/bad-uris.rdf WARN [main] (RDFDefaultErrorHandler.java:36) - file:examples/bad-uris.rdf(line 11 column 46): {W107} Bad URI: <http:no-authority> Code: 58/REQUIRED_COMPONENT_MISSING in HOST: A component that is required by the scheme is missing. On statement: unknown:scheme rdf:type rdfs:Class eye:badURI: "unknown:scheme" for reason: URI has an unrecognised scheme ..... etc ......
3 features wished: copy & paste
/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Rete/AlphaNode.py:6: DeprecationWarning: the sets module is deprecated from sets import Set /usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Rete/SidewaysInformationPassing.py:7: DeprecationWarning: the md5 module is deprecated; use hashlib instead import unittest, os, sys, itertools, md5 Parsing RDF facts from file:/tmp/uml_owl-rules.n3 Traceback (most recent call last): File "/usr/local/bin/FuXi", line 8, in <module> load_entry_point('FuXi==1.0-rc.dev', 'console_scripts', 'FuXi')() File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Rete/CommandLine.py", line 154, in main rs = HornFromN3(fileN) File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Horn/HornRules.py", line 37, in HornFromN3 return Ruleset(n3Rules=store.rules,nsMapping=store.nsMgr) File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Horn/HornRules.py", line 105, in __init__ self.formulae.append(Rule(Clause(body,head),declare=allVars)) File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Horn/HornRules.py", line 199, in __init__ self._bodyHash = hash(antHash) File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Rete/Network.py", line 90, in __hash__ _concatPattern = [pattern and self._hashRulePattern(pattern) or "None" for pattern in self._l] File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Rete/Network.py", line 78, in _hashRulePattern if not self.skipBNodes or not isinstance(i,BNode)]) File "/usr/local/lib/python2.6/dist-packages/FuXi-1.0_rc.dev-py2.6.egg/FuXi/Rete/Network.py", line 77, in <lambda> return reduce(lambda x,y:x+y,[ i for i in item TypeError: coercing to Unicode: need string or buffer, QuotedGraph found
Chimezie has decided to separate the expert system (FuXi) into its own Google Code project and will decide soon what to do with python-dlp (the idea, anyways): http://code.google.com/p/fuxi/
I updated FuXi integration in EulerGUI, now that FuXi has the --filter feature. I was not without pain; first at some time the main script changed from Fuxi to FuXi; then rdflib 2.4.0 provided by Ubuntu was too old. I tried to summarize the install in the EulerGUI Manual .
It looks compatible with SWI's implementation.
use_module(library(sgml)).
Then you can do the same as with SWI:
load_html_file( '/home/jmv/src/yap_git/yap-6/packages/sgml/sgml_mode.html', Term ).
https://sourceforge.net/apps/trac/sourceforge/ticket/4347
There is currently an issue preventing download stats from being displayed properly. All the download data is being recorded, it simply isn't being displayed. This is a known issue, and we're working on a fix for it.
dvr-qtgui &
[3] 9747
~/src/pwc-10.0.12-rc1% <init> : Avifile RELEASE-0.7.47-080115-14:47-4.2.3
<init> : Available CPU flags: fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat pse36 clflush mmx fxsr sse sse2 ht syscall nx mmxext fxsr_opt pdpe1gb rdtscp lm 3dnowext 3dnow constant_tsc rep_good pni mon
<init> : 1250.00 MHz AMD Phenom(tm) 9850 Quad-Core Processor detected
*** WARNING *** : the driver doesn't provide a correct size for memory mapping. DVR tries to correct this error, but some strange things may happend, you are warned.
Can't map memory for capture : Argument invalide
RETE engine for PHP:
http://forum.joomla.org/viewtopic.php?f=500&p=1688036
http://www.lespetitescases.net/ISWC-2008-premieres-impressions-generales
http://data-gov.tw.rpi.edu/wiki/Generating_RDF_from_data.gov
http://optimix.sourceforge.net/ Optimix lets the user specify graph transformations in a declarative language, based on relational graph rewriting.
http://wwwcs.uni-paderborn.de/cs/varlet/tour.html The purpose of this guided tour is to demonstrate some functionality of the Varlet database reengineering environment.
http://swik.net/RDF+visualization
http://www.openvest.com/trac//wiki/n3SyntaxHighlighting
http://www.esec-fse-2009.ewi.tudelft.nl/
java_tree_view.n3 , to be used both by EulerGUI for finding the edited Classes, and by generated application for finding objects for linking
Thread : EulerGUI 1.2.1 + Déductions application generator
Déductions is a Java Swing application generator from OWL models and N3 logic rules.
The User Manual, for the application designer.
This is a framework (Open Source, compatible but not Protégé-based) allowing to mix ontologies and a RETE forward chaining engine (Drools). This a quite similar to the SWRL plugin of eclipse, except that the rule language is N3 logic . N3 logic is similar to SWRL in its semantics, but the syntax is similar to the body of SPARQL queries. N3 is a good candidate for a universal data + models + rules + queries textual language. The RDF subset of N3 is perfectly isomorphic to RDF, but as human readable as can be. And it is readable by Protégé, Jena, and others tools. OWL, being expressed as RDF, is thus also expressible in N3. Here is an example:
:Person a owl:Class . :name a owl:DatatypeProperty ; rdfs:domain :Person ; rdfs:range xsd:string ; rdfs:comment "First name and last name" ; rdfs:label "name" . :Address a owl:Class . :hasAddress a owl:ObjectProperty ; rdfs:domain :Person ; rdfs:range :Address ; rdfs:comment "click to enter address"@en ; rdfs:label "address" .
For a developper, and even some domains experts, it can be quicker to enter initial models and facts in N3 with an editor having syntax coloring. Then Protégé can be used to visualize, navigate, update, and Description Logics reasonning.
EulerGUI is a lightweight IDE for developping and testing projects composed of N3, OWL, RDF(S) and UML ontologies and databases, and rules in N3 logic.
The sources can be N3 (Notation 3), RDF, OWL, UML or eCore, files or URL's.
The rules are in N3 logic; so the same rule language is used for infrastructure (form generation) and for business rules. There are four N3 rules engines: in Prolog, Python (Fuxi, CWM) , Java (Drools - RETE) .
In 2 clicks EullerGUI allows to generate and run Java Swing GUI's from OWL models and rules from the Deductions project.
See also:
* The Deductions vision .
[Announce] EulerGUI 1.2.1 + Déductions application generator
http://www.nabble.com/drools---user-f11823.html
The preceding announce on this list was on february 23:
In short, EulerGUI is an IDE centered around a Semantic Web language called N3. N3 is a good candidate for a universal data + models + rules + queries textual language. The RDF subset of N3 is perfectly isomorphic to RDF, but as human readable as can be. And it is readable by Protégé, Jena, and others tools. OWL, being expressed as RDF, is thus also expressible in N3. Here is an example for an OWL model :
:Person a owl:Class . :name a owl:DatatypeProperty ; rdfs:domain :Person ; rdfs:range xsd:string ; rdfs:comment "First name and last name" ; rdfs:label "name" . :Address a owl:Class . :hasAddress a owl:ObjectProperty ; rdfs:domain :Person ; rdfs:range :Address ; rdfs:comment "click to enter address"@en ; rdfs:label "address" .
Here is an example of a simple rule in N3 logic :
{ ?C hasParent ?P. ?P hasBrother ?B } => { ?C hasUncle ?B }.
This rule is translated into Drools, giving this:
rule "family-rules.n3 0" when Triple( $C : subject, predicate == "<file:/home/jmv/family-rules.n3#hasParent>", $P : object ) Triple( subject == $P, predicate == "<file:/home/jmv/family-rules.n3#hasBrother>", $B : object ) not( Triple( subject == $C, predicate == "<file:/home/jmv/family-rules.n3#hasUncle>", object == $B ) ) then Triple newTriple; newTriple = new Triple( $C, "<file:/home/jmv/family-rules.n3#hasUncle>", $B ); insert( newTriple ); endncle>", $B ); insert( newTriple ); end
As you can see, a negation of the consequent (RHS) is added in the antecedent, to avoid extra responses.
This is one of the new features. The others are :
The rule base, the models, and the data are exportable for using with Drools independently. So, for the Drools community, EulerGUI allows to import models and data from N3, RDF, OWL, UML, eCore documents. Also for some people, writing N3 rules can be easier than Drools language.
As you see above, the translation makes use of a particuliar form of Drools language, which makes use of a single Java class, Triple, that models RDF statements. This is quite far from the intended Drools usage, but it shows the power and flexibility of Drools. When embedded into generated Java Swing applications, a Drools engine is able to generate a form in a few milliseconds from the class model! Also this design, based on a single Java class, allows to add and remove business classes at runtime.
Déductions is a Java Swing application generator from OWL models and N3 logic rules.
The User Manual for the application generator .
Annonce EulerGUI 1.2.1 sur LinuxFr.org
update convert-UML2_metamodel_to_OWL.n3p to download directly the UML.ecore from the Web
TODO: it is not currently possible in EulerGUI to set an URL for an eCore
document, so the convert-UML2_metamodel_to_OWL.n3p
project was
edited by hand.
test_person_import.n3p
foaf_import.n3p
: OK
cv.n3p
: OK; was KO : no datatype properties: query2.n3
is really
necessary in cv.post.n3p
rdfs_food_gui.n3p:OK
uml.n3p
: OK
ecore.n3p
: OK
Project Sequence : postProcessingURL was not taken in account when it's a relative URL.
Search e.g. this in Google:
class URIHandlerImpl site:http://dev.eclipse.org/viewcvs/
If you want to see line numbers, add this to the URL:
?view=annotate
After correcting a slow algorithm and adding N3 escape """ to strings if necessary, I was able to use EulerGUI to convert the UML 2 metamodel into OWL. This is just a by-product of being able to express eclipse eCore models in N3. The funny thing is that the UML-OMG guys want to translate the Semantic Web things into their stuff (see OMD), and the Semantic Web guys (like me) do the converse.
To go from XMI to OWL the data flow (completely implemented by EulerGUI) is:
XMI --> N3 representation of the XMI --> conversion through N3 rules --> OWL N3 representation
The N3 rules used for conversion are here :
http://deductions.svn.sourceforge.net/viewvc/deductions/n3/ecore_owl-rules.n3
A typical rule is the following:
{
?ECORE_CLASS a ecore:EClass .
} => {
?OWL_CLASS a owl:Class .
?OWL_CLASS :translatedFromECORE ?ECORE_CLASS .
} .
This simple eCore to OWL translation processes: Class, eSuperTypes, name, eStructuralFeatures. These eCore features are left aside for now: lowerBound, upperBound, eOpposite, containment="true", derived="true".
The resulting OWL converted from the UML 2.2 metamodel allows one to navigate into this big metamodel in Protégé, to write rules relying on UML metaclasses and predicates, and to enter instances (actual UML user models) in Protégé.
To make a complete translation, one should also translate the OCL constraints and operations, that could be converted into SWRL or N3 logic. This is quite a bit a work, but the OCL parser from eclipse is usable.
There might still be some imperfections from the point of view of UML or OWL experts.
I put the N3 file for the OWL conversion of the UML 2.2 metamodel (suitable for Protégé) here:
http://deductions.sourceforge.net/models/UML2-OWL_model.n3
The HTML generated in Protégé with OWLDoc is here:
http://deductions.sourceforge.net/models/UML2-OWL_model_doc/
On the web the UML2 metamodel in the eclipse eCore XMI dialect, that was used for the conversion, is here :
I found where the settings are on kubuntu: in konqueror, open settings:.
See http://www.kubuntu.org/docs/kquickguide/C/ch04s04.html
Instead of monitoring several forums and threads , it is simpler to monitor Jos De Roo's profile:
https://sourceforge.net/users/josd
To be very concrete here is the translation I propose for :
public class Item {
public String name; // or getName + setName
public int unitPrice;
public int computePrice( int quantity ) {return unitPrice*quantity;}
}
----------- OWL/N3 translation ------------------
@prefix owl: <http://www.w3.org/2002/07/owl#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix xsd: <http://www.w3.org/2001/XMLSchema#> .
@prefix um2: <http://schema.omg.org/spec/XMI/2.1/>.
:Item a owl:Class.
:name a owl:datatypeProperty;
rdfs:label "name";
rdfs:domain :Item;
rdfs:range xsd:string.
:unitPrice a owl:datatypeProperty;
rdfs:label "unitPrice";
rdfs:domain :Item;
rdfs:range xsd:positiveInteger.
:Item uml2:ownedOperation :computePrice.
:computePrice rdfs:label "computePrice";
uml2:ownedParameter :quantity.
:quantity uml2:type xsd:positiveInteger;
rdfs:label "quantity". :computePrice uml2:ownedParameter :returnComputePrice. :returnComputePrice uml2:type xsd:positiveInteger; uml2:direction "return".
Above I follow paragraph "7.2 Abstract Syntax" in "OMG Unified Modeling Language (OMG UML),
Superstructure, V2.1.2", except that I use XSD datatypes and rdfs:label as usual in OWL.
First I took the eCore version of the UML 2 metamodel from my eclipse 3.5 installation:
% unzip -l \ ~/apps/eclipse-SDK-3.5/eclipse/plugins/org.eclipse.uml2.uml_3.0.0.v200905151700.jar \ 'model/*' Length Date Time Name -------- ---- ---- ---- 0 06-15-09 16:06 model/ 141754 06-15-09 16:06 model/CMOF.ecore 32081 06-15-09 16:06 model/CMOF_2_UML.ecore2xml 1184081 06-15-09 16:06 model/UML.ecore 396820 06-15-09 16:06 model/UML.genmodel 619 06-15-09 16:06 model/UML21_2_UML.ecore2xml 7847 06-15-09 16:06 model/UML2_2_UML.ecore2xml 1159773 06-15-09 16:06 model/UML_21.ecore -------- ------- 2922975 8 files
https://sourceforge.net/search/?type_of_search=soft&words=rdf+uml
Google Summer of Code 2009 Home Page
http://socghop.appspot.com/program/home/google/gsoc2009
List all accepted organizations
http://socghop.appspot.com/program/accepted_orgs/google/gsoc2009
Another Prolog in Java : http://www.binnetcorp.com/OpenCode/kernelprolog.html
http://www.cs.unm.edu/~luger/ai-final/index.html
Ways of processing a list: http://computing.unn.ac.uk/staff/cgpb4/prologbook/node71.html
Bravo, Paul Brna ! ( 10 years ago )
I should buy this book: Artificial Intelligence: Structures and Strategies for Complex Problem Solving
http://sewiki.iai.uni-bonn.de/research/gentl/example
UIMA
http://incubator.apache.org/uima/
http://gate.ac.uk/
I saw this recent project that looks good:
Pyke introduces a form of Logic Programming (inspired by Prolog) to the Python community by providing a knowledge-based inference engine (expert system) written in 100% Python.
It is both forward and backward chaining.
To change the language, apply a lang attribute to the text with the Attributes tool, and restart the spell-check procedure.
N3 Rules Processing and HTML Translation for the Semantic web
Leung, Chun Yip
HPL-2003-199
Keyword(s): N3; forward chained rules; RDF translation; semantic web ht
tp://www.hpl.hp.com/techreports/2003/HPL-2003-199.html
http://www.w3.org/2005/04/fresnel-info/
http://marbles.sourceforge.net/
https://sourceforge.net/projects/simply-rdf/
OWL structural view with UML diagrams: http://www.w3.org/TR/2008/WD-owl2-syntax-20081202/
Because the pom.xml was not in a good state, I had to run release:prepare this way :
mvn release:prepare -Dresume=false
The release.properties file, generated by the release:prepare stage, was:
#release configuration #Tue Aug 25 13:02:14 CEST 2009 scm.tag=eulergui-1.2 project.scm.eulergui\:eulergui.developerConnection=scm\:svn\:https\://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2 project.scm.eulergui\:eulergui.connection=scm\:svn\:https\://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2 scm.url=scm\:svn\:https\://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2 preparationGoals=clean verify project.dev.eulergui\:eulergui=1.3-SNAPSHOT scm.commentPrefix=[maven-release-plugin] scm.tagBase=https\://eulergui.svn.sourceforge.net/svnroot/eulergui/tags project.scm.eulergui\:eulergui.tag=HEAD completedPhase=end-release project.rel.eulergui\:eulergui=1.2 project.scm.eulergui\:eulergui.url=https\://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2
During the release:prepare stage, Maven manipulates these tags in pom.xml :
<version>1.3-SNAPSHOT</version> ... <scm> <developerConnection>scm:svn:https://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2</developerConnection> <connection>scm:svn:https://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2</connection> <url>https://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.2</url> </scm>
and commits the copy of the sources in the tags/ directory in the Subversion repository.
The release:perform stage just uploads the files on the EulerGUI Maven depot on sf.net .
Then I created the Web site generated by Maven :
mvn site
mvn site:deploy
but the unzipping didn't work :
Transfer finished. 43792 bytes copied in 1.831 seconds Executing command: cd /home/groups/e/eu/eulergui/htdocs/maven-site/.; unzip -q -o wagon812543537683092844.zip; rm -f wagon812543537683092844.zip Executing command: chmod -Rf g+w,a+rX /home/groups/e/eu/eulergui/htdocs/maven-site sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven-site - Session: Disconnecting sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven-site - Session: Disconnected
It fails when a shell is not active through :
ssh -t jmvanel,eulergui@shell.sourceforge.net create
One can do the unzipping through the shell on Sourceforge. But it is clean to do it with:
mvn site:deploy
The error above was due to a bad <url> in pom.xml :
<distributionManagement>
<repository>
<!-- id corresponds to a <server> tag in ~/.m2/server.xml -->
<id>repository.eulergui.sf.net</id>
<name>Repository for eulergui and 3rd party libraries not having Maven repo.</name>
<url>sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven2</url>
</repository>
<site>
<id>eulergui.sourceforge.net</id>
<!-- CAUTION: these don't work with site:deploy :
<url>sftp://web.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven-site</url
<url>sftp://shell.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven-site</url>
-->
<url>scp://shell.sourceforge.net/home/groups/e/eu/eulergui/htdocs/maven-site</url>
</site>
</distributionManagement>
Anyway, finally, the generated site is here :
http://eulergui.sourceforge.net/maven-site/
And the release 1.2 is here:
http://sourceforge.net/projects/eulergui/
I tried through the Java Cache Viewer :
javaws -viewer &
But it didn't start without any message :( .
Mail sent to the project administrator.
http://www.w3.org/TR/rdf-sparql-query/#ask
http://www.w3.org/2005/rules/wiki/RIF_Working_Group
Gloze : https://sourceforge.net/projects/jena/files/
http://data-gov.tw.rpi.edu/wiki/Generating_RDF_from_data.gov
TODO : watch videos by Martin : http://martinfowler.com/
http://pypi.python.org/pypi/archgenxml - UML to code generator for Plone
GenTL: Logic Program Transformation with Concrete Syntax
http://www.gratra.org/ - graph transformation and graph grammars
http://en.wikipedia.org/wiki/Graph_rewriting
http://www.acceleo.org/pages/overview/en
http://en.wikipedia.org/wiki/Model-driven_architecture
http://www.lyria.com/rubrique.php3?id_rubrique=195 : Leonardi Documentation
http://swik.net/RDF+visualization
By me:
Not found freely:
http://www.springerlink.com/content/l31200735ml16781/
I had to set a mailman password. For that I had to go to "admin/features".
Put in EulerGUI project in n3_rules_good_practices.html .
Motivation
Suppose the original rule OR is writen as :
{ T1 ... Tn . Tn+1 ... Tp } => { Consequent } .
You want to reuse that rule with the rest of antecedent Tn+1 ...
Tp
and the consequent unchanged, but with a different begining of
antecedent.
You are tempted to copy and paste the original rule, and change the begining of antecedent.
Mechanics
Instead of that bad copy and paste, here is the refactoring:
T1 ... Tn
with new
predicates, using the same variables, resulting in T'1 ... T'm
;
then OR becomes OR' :
{ T'1 ... T'm . Tn+1 ... Tp } => { Consequent } .
and it is this form that can be reused;
{ T1 ... Tn } => { T'1 ... T'm } .
In situations where the original rule OR would trigger, OR" then OR' will trigger.
Example
The original begining of antecedent is in blue, and the rewriting with new predicates is in green.
Original rule in app_gui-rules2.n3 :
{
?CLASS gui:hasForm ?FORM .
?CLASS log:notEqualTo owl:Thing . ?PROP a :OWLProperty . ?PROP rdfs:domain ?CLASS . # only if there is no field for that property: (?SCOPE 1) e:findall ( ?FIELD_ { ?FIELD_ gui:inputWidgetSpecification ?PROP . } () ) . } => { ?FORM gui:hasField ?FIELD . ?FIELD gui:inputWidgetSpecification ?PROP . _:d eg:trace ( "add an EMPTY field in the form: " ?PROP ?FIELD ) . } .
Extraction of the rest of antecedent as a second intermediary rule (note that the consequent is copied verbatim ) :
{ # add Fields To Form From Class (direct properties, no properties of subclass)
?FORM gui:addFieldsToFormFromClass ?CLASS . ?PROP a :OWLProperty . ?PROP rdfs:domain ?CLASS . # only if there is no field for that property: (?SCOPE 1) e:findall ( ?FIELD_ { ?FIELD_ gui:inputWidgetSpecification ?PROP . } () ) . } => { ?FORM gui:hasField ?FIELD . ?FIELD gui:inputWidgetSpecification ?PROP . _:d eg:trace ( ">>> addFieldsToFormFromClass: add an EMPTY field in the form: " ?PROP ?FIELD ) . } .
Extraction of the begining of antecedent as a first intermediary rule :
{
?CLASS gui:hasForm ?FORM .
?CLASS log:notEqualTo owl:Thing . } => { ?FORM gui:addFieldsToFormFromClass ?CLASS . } .
Use case : When the user clicks to choose among subclasses, the fields for chosen subclass are added at once, without fields for its superclass of course.
java.lang.ClassCastException: org.drools.util.ObjectHashMap cannot be cast to org.drools.reteoo.BetaMemory
at org.drools.reteoo.JoinNode.assertObject(JoinNode.java:148)
at org.drools.reteoo.AlphaNode$ObjectSinkUpdateAdapter.assertObject(AlphaNode.java:302)
at org.drools.reteoo.ObjectTypeNode.updateSink(ObjectTypeNode.java:252)
at org.drools.reteoo.AlphaNode.updateSink(AlphaNode.java:162)
at org.drools.reteoo.BetaNode.attach(BetaNode.java:209)
at org.drools.reteoo.builder.BuildUtils.attachNode(BuildUtils.java:160)
at org.drools.reteoo.builder.GroupElementBuilder$AndBuilder.build(GroupElementBuilder.java:150)
at org.drools.reteoo.builder.GroupElementBuilder.build(GroupElementBuilder.java:73)
at org.drools.reteoo.builder.ReteooRuleBuilder.addSubRule(ReteooRuleBuilder.java:153)
at org.drools.reteoo.builder.ReteooRuleBuilder.addRule(ReteooRuleBuilder.java:126)
at org.drools.reteoo.ReteooBuilder.addRule(ReteooBuilder.java:117)
at org.drools.reteoo.ReteooRuleBase.addRule(ReteooRuleBase.java:362)
at org.drools.common.AbstractRuleBase.addRule(AbstractRuleBase.java:618)
at org.drools.common.AbstractRuleBase.addPackages(AbstractRuleBase.java:500)
at org.drools.reteoo.ReteooRuleBase.addPackage(ReteooRuleBase.java:388)
at n3_project.helpers.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:296)
The text field and the focus lost listener both come from the same reason: a property value must be updated by the user.
Contributed in EulerSharp forum : "rules about rules"
N3 syntax error with EYE in rule about rules (New)
By: Jean-Marc Vanel (jmvanel) - 2009-08-20 13:17
Hi
This time it is an undoubtful error. I created a simple rule to infer RDFS properties from rules :
{
?A => ?C .
?A log:includes { ?SA ?PA ?OA } .
?C log:includes { ?SC ?PC ?OC } .
} => {
?PA a rdfs:Property .
?PC a rdfs:Property .
} .
TODO: primitive type checking
WIP:
use case 2.??? : user clicks to choose among subclasses:
pave the way to add fields for chosen subclass: assert:
?FIELD gui:addFieldsFromClass ?CLASS
TODO : use inverseProperty to create inverse triples at the instance level
DONE - For the RDFS food example, there is no more an empty GUI produced with editedClass == PreparedFood; this was because there is no properties at all. PreparedFood, however, has many subclasses. We give a choice to create and edit one of these subclasses. This reuses what is done for object properties.
eclipse update site : http://m2eclipse.sonatype.org/update/
I can debug a single test run from Maven by creating in "Debug configurations" a new configuration under "Maven build"
Found an N3 syntax for jEdit !
It is not present in the JEdit installed with Ubuntu :( .
https://jedit.svn.sourceforge.net/svnroot/jedit/jEdit/trunk/modes/n3.xml
Mail sent to the author, Jakub Roztočil (he never answered, but I could install it) .
Installation
http://www.jedit.org/users-guide/installing-modes.html
I copied the mode file here:
/home/jmv/.jedit/modes/n3.xml
Then I created the catalog XML file
% cat ~/.jedit/modes/catalog <?xml version="1.0"?> <!DOCTYPE MODES SYSTEM "catalog.dtd"> <MODES> <!-- Add lines like the following, one for each edit mode you add: --> <!-- <MODE NAME="foo" FILE="foo.xml" FILE_NAME_GLOB="*.foo" /> --> <MODE NAME="n3" FILE="n3.xml" FILE_NAME_GLOB="*.n3" /> </MODES>
In script install_packages_ubuntu.sh
, I added commands to
install jEdit mode for N3.
A panorama of the jEdit "modes" :
https://jedit.svn.sourceforge.net/svnroot/jedit/jEdit/trunk/modes/
The jEdit N3 mode has never been updated since first commit :
Revision 15630 - (view) (download) (as text) (annotate) - [select for diffs]
Added Wed Jul 1 01:50:24 2009 UTC (8 months, 3 weeks ago) by ezust
File length: 2129 byte(s)
New N3 edit mode (Jakub Roztocil # 2772966)
RDFS to OWL conversion was creating wrong OWL classes for superclasses.
Opened in Protégé 4, it looks good.
TODO - I undersand why there is still an empty GUI produced with editedClass == PreparedFood; this is because there is no properties at all. However, it works fine with the CV RDFS model. PreparedFood, however, has many subclasses. We should give a choice to create and edit one of these subclasses. This is already what is done for object properties.
svn diff --diff-cmd /usr/bin/diff -x -bw -x --unified=1 \ -r BASE \ java_projection-rules2.n3
processing (?X ?Y) log:dtlit ?Z .
implemented case when N3 Variable for ?Z was Already Met
tested with deductions/n3/ecore_owl-rules.n3
http://xml.mfd-consult.dk/foaf/explorer/?foaf=http%3A%2F%2Fjmvanel.free.fr%2Fjmv.rdf
I gave it yesterday at the last minute !
Applying rules to form generation from OWL models
The reference specification: http://xmlns.com/foaf/spec/index.rdf
http://xmlns.com/foaf/spec/#term_mbox
I came across this, that Déduction form gen. does not process well :
foaf:mbox
a owl:InverseFunctionalProperty , owl:ObjectProperty ;
rdfs:comment "A personal mailbox, ie. an Internet mailbox associated with exactly one owner, the first owner of this mailbox. This is a 'static inverse functional property', in that there is (across time and change) at most one individual that ever has any particular value for foaf:mbox."^^xsd:string ;
rdfs:domain foaf:Agent ;
rdfs:isDefinedBy "http://xmlns.com/foaf/0.1/"^^xsd:anyURI ;
rdfs:label "personal mailbox"^^xsd:string ;
rdfs:range owl:Thing .
The explanation is simply that "personal mailbox" is an RDF resource, and not a string, e.g. :
<foaf:mbox rdf:resource="mailto:wkearney99@hotmail.com" />
What is lacking in the FOAF specification is the information that this RDF
resource is a mailto:
URL (to be able to assist user input). So we
should somehow enforce in the GUI the constraint that a the URL begins with
mailto:
.
The other interesting thing is that mbox is an Inverse Functional Property. The consequence for the GUI is that, given the Agent being the domain of the property, and in the absence of an existing mbox, the mbox is necessarily a new RDF resource.
http://marbles.sourceforge.net/ Marbles is a server-side application that formats Semantic Web content for XHTML clients using Fresnel lenses and formats. Colored dots are used to correlate the origin of displayed data with a list of data sources, hence the name.
graph transformation and graph grammars
http://projects.semwebcentral.org/projects/fuxi/
A community written in Java ! :)
Eclipse [3] is an open platform for tool integration managed by an open community written in Java [19].
_:sk_FORM_1 <http://jmvanel.free.fr/ontology/java_projection.owl#projection>
_:sk_JPANEL_FORM_4 .
we have this non-sense:
_:sk_FORM_1 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type>
_:onProperty3 . #R
One must be able to generate readable diagrams, and that in itself is a big challenge. There is GraphViz occupying this territory; but what it does without specific instructions it is not beautiful.
GraphViz is already added to EulerGUI. But I do not give specific instructions, just the nodes and links
For half a dozen nodes and links, things are going well ... But beyond :-( .
This is a nice use case for rule based processing; for a long time I have been running around this problem. My boss at MW was also interested in that. Now I am better prepared because I got like a training with the generation of forms.
Until today I had not thought of generating instructions for GraphViz. The least I can do is :
Also it is very important to connect specific diagram rules with pre-canned queries like:
Notes:
if there is a form for some class C, add the values of instances of C to this form,
A concurrent to N3, and JSON: http://www.yaml.org/
TODO :
DONE
Instantiator.instantiate( List<Triple> triples)
was
incremental == false
( tested also with old architecture )
Downloaded Firefox Minefield from:
http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/
Conversation avec Alain Couder, PDG de Solid Information Technology - 14:56 - May 30, 2006
http://video.google.com/videoplay?docid=-7995288971119025129
The classic Canadian documentary Manufacturing Consent based on the Noam Chomsky/Edward Herman book by the same name. Explores the the propaganda model of the media.
http://video.google.com/videoplay?docid=-5631882395226827730
intelligent modularity: example of graphic file formats; for e.g. OCR software one wants to seamlessly integrate any graphic file format ( which not the case of many graphic programs).
TODO EulerGUI: give (facultative) name to projects
An assessment of RDF/OWL modelling
http://www.hpl.hp.com/techreports/2005/HPL-2005-189.pdf
http://etutorials.org/Misc/Practical+resource+description+framework+rdf
http://www.inf.unibz.it/~franconi/dl/course/
Good explanation of why personName has also rsfs:domain Animal :
http://esw.w3.org/mt/esw/archives/000036.html
A Semantic Web Primer for Object-Oriented Software Developers : http://www.w3.org/TR/sw-oosd-primer/
http://www.xformsinstitute.com/
XForms for HTML Authors - Steven Pemberton
XForms and Declarative Applications, by Steven Pemberton
http://www.w3.org/2009/Talks/03-06-steven-moz/
The second part of the essence of XForms is that the form controls, rather than expressing how they should look (radio buttons, menu, etc), express their intent ("this control selects one value from a list").
Bind an XPath nodeset or ref to "facets" : type, constraint, required, relevant, calculate
Then an XPath is refered to by a Form Control
Ten XML Schemas you should know
https://www.ibm.com/developerworks/xml/library/x-schematips/
Isaviz: /usr/share/fonts/X11/75dpi/
http://www.learnprolognow.org/
Resource for linking in the web of data http://sameas.org
Instead of Drools, JCHR could be used for inferring forms in Déductions generated applications. But there no examples with Java user classes.
Now the events are correctly passed to the rules storing it in the KB, at least for the first event (when no existing value for this property about this resource).
TODO:
_:sk_JTEXT_FIELD_8 <http://java.sun.com/predicate#text> 357951 .
x11vnc -usepw -grabalways -scale 2/3 -scale_cursor 1
Thanks to Chris Muller for this:
http://www.sdtimes.com/blog/post/2009/07/16/The-End-of-Sun.aspx
The use case:
WIP: rules are not applied; I asked for help to the Fuxi list
The initial output is:
emacs('/tmp/monkey.pl').
testcase(1).
ERROR: not/1: Undefined procedure: find_constraint/2
To adapt to SWI, need to change line 23 to :
not Fact :- find_chr_constraint( Fact ), !, fail.
Then the output is :
?- testcase(1).
Jump onto the floor
Walk to 4-3 carrying blanket
Drop blanket
Grab ladder
Move ladder to 9-9
Drop ladder
Climb onto ladder
Grab bananas
CONGRATULATIONS the goals are satisfied
phys_object(blanket, 4-3, light, floor, _G158961, _G158962, _G158963)
phys_object(bananas, 9-9, light, nothing, _G158783, _G158784, ok)
phys_object(ladder, 9-9, light, floor, _G158902, high, _G158904)
phys_object(garbage_can, 3-5, light, floor, _G159037, low, _G159039)
phys_object(couch, 7-7, heavy, floor, _G158843, low, _G158845)
monkey(9-9, ladder, bananas)
goal(satisfied, on, floor, _G159724, _G159725)
goal(satisfied, at, nothing, _G159611, 4-3)
goal(satisfied, holds, ladder, _G159446, _G159447)
goal(satisfied, at, ladder, _G159298, 9-9)
goal(satisfied, on, ladder, _G161737, _G161738)
goal(satisfied, holds, bananas, _G159144, _G159145)
goal(satisfied, holds, nothing, _G161294, _G161295)
goal(satisfied, holds, nothing, _G160244, _G160245)
found
true
Updated a Déduction+and+EulerGUI+Blog
Connecting Focus lost events.
Hosted XML Database Solution ? We provide supported hosting of eXist XML Database!
http://www.webcomposite.com/host.html
http://www.webont.org/owled/2009/
Important dates
July 24th 2009 Titles and Abstract due
Subscribe to the iCal calendar.
July 31st 2009 Paper Submissions due
September 1st 2009 Paper acceptances sent out
October 9th 2009 Camera ready versions of papers due
October 23-24th 2009 (tentative) OWLED 2009 Workshop
http://en.wikipedia.org/wiki/XRX_%28web_application_architecture%29
http://www.agencexml.com/xsltforms/xsltforms/xsltforms.xsl
Méthode B : description de la méthode B
Krextor
http://www.semanticscripting.org/SFSW2009/short_2.pdf
http://en.wikipedia.org/wiki/Graph_rewriting
I have to be here:
http://semanticweb.org/wiki/Tools
???? TODO
http://www.mindswap.org/~katz/pychinko/
Implemented something for "Duplicated triples with Drools engine"
The "Person" test passes , but in some cases it might remove some correct results.
Anyway this a major improvement; it will make thingd easzier for Déductions new architecture.
Had a very quick look at CALO, a US defense project, that aims at a:
Cognitive Assistant that Learns and Organizes
Although neither application (under Windows only) nor source is available, some ideas could be extracted.
Anyway, quite similar to my "good servant" concept.
In fact, there is an Open source project : SPARK (the SRI Procedural Agent Realization Kit )
They have lots of tools:
http://www.tonesproject.org/index.php?option=com_wrapper&Itemid=84
For me, the most interesting seems:
The Ontology Modularization tool implemented an algorithm for extracting modules from OWL ontologies.
They also have an ontology repository (integrated in Protégé 4):
http://owl.cs.manchester.ac.uk/repository/browser
http://www.w3.org/2007/OWL/wiki/New_Features_and_Rationale
For OWL 1, here is a clean implementation by Jos de Roo in the Euler project :
http://eulersharp.svn.sf.net/viewvc/eulersharp/trunk/2003/03swap/eye-owl2.html
Each OWL feature is implemented in a separated file, generally with a single N3 implication. This allows to add to the rule base just the needed features. This makes for cleaner and more efficient rule bases.
In Déduction form generation I should remove rpo.n3 and use these N3 rules.
I attack to something I left out for months:
Duplicated triples with Drools engine
and it's annoying to write the output on the fly ...
To add a condition in the generated Drools code, I must have treated all the triples in the consequence, and is not convenient with my event based API.
Basically I must assert the consequence only if that if it is not already true.
It will be better, but not yet perfect.
Pave the way by slitting the output in 4 string buffers.
ftp://releases.mozilla.org/ubuntu/dists/jaunty/
http://www.xbrl.org/ XBRL stands for eXtensible Business Reporting Language.
http://jade.tilab.com/
http://fr.wikipedia.org/wiki/Système_multi-agents
http://en.wikipedia.org/wiki/Multi-agent_system
Thanks to Chris. Muller for this :
http://vikashazrati.wordpress.com/2008/01/06/do-you-follow-agile-you-are-fired/
http://www.defeasible.org/ruleml2009/who
I'm not the only one thinking about largescale software reuse! ( see Intelligent Modularity in my Déductions project ) .
Cristina Videira Lopes, Professor at University of California, Irvine
I just added this to the "Missing features" list in EulerGUI Manual:
- connect to Sesame database; this includes extracting the relevant triples from the database into the in-memory inference engines; both in EulerGUI and in the generated application.
But I realize that analysing a rule base to find a low volume extraction (from the most specific antecedents) from an RDF database is not an easy task.
A scenario both easy to implement, and that makes sense from a user point of view, is to add to the facts made available to the inference engine the result of a user SPARQL query from a SPARQL database. Here are the databases I selected:
CommonKads course slides:
http://www.commonkads.uva.nl/INFO/course-slides/
There are 2 way of translating the N3 result into Java :
Protégé 4:
http://www.cs.man.ac.uk/~iannonel/eclipseSetup/eclipseSetupMain.html
Web Protégé:
http://protegewiki.stanford.edu/index.php/WebProtegeDevelopersGuide
Failed trials:
Alas !!!!!
The binary for Linux is just for 386 architecture, not for 64bit AMD :( :
Exception in thread "main" java.lang.UnsatisfiedLinkError: /home/jmv/apps/gwt-linux-1.5.3/libswt-pi-gtk-3235.so: /home/jmv/apps/gwt-linux-1.5.3/libswt-pi-gtk-3235.so: wrong ELF class: ELFCLASS32 (Possible cause: architecture word width mismatch)
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1674)
at java.lang.Runtime.load0(Runtime.java:770)
at java.lang.System.load(System.java:1005)
at org.eclipse.swt.internal.Library.loadLibrary(Library.java:132)
at org.eclipse.swt.internal.gtk.OS.<clinit>(OS.java:22)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:63)
at org.eclipse.swt.internal.Converter.wcsToMbcs(Converter.java:54)
at org.eclipse.swt.widgets.Display.<clinit>(Display.java:126)
at com.google.gwt.dev.GWTShell.<clinit>(GWTShell.java:301)
Could not find the main class: com.google.gwt.dev.GWTShell. Program will exit.
To get the right version for Protégé, I typed this:
svn checkout http://google-web-toolkit.googlecode.com/svn/releases/1.5/
Building GWT from svn source:
http://allahbaksh.blogspot.com/2009/02/building-gwt-from-svn-source.html
That was not the right way; in fact there is no 64 bits version for GWT ! The explaination:
http://groups.google.com/group/Google-Web-Toolkit/browse_thread/thread/b166e320cd3b42b2/
Enf of Failed trials
In fact, instead of compiling the C and C++ for 64 bits, I need to use a 32 bits JVM :( .
I also need to copy the 3 files of the "metaproject" :
cp ~/apps/Protege_3.4.1/examples/server/* \
~/src/web-protege_trunk/tomcat/webapps/ROOT/projects/metaproject/
And then it works !!!!!!!!!
Example: portlet definition file, project file (.pprj)
In order to unify the GUI models for Protégé 4 Swing GUI and Protégé 3 Web, I should come with an architecture based on rules and a unified model for Swing and GWT (Google Web Toolkit), including the callbacks.
This would :
To ease the porting of Protégé 3 plugins to Protégé 4, maybe also an ontology based approach could be appropriate.
Local files project:
between 192 and 240
drools compile Time: 4034 ms; fireAllRules: 132 ms
deductions/n3/test_person.n3p
100% Web project:
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples/deductions_person.n3p
drools compile Time: 1311 ms; fireAllRules: 99 ms
networking 120 msec
reasoning 280 msec
networking 116 msec
reasoning 252 msec
drools compile Time: 3558 ms; fireAllRules: 257 ms
drools compile Time: 1243 ms; fireAllRules: 74 ms
drools compile Time: 3742 ms; fireAllRules: 121 ms
sudo dpkg --install amaya_wx-11.2-pre4-1_amd64.deb
Sindice is a nice Semantic Web search engine. It is different from Swoogle in that it searches and shows fact triples, not ontology documents. There is a nice "advanced" query where one can enter e.g.:
* <http://www.w3.org/2006/vcard/ns#title> 'research'
I learned much new stuff:
Met many people nice people:
Working with Luc on UMLT input in EulerGUI.
I should take time to read Adam Pease's publications:
http://www.adampease.org/professional/
This web interface, from a NL sentence, marks it with RDF statements for the words it recognized.
Mostly Proper Nouns are recognized.
This can be complementary to Attempto.
If I had time, I'd make an account and play with Open Mind Common Sense :
http://openmind.media.mit.edu/
While preparing today's seminar, I read about logic:
http://en.wikipedia.org/wiki/Decidability_%28logic%29
http://en.wikipedia.org/wiki/Signature_%28logic%29
http://en.wikipedia.org/wiki/Type_theory
Mathematical logic for computer science by Mordechai Ben-Ari
Updated
http://deductions.svn.sourceforge.net/viewvc/deductions/html/unification.html
added "Calling user Java code"
http://developers.sun.com/learning/javaoneonline/j1online.jsp?track=javase&yr=2009
Recovered excellent presentation by Adam Pease "tutorial - Introduction to Ontology / SUMO"
http://ontolog.cim3.net/cgi-bin/wiki.pl?Tutorial_2003-05-29
(there is also an Audio Stream).
http://www.semantic-conference.com/
http://www.ow2.org/
The OW2 Consortium is an open source community committed to making available to everyone the best and most reliable middleware technology.
http://www.shirky.com/writings/ontology_overrated.html
Ontology is Overrated: Categories, Links, and Tags
http://protege.cim3.net/cgi-bin/wiki.pl?SWRLTab
http://protege.cim3.net/file/pub/files/SWRL/SWRLTalkProtegeShortCourse2006.pdf
http://t37.net/le-dernier-sprint-meeting-dhitler-chef-de-produits-agile.html
http://semtech2009.com/session/1660/
A Programmer's Introduction to Pellet: How to Build Ontology-based Semantic Applications
Evren Sirin
I met a software company who does about the same stuff than I do.
They use SWRL.
The International Association for Ontology and its Applications
http://www.iaoa.org/index.html
my seminar on software engineering, rules, and ontologies, Paris 19:00,
http://jmvanel.free.fr/seminaires/seminaires_gratuits.html
Was:
Working on my next seminar on software engineering rules engines, and ontologies.
I didn't realize that Protégé is accepting N3 files ( I kept converting my files to RDF using CWM ).
Now downloading build 122 "release candidate".
In N3 rules, it should be possible to add Java or Drools code on the RHS.
This would be a good feature to reassure new users, although in general mixing languages is a bad thing.
Search Swoogle for
commerce order item category
Open this in Protégé:
http://rhizomik.net/ontologies/2005/07/FrameNet_1.1.owl
Obviously this OWL file is not suitable.
Here is a useful resource :
http://www-ksl.stanford.edu/projects/DAML/UNSPSC.daml
I rapidly created my first FOAF description jmv.rdf with foaf-a-matic by Leigh Dodds.
Seen by RDF Explorer, here is my FOAF:
http://xml.mfd-consult.dk/foaf/explorer/?foaf=http%3A%2F%2Fjmvanel.free.fr%2Fjmv.rdf
Also I registered it here :
http://swordfish.rdfweb.org/rweb/who?mbox=mailto:timbl@w3.org
http://swordfish.rdfweb.org/rweb/who?mbox=mailto:jeanmarc.vanel@gmail.com
The 6th Annual European Semantic Web Conference (ESWC2009)
SMILA - SeMantic Information Logistics Architecture (eclipse)
Knowledge_Interchange_Format (KIF)
Work in progress on testing new generated GUI ( error corrected in rdf:type )
Now we get at real Drools problem:
org.drools.runtime.rule.ConsequenceException: org.drools.FactException:
Retract error: handle not found for object:
<http://test#id1> <http://jmvanel.free.fr/ontology/examples/person#name> "Lennon" .
. Is it in the working memory?
3.3.7.1. Sequential Mode
I'm using a rule base with AssertBehaviour.EQUALITY .
I want to retract an object in the RHS.
I don't have a handle, but I have an object that is equal() to the one I want to retract.
How can I do ?
sotty on the IRC tried this :
rule "TestEquality"
when
Double(this == 37.0)
then
System.out.println("I am here");
Double d = new Double(37.0);
Object handle = drools.getWorkingMemory().getFactHandle(d);
System.out.println(""+handle);
end
The remedy is here
http://ubuntuforums.org/showthread.php?p=2742327
It was necessary to do :
lsof | grep pcm
# stop evince and amarok
sudo /etc/init.d/alsa-utils restart
Open Futon and browse your Couchdb database: [WWW] http://localhost:5984/_utils/
Read more about Futon in Getting started with Futon.
Testing EulerGUI with WordNet hyponyms
#ENDS 146317 msec
Where can I download the "Trove" Sourceforge Software classification?
Is there any standard way (namespace, mapping of concepts, ...) of using the WordNet database in RDF statements?
I first tried the raw sentence:
./ape.exe -solo paraphrase -guess -text "A card is a means of payment ."
There is a card X1.
The card X1 is a n:means of p:payment .
Ones sees that this is wrongly understood, as p: stands for proper noun. Adding
% ./ape.exe -solo paraphrase -guess -text "A card is a means of a payment ."
There is a card X1.
The card X1 is a n:means of a n:payment .
% ./ape.exe -solo paraphrase -guess -text "Every card is a means of a payment ."
If there is a card X1 then the card X1 is a n:means of a n:payment .
Alas for OWL translation, "Adjectives not supported", for example in:
./ape.exe -cowlfsspp -guess -text 'A customer is trusted .'
Open this page: http://attempto.ifi.uzh.ch/ape/
If you push "show menu" and activate "OWL FSS" , from this :
p:EulerGUI is an n:IDE.
you get:
Ontology(
http://attempto.ifi.uzh.ch/ontologies/owlswrl/test
ClassAssertion(
Class(:IDE)
Individual(:EulerGUI)
)
)
From this pages you have many examples to paste: ACE in a Nutshell
Microsoft modeling strategy: Work in progress
http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1333523,00.html
http://protege.stanford.edu/conference/2009/index.html
http://is.tm.tue.nl/staff/pvgorp/events/grabats2009/
http://jazoon.com/ - Jazoon – Where Java People Meet
IWOCE2009 - Open Component Ecosystems
http://jmvanel.free.fr/seminaires/seminaires_gratuits.htm
http://groups.google.com/group/fr.comp.lang.java/browse_thread/thread/20505a1176840415#
http://groups.google.com/group/fr.comp.ia/browse_thread/thread/259a7af4b2859632#
http://groups.google.com/group/fr.comp.developpement/browse_thread/thread/e925d96419372249#
is making invitations for his seminars in Paris on ontologybased development
http://jmvanel.free.fr/seminaires/seminaires_gratuits.html
Was:
Jean-Marc is seeking what business can be done with his Semantic Web + rule based programming techniques
http://semantic-conference.com/2008/ataglance/index.html
the Sesame backend for Protege: http://protege.stanford.edu/plugins/rdfs-db/ (old stuff)
http://www.nabble.com/SPARQL-queries-and-Protege-4--td20109202.html
http://www.cs.man.ac.uk/~iannonel/oppl/documentation.html OWL transform
http://blip.tv/file/1949416/ Drop ACID and think about data Bob Ippolito - Pycon 2009
BASE, BigTable, Dynamo(), Cassandra, Tokyo Cabinet, Redis, CacheDB, MongoDB(C++), MonetDB(bad), LucidDB(?), Vertica(C Store), FastBit, Bloom Filter,
graph databases ?
Reading
http://code.google.com/docreader/#p=google-guice&s=google-guice&t=Motivation
https://sourceforge.net/project/admin/group_trove.php
Lots of interesting stuff with these search words, including my home page :) .
I used some HTML generator for images, and the HTML was not correct, so used the good old tidy :
tidy -asxhtml index.html > index.html
Note that jtidy did installed in Ubuntu didn't work.
At last I found how to do it:
http://maven.apache.org/project-faq.html
http://maven.apache.org/guides/mini/guide-central-repository-upload.html
ntpdate definitely needs an argument:
sudo ntpdate ntp.ubuntu.com
Registered for EulerGUI to be here :
http://java-source.net/open-source/rss-rdf-tools
EulerGUI is already present here:
http://esw.w3.org/topic/ConverterToRdf
and in numerous mailing lists and newsgroups.
http://www.kwoksys.com/wiki/index.php?title=Software_Module
Yahoo! Semantic Web in Production
David Beckett - Technical Yahoo
http://www.dajobe.org/talks/200805-semtech/Yahoo%20Semantic%20Web%20in%20Production.pdf
PHP rules: http://www.swindle.net/rules/ - http://www.billbreitmayer.com/drupal/node/155
It's interesting that Amabra / Topaz uses Trac for its bugs management !
Sesame, Mulgara, Redland, ...
http://java-source.net/open-source/groupware
Language | Comment | |
libresource | Java | |
PHPGroupware | PHP |
http://java-source.net/open-source/issue-trackers
Language | Comment | |
Python | looks good, many features and users | |
? | supposedly Open Source, but looks like a closedsource software | |
Ruby | Written using Ruby on Rails framework; no task management and doc. management | |
mantis | PHP | bugs only, but adding plugins is possible |
bugzilla | PHP | extensive search capabilities; not very ergonomic, no tasks |
PHP | apparently no documentation | |
scarab | Java | from the same forge as ArgoUML |
Group comp . lang . java . programmer
Oracle bought Sun and Java:
http://www.oracle.com/us/corporate/press/018363
It would not difficult to to write a rule set to populate the current class Project from a N3 document.: instantiate Project, instantiate the sources Map<String, N3Source>, add the URI to N3Source, etc.
A new file extension is needed, to avoid the confusion witth ordinary N3 sources. Or maybe just *.project.n3 .
Currently we have :
Model+App.Spec.--> Conceptual GUI--> Swing GUI --> instantiation
We want to migrate to:
Model+App.Spec. --> Conceptual GUI--> Detailed Abstract GUI--> Swing GUI --> instantiation
This may add an exessive CPU time. There should be a way to "compile" the rule base given that we are not interested in intermediary results, but just by final Java objects.
Anyway, what we will have is many correspondences like:
agui:Panel ---> java:JPanel
For one-to-one correspondences like this, there can be declarations like:
agui:Panel aj:correspondence java:JPanel .
plus a rule at instance level:
{ ?ABSTRACT_CLASS aj:correspondence ?JAVA_CLASS .
?ABSTRACT_INSTANCE a ?ABSTRACT_CLASS .
} => {
?JAVA_INSTANCE a ?JAVA_CLASS .
# keep track of the translation for further rules:
?ABSTRACT_INSTANCE aj:translation ?JAVA_INSTANCE .
} .
and similar rules at instance level for properties of the translated objects:
{ ?ABSTRACT_PROPERTY aj:property_correspondence ?JAVA_PROPERTY .Lots of rules for a one-to-one correspondence ! An alternative is to just reuse the existing objects, and simply annotate them as Java objects.
?ABSTRACT_INSTANCE ?ABSTRACT_PROPERTY ?VALUE .
?ABSTRACT_PROPERTY a owl:DatatypeProperty .
?ABSTRACT_INSTANCE aj:translation ?JAVA_INSTANCE .
} => {
?JAVA_INSTANCE ?JAVA_PROPERTY ?VALUE .
} .
{ ?ABSTRACT_PROPERTY aj:property_correspondence ?JAVA_PROPERTY .
?ABSTRACT_INSTANCE ?ABSTRACT_PROPERTY ?ABSTRACT_VALUE .
?ABSTRACT_PROPERTY a owl:ObjectProperty .
?ABSTRACT_INSTANCE aj:translation ?JAVA_INSTANCE .
?ABSTRACT_VALUE aj:translation ?JAVA_VALUE .
} => {
?JAVA_INSTANCE ?JAVA_PROPERTY ?JAVA_VALUE .
} .
A rule at instance level:
{ ?ABSTRACT_CLASS aj:correspondence ?JAVA_CLASS .
?ABSTRACT_INSTANCE a ?ABSTRACT_CLASS .
} => {
?ABSTRACT_INSTANCE a ?JAVA_CLASS .
} .
Similar rules at instance level for properties of the translated objects; they are also simpler:
{ ?ABSTRACT_PROPERTY aj:property_correspondence ?JAVA_PROPERTY .
?ABSTRACT_INSTANCE ?ABSTRACT_PROPERTY ?VALUE .
} => {
?ABSTRACT_INSTANCE ?JAVA_PROPERTY ?VALUE .
} .
http://www.student.dtu.dk/~s042078/magicrescue/manpage.html
TODO
http://jmvanel.free.fr/notes-informatiques.html#classeur-notes
RuleML Challenge
http://www.defeasible.org/ruleml2009/cfp.txt
Former LinkeIn header:
Jean-Marc extends the Deductions frameworks for GUI generation to inheritance and adding pointers to a selection of objects.
I think about doing a command-line User Interface (CL-UI) generator alongside the GUI generator. This will generalize the design, and make it easier to record user actions and explore intelligent behaviors.
After writing "Summary for AI researchers", and exchanging mails with David Holz, I'm ready to design the exchanges between GUI and KB . There are 2 issues:
Point 2 is not a problem, although there may be ways more elegant than others.
The Java Swing architecture hopefully allows to catch events in a generic way. I should ask to the Abbot list.Point 3 is more architectural and difficult for me.
I want the KB (Knowledge Base) to be dynamic and persistent, it's not only one inference pass and goodbye. It is necessary to infer a GUI, which is dynamic.
One question is "how to manage the correspondance between real GUI objects and their counterpart in the KB" ? But I'm not sure whether I really need to manage the correspondance. Should I need that, the current instantiation architecture involving JavaScript variables whose name is the N3 Id makes the bidirectional correspondance. However the instantiation architecture involving JavaScript has one inconvenient; the variables are here forever when not explicitely disallocated. This can entail memory consumption; but readjusting the starting number for creating Id's will overwrite some of them. The user data, on the other hand, lives only in the KB. I added 2 primitives in N3 to remove and update a triple. Currently I only use the inference engine to generate forms (at runtime), but the actions after user events to update the KB are done in Java, but now that I can create a form from specification in milliseconds, I'll do as much as I can in rules. Currently, for each user actions involving creation of new GUI items, I hack a fresh Working Memory with the permanent facts + the user data but no GUI items at all. The Java objects and field assignments are done in a single batch just after rules firing.?X :createFormFromResource ?RESOURCEwill trigger the whole form generation inference for the given resource (see form-rules.n3) . And if this statement is retracted, the whole object graph representing the form in the KB is also removed. Since it started from a given Resource Id, no other GUI objects will be removed. PENDING: It would be nice if the KB could work directly on the real GUI objects. It should be possible since, after all, the KB is also in Java. A possibility is make hybrid obects implementing Triple and subclassing the Swing classes.
Trying the music in command line:
http://wiki.xmms2.xmms.se/wiki/Using_the_application
http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&discussionID=3015442&gid=134407&trk=EML_anet_qa_ttle-cDhOon0JumNFomgJt7dBpSBA
http://www.w3.org/TR/rdf-sparql-protocol/#intro
http://cmap.ihmc.us/conceptmap.html
http://www.cs.waikato.ac.nz/~ml/weka/index.html
http://www.gate.ac.uk/conferences/fig09/
http://www.lemonde.fr/technologies/article/2009/04/24/l-internet-des-objets-n-est-pas-celui-que-vous-croyez_1185201_651865.html#ens_id=1150782
http://swig.xmlhack.com/
http://esw.w3.org/topic/FrontPage
http://www.xml.com/pub/a/2004/09/01/tr.html Converting XML to RDF
Ask to be added here : http://planetrdf.com/guide/
Add EulerGUI in :
http://esw.w3.org/topic/ConverterToRdf : UML, eCore
Semantic Web Authoring Tools
Dave Beckett's Resource Description Framework (RDF) Resource Guide : http://planetrdf.com/guide/
10-awesome-things-built-on-the-facebook-api
Details on the Jena parser:
http://www.java2s.com/Open-Source/Java-Document/RSS-RDF/Jena-2.5.5/CatalogJena-2.5.5.htm
( http://www.java2s.com/ is a interesting site )
I have the impression that, after downloading to target/checkout/eulergui, for some reason it doesn't execute goal 'deploy' here .
[INFO] [release:perform]
[INFO] Checking out the project to perform the release ...
[INFO] Executing: svn --non-interactive checkout https://eulergui.svn.sourceforge.net/svnroot/eulergui/tags/eulergui-1.1 checkout
[INFO] Working directory: /home/jmv/src/eulergui_test/eulergui/trunk/eulergui/target
[INFO] Executing goals 'deploy'...
[INFO] Executing: mvn deploy --no-plugin-updates -DperformRelease=true -f pom.xml
[INFO] Scanning for projects...
[INFO] ------------------------------------------------------------------------
[INFO] Building Maven Default Project
[INFO] task-segment: [deploy]
[INFO] ------------------------------------------------------------------------
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD ERROR
[INFO] ------------------------------------------------------------------------
[INFO] Cannot execute mojo: resources. It requires a project with an existing pom.xml, but the build is not using one.
Downloaded http://sourceforge.net/projects/weka/
http://abbot.sourceforge.net/doc/overview.shtml
serach : "ergonomic UML editor"
I wrote the first shot of a BNF grammar:
This a nice way to show how rule based programming can be applied.
Also I'd like to create command-line User Interfaces.
Next thing on my plate, integrate Sesame or OWLIM as a storage back-end, with management of the working memory extracted from the RDF store.
Reading about new Sesame 3.0 alpha1
http://www.devx.com/semantic/Article/40987
I started the 3.0 server, and the command-line console.
> connect http://localhost:8080/ .
Disconnecting from /tmp/sesame-5599
Connected to http://localhost:8080/
Then I used the 2.0 documentation about the console:
http://www.openrdf.org/doc/sesame2/users/ch07.html
Then I created a repository with RDFS and datatype inferencing :
> create native-rdfs-dt .
Please specify values for the following variables:
Repository ID [native-rdfs-dt]:
Title [Native store with RDF Schema and direct type inferencing]:
Triple indexes [spoc,posc]:
Repository created
> open native-rdfs-dt .
Opened repository 'native-rdfs-dt'
native-rdfs-dt> load http://spypixel.com/2006/tap/tap.xmlns.com/tap-food-schema.rdf .
Loading data...
Data has been added to the repository (1455 ms)
Now I can send SPARQL queries:
native-rdfs-dt> sparql
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?X WHERE {
?X rdfs:subClassOf <http://tap.xmlns.com/data/NutFood> . }
.
Evaluating query...
+-----------------------------------------------------------------------------+
| X |
+-----------------------------------------------------------------------------+
| <http://tap.xmlns.com/data/AlmondNut> |
| <http://tap.xmlns.com/data/NutFood> |
| <http://tap.xmlns.com/data/CashewNut> |
| <http://tap.xmlns.com/data/HazelnutNut> |
| <http://tap.xmlns.com/data/MacadamiaNut> |
| <http://tap.xmlns.com/data/PecanNut> |
| <http://tap.xmlns.com/data/WalnutNut> |
+-----------------------------------------------------------------------------+
7 result(s) (121 ms)
I'm writing a rule base to convert eclipse eCore models to OWL; this works much like RDFS to OWL and UML to OWL . In the test input file, I have this:
:id616991384 ecore:name "Book"^^ecore:EString .
In the rule, I'm matching this in the ancedent :
?ATTRIBUTE ecore:name ?NAME .
and I currently have this in the consequent:
?PROPERTY rdfs:label ?NAME .
but what I want is a plain N3 String , not an ecore:EString .
But I don't know how to do that in a rule .
http://www.aaai.org/Library/AAAI/aaai08contents.php
This page looks just like an Web page, but look at the page source: it's OWL !
http://sw.opencyc.org/2008/06/10/concept/en/Game
Beside generating from models, Déduction can bring rule-based programming to existing applications, by wrapping the Drools rule engine within Semantic Web languages. Many other use cases are envisioned, see below "vision".
Seminar " computer specialist "
Themes to add to current presentation: architecture.odp
Just download Twinkle , choose dbpedia.org in "Remote services" pulldown menu on the left, and paste the following SPARQL query :
PREFIX dbpedia: <http://dbpedia.org/resource/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
SELECT ?pname ?v
WHERE {
dbpedia:Buddy_Guy ?p ?v .
?p rdfs:label ?pname .
}
Note that CONSTRUCT queries seem to bring empty results.
Links:
http://jena.sourceforge.net/ARQ/Tutorial/
http://wiki.dbpedia.org/OnlineAccess?v=9ug
http://esw.w3.org/topic/SweoIG/TaskForces/CommunityProjects/LinkingOpenData
Tried to install Morla RDF, but that doesn't compile on KUbuntu :( . Sent a mail to the list.
It would not be difficult at all to integrate ACE in EulerGUI :
APE is available under the LGPL license, and it can also be used through a REST webservice. For example, an OWL ontology that corresponds to the ACE text
``Every man is a human.''
is given by the URL
http://attempto.ifi.uzh.ch/ws/ape/apews.perl?text=Every+man+is+a+human.&solo=owlrdf
More details here:
http://attempto.ifi.uzh.ch/site/docs/writing_owl_in_ace.html
Also:
AceWiki: A Natural and Expressive Semantic Wiki
The slides presented at our last TAO Industrial Workshop that took place at ATOS, Paris La Défense on the 27th of January 2009.
All the video demos will be soon available on the Tao project website : http://www.tao-project.eu and you will also be able to watch the presentations on the videolectures.net website.
In RDF class membership (rdfs:type) is just another property .
What are the advantages of ontologies over UML?
Public repository for reusable Object Oriented models ? (started by me)
http://groups.google.com/group/comp.object/browse_thread/thread/84e768f67fa3304d#
What are the advantages of ontologies over UML? ( on LinkedIn )
Resizable frames in JavaScript
Thanks to Pieter Van Gorp, I rediscovered the pUML list:
Model Driven Engineering on http://planet-mde.org
https://sourceforge.net/mailarchive/forum.php?forum_name=deductions-user
ssh -t jmvanel,eulergui@shell.sourceforge.net create
OWL definition in RDFS : http://www.w3.org/2002/07/owl
Having the OWL properties plus the RDFS properties in the same KB apparently is the reason for infinite loops.
It's too much trouble to filter out the unwanted stuff; it's really time for implementing the N3 processor pipes.
add rdfs_owl-rules.n3 for rdfs to owl conversion
(similar to UML to owl conversion),
plus a test project
By chance, is there a public repository for reusable Drools rulesets and models ?
By chance, is there a public repository for reusable eCore models ?
Published on news://comp.object
Is there a public repository for reusable Object Oriented odels ?
For years I couldn't find one.
I think one of the reasons for non-existence is lack of reusable exchange format.
XMI is pretty variable and poorly formalized.
UML is too complex, also unstable, and the strictly OO part (Class diagrams) is mixed with the rest of the huge 250 metaclasses metamodel.
eCore could be a good exchange format, but it's rather limited to the eclipse - Java world.
It seems that the best exchange format for business model is OWL - Web Ontology Language ( http://www.w3.org/2004/OWL/ ).
OWL has classes and properties . It has no methods and interfaces, but for that it is quite possible to reuse exactly the UML metamodel.
An advantage of OWL (and more generally Description Logics frameworks) is that a class defined by its properties (e.g. an UnemployedPerson is a Person that has no Job) provides a more natural way of modelizing a domain than classic OO, where you have to use delegation for the situation when a Person becomes UnemployedPerson.
And, contrary to classic OO models, there are sites for searching and hosting OWL and RDFS ontologies on the Web :
But maybe there are projects and sites I'm not aware for OO models ?
Searched:
owl rdfs models public repository
owl rdfs search engine
Working on the UML--OWL rules.
We have a projet ( http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/pom.xml ) using a parser generator , for which we have extra Java sources, not for building with the application.
We generate the eclipse configuration with Maven, but I found no way to specify these extra Java sources so that they appear in the eclipse configuration.
When searching for "RDF OWL Drools", I saw Mark Protor's blog on declarative-relational-programming , also speaking of RDF :
http://blog.athico.com/2007/06/declarative-relational-programming.html
The Timeline Ontology
http://motools.sourceforge.net/timeline/timeline.html
cf my post on news eclipse.tools.emf
My answer to Ed Merks:
Ed Merks wrote:
> Jean-Marc,
> Comments below.
> Jean-Marc Vanel wrote:
>> Hi all
>>
>> I have written a translator from XMI to N3 ( a variety of RDF):
>> http://eulergui.sourceforge.net/tmp/XMIToN3Converter.java
>>
>> This works ,I have written a generic traversal following EObject and
>> EClass objects. There remains still a problem. What I do is completely
>> generic, I use only the eCore API. But to read file UML (or another
>> specific data) I do not know if one can avoid a call like this :
>>
>> resourceSet.getPackageRegistry () .put ( UMLPackage.eNS_URI,
>> UMLPackage.eINSTANCE );
>> So I get a runtime dependency that I would like to avoid.
> When running in an OSGi environment, it's not necessary because the
> plugin.xml registrations do this for you.
Good to know, but currently I'm not .
...
>> In other words I need a EPackage able to instanciate for any URI. Or
>> another way to read an XMI ...
> I'm not sure if this option helps. In general, if you want to build an
> instance of a model, you really need the model to be registered. And
> some models need special resource implementations to handle them
> correctly, in which case those need to be registered as well.
If you saw my code, you would see that I'm traversing the UML model just like it were a plain eCore model (and by the way, I'm as much critic as you regarding UML, I heard you in Paris this winter).
So, what I'm asking is : is there a way to instantiate plain eCore objects from an XMI, disregarding the actual package ?
From what you answered I'm afraid that the answer is no, and that my use case was never considered.
Maybe it's enough to redefine this method in org.eclipse.emf.ecore.xmi.impl.XMLHandler :
protected EFactory getFactoryForPrefix(String prefix)
Before being independent like now, I spent 2 years building an EMF-like framework with generator in Java, generating C++. And I did exactly that, an XMI parser that instantiates plain vanilla MOF classes. But I doubt if can use my work for an OSS project.
http://protege.stanford.edu/download/protege/4.0/zip/?C=N;O=D
http://en.wikipedia.org/wiki/List_of_UML_tools#Comparison_of_non-proprietary_UML_tools
detect all association cycles : they are suspect
http://www.nabble.com/working-around-eclipse-artifacts-in-repo-version-problems:-Couldn%27t-find-a-version-in--1.0.0-v20070606--to-match-range--1.0.0,2.0.0%29-td20054852.html
http://maven.apache.org/guides/introduction/introduction-to-dependency-mechanism.html
Versions are old , e.g. :
https://maven.atlassian.com/browse/org.eclipse.emf.ecore/xmi/2.3.0-v200706262000
TODO
This does not give a uml:Property object; there is only a uml:ownedAttribute predicate :
<packagedElement xmi:type="uml:Class" xmi:id="__I2CkBIREd6JhZv7DW6I_g" name="Employee">
<ownedAttribute xmi:id="_E1RuABcBEd6ZiIivjjsQHA" name="name" aggregation="composite"/>
</packagedElement>
Sent to the EMF newsgroup:
http://www.eclipse.org/newsportal/article.php?id=40335&group=eclipse.tools.emf#40335
Sent to the team:
I'm working on UML integration in EulerGUI , by using the EMF eclipse infrastructure.
Much like for RDF, the UML (or any XMI) is translated on the fly into N3.
It works already quite well, with also rules to translate UML expressed in N3 into OWL (in eulergui/examples ) .
The only point is jar dependencies; I want to avoid adding UML2 jars, and also eclipse stuff on Maven central depot is bugged.
So I'm asking you if it bothers you if I temporarily add the modifications in EulerGUI SVN .
It will not disturb your runs, it's just that you will have one class not compiling.
You might also want to add manually the necessary jars :
(after installing the corresponding eclipse plugins).
To avoid having a large release, I'm thinking of using Java Web Start (JNLP) , plus the Maven JNLP plugin :
http://mojo.codehaus.org/webstart/webstart-maven-plugin/jnlp-mojos-overview.html
Hopefully this would allow to download the auxiliary jars on demand, when the user starts using the feature.
An alternative is to use OSGi; but would OSGi reuse the Maven configuration ?
Searching Maven and OSGi bring several plugins , including this one :
http://docs.codehaus.org/display/M2ECLIPSE/Tycho+project+overview
Eclipse Platform Technical Overview
UI designers : Untangle the knots, use EMF (live) models ! Olivier Moises - http://www.eclipsecon.org/2009/sessions?id=475
http://www.eclipsecon.org/2009/sessions?id=765
Snapshot here:
http://eulergui.sourceforge.net/tmp/?C=M;O=D
The class XMIToN3Converter has a main .
ecore_raw.n3 is produced from a simple UML XMI file default.uml (produced by eclipse UML2 editor).
Then ecore_raw.n3 is simplifyed by the CWM utility to produce a more readable ecore.n3 .
The Converter is designed to process any XMI file .
to add to Demo: show annotation of an existing resource that interacts existing rules: e.g. "good customer" => "send reward"
Upgraded to
http://dbtune.org/
http://sourceforge.net/mailarchive/forum.php?forum_name=yap-users&max_rows=25&style=nested&viewmonth=200903
Optimizing for recursive rules
http://groups.google.com/group/fuxi-discussion/browse_thread/thread/d0db3434cc0c5e17
To test regularly: http://www.rdflib.net/rdflib-2.4.0/test/n3/longString.rdf
http://www.irchelp.org/irchelp/irctutorial.html#part3
I wait for an answer here:
http://groups.google.com/group/fuxi-discussion
I made an HTML page with the features, plan, and status from the N3 documents status.n3
and plan.n3. The (specific) N3 rules to generate the HTML are here: plan-rules.n3 .
This concerns feature "update2" :
update RDF database after user change: keep same features as :update, but do it as much as possible with rule techniques.
???????????
Eclipse's TPTP didn't want to start (Unable to connect to the Agent Controller - Connexion refused). So I installed NetBeans 6.5.1 . Good news is that NB imports easily eclipse projects (using same directory possibly), inclluding run configurations. Bad news is that NB imposes more structure to a project that eclipse:
Because of point 1 , I couldn't compile the tests, so I removed them from the project. This dependency enforcing feature can be a very good thing, but it should be possible to disactivate it, especially when importing eclipse projects.
The profiler works well ; here is the result for Parser4J . It is really like stairs with even steps, so there is nothing that draws particular attention.
I'd like to have time to read Jan Wielemaker's PhD thesis, titled Logic programming for knowledge-intensive interactive applications .
??????????????????????
This means that typically, to checkout the foo/bar CVS Module, you would run the following commands:
CVSROOT=:pserver:anonymous@dev.w3.org:/sources/public cvs login
(then enter the password anonymous when prompted) and then
CVSROOT=:pserver:anonymous@dev.w3.org:/sources/public cvs checkout java/classes/org/w3c/IsaViz
Alas, the CVS version doesn't run.
http://www.polarion.org/index.php?page=download&project=subversive
http://en.wikipedia.org/wiki/MapReduce
I updated the development plan and status in N3 :
http://deductions.svn.sourceforge.net/viewvc/deductions/project_management/plan.n3
http://deductions.svn.sourceforge.net/viewvc/deductions/project_management/status.n3
The top Priorities today are :
:search soft:topPriorityOnDate "2009-03-16" .
:export_application soft:topPriorityOnDate "2009-03-16" .
:update2 soft:topPriorityOnDate "2009-03-16" .
:update2 soft:verboseStatus """ maybe make use of action rules in :rdfdb2 """ .
:search a soft:Feature ;
rdfs:label """ Search instances of a class a la Google""".
:export_application a soft:Feature ;
rdfs:label """ export the generated application;
need to package a JavaScript launcher + the RDF database. """.
:update2 a soft:Feature ;
rdfs:label """ update RDF database after user change:
keep same features as :update, but do it as much as possible with
rule techniques """ ;
soft:writtenOnDate "2009-03-16" .
If that 's not clear enough, I'll do an HTML export of these two N3 files :) .
I asked this on news://comp.lang.java.programmer :
Hi all
In addition to use Maven to manage dependencies and build my application (http://eulergui.sourceforge.net/), I would like to re-use the dependencies specified in the pom.xml to carry out a lazy loading of the jars in my application. That would make it possible to release my application with the most important dependencies in XXX-jar-with-dependencies.jar, and the application would download the dependences as needed, like Maven does.
I see at least 3 possibilities:
I think that I am not the only one to have this kind of needs.
I would like to avoid a big distribution with many jars, and a run.sh and a run.bat. Thus I would not like to develop myself this kind of infrastructure.
Michael Justin answered:
There is a Java(tm) Technology thingy called "Java Web Start".
http://en.wikipedia.org/wiki/Java_Web_Start
Thanks Michael; indeed it helps; I always thought that JNPL donwloaded a monolythic application, but that's not the case :
The JNLP file can list resources as "lazy", which informs the JNLPclient that the application does not need those resources to start,but can retrieve them later on when/if the application requests them.
JNPL also can manage update of the local cache.
And I found this project that looks good to generate JNPL settings from Maven :
http://mojo.codehaus.org/webstart/webstart-maven-plugin/
http://jazoon.com/ - Jazoon – Where Java People Meet
Register by 15 April 2009 and get the 3-days-conference pass for EUR 1035 and save EUR 325.
jOWL, a SPARQL engine in JavaScript :
http://jowl.ontologyonline.org/SPARQL-DL.html
After adding the necessary stuff in subform.n3:
# new <<<<<< extend "reachability" to sub-Classes
{ ?END_CLASS :isReachableFrom ?START_CLASS .
?SUBCLASS rdfs:subClassOf ?END_CLASS .
} => {
?SUBCLASS :isReachableFrom ?START_CLASS .
} .
I get this list of hasForm triples (OK) :
ns2:Project ns1:hasForm _:sk2.
xsd:string ns1:hasForm _:sk16.
os:URL ns1:hasForm _:sk18.
xsd:anyURI ns1:hasForm _:sk24.
os:File ns1:hasForm _:sk26.
os:NetWorkURL ns1:hasForm _:sk40.
Apart from my current problems ( the buttons for sub-classes don't show ) I should do this :
And I get this list of gui:inputWidgetSpecification (OK) :
_:sk4 ns1:inputWidgetSpecification ns2:eulerArguments.
_:sk5 ns1:inputWidgetSpecification ns2:cwmArguments.
_:sk6 ns1:inputWidgetSpecification ns2:N3query.
_:sk7 ns1:inputWidgetSpecification ns2:N3source.
_:sk19 ns1:inputWidgetSpecification os:uri.
_:sk27 ns1:inputWidgetSpecification os:uri.
_:sk41 ns1:inputWidgetSpecification os:uri.
I get a list of :hasField 7 triples : seems OK.
Yesterday demo. and presentation of Déductions and EulerGUI in Versailles:
jmv> Hi ! Is there a presentation showing the advantages of rule-based programming , preferably for developers ?
<mic_hat> jmv: yes there is a funny one involving pirates, will see if I can find it
<mic_hat> jmv: http://www.jboss.org/community/docs/DOC-9157
Asked a question here :
http://www.cavdar.net/2008/09/13/5-tips-for-debugging-java-code-in-eclipse/
Search for deductive+database+open+source
Got this through my Google alert:
Science Commons, a division of Creative Commons, is incubating the adoption of semantic scientific publishing through creation of a robust database of ontologies (http://neurocommons.org) and development of supporting technical standards and code.
http://www.defeasible.org/ruleml2009/cfp.txt
Call for papers - RuleML 2009
3rd International Symposium on Rules, Applications and Interoperability
November 5-7 2009, Las Vegas, Nevada, USA
http://www.readwriteweb.com/archives/demo_trend_the_smarter_web.php
what Xmarks is doing is very similar to what StumbleUpon's browser extension does too. : Evri, a semantic search engine
http://datao.sourceforge.net/index.html
http://hal.archives-ouvertes.fr/hal-00266448_v1/
CAD/CAPP Integration using Feature Ontology ( CAPP = computer-aided process planning )
drools+conseil+services+France
http://www.google.fr/search?q=drools+conseil+services+France&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:en-US:official&client=firefox-a
drools-50-cr1 is out !
Now passing:
deductions/n3/java_projection-test.n3p
missing feature: set default values for properties
I come across a problem I avoided until now: integrity Constraints. This is what Euler EYE generates now:
[ e:falseModel true;
e:because [ e:integrityConstraint
{{<#eau> owl:disjointWith <#feu>.
<#eau_de_feu> a <#eau>.
<#eau_de_feu> a <#feu>} => false}
The test is (no need of a query ) :
{?Y owl:disjointWith ?Z. ?X a ?Y. ?X a ?Z} => false.
:eau owl:disjointWith :feu .
:eau_de_feu a :eau .
:eau_de_feu a :feu .
It will be easy to report something also with Drools, although not as compact as EYE, which does elegant variable substitution.
I am organizing a workshop which may be of your interest
see http://is.tm.tue.nl/staff/pvgorp/events/grabats2009/
at this moment in time, you are very welcome to propse a case study
later on, three case studies will be selected and all international groups working on model transformation are then invited to solve those case studies
so basically you could propose a case study for which you think you can very well illustrate the strengths of your approach
moi: sounds good !
Pieter: obviously, you should propose a well-balanced case study for any approach but you can always have some extension points that allow you to show off particular features :)
if you do participate in this initiative, it becomes part of my daily work to review your work at some point
moi: I feel that the interesting thing in my approach is that I'm not restricted to a technological family , although It's currently based on Web Semantics and Java . I want to interoperate with UML, eclipse EMF etc, SQL , and others . Because, I'm not a standard researcher, I ' am practionner who wants to offer useful stuff for many projects, and who wants to develop a business .
grabats2009 is a good event for me , even if I'm not in the competition .
Solution to last year's competition:
http://www.fots.ua.ac.be/events/grabats2008/solutions.html
If JoaFip were compatible with EMF generated code (and it may well be), it could provide a non intrusive persistence solution for EMF .
I thought about using the JSR94 API for calling Drools, but in fact the N3 Drools engine itself could implement JSR94 .
But there are some bad opinions on JSR-94 :
Why-is-JSR-94-Java-Rule-Engine-API-ill-designed
Changed the LinkedIn current task: What are you working on?
Jean-Marc writes a presentation on EulerGUI and Deductions frameworks for GUI generation. 3 days ago -
Jean-Marc extends the Deductions frameworks for GUI generation to inheritance and adding pointers to a selection of objects.
The client visit yesterday was not successful, because I failed to show the benefits of rule - based programming , and the demo. was not convincing enough.
I want to propose them a partnership were I will develop features they need most, like outputting PHP, replacing XSLT producing SVG, or develop business rules ( they offer services for civil engineering management ). I think that the biggest challenge is to come with a way of augmenting the generated application with code in traditional languages so that :
The first idea that comes to mind is, following the "Intelligent Modularity" principle, is to modelize the (Java) interfaces for the "augmentation code". Thus point 1. is easily realized by eclipse, provided that java source for interfaces is generated. Point 2. can be realized by some checking coherence between the interfaces and the way they are called.
Who says interface also says "factory", so there can be a singleton factory à la Spring.
Another ingredient are extension points à la eclipse to add functionalities in well-defined places. For instance if one want to add action buttons in a context of a property, like the GRAPH and REMOVE buttons of EulerGUI, there will be an extension point for that . The generated interface for N3 property pref:MyProperty could be :
package pref;
interface MyPropertyExtension {
void run( MyType value );
boolean isSameThread();
}
Each button will implement this interface. The design environment will be responsible for generating on the fly such interfaces, plus the Java methods to navigate the object graph , probably following a JavaBeans pattern (to detail <<< ).
The runtime environment will take care of actually calling the extension classes.
The runtime environment will also accordingly generate the glue code to navigate the object graph . There must be also a way to update (CRUD) the Knowledge base, like there is today the ITripleStore interface.
These ideas are quite straightfoward. Is this the way to achieve a seamless integration on the OO and ontology paradigms ?
I need to implement this in Drools, described thus in log-rules.n3 :
e:findall a rdf:Property;
rdfs:comment """ builtin that (?SCOPE ?SPAN) e:findall (?SELECT ?WHERE ?ANSWER).
unifies ?ANSWER with a list that contains all the instantiations
of ?SELECT satisfying the ?WHERE clause in the ?SCOPE ?SPAN of all
asserted n3 formulae and their log:conclusion """;
rdfs:domain rdf:List;
rdfs:range rdf:List .
A typical use is (1) :
(?SCOPE 1) e:findall (
?SUBTYPE { ?SUBTYPE rdfs:subClassOf ?TYPE } ?SUBTYPES )
or this with an empty result imposed (2) , here to check non-existence of subclasses :
(?SCOPE 1) e:findall (
?SUBCLASS { ?SUBCLASS rdfs:subClassOf ?CLASS } () ) .
A Drools query is not suitable, since the result of findall must be reused at rules firing time.
Looking from the latest Drools doc., the construct
from collect
seems appropriate.
rule "findall" when
$SUBTYPES : ArrayList()
from collect( Triple( predicate == "rdfs:subClassOf",
object == $TYPE ) )
# $SUBTYPE is in subject position, so to use $SUBTYPES on RHS
# in ?TYPE gui:subClasses ?SUBTYPES we can do:
then
for( Triple triple : $SUBTYPES ) {
String SUBTYPES_item = triple.getSubject();
insert( new Triple( $TYPE, "gui:subClasses", SUBTYPES_item ) );
}
end
This seems to compile in Drools !!!
Notes:
eval( $SUBTYPES.isEmpty() )
Yesterday rehearsal for client visit this afternoon in Fontainebleau.
- new feature: refuse a modification when a rule is violated
Updated EulerGUI documentation :
Generated Swing applications, Generated Swing applications
Updated Deductions documentation:
mssing features
http://www.journaldunet.com/contact/contact.shtml
COMMITED: able to make a round-trip with user N3 file and see the modifications in the GUI after re-opening the file.
Tested for sub-forms; tested with
deductions/n3/test_person.n3p
deductions/n3/foaf.n3p
With Olivier Rossel
... the amount spent watching TV worldwide equals to creating 10.000 wikipedia projects each year...
J'ai ouvert des trucs sur ma box:
http://192.168.1.1/basic/fr/config_appli.htm : VNC, SSH
http://192.168.1.1/expert/fr/config_dmz.htm
Coché ceci sur la box : Configuration de la DMZ
Cette fonctionnalité vous permet de rendre un de vos PC accessible depuis Internet (pour des applications de type serveur Web ou FTP) tout en continuant de protéger les autres ordinateurs de votre réseau.
Lancer le serveur :
x11vnc -usepw
On n'a pas réussi à faire marcher SSH.
Docs:
Thought about application in domotics of the "comprehension without protocol" principle
This is ugly; will have to clean after wednesday demo.
set generatedFrame field
use generatedFrame to add RDF load/store at window opening/closing
TO READ: jena sesame model
TODO
:currentModel ded:retract ( ?SUBJECT ?PREDICATE ?OBJECT ).
use cases: transform object graph; replace edited class before relaunching form builder
List<Triple> searchBySubject( String uriForSubject );
List<Triple> searchByPredicate( String uriForPredicate );
Did not find anything searching for "federation database open source java"
EulerGUI 1.0 announce on LinkedIn and Facebook; developed my social network; invited for a presentation on March 12th.
Yesterday conference at INRIA by Diego Cavanese.
TODO
log:semantics, log:includes, log:notIncludes and log:conclusion .
http://www.w3.org/2004/12/rules-ws/paper/94/
Experience with N3 rules - Tim Berners-Lee, Dan Connolly, Eric Prud'homeaux, Yosi Scharf
http://norman.walsh.name/2004/04/02/notinrdf
Not in RDF
http://dig.csail.mit.edu/2007/Talks/0110-rules2-tbl/#%281%29
???????????? TODO
I am pleased to announce EulerGUI 1.0 , a development environment for Semantic Web technologies , written in Java , under LGPL licence .
It uses Drools as an engine for the N3 logic and rules
(http://www.w3.org/2000/10/swap/doc/Rules).
N3 is a language equivalent to Semantic Web's RDF language, but much easier to read and write by hand.
Moreover, N3 has, on top of RDF, an extension for rules, e.g. :
{ ?x parent ?y } => { ?y child ?x }.
N3 logic (http://www.w3.org/2000/10/swap/doc/Rules) .
Among many other vocabularies searchable on Swoogle search site (http://swoogle.umbc.edu/), there is OWL from W3C, (OWL Web Ontology Language) that allows to express in RDF, and thus in N3, rich models with classes, properties, inheritance and constraints.
So in summary, N3 is a user-friendly language allowing to express facts, class and properties, and rules.
So what does that bring for developers ?
One of the use cases :
- open any number of RDF / OWL / N3 documents
- test and debug the rules using 3 rule engines (Drools, Euler, CWM)
- export all that project as a set of Drools packages, plus the facts in XMLEncoder format
- export all project as for use with Yap Prolog engine
You can also use standard Semantic Web tools such as Protégé and Swoop to edit and visualize RDF and OWL files. EulerGUI is perfectly complementary to these tools:
- Protégé allows to classify and validate an OWL ontology via the classic algorithms of the Description Logic;
- EulerGUI makes it possible to develop a rule base in N3 logic, and to export it for a Drools runtime, or Prolog Yap
Download from
http://sourceforge.net/projects/eulergui/
Manual here:
http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html
Enjoy !
Trouble with SF.NET (Sourceforge) Download:
https://sourceforge.net/tracker/?func=browse&group_id=1&atid=200001
(moderated) http://groups.google.com/group/comp.lang.java.announce/topics?gvc=2
CWM list - preceding announce on CWM public-cwm-talk list: EulerGUI - a light-weight N3 IDE - open source Date: Fri, 31 Oct 2008
Protégé, LinkedIn, FaceBook
AI groups ?
EulerGUI doc. COMMIT for release:
On irc://irc.codehaus.org#maven
<jmv> I confess I have no experience with svn tagging with Subversion alone ...
* juven est parti (Ping timeout)
<jmv> I did svn mkdir tags/ , so that tags/ is at the same level as trunk/ .
<jmv> I don't if I should give the developerConnection and tagBase as local file: path or repository https: path .
<jmv> I don't know
<jmv> I got it !
<jmv> I understood the SVN message : "Local operations do not take a log message"
<jmv> So I tried specifying <developerConnection> and <tagBase> as https: URL's , not file: .
<jmv> And it worked !
<jmv> NOTE: several pages give bad examples of specifying <developerConnection> and <tagBase> as file: URL : e.g. http://maven.apache.org/guides/mini/guide-releasing.html
<jmv> Also the tags directory on the repository is not created automatically by mvn relase:prepare , and nothing in the doc. says it should be done manually before .
<stain_> hm... i thought it would do it for you
<jmv> Me too .
<jmv> I am probably one of the rare people trying to do it the Maven way before having done a single release tagging before .
<jmv> Ok ! BUILD SUCCESSFUL after mvn release:perform !
<jmv> I wonder if it's good practice to use http://MY_PROJECT.sourceforge.net/ as Maven depot ...
<jmv> I suppose that if I want a plain jar in addition to the jar-with-dependencies I have now, I just have to add :
<jmv> <descriptorRefs>
<jmv> <descriptorRef>jar</descriptorRef>
<jmv> </descriptorRefs>
<jmv> Well, it seems that I already have a plain jar here, without asking for it : http://eulergui.sourceforge.net/maven2/eulergui/eulergui/1.0-SNAPSHOT/
<jmv> However, it didn't upload the new release as eulergui-1.0 ; I guess I have to review my deploy specifcation ...
<jmv> I have another complaint : after regenerating my pom.xml upon release:prepare , it left it like this, and I'm afraid it will trigger the same problem next time :
<jmv> <developerConnection>scm:svn:file://PCIVENTIVE/home/jmv/src/eulergui_test/eulergui/trunk</developerConnection>
<handyande> jmv: prepare updates the pom, commits, branches and then updates the pom again
<handyande> so it should reference trunk before and after
<handyande> but it will create the tag for release:perform to use
<jmv> handyande, That's fine , it's just that I had problems with initial pom.xml having <developerConnection>scm:svn:file: , and it worked with initial pom.xml having <developerConnection>scm:svn:https:
http://eulergui.wiki.sourceforge.net/
http://www.jboss.org/drools/sightings.html
http://www.blogger.com/home
http://www.scribd.com/doc/238927/Better-Builds-With-Maven
http://docs.codehaus.org/display/MAVENUSER/MavenAndSourceforge
http://svnbook.red-bean.com/nightly/en/svn-book.html#svn.branchmerge.tags
http://www.func.nl/community/knowledgebase/releases-maven
The first error was:
mvn release:prepare
...
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Cannot prepare the release because you have local modifications :
[eulergui-1.0-SNAPSHOT-jar-with-dependencies.jar:unknown]
The reason was simply that a copy of this jar was, for an unknown reason, at the project root (not in target).
The next error:
[INFO] Checking in modified POMs...
[INFO] Executing: svn --non-interactive commit --file /tmp/maven-scm-1101252519.commit --targets /tmp/maven-scm-6245939798621326396-targets
[INFO] Working directory: /home/jmv/src/eulergui_test/eulergui/trunk/eulergui
[INFO] Tagging release with the label eulergui-1.0...
[INFO] Executing: svn --non-interactive copy --file /tmp/maven-scm-13056142.commit . file:/home/jmv/src/eulergui_test/eulergui/trunk/eulergui/tags/eulergui-1.0
[INFO] Working directory: /home/jmv/src/eulergui_test/eulergui/trunk/eulergui
[INFO] ------------------------------------------------------------------------
[ERROR] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Unable to tag SCM
Provider message:
The svn tag command failed.
Command output:
svn: Local, non-commit operations do not take a log message or revision properties
Added directory tags/ to enable release with Maven
added GUIgenerator.html, a user manual for the Deduction GUI generator;
TODO : explain internal design
As I mailed to Edson Tirelli, I'd like to know whether loading rules and facts in any order is allowed (before firing rules) . Of course I'm about to change the way I call Drools, but before that I'd like to know the status of this feature, is it a bug or is it forbiden.
DONE
- Drools N3 engine: insert together ALL the facts AFTER adding ALL the rules
This SOLVES ALL CURRENT PROBLEMS with bad results (NRI 2 works !)
I extracted from a larger model 2 rules. The problem is that the results from rule "0" should include all the results from rule "1" .
I claim this because:
Triple( subject == "<http://java.sun.com/class#javax_swing_JPanel>",
predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>",
object == "<http://java.sun.com/class#ConcreteClass>" )
rdf:type
and object is
java:javax_swing_JPanel
should entail insertion in Working
Memory of a corresponding TripleResultNow, the issue is that in some test cases, large enough, there are results from rule "1" that are NOT included in the results from rule "0" .
The offending Triple item is here :
$ grep sk_JPANEL_FIELD_20 /tmp/result-34579.n3
_:sk_JPANEL_FORM_18 <http://java.sun.com/method#add> _:sk_JPANEL_FIELD_20 . #R
_:sk_JPANEL_FIELD_20 <http://jmvanel.free.fr/ontology/java_projection.owl#TEST_OK_KKKKKKKKKKKKKKKKKK> <http://java.sun.com/class#javax_swing_JPanel> . #R
There should be a Triple with :
_:sk_JPANEL_FIELD_20 <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> .
I feel that the problem is related to the fact that criteria C1 and C2 are , in the particuliar case of the offending Triple item, the same object .
Note that I use AssertBehaviour.EQUALITY .
The above mentioned rules:
rule "query.n3 0"
when
Triple( $OBJECT : subject,
predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>",
$CLASS : object ) # C1
Triple( subject == $CLASS,
predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>",
object == "<http://java.sun.com/class#ConcreteClass>" ) # C2
Triple( subject == $OBJECT, $PROP : predicate, $VALUE : object ) # C3
then
Triple newTriple;
newTriple = new TripleResult( $OBJECT, $PROP, $VALUE ); insert( newTriple );
end
rule "query.n3 1"
when
Triple( $JPANEL : subject,
predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>",
object == "<http://java.sun.com/class#javax_swing_JPanel>" ) # C4
then
Triple newTriple;
newTriple = new
TripleResult( $JPANEL,
"<http://jmvanel.free.fr/ontology/java_projection.owl#TEST_OK_KKKKKKKKKKKKKKKKK>",
"<http://java.sun.com/class#javax_swing_JPanel>" );
insert( newTriple );
endd
I tried to make these stupid NTP infrastructure work, for keeping the machine up-to-date, on Ubuntu. No way ! Then I simply did this, looking from my watch:
sudo date --set=16:30
I'd like to have time to read this Drools article "Sequential Rete".
Stateless Drools engine could be used embedded in end-user application.
I had to comment out the usage of findall, as it is not yet implemented in Drools translation ! And that was the main problem!
Now there are many such messages on NRI 2 (NRI with individuals removed), but the GUI looks good anyway :
java.lang.IllegalArgumentException: adding container's parent to itself
Even though recursive expansion is activated:
app:globalSettings app:expandForms true .
However NRI complete doesn't show anything, with lots of messages :
GUIHelper.addTitledBorder( sk_JPANEL_FORM_225_11_, "traitement>" ) ;
// javax.script.ScriptException: sun.org.mozilla.javascript.internal.EcmaError: ReferenceError: "sk_JPANEL_FORM_225_11_" n'est pas défini
And on Purchase Order ( see Déductions - GUI generation : implement Property details ) there are no label before fields (regression ).
http://attempto.ifi.uzh.ch/ape/
A car is a kind of vehicule.
This testing page was unreactive one time, but later it worked.
However a correct sentence is:
Every car is a vehicule.
Some advices from the IRC :)
But the Drools user mailing list doesn't seem to work well ...
<jmv_> Hi all ; I sent a mail on the user list "debugging generated Drools source code", if you want to chat here, I'm available ...
<krisv> jmv_: https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/docs/drools-expert/html_single/index.html look at section 3.6.4 and 3.10 to get started
<jmv_> To better read the logs , I should better understand what is a tuple and the fact inside ...
<jmv_> That 's what's inside an event .
<pajac> krisv: thanks
<etirelli> jvm_: for your case, audit log is better... I don't think that looking at the generated code will have any value for you...
<jmv_> audit is something different from what I have with DefaultAgendaEventListener . afterActivationFired() ?
<krisv> jmv_: the audit viewer extracts the most useful information for you and shows it in a tree view
<jmv_> ok .
<jmv_> My rule run lives inside an application in a non-Drool project . Is that preventing me from using the audit view ?
<krisv> no, the log is an xml file, you just need to open that with the audit view
<jmv_> :)
After reordering results from Drools according to recency (probably
useless), and correcting the Euler parser output (was introducing extra rules),
I came to a more fundamental issue. To see that, I logged Drools events "After
Activation Fired", and named rule by file name and number, e.g.
rule=query.n3 0
.
The main query was this one :
{ ?OBJECT a ?CLASS . # 1
?CLASS a java:ConcreteClass . # 2
?OBJECT ?PROP ?VALUE . # 3
} => {
?OBJECT ?PROP ?VALUE . # 4
} .
which is translated this way into Drools
rule "query.n3 0"
when
Triple( $OBJECT : subject, predicate ==
"<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>",
$CLASS : object ) # 1
Triple( subject == $CLASS, predicate ==
"<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>",
object == "<http://java.sun.com/class#ConcreteClass>" ) # 2
Triple( subject == $OBJECT, $PROP : predicate, $VALUE : object ) # 3
then
Triple newTriple =
new TripleResult( $OBJECT, $PROP, $VALUE ); insert( newTriple );
end
Now the point is that, starting from a statement such as :
:myPanel a java:javax_swing_JPanel .
it should unify with both #1 and #3 . This seems to be a problem with Drools, I need to clarify. As a workaround, I added this rule. It is clearly redundant with a logical engine, but with Drools I'm not sure. But in one case, it made things better (NRI reduced).
{
?OBJECT a ?CLASS .
?CLASS a java:ConcreteClass .
} => {
?OBJECT a ?CLASS .
} .
Now when I test a small case in isolation, it works, which means that Drools can accept a single instance.
rule "multi crit"
when
Plate( $NAME : name, type == "desert" )
Plate( name == $NAME, $TYPE : type )
then
System.out.println( $NAME + ", " + $TYPE );
end
So I'm puzzled, Drools seems OK, but my translation doesn't work on large cases.
Statistics: rule Count 57, around 100 objects.
At least my rules are not suspect! Because they work, although slowly, with the Euler Prolog engine. But the translation is suspect, and so is Drools ...
What is a systematic of debugging a rule base that doesn't trigger when expected ?
This weed-end, I continued work on Drools engine for N3 logic.
I thought I needed to reorder results from Drools according to rule order and fact order, but there were other problems.
8–10 June 2009
Marettimo Island, Italy
I would like to attend that. It's free, but would I be admitted? Mmy stuff is quite remote from that now.
COMMITED
Drools N3 engine: implemented fn:substring-after, at least so that case "order request" works almost as with Euler engine.
For the big NRI test case now we have a few seconds before getting the GUI, instead of hundreds of seconds with Euler-EYE !
The remaining root problem for the big NRI test case now is still to respect original order of properties in OWL:
sk_JFRAME_12_11_.pack( ) ;
Using Instanciator class, it would not be difficult to read an N3 project file and translate that into n3_project.Project file. But the reverse operation is not so obvious, when one wants to avoid ad-hoc code. Some way of converting a JavaBean into RDF is needed ...
Astronomy : select * from *
Politics : select idiots from ambitious
Handicraft : create table from_precious_wood
After some laborious work, I get something working with the Drools engine
almost like the Euler-EYE engine. The Actions for text fields and buttons work,
because the RDF list in Consequent is correctly implemented. The
log:uri
built-in is implemented, and the numeric comparison, at
least in some call modes.
There is a Drools Working Memory that stores the end-user data, but it's not visible since there is no load / save in the end-user (generated) application.
What is missing for "Déductions" GUI generation:
TODO
After upgrading Drools to the level of Euler-EYE, the plan concerning features is still here; the plan concerning internal design and implementation is:
There is a common theme in the 2 items above; instead of hand-made procedural code, we should use a declarative rule-based engine, just like in "Déductions" for GUI generation. Point 1 is important because this is the embryo of a multi-language, multi-platform tool. Point 2 is more complex because this is a bootstrap issue: a rule engine is needed to build a rule engine.
NOTE:
With the current Drools-N3 engine, there cannot be more than one value for a subject and a predicate. I don't think this is a severe limitation.
The current class is Instanciator. When processing RDF triples, we want basically to say:
This looks pretty simple! But it takes 646 low-level Java lines, specialized for a specific naming convention in input, and JavaScript+Java object on output. We must be much more flexible in input and output.
What is an instantiation in most languages ? Well there 2 cases: typed languages and weakly- or non-typed. The ingredients are:
I think of using a RETE engine, but I don't like Drools' syntax. Think of the number of pages it takes to describes the stuff ! They are stuck in an old variable instantiation-variable use scheme. Compare that to the flexibility of Prolog! So I'd like to try another engine, and/or wrap the OO RETE features into an N3 or Prolog-like vocabulary or language.
I'm reading Hammurapi PDF manual. This is interesting, and contrary to Drools:
Hammurapi rules' knowledge base can be held in memory or in persistent storage.
The way Hammurapi expresses rules is interesting: in ordinary in Java
language inside Rule.insert()
methods. But it's not what I'm
lloking for. Reading Hammurapi made me thing of using JSR94 API instead of
plain Drools API.
Found error in doc., extra parenthesis, line 899 in
drools-docs/drools-docs-expert/src/main/docbook/en-US/Chapter-Rule_Language/Section-Rule.xml
Person( age == ( girlAge + 2) ), sex == 'M' )
I wanted to make a SWI compatible source from a Yap source, euler.yap, which is the implementation of Jos De Roo's Euler N3 logic inference engine.
First I replaced numbervars
with number_vars
everywhere, because this is a predefined predicate on SWI but not on Yap . Then
these two conditional blocs do the trick:
:- expects_dialect(yap).
:- if( prolog_flag( dialect, swi )).
:- style_check( -atom ).
:- endif.
% ......
:- if( prolog_flag( dialect, yap )).
% these are not really needed on Yap, but it's more declarative :)
:- use_module(library(regexp)).
:- use_module(library(charsio)).
:- endif.
Now I have something that compiles on both SWI Prolog and Yap, and I can use the superb SWI Prolog IDE. For more complex problems, I advise to read this paragraph in SWI manual;
13.1 Some considerations for writing portable code
Download SWI Prolog source from new server:
git://prolog.cs.vu.nl/home/pl/git/pl-57x.git
COMMITED:
n3/query.n3
n3/java_library.n3
n3/euler_project.xml.n3p
n3/test_order.n3p
And the result on NRI, with expandForms disactivated, and the comprehension limit raised to 600, is :
#ENDS 1542376 msec
With expand sub Forms activated , there was no problems with cycles in the class-property graph, but the CPU time raises now to 1799 seconds!
Note that the form with expand sub Forms is just for demonstration purposes; it has no scroll bars and is larger than the screen.
#ENDS 1798532 msec
Further optimisation attempted
I tried yesterday's point 4, by adding this global settings that is false by default:
app:globalSettings app:justGenerateReachableClasses true .
I thought that the app:isReachableFrom
relation is expensive to
compute. Applying that "enhancement", we go from 7s to 116s on the "order
request" case. The reason is probably that we can't eliminate the support
classes when doing this:
{
?END_CLASS a owl:Class .
(?SCOPE 1) e:findall (
?X { app:globalSettings app:justGenerateReachableClasses ?X . } () ) .
} => {
?END_CLASS gui:hasForm ?FORM .
} .
Still trying to run the nridb.n3 case. Jos added trace for reasonning steps.
I found some problems and got ideas, but not the root cause yet .
When watching the run with --debug
, I saw that much time is
spent on navigating the relation between class and property and the class
hierarchy .
Computing the transitive javapr:contains
relation , transitive
closure of javam:add
is useless , as this was added for testing
purposes. It's the same for gui:contains
. I don't don't why they
get computed at all; I thought that the Euler-SEM algorithm was goal directed.
Anyway this is probably not the root cause of the infinite loop, but removing
the unused stuff may help to find the problem. In fact the CPU on test_person
went from 20s to 15s by removing these 2 relations.
At one time I thought that a cyclic relation between class and property was the problem, like this. But this runs fine.
@prefix : <http://nri.fr/ontologies#> .
@prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl: <http://www.w3.org/2002/07/owl#> .
:toComplic_tec
a owl:ObjectProperty ;
rdfs:domain :seance ;
rdfs:range :complic_tec ;
owl:inverseOf :toSeance_9 .
:toSeance_9
a owl:InverseFunctionalProperty ;
rdfs:domain :complic_tec ;
rdfs:range :seance .
:complic_tec
a owl:Class .
:seance
a owl:Class .
To implement point 3 (split the inference into steps), I need a way to query the intermediary results. The query used in current Déductions Project is expensive, as it uses inheritance on the set of Java classes used:
{ ?OBJECT a ?CLASS .
?CLASS rdfs:subClassOf java:java_lang_Object .
?OBJECT ?PROP ?VALUE .
} => {
?OBJECT a ?CLASS .
?OBJECT ?PROP ?VALUE .
} .
Another inconvenient is that we get several reponses
?OBJECT a ?CLASS .
for a single ?OBJECT, so we need to filter out the abstract classes manually in the N3 to Java translation, and also rely on these triples to come out of Euler in the right order.
There is a simpler way to query, for the intermediary or final results. Simply add a marker property meaning : "this object belongs to the results" . So the query would be :
{ ?OBJECT a :result .
?OBJECT ?PROP ?VALUE .
} => {
?OBJECT ?PROP ?VALUE .
} .
But this would change too many rules, this is better:
{ ?OBJECT a ?CLASS .
?CLASS a java:ConcreteClass .
?OBJECT ?PROP ?VALUE .
} => {
?OBJECT ?PROP ?VALUE .
} .
I can also make use of scoped computation of most Derived Classes for a given instance.
I have problem with the NRI SQL model that passed though RDBToOnto converter . The tool chain fails:
SQL ==> N3 ==> my rules for GUI construction with Euler ==> error(comprehension limit exceeded) ! :(
I try W3C's RDF validation service:
http://www.w3.org/RDF/Validator/
And WonderWeb project's OWL validator:
http://www.mygrid.org.uk/OWL/Validator
They say nothing special.
But Pellet (stand-alone or embedded in Protégé) says this:
~/apps/pellet-2.0.0-rc4% ./pellet.sh consistency ~/apps/RDBToOnto_1.2_beta/output/nridb.owl
1 févr. 2009 17:31:12 org.mindswap.pellet.KnowledgeBase consistency
ATTENTION: Inconsistent ontology. Reason: Plain literal "1" does not belong to datatype http://www.w3.org/2001/XMLSchema#int.
Literal value may be missing the rdf:datatype attribute.
Consistent: No
Reason: Plain literal "1" does not belong to datatype http://www.w3.org/2001/XMLSchema#int.
Literal value may be missing the rdf:datatype attribute.
Indeed the original SQL has INSERT INTO declarations, that translate in RDF without datatype indication, e.g. :
:complic_clin_3
a :complic_clin ;
:COMPLIC_CLIN_ID "3" ;
:complic_clin-EN "Intracerebral hematoma" ;
:complic_clin-ENABLED "1" ;
:complic_clin-FR "Hematome intracerabrale" .
Then I run again RDBToOnto converter, this time specifying no instance , and then Pellet says :
~/apps/pellet-2.0.0-rc4% ./pellet.sh consistency ~/apps/RDBToOnto_1.2_beta/output/nridb2.n3
Consistent: Yes
However Euler EYE still says:
** sem error(comprehension limit exceeded)
% YAP execution halted
So I go back to suspect my rules, or rather a combination of my rules plus this 16 classes, 32 objects and 59 data properties OWL model.
Jos pointed out that some rules were similar to :
:a :moreInterestingThan :z.
{?X :moreInterestingThan ?Y} =>
{?Y :moreInterestingThan ?Z}.
It must be some longer cyclic implications involving my rules, plus property domains and ranges, as there is no sub-classes at all.
I began to play with queries on the rules themselves, e.g. this rule detects the rules having a triple with property javapr:projection in the consequent :
{ ?SOMETHING => ?CONSEQUENT .
?CONSEQUENT log:includes { ?FORM javapr:projection ?JP . } .
}
=> { ?SOMETHING javapr:creates javapr:projection } .
But this would be difficult to detect vicious circle through such queries.
I could also by dichotomy remove rules until error dispappears. My best hope is to trace reasonning steps.
I wonder what exactly means :
[ e:counterModel true].
and how is it different from an empty answer.
Now that Luc Peuvrier is here, I need to tidy all I can :) !
The trick is to use the forms computed at design time by Euler as prototypes that are cloned at run-time. The ObjectBehavior class maintains a correspondence Map between GUI Container and RDF Object Id , which allows to keep track of the instance edited by the GUI component, without modifying the latter.
This is quite fragile and roughly acceptable for demo. purposes; the right implementation will be to use Drools engine at run-time.
Also submited in Déductions:
I took my former colleague Thomas Cenni's NRI-DB medical database . I passed it though RDBToOnto converter (a very nice tool BTW) , got a 2600 lines N3 - OWL file. Yap Prolog still runs now, after 360 minutes !
Converting my local N3 project (EulerGUI project) into a equivalent project referencing the SF.NET Subversion URL's :
1,$s=file:/home/jmv/src/deductions/n3/=http://deductions.svn.sourceforge.net/viewvc/deductions/n3/=
Marc Godin is studying fishes :
Only dead fish swim with the stream.
The Java components I create currently for forms are in fact prototype objects. A single form can be instanciated several times simultaneously, for multi-valued fields. They should not be shown inconditionally at startup time. Instead, when user clicks on a button for an Object Property, the forms are instanciated and embedded in current frame or in a popup window. In java Swing, a Component cannot be embedded in two different containers.
At runtime, a form or an input field instance is associated to an edited instance, which corresponds to a triple in RDF. But we are editing a specific instance of triple object in the triple store, and we are modifying it in place.
The simplest would be to have an inference engine at runtime. But we don't have one right now (and also infering a form every time a user clicks a "create" button might be too slow). So a flexible design is needed here.
Euler GUI: prepare for next release: avoid installing Eluer: fallback: copy euler.yap and codd.properties from classpath to temporary files
http://cs.bath.ac.uk/~pb275/< wbr>CM20019/P/Prolog1.pdf
Orchestration of Ontologies and Rules
for Integration of the DoD Enterprise
http://www.med.univ-rennes1.< wbr>fr/~cgolb/Protege2005/dod.pdf
http://www.w3.org/2004/12/< wbr>rules-ws/paper/28/ (idem)
OWL: A Description Logic Based Ontology Language
http://www.cs.man.ac.uk/~< wbr>horrocks/Slides/cisa06.ppt
ConceptNet 3: a Flexible, Multilingual Semantic Network for
Common Sense Knowledge
Handbook of Modal Logic
http://www.csc.liv.ac.uk/~< wbr>frank/MLHandbook/
Extensional reasoning
http://people.cs.uchicago.edu/< wbr>~thinrich/talks/er.ppt
Fundamentals of Deductive Program Synthesis
http://theory.stanford.edu/~< wbr>zm/papers/pap-fundamentals92.< wbr>ps.Z
Prolog Programming in Depth
http://web.ncf.ca/andre/< wbr>publications/PPID.pdf
SQL Databases are a Moving Target
http://www.w3.org/2007/03/< wbr>RdfRDB/talks/Sequeda_SQL_< wbr>Moving_Target.ppt
http://www.w3.org/2007/03/< wbr>RdfRDB/papers/sequeda.pdf
SPARQL and OWL: How to Answer Conjunctive Queries with an Expressive
Ontology Language
http://www.comlab.ox.ac.uk/< wbr>birte.glimm/download/SWIG.ppt
http://www.reddit.com/r/< wbr>programming/comments/797pf/< wbr>building_expert_systems_in_< wbr>prolog_free_online_web/
% First Steps in Prolog
% Read the rst pages of the online user-manual of Sicstus Prolog.
% Load the following Prolog program:
arc(a,b).
arc(a,c).
arc(b,d).
arc(c,d).
arc(d,e).
path(From,To):- arc(From,To).
path(From,To):- arc(From,Node), path(Node,To).
% Try at least the following goals and trace their execution:
path(a,c).
path(b,Y).
path(f,g).
% Exchange the order of the two clauses for path and try
% the above goals again. What changes?
% Exchange the two goal atoms in the body of the
% recursive clause for path. What changes?
A tip from Kos de Roo:
> - is there a multi-line N3 comment ? ( like /* */ )
What I sometimes do is
[ comment """
your_n3_to_be_skipped
""""].
I take the opportunity to write the development plan as an N3 document.
Development plan for Déductions as an N3 document.
I realize that e:findall (which is a wrapper around the ISO Prolog predicate findall), doesn't work like this:
{ (?SCOPE 1) e:findall (
(?SUBTYPE) { ?SUBTYPE rdfs:subClassOf ?TYPE } () )
} => {
?TYPE gui:mostDerivedClass true
} .
The variable ?TYPE must be bound somehow for this to work (bug or feature?). For instance with gui_generic.n3 from the Déductions ontology I can add this in the antecedent :
?TYPE rdfs:subClassOf gui:Widget .
Then I get the expected solutions:
ns1:DatatypeInputWidget ns1:mostDerivedClass {}.
ns1:ObjectInputWidget ns1:mostDerivedClass {}.
ns1:Form ns1:mostDerivedClass {}.
I am surprised by the empty {}, but that is not a problem, I can replace true in the consequent with 1 .
Note that this result depends on rpo-rules.n3 .
Then I try another rule:
{ ?TYPE rdfs:subClassOf gui:Widget .
(?SCOPE 1) e:findall (
(?SUBTYPE) { ?SUBTYPE rdfs:subClassOf ?TYPE } (?SUBTYPES) )
} => {
?TYPE gui:subClasses ?SUBTYPES
} .
But here I get only one solution:
ns1:ContainerWidget ns1:subClasses (ns1:Form).
although I expect another solution :
ns1:InputWidget ns1:subClasses (ns1:DatatypeInputWidget ns1:ObjectInputWidget).
All this works the same with SEM Java and EYE.
Note that this is just an example. In the actual rules of the Déductions ontology I need to find the most derived classes of business (user) classes like purchaseorder.owl; the aim is to make GUI buttons to create instances of the most Derived Classes.
Jos' answer
Why not simply have
{ ?TYPE rdfs:subClassOf gui:Widget . # owl:Thing .
(?SCOPE 1) e:findall (
?SUBTYPE { ?SUBTYPE rdfs:subClassOf ?TYPE } ?SUBTYPES )
} => {
?TYPE gui:subClasses ?SUBTYPES
} .
Using (?SUBTYPES) for the resultset was enforcing that there should only be one result item.
I find Protégé convenient for exploring and visualizing an ontology (but not for writing one, were I prefer to write N3 source). First, convert the N3 into RDF:
cwm gui_generic.n3 --rdf > /tmp/gui_generic.rdf
Note that this would be a convenient feature in EulerGUI: adding a button to export an N3 file as RDF. Then the resulting RDF file can be opened in Protégé:
Wouldn't it be possible to create a special N3 predicate for debug trace printing that could be added in antecedent or consequent ? Something like :
e:trace "My message" (?OPTIONS).
where options could be empty or "print_all_variables", "print(?MY_VARIABLE)", etc . When empty, it could print a count of times called, and maybe some indication of the current state, like current CPU time, number of predicate called, etc.
In this line of thought , I'd like to have a note on how to debug N3 rule bases; I could write a first draft, and you could add stuff from your vast experience.
I reiterate my suggestion to use the variable name for new blank nodes' Id .
I'll visit a customer friday, to enhance a knowledge keeping application based on Access. While thinking on ways to reuse existing VB code, I thought about the Mono project , that could run VB code on Open Software platforms. BTW Mono could be one of the back-end platforms for Déductions. I don't know enough of the Access VB dialect. Does it use standard portable API like ADO.NET ? Well, the answer is that it can use one or more of several API's that Microsoft did over the years : Microsoft Access Object Library, several flavors of DAO (Data Access Object), ADO.NET . See MS database API's, http://en.wikipedia.org/wiki/Visual_Basic_for_Applications
http://www.haslo.ch/blog/whats-wrong-with-vba-13/
Found through nice Amarok pre-defined Radio fluxes: Radio: 1Club.FM - Blues Classics Channel 65k MP3 - http://78.129.227.106:8028
The specification is here : Manage inheritance :
If the Property type has any subclasses, only the most derived class(es) must be exposed to the user as explained in paragraph "Create or link". If not, the Property type itself is exposed to the user.
It used to work this way in java_projection-rules.n3 revision=23 :
{
javapr:thisApplication app:platform app:Java .
?W a gui:ObjectInputWidget .
?W gui:label ?LABEL .
?W gui:type ?TYPE .
?SUBTYPE rdfs:subClassOf ?TYPE .
?SUBTYPE rdf:label ?TYPE_NAME . } => { ?W javapr:projection ?JP . ?JP a java:javax_swing_JPanel . ?JP javam:add ?JLABEL . ?JP javam:add ?JBUTTON . ?JBUTTON a java:javax_swing_JButton . ?JBUTTON java:text ?TYPE_NAME .
?JLABEL a java:javax_swing_JLabel ;
java:text ?LABEL .
} .
Waiting for a hint from Jos on how to use e:findall .
I updated the documentation with install and usage of latest Euler EYE processor (with 100% Prolog engine replacing old Java N3 to Prolog translator),
so that EulerGUI is about ready for a new release.
Jos corrected the first error, not the second one. He also corrected the missing object in triple error.
I implemented the strings delimited by """ for Java code generation. So now I can really work with the new EYE engine.
COMMITED:
- add support for EYE (new stand-alone Yap engine)
- Euler installation directory is searched in expected places (EULER_INSTALLDIR)
Works on simple cases, but on deductions/n3/test_order.n3p
we get this error:
# ** main/0 error(instantiation_error,[atom_codes/2|local_sp(142690704,143065392,[],[])])
# ** main/0 Failed to finish
However, it works well with Euler Yap through Codd and test-as option .
I get the same error on deductions/n3/test_person.n3p .
And on deductions/n3/euler_project.xml.n3p , there is a different error : an object part is missing in an triple at third line :
_:sk7 a ns4:javax_swing_JFrame. _:sk7 a ns4:javax_swing_JFrame.
_:sk7 a ns4:javax_swing_JFrame. _:sk7 ns4:title """generated by Deductions framework""".
_:sk7 a ns4:javax_swing_JFrame. _:sk7 ns4:visible .
Classes having subclasses used to work (in example deductions/n3/euler_project.xml.n3p ), but I broke that when working on purchase order. Now I need a way to say : "when a Class has subclasses , do this with the most derived classes, and otherwise do that with the Class itself ".
For this I'm trying to make use of "Scoped negation" in N3, namely log:notIncludes and e:findall with an empty result set.
WORK IN PROGRESS
COMMITED:
This is what I get today with the purchase order test :
Everything is expanded, for instance the "hasCustomer" button is followed by a corresponding "Customer" titled border (sub-form), etc . Soon we will connect the sub-forms to properties instances, and offer a choice of expanding sub-forms or not. And of course the "hasCustomer" button will create a new customer. However in this case "hasCustomer" is a one-valued mandatory property so behavior can be simplified, by expanding the sub-form unconditionally.
Working on EulerGUI project test_order.n3p , including ontology purchaseorder.owl .
COMMITED
ISSUES
:hasLexicalRespresentation (sic) ; it has rdfs:domain :Identifier, and Identifier is refered indirectly by its subclasses ProductCode and CustomerID, for example CustomerID has no property of its own, it has property "hasLexicalRespresentation" though its superclass Identifier; this is not implemented.
:hasStatus ( OK, it is a property of OrderConfirmation only)
Read the FAQ about openJDK and the Open Source Java .
Also had a look at the JDK7 WatchService class . I don't know whether on Linux the JDK7 WatchService uses FAM (File_alteration_monitor) .
Also searched "file notification java" on sf.net .
Finally, jnotify looks good.
domain, range, subClassOf, subPropertyOf
What I did when splitting rules because of non mandatory rdf:label resulted in cleaner design.
Now I must do the same refactoring for Buttons for Object Properties, whose "text" property comes also from rdf:label.
COMMITED
I had a look back at my Generic JavaBean editor included in ecolosim project . It has goals similar to GUI generation in Déductions project, except that in ecolosim the starting point is a set of Java classes respecting the JavaBean naming conventions, whereas in Déductions it starts from an OWL ontology. An important limitation of GUI generated in ecolosim is that properties of non-primitive types are always considered embedded (there is no way to create a linked data structure). In Déductions accurate GUI's will be inferred from the input ontology, taking in account all constraints (cardinality, linked or embedded, ordered or not, set or not, etc).
For some reason files on the SVN repository were executable: remedy:
svn propdel svn:executable *.n3
svn commmit
I think that what I have been doing for GUI generation is just a particular case of object graph transform. The limitation compared to XSLT or forward chaining rule engines (Drools) is that there is no rule priority, or default reasoning. This is a limitation, but also a cleaner way to do, since rules are both constructive and logical implications.
I solved the yesterday's problem , by using the RDF ID when there is no rdf:label (no other way).
{
?FIELD gui:inputWidgetSpecification ?PROP .
?PROP log:uri ?URI .
( ?URI "#" ) fn:substring-after ?PROPLABEL .
} => {
?FIELD gui:label ?PROPLABEL .
} .
But now I have two fields and labels per property ! This rule in the current implementation of the Java projection should be split :
{
javapr:thisApplication app:platform app:Java .
?W a gui:DatatypeInputWidget .
?W gui:label ?LABEL . ?W gui:inputWidgetSpecification ?Property . ?Property rdfs:range ?Type . } => { ?W javapr:projection ?JP . ?JP a java:javax_swing_JPanel . ?JP javam:add ?JLABEL . ?JP javam:add ?JTEXT_FIELD . ?JLABEL a java:javax_swing_JLabel ;
java:text ?LABEL .
?JTEXT_FIELD a java:javax_swing_JTextField .
?JTEXT_FIELD java:columns 10 .
:GUIHelper javam:addFieldBehavior ( ?JTEXT_FIELD ?Property ?Type ) .
}
Precisely, both elements in red are removed, and this triple is added in the consequent to keep track of the concrete newly created Label widget :
?FIELD gui2:label ?JLABEL .
Then a new rule is added, to replace what was removed :
{
?FIELD a gui:DatatypeInputWidget .
?FIELD gui:label ?LABEL_TEXT .
?FIELD gui2:label ?JLABEL .
} => {
?JLABEL java:text ?LABEL_TEXT .
} .
I found a good enough (for now) way to solve the default values issue. In app_gui-rules.n3 , putting the default rule (use RDF ID) before the specific rule (use rdf:label) , the JavaScript assignments are in the right order, override one another, and the resulting GUI is OK :
sk9_11_.text = "eulerArguments" ;
sk9_11_.text = "euler Arguments" ;
I realise that the Purchase Order exemple doesn't output any form field, just because the rules (app_gui-rules.n3) expect an rdf:label on each property. I should decouple the rules concerning label from the ones concerning input fields, or even better make a rule to enforce that undocumented widgets such as input widgets should be accompanied by a GUI label.
But the most important thing is that somehow I create a label out of the property Id , e.g. "has Customer" from hasCustomer
here:
:hasCustomer
a owl:FunctionalProperty , owl:ObjectProperty ;
rdfs:domain :OrderRequest ;
rdfs:range :Customer .
First this is not very clean to use an ID, and second we should avoid default reasonning, which is non monotonic logic. Anyway as far as I know, there is no way to do non monotonic reasoning with N3 logic.
A new project window must have an initial directory for file chooser taken from the current window.
When closed, a secondary project window should not close the application.
Slowly emerging after a cold ...
I'm thinking of using Drools engine for non-monotonic stuff, especially generating JavaScript code (see 2008-12-24).
Also to generate XHTML I would need some framework allowing to go from RDF repesentation to XML.
I'm thinking of using JRDF instead of my own simple Triple class . It would be good either to wrap a JRDF implementation so that it also stores on a Drools WorkingMemory , or completely rewrite an implementation of a JRDF interface in terms of a Drools WorkingMemory .
Or I can simply take inspiration on JRDF API, and basically keep my stuff for now. To implemeted my generated GUI, this thread is relevant :
[Jrdf-general] Updating triples
They claim to have taken inspiration from Sesame and Jena .
http://jrdf.sourceforge.net/0.5.5.4/doc/javadoc/index.html
We need to refactor java_projection-rules.n3 to create an additional layer with abstract widgets generalizing Swing and HTML.
This layer will be useful also for generating SWT with Wazaabi2 by Olivier Moïses, or generation of GWT, etc.
The straightforward solution in the line of what was done before is to replace strings like this in java_projection-rules.n3 :
java:javax_swing_JXXX ==> widget:XXX
for example :
java:javax_swing_JButton ==> widget:Button
And then rules must be added to translate widget:XXX into the kind of widgets for the plateform considered.
In the Java Swing case, this is particularly simple, since the name of unified widgets are just the Java Swing names with the initial J removed.
So implementing this projection
widget:Button ==> javax.swing.JButton
with a rule engine is maybe like smashing a fly with a hammer.
Such an implication is wasting computing power ;
{ ?WID a widget:Button } => { ?JAVA a java:JButton }
and besides it is not accurate, because for several widget:Button we will get a single java:JButton, unless we add this in the LHS :
?WID javapr:projection ?JAVA
with cardinality restriction 1 on javapr:projection, or describe it as an functional property .
Here is a test I did with Drools before writing an automated transform for EulerGUI. One can see that N3 is more compact than Drools . An annoying thing is that implicit variable binding is not allowed, which make Drools less declarative than N3 and Prolog, and complicates the translation.
package com.sample
import com.sample.DroolsTestTriples.Triple;
rule "OWL transitive property"
// before writing the generator from N3 to Drools,
// I did a hand translation into Drools of this N3 definition of OWL TransitiveProperty
// in http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2003/03swap/rpo-rules.n3
// {?P a owl:TransitiveProperty. ?S ?P ?X. ?X ?P ?O } => {?S ?P ?O}. when // this design works but is not well adapted to automatic translation, // because in Drools there is variable declaration and then variable reference Triple( $P: subject , predicate=="a" , object=="owl:TransitiveProperty" )
Triple( $S: subject , predicate == $P, $X: object )
Triple( subject == $X , predicate == $P, $O: object ) // trying to split variable declaration and variable reference // but Drools doesn't allow yet implicit variable binding // cf chat with Mark Proctor 2008-11-09 :-( /* Triple( $P == subject , predicate=="a" , object=="owl:TransitiveProperty" )
Triple( $S == subject , predicate == $P, $X == object )
Triple( subject == $X , predicate == $P, $O == object ) */ then insert( new Triple( $S, $P , $O ) ); end
<jmv> Is there an API to populate a rule base ?
<jmv> I want to translate rules in N3 into Drools
* |conan| (~conan@87.113.106.171.plusnet.pte-ag2.dyn.plus.net) a rejoint #drools
* conan est parti (Ping timeout)
* |conan| s'appelle maintenant conan
* mfossati est parti ("CGI:IRC (Ping timeout)")
<etirelli> jmv: what do you mean by "populate"?
* mfossati (~be031ba3@docs2.codehaus.org) a rejoint #drools
<jmv> instead of parsing a Drools source, I want to call methods to create rules, much like DOM in XML
<etirelli> jmv: you can use the classes we call Descriptor Model... you just need to be aware that although their are mature and rarely change from version to version, they are not considered public APIs and may have minor changes over time
<jmv> OK
<etirelli> jmv: http://anonsvn.jboss.org/repos/labs/labs/jbossrules/branches/4.0.x/drools-compiler/src/main/java/org/drools/lang/descr/
<etirelli> PackageDescr is the root class
<etirelli> and it is the input to the rules compiler
<jmv> I see it has addRule(final RuleDescr rule) , and so on .
<jmv> No code sample I guess ?
<jmv> calling the rules compiler and run ...
<jmv> Looking the Javadoc, I see PackageBuilder.addPackage( PackageDescr )
<etirelli> yes, PackageBuilder is "the" compiler
<etirelli> and examples are only the integration tests.. since it is not really a public API
<etirelli> to learn how it works, right sample rules in DRL, and use the DrlParser to parse them into descriptors... inspect the descriptors to see the generated result
<jmv> you mean *write* sample rules ?
<jmv> it makes sense
<jmv> time permitting, there might be a Drools engine here : http://sourceforge.net/projects/eulergui/#
<jmv> which would open the possibility to mix RDF, OWL, N3 , with Drools
<etirelli> yes, *write* :)
<etirelli> cool :)
<etirelli> jmv: conan is interested in RDF and OWL support :)
<jmv> i think we talked here 2 years ago about that ...
<jmv> there are several API 's to read RDF , notably Jena
<jmv> I use Jena ; there is Sesame too
<jmv> I use Jena to parse RDF and write N3 , which is a more human-readable RDF
Using plain vanilla Objects:
t = new Object() {
a :"aa" ,
b : 11
};
alert( t.a + " " + t.b + " " );
In fact new Object() is not necessary; it is a plain JavaScript object, i.e. an associative array.
This creates an object graph:
a = new Object();
a.b = new Object();
a.b.c = "vvvv" ;
alert ( a.b.c );
This does not work b ecause Runnable is abstract :
var r = new java.lang.Runnable();
r.run = function() { alert('hello'); } ;
java.lang.Thread(r).start();
Need to do this:
var r = new java.lang.Runnable() {
run : function() { alert('hello'); } };
java.lang.Thread(r).start();
Using JSON in JavaScript it is possible to stringify such an object :
t = new Object() {
a :"aa" ,
b : 11
};
s = JSON.stringify(t);
alert( s + "--- "+ JSON.parse(s).a );
Note that in json2.js the JavaScript incantation to introspect the JavaScript object is :
for (k in value) {
if (Object.hasOwnProperty.call(value, k)) {
At last the Deductions project is on Sourceforge ! The Subversion repository is populated with N3 sources and the HTML that are on jmvanel.free.fr . There is a meeting on november 15th, and possible work with Olivier M. on an SWT backend.
The Deductions rule base can generate a crude window; but the multiplicity is not taken in account. And for now there is nothing for runtime behavior and storage in end user application. But it is declarative all the way :-) .
One of the goals is to remake the Euler GUI application with the Deduction technology.
Saw interesting features: N3Document, definitiveDocument, definitiveService .
Jedit
Not really much memory saving than Firefox.
Some nice features:
My grips:
My suggestions
% export PYTHONPATH=~/apps/cwm-1.2.1
[jmv@localhost]~/apps/cwm-1.2.1% python swap/check.py
I developed a little Java class, Project, to shortcut the intermediary Web server and reuse the same rules and facts compiled in Prolog for several queries. It's a minimal file based wrapper for Euler SEM reasoning services; a Project owns a Set of N3 sources, N3 queries, and possibly Prolog sources.
On top of Project, I did a small Swing GUI. It's still barely usable, but it already can load several N3 sources and queries and lunch the inference process. I plan to add an RDF reader through CWM and Jython.
I used threads to accerate on a 4 core machine. I learn XPCE.
Un dialogue avec Marc :
marc: je lutte comme beau diable sur un montrueux ERP
va sortir de l'information dans un erp vieux de 30 ans
moi: tu dumpes tout en texte et tu parses :-)
marc: un truc comme ca
moi: garder de l'information fermée sans sans que les utilisateurs puissent y accéder de manière neutre devrait être interdit ....
marc: un truc qui va dénormaliser
moi: je vois
http://demo.openlinksw.com/rdfbrowser/
Is there an editor for N3 including rules ?
TODO
- update Euler FAQ
- use of induction in Prover9 (see http://en.wikipedia.org/wiki/Structural_induction )
- study N3 and Euler algo.
- self-training on CHR
- study CL and try an implemetation in CHR
- build Protégé and Euler plugin
http://lists.w3.org/Archives/Public/semantic-web/
http://www.w3.org/TR/rdf-sparql-query/
https://dl.kr.org/pipermail/dl/2008/thread.html
http://www.w3.org/Submission/SWRL/
http://en.wikipedia.org/wiki/Bossam
http://www.w3.org/2000/10/swap/
http://protegewiki.stanford.edu/index.php/Protege4DevDocs
http://www.cs.man.ac.uk/~iannonel/eclipseSetup/eclipseSetupBuildPaths.html
http://www.cs.man.ac.uk/~iannonel/eclipseSetup/eclipseBuildAndRun.html
http://protegewiki.stanford.edu/index.php/CompileProtege4InEclipse
http://subclipse.tigris.org/install.html
http://smi-protege.stanford.edu/svn/protege4/
http://www.co-ode.org/downloads/protege-x/plugin-code-example.php
http://www.cs.man.ac.uk/~iannonel/eclipseSetup/eclipseBuildAndRun.html
overcome limits "description logic"
Transformation d'ontologies basées sur la logique de description : Application dans le commerce électronique
Chan Le Duc1
http://tel.archives-ouvertes.fr/action/open_file.php?url=http://tel.archives-ouvertes.fr/docs/00/21/41/45/PDF/These_LeDuc.pdf&docid=214145
http://tel.archives-ouvertes.fr/tel-00214145/en/
description logic ontology design
Description Logics for Conceptual Design, Information Access, and Ontology Integration: Research Trends (2003) - Enrico Franconi
http://citeseer.ist.psu.edu/641124.html
https://www.inf.unibz.it/~franconi/dl/course/tutorial/description.html
Hybrid Logics and Ontology Languages
general concept inclusion (GCI) DL owl reasoner
http://fr.wikipedia.org/wiki/Logique_de_description
Ian Horrocksa, E-mail The Corresponding Author, Birte Glimma, E-mail The Corresponding Author and Ulrike Sattler
To purchase from
http://www.sciencedirect.com/science?_ob=ArticleURL&_udi=B75H1-4NTXG8S-2&_user=10&_rdoc=1&_fmt=&_orig=search&_sort=d&view=c&_acct=C000050221&_version=1&_urlVersion=0&_userid=10&md5=797599863fa17525cb0ea07f88e6b27f
http://prologdoc.sourceforge.net/
sudo yum install ocaml
sudo yum install LablGTK
sudo yum install camlp4
./configure; make world; sudo make install
Here is the desired workflow:
designer --> DL Ontology --> Prolog code }
designer --> Prolog rules } --> Application
user --> database update --> fire rules --> OK or explaination
user --> query --> answer
The Prolog rules are expressed with the same predicates and reified concepts as those translated from the initial DL (Description Logic) Ontology, and are the part of the knowledge that is too complex to be part of the DL Ontology. An example of a non-DL rule is here:
hasParent(C,P) ¿ hasBrother(P,BP) ¿ hasUncle(C,BP)
If I understand well, the workflow of Euler is :
designer --> DL Ontology --> Prolog code
designer --> N3 rules and queries --> Prolog code
user --> N3 query --> --> Prolog code --> proof including variable binding
How can Euler be wrapped or adapted to fit the above workflow ?
I could shortcut the Codd server and run all in a single Prolog process :
pl -f ./sem.pl -t main. < ./test008.in
A link on Euler paths: ???
This file should not be here :
classes/euler/Support.java
It would be good to include in the distribution a file run_euler.sh :
java -classpath bin/Euler.jar:bin/Euler_Tests.jar:lib/tuprolog.jar euler.EulerRunner $*
and a file run_codd_server.sh :
java -cp bin/Euler.jar:bin/Euler_Tests.jar:lib/tuprolog.jar euler.Codd $*
I made additions to the Euler FAQ .
Q: The output of Euler is a proof in N3. Is there a way to shortcut that and produce a Prolog output ?
A: ??? DEBUG in progress
Q: What is the ontology for the proof answers of Euler ?
A: One can see that the r: namespace prefix is used; it is declared as
pfx('r:','<http://www.w3.org/2000/10/swap/reason#>').
just follow http://www.w3.org/2000/10/swap/reason# and that is the ontology; it has comments for all the concepts.
Q: Note that with the latest version of Euler and cwm this gives a parser error in cwm :
pl -f ./sem.pl -t main. < ./test008.in > test008.out.n3
cwm --n3 test008.out.n3 --rdf --pipe
...
AttributeError: 'tuple' object has no attribute 'close'
However this gives no hint:
pl -f ./sem.pl -t main. < ./test008.in
PENDING !!!!!!!!!!!
Q: How would you do to integrate Euler into a Java GUI such as SWOOP or Protégé ?
A: it depends on what one want to achieve: one feature could be to write an N3 rule and display the proof
Q: What is the difference between Euler and classical DL reasonners such as Pellet and FaCT++ ?
A: Euler is an all-purpose logical query engine. Reasonners process the ontology globally, thus achieving much better performances than processing the classes one by one.
Q: How can one use Euler to implement the services of a DL reasonner, i.e. classification and detection of unsatifiable classes?
Q: Before reading more about the Euler path algorithm, I wonder if using a tabling Prolog such as XSB would not achieve a similar effect, that is to avoid infinite loops and memoize the calls already encontered.
A: A We took the option of a reasoner written in Prolog instead of taking Prolog as a reasoner and there are many reasons for that: no need to declare which predicates should be tabled, having a proof output (in N3), supporting Coherent Logic, etc..
Q: What is Coherent Logic ?
A: Look at the last chapter of
http://folli.loria.fr/cds/2006/courses/Bezem.Nivelle.IntroductionToAutomatedReasoning.pdf
(the whole course btw is very good!)
Q: Which crucial feature made you switch from Yap and tuProlog to SWI ? The semweb libraries ?
A: No, performance
Q: Could I run the current SEM (Skolem Euler Machine) on tuProlog ?
A: not yet; I would also consider to use jTrolog (which has better performance) https://jtrolog.dev.java.net/
Q: What are the advantages of the current SEM (Skolem Euler Machine) ? More expressive power or performances ?
A: It has more expressive power in that one can have existentials and disjunctions in the conclusion. This allows to find e:falseModel and e:counterModel but I still have to investigate the proof expression of those. For Horn Logic the engine speed is not degraded which was quite a challenging task :-)
Q: Is it radically new with respect to old Euler proof ?
A: ???
Q: I tried to read the thesis mentioned on the site; it's not easy; also there is a different language ML or haskell .
A: The most relevant paragraphs are mentioned in the FAQ.
Q: do you re-use OWL/RDF ontologies or is all written by you ?
A: there is a lot that we try to reuse esp data sources like
http://bioontology.org/ncbo/faces/index.xhtml
http://esw.w3.org/topic/SemanticWebForLifeSciences
etc
Q: What is the difference with the N3 parser in CWM, apart apart from Euler being in Java ?
A: They are very close wrt to the language that they can parse.
Q: What is the difference with the N3 parser in Jena ?
A: The Jena N3 parser can't cope with {} formulae which is crucial for N3 Full support.
Example of stupid behavior in a browser (Firefox 3). I saved all tabs in a single bookmark, then I wanted to close the window. The browser, however, asked me to confirm that I really wanted to close the window.
general concept inclusion (GCI) .
Reading this article:
Description Logics as Ontology Languages for the Semantic Web
Franz Baader1 , Ian Horrocks2 , and Ulrike Sattler1
% infinite loop in standard Prolog :
:- table a/1. % this does the trick in XSB
equiv_a(X) :- a(X).
a(X) :- equiv_a(X).
a(a).
Then no more infinite loop:
?- a(X).
X = a;
no
Wrote file /home/jmv/apps/apache-tomcat-6.0.16/SUMO.pl
KIF ontolingua http://www.linguist.jussieu.fr/~fchaumartin/
http://ontolog.cim3.net/cgi-bin/wiki.pl?OntologySummit2007
http://groups.google.com/group/comp.ai/topics
http://tech.groups.yahoo.com/group/aima-talk/
Why?
How?
in case of ambiguous words, use a reference to a WordNet sense (synset)
While I'm practicing on this exercice in AIMA I try to express in first order logic in an elegant way that :
Which amounts to declare that if the parts are disjoint [a bit of MathML] :
and to enter enough mathematic knowledge to make Prover9 infer this:
∀s ∈S,
and then
Thinking later, I'm not sure to what extent I can formalize all that in FOL.
So I'm reading about fisrt order axioms for set theory: Set Theory in First-Order Logic: Clauses forG6del¿s Axioms. I's funny that one author of this is W. McCune, the developper of Prover9 !
So I feel a need to read again about Upper ontologies: SUMO, Dolce, OpenCYC, BFO, UMBEL, etc.
I found some comparisons on the Web
From the Sumo site one can enter an English word and the corresponding formal term in SUMO for each WordNet sense (synset) will be displayed.
The open source Texai project has released the RDF-compatible content extracted from OpenCyc.
A bad sign: the research.cyc site is down this saturday. It's too bad, because on top of what Opencyc has, it includes, according to Wikipedia, a large lexicon, English parsing and generation tools, and Java based interfaces for knowledge editing and querying.
Dolce has a detailed (349 pages) description.
There is, as everywhere, the Babel effect:
There is at least one exchange format for FOL (first order logic), the one used by the TPTP (Thousands of Problems for Theorem Provers) Problem Library, which is a library of test problems for Automated Theorem Proving (ATP) systems.
The most used format for ontologies including logic rules is KIF; generally an OWL extraction is provided; but OWL doesn't provide rules.
In this sigmakee CVS directory, the SUMO file is called Merged.kif.
In the SUMO source I found this axiom about finite sets:
(=>
(instance ?SET FiniteSet)
(exists (?NUMBER)
(and
(instance ?NUMBER NonnegativeInteger)
(equal ?NUMBER
(CardinalityFn ?SET)))))
I'm practicing on this interesting exercice in AIMA, using Prover9. I won't put my solution here, thinking of teachers who are using this for home work, although I think that having a corpus of solutions is a good way to learn.
% Yesterday, John went to the North Berkeley Safeway supermarket
% and bought two pounds of tomatoes. and a pound of ground beef.
% http://www.cse.buffalo.edu/~shapiro/Courses/CSE563/2007/Projects/proj2.pdf
% 1. Is John a child or an adult? [Adult]
% 2. Does John now have at least two tomatoes? [Yes]
% 3. Did John buy any meat? [Yes]
% 4. If Mary was buying tomatoes at the same time as John, did he see her? [Yes]
% 5. Are the tomatoes made in the supermarket? [No]
% 6. What is John going to do with the tomatoes? [Eat them]
% 7. Does Safeway sell deodorant? [Yes]
% 8. Did John bring any money to the supermarket? [Yes]
% 9. Does John have less money after going to the supermarket? [Yes]
knowledge representation substance fruit individual
While searching for OCL + FOL, I found Isabelle, which is a kind of generic logic tool (not only FOL, but Higher Order Logic, etc).
This article uses Isabelle: HOL-OCL: Experiences, Consequences and Design Choices.
William McCune, the author of Prover9 and Otter, answered me !
Thanks for the feedback. Prover9 has some similarities with Prolog
(language and theorical basis), but it should not be thought of as an
extension of Prolog. The search method is entirely different.
First, there is no backtracking. Prover9 can do a goal-oriented
search, but instead of backtracking, it explores multiple paths
simultaneously (it can do this because it stores intermediate clauses).
Second, Prover9 is designed to prove theorems, not answer queries.
One can recover the variable substitutions by using an "answer attribute".
Below is an example of using Prover9 to simulate a Prolog computation.
This is only an exercise, because it's very inefficient.
W. McCune
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
set(prolog_style_variables).
% Simulate back chaining (Prolog search).
clear(auto_inference).
set(neg_binary_resolution).
% Allow multiple proofs of the same goal.
assign(max_proofs, -1). % unlimited
set(reuse_denials).
formulas(assumptions).
% prolog-style definition of append.
% Note list notation uses : instead of |).
append([], X, X).
append([H:T1], X, [H:T2]) <- append(T1,X,T2).
end_of_list.
formulas(assumptions).
% If we include an answer attribute to get the substitutions,
% we cannot use the "goals" list---we have to negate the goal
% ourselves and put it in "assumptions".
% Find the pairs of lists that can be appended to give [a,b,c,d].
% Note in the output that each pair is produced twice. This
% is not a bug. It's just the way Prover9 does its search.
-append(X, Y, [a,b,c,d]) # answer(f(X,Y)).
end_of_list.
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
My (JMV) comment: you can't use the answer "attribute" in unrestricted formulas, you have to convert then by hand to clausal form first, otherxwise you get this message:
Fatal error: Answer attributes on non-clausal formulas cannot contain
variables
I subscribed to the CHR mailing list; there are quick responses to my newbie questions by the bosses themselves, Tom and Thom.
I ordered Tom Schrijvers' 2003 book "Essentials of Constraint Programming".
I'm testing the Blog feature on Google: http://jmvanel.blogspot.com/
Fedora 8 is arrived!
I updated to Amaya 10.1 on Fedora 7. It's quite convenient to write my Blog this way. Of course there is the hassle of uploading. But on Google JavaScript editor (mail, docs, or Blog) it tends to be quite slow, because of general slowness and memory consumption of Firefox.
Discovered Tom Schrijvers' Declarative Languages Blog . Tom is the maintainer of CHR.
Among other news, he started a type checker library in (SWI-)Prolog: type_check.pl. Using this library, you can use Mercury-style type declarations and predicate signatures. It's a migration path to Mercury, and also it's more flexible than Mercury, because typed Prolog code can call and be called by ordinary untyped Prolog code.
Had a look at the ODBC interface in XSB manual 2:
| ?- odbc_import(¿Test¿(¿TId¿,¿TName¿,¿Length¿,¿Price¿),test).
yes
This way the SQL table "Test" is made available as the predicate test.
prover9, the successor of Otter.
http://swig.xmlhack.com/ : Semantic Web Interest Group IRC Scratchpad .
I wrote my first CHR rule! I modifed db_family.pl: Family relations (deductive database)
this way :
mother(X,Y) ==> parent(X,Y).
And then this query
parent( jmv, sim ), mother( simone, jmv ).
gave more results.
CHR questions:
CHR answers
ontology software development:
http://www.ercim.org/publication/Ercim_News/enw58/saeki.html
An interesting ontology project:
http://www.cs.utexas.edu/~mfkb/
To read Guitar Pro .gp4 and .gp3 files:
http://dguitar.sourceforge.net/fr/inldex.html
I like the idea of CAD and 2D projections of a more complex 3D world.
I saw the TV interview of Charles Simonyi :
http://www.beet.tv/2007/09/microsoft-forme.html
I also read the Wikipedia page on Intentional Programming . It's clear that Intentional programming has part of the thruth. But also the product that personifies the concept is probably a big fat GUI with a proprietary file format, the triumph of proprietary software. Not what people want in 2007. They want their design efforts to be saved in an open and durable format. Guess what it is, dear reader ? OWL. There is no other. And people in 2007 want flexibility. They want to use today's tools and source code with emerging paradigms.
My solution is :
annotate available existing modules and libraries with more semantic:
With a suitable inference engine and rules, plus a semantic search engine, plus a suitable GUI, this can enable to plug any annotated module to an exiting application. Remember that, like in eclipse, plugins are a composite structure, i.e. a module can have any granularity. So in theory this can solve the application building problem, in a top-down way. Of course, you'll still need develop features that exist nowhere. Also you'll still face the Babel effect on programming languages. But connecting different languages is "just" a matter of correspondance rules and, again, protocol state machines. So connecting different languages is automatizable; it's mainly an issue in performance and global architecture.
TODO complete from my manuscript <<<
http://www.educery.com/papers/rhetoric/road/
http://www.codegeneration.net/
http://martinfowler.com/dslwip/
set samples 1000 set grid plot [-5 : 5] [-10 : 10] 1/x -1 +4*x**2 title "pour Marie"