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 - Latest blog - Years before: blog 2004-2007 ; 2008-2010 .

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



2011-12-31

http://www.open.ac.uk/Arts/philos/Nonmonotonic_inference_eprint.pdf

2011-12-30

the latter indirectly linked to the first:

http://www.w3.org/wiki/LargeTripleStores

http://seaborne.blogspot.com/2008/06/tdb-loading-uniprot.html

"add to a project a notion of explicit or implicit SPARQL end points"

http://www.w3.org/TR/Pointers-in-RDF10/

i try to use this for liveurl, can be also used to specify sparql end points

Envoyé vendredi à 11:08

Ruset: second, about content http://www.w3.org/TR/Content-in-RDF10/

and last about transport, http://www.w3.org/TR/HTTP-in-RDF10/

all three are used in earl

http://www.w3.org/WAI/

http://webcache.googleusercontent.com/search?q=cache:1U2lcpsM3rwJ:cogprints.org/418/2/context3.ps+guha+use+itc+true+in+context&cd=4&hl=en&ct=clnk&gl=us&client=safari

[PS]

NOTES ON FORMALIZING CONTEXT

cogprints.org/418/2/context3.ps

File Format: Adobe PostScript - View as HTML

by J McCarthy - 1993 - Cited by 793 - Related articles

Ruset: thank you,

Envoyé vendredi à 12:46

Ruset: guha recomand this http://www-formal.stanford.edu/overview.html

in this mail http://lists.w3.org/Archives/Public/www-rdf-interest/2000May/0131.html

Envoyé vendredi à 12:50

Ruset: there a link 'papers' in first link. it go to page with some papers, postscript

2011-12-28

http://graph.facebook.com/jmvanel http://jmvanel.free.fr/jmv.rdf http://graph.facebook.com/rszeno http://sort-of.strangled.net/foaf.rdf

Ruset: seen with graphviz from eg

Swish Intro

Swish is a framework, written in the purely functional programming language Haskell, for performing deductions in RDF data using a variety of techniques. Swish is conceived as a toolkit for experimenting with RDF inference, and for implementing stand-alone RDF file processors (usable in similar style to CWM , ...).

Rules are not only for business rules (generating SPARQL queries using rules)

In fact business rules are raw material for the building of business applications just like ontologies and structural models. And, because we build business applications using rules (applicative and infrastructure rules), this means having rules manipulating rules.

We already have such rules manipulating rules to :

We need to have more rules manipulating rules to :

  1. transform N3 rules into Drools rules (currently implemented by ad-hoc Java code)
  2. generate SPARQL queries from N3 rule base and a simplified N3 query (an N3 expresion with triples including variables but no braces)

Point 1 will stay like this in the near future, as current implementation is well tested and extensible.

The point 2 is necessary for automating access to Linked Open Data (see Roadmap for EulerGUI 2.1 , and Sketch of a roadmap / The Déductions stuff in my blog).

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 used to think that for point 2, the capabilities of Euler or CHR to handle unbound variables can be leveraged. But I changed my mind. Since I already have experience with dealing with SWRL, it ' s probably quite easy to first convert the N3 to SWRL. Good thing with SWRL is, it's plain RDF, and as a consequence there's no possible confusion between input rules and transformation rules (this is actually a problem when processing N3 with N3). It's also easier to match rule parts when the rule is expressed as pure RDF graph (SWRL or other). So SWRL just a quite simple RDF rule format, enough well documented (but I din't have to reed the doc. to write the SWRL ==> N3 converter rules ). N3 is suitable for writing rules by hand and proof-reading by developers (and directly interpretation by any of the EulerGUI.

So the roadmap for this SPARQL generation feature could be :

  1. transform N3 rules into SWRL rules
  2. transform one SWRL rule into SPARQL;
    this needs an RDF vocabulary for SPARQL queries, which can be SWRL with some emtemsions
  3. add recursivity by finding SWRL rules matching a simplified N3 query
    substitute suitable variables with their constant value
  4. add recursivity by substituting matching triples in antecedent with their definition from a rule

As an exemple, think of a family relationship rule base (see rules examples - Family relationships ). The intermediary steps are writen below in N3, but keep in mind that the actual inferencing will manipulate SWRL syntax, as explained above (point 1).

Starting from a simplified N3 query :

:John :hasUncle ?U 

By 3, this rule is picked:

{ ?X hasParent ?P .
  ?P hasBrother ?B .
} => {
  ?X hasUncle ?Y }.

By 3, substitute variable ?X with its value :John :

{ :John hasParent ?P .
  ?P hasBrother ?B .
} => {
  :John hasUncle ?Y }.

By 4, the rule for hasBrother is picked, and the antecedent is substituted in preceding rule :

{ :John hasParent ?P .  ?P hasSibling ?B .
  ?B a Male.
} => {
  :John hasUncle ?Y }.

For property hasParent, a background declaration states that the corresponding triples are hosted in some SPARQL endpoint:

hasParent eg:inSPARQL_endpoint <http://mydatasource.org/> .

So, no need to recurse on property hasParent.

Similarly, for class Male, , a background declaration states that the corresponding triples are hosted in some SPARQL endpoint:

Male eg:inSPARQL_endpoint <http://mydatasource.org/> .

Process goes on with expanding hasSibling .

When nothing is left to be expanded, it's time to use point 2 above to generate the final SPARQL query.

2011-12-27

TODO :

Caused by: java.io.IOException: Cannot run program "yap": error=2, No such file or directory
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at java.lang.Runtime.exec(Runtime.java:593)
        at java.lang.Runtime.exec(Runtime.java:466)
        at euler.Process.run(Process.java:68)
        ... 1 more
Caused by: java.io.IOException: error=2, No such file or directory
        at java.lang.UNIXProcess.forkAndExec(Native Method)
        at java.lang.UNIXProcess.<init>(UNIXProcess.java:53)
        at java.lang.ProcessImpl.start(ProcessImpl.java:91)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 4 more
java.lang.RuntimeException: java.lang.InterruptedException: sleep interrupted
        at euler.Process.execute(Process.java:49)
        at euler.ProofEngine.runProofEngine(ProofEngine.java:180)
        at euler.ProofEngine.runProofEngine(ProofEngine.java:199)
        at n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:52)
        at eulergui.project.Project.reasonExternalProlog(Project.java:521)
        at eulergui.tools.SWRLTranslator.runTranslatorProject(SWRLTranslator.java:114)
        at eulergui.tools.SWRLTranslator.n3SourceAdded(SWRLTranslator.java:53)
        at eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:85)
        at eulergui.project.Project.addN3Source(Project.java:306)
        at eulergui.project.Project.addN3Source(Project.java:287)
        at n3_project.SourceFactory.addSource(SourceFactory.java:115)
        at n3_project.DropURLTranferHandler.createN3Source(DropURLTranferHandler.java:120)

2011-12-26

TODO : impossible to create a file on Mac, because there was no way to enter a file name in JFileChooser

Semantic Web Programming

http://semwebprogramming.org/

Programming the Semantic Web

Build Flexible Applications with Graph Data

By Toby Segaran, Colin Evans, Jamie Taylor

http://shop.oreilly.com/product/9780596153823.do


Rules are not only for business rules

Rules are not only for business rules, but also for reasonning on computing infrastructure : GUI, data sources, network protocol, access control and permissions, logs, cloud and IAAS, PAAS .

For instance, with swing3 rule base, we generate in real time Swing input forms from OWL ontology.

Another example (not yet implemented) : knowing details on data sources, their content in terms of properties, classes, ontologies, whether they are trusted, it is possible to manage querying : e.g. generate SPARQL queries on selected sources depending on business rules.

SPARQL parameterized queries

sparql parameterized queries in Andy's blog

This should be used in EulerGUI !

QuerySolutionMap initialSettings = new QuerySolutionMap() ;
initialSettings.add("title", node) ;
// and this is passed to the factory that creates QueryExecution's:
QueryExecution qexec = 
    QueryExecutionFactory.create(query,
                                 model,
                                 initialSettings) ;

2011-12-17

http://mikepultz.com/2011/03/accessing-google-speech-api-chrome-11/

Preparing my trip to New York

Posted on Twitter, FaceBook, LinkedIn .

Subscribed to http://www.meetup.com/

http://www.swnyc.org/index.php?title=New_York_Semantic_Web_Meetup&oldid=1531

http://swnyc.org/index.php?title=New_York_Semantic_Web_Meetup

http://www.meetup.com/semweb-25/

http://semweb.meetup.com/

http://www.meetup.com/semweb-25/messages/boards/

http://www.marconeumann.org/

http://markwatson.com/


Tomorrow I'm flying to New York for the rest of the year !

I'll be in New York (actually Brooklyn) from 18 to January 1rst .

In fact I'm here just mainly to see my oldest daughter.

But I would be happy to have contact with Semantic Web people (and rule engine, and Java).
Another idea is to propose a presentation or a meeting with the EulerGUI FRAMEWORK (SemWeb + rules + Java), with a User Group , or other meeting

I have a latest presentation where I talk about the whole chain:

http://jmvanel.free.fr/presentations/connaissances_DL_CNL_regles.xhtml

Actually , this latest presentation translated from french by Google is not too bad :

I'll correct that by hand, though .

In fact it could be nice, depending on the public to separate at least 3 topics:

- EulerGUI as a tool for exploring the Semantic Web

- EulerGUI as framework to develop poratable applications centered on an expert system

- controlled English as a way to capture ontologies and rules


<danbri> yup there's a pretty active NYC semweb community

<danbri> look around for Marco Neumann's stuff, he organizes meetups etc

TO READ: http://blog.athico.com/2011/06/truth-maintenance-over-directed-graphs.html

Actually , my latest presentation translated from french by Google is not too bad :

http://translate.google.com/translate?sl=auto&tl=en&js=n&prev=_t&hl=en&ie=UTF-8&layout=2&eotf=1&u=http://jmvanel.free.fr/presentations/connaissances_DL_CNL_regles.xhtml&act=url

I'll correct that by hand, though .

<jmvanel> reading [SWIPL] Using Boehm GC ; Jan's posts are always interesting

<jmvanel> and , by chance it's Nicolas Pelletier, with whom I alreazdy exchanged mails who answers

<jmvanel> it makes me think that it would be fine to use Jan's SWI-Prolog RDF store with Euler engine

<jmvanel> cf http://eculture.cs.vu.nl/europeana/documentation.html

2011-12-16

EulerGUI

COMMIT

- try to fix { true } => ... , but not complete, and anyway this works:

true => ...

- add example examples/exec_system.n3 : launch a system command

- add class SystemExecution to launch a system command from N3

This works:

eg:execution eg:play "/home/jmv/Musique/The Beatles - Help!/13 - The Beatles - Yesterday.mp3" .

{ eg:execution eg:play ?FILE .
} => {
       ?SystemExecution a java:deductions-runtime-SystemExecution ;
        javam:execute ( "mplayer" ?FILE )
} .

2011-12-15

TODO this crashes :

{ true } => {
java:Runtime javam:getRuntime ?RT .
?RT javam:exec ( "ls" ) .
} .

with stack:

N3Source.parseResult(): parseResult (file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/examples/exec_system.n3) was null ==> re-parse (and possibly re-read N3 source)
java.lang.NullPointerException
at eulergui.n3model.impl.StatementImpl.toString(StatementImpl.java:158)
at eulergui.n3model.impl.FormulaMutableImpl.toString(FormulaMutableImpl.java:57)
at eulergui.drools_engine.ParserLink.extractRDFList2(ParserLink.java:314)
at eulergui.drools_engine.StatementListHelper.setParserLink(StatementListHelper.java:30)
at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:639)

Actually this is not implemented.

For now, better add an ad-hoc class deductions.runtime.SystemExecution , with methods :

void execute( String... arguments);
Process getProcess();

The dot notation in Euler

<rszeno> try this:

 :george :mother :ana .
 :ana :friend :bob .
 :george.:mother.:friend :have :hair .

<jmvanel> note that Euler says :

 :george :mother :ana.
 :ana :friend :bob. 
 :friend :have :hair.

<jmvanel> my conclusion ( maybe too quick ) for now is that the dot notation in N3 is not really usable , because not enough defined

Where does Java Preferences API store stuff?

I know that Protégé stores its preferences using the Java Preferences API .

To see things more clearly, I ran the code from here :

http://www.vogella.de/articles/JavaPreferences/article.html#preferenceusage

And here is where data ended :

 % grep --recursive Europa  ~/.java/.userPrefs/
/home/jmv/.java/.userPrefs/_!(@!a!"y!'8!dw"f!'%!dw"h!(k!.g"@!()!~@"m!'`!cg"l!'4!}w"l!&@!~@"z!(@=/prefs.xml:   <entry key="Test2" value="Hello Europa"/>

So , we have completely cryptic storage location, OS dependent and in XML .

On the other hand, we have N-Triples, a nice format for objects graphs, such that concatenation of files is possible.

The use case that is not covered by the Java Preferences API is : I want to export my settings on another machine .

This is typical of how computer guys are thinking that they can manage the user data their way. And this time it's not exactly the typical case of the commercial software vendor who tries to lock in its users. It's an Open Source library.

<rszeno> we need to be strong and fight against evil. :)

Troubles starting Protégé from another OS

I had to manually remove the Fact++ jar from plugins/ directory.

Error 1 Logged at Thu Dec 15 14:44:10 CET 2011
OWLRuntimeException: java.lang.UnsatisfiedLinkError: /tmp/ProtegeCache-89db9e98-1848-4772-8f87-73a56fbc2218/bundle13/version0.0/bundle.jar-lib/0/lib/native/64bit/libFaCTPlusPlusJNI.so: /usr/lib/libstdc++.so.6:
  version `GLIBCXX_3.4.14' not found (required by  
  /tmp/ProtegeCache-89db9e98-1848-4772-8f87-73a56fbc2218/bundle13/version0.0/bundle.jar-lib/0/lib/native/64bit/libFaCTPlusPlusJNI.so)
    uk.ac.manchester.cs.factplusplus.protege.FaCTPlusPlusFactory.getReasonerFactory(Unknown Source)
    org.protege.editor.owl.model.inference.ReasonerInfoComparator.compare(ReasonerInfoComparator.java:9)
    org.protege.editor.owl.model.inference.ReasonerInfoComparator.compare(ReasonerInfoComparator.java:5)
    java.util.TimSort.countRunAndMakeAscending(TimSort.java:329)
    java.util.TimSort.sort(TimSort.java:189)
    java.util.TimSort.sort(TimSort.java:173)
    java.util.Arrays.sort(Arrays.java:659)
    java.util.Collections.sort(Collections.java:217)
    org.protege.editor.owl.model.OWLWorkspace.rebuildReasonerMenu(OWLWorkspace.java:500)

2011-12-14

My RythmBox radio stations, etc , are in :

$HOME/.local/share/rhythmbox/rhythmdb.xml

EulerGUI: misc

TODO

MPEG7.owl cached here : tmp rule file is present but the button is grey ; no OWL tree

http://swoogle.umbc.edu/index.php?option=com_frontpage&service=search&queryType=search_swd_ontology&searchString=melody&searchStart=11&searchSortField=

mvn versions:display-plugin-updates
 ...
[INFO] The following plugin updates are available:
[INFO]   maven-surefire-plugin .................................. 2.10 -> 2.11
[INFO]   maven-surefire-report-plugin ........................... 2.10 -> 2.11
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   emma:maven-emma-plugin ................................. (unknown)

mvn versions:display-dependency-updates
 ...
[INFO] The following dependencies in Dependencies have newer versions:
[INFO]   commons-logging:commons-logging ......... 1.0.4 -> 99.0-does-not-exist
[INFO]   jline:jline ............................................ 0.9.94 -> 1.0
[INFO]   junit:junit ............................................ 4.8.2 -> 4.10
[INFO]   org.drools:drools-compiler ................ 5.3.0.Final -> 5.3.1.Final

COMMITS:

notation "@" + language was lost when populating Triple objects :

previous commit was bad, the language information has to be kept apart from the string.

TODO test builtin log:dtlit ; probably field Triple.object is not used anymore

- implement static method calls in N3 / Drools engine ; tested in BasicRuntimeTest with this triple in consequent :

java:java-lang-System javam:setProperty ( "JimiHendrix" "guitar virtuoso" ) .

missing N3 prefixes are now added in N3 shell (through prefix.cc)

tested with

:a doap:foo "bla" .

2011-12-13

COMMIT: notation "@" + language was lost when populating Triple objects

TODO :add datatype for numbers, booleans

TODO: missing prefix are corrected in N3 shell

2011-12-12

COMMIT : better error message ( and app. not blocking ) when opening from command line a file.owl actually containing some N3 .

Notes after visiting Drools users

In Lyon.

The use case is to check each patient record (in batch) for errors. Currently they have a pure Java implementation.

They consider using Drools for the next version.

Using EulerGUI framework allows to directly state rules in ATTEMPTO.

What remains to develop by hand is to populate each patient record in RDF triples, preferably using one of the often used patient record vocabularies (TODO search patient record vocabularies).

Then use one of the examples in EG (TODO link).

Sent :

The main presentation:

http://jmvanel.free.fr/presentations/connaissances_DL_CNL_regles.xhtml

The source code for Jemmy based applicative tests:

https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/test/java/eulergui/gui

The presentation about using ATTEMPTO for entering OWL ontologies:

http://jmvanel.free.fr/presentations/pres-owl-anglais-controle.odp

The EulerGUI user manual:

http://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/html/documentation.html

The EulerGUI 1.9 snapshot ( recommended ) :

http://eulergui.sourceforge.net/tmp/

2011-12-11

TODO in EulerGUI before release 1.9

See TODO in EulerGUI before release 1.9

remove insertlogical for project main query

All these test errors are not reproduced in eclipse :(

Tests in error: 
  testProjectFromURL(eulergui.project.TestProject)
  test_foaf_import2(eulergui.gui.TestGenericGuiGenerationInsertLogical): Wait JLabel with text "gender" loaded
  testAddNewSPARQL(eulergui.gui.TestSPARQLInGUI)

Tests run: 177, Failures: 1, Errors: 3, Skipped: 0

[ERROR] There are test failures.
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16:02.343s

http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=549429

2011-12-08

TODO: why does this fail ? Calling a Java method though N3 consequent when expected Java argument is a String , but provided argument is a resource is probably not implemented.

{       ?L :alert "true"
        # ; log:uri ?LL .
} => {  :application :displayAlert ?L . }.

{ :application :displayAlert ?LL .
} => { 
  ?F a java:eulergui-gui-TemporaryFrame
  ; javap:localizedMessage ?LL .
}.

EulerGUI: regressions introduced by N-Triples parser

FIX most of the test suite, after regressions introduced by N-Triples parser

With N-Triples files, or any big N3, EG does not use the triples kept in a List to feed the Drools KB.

TODO fix: Tests in error:

testRemoteImportSwrlWithDrools(eulergui.gui.TestImportSwrl): Frame Title Component Chooser "jEdit.*.as.rules.n3.*"

==> not reproduced in eclipse

testAddNewSPARQL(eulergui.gui.TestSPARQLInGUI): Frame Title Component Chooser ".*new_source.rq.*"

==> test uncomplete

testOWLReasoner(eulergui.gui.TestGenericGuiGeneration): Wait next node loaded under parent [eulergui.tools.FilteredTreeNode@325ea79c] when requested was [ http://protege.stanford.edu/plugins/owl/owl-library/koala.owl#Animal ]

==> new error, seems unrelated to recent changes

[INFO] Total time: 16:25.403s

Loading musicbrainz in Jena TDB

After Andy's response, I raised the memory.

With 2.9Mb heap space :

Add: 41 500 000 Data (Batch: 125 / Avg: 3 050)
  Elapsed: 13 602,71 seconds [2011/12/08 02:13:07 CET]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space
        at java.nio.DirectByteBuffer.asIntBuffer(DirectByteBuffer.java:720)

2011-12-07

hg clone http://dig.csail.mit.edu/hg/tabulator/

TempWeb 2012 : 2nd Temporal Web Analytics Workshop

http://www.wikicfp.com/cfp/servlet/event.showcfp?eventid=19844&copyownerid=2

Getting started on making iTunes plugins?

http://forums.ilounge.com/third-party-software-mac-pc/247656-getting-started-making-itunes-plugins.html

http://drobilla.net/software/serd/

Serd is a lightweight C library for RDF syntax which supports reading and writing Turtle and NTriples. Serd is not intended to be a swiss-army knife of RDF syntax, but rather is suited to resource limited or performance critical applications, or situations where a simple reader/writer with minimal dependencies is ideal

http://www.ldodds.com/foaf/foaf-a-matic

http://presbrey.mit.edu/

-------------------------------

Subscribed to the new (Apache) mailing list:

http://incubator.apache.org/jena/help_and_support/index.html

whose archive is here : http://mail-archives.apache.org/mod_mbox/incubator-jena-users/

[jena-dev] tdbloader2 OutOfMemoryException with large files

GdMap (Graphical Disk Map)

not bad, useful and showy : GdMap (Graphical Disk Map)

SYNOPSIS

[-f dir|--folder=dir]

DESCRIPTION

GdMap is a tool to display disk space using tree maps.

And , guess what ? the largest part is tdb_data : 8Gb .

2011-12-06

http://www.linuxjournal.com/users/dave-phillips?page=6

http://www.wikicfp.com/cfp/servlet/event.showcfp?eventid=19844&copyownerid=2

Edit MP3 metadata

http://www.id3.org/Implementations indeed interesting; there are 3 Java libs , but are they 100% Java ? not sure ...

<jmvanel> http://www.id3.org/Implementations indeed interesting; there are 3 Java libs , but are they 100% Java ? not sure ...

<jmvanel> https://github.com/mpatric/mp3agic#readme this one is 100% Java

<jmvanel> http://java.net/projects/jaudiotagger/ : has many Tags: tagger, mp3, mp4, id3, flac, ogg, music

<jmvanel> since it comes from Oracle :( , it should be 100% Java , but there is no doc. on the site .

<rszeno> this is new wave, if is hard to write it must be also hard to use it, :)

<jmvanel> :)

<jmvanel> This one has a GUI, and even a doc in French : http://entagged.sourceforge.net/index.php#news , BUT last release is 2008

searched "edit MP3 metadata linux"

http://tldp.org/HOWTO/MP3-HOWTO-13.html

sudo apt-get install mp3info id3

Work with DOAP

<jmvanel> Some DOAP wiki stuff is roten with spam : http://trac.usefulinc.com/doap/wiki/Generators

http://crschmidt.net/semweb/doapamatic/ : alas this creates an XML file that is not RDF:

<Project xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#" xmlns="http://usefulinc.com/ns/doap#" xmlns:foaf="http://xmlns.com/foaf/0.1/" xmlns:admin="http://webns.net/mvcb/">
 <name>EulerGUI</name>
 <shortname>Lecteur musical sémantique</shortname>
 <description>Lecteur musical avec de fonctionalités avancées, utilisant les technologies du Web Sémantique</description>
 <programming-language>Java</programming-language>
 <programming-language>N3</programming-language>
 <maintainer>
  <foaf:Person>
     <foaf:name>Jean-Marc Vanel</foaf:name>
     <foaf:homepage rdf:resource="http://jmvanel.free.fr/"/>
     <foaf:mbox_sha1sum>47554e5293b708f607dbdba7eb4f8017a4b298e9</foaf:mbox_sha1sum>
  </foaf:Person>
 </maintainer>
</Project>

http://crschmidt.net/semweb/doapamatic/?name=Lecteur+musical+s%C3%A9mantique+de+Taxochronos&shortname=Lecteur+musical+s%C3%A9mantique&description=Lecteur+musical+avec+de+fonctionalit%C3%A9s+avanc%C3%A9es%2C+utilisant+les+technologies+du+Web+S%C3%A9mantique&shortdesc=&homepage=&wiki=&download-page=&download-mirror=&bug-database=&category=&langs=Java%2C+HTML5%2C+Ada%2C+OWL%2C+SWRL%2C+N3&os=&maint_name=Jean-Marc+Vanel&maint_homepage=http%3A%2F%2Fjmvanel.free.fr%2F&maint_mbox=jeanmarc.vanel%40gmail.com&dev_name=&dev_homepage=&dev_mbox=&helper_name=&helper_homepage=&helper_mbox=&repos=&repos_browse=&repos_location=&repos_module=&repos_anon=

Problems with EulerGUI

TODO : 2 problems with foaf_import2.n3p : generated form has no datatype properties; message "not all is saved"

cd src/deductions/n3_nojs/ ; eg person-app.n3p 
 ...
ParserLink.parse(): n3ParseResult.isInError: file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/deductions/n3_nojs/person-app.n3
ParserLink.parse(): LineNumber: 14 : 1
Exception in thread "doN3SourceAdded: person-events.n3" java.lang.RuntimeException: Erreur pendant  re-parsing N3 source "person-events.n3"
        at eulergui.project.N3Source.manageParseN3(N3Source.java:430)
        at eulergui.project.N3Source.update(N3Source.java:378)
        at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:121)
        at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)
Caused by: java.lang.NullPointerException
        at net.sf.parser4j.parser.service.Parser.shiftByToken(Parser.java:797)
        at net.sf.parser4j.parser.service.Parser.parse(Parser.java:397)
        at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:177)
        at eulergui.drools_engine.ParserLink.doParse(ParserLink.java:150)
        at eulergui.drools_engine.ParserLink.parse(ParserLink.java:113)
        at eulergui.project.N3Source.doParseN3(N3Source.java:477)
        at eulergui.project.N3Source.manageParseN3(N3Source.java:418)
        ... 3 more
Exception in thread "doN3SourceAdded: person-data.n3" java.lang.RuntimeException: Erreur pendant  re-parsing N3 source "person-data.n3"
        at eulergui.project.N3Source.manageParseN3(N3Source.java:430)
        at eulergui.project.N3Source.update(N3Source.java:378)
        at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:121)
        at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)
Caused by: net.sf.parser4j.parser.service.ParserException: java.io.IOException: Stream closed
        at net.sf.parser4j.parser.service.Parser.readTerminalValue(Parser.java:861)
        at net.sf.parser4j.parser.service.Parser.readTerminalValueAndParse(Parser.java:642)
        at net.sf.parser4j.parser.service.Parser.parse(Parser.java:387)
        at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:177)
        at eulergui.drools_engine.ParserLink.doParse(ParserLink.java:150)
        at eulergui.drools_engine.ParserLink.parse(ParserLink.java:113)
        at eulergui.project.N3Source.doParseN3(N3Source.java:477)
        at eulergui.project.N3Source.manageParseN3(N3Source.java:418)
        ... 3 more
Caused by: java.io.IOException: Stream closed
        at java.io.BufferedReader.ensureOpen(BufferedReader.java:115)
        at java.io.BufferedReader.read(BufferedReader.java:172)
        at net.sf.parser4j.parser.service.ParserFileReader.read(ParserFileReader.java:111)
        at net.sf.parser4j.parser.service.ParserInput.read(ParserInput.java:60)
        at net.sf.parser4j.parser.service.Parser.readTerminalValue(Parser.java:859)
        ... 10 more

Dialog on foaf IRC

<nevali> (specifically, it's a URI to the agent as a *thing*, not the document describing the agent)

<jmvanel> I use this : http://jmvanel.free.fr/jmv.rdf#me

<jmvanel> I guess it's classical

<nevali> I'd steer clear of having e.g., '.rdf' or '.html' or similar if you can possibly avoid it; it won't always preclude content negotiation, but it will make it more difficult

<nevali> remember that 'cool URIs don't change' still applies, so hiding technology choices = good

<jmvanel> nevali ; agree

<jmvanel> I use a stadard PHP + Apache free hosting , but I never took the time to learn how to do content negotiation on this server

<jmvanel> ( I could also use an XSLT stylesheet )

<jmvanel> so on content nego necessary

<jmvanel> so NO content nego necessary

* duck1123 est parti (Ping timeout: 240 seconds)

<nevali> not ever?

* nevali goes back to the "don't change" bit

<nevali> on Apache it's "Options MultiViews" in your .htaccess, at a pinch

<nevali> (or Options +MultiViews, even)

<nevali> jmvanel: some background, in the event that it's helpful -- http://httpd.apache.org/docs/2.0/content-negotiation.html

Loading musicbrainz in TDB

musicbrainz dump in N-Triples is BIG !!!

 % ls -l  musicbrainz_ngs_dump.rdf.ttl 
-rw-r--r-- 1 jmv jmv 25719386678 16 juin  14:58 musicbrainz_ngs_dump.rdf.ttl

 % time wc musicbrainz_ngs_dump.rdf.ttl
  178995221   829703178 25719386678 musicbrainz_ngs_dump.rdf.ttl
wc musicbrainz_ngs_dump.rdf.ttl  710,46s user 20,37s system 94% cpu 12:50,43 total

Add: 36 000 000 triples (Batch: 204 / Avg: 4 740)
  Elapsed: 7 594,09 seconds [2011/12/05 23:16:31 CET]
Exception in thread "main" java.lang.OutOfMemoryError: Java heap space 
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNodeMgr.overlay(BPTreeNodeMgr.java:194)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNodeMgr.access$100(BPTreeNodeMgr.java:22)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNodeMgr$Block2BPTreeNode.fromByteBuffer(BPTreeNodeMgr.java:141)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNodeMgr.get(BPTreeNodeMgr.java:84)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNode.get(BPTreeNode.java:127)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNode.internalInsert(BPTreeNode.java:379)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNode.internalInsert(BPTreeNode.java:399)
        at com.hp.hpl.jena.tdb.index.bplustree.BPTreeNode.insert(BPTreeNode.java:167)
        at com.hp.hpl.jena.tdb.index.bplustree.BPlusTree.addAndReturnOld(BPlusTree.java:297)
        at com.hp.hpl.jena.tdb.index.bplustree.BPlusTree.add(BPlusTree.java:289)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableNative.accessIndex(NodeTableNative.java:133)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableNative._idForNode(NodeTableNative.java:98)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableNative.getAllocateNodeId(NodeTableNative.java:67)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableCache._idForNode(NodeTableCache.java:108)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableCache.getAllocateNodeId(NodeTableCache.java:67)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableWrapper.getAllocateNodeId(NodeTableWrapper.java:32)
        at com.hp.hpl.jena.tdb.nodetable.NodeTableInline.getAllocateNodeId(NodeTableInline.java:39)
        at com.hp.hpl.jena.tdb.nodetable.NodeTupleTableConcrete.addRow(NodeTupleTableConcrete.java:72)
        at com.hp.hpl.jena.tdb.store.bulkloader.LoaderNodeTupleTable.load(LoaderNodeTupleTable.java:112)
        at com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader$1.send(BulkLoader.java:203)
        at com.hp.hpl.jena.tdb.store.bulkloader.BulkLoader$1.send(BulkLoader.java:186)
        at org.openjena.riot.lang.LangTurtle.emit(LangTurtle.java:52)
        at org.openjena.riot.lang.LangTurtleBase.checkEmitTriple(LangTurtleBase.java:475)
        at org.openjena.riot.lang.LangTurtleBase.objectList(LangTurtleBase.java:341)
        at org.openjena.riot.lang.LangTurtleBase.predicateObjectItem(LangTurtleBase.java:273)
        at org.openjena.riot.lang.LangTurtleBase.predicateObjectList(LangTurtleBase.java:254)
        at org.openjena.riot.lang.LangTurtleBase.triples(LangTurtleBase.java:245)
        at org.openjena.riot.lang.LangTurtleBase.triplesSameSubject(LangTurtleBase.java:206)
        at org.openjena.riot.lang.LangTurtle.oneTopLevelElement(LangTurtle.java:34)
        at org.openjena.riot.lang.LangTurtleBase.runParser(LangTurtleBase.java:132)
        at org.openjena.riot.lang.LangBase.parse(LangBase.java:71)
        at org.openjena.riot.RiotReader.parseTriples(RiotReader.java:85)

tdbloader --loc ~/tdb_data musicbrainz_ngs_dump.rdf.ttl  4380,35s user 111,88s system 47% cpu 2:39:01,08 total

<jmvanel> Of course I can reload with more memory , but I need to understand better what TDB does while loading

<jmvanel> apparently it populates a bplustree in memory while loading .

<jmvanel> Does it also happen in normal functionning ?

<jmvanel> I mean for querying ?

<jmvanel> I have to read the doc.

<jmvanel> If it's just a matter of splitting before loading, the tool should do it itself .

Thread on Jena list "tdbloader2 OutOfMemoryException with large files" :

http://mail-archives.apache.org/mod_mbox/incubator-jena-users/201101.mbox/%3C09B0A458D613784BBE4D6B174404BCF22149C4@008-AM1MPN1-023.mgdnok.nokia.com%3E

musicbrainz_ngs_dump.rdf.ttl has a lot of redundancy :

_:AmapX3aXTrackX40XX40X9563759 <http://purl.org/dc/terms/title> "Head Like a Hole" .
_:AmapX3aXTrackX40XX40X9563759 <http://www.w3.org/2000/01/rdf-schema#label> "Head Like a Hole" .
_:AmapX3aXTrackX40XX40X9563783 <http://purl.org/dc/terms/title> "Head Like a Hole" .
_:AmapX3aXTrackX40XX40X9563783 <http://www.w3.org/2000/01/rdf-schema#label> "Head Like a Hole" .
_:AmapX3aXTrackX40XX40X9563856 <http://purl.org/dc/terms/title> "Head Like a Hole" .
_:AmapX3aXTrackX40XX40X9563856 <http://www.w3.org/2000/01/rdf-schema#label> "Head Like a Hole" .

2011-12-05

musicbrainz links

http://musicbrainz.org/doc/LinkedBrainz

http://musicbrainz.org/doc/MusicBrainz_Database#Data_Overview

http://musicbrainz.org/doc/Development

http://musicbrainz.org/doc/Projects

http://linkedbrainz.c4dmpresents.org/content/rdf-dump

http://musicbrainz.org/doc/Database_Schema

wget http://linkedbrainz.c4dmpresents.org/data/musicbrainz_ngs_dump.rdf.ttl.g 12,13s user 69,82s system 3% cpu 41:53,27 total

Indexing dbPedia stuff with TDB

<jmvanel> trying TDB for future integration in EulerGUI

<jmvanel> again using most iof downloaded dbPedia

<jmvanel> querying 300 triples about dbpedia-owl:MusicalWork takes 2 seconds

<jmvanel> however the bulk loading took 10mn :( .

<jmvanel> for a total of 9276183 triples

<jmvanel> these 2s are without doing any configuration

<jmvanel> and this includes some overhead and writing on the console, that we would NOT have in a real application .

time tdbquery --loc ~/tdb_data  --query=dbpedia-large-query2.sparql 
 ...
1,92s user 0,08s system 135% cpu 1,469 total

% cat dbpedia-large-query2.sparql 
PREFIX dbpedia: <http://dbpedia.org/resource/>
prefix dbpedia-owl: <http://dbpedia.org/ontology/>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT {
  ?SONG ?p ?v .
}
WHERE {
  # ?SONG a dbpedia-owl:Song
  ?SONG a dbpedia-owl:MusicalWork
        ;?p ?v .
} LIMIT 300

For just 10 triples:

tdbquery --loc ~/tdb_data --query=dbpedia-large-query2.sparql 1,96s user 0,11s system 131% cpu 1,574 total

For just 10 triples with SELCT :

tdbquery --loc ~/tdb_data --query=dbpedia-large-query2-select.sparql  1,96s user 0,14s system 128% cpu 1,632 total

This was on Debian with java version "1.7.0" :

Load: /home/jmv/ontologies/dbpedia/images_en.nt -- 2011/12/05 16:32:32 CET
 ...
Add: 1 950 000 Data (Batch: 34 940 / Avg: 29 776)
ERROR [line: 1999931, col: 76] illegal escape sequence value: L (0x4C)
Exception in thread "main" org.openjena.riot.RiotException: [line: 1999931, col: 76] illegal escape sequence value: L (0x4C)
        at org.openjena.riot.ErrorHandlerFactory$ErrorHandlerStd.fatal(ErrorHandlerFactory.java:110)
        at org.openjena.riot.lang.LangBase.raiseException(LangBase.java:201)
        at org.openjena.riot.lang.LangBase.nextToken(LangBase.java:148)
        at org.openjena.riot.lang.LangNTriples.parseOne(LangNTriples.java:57)
        at org.openjena.riot.lang.LangNTriples.parseOne(LangNTriples.java:21)
        at org.openjena.riot.lang.LangNTuple.runParser(LangNTuple.java:58)
        at org.openjena.riot.lang.LangBase.parse(LangBase.java:71)
        at org.openjena.riot.RiotLoader.readTriples(RiotLoader.java:196)
        at com.hp.hpl.jena.tdb.store.bulkloader2.CmdNodeTableBuilder.exec(CmdNodeTableBuilder.java:151)
        at arq.cmdline.CmdMain.mainMethod(CmdMain.java:85)
        at arq.cmdline.CmdMain.mainRun(CmdMain.java:47)
        at arq.cmdline.CmdMain.mainRun(CmdMain.java:34)
        at com.hp.hpl.jena.tdb.store.bulkloader2.CmdNodeTableBuilder.main(CmdNodeTableBuilder.java:67)

It seems that this file is indeed wrong. Restarted without this file :

 17:21:41 -- TDB Bulk Loader Finish
 17:21:41 -- 657 seconds
bin/tdbloader2 --loc ~/tdb_data ~/ontologies/dbpedia/*.nt  597,65s user 17,78s system 93% cpu 10:56,63 total

This was on Ubuntu 11.10 :

cd ~/src/TDB-0.8.10
time bin/tdbloader2 --loc ~/tdb_data ~/ontologies/dbpedia/*.nt
...
Total: 2 700 909 tuples : 145,36 seconds : 18 581,34 tuples/sec [2011/12/03 19:47:35 CET]
19:47:35 Index phase
19:ent47:35 Index SPO
19:48:56 Build SPO
19:49:08 Index POS
19:52:34 Build POS
19:52:46 Index OSP
19:55:04 Build OSP
19:55:20 Index phase end
19:55:20 -- TDB Bulk Loader Finish
19:55:20 -- 617 seconds

real10m16.407s
user10m4.298s
sys0m15.457s

2011-12-01

Discussion with conan

<conan> jmvanel: did you mean to use insertLogical?

<jmvanel> yes

<conan> this seems like an ugly way to do queries

<jmvanel> I could avoid it for such large files

<jmvanel> once you said that insertLogical is quick as insert ....

* jgraham (~jgraham@c-98-229-161-190.hsd1.ma.comcast.net) a rejoint #drools

<jmvanel> but I guess the memory is higher

* ge0ffrey est parti ("http://blog.athico.com/search/label/planner")

* bdavis1 (~bdavis@75.103.6.58) a rejoint #drools

* ualtin est parti (Client closed connection)

* bdavis est parti (Ping timeout: 20 seconds)

<conan> jmvanel: few mins, in a call.

* wilmoore (~wilmoore@70-89-165-49-ISTS-co.hfc.comcastbusiness.net) a rejoint #drools

<conan> jmvanel: also I think there are better ways to do these queries

<jmvanel> eager to know more

<jmvanel> conan :)

* sotty (~sotty@dida132.deis.unibo.it) a rejoint #drools

<conan> jmvanel: gonna be a while longer

<conan> jmvanel: but in sort we now do prolog style derivation queries

<jmvanel> ok ; an article to read about ?

<jmvanel> or a code sample

<conan> http://pastebin.com/xiPsSukV

<conan> oops

<conan> http://drools.46999.n3.nabble.com/Call-query-from-other-query-td3542082.html

<conan> better

<conan> some relevant links in there

<conan> to my reply to someone asking same hting

<conan> I don't think you need materialised views for your stuff

<conan> so just use ?

<conan> jmvanel: prolog doesn't haev materialised views

<conan> jmvanel: materialised view is turning a query such htat it is effectively a long lived table

<conan> any changes to the underlying ground terms

<conan> is incrementally reflected inthe materialised view results

<jmvanel> ok , thynaks

<conan> if you use ?

<conan> its a lighter wait query

<jmvanel> that is an alternative to queries, but more powerful

<conan> and works like prolog

<conan> materialised views are obviously heavier

<conan> not an alternative

<conan> it's just a normal query

<conan> if you leave off the ?

<conan> it materialises

<jmvanel> reading the mailing list you gave the link ...

<conan> docs are still ab it shallow

<conan> http://docs.jboss.org/drools/release/5.3.0.Final/drools-expert-docs/html/ch05.html#d0e6233

<conan> hmm the formatting looks screwed too

<conan> "As previously mentioned you can use live "open" queries to reactively receive changes over time from the query results, as the underlying data it queries against changes. Notice the "look" rule calls the query without using '?'."

<conan> is in the docs

<conan> we callled it "live open query"

<conan> I'll update it to say materialised views too

* jgraham est parti (Client closed connection)

<jmvanel> so, "live open query" == "materialised views" in newer denomination ?

<conan> yes

<conan> but might go back to using materialised view

<conan> or just use both :)

<conan> jmvanel: if you look at the isContainedIn example

<conan> that shows a traditional prolog transitive closure over a graph

<conan> and it shows it used in two ways

<conan> one normal and one materialised

<conan> jmvanel: tbh I'm not ensure sure what that rule you ahve is doing

<conan> so it finds all Triples and binds to th $SONG to the subject

<conan> so it's finding all song's for the MusicalWork

<conan> oh hang on

<conan> oh hang on

<conan> yes I get what you are doing now

<conan> sotty: he adds the rule

<conan> and the rule inserts all results as an object itself

<conan> he does it logically

<conan> such that when the rule is removed

<conan> the results are removed

<conan> jmvanel: no wonder that was so bad

<conan> jmvanel: your example there could have been done with a simple query

<conan> you never needed a rule

<conan> jmvanel: doesn't even need the new deriviation tree stuff

<conan> jmvanel: http://pastebin.com/9giU1iz4

<conan> that's all you needed

<sotty> yes

<sotty> what worries me

<sotty> is that if he had a rule such as

<sotty> ( X, "type", "MusicalObject" ) ---> ( X, "type", "SomeMoreGeneralEntity" )

<sotty> i.e. a triple inference rule

<sotty> would the performance issues have been the same?

<jmvanel> conan, I knew that a simple query would fit ; this rule I showed you is a remnant of the very begining of the project .

<conan> jmvanel: ok I'm confused

<conan> jmvanel: what's the problem

<jmvanel> I have to test this of course

<conan> why would you not want to use a query?

<conan> inserting stuff like you did with logical insertions for all results

<conan> is going to be painfully heavy

<jmvanel> it's fine with me , using query

<conan> ok

<conan> jmvanel: you should find this order of magnitudes lighter :)

<conan> sotty: no tsure of the issue you mean

<jmvanel> my initial question is this thread was : can I enhance the CPU and mem consumption ?

<conan> no

<conan> jmvanel:just please don't publish stuff showing "how bad drools is" using the example you pasted, compard to a standard prolog query.

<conan> wouldn't be fair

<jmvanel> no, don't worry :) I suspect that using insertLogical take more memory , no ?

<conan> yes

<conan> jmvanel: its a little more efficient in 5.2

<conan> but you are still like tripling the number of objects

<sotty> jmvanel: using drools to do massive triple processing might not be the best of ideas

<conan> because it needs to setup bi-direction and multi-dimensional lists.

<sotty> especially if massive triple processing is the ONLY thing you need to do

<conan> sotty: I believe he's just trying to get his EULER tool to translate to different engines

<conan> sotty: not solve anythign specific

<conan> so it's a "best effort"

<sotty> I see

<conan> sotty: he has his own languaeg and ide, that should be able to target multiple engines for execution

<conan> drools is just one of many

<jmvanel> of course it's not the ONLY thing ; but trying to fix simple case first

<conan> jmvanel: tbh I'm very keen to see how far behind we are other engines

<conan> for triple based stuff

<conan> I'm not expecting ot compete with dedicated triple engines

<conan> but would be interesting to know how far behind we are

<conan> when doing a more apples to apples test

<conan> jmvanel: queries are in general ligher than rules too

<conan> while it's the same rete network

<conan> asl ong s you aren't using materialised views

<conan> we don't bother making a lot of data structures

<conan> we skip all left memory references etc

<jmvanel> "drools is just one of many engines" right, but it's very important for the project , because or stateful nature truth maintenance and Java integration :)

* jvanzyl (~jvanzyl@204.14.239.222) a rejoint #drools

<conan> jmvanel: btw we are looking into improving our TMS

<conan> jmvanel: read the book "building problem solvers"

<jmvanel> no

<conan> jmvanel: good summary here http://www.cis.temple.edu/~ingargio/cis587/readings/tms.html

<conan> jmvanel: anyway prd system TMS is actually only a partial TMS

<conan> jmvanel: it can only do "IN" it can't do "OUT" labelling

<conan> jmvanel: further more sotty wants multi value

<conan> whre IN and OUT become TRUE, FALSE and UNKOWN

<conan> at the moment we can only say TRUE

<conan> but the same si true for all PRD systems

<conan> jmvanel: eventually we'd like to look into be able to do not just JTMS, but also ATMS

<conan> ATMS is much more complex though, due to "multiple worlds"

<conan> jmvanel: but it's interesting stuff

<conan> jmvanel: so you are using drools in a real project?

<conan> http://books.google.co.uk/books/about/Building_problem_solvers.html?id=MraVKw_5g28C&redir_esc=y

<conan> jmvanel: can read a lot of the book from google

<jmvanel> ok

<jmvanel> ATMS == ?

<conan> assumption based truth maintenance system

<jmvanel> ok

<jmvanel> I'll have a look

<conan> jmvanel: all inserted onjects that are not logical justified are called "assumptions"

* ualtin (~ualtin@s15231105.onlinehome-server.info) a rejoint #drools

<conan> jmvanel: a set of assumptions is called an environment or a world

<jmvanel> ok

<conan> jmvanel: ATMS allows you to setup multiple sets of assumptions

<conan> it's sorta like having 1...n ksessions each with an initial different set of assumptions (stated insertions)

<conan> the TMS (logical based and justified insertions) is then shared across those environments/worlds

<conan> jmvanel: the basic idea is you use TMS to help drive your search

<conan> but if you have to keep undoing/reseting your current environemtn

<conan> to try different search paths, it gets expensive

<conan> so why not do those in paralle

<conan> parallel

<conan> jmvanel: http://citeseer.ist.psu.edu/viewdoc/summary?doi=10.1.1.84.2778

<jmvanel> you mean at the app level managing several KB in parallel ?

<conan> jmvanel: this was the sort of thing they built into the CM over at Thinking Machines

<conan> back in te early 90s

<conan> jmvanel: not several KBs

<conan> several ksessions

<conan> jmvanel: imagine you have different data sets, you aren't sure which data gives you the result. you have to in turn create a derivation tree for one configuration of data. then you do it for another configuration

<conan> the peformance would kill

<conan> so TMS is a way to incrementally search through your derivation tree

<conan> ATMS is a way to do that in parallel

<conan> and in a way that one world can learn from the other wrold

<conan> to avoid doing wasted work, subsumption etc

<conan> jmvanel: but, tbh, i'm still learning this stuff

<conan> jmvanel: I don't explain it hat well. a lot of ATMS still escapes me, especially about exactly how to do the directed back trackking.

<jmvanel> anyway , I now have a costumer with a concrete app to develop , a semantic media player

<conan> awesome

<conan> jmvanel: if you are using drools

<conan> jmvanel: don't hesitate to ask for our help

<conan> especially if you can give back performance information and issues

<conan> so we can better focus our efforts

<jmvanel> yeah , Drools in my best option , I hope to manage about 100 000 songs, each with about 10 properties .

<conan> jmvanel: out of interest, why dorols and not say pellet?

<conan> you need reactiveness?

<jmvanel> hopefully in memory

<jmvanel> yes

<conan> jmvanel: what are your plans for high availabilty

<conan> that is something we don't really help with "out of the box"

<conan> there are things you can cook yourself, for redundancy

<conan> and actually it wouldn't be too hard to tweak the engine to make that cleaner

<conan> but depends on ho much time you have and your requirements

<jmvanel> pellet has a bas reputaiton for scalability , and we have 2 ways to reuse OWL ontos as rules

<conan> jmvanel: how much of what you do is under NDA?

<conan> jmvanel: I would suggest you use our latest trait stuff too

<conan> jmvanel: if you can share, atleast privately with davide and I.

<conan> jmvanel: we'll try and direct you

<conan> specially if you could write up the results in a case study

<jmvanel> yeah , you're right I should not sayy too publicly

<jmvanel> too muxh

<sotty> jmvanel : yup, we're trying to build better support to ontologies, in many ways

<conan> jmvanel: ok maybe skype?

<conan> jmvanel: we can setup a skype IM and you davide and I can discuss there.

<jmvanel> anyway the genric parts are and will be in EulerGUI on sf.net

<conan> jmvanel: we are really keen to start getting some real world applicatino of our new Trait/Tiple capabiliity.

<jmvanel> I'm jmvanel1 on skype

<conan> ok sent

<sotty> gtg, I'll be back in 1hr

<conan> sotty: ok

<conan> jmvanel: for instance your triples

<conan> I assume they map to Things?

* sotty est parti ("Ex-Chat")

<conan> jmvanel: lets continue this on IM

<jmvanel> I 've read the article Trait/Triple capabiliity , but my point is that I don't need the OO stuff at all , because the data are semweb data

<jmvanel> ok

<conan> jmvanel: Trait/Triple is for workign with semweb

[19:33:20 CEST] Mark Proctor: so I'm really keen to help you here

[19:33:29 CEST] Mark Proctor: so we can figure out exactly what we can do to improve drools

[19:33:34 CEST] Mark Proctor: for triple based problems

[19:33:52 CEST] Mark Proctor: so looking at data sets, at models and some of the basic query/rules you need

[19:33:54 CEST] Mark Proctor: would really hepl

[19:33:55 CEST] Mark Proctor: hepl

[19:33:57 CEST] Mark Proctor: help

[19:33:59 CEST] Mark Proctor: :)

[19:35:27 CEST] Jean-Marc Vanel: i m here

[19:37:21 CEST] Jean-Marc Vanel: one question I have , when many triples share a same subject string , could Drools store a single instance of the String ?

[19:39:28 CEST] Mark Proctor: good point

[19:39:31 CEST] Mark Proctor: it doesn't now

[19:39:37 CEST] Mark Proctor: but it is something I've thought about

[19:39:45 CEST] Mark Proctor: basically string internalisation

[19:39:51 CEST] Mark Proctor: for large systems, it can make a difference

[19:40:13 CEST] Mark Proctor: tbh, at hte moment hte best way to do this is some interceptor

[19:40:24 CEST] Mark Proctor: you will basically making a hashmap of strings

[19:40:40 CEST] Mark Proctor: and a listener will swap the string for the internalised one

[19:40:46 CEST] Jean-Marc Vanel: some interceptor , OK

[19:40:50 CEST] Mark Proctor: you can either do that your side

[19:40:53 CEST] Mark Proctor: before it goes into the engine

[19:40:58 CEST] Jean-Marc Vanel: :)

[19:41:00 CEST] Mark Proctor: or you can write a working memory listener

[19:41:06 CEST] Mark Proctor: and go to the on insert method

[19:41:09 CEST] Mark Proctor: caste

[19:41:10 CEST] Mark Proctor: and set the field

[19:41:15 CEST] Mark Proctor: as long as the field is the same value

[19:41:22 CEST] Mark Proctor: you won't break the integrity of the engine

[19:41:22 CEST] Jean-Marc Vanel: that's one of the things Prolog engine do

[19:41:47 CEST] Mark Proctor: we could do this for objects created or inserted inside of the engine itself

[19:41:55 CEST] Mark Proctor: but it's hard for objects provided to us

[19:42:02 CEST] Mark Proctor: would be expensive

[19:42:08 CEST] Mark Proctor: as we would have to introspect

[19:42:17 CEST] Mark Proctor: and we don't konw if it's worth it or not

[19:42:19 CEST] Mark Proctor: but thinking about it

[19:42:22 CEST] Mark Proctor: we could do this as a type declaration

[19:42:31 CEST] Mark Proctor: you could declare that some field to be internalised

[19:42:35 CEST] Mark Proctor: as long as it's directed

[19:42:39 CEST] Mark Proctor: we could then handle that ourselves

[19:42:41 CEST] Mark Proctor: good idea

[19:42:53 CEST] Jean-Marc Vanel: anyway the POJO for Drools are suppose to have no side effects if I understoofd well

[19:43:20 CEST] Mark Proctor: so we'd allow some @internalise attribute for a property

[19:43:29 CEST] Mark Proctor: we'd maintain a hashmap of all possible values

[19:43:49 CEST] Mark Proctor: and then on any insert/modify of that object type, make sure we only ever stored the same instance

[19:43:51 CEST] Mark Proctor: I like it :)

[19:43:58 CEST] Mark Proctor: quick to do too

[19:44:04 CEST] Jean-Marc Vanel: sounds good; I sure not the only user that could benefit of this

[19:44:12 CEST] Mark Proctor: no, definitely not

[19:44:16 CEST] Mark Proctor: we can do this for any value type

[19:44:23 CEST] Mark Proctor: that impelments equals/hashcode too

[19:44:26 CEST] Mark Proctor: no it's a great idea

[19:44:27 CEST] Jean-Marc Vanel: I hope to come in London in junuary ;

[19:44:38 CEST] Mark Proctor: I wouldn't want ot internalise all fields by default

[19:44:42 CEST] Mark Proctor: or it would be espensive

[19:44:45 CEST] Mark Proctor: but the user konws their data

[19:44:47 CEST] Jean-Marc Vanel: I could show you what I do with Drools :)

[19:44:49 CEST] Mark Proctor: and they'll konw if the cost is worth it

[19:44:59 CEST] Mark Proctor: I may be in india for january.....

[19:45:11 CEST] Mark Proctor: but hopefully we'll overlap

[19:45:15 CEST] Jean-Marc Vanel: w<hole january

[19:45:17 CEST] Jean-Marc Vanel: ?

[19:45:21 CEST] Mark Proctor: http://www.jboss.org/events/JUDCon/2012/india

[19:45:32 CEST] Mark Proctor: probably last two weeks

[19:46:16 CEST] Jean-Marc Vanel: : January 24-25, 2012

[19:46:31 CEST] Mark Proctor: yes

[19:46:37 CEST] Mark Proctor: so I'll leave around the 20th

[19:46:45 CEST] Jean-Marc Vanel: ok

[19:46:59 CEST] Jean-Marc Vanel: I'll adjust my plans and tell you :)

[19:47:16 CEST] Jean-Marc Vanel: my daughter is in London

[19:50:42 CEST] Mark Proctor: ok

[19:50:53 CEST] Mark Proctor: as i said, i'm very keen to see the type of queries you have and data.

[19:51:00 CEST] Mark Proctor: so if you can show anythign before then, if there is anything public, let me know.

[19:51:15 CEST] Jean-Marc Vanel: ok

[19:51:27 CEST] Mark Proctor: you seen the music example in tinkergraph?

[19:51:38 CEST] Jean-Marc Vanel: tinkergraph? no

[19:51:52 CEST] Mark Proctor: gemlin stuff

[19:52:02 CEST] Mark Proctor: it uses a large music data graph for it's examples

[19:52:08 CEST] Mark Proctor: concerts I think

[19:52:10 CEST] Mark Proctor: let me get it

[19:55:02 CEST] Jean-Marc Vanel: are you thinking of https://github.com/tinkerpop/rexster/wiki/Getting-Started/c4744ab524c447952dad1b122f10e75f6004b8a7

[19:55:05 CEST] Jean-Marc Vanel: ?

[19:55:28 CEST] Mark Proctor: yes

[19:55:45 CEST] Mark Proctor: http://www.slideshare.net/slidarko/gremlin-a-graphbased-programming-language-3876581

[19:55:57 CEST] Mark Proctor: so it uses a large public database for concerts

[19:56:00 CEST] Mark Proctor: to show off their language

[19:56:12 CEST] Mark Proctor: we are looking at how to better support the use cases of gremlin in drools

[19:56:16 CEST] Mark Proctor: like you can do all of that in drools now

[19:56:23 CEST] Mark Proctor: just the syntax is vebrose

[19:56:24 CEST] Mark Proctor: verbose

[19:56:36 CEST] Mark Proctor: so we need to better support graph traversal syntaxes, in a more succinct way.

[19:57:02 CEST] Mark Proctor: maybe do a blueprints implemetnation for drools too

[19:57:04 CEST] Mark Proctor: ok have to go

[19:57:31 CEST] Jean-Marc Vanel: thankls for sharing :)

[19:57:41 CEST] Mark Proctor: slide 40 onwards

[19:57:48 CEST] Mark Proctor: "grateful dead dataset"

[19:57:56 CEST] Jean-Marc Vanel: ok

[19:58:17 CEST] Mark Proctor: I think what gremlin does is an important area

[19:58:22 CEST] Mark Proctor: so we want to do it better

[19:58:30 CEST] Mark Proctor: make it easier for people to get intelligence out of their large datasets

[19:58:39 CEST] Mark Proctor: you can't always structure your data sets

[19:58:42 CEST] Mark Proctor: into nice class models

[19:58:47 CEST] Jean-Marc Vanel: sure

[19:58:48 CEST] Mark Proctor: and graphs are good for that

EulerGUI

GREAT NEWS! The EG framework, and its RETE Drools engine will be used for a semantic music player :) .

TODO in EulerGUI before release 1.9

Queries in memory with EulerGUI framework

COMMIT

FIX: N-Triples parser integration:

- fix running Drools engine using button (if there is one (or more) N-Triple in project, the Drools Working Memory is kept)

* introduce field N3SourcetoDrools.allFactSaved and overriden method N3Source.keepsParseResult()

- tested with test/n-triples.n3p

oem-laptop: ~/ontologies/dbpedia/ % wc *.nt
   6810605   27243025 1411607712 images_en.nt
   1393530    5574120  202144251 instance_types_fr.nt
    714810    3867894   86010767 labels_fr.nt
    678141   46994264  391474696 long_abstracts_fr.nt
   1290160    5720463  176762861 mappingbased_properties_fr.nt
   4504182   19447923  534018987 persondata_en.nt
    678141   29405251  268941781 short_abstracts_fr.nt
     17219      68876    2571593 specific_mappingbased_properties_fr.nt
  16086788  138321816 3073532648 total

Test project dbpedia-instance_types_fr.nt.n3p with instance_types_fr.nt ; opened in 3mn ( no feedback during loading ).

That's a milestone in the project !!!!!!!!!!!!!!!!!!!!!

 org.drools.reteoo.ReteooStatefulSession@5dfc35a6 1 392 525 objets sont actuellement dans la WorkingMemory.

It took 3 mn to load the N-Triples file, and about 1mn to run a simple query :

?SONG a dbpedia-owl:MusicalWork .

The total memory is 2.5 Gb :( .

The result size is 14448 triples .

Using instance_types_fr.nt from dbpedia downloads .

This is not wonderful , but it's the first time that EG is tested with such a large Knowledge Base *in memory* .

<rszeno> you can't make a test only with nxparser to see where it spend so much time?

<jmvanel> Sure, I can with one of the eclipse plugins like TPTP .

<jmvanel> However, I'm rather confident with NxParser ; during loading I suspect the calls to WorkingMemory.insert()

<rszeno> is better to be sure, :)

<rszeno> plus this could help to choose another strategy, to use nxparser in another way

<jmvanel> Yes. In fact I already have a test with triples created by program + Drools

<jmvanel> ( class N3DroolsEngineStressTest )

<rszeno> an example, is adding triples to kb one by one is slower then adding a group of triples, you can use a temporary array, smaller to collet the triples then to push the temp array content to kb

<rszeno> usualy adding is O(n), spliting the size could help

<jmvanel> I don't think so, from what know about Drools

<rszeno> :), as i said, is better to see, :)

<rszeno> if you have good profiling tool could be better

<rszeno> i mean if you can use a good profiler

<rszeno> internals things are always tricky, even for the one who write the code, drools, nxparser authors

<jmvanel> yes , you're right;

<jmvanel> but right now it would be quisker to ask Mark Proctor advices ; he knows enough of what we do with Drools

<jmvanel> quicker

<jmvanel> and he 's present :)

<rszeno> :)

<jmvanel> indeed there are methods like public Future asyncInsert(final Collection collection) {

<jmvanel> ( currently I use plain insert() )

<jmvanel> I also have to ask about possible settings to save memory .

<jmvanel> One thing to check is also if the memory depends strongly on the rules base , which I suspect

<jmvanel> because with class N3DroolsEngineStressTest , 1 000 000 triples and no rule is 500Mb , and with whole EG ( maybe memory lost somehere ? ) and dbpedia file , 1 400 000 triples and a single simple rule == 2.5 Gb , 5 times more .

<jmvanel> lots of stuff to check !

--------------------------

<conan> jmvanel: hi

<jmvanel> I tested a 1400 000 triples from dbPedia , with a single rule; my Triple clas is just 3 Strings , with equals retrun equals on all 3 ;

<jmvanel> It took 3 mn to load the N-Triples file, and about 1mn to run a simple query :

<jmvanel> ?SONG a dbpedia-owl:MusicalWork .

<jmvanel> The total memory is 2.5 Gb :( .

<jmvanel> The result size is 14448 triples .

<jmvanel> it's new tests and some new code, so it's possible that my code is wasting memory ;

<jmvanel> anyway I'd like to know about possible setting to enhance memory and CPU usage ; also would it be quicker to use asyncInsert(final Collection collection) instead of the plain insert() currently

2011-11-30

EulerGUI, the most popular Semantic Web rule engine GUI and fw ;) !!!!

http://www.jibble.org/pircbot.php - PircBot Java IRC Bot - The most popular Java IRC API

Had a look at http://code.google.com/p/rdfstores/ New directions for RDFStores

Said Zeno:

aho and ulman, theorem: is not posible to build a parser for a chomsky type 0 language

but anothothe theorem say that any chomsky type 0 language can be decompose in 2 chomsky type 2 languages and one isomorphism

that mean we can't build a parser but we can build 2,

on the other hand for any formal system can be in some condition build a production system for each axiom of the fs

that means a grammar for each

since translator is universal, the focus will be on grammars

EulerGUI: ontosem.owl bug, ...

EG is supposed to be robust enough to handle tiny machines

robust and smart through rules

TODO EulerGUI : provide a feedback when loading an N3 source; when querying with SPARQL

COMMIT : added N-triples parser , TODO test

<jmvanel> I have un bug unexplained : when dragging'drop http://morpheus.cs.umbc.edu/aks1/ontosem.owl from http://swoogle.umbc.edu/index.php?option=com_frontpage&service=search&queryType=search_swd_ontology&searchString=botany&searchStart=1

<jmvanel> I get the warning about memory insufficient ,

<jmvanel> but -Xmx is 2g , and using the same OWL donloaded manually , it works !

<jmvanel> strange and looks like a bug :(

2011-11-29

musicbrainz.org ==> download database

2011-11-28

http://webchat.freenode.net/

An interesting Euler test with large data and simple query

This is with instance_types_fr.nt, an N-Triples file downloaded from dbPedia here:

http://wiki.dbpedia.org/Downloads37

( look for "Ontology Infobox Types" )

The memory, measured with Ubuntu System Monitor, is, after "networking ..." message, 908Mb, and stays so. 100% of 1 CPU is consumed.

The first query has a 0 triple result:

@prefix dbpedia-owl: <http://dbpedia.org/ontology/> .
{
  ?SONG a dbpedia-owl:SONG
  ;?p ?v .
} => {
  ?SONG ?p ?v .
} .

And the output is :

oem-laptop: ~/ontologies/ % time eye instance_types_fr.nt --query dbpedia-large-query2.n3 > dbpedia-large-query2-result.n3
Id: euler.yap 4726 2011-11-17 16:55:18Z josd
YAP 6.2.2 (i686-linux): Wed Nov  2 01:09:06 CET 2011
starting 48 [msec cputime] 158 [msec walltime]
GET instance_types_fr.nt
GET dbpedia-large-query2.n3
networking 99510 [msec cputime] 158734 [msec walltime]
TC=0 TP=0 BC=0 BP=0 PM=0 CM=0 FM=0 AM=0
reasoning 1288 [msec cputime] 1294 [msec walltime]

eye instance_types_fr.nt --query dbpedia-large-query2.n3 >   156,84s user 2,53s system 98% cpu 2:41,61 total

The second query brings real results, and lasts much longer (already 50 mn at the time of writing, and I let it run ) :

@prefix dbpedia-owl: <http://dbpedia.org/ontology/> .
{
  ?SONG a dbpedia-owl:MusicalWork
  ;?p ?v .
} => {
  ?SONG ?p ?v .
} .

And the output is :

eye instance_types_fr.nt --query dbpedia-large-query2.n3 >   156,84s user 2,53s system 98% cpu 2:41,61 total
oem-laptop: ~/ontologies/ % time eye instance_types_fr.nt --query dbpedia-large-query2.n3 > dbpedia-large-query2-result.n3
Id: euler.yap 4726 2011-11-17 16:55:18Z josd
YAP 6.2.2 (i686-linux): Wed Nov  2 01:09:06 CET 2011
starting 36 [msec cputime] 48 [msec walltime]
GET instance_types_fr.nt
GET dbpedia-large-query2.n3
networking 99919 [msec cputime] 157977 [msec walltime] 
TC=86326 TP=260103 BC=0 BP=86702 PM=0 CM=0 FM=0 AM=0
reasoning 13714357 [msec cputime] 13796663 [msec walltime]

Some remarks:

Trying downloaded dbPedia files with EulerGUI

% wc instance_types_fr.nt
  1393530   5574120 202144251 instance_types_fr.nt

First, there a message saying that parsing and KB are deactivated, then jEdit stays a long time with message in bottom: "I/O: one operation in progress" , and 100% CPU consumption :( . Vim is much less greedy ! It only consumes 225Mb and opens in < 1s . EG should choose gvim when the file is large !

EulerGUI commits

COMMIT

FIX: EulerGUI was blocking and not showing GUI when no network and remote SPARQL query in project

also fixes the default directory for file chooser in this case and others

SPARQL issue: getting feedback in case of error

% bin/riot ~/src/eulergui/examples/BloodPressure.n3
ERROR [line: 8, col: 1 ] Not implemented

http://docs.openlinksw.com/virtuoso/rdfsparql.html

http://www.w3.org/TR/rdf-sparql-protocol/#SparqlQuery

http://www.w3.org/TR/sparql11-service-description/

My use case now is commenting out ?ARTIST ?p ?v , to try to get a meaningful message, like the Virtuoso web interface does .

prefix dbpedia-owl: <http://dbpedia.org/ontology/>
CONSTRUCT {
  ?ARTIST ?p ?v .
}
WHERE {
  ?ARTIST a dbpedia-owl:MusicalArtist . 
  # commented out to get an erroneous query (alas not flagged by ARQ)
  # ?ARTIST ?p ?v .
} LIMIT 50

http://dbpedia.org/sparql?query=PREFIX++dbpedia-owl%3A+%3Chttp%3A%2F%2Fdbpedia.org%2Fontology%2F%3E%0A%0ACONSTRUCT+%0A++%7B+%3FARTIST+%3Fp+%3Fv+.%7D%0AWHERE%0A++%7B+%3FARTIST+%3Chttp%3A%2F%2Fwww.w3.org%2F1999%2F02%2F22-rdf-syntax-ns%23type%3E+dbpedia-owl%3AMusicalArtist+%7D%0ALIMIT+++30%0A

http://jena.sourceforge.net/ARQ/arq-query-eval.html

Uncommenting ?ARTIST ?p ?v , and using the http://sparql.org/query-validator.html , it seems that Jena ARQ algebra does not take in account the CONSTRUCT part :

Algebra structure:

  1 (base <http://example/base/>
  2   (prefix ((dbpedia-owl: <http://dbpedia.org/ontology/>))
  3     (slice _ 50
  4       (bgp
  5         (triple ?ARTIST <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> dbpedia-owl:MusicalArtist)
  6         (triple ?ARTIST ?p ?v)
  7       ))))

2011-11-27

SPARQL in EulerGUI : no feedback that the query has run; no error messages when the query is wrong .

http://www.w3.org/TR/sparql11-query/

18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.ClassCastException: eulergui.tools.FilteredTreeNode cannot be cast to javax.swing.tree.DefaultMutableTreeNode
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.OwlClassHierarchyBuilder.editedClassURI(OwlClassHierarchyBuilder.java:438)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.OwlClassHierarchyBuilder.editedClassURI(OwlClassHierarchyBuilder.java:406)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.OwlClassHierarchyBuilder.classInfo(OwlClassHierarchyBuilder.java:387)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.OwlClassHierarchyBuilder.getToolTipText(OwlClassHierarchyBuilder.java:672)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.ComboTreeView$1.getToolTipText(ComboTreeView.java:33)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.ToolTipManager.checkForTipChange(ToolTipManager.java:589)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.ToolTipManager.mouseMoved(ToolTipManager.java:561)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at java.awt.AWTEventMulticaster.mouseMoved(AWTEventMulticaster.java:330)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at java.awt.Component.processMouseMotionEvent(Component.java:6549)
18:39:07 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.JComponent.processMouseMotionEvent(JComponent.java:3339)

Drools : trigger some Java code when an object is retracted

<jmvanel> is there a way to trigger some Java code when an object is retracted ?

<jmvanel> the answer to my previous question is in 4.3.5. Event Model :) http://docs.jboss.org/drools/release/5.3.0.Final/drools-expert-docs/html_single/index.html#d0e2003

<conan> jmvanel: we do want a better way to do that, rule based.

<conan> jmvanel: I want to start to expose the life cycle of rules, as listeners

<conan> so when a rule rematches, or unmatches you can execute code

<conan> jmvanel: I might put that into the next 5.4 release.

<conan> jmvanel: will only work for java though, as mvel does not support any type of anonymous block, or functions.

http://blog.datagraph.org/2010/03/rdf-for-ruby

TODO

2011-11-26

Fixing SPARQL feature

This stack is wrong !!!!

Thread [AWT-EventQueue-0] (Suspended)
N3SourceFromSPARQLSource(N3Source).fileName() line: 782
EditorManagement.fileToOpen(N3Source) line: 87
TextEditor.displayEditor(ProjectGUI, N3Source) line: 322
EditorManagement.openJavaEditor(N3Source) line: 157
EditorManagement.doOpenEditor(N3Source) line: 124
SPARQLServiceInputAction.actionPerformed(ActionEvent) line: 82
JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) line: 2018
AbstractButton$Handler.actionPerformed(ActionEvent) line: 2341
DefaultButtonModel.fireActionPerformed(ActionEvent) line: 402
DefaultButtonModel.setPressed(boolean) line: 259
BasicButtonListener.mouseReleased(MouseEvent) line: 252
AWTEventMulticaster.mouseReleased(MouseEvent) line: 289
JToolBar$1(Component).processMouseEvent(MouseEvent) line: 6504
JToolBar$1(JComponent).processMouseEvent(MouseEvent) line: 3321
JToolBar$1(Component).processEvent(AWTEvent) line: 6269
JToolBar$1(Container).processEvent(AWTEvent) line: 2229
JToolBar$1(Component).dispatchEventImpl(AWTEvent) line: 4860
JToolBar$1(Container).dispatchEventImpl(AWTEvent) line: 2287
JToolBar$1(Component).dispatchEvent(AWTEvent) line: 4686
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4832
LightweightDispatcher.processMouseEvent(MouseEvent) line: 4492
LightweightDispatcher.dispatchEvent(AWTEvent) line: 4422
ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2273
ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2713
ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4686
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 707
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 101
EventQueue$3.run() line: 666
EventQueue$3.run() line: 664
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 87
EventQueue$4.run() line: 680
EventQueue$4.run() line: 678
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
EventQueue.dispatchEvent(AWTEvent) line: 677
EventDispatchThread.pumpOneEventForFilters(int) line: 211
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 128
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 117
EventDispatchThread.pumpEvents(int, Conditional) line: 113
EventDispatchThread.pumpEvents(Conditional) line: 105
EventDispatchThread.run() line: 90

2011-11-25

from dbpedia mail list: http://www4.wiwiss.fu-berlin.de/bizer/ldif/ : looks good and very recent , by a quick look

cf roadmap : ng4j / semweb client http://www4.wiwiss.fu-berlin.de/bizer/ng4j/semwebclient/

TestSPARQL

a nice tutorial on SPARQL

<jmvanel> http://www.cambridgesemantics.com/2008/09/sparql-by-example/#%281%29

2011-11-24

headers in EulerGUI:

wget --header='Accept: text/n3, application/n3, text/rdf+n3, text/turtle, application/rdf+xml, text/xml,  text/plain, text/xhtml, text/html' http://purl.org/ontology/similarity/

The default headers in Jena ( when one does not define a stream by hand ) :

conn.setRequestProperty("accept", "application/rdf+xml, application/xml; q=0.8, text/xml; q=0.7, application/rss+xml; q=0.3, */*; q=0.2");

wget --header='Accept: application/rdf+xml, application/xml; q=0.8, text/xml; q=0.7, application/rss+xml; q=0.3, */*; q=0.2'  http://purl.org/ontology/similarity/

Problems with Music Ontology

After removing the "naked prefixes" in musicontology.n3 , somehow http://purl.org/ontology/similarity/ is still loaded :

loading Anonymous-33 from file:/home/jmv/ontologies/musicontology.n3
Using OWL API version 3.2.3.1824
Rebuilding entity indices...
 ... rebuilt in 1 ms
loading Anonymous-36 from file:/home/jmv/ontologies/musicontology.n3
loading <http://purl.org/vocab/bio/0.1/> from http://purl.org/vocab/bio/0.1/
loading <http://purl.org/NET/c4dm/event.owl> from http://purl.org/NET/c4dm/event.owl
loading <http://www.w3.org/2006/time> from http://www.w3.org/2006/time
loading <http://purl.org/ontology/ao/core> from http://purl.org/ontology/ao/core
loading <http://purl.org/dc/elements/1.1/> from http://purl.org/dc/elements/1.1/
loading <http://purl.org/dc/terms/> from http://purl.org/dc/terms/
loading <http://purl.org/ontology/similarity/> from http://purl.org/ontology/similarity/

And the culprit is :

http://purl.org/ontology/ao/core#

which has this metadata :

ao:   a       owl:Ontology ;
      dc:creator <http://tobyinkster.co.uk/#i> , <http://foaf.me/zazi#me> ;
      dc:date "2010-09-13T13:59:52+01:00"^^xsd:dateTime ;
      dc:description """The Association Ontology specification provides basic properties 
for describing specific associations to something, e.g. a context, an occasion, a genre or a mood, and enables furthermore, a mechanism to 
like/rate and feedback these associations in context to something on/ for the Semantic Web. This document contains a RDF description 
of the Association Ontology."""@en ;
      dc:title "The Association Ontology"@en ;
      owl:imports <http://www.w3.org/2003/06/sw-vocab-status/ns> , sim: , <http://purl.org/stuff/rev> , foaf: , dc: , dcterms: , <http://purl.org/NET/c4dm/event.owl> ;
      owl:versionInfo 0.4 .

For debugging music ontology, I used EG , which is is not too bad for that , but the killer weapon was a grep in ~/.eulergui/n3_cache/ , preceded by "add refered ontologies" .

------------------------------------------------------------

mainly technical questions about Music Ontology

- status : is it still maintained ? Are you still in charge ?

- the RDF version seems very different from the Turtle one

- problem with http://purl.org/ontology/similarity/ : redirects to an HTML page :

http://kakapo.dcs.qmul.ac.uk/ontology/musim/0.2/musim.html

but apparently for accept-content header == RDF or turtle it keeps the connection alive without producing anything

( the real ontology is at http://kakapo.dcs.qmul.ac.uk/ontology/musim/0.2/musim.n3 , or http://kakapo.dcs.qmul.ac.uk/ontology/musim/0.2/musim.owl )

FRBR : This vocabulary is an expression in RDF of the concepts and relations described in the IFLA report on the Functional Requirements for Bibliographic Records (FRBR).

---------------------------------------------

Opening Music Ontology with Protégé

Opening Music Ontology in RDF with Protégé:

loading ...
 ...
loading <http://purl.org/ontology/similarity/> from http://purl.org/ontology/similarity/
 ...
org.semanticweb.owlapi.rdf.syntax.RDFParserException: [line=6:column=2] Expecting rdf:RDF element.

Opening http://purl.org/ontology/similarity/ with Protégé:

the message ( after maybe 1 hour ) is :

org.semanticweb.owlapi.rdf.syntax.RDFParserException: [line=6:column=2] Expecting rdf:RDF element.

TODO

2011-11-23

-Dsun.net.client.defaultConnectTimeout=3000
-Dsun.net.client.defaultReadTimeout=3000

Troubles with Music Ontology, Pellet and Jena integration in EulerGUI

Trying with Protégé:

Music Ontology imports this , and we get into trouble :

http://purl.org/ontology/similarity/

redirects to an HTML page (HTML no matter what the accept-content header says) :

http://kakapo.dcs.qmul.ac.uk/ontology/musim/0.2/musim.html

and the trouble is that the reading freezes forever . And it's the same with EulerGUI when called in command line:

eg --pass  http://purl.org/ontology/similarity/

However , when adding the URI with the button, EG says in a popup :

Could not load N3 source from URL http://purl.org/ontology/similarity/
N3SourceFromXML_Gloze.extractXMLNamespaces():
Could not load from URL http://purl.org/ontology/similarity/
 reason: Read timed out
 cause: null
Cause:
java.net.SocketTimeoutException: Read timed out

Thread [LaunchOWLReasoner: http://motools.sourceforge.net/doc/musicontology.n3] (Suspended)
OntDocumentManager.read(Model, String, boolean) line: 1081
OntDocumentManager$1.readModel(Model, String) line: 1034
ModelMakerImpl.getModel(String, ModelReader) line: 78
OntDocumentManager.fetchLoadedImportModel(OntModelSpec, String) line: 1031
OntDocumentManager.fetchPossiblyCachedImportModel(OntModel, String) line: 1004
OntDocumentManager.loadImport(OntModel, String, List<String>) line: 977
OntDocumentManager.loadImports(OntModel, List<String>) line: 771
OntDocumentManager.loadImports(OntModel) line: 709
OntModelImpl.loadImports() line: 1887
OntModelImpl.read(InputStream, String, String) line: 2150
OntModelImpl(ModelCom).read(String, String, String) line: 211
OntModelImpl.readDelegate(String, String, String) line: 3024
OntModelImpl.read(String, String, String) line: 2106
OntModelImpl.read(String, String) line: 2064
OwlClassHierarchyBuilder.processTreeWithPellet(String, String) line: 123
OwlClassHierarchyBuilder.<init>(String, String) line: 93
LaunchOWLReasonerAction$1.run() line: 70
Thread.run() line: 722

This one is referenced in Music Ontology, but even with request headers, it returns HTML :

http://purl.org/NET/c4dm/event.owl

Remedies:

Thread [AWT-EventQueue-0] (Suspended)
SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method]
SocketInputStream.read(byte[], int, int, int) line: 150
SocketInputStream.read(byte[], int, int) line: 121
BufferedInputStream.fill() line: 235
BufferedInputStream.read1(byte[], int, int) line: 275
BufferedInputStream.read(byte[], int, int) line: 334
HttpClient.parseHTTPHeader(MessageHeader, ProgressSource, HttpURLConnection) line: 641
HttpClient.parseHTTP(MessageHeader, ProgressSource, HttpURLConnection) line: 589
HttpURLConnection.getInputStream() line: 1319
HttpURLConnection.getHeaderField(String) line: 2594
HttpURLConnection(URLConnection).getContentEncoding() line: 533
JenaReader.read(Model, String) line: 82
ModelCom.read(String) line: 187
FileManager.readModelWorker(Model, String, String, String) line: 367
FileManager.readModel(Model, String, String) line: 335
FileManager.readModel(Model, String) line: 319
OntDocumentManager.read(Model, String, boolean) line: 1064
OntDocumentManager$1.readModel(Model, String) line: 1034
ModelMakerImpl.getModel(String, ModelReader) line: 78
OntDocumentManager.fetchLoadedImportModel(OntModelSpec, String) line: 1031
OntDocumentManager.fetchPossiblyCachedImportModel(OntModel, String) line: 1004
OntDocumentManager.loadImport(OntModel, String, List<String>) line: 977
OntDocumentManager.loadImports(OntModel, List<String>) line: 771
OntDocumentManager.loadImports(OntModel) line: 709
OntModelImpl.loadImports() line: 1887
OntModelImpl.read(InputStream, String, String) line: 2150
OntModelImpl(ModelCom).read(String, String, String) line: 211
OntModelImpl.readDelegate(String, String, String) line: 3024
OntModelImpl.read(String, String, String) line: 2106
OntModelImpl.read(String, String) line: 2064
OwlClassHierarchyBuilder.processTreeWithPellet(String, String) line: 118
OwlClassHierarchyBuilder.<init>(String, String) line: 90
LaunchOWLReasonerAction.actionPerformed(ActionEvent) line: 65
JCheckBoxMenuItem(AbstractButton).fireActionPerformed(ActionEvent) line: 2018
AbstractButton$Handler.actionPerformed(ActionEvent) line: 2341
JToggleButton$ToggleButtonModel(DefaultButtonModel).fireActionPerformed(ActionEvent) line: 402
JToggleButton$ToggleButtonModel.setPressed(boolean) line: 308
JCheckBoxMenuItem(AbstractButton).doClick(int) line: 376
BasicCheckBoxMenuItemUI(BasicMenuItemUI).doClick(MenuSelectionManager) line: 833
BasicMenuItemUI$Handler.mouseReleased(MouseEvent) line: 877
AWTEventMulticaster.mouseReleased(MouseEvent) line: 289
JCheckBoxMenuItem(Component).processMouseEvent(MouseEvent) line: 6504
JCheckBoxMenuItem(JComponent).processMouseEvent(MouseEvent) line: 3321
JCheckBoxMenuItem(Component).processEvent(AWTEvent) line: 6269
JCheckBoxMenuItem(Container).processEvent(AWTEvent) line: 2229
JCheckBoxMenuItem(Component).dispatchEventImpl(AWTEvent) line: 4860
JCheckBoxMenuItem(Container).dispatchEventImpl(AWTEvent) line: 2287
JCheckBoxMenuItem(Component).dispatchEvent(AWTEvent) line: 4686
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4832
LightweightDispatcher.processMouseEvent(MouseEvent) line: 4492
LightweightDispatcher.dispatchEvent(AWTEvent) line: 4422
ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2273
ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2713
ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4686
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 707
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 101
EventQueue$3.run() line: 666
EventQueue$3.run() line: 664
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 87
EventQueue$4.run() line: 680
EventQueue$4.run() line: 678
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
EventQueue.dispatchEvent(AWTEvent) line: 677
EventDispatchThread.pumpOneEventForFilters(int) line: 211
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 128
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 117
EventDispatchThread.pumpEvents(int, Conditional) line: 113
EventDispatchThread.pumpEvents(Conditional) line: 105
EventDispatchThread.run() line: 90

------------------------------------

<jmvanel> are there some figures or rough ideas of the ratio size(WM) / size(asserted objects) ?

<jmvanel> i guess it can depend widely of the rules

<jmvanel> Hi any idea of a plotter or statistical analysis tool that can be plugged to RDF, N3 or SPARQL data sources ?

http://java.sun.com/docs/books/performance/1st_edition/html/JPRAMFootprint.fm.html

triple

count

bytes
after fireAllRules
and gc
bytes when
adding in a Set

1000

14569592 13112400
10000 18639560 18766176
100000 68961720 16708448
1000000 528742920 15022208

printMemory(): total=108331008, free=91935456, used=16395552

10 000

printMemory(): max=902299648, free=162924528, used=739375120

100 000

printMemory(): max=902299648, free=322118568, used=580181080

1 000 000

printMemory(): max=902299648, free=358850536, used=543449112

2011-11-21

http://www.vogella.de/articles/Logging/article.html#general_formatter

work directly on USB

and type sync in shell 12:21:24

Ruset Zeno 12:21:37

doesn't work,

must be

sync; echo 3 > /proc/sys/vm/drop_caches' 

everything is cached today to make user to think is a king, but cheaper

Roadmap for EulerGUI

http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L3298

EulerGUI 2.0

EulerGUI 2.1

2011-11-20

My favorite (!) OWL API bugs

Alas they stay a long time around.

2011-11-19

EulerGUI unresponsive with a large local N3 file

The default max heap size : 1Gb on my machine ( 3Gb , 64 bits Linux ) :

% java -XX:+PrintFlagsFinal -version 2>&1 | grep -i heap
 ...          
    uintx MaxHeapSize                              := 1015021568      {product} 

I'm glad because I just added 8 simple lines in N3Source.manageParseN3(), and now any big file can be opened in EG and editor !

    private void manageParseN3() {
      try {
        long localN3Length = getLocalN3().length();
        long freeMemory = Runtime.getRuntime().freeMemory();
        long necessaryMemory = 80 * localN3Length;        if( freeMemory < necessaryMemory ) {
          parseResult = null;
          Runtime.getRuntime().gc();
          return; //<<<<
        }

2011-11-18

EulerGUI unresponsive with a large local N3 file

moved addURIModificationChecker away from the EventDispatchThread

Thread [AWT-EventQueue-0] (Suspended)
Object.wait(long) line: not available [native method]
UpdateN3Thread(Thread).join(long) line: 1258
UpdateN3Thread(Thread).join() line: 1332
N3DroolsEngineFacade.waitUpdateThreads() line: 290
ProjectFileManagement.addURIModificationChecker(ProjectGUI, Project) line: 686
ProjectGUI$1.run() line: 313
InvocationEvent.dispatch() line: 251
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 705
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 101
EventQueue$3.run() line: 666
EventQueue$3.run() line: 664
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
EventQueue.dispatchEvent(AWTEvent) line: 675
EventDispatchThread.pumpOneEventForFilters(int) line: 211
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 128
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 117
EventDispatchThread.pumpEvents(int, Conditional) line: 113
EventDispatchThread.pumpEvents(Conditional) line: 105
EventDispatchThread.run() line: 90

2011-11-17

TODO EulerGUI editor feature : apply a new N3 prefix ; suggest a new N3 prefix.

N3Source.parseResult(): parseResult (http://deductions.svn.sourceforge.net/svnroot/deductions/n3_new/swrl-n3-rules.n3p#EyeHelper.reasonExternalProlog) was null ==> re-parse (and possibly re-read N3 source)
ProjectGUI_Updater.n3SourceAdded(): nanoTime 7550505561384
ParserLink.parse(): n3ParseResult.isInError: file:/home/jmv/.eulergui/n3_cache/wordnet-synset.rdf_3737954450101966515.n3
ParserLink.parse(): LineNumber: 163584 : 38
[ERROR] - 2011-11-17 16:01:20,008 [doN3SourceAdded: file:/home/jmv/ontologies/wordnet-synset.rdf] eulergui.gui.TemporaryFrame (TemporaryFrame.java:<init>:47) 
 TemporaryFrame.TemporaryFrame(): update N3; PARSE ERROR in file:/home/jmv/ontologies/wordnet-synset.rdf
 ( /home/jmv/.eulergui/n3_cache/wordnet-synset.rdf_3737954450101966515.n3 ) 
Erreur pendant  re-parsing N3 source "wordnet-synset.rdf"
Cause:
file:/home/jmv/ontologies/wordnet-synset.rdf
n3_project.exceptions.parser.ParsingException: Last character read : "@" on line 163584
Expecting one of these :
Expecting one of these :
        -> !
        -> ,
        -> .
        -> ;
        -> ^
        -> caret (LEXICAL_STRING)
        -> exclam (LEXICAL_STRING)
        -> terminal#79 ';' (LEXICAL_STRING)
        -> terminal#80 ';' (LEXICAL_STRING)
        -> terminal#81 ',' (LEXICAL_STRING)
        -> terminal#85 '.' (LEXICAL_STRING)

ParserLink.parse(): n3ParseResult.isInError: file:/home/jmv/.eulergui_preferences.n3
ParserLink.parse(): LineNumber: 1 : 9
Thread Name: mainException in thread "doN3SourceAdded: file:/home/jmv/src/eulergui/test/wordnet-synset.rdf.n3" java.lang.RuntimeException: Erreur pendant  re-parsing N3 source "file:/home/jmv/src/eulergui/test/wordnet-synset.rdf.n3"
        at eulergui.project.N3Source.manageParseN3(N3Source.java:415)
        at eulergui.project.N3Source.update(N3Source.java:378)
        at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:121)
        at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)
Caused by: net.sf.parser4j.parser.service.ParserException: java.io.IOException: closed
        at net.sf.parser4j.parser.service.Parser.readTerminalValue(Parser.java:861)
        at net.sf.parser4j.parser.service.Parser.readTerminalValueAndParse(Parser.java:642)
        at net.sf.parser4j.parser.service.Parser.parse(Parser.java:387)
        at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:177)
        at eulergui.drools_engine.ParserLink.doParse(ParserLink.java:150)
        at eulergui.drools_engine.ParserLink.parse(ParserLink.java:113)
        at eulergui.project.N3Source.doParseN3(N3Source.java:458)
        at eulergui.project.N3Source.manageParseN3(N3Source.java:402)
        ... 3 more
Caused by: java.io.IOException: closed
        at net.sf.parser4j.parser.service.ParserInput.read(ParserInput.java:56)
        at net.sf.parser4j.parser.service.Parser.readTerminalValue(Parser.java:859)
        ... 10 more

java.lang.Thread.getStackTrace(Thread.java:1567)
eulergui.util.StackHelper.printStackTrace(StackHelper.java:13)
eulergui.gui.actions.OpenPreferencesAction.applyUserPreferences(OpenPreferencesAction.java:81)
n3_project.ProjectGUI.newWindow(ProjectGUI.java:274)
N3ConversionRefesher.N3ConversionRefesher(): nanoTime 8269221164134
N3DroolsEngineFacade.waitUpdateThreads() FINISHED

2011-11-16

http://groups.google.com/group/warszawa-jug

http://www.google.fr/search?aq=f&sourceid=chrome&ie=UTF-8&q=new+york+semantic+web

2011-11-15

Scala : futures , scalafx

http://blog.tackley.net/2010/01/scala-futures.html

http://code.google.com/p/scalafx/

Deprecating the Observer Pattern

EPFL-REPORT-148043

Ingo Maier Tiark Rompf Martin Odersky

http://lamp.epfl.ch/~imaier/pub/DeprecatingObserversTR2010.pdf

discussion about Swing 2

http://jonathangiles.net/blog/?p=207

2011-11-14

on ##nlp IRC

anybody having experience at the intersection of 2 sets : NLP of french , and Java tools ?

<jmvanel> I need to extract keyphrases from text documents with a controlled vocabulary , like http://www.nzdl.org/Kea/ is supposed to do ( but the software crashes and bug report are not answered :( )

Trying Lucene demo

Apache Lucene - Getting Started Guide

java -cp lucene-core-3.4.0.jar:contrib/demo/lucene-demo-3.4.0.jar \
     org.apache.lucene.demo.IndexFiles \
     -docs ~/nltk_data/corpora/europarl_raw/french/
java -cp lucene-core-3.4.0.jar:contrib/demo/lucene-demo-3.4.0.jar \
     org.apache.lucene.demo.SearchFiles 

2011-11-13

Installing UIMA

Cannot complete the install because one or more required items could not be
found.Software being installed: UIMA tools (includes Runtime) 2.3.1
(org.apache.uima.tools.feature.group 2.3.1)Missing requirement: UIMA tools (includes Runtime) 2.3.1
(org.apache.uima.tools.feature.group 2.3.1) requires 'org.eclipse.emf.codegen
0.0.0' but it could not be found

2011-11-12

Trying Kea 5

Opening the SKOS VOCABULARIES shipped with Kea, 34Mb together :

% ls -l VOCABULARIES
total 33816
-rw-r--r-- 1 jmv jmv 11409511 2007-10-29 01:25 agrovoc_es.rdf
-rw-r--r-- 1 jmv jmv 11222892 2007-10-29 01:25 agrovoc_fr.rdf
-rw-r--r-- 1 jmv jmv 11992250 2007-10-29 01:25 agrovoc.rdf

Opened with EulerGUI, this takes 1.7Gb ! :( .

I opened the Kea directory with eclipse, the .project etc are here. From there , I ran the tests in TestKea.java. It says :

Creating the model... 
-- Loading the Index...
-- Building the Vocabulary index from SKOS file
-- Reading the Documents... 
Extracting keyphrases from test documents... 
-- Loading the Index...
-- Building the Vocabulary index from SKOS file
-- Extracting Keyphrases... 
Avg. number of matching keyphrases compared to existing ones : 9.2 +/- 0.45
Based on 5 documents
Look into testdocs/en/test to see the results
and compare them to testdocs/en/test/manual_keyphrases/.

Looking for french texts in NLTK :

 ~/nltk_data/corpora/ % grep --recursive -l  économie .
europarl_raw/french/ep-00-02-16.fr
europarl_raw/french/ep-00-02-03.fr
europarl_raw/french/ep-00-01-17.fr
europarl_raw/french/ep-00-01-18.fr
europarl_raw/french/ep-00-02-15.fr
europarl_raw/french/ep-00-02-02.fr
europarl_raw/french/ep-00-01-19.fr
europarl_raw/french/ep-00-01-20.fr
europarl_raw/french/ep-00-02-14.fr

I found a suitable thesaurus from http://www.archivesdefrance.culture.gouv.fr/thesaurus/page/Matiere ( click on Téléchargement ).

I'll try to use Kea on these french texts in NLTK.

After reading in Kea readme file the paragrah 2. Getting started / Building a keyphrase extraction model , I tried this :

./run.sh kea.main.KEAModelBuilder -l ~/nltk_data/corpora/europarl_raw/french/ \
    -m europarl -i fr \
    -v archivesdefrance.culture.gouv.fr_thesaurus_Matiere -f skos

where run.sh is :

for f in lib/*.jar
do
  cp=$cp:$f
done
echo java -cp $cp $*
java -cp $cp $*

In fact, Kea accepts only files with .txt suffix, so I do this :

cd ~/nltk_data/corpora/europarl_raw/french/
for f in *.fr
do
 textfile=`basename $f .fr`.txt
 ln -s $f $textfile 
done

The first run is not the right one:

java -cp :lib/commons-logging.jar:lib/icu4j_3_4.jar:lib/iri.jar:lib/jena.jar:lib/kea-5.0.jar:lib/snowball.jar:lib/weka.jar:lib/xercesImpl.jar kea.main.KEAModelBuilder -l /home/jmv/nltk_data/corpora/europarl_raw/french/ -m europarl -v archivesdefrance.culture.gouv.fr_thesaurus_Matiere -f skos
Building model with options: -l /home/jmv/nltk_data/corpora/europarl_raw/french/ -m europarl -v archivesdefrance.culture.gouv.fr_thesaurus_Matiere -f skos -e default -i en -x 5 -y 1 -o 2 -s kea.stopwords.StopwordsEnglish -t kea.stemmers.SremovalStemmer -n    
-- Loading the Index...
-- Building the Vocabulary index from SKOS file
nov. 12, 2011 6:59:20 PM com.hp.hpl.jena.rdf.model.impl.RDFDefaultErrorHandler warning
Avertissement: file:///home/jmv/src/kea-5.0_full/(line 19 column 12): {W113} rdf:date is not a recognized RDF property or type.
-- Reading the Documents... 
Killed
[1]  + exit 137   eulergui agrovoc_es.rdf.n3p

java.lang.ArrayIndexOutOfBoundsException: 0
        at weka.core.FastVector.elementAt(Unknown Source)
        at weka.core.Attribute.value(Unknown Source)
        at weka.core.Instance.stringValue(Unknown Source)
        at weka.core.Instance.stringValue(Unknown Source)
        at kea.filters.KEAFilter.buildClassifier(KEAFilter.java:917)
        at kea.filters.KEAFilter.batchFinished(KEAFilter.java:808)
        at kea.main.KEAModelBuilder.buildModel(KEAModelBuilder.java:805)
        at kea.main.KEAModelBuilder.main(KEAModelBuilder.java:837)
0

I restart in eclipse debug with -Xmx2500M . But this is right in weka.jar (no source) , the machine learning tool.

My bug report :

http://code.google.com/p/kea-algorithm/issues/detail?id=1&thanks=1&ts=1321128962

I'll try now sulci.

Trying sulci

I'll try to reproduce with sulci what I tried in Kea.

First Yohann advises me to use virtualenvwrapper :

http://www.doughellmann.com/articles/pythonmagazine/completely-different/2008-05-virtualenvwrapper/index.html

bash
apt-get install python-pip virtualenvwrapper python-virtualenv python-dev

mkdir ~/.virtualenvs
cd ~/.virtualenvs; virtualenv sulci
export WORKON_HOME=~/.virtualenvs

mkvirtualenv sulcitest
workon sulcitest
pip install git+git://github.com/yohanboniface/sulci.git
sudo apt-get build-dep python-psycopg2
pip install psycopg2==2.4.1

django-admin.py startproject sulcisite
sudo -u postgres createuser jmv
sudo -u postgres createdb sulci -O jmv

cd /tmp
mkdir w ; cd w ; unzip ~/src/sulci/sulci/fixtures/fixtures-alpha.zip
echo "apply 1,$s/ybon/jmv/"
gvim  sulci_descriptor.sql sulci_trigger.sql sulci_triggertodescriptor.sql
psql -U jmv sulci < sulci_descriptor.sql
psql -U jmv sulci < sulci_trigger.sql 
psql -U jmv sulci < sulci_triggertodescriptor.sql

django-admin.py startproject sulcisite
sudoedit /etc/postgresql/9.1/main/pg_hba.conf
gvim settings.py
# just for verifications:
python manage.py validate
python manage.py dbshell
python manage.py shell
echo "add : from sulci.views import demo as sulci_demo
urlpatterns = patterns('',
     url(r'^sulci/demo$', sulci_demo, name='sulci_demo'),
"
gvim urls.py
python manage.py runserverr

Tried SKOS plugin for Protégé

Made a bug report

http://code.google.com/p/skoseditor/issues/detail?id=11&thanks=11&ts=1321088843

2011-11-11

A concurrent to eXist XML database , but in C++ : http://www.sedna.org/

EulerGUI tests

Testing Jos' OWL rule base with Drools

 ~/src/eulergui/examples/ % java -cp ../target/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar  eulergui.inference.drools.impl.DroolsRunExportedProject

Even with no data , it crashes :

Exception in thread "main" java.lang.OutOfMemoryError: GC overhead limit exceeded

cat ~/src/eulersharp/trunk/2003/03swap/owl-*.n3  > owl-rules.n3

Commits

COMMIT in EulerGUI

- Drools N3 engine:

* Integrity Constraint were broken

* FIX crash with rdf:nil rdf:rest ?X . ( occurs in Jos' OWL rules )

- give names to threads in SPARQLServiceInputAction

- clean code in ParserDataIO

COMMIT in Déductions

SWRL --> N3 translator: a literal in consequent was treated as a variable; tested with :

a1(?x), c1(?y), r1(?x, ?y) -> dp1(?x, 10)

added project test_swrl_to_n3.n3p to run the SWRL to N3 translator manually

thanks to Pascal van Hille for the example

2011-11-10

cwm --rdf  swrl_rule_owl.owl --n3==dilpqst

2011-11-09

Error in Protégé's Turtle parser

I found an error in Protégé's Turtle parser ( P 4.2.0 build 249). The error message is :

uk.ac.manchester.cs.owl.owlapi.turtle.parser.ParseException: Encountered "" at line 10, column 24.
Was expecting one of:

The cause is using a prefix with no suffix. Indeed changing foaf: at line 10 with:

<http://xmlns.com/foaf/0.1/>

removes the problem.

The complete N3 file:

@prefix rdfs:    <http://www.w3.org/2000/01/rdf-schema#> .
@prefix owl:     <http://www.w3.org/2002/07/owl#> .
@prefix rdf:     <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
@prefix foaf:    <http://xmlns.com/foaf/0.1/> .

foaf:fundedBy
      a       rdf:Property , owl:ObjectProperty ;
      rdfs:comment "An organization funding a project or person." ;
      rdfs:domain owl:Thing ;
      rdfs:isDefinedBy foaf: ;
      rdfs:label "funded by" ;
      rdfs:range owl:Thing ;
      vs:term_status "archaic" .

2011-11-08

read-write-web

Fix eclipse with Subversion ( JavaHL)

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 = /usr/lib/jni

According to http://subclipse.tigris.org/wiki/JavaHL#head-3a1d2d3c54791d2d751794e5d6645f1d77d95b32

I added this in ~/.subversion/config :

password-stores = 

Installing WebProtege

WebProtege

WebProtegeDevelopersGuide

svn co http://smi-protege.stanford.edu/repos/protege/web-protege/branches/who/ web-protege 

Enter this in "package"

edu.stanford.bmir.protege.web

check "Create project in" :

/home/jmv/src/web-protege

uncheck "Use Google Web Toolkit"

uncheck "Sample code"

Looking for testers on SWIG IRC

looking for testers for EulerGUI 1.9 beta: Semantic Web + N3/Turtle syntax GUI and framework: new snapshot ; only minor bugs known :)

join us on #eulergui

Set the channel on #eulergui :

/topic  http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L7256

Snapshot updated

Just one test failing, and it succeeds in eclipse :

Failed tests: testLocalFacebookSearch(eulergui.gui.TestFacebookSearch)

Tests run: 174, Failures: 1, Errors: 0, Skipped: 0

COMMIT r2797

FIX : N3 Drools engine:

- Fix test cases in math.n3 involving a Number in object position in consequent

- fix e:findall when antecedent is a blank node

- does fix examples/acceleration.n3p

- no more tests deactivated in TestReasonning

Fix this test case in math.n3 :

:Everest:height 8848 ; :name "Everest" .
:Mont_blanc:height 4800 .
:McKinley:height 6194 .
:Mauna_Kea:height 4205 .

{ _:d e:findall ( ?H {
    ?M :height ?H } ?LIST ).
  ?LIST e:max ?MAX .
  # ?MAX log:equalTo 8848 . # TODO : Drools : output is 8848.0
 } => {
  :test :pass_max true .
  :test :res ?MAX .
 } .

2011-11-07

http://4store.org/

COMMIT

FIX : N3 Drools engine:

- math functions tests were deactivated since revision 2349 of sat. 09 april 2011

- type was String not Double in DroolsTripleHandler.addThen()

TODO:

- does not fix examples/acceleration.n3p , although the rule is correctly executed

- still some test deactivated in TestReasonning

TODO: when saving as Drools:

WorkingMemory.java.lang.InstantiationException: eulergui.n3model.LinesAndCols

Thread [main] (Suspended (exception RuntimeException))
XMLEncoder(Encoder).getValue(Expression) line: 109
XMLEncoder(Encoder).get(Object) line: 246
DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 112
XMLEncoder(Encoder).writeObject(Object) line: 74
XMLEncoder.writeObject(Object) line: 327
XMLEncoder(Encoder).writeExpression(Expression) line: 324
XMLEncoder.writeExpression(Expression) line: 454
DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 115
XMLEncoder(Encoder).writeObject(Object) line: 74
XMLEncoder.writeObject(Object) line: 327
XMLEncoder(Encoder).writeExpression(Expression) line: 324
XMLEncoder.writeExpression(Expression) line: 454
DefaultPersistenceDelegate.initBean(Class, Object, Object, Encoder) line: 232
DefaultPersistenceDelegate.initialize(Class<?>, Object, Object, Encoder) line: 400
DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 118
XMLEncoder(Encoder).writeObject(Object) line: 74
XMLEncoder.writeObject(Object) line: 327
XMLEncoder(Encoder).writeExpression(Expression) line: 324
XMLEncoder.writeExpression(Expression) line: 454
DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 115
XMLEncoder(Encoder).writeObject(Object) line: 74
XMLEncoder.writeObject(Object) line: 327
XMLEncoder(Encoder).writeObject1(Object) line: 252
XMLEncoder(Encoder).cloneStatement(Statement) line: 265
XMLEncoder(Encoder).writeStatement(Statement) line: 295
XMLEncoder.writeStatement(Statement) line: 400
DefaultPersistenceDelegate.invokeStatement(Object, String, Object[], Encoder) line: 217
java_util_AbstractList_PersistenceDelegate(java_util_List_PersistenceDelegate).initialize(Class<?>, Object, Object, Encoder) line: 649
DefaultPersistenceDelegate(PersistenceDelegate).initialize(Class<?>, Object, Object, Encoder) line: 212
DefaultPersistenceDelegate.initialize(Class<?>, Object, Object, Encoder) line: 398
DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 118
XMLEncoder(Encoder).writeObject(Object) line: 74
XMLEncoder.writeObject(Object) line: 327
XMLEncoder(Encoder).writeExpression(Expression) line: 324
XMLEncoder.writeExpression(Expression) line: 454
DefaultPersistenceDelegate(PersistenceDelegate).writeObject(Object, Encoder) line: 115
XMLEncoder(Encoder).writeObject(Object) line: 74
XMLEncoder.writeObject(Object) line: 327
XMLEncoder(Encoder).writeObject1(Object) line: 252
XMLEncoder(Encoder).cloneStatement(Statement) line: 265
XMLEncoder(Encoder).writeStatement(Statement) line: 295
XMLEncoder.writeStatement(Statement) line: 400
XMLEncoder.writeObject(Object) line: 330
DroolsFactsLoadStore.saveFactsOnFile(List<ITriple>) line: 47
N3SourcetoDrools.saveFactsOnFile() line: 727
N3SourcetoDrools.launchDrools() line: 609
N3DroolsEngineFacade.launchDrools() line: 65
Project.doRunDrools(boolean) line: 823
Project.runDroolsTriples(boolean) line: 769
Project.runDroolsTriples() line: 791
TestReasonning.processProjectWithDrools(TestReasonning$TestSpecification) line: 370
TestReasonning.testRunDrools() line: 359
NativeMethodAccessorImpl.invoke0(Method, Object, Object[]) line: not available [native method]
NativeMethodAccessorImpl.invoke(Object, Object[]) line: 57
DelegatingMethodAccessorImpl.invoke(Object, Object[]) line: 43
Method.invoke(Object, Object...) line: 601
TestReasonning(TestCase).runTest() line: 168
TestReasonning(TestCase).runBare() line: 134
TestResult$1.protect() line: 110
TestResult.runProtected(Test, Protectable) line: 128
TestResult.run(TestCase) line: 113
TestReasonning(TestCase).run(TestResult) line: 124
TestSuite.runTest(Test, TestResult) line: 243
TestSuite.run(TestResult) line: 238
JUnit38ClassRunner.run(RunNotifier) line: 83
JUnit4TestClassReference(JUnit4TestReference).run(TestExecution) line: 50
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

2011-11-05

r2349 | jmvanel | 2011-04-09 19:20:52 +0200 (sam. 09 avril 2011) | 5 lignes

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

------------------------------------------------------------------------

r2345 | jmvanel | 2011-04-09 12:48:08 +0200 (sam. 09 avril 2011) | 2 lignes


Drools Error: Rule Compilation error Type mismatch: cannot convert from Double to String

ErrorLines: - 45

rule "acceleration.n3 0"
when
  $Triple_1 : Triple( $M : subject, predicate == "<http://eulergui.sf.net/example#hasXAcceleration>", $G : object )
  $Triple_2 : Triple( subject == $M, predicate == "<http://eulergui.sf.net/example#hasElapsedTime>", $T : object )
then
  String $X =  new Double( 0.5 * Double.parseDouble( Triple.n3ValueToNumeric($G )) * Double.parseDouble( Triple.n3ValueToNumeric($T )) * Double.parseDouble( Triple.n3ValueToNumeric($T )) );

{
  ?M :hasXAcceleration ?G.
  ?M :hasElapsedTime ?T.
  ( 0.5 ?G ?T ?T ) math:product ?X.
} => {
  # :d kb:retract ( ?M :hasX ?OLD_VALUE ).
  ?M :hasX ?X. } .

EulerGUI Application frozen

Solved ?

Thread [N3 sources modification Checker] (Suspended)
Object.wait(long) line: not available [native method]
N3Source(Object).wait() line: 503 [local variables unavailable]
N3Source.waitCurrentlyUpdating(String) line: 805
URIModificationChecker.checkN3Source(N3Source) line: 88
URIModificationChecker.run() line: 62
Thread.run() line: 722

Thread [AWT-EventQueue-0] (Suspended)
Object.wait(long) line: not available [native method]
UpdateN3Thread(Thread).join(long) line: 1258
UpdateN3Thread(Thread).join() line: 1332
N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 60
ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 85
Project.addN3Source(N3Source, boolean) line: 309
Project.addN3Source(N3Source) line: 290
SourceFilesManagement$AddN3Action.actualAction(N3Source) line: 260
SourceFilesManagement$AddN3Action.actionPerformed(ActionEvent) line: 234
JToolBar$1(AbstractButton).fireActionPerformed(ActionEvent) line: 2018
AbstractButton$Handler.actionPerformed(ActionEvent) line: 2341
DefaultButtonModel.fireActionPerformed(ActionEvent) line: 402
DefaultButtonModel.setPressed(boolean) line: 259
BasicButtonListener.mouseReleased(MouseEvent) line: 252
AWTEventMulticaster.mouseReleased(MouseEvent) line: 289
JToolBar$1(Component).processMouseEvent(MouseEvent) line: 6504
JToolBar$1(JComponent).processMouseEvent(MouseEvent) line: 3321
JToolBar$1(Component).processEvent(AWTEvent) line: 6269
JToolBar$1(Container).processEvent(AWTEvent) line: 2229
JToolBar$1(Component).dispatchEventImpl(AWTEvent) line: 4860
JToolBar$1(Container).dispatchEventImpl(AWTEvent) line: 2287
JToolBar$1(Component).dispatchEvent(AWTEvent) line: 4686
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4832
LightweightDispatcher.processMouseEvent(MouseEvent) line: 4492
LightweightDispatcher.dispatchEvent(AWTEvent) line: 4422
ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2273
ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2713
ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4686
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 707
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 101
EventQueue$3.run() line: 666
EventQueue$3.run() line: 664
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 87
EventQueue$4.run() line: 680
EventQueue$4.run() line: 678
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
EventQueue.dispatchEvent(AWTEvent) line: 677
EventDispatchThread.pumpOneEventForFilters(int) line: 211
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 128
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 117
EventDispatchThread.pumpEvents(int, Conditional) line: 113
EventDispatchThread.pumpEvents(Conditional) line: 105
EventDispatchThread.run() line: 90

After some modifications:

Tests in error: 
  testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl): Component enabled: class javax.swing.JButton
  testRemoteImportSwrlWithDrools(eulergui.gui.TestImportSwrl): Component enabled: class javax.swing.JButton
  testLocalImportSwrlWithEuler(eulergui.gui.TestImportSwrl): Component enabled: class javax.swing.JButton
  testRemoteImportSwrlWithEuler(eulergui.gui.TestImportSwrl): Component enabled: class javax.swing.JButton
  testTooltip(eulergui.gui.TestEulerGUITooltip): Component enabled: class javax.swing.JButton
  testURLProjectOWL(eulergui.gui.TestJavaEditor): Component enabled: class javax.swing.JButton
  testSimpleURLProject(eulergui.gui.TestJavaEditor): Component enabled: class javax.swing.JButton
  testURLProject(eulergui.gui.TestJavaEditor): Component enabled: class javax.swing.JButton
  testSimpleURLProjectLocal(eulergui.gui.TestJavaEditor): Component enabled: class javax.swing.JButton
  testAddNewN3Source(eulergui.gui.TestN3SourceInGUI): Component enabled: class javax.swing.JButton
  testInferenceListInAntecedent(deductions.runtime.BasicRuntimeTest)
  testInferenceNonEmptyListInAntecedent(deductions.runtime.BasicRuntimeTest)
  testInferenceString(deductions.runtime.BasicRuntimeTest)
  testSearchString(deductions.runtime.BasicRuntimeTest)
  testJavaMappingPlainTripleExecuteLine(deductions.runtime.BasicRuntimeTest)
  testJavaMappingPlainTripleInstanciationDeferredxecuteLine(deductions.runtime.BasicRuntimeTest)
  testJavaMappingConsequentVariable(deductions.runtime.BasicRuntimeTest)
  testJavaMappingConsequentVariable2(deductions.runtime.BasicRuntimeTest)
  testJavaMappingConsequentVariable3(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAccesFieldAsN3Variable(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAccessFieldAsN3Variable2(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAccessFieldAsN3VariableConsequent(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAntecedentVariableString(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAntecedentVariableString2(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAntecedentVariableString3(deductions.runtime.BasicRuntimeTest)
  testJavaMappingAntecedentVariableString4(deductions.runtime.BasicRuntimeTest)
  testJavaMappingPlainTripleInstanciationDeferred(deductions.runtime.BasicRuntimeTest)
  testJavaMappingConsequentNewVariable(deductions.runtime.BasicRuntimeTest)
  testSimpleInference(deductions.runtime.BasicRuntimeTest)

Tests run: 177, Failures: 0, Errors: 29, Skipped: 0

COMMIT

FIX one cause of dead lock :

UpdateN3Thread(Thread).join() line: 1332

N3ConversionRefesher.n3SourceAdded(Project, N3Source) line: 60

and

N3Source.waitCurrentlyUpdating(String) line: 805

URIModificationChecker.checkN3Source(N3Source) line: 88

REMEDY: now N3ConversionRefesher does NOT call join anymore

pom.xml : maven-surefire-plugin, maven-surefire-report-plugin : version : 2.10-SNAPSHOT ==> 2.10 , so that tests can pass without checking Internet

Still one Test in error:

test_uml2(eulergui.gui.TestGenericGuiGenerationInsertLogical): Wait AbstractButton with text "Employee" loaded

TODO EulerGUI

2011-11-04

possible test scenarios : look in manual "getting started" ;

or http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/explore_semweb.html

or : http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/configure-eulergui-in-n3.html

http://developer.android.com/resources/articles/speech-input.html

TODO EulerGUI :

17:05:45 [AWT-EventQueue-0] [error] AWT-EventQueue-0: com.hp.hpl.jena.n3.turtle.TurtleParseException: Line 8, column 16: com.hp.hpl.jena.iri.impl.IRIImplException: <http:deductions.sf.net/ontologies/business.owl.n3#> Code: 57/REQUIRED_COMPONENT_MISSING in HOST: A component that is required by the scheme is missing.

2011-11-03

COMMIT

FIX TestJavaEditor

- remove all Thread.sleep

- clean code

- fix frame title criteria: confusion bet main frame and editor frame


Problem when reading doap.n3 with Protégé 4.2

uk.ac.manchester.cs.owl.owlapi.turtle.parser.ParseException: Encountered "" at line 13, column 24.

Was expecting one of:

p4-feedback] Protégé 4.1 startup fails under Java 7...here is a workaround.

Indeed it works! Sent mail to the list.

TODO

new property verboseMode in class EulerGUI ( also controls logging) : should be under control of user preferences in N3

COMMIT

- CHANGELOG : update for release 1.9

- documentation.html : add search engine http://swse.deri.org/

2011-11-02

Application frozen when no network:

ResultManagement.displayOriginalSourceWithErrors(): 18:6 - 18:17 no prefix for "skos:"
java.net.UnknownHostException: prefix.cc
        at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:176)
        at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:391)
        at java.net.Socket.connect(Socket.java:579)
        at java.net.Socket.connect(Socket.java:528)
        at sun.net.NetworkClient.doConnect(NetworkClient.java:180)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:388)
        at sun.net.www.http.HttpClient.openServer(HttpClient.java:483)
        at sun.net.www.http.HttpClient.<init>(HttpClient.java:213)
        at sun.net.www.http.HttpClient.New(HttpClient.java:300)
        at sun.net.www.http.HttpClient.New(HttpClient.java:316)
        at sun.net.www.protocol.http.HttpURLConnection.getNewHttpClient(HttpURLConnection.java:992)
        at sun.net.www.protocol.http.HttpURLConnection.plainConnect(HttpURLConnection.java:928)
        at sun.net.www.protocol.http.HttpURLConnection.connect(HttpURLConnection.java:846)
        at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1296)
        at eulergui.parser.n3.service.MissingPrefixesCompletion.makePrefixDeclarationsWithPrefix_cc(MissingPrefixesCompletion.java:111)
        at eulergui.parser.n3.service.MissingPrefixesCompletion.makePrefixDeclarationsWithPrefix_cc(MissingPrefixesCompletion.java:41)
        at eulergui.gui.controller.N3ParsingExceptionProcessor.process(N3ParsingExceptionProcessor.java:27)
        at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:144)
        at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)

Trying Semantic Web Client Library (semwebquery)

% cd ~/src/ng4j/
% ant jar
% bin/semwebquery
exec java -cpSemantic Web Client Library bin/../build:bin/../lib/antlr-2.7.7.jar:bin/../lib/arq-2.8.8.jar:bin/../lib/axis-1.4.jar:bin/../lib/bcpg-jdk15-146.jar:bin/../lib/bcprov-jdk15-146.jar:bin/../lib/commons-codec-1.3.jar:bin/../lib/commons-logging-1.1.1.jar:bin/../lib/hsqldb-1.8.0.7.jar:bin/../lib/icu4j-3.4.4.jar:bin/../lib/iri-0.8.jar:bin/../lib/jena-2.6.4.jar:bin/../lib/jena-2.6.4-tests.jar:bin/../lib/junit-3.8.2.jar:bin/../lib/log4j-1.2.14.jar:bin/../lib/lucene-core-2.3.1.jar:bin/../lib/nekohtml-0.9.5.jar:bin/../lib/ng4j-0.9.4-SNAPSHOT.jar:bin/../lib/slf4j-api-1.6.1.jar:bin/../lib/slf4j-log4j12-1.6.1.jar:bin/../lib/stax-api-1.0.1.jar:bin/../lib/wstx-asl-3.2.9.jar:bin/../lib/xercesImpl-2.7.1.jar semweb.query
usage: semwebquery [parameters]

    -sparql <query>        Execute a SPARQL query
    -sparqlfile <file>     Execute a SPARQL query loaded from a file
    -find "s p o"          Execute a find query with an N-Triple style pattern;
                           use ANY as a wildcard
    -maxsteps <steps>      Set maximal depth of link following. Default: 3
    -maxfilesize <size>    Set maximal filesize in bytes of URIs to retrieve. Default: 100000000
    -maxthreads <threads>  Set number of threads for loading URIs. Default: 10
    -timeout <seconds>     Set query timeout. Default: 60 seconds
    -load <URL>            Load seed graph from the Web
    -NoRDFa                Disables RDFa support
    -sindice               Enables Sindice-based URI search during query execution
    -loadtrig <file>       Load seed graphs from a TriG file before starting
    -savetrig <file>       Save loaded graphs to a TriG file after finishing
    -retrieveduris         Output a list of all successfully retrieved URIs
    -faileduris            Output a list of URIs that could not be retrieved
    -redirecteduris        Output a mapping of URIs that have been redirected
    -resultfmt <format>    Specifies the output format for the result of a SPARQL query:
                           - for SELECT and ASK queries use TXT, XML, or JSON
                             (default: TXT);
                           - for CONSTRUCT or DESCRIBE queries use RDF/XML,
                             N-TRIPLE, TURTLE, or N3 (default: RDF/XML)
    -verbose               Show additional progress information

bin/semwebquery -load 'http://richard.cyganiak.de/foaf.rdf#cygri'  -find "ANY <http://xmlns.com/foaf/0.1/knows> ANY"

2011-10-31

pave the way to check that everything is saved before starting any processing:

add method EditorManagement.getUnsavedN3Sources()

show a Dialog When there Unsaved N3 Sources, before launching AddReferredOntologies Action

EditorManagement.showDialogWhenUnsavedN3Sources()

TODO call the methos also for inference engines, and other tools

2011-10-29

http://www.rene-witte.net/

test a REST query on Swoogle

http://swoogle.umbc.edu/index.php?option=com_swoogle_manual

http://sparql.cs.umbc.edu/swoogle31/q?queryType=search_swd_ontology&searchString=service&key=demo

<rdf:RDF
    xmlns:swoogle="http://daml.umbc.edu/ontologies/webofbelief/1.4/swoogle.owl#"
    xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
    xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
    xmlns:owl="http://www.w3.org/2002/07/owl#"
    xmlns:daml="http://www.daml.org/2001/03/daml+oil#"
    xmlns:dc="http://purl.org/dc/elements/1.1/"
    xmlns:wob="http://daml.umbc.edu/ontologies/webofbelief/1.4/wob.owl#"> 
  <swoogle:QueryResponse> 
    <swoogle:hasSearchString>service</swoogle:hasSearchString> 
    <swoogle:hasQueryType rdf:resource="http://daml.umbc.edu/ontologies/webofbelief/1.4/swoogle.owl#search_swd_ontology"/> 
    <swoogle:hasSearchStart>1</swoogle:hasSearchStart> 
    <rdfs:comment>This RDF/XML document is dynamically generated by Swoogle (v3.1) . This service serves the research community under Creative Commons Attribution-NonCommercial-ShareAlike 2.5 License. It is in beta testing status as on Jan 24,2006, and changes may be made without notification. Service description is included in Swoogle manual, which can be found at Swoogle website at http://swoogle.umbc.edu/. Please contact (swoogle-developers AT cs.umbc.edu) or (Li Ding at UMBC) for further question.</rdfs:comment> 
    <swoogle:hasSearchTotalResults>8961</swoogle:hasSearchTotalResults> 
    <swoogle:hasResult> 
      <rdf:Seq> 
        <rdf:li> 
          <wob:SemanticWebDocument rdf:about="http://xmlns.com/foaf/0.1/index.rdf"> 
            <swoogle:hasCntInstance>1</swoogle:hasCntInstance> 
            <swoogle:hasOntoRank>145978.099522396</swoogle:hasOntoRank> 
            <wob:isEmbedded>false</wob:isEmbedded> 
            <swoogle:hasDescRef>, Project, &lt;B>Service&lt;/B>, Spatial, SpatialThing, Thing, Topic, account, accountName, accountServiceHomepage</swoogle:hasDescRef> 
            <swoogle:hasDescDef>, Profile, Project, Property, &lt;B>Service&lt;/B>, Spatial, SpatialThing, Thing, Topic, account, accountName</swoogle:hasDescDef> 
            <swoogle:hasDateDiscovered>2005-01-17</swoogle:hasDateDiscovered> 
            <swoogle:hasDateLastmodified>2010-08-08</swoogle:hasDateLastmodified> 
            <swoogle:hasOntoRatio>1</swoogle:hasOntoRatio> 
            <swoogle:hasMd5sum>3a5d4778240b986a35566dd0f0619ce8</swoogle:hasMd5sum> 
            <swoogle:hasParseState rdf:resource="http://daml.umbc.edu/ontologies/webofbelief/1.4/swoogle.owl#ParseSuccess"/> 
            <swoogle:hasDatePing>2010-08-12</swoogle:hasDatePing> 
            <swoogle:hasFiletype>rdf</swoogle:hasFiletype> 
            <swoogle:hasLength>44038</swoogle:hasLength> 
            <swoogle:hasPingState rdf:resource="http://daml.umbc.edu/ontologies/webofbelief/1.4/swoogle.owl#PingModified"/> 
            <swoogle:hasCntSwtDef>90</swoogle:hasCntSwtDef> 
            <swoogle:hasEncoding>iso-8859-1</swoogle:hasEncoding> 
            <swoogle:hasCntSwt>109</swoogle:hasCntSwt> 
            <wob:hasGrammar rdf:resource="http://daml.umbc.edu/ontologies/webofbelief/1.4/wob.owl#RDFXML"/> 
            <swoogle:hasDateCache>2010-08-12</swoogle:hasDateCache> 
            <swoogle:hasCntTriple>630</swoogle:hasCntTriple> 
          </wob:SemanticWebDocument> 
        </rdf:li> 

Fixing EulerGUI before release

Thanks to Cyril

Jena Turtle parser does *not* add default prefix :

15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0: com.hp.hpl.jena.n3.turtle.TurtleParseException: Line 5, column 10: Unresolved prefixed name: :x
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.ParserBase.throwParseException(ParserBase.java:274)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.ParserBase.resolvePName(ParserBase.java:195)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.PrefixedName(TurtleParser.java:680)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.IRIref(TurtleParser.java:664)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Verb(TurtleParser.java:226)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.PropertyListNotEmpty(TurtleParser.java:164)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.TriplesSameSubject(TurtleParser.java:130)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Statement(TurtleParser.java:76)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.parse(TurtleParser.java:46)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.ParserTurtle.parse(ParserTurtle.java:37)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.TurtleReader.readWorker(TurtleReader.java:21)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.JenaReaderBase.readImpl(JenaReaderBase.java:101)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.JenaReaderBase.read(JenaReaderBase.java:68)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:226)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.ontology.impl.OntModelImpl.read(OntModelImpl.java:2148)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.rdf.model.impl.ModelCom.read(ModelCom.java:211)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.ontology.impl.OntModelImpl.readDelegate(OntModelImpl.java:3024)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.ontology.impl.OntModelImpl.read(OntModelImpl.java:2106)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.ontology.impl.OntModelImpl.read(OntModelImpl.java:2064)
15:26:56 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.OwlClassHierarchyBuilder.processTreeWithPellet(OwlClassHierarchyBuilder.java:115)

COMMITS

TemporaryFrame JDialog :

- move down and right by (50 , 50) wrt the mainframe;

- a Click removes this popup (and a ToolTip says "Click to remove this popup."


FIX this NPE (when adding a file with syntax errors, EG was trying to update the non existing editor:

ProjectGUI_Updater.n3SourceUpdated(): file:/home/jmv/src/eulergui/w/euler_project.xml.0.n3
#TRACE ( "addN3Source" <file:/home/jmv/src/eulergui/w/euler_project.xml.n3p> _:sk_N3S_0 "?IMPORT_URI" "euler_project.xml.0.n3" )
ProjectGUI_Updater.n3SourceAdded(): nanoTime 141367862397541
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
        at org.gjt.sp.jedit.jEdit._getBuffer(jEdit.java:2193)
        at org.gjt.sp.jedit.jEdit.getBuffer(jEdit.java:2213)
        at n3_project.EditorManagement$3.run(EditorManagement.java:216)
        at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:251)
        at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:705)
        at java.awt.EventQueue.access$000(EventQueue.java:101)
        at java.awt.EventQueue$3.run(EventQueue.java:666)
        at java.awt.EventQueue$3.run(EventQueue.java:664)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:76)
        at java.awt.EventQueue.dispatchEvent(EventQueue.java:675)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:211)
        at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:128)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:117)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:113)
        at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:105)
        at java.awt.EventDispatchThread.run(EventDispatchThread.java:90)

r2773 | jmvanel | 2011-10-29 12:00:12 +0200 (sam. 29 oct. 2011) | 8 lignes

- all messages in TemporaryFrame now under control of new property verboseMode in class EulerGUI

* (default==false)

* in this case no stack trace is shown

- N3ConversionRefesher: enhance message "update N3; PARSE ERROR"

TODO: new property verboseMode in class EulerGUI:

- should also control logging

- should be under control of user preferences in N3


- all messages in TemporaryFrame now under control of new property verboseMode in class EulerGUI (default==false)

- N3ConversionRefesher: enhance message "update N3; PARSE ERROR"

TODO: new property verboseMode in class EulerGUI:

- should also control logging

- should be under control of user preferences in N3

2011-10-28

Fixing EulerGUI before release

COMMIT:

- OWL tree view : now take in account application language or "en"

- AddReferredOntologies : catch loading errors with a TemporaryFrame

Semantic Software Engineering

I coined the expression "Semantic Software Engineering".

At the first level, this means : writing configuration files in N3 instead instead of XML, Java properties, JSON, or ad-hoc formats.

Over the years, the RDF community has developped a bunch of tools to translate back and forth between RDF and other formats. But there is little available for software engineering data. This data includes, but not limited: SQL schemas and queries, Hibernate and other ORM, Spring and other injection frameworks configuration, Maven and other build tools, firewall configuration, web server (Tomcat, Apache , .. ), eclipse, OsGi, and other plugin architectures. ...

Why SSE ?

How to do?

Of course , I'm aware that semantics of software configuration items is often complex, with a narrow meaning related to one piece of software. There is no silver bullet, but much stuff can be reused with minimal inference.

At a higher level, "Semantic Software Engineering" can mean also express declarative objects closer to programming in N3. The most obvious domain is Graphical User Interface. Indeed the semantics brought by Swing, GWT, HTML, Flew, and others are close. For one thing because they borrowed from an older system: TCL/Tk .

2011-10-27

r2747 | jmvanel | 2011-10-20 21:26:32 +0200 (jeu. 20 oct. 2011) | 3 lignes

Branching https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui

to .../eulergui/trunk/eulerscala

# ??? svn merge -r 2747:HEAD https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/main/java src/main/java

diff -bw --brief --recursive --exclude entries --exclude all-wcprops --exclude tmp --exclude '*.svn-base' src/main/java ~/src/eulergui/src/main/java

POM: Scala version is a property; remove pom_scala.xml

Tests in error:

testCreateProjectInGUI2(eulergui.gui.TestFacebookSearch): JFileChooser's window

Tests run: 176, Failures: 1, Errors: 1, Skipped: 0

java.lang.ClassCastException: java.lang.Integer cannot be cast to scala.runtime.Nothing$
        at eulergui.gui.inference.InferenceSwingWorker$$anon$1.propertyChange(InferenceSwingWorker.scala:29)
        at java.beans.PropertyChangeSupport.fire(PropertyChangeSupport.java:335)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:327)
        at javax.swing.SwingWorker$SwingWorkerPropertyChangeSupport.firePropertyChange(SwingWorker.java:854)
        at java.beans.PropertyChangeSupport.firePropertyChange(PropertyChangeSupport.java:263)
        at javax.swing.SwingWorker.firePropertyChange(SwingWorker.java:676)

http://www.bertails.org/blog/scala_sbt_emacs

COMMIT

Drools 5.3.0.Final ; added Jena tdb and joseki for tests

Tests PASS: run: 173, Failures: 0, Errors: 0, Skipped: 0

new snapshot at Revision : 2765

<jmvanel> we are very near a release; just issue with scrollbar in N3 shell

COMMIT

FIXED : issue with scrollbar in N3 shell: call setPreferredSize() after painting the String

TODO : I don't know why horizontal scroll does not work.

A case where scroll works:

Thread [AWT-EventQueue-0] (Suspended (breakpoint at line 1047 in JViewport))
JViewport.setViewPosition(Point) line: 1047
JViewport.scrollRectToVisible(Rectangle) line: 433
JTextPane(JComponent).scrollRectToVisible(Rectangle) line: 3108
BasicTextUI$BasicCaret(DefaultCaret).adjustVisibility(Rectangle) line: 285
BasicTextUI$BasicCaret(DefaultCaret).repaintNewCaret() line: 1312
DefaultCaret$1.run() line: 1286
InvocationEvent.dispatch() line: 251
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 705
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 101
EventQueue$3.run() line: 666
EventQueue$3.run() line: 664
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
ProtectionDomain$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 76
EventQueue.dispatchEvent(AWTEvent) line: 675
EventDispatchThread.pumpOneEventForFilters(int) line: 211
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 128
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 117
EventDispatchThread.pumpEvents(int, Conditional) line: 113
EventDispatchThread.pumpEvents(Conditional) line: 105
EventDispatchThread.run() line: 90

Thread [AWT-Shutdown] (Running)
N3ShellPane.paintComponent(Graphics) line: 107
N3ShellPane(JComponent).paint(Graphics) line: 1054
JViewport(JComponent).paintChildren(Graphics) line: 887
JViewport(JComponent).paint(Graphics) line: 1063
JViewport.paint(Graphics) line: 725
JScrollPane(JComponent).paintChildren(Graphics) line: 887
JScrollPane(JComponent).paint(Graphics) line: 1063
JPanel(JComponent).paintChildren(Graphics) line: 887
JPanel(JComponent).paint(Graphics) line: 1063
JLayeredPane(JComponent).paintChildren(Graphics) line: 887
JLayeredPane(JComponent).paint(Graphics) line: 1063
JLayeredPane.paint(Graphics) line: 585
JRootPane(JComponent).paintChildren(Graphics) line: 887
JRootPane(JComponent).paintToOffscreen(Graphics, int, int, int, int, int, int) line: 5228
BufferStrategyPaintManager.paint(JComponent, JComponent, Graphics, int, int, int, int) line: 295
RepaintManager.paint(JComponent, JComponent, Graphics, int, int, int, int) line: 1206
JRootPane(JComponent).paint(Graphics) line: 1040
GraphicsCallback$PaintCallback.run(Component, Graphics) line: 39
GraphicsCallback$PaintCallback(SunGraphicsCallback).runOneComponent(Component, Rectangle, Graphics, Shape, int) line: 78
GraphicsCallback$PaintCallback(SunGraphicsCallback).runComponents(Component[], Graphics, int) line: 115
JFrame(Container).paint(Graphics) line: 1967
JFrame(Window).paint(Graphics) line: 3867
RepaintManager.paintDirtyRegions(Map<Component,Rectangle>) line: 781
RepaintManager.paintDirtyRegions() line: 728
RepaintManager.prePaintDirtyRegions() line: 677

Building EulerGUI with Scala sources

I discovered that externalPom() and libraryDependencies are *not* working together; alas mharrah said on SBT list

http://groups.google.com/group/simple-build-tool/browse_thread/thread/d7944762322b4362

I found a nice code sample by a Korean guy to translate a pom.xml into SBT style of dependencies.

https://gist.github.com/388334

But it does not do the transitive (recursive) dependencies.

object mavenToSBT extends Application {

val xml =         <dependencies>
            <dependency>                
                <groupId>org.scalanlp</groupId>
                <artifactId>scalala_${scala.version}</artifactId>
                <version>0.3.1</version>
            </dependency>
// ....
val data: Seq[(String, String, String)] = (xml \ "dependency") map { d =>
  val groupId = d \ "groupId" text
  val artifactId = d \ "artifactId" text
  val versionNum = d \ "version" text

  (groupId, artifactId, versionNum)
}

val CrossBuildArtifact = """([\w-]+)_\$SCALA_VERSION\$""".r

def dep(a: String, g: String, v: String, cross: Boolean) = {
  val sep = if (cross) "%%" else "%"
  val ident = a.split("-").map(_.capitalize).mkString
  """val %s = "%s" %s "%s" %% "%s" """ format (ident, g, sep, a, v)
}

val m = data map { 
case (g, CrossBuildArtifact(a), v) => dep(a, g, v, true)
case (g, a, v) => dep(a, g, v, false)
} mkString("\n")
println(m)
}

and , since externalPom() is not managing transitive dependencies, I'm trying to use my POM translated in Ivy ...

http://stefan222devel.blogspot.com/2010/01/how-to-convert-maven-pomxml-into-ivy.html

ant -f pom_to_ivy.ant.xml convert

and , now yet another issue : the sbt run in waiting forever ; it is not consuming CPU :(

I could try the STB from source code , as ArmyOfBruce advised

I got it "working" , but with Ivy the transitive dependencies are *not* managed either

Is there a utility to generate a pom with transitive dependencies included ?

Scala: using mavenToSBT.scala to translate the pom dependencies into stb format,

and putting this into built.sbt

plus added manually indirect dependencies ==> it compiles !!!

TODO run the tests in src/test/java

https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulerscala/mavenToSBT.scala

https://github.com/harrah/xsbt/wiki/Getting-Started-Library-Dependencies

https://github.com/harrah/xsbt/wiki/Library-Management

Using Maven (exec plugin?) as a class loader for my application

http://mojo.codehaus.org/exec-maven-plugin/project-summary.html

https://cwiki.apache.org/MAVEN/maven-3x-class-loading.html

2011-10-26

externalPom() in SBT

show compile:dependency-classpath

/home/jmv/src/eulerscala/src/main/java/eulergui/gui/inference/RunActionGeneric.java:80: error: no suitable constructor found for InferenceSwingWorker(RunActionGeneric,InferenceEngine)
[error]             InferenceSwingWorker worker = new InferenceSwingWorker(this, engine);
[error]                                           ^
[error]     constructor InferenceSwingWorker.InferenceSwingWorker(Nothing$,Nothing$) is not applicable
[error]       (actual argument RunActionGeneric cannot be converted to Nothing$ by method invocation conversion)
[error]     constructor InferenceSwingWorker.InferenceSwingWorker() is not applicable
[error]       (actual and formal argument lists differ in length)

[WARNING] The artifact xstream:xstream:jar:1.2 has been relocated to com.thoughtworks.xstream:xstream:jar:1.2

~/src/eulerscala/ % mvn -f pom_scala.xml clean  compile
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project eulergui: Compilation failure: Compilation failure:
[ERROR] /home/jmv/src/eulerscala/src/main/parser4j/java/eulergui/parser/n3/impl/parser4j/gen/MainGenerateParserDataForN3.java:[3,53] error: package eulergui.parser.n3.impl.parser4j.service.match does not exist
[ERROR] /home/jmv/src/eulerscala/src/main/parser4j/java/eulergui/parser/n3/impl/parser4j/gen/MainGenerateParserDataForN3.java:[77,38] error: cannot find symbol

<jmvanel> ArmyOfBruce, this works (I forgot alias in front ) :

<jmvanel> alias sbt='java -Xms1600m -XX:MaxPermSize=512M -XX:+CMSClassUnloadingEnabled -jar ~/src/read-write-web/sbt-launch-0.11.0.jar'

<jmvanel> and for my other trouble with Maven project, I'll try to give directly to stb the big classpath obtained from mvn dependency:build-classpath

<ArmyOfBruce> I've needed -Xss2M for sbt 0.11 to work for me.

<ArmyOfBruce> and at times, have appeared to need -XX:ReservedCodeCacheSize=256M

<ArmyOfBruce> jmvanel: if you have a big codebase, you may run into what I did with memory usage (which is fixed in current snapshots)

<jmvanel> the [success] was for goal compile ; now goal progard has trouble , but it first DID packaging into launcher-0.11.1-SNAPSHOT.jar ;

<jmvanel> but after when Reading library jar [/home/jmv/apps/jdk1.7.0/jre/lib/rt.jar , it complained :

<jmvanel> Error: Can't read [proguard.ClassPathEntry@186458c2] (Can't process class [com/oracle/net/Sdp$1.class] (Unsupported version number [51.0] for class format))

<jmvanel> but maybe what progard does is not indispensable

<jmvanel> ArmyOfBruce, dunno if it's a big codebase :) :

<jmvanel> wc src/**/*.java src/**/*.scala

<jmvanel> 59175 178164 1869225 total

<jmvanel> actually just 2 scala for now :(

/home/jmv/src/xsbt/launch/target/launcher-0.11.1-SNAPSHOT.jar

eclipse same-targets

http://ant.apache.org/ivy/


http://www.techdrivein.com/2011/05/10-useful-application-indicators-for.html

sudo apt-get install indicator-weather

https://secure.wikimedia.org/wikipedia/en/wiki/Comparison_of_FTP_client_software#Operating_system_support

When running 2 EG on same project with OWL model:

N3SourcetoDrools.translate(): java.lang.NullPointerException
java.lang.RuntimeException: translate(IRDFIterator iterator, ... file:/tmp/index.rdf.as.rules.n3
at eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:325)
at eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:260)
at eulergui.inference.drools.impl.N3DroolsEngineFacade.translate(N3DroolsEngineFacade.java:91)
at eulergui.project.Project.translateToDrools(Project.java:973)
at eulergui.gui.controller.N3ConversionRefesher.updateKB(N3ConversionRefesher.java:170)
at eulergui.gui.controller.N3ConversionRefesher.n3SourceChanged(N3ConversionRefesher.java:49)
at eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:152)
at eulergui.project.Project.fireN3SourceChanged(Project.java:1413)
at eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:91)
at eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:62)
at java.lang.Thread.run(Thread.java:722)
Caused by: java.lang.NullPointerException
at org.drools.rule.builder.PackageBuildContext.init(PackageBuildContext.java:101)
at org.drools.rule.builder.RuleBuildContext.<init>(RuleBuildContext.java:77)
at org.drools.compiler.PackageBuilder.addRule(PackageBuilder.java:2284)
at org.drools.compiler.PackageBuilder.addPackage(PackageBuilder.java:822)
at org.drools.compiler.PackageBuilder.addPackageFromDrl(PackageBuilder.java:380)
at eulergui.inference.drools.impl.N3SourcetoDrools.droolsCompile(N3SourcetoDrools.java:407)
at eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:318)
 ... 10 more

web.sourceforge.net is still unavailable for sftp , as was the case for all weekend :(

http://sourceforge.net/apps/trac/sourceforge/wiki/SSH%20key%20fingerprints

@ WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED! @

<ctsai-sf> I'm surprised that you're getting this now, the ssh key fingerprint on that host was last changed Late Jan/Early Feb.

<burley-sf> yep

<jmvanel> ctsai-sf, it's probably that I spent months on Debian, and recently went back on Ubuntu

<jmvanel> double boot

GET /home/jmv/index.rdf.n3p-shell-history.n3

java.lang.RuntimeException: ** ERROR ** /home/jmv/index.rdf.n3p-shell-history.n3 ** error(existence_error(source_sink,/home/jmv/index.rdf.n3p-shell-history.n3),[open/3|local_sp(269060340,269059464,[],[])])

SCM-Revision: 2754

<gribble> Sourceforge.net business hours are approximately 12:00 to 21:00 UTC, excluding weekends and holidays.

2011-10-24

Protégé 4.1 not launching with Java 7

% protege41
Core Bundle 1 failed to start.
Fatal Exception Caught trying to start Protege
org.osgi.framework.BundleException: Unresolved constraint in bundle org.protege.common [1]: package; (&(package=javax.swing.text)(version>=0.0.0))
        at org.apache.felix.framework.Felix.resolveBundle(Felix.java:3295)
        at org.apache.felix.framework.Felix.startBundle(Felix.java:1653)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:905)
        at org.apache.felix.framework.BundleImpl.start(BundleImpl.java:892)
        at org.protege.osgi.framework.Launcher.start(Launcher.java:125)
        at org.protege.osgi.framework.Launcher.main(Launcher.java:143)

 % java -version
java version "1.7.0"
Java(TM) SE Runtime Environment (build 1.7.0-b147)
Java HotSpot(TM) 64-Bit Server VM (build 21.0-b17, mixed mode)

2011-10-23

http://www.w3.org/2003/01/21-RDF-RDB-access/#Implementations

Idea for Attempto: the parser should output the lexicon from the sentences, be it guessed or declared.

http://www.javabeat.net/articles/29-introduction-to-google-guice-1.html

New article : configure-eulergui-in-n3

TODO before EulerGUI release

TODO :

- new example ckan_explore.n3p should also show metadata about the data sources discovered

- new endpoints found in EG project should be added in the combo box

 % scala
Welcome to Scala version 2.9.0.1 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.

scala>  List(1,2,2,3).groupBy({ i:Int => i }).values.filter(_.size > 1).isEmpty
res0: Boolean = false

scala>  List(1,2,2,3).groupBy({ i:Int => i }).values.filter(_.size > 1)
res1: Iterable[List[Int]] = List(List(2, 2))

scala>  List(1,2,2,3).groupBy({ i:Int => i })
res2: scala.collection.immutable.Map[Int,List[Int]] = Map(3 -> List(3), 1 -> List(1), 2 -> List(2, 2))

2011-10-22

{ ?C owl:maxCardinality ?MAX. ?C owl:onProperty ?P.
  _:d eu:findall ( ?IND {
    _:e eu:findall ( ?V
      { ?IND ?P ?V . ?IND a ?C . }
      ?LIST ).
    ?LIST math:memberCount ?COUNT.
    ?COUNT math:greaterThan MAX.
  } ?LIST2 ).
  ?LIST2 math:memberCount ?COUNT2.
  ?COUNT2 math:greaterThan 0 .
} => {
  ?P :violatesMaxCardinalityOnIndividuals ?LIST2 .
}.

% cat 2003/03swap/owl-maxCardinality.n3

@prefix log: <http://www.w3.org/2000/10/swap/log#>.

@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#>.

{?C owl:maxCardinality 1. ?C owl:onProperty ?P. ?U a ?C. ?U ?P ?Y. ?U ?P ?Z} => {?Y owl:sameAs ?Z}.

{?C owl:maxCardinality 0. ?C owl:onProperty ?P. ?X ?P ?Y. ?X a ?C} => false.

{?C owl:maxCardinality 1. ?C owl:onProperty ?P. ?X ?P ?Y. ?X ?P ?Z. ?X a ?C. ?Z owl:differentFrom ?Y} => false.

http://en.wikipedia.org/wiki/Ontology_editor

https://github.com/harrah/xsbt/wiki

EulerGUI error when loading an OWL from Web

HTTP HEAD is returning 401 (unauthorized) for HTTPS protocol :

URICacheImpl.getURITimeStamp(): https://subversion.assembla.com/svn/itsmo/tags/itsmo/1.1/v1/itsmo.owl : java.io.IOException: Server returned HTTP response code: 401 for URL: https://subversion.assembla.com/svn/itsmo/tags/itsmo/1.1/v1/itsmo.owl

Let's try:

http://subversion.assembla.com/svn/itsmo/tags/itsmo/1.1/v1/itsmo.owl

Works fine !

In fact it's a random error caused by URI checker thread.

COMMIT

- FIX (hopefullly) random error when launching https://subversion.assembla.com/svn/itsmo/tags/itsmo/1.1/v1/itsmo.owl

* EYE was being given an OWL RDF file

* now ctor N3SourceFromRDF(URL url, Project project) is setting currentlyUpdating = true;

and URIModificationChecker.checkN3Source() is calling n3Source.waitCurrentlyUpdating()

- FIX NPE in tooltips in OwlClassHierarchyBuilder.printPropertiesWithMatchingDomain()

* also found in itsmo.owl

Tests in error:

test_cv2(eulergui.gui.TestGenericGuiGenerationInsertLogical): Wait AbstractButton with text "Skill" loaded

testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl): Frame Title Component Chooser "jEdit.*.as.rules.n3.*"

2011-10-21

skos: <http://www.w3.org/2004/02/skos/core>

Starting at 18:56

http://protegewiki.stanford.edu/wiki/WebProtegeDevelopersGuide

svn ls --verbose http://smi-protege.stanford.edu/repos/protege/web-protege/branches/who/
  23878 vendetti              14 oct., 00:51 ./
  21200 tudorach        17873 07 janv. 2011 build.xml
  19163 tudorach              17 juin 2010 etc/
  22820 tudorach         2590 04 juin, 01:46 local.properties.template
  22779 tudorach         1021 18 mai, 03:16 readme.txt
  23878 vendetti              14 oct., 00:51 src/
  20783 elliott               11 nov. 2010 test/
  20783 elliott               11 nov. 2010 test-lib/
  23877 vendetti              14 oct., 00:50 war/

% svn ls --verbose http://smi-protege.stanford.edu/repos/protege/web-protege/trunk/
  22780 tudorach              18 mai, 04:01 ./
  18293 vendetti         9484 07 avril 2010 build-internal.xml
  17778 tredmond        11484 11 mars 2010 build.xml
  14928 tredmond              31 juil. 2009 etc/
  15124 tredmond         1042 25 août 2009 local.properties
  22780 tudorach         1021 18 mai, 04:01 readme.txt
  19884 elliott               26 août 2010 src/
  15558 vendetti              02 oct. 2009 war/

svn co http://smi-protege.stanford.edu/repos/protege/web-protege/branches/who/ web-protege

Install GWT plugin for eclipse from update site http://dl.google.com/eclipse/plugin/3.7 (need to install both the plugin and the GWT SDK)

Create Web Application Project (in the Google folder)

edu.stanford.bmir.protege.web

http://127.0.0.1:8888/Web_protege.html

GWT module 'web_protege' may need to be (re)compiled

EulerGUI error when loading an OWL from Web

In case of error, the ORIGINAL button should always be available.

This is obviously a programming error, EYE is being given an OWL file.

When pasting itsmo.owl directly :

Could not load N3 source from URL https://subversion.assembla.com/svn/itsmo/tags/itsmo/1.1/v1/itsmo.owl
ERROR in reasoning with External Prolog

n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:59)
eulergui.project.Project.reasonExternalProlog(Project.java:515)
eulergui.tools.SWRLTranslator.runTranslatorProject(SWRLTranslator.java:114)
eulergui.tools.SWRLTranslator.n3SourceAdded(SWRLTranslator.java:53)
eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:85)

Cause:
java.lang.RuntimeException: ** ERROR ** /tmp/eg-1982166131313413215.n3 ** illegal_token(char_code(/,47),after_line(5))
euler.Process.execute(Process.java:57)
euler.ProofEngine.runProofEngine(ProofEngine.java:180)
euler.ProofEngine.runProofEngine(ProofEngine.java:199)
n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:52)
eulergui.project.Project.reasonExternalProlog(Project.java:515)

When pasting itsmo.owl from Google search

http://www.google.com/search?q=ontology+business+contract+service+delivarable&ie=utf-8&oe=utf-8&aq=t&rls=org.mozilla:fr:unofficial&client=iceweasel-a#sclient=psy-ab&hl=fr&client=iceweasel-a&rls=org.mozilla:fr%3Aunofficial&source=hp&q=ontology+business+contract+service+deliverable+filetype:owl&pbx=1&oq=ontology+business+contract+service+deliverable+filetype:owl&aq=f&aqi=&aql=1&gs_sm=e&gs_upl=45784l48111l3l49084l8l8l0l0l0l1l216l1377l1.3.4l8l0&bav=on.2,or.r_gc.r_pw.,cf.osb&fp=c79451bebafe8677&biw=1229&bih=518

PROBLEM when managing N3 Cache for N3 source http://www.google.com/url?sa=t&rct=j&q=ontology%20business%20contract%20service%20deliverable%20filetype%3Aowl&source=web&cd=2&ved=0CCAQFjAB&url=https%3A%2F%2Fsubversion.assembla.com%2Fsvn%2Fitsmo%2Ftags%2Fitsmo%2F1.1%2Fv1%2Fitsmo.owl&ei=2E6hTvOfKcvRsgaV3M3fAg&usg=AFQjCNH3lwmt_a5rEaPVkZRtodDo7dthug&cad=rja
N3SourceFromXML_Gloze.extractXMLNamespaces():
Could not load from URI http://www.google.com/url?sa=t&rct=j&q=ontology%20business%20contract%20service%20deliverable%20filetype%3Aowl&source=web&cd=2&ved=0CCAQFjAB&url=https%3A%2F%2Fsubversion.assembla.com%2Fsvn%2Fitsmo%2Ftags%2Fitsmo%2F1.1%2Fv1%2Fitsmo.owl&ei=2E6hTvOfKcvRsgaV3M3fAg&usg=AFQjCNH3lwmt_a5rEaPVkZRtodDo7dthug&cad=rja
 reason: The markup in the document following the root element must be well-formed.
 cause: null

eulergui.inputs.N3SourceFromXML_Gloze.extractXMLNamespaces(N3SourceFromXML_Gloze.java:126)
eulergui.inputs.N3SourceFromXML_Gloze.convertToN3(N3SourceFromXML_Gloze.java:68)
eulergui.project.N3Source.manageN3Cache(N3Source.java:558)
eulergui.project.N3Source.doUpdate(N3Source.java:389)
eulergui.inputs.N3SourceFromXML_Gloze.prepare(N3SourceFromXML_Gloze.java:47)

Cause:
org.xml.sax.SAXParseException; systemId: http://www.google.com/url?sa=t&rct=j&q=ontology%20business%20contract%20service%20deliverable%20filetype%3Aowl&source=web&cd=2&ved=0CCAQFjAB&url=https%3A%2F%2Fsubversion.assembla.com%2Fsvn%2Fitsmo%2Ftags%2Fitsmo%2F1.1%2Fv1%2Fitsmo.owl&ei=2E6hTvOfKcvRsgaV3M3fAg&usg=AFQjCNH3lwmt_a5rEaPVkZRtodDo7dthug&cad=rja; lineNumber: 1; columnNumber: 52; The markup in the document following the root element must be well-formed.
org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
eulergui.inputs.N3SourceFromXML_Gloze.extractXMLNamespaces(N3SourceFromXML_Gloze.java:123)
eulergui.inputs.N3SourceFromXML_Gloze.convertToN3(N3SourceFromXML_Gloze.java:68)
eulergui.project.N3Source.manageN3Cache(N3Source.java:558)
eulergui.project.N3Source.doUpdate(N3Source.java:389)
 , caused by The markup in the document following the root element must be well-formed.

externalPom() in SBT

Hi externalPom() does not seem to add *recursive* dependencies to the classpath

<jmvanel> known bug ?

<jmvanel> mharrah, ping; I noticed similar bug 59 ; can it be that this extra feature is missing ?

externalPom() doesn't set classpaths correctly

https://github.com/harrah/xsbt/issues/59

Scala readings and test

http://macstrac.blogspot.com/2009/04/scala-as-long-term-replacement-for.html

Scala seems to hit the perfect sweet spot between the consise feel of a dynamic language, while actually being completely statically typed.

Another one :

The thing which most impresses me is the core language syntax is pretty small and simple (the spec is about a quarter the size of Java's); but its way more powerful and flexible and is very easy to extend in libraries to add new semantics and features. For example see the Scala Actors. So its ideal for creating either embedded DSLs or external DSLs. There's really no need to have Java , XPath, XSLT, XQuery, JSP, JSTL, EL and SQL - you can just use Scala with some DSLs here and there (examples of this later...).

Along this line of thought, why nobody ever did an N3 DSL in Scala ?

Quoted by Strachan above:

http://james-iry.blogspot.com/2009/04/java-has-type-inference-and-refinement.html

scala> object ComprehensionTest2 extends Application {
     |   def foo(n: Int, v: Int) =
     |     for (i <- 0 until n;
     |          j <- i + 1 until n if i + j == v) yield
     |       Pair(i, j);
     |   foo(20, 32) foreach {
     |     case (i, j) =>
     |       println("(" + i + ", " + j + ")")
     |   }
     | }
warning: there were 1 deprecation warnings; re-run with -deprecation for details
defined module ComprehensionTest2

scala> ComprehensionTest2
(13, 19)
(14, 18)
(15, 17)
res0: ComprehensionTest2.type = ComprehensionTest2$@11ad1541

Scala CHEAT SHEET v.0.1 }

http://en.wikipedia.org/wiki/Closure_(computer_science)

2011-10-20

Branching

http://nedbatchelder.com/text/quicksvnbranch.html

% svn ls https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/
eulergui/
eulergui_server/
% svn copy https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui \
           https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulerscala
Révision 2747 propagée.   

new snapshot at 15:25

on #sbt

hi

<jmvanel> new to scala ...

<jmvanel> just made a build.sbt to reuse my Maven POM , with help of #scala ...

<jmvanel> I have the impression that stb cannot manage a -SNAPSHOT dependency of Maven .

on #scala

Hi all

I'm trying to migrate my app to Scala; it compile perfectly with Maven enad eclipse, BUT using sbt-launch-0.11.0.jar , there is this strange message on a Java import statement :

... ParsingException.java:3: ParserException is not a member of _root_.net.sf.parser4j.parser.service

set logLevel := Level.Debug

http://macstrac.blogspot.com/2010/01/using-sbt-on-your-scala-maven-project.html

oem-laptop: /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/ % sbt compile 
[info] Set current project to default-69b272 (in build file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/)
[info] Compiling 2 Scala sources and 396 Java sources to /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/target/scala-2.9.1/classes...
[error] /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/src/main/java/n3_project/exceptions/parser/ParsingException.java:3: ParserException is not a member of _root_.net.sf.parser4j.parser.service
[error] import net.sf.parser4j.parser.service.ParserException;
[error]        ^
[error] /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/src/main/java/n3_project/exceptions/parser/ParsingException.java:10: not found: type ParserException
[error] public class ParsingException extends ParserException {
[error]                                       ^
[error] two errors found
[error] {file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/}default-69b272/compile:compile: Compilation failed

COMMITS

FIX using return value of the property call in a subsequent method call in a rule consequent *with parenthesis*

- add TEST BasicRuntimeTest.testJavaMappingAccessFieldAsN3VariableConsequent()

- Still usual random tests in error: testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl): Frame Title Component Chooser "jEdit.*.as.rules.n3.*"

2011-10-19

COMMITS

architecture.html : update parag. "N3 - Java mapping (embedded Java objects)" from a rule designer point of view.

FIX using return value of the property call in a subsequent method call *with parentheses*

add TEST BasicRuntimeTest.testJavaMappingAccesFieldAsN3Variable2()

_:obj a java:javax-swing-JFrame ." );

_:obj javam:getContentPane _:PANE ." );

_:LAB a java:javax-swing-JLabel ; javam:setText \"Papilio\" ." );

_:PANE javam:add ( _:LAB ) ." );

2011-10-18

http://www.w3.org/TR/sparql11-update/

interesting dialog on swig IRC

<tktiddle> So ive found that python rdflib allows you to store triples in a mysql database, whats the difference between doing this and using a "triple store" like 4store?

* swh est parti (Quit: swh)

<mischat> 4store uses its own backend, it holds everything in RAM

<mischat> not all triple stores do that, so it depends on the triplestore you are using i guess

* mischat note that I work on 4store, disclosure and all

<mischat> and yeah, so quite a few of the triplestore implementation store the triples to a SQL backed relational database

<shellac> tktiddle: rdf-specific stores have certain advantages over relational databases. they act in ways that are a bit alien to typical relational databases (e.g. value comparisons, self-joins)

<timbl> Lots of stuff happening in read-write linked data -- with data.fm and read-write-web projects both getting more solid

* egonw (~egonw@m77-219-198-199.cust.tele2.se) a rejoint #swig

<mischat> this is the new community project right, /me hasn't been following it at all, i guess i should

* mhausenblas (~mhausenbl@wlan-nat.fwgal01.deri.ie) a rejoint #swig

<timbl> data.fm was started by Joe Presbrey, read-write-web by Alexandre Bertails.

<mischat> is this where the work is taking place : http://www.w3.org/community/rww/ ?

* mischat recalls data.fm

<mischat> joe implemented the webid stuff very early on iirc

<timbl> Yes, python.

<timbl> Alex looked at getting a supported implementation running in W3C space, and ed=nded up writing one in Scala based on Jena and unfiltered.

* egonw_ (~egonw@109.58.90.82.bredband.tre.se) a rejoint #swig

<mischat> ms8 at stanford has implemented ACLs for 4store, which is pretty neat, i wonder whether he has thought about supporting webid's for identity

* ldodds (~ldodds@212.36.55.94) a rejoint #swig

<mischat> so that you can have a given identity the ability to update/query a collection of graphs in the sparql-store

* egonw est parti (Read error: Connection reset by peer)

* chimezie est parti (Quit: chimezie)

<timbl> The read-write-web model is that a graph corresponds to a (virtual) web document which is the granularity of access control

* timbl gtg

<gromgull> This just says "Bad Request" :( http://data.fm/rp_auth?provider=Gmail

Looking for testers on SWIG IRC

Good morning

I'm looking for testers for EulerGUI 1.9 beta: Semantic Web + N3/Turtle syntax GUI and framework:

SemWeb explorer( download, visualize and navigate through ontologies ), rules engines, mixing business rules and Java

Features (Fact Sheet) : http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#Features

join us at #eulergui .

Configure EulerGUI through N3 preference file

Currently this does work; generated Drools is OK, LocalAction is not abstract anymore, and ProjectGUI constructor does not start internal KB (ApplicationKB) anymore.

{ ?P a java:n3_project-ProjectGUI .
} => {
  _:d eg:trace ( "addInToolbarAndMenu" ?P ).
  ?P javap:sourceFilesManagement ?SFM .
  _:ACTION a java:n3_project-LocalAction .
  _:ACTION javam:setProperties ( _:ACTION "bla" "internet.png" "bla bli" "" ) .
  ?SFM javam:addInToolbarAndMenu ( _:ACTION ) .
}.

HowTo :

Just paste the above rule in in the preference file ( from menu File / preferences ).

Works too ( no parentheses ) :

{ ?P a java:n3_project-ProjectGUI .
} => {
  _:d eg:trace ( "addInToolbarAndMenu" ?P ).
  ?P javap:sourceFilesManagement ?SFM .
  _:ACTION a java:n3_project-LocalAction .
  _:ACTION javam:setProperties ( _:ACTION "bla" "internet.png" "bla bli" "" ) .
  ?SFM javam:addInToolbarAndMenu _:ACTION .
}.

Does not work with question mark variables and parenthesis :

Grave: Drools Error in file:/home/jmv/.eulergui/preferences.n3 , Error: Rule Compilation error $SFM cannot be resolved

FIXED on oct 19

{ ?P a java:n3_project-ProjectGUI .
} => {
  _:d eg:trace ( "addInToolbarAndMenu" ?P ).
  ?P javap:sourceFilesManagement ?SFM .
  ?ACTION a java:n3_project-LocalAction .
  ?ACTION javam:setProperties ( ?ACTION "bla" "internet.png" "bla bli" "blu" ) .
  ?SFM javam:addInToolbarAndMenu ( ?ACTION ) .
}.

2011-10-17

sourceMenu

Drools bug reports

Such expressions in LHS do not compile anymore :

C( f == "a" || f == "b" )

==> compiler says : Predicate ' f == "a" || f == "b" ' must be a Boolean expression

Note that this does not work any more :

C( ( f == "a" ) || ( f == "b" ) )

Run this code :

https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/test/java/samples/DroolsSample.java

and look at tripleTestDisjunction(), tripleTestDisjunction2()

with this library :

http://eulergui.sourceforge.net/maven2/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-20110824.171234-1.jar

If needed , auxiliary sources are also here :

http://eulergui.sourceforge.net/maven2/eulergui/eulergui/1.9-SNAPSHOT/


JBRULES-3255

<jmvanel> I finally found a case that fails with Drools 5.4.0-SNAPSHOT:

<jmvanel> inserting fact before populating rule base => rule does not fire, because of eval()

<jmvanel> https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/test/java/samples/DroolsSample.java

<jmvanel> look at testEval()

rm -r /home/jmv/.m2/repository/org/drools/*/5.4.0-SNAPSHOT

rm -r /home/jmv/.m2/repository/org/mvel/mvel2/*

Configure EulerGUI trough N3 preference file

Currently this does not work; generated Drools is OK, but

{ ?P a java:n3_project-ProjectGUI .
} => {
  _:d eg:trace ( "addInToolbarAndMenu" ?P ).
  ?P javap:sourceFilesManagement ?SFM .
  _:ACTION a java:n3_project-LocalAction .
  _:ACTION javam:setProperties ( _:ACTION "bla" "icon1" "bla bli" "" ) .
  ?SFM javam:addInToolbarAndMenu ( _:ACTION ) .
}.

runtime error :

Exception executing consequence for rule "preferences.n3 0" in preferences_n3_0: java.lang.NullPointerException
at org.drools.runtime.rule.impl.DefaultConsequenceExceptionHandler.handleException(DefaultConsequenceExceptionHandler.java:39)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1101)
at org.drools.common.DefaultAgenda.fireNextItem(DefaultAgenda.java:1029)
at org.drools.common.DefaultAgenda.fireAllRules(DefaultAgenda.java:1251)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:708)
at org.drools.common.AbstractWorkingMemory.fireAllRules(AbstractWorkingMemory.java:672)
at unif.TripleStoreDrools.fireAllRules(TripleStoreDrools.java:330)
at eulergui.gui.controller.ApplicationKB.fireAllRules(ApplicationKB.java:205)
at eulergui.gui.actions.OpenPreferencesAction.applyUserPreferences(OpenPreferencesAction.java:77)
at n3_project.ProjectGUI.<init>(ProjectGUI.java:160)
at n3_project.ProjectGUI.newWindow(ProjectGUI.java:257)
at n3_project.ProjectGUI.main(ProjectGUI.java:216)
Caused by: java.lang.NullPointerException
at n3_project.SourceFilesManagement.addInToolbarAndMenu(SourceFilesManagement.java:109)
at preferences_n3_0.Rule_preferences_n3_0.defaultConsequence(Rule_preferences_n3_0.java:25)
at preferences_n3_0.Rule_preferences_n3_0DefaultConsequenceInvoker.evaluate(Unknown Source)
at org.drools.common.DefaultAgenda.fireActivation(DefaultAgenda.java:1091)

Actually, there are 2 issues here:

  1. configuring a ProjectGUI object while constructor is not finished is not clean;
  2. class n3_project-LocalAction is actually abstract

2011-10-16

Semantic web training

analogy between RDF graphs and graphs of pointers (references) in C / Java / etc

natural translation between XML and RDF

Drools engine : associate an URI to the return value of a property call (in a rule)

COMMIT

- Drools engine : associate an URI to the return value of a property call (in a rule) : now this works : test/javaMappingAccessFieldAsN3Variable.n3

* initialize correctly the KB in N3SourcetoDrools.launchDrools()

- DroolsSample: add test for recent regression:

C( f == "a" || f == "b" )

compiler says : Predicate '...' must be a Boolean expression

TODO still failures:

Failed tests: testTooltip(eulergui.gui.TestEulerGUITooltip): "<HTML><http://exampleS#waza>:<BR><b>"Label for waza"</b><br/></HTML>" does not match pattern: .*Comment for waza in the ex: namespace.*

Tests in error:

testSimpleURLProject(eulergui.gui.TestJavaEditor): Wait for "getText() Component Chooser "PhilipKDick"

2011-10-15

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 (software_applications.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 (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)
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)
Drools Error: Predicate 'predicate == "<http://www.w3.org/2000/01/rdf-schema#label>" || predicate == "<http://www.w3.org/2000/01/rdf-schema#comment>" || predicate == "<http://www.w3.org/2000/01/rdf-schema#domain>" || predicate == "<http://www.w3.org/2000/01/rdf-schema#range>" || predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>"' must be a Boolean expression
[Line: 57, Column: 6]
ErrorLines:  - 57

"src/main/resources/eulergui/inference/drools/impl/infrastructure-rules.drl" 111 lignes

query "document_owl" ( String $RESOURCE )
  //  "rdfs:label", "rdfs:comment",  "rdfs:domain", "rdfs:range"
  triple : Triple( subject == $RESOURCE,
      predicate == "<http://www.w3.org/2000/01/rdf-schema#label>"
    // || predicate == "<http://www.w3.org/2000/01/rdf-schema#comment>"
    // || predicate == "<http://www.w3.org/2000/01/rdf-schema#domain>"
    // || predicate == "<http://www.w3.org/2000/01/rdf-schema#range>"
    // || predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>"
  )
end

EulerGUI : trying to keep facts when populating rule base

See EulerGUI dev

updated DroolsSample with a case that fails with Drools 5.4.0-SNAPSHOT:

inserting fact before populating rule base ==> rule does not fire, because of eval()

https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/src/test/java/samples/DroolsSample.java

look at testEval()

Either:

COMMIT

clean code in N3Source, N3SourcetoDrools, RETETest

ProjectGUI : set log level to SEVERE

2011-10-14

http://maven.apache.org/guides/mini/guide-central-repository-upload.html

Using svn-bisect with Maven

svn-bisect start 2721 2725
svn-bisect run 'DISPLAY=:1 LANG=en mvn test \
  --no-plugin-updates --offline \
  -Dtest="eulergui.gui.TestGenericGuiGenerationInsertLogical#test_uml2"'
 ...

Regression found!
Last good revision: r2721
First bad revision:
------------------------------------------------------------------------
r2722 | jmvanel | 2011-10-12 11:09:49 +0200 (mer. 12 oct. 2011) | 3 lignes

Drools engine : associate an URI to the return value of a property call (in a rule), WIP
tests PASS, except random known errors ( not in eclipse ) :
test_person_import3(eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules): Wait AbstractButton with text "address" loaded , etc ...

I actually found the bug this way !

Now only 1 test in error: testSimpleURLProject(eulergui.gui.TestJavaEditor): Wait for "getText() Component Chooser "PhilipKDick"

This corresponds to a hack to change the title of the jEdit frame (tolerable) .

EulerGUI : fighting with regressions: UML ,etc

Bad scenario :

  1. run cv2.n3p
  2. File / quit ==> message "all is not saved"
  3. click on window red cross ==> app. is srill running

Tests in error:
test_uml2(eulergui.gui.TestGenericGuiGenerationInsertLogical)
test_uml2(eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules)

Logger.getLogger("eulergui.cache")

FIXED this:

Thread [doN3SourceAdded: ./uml_owl-rules.n3] (Suspended (exception RuntimeException))
N3Source.manageParseN3() line: 408
N3Source.update() line: 377
N3ConversionRefesher.updateN3(N3Source) line: 120
UpdateN3Thread.run() line: 40

COMMITED

- Drools engine : associate an URI to the return value of a property call (in a rule), WIP; now that Drools generated DRL is correct, still need to initialize correctly the KB in Project.launchDrools()

* pave the way for reusing Working memory when launching Drools ( flag useNewWorkingMemory )

- simplify class /ProjectFileManagement.OpenProjectAction: call projectGUI.populateWindow( project, ...

- name Drools packages after N3 file (class N3SourcetoDrools)

- EulerGUI.java :

* introduce globalLevel ; comment out System.exit(0); (?? re-enable ? )

* call rethrowEventsExceptListener(guiUpdater) through SwingUtilities.invokeLater()

2011-10-13

New Ubuntu today! I'll check if my mouse and keyboard is not slowing down anymore ...

EulerGUI : fighting with regressions

REGRESSIONS:

- re-activating the main query with the checkbox does not work

- sometimes the inference buttons are not activated when the N3 sources pre-processing is finished

- changing project from File menu closes the application

- FuXi should be deactivated

Asked on Drools IRC:

I populate a working memory while the rule base is empty; then I populate the rule base ; then I fire rules ==> just one rule actually fired.

Is this normal ? ( using 5.4.0-SNAPSHOT )

<etirelli> jmvanel: assuming they should fire, looks like a regression

When launching rule base for the second time:

Daemon Thread [SwingWorker-pool-3-thread-2] (Suspended (breakpoint at line 972 in N3SourcetoDrools))
N3SourcetoDrools.setRuleBase(RuleBase) line: 972
N3DroolsEngineFacade.setRuleBase(RuleBase) line: 175
Project.compiledRulebaseLoadedFromCache(String) line: 734
Project.translateN32Drools(boolean) line: 881
Project.prepareDrools(boolean) line: 860
Project.doRunDrools(boolean) line: 814
Project.runDroolsTriples(boolean) line: 765
DroolsInferenceEngine.launch() line: 30
InferenceSwingWorker.doInBackground() line: 48
InferenceSwingWorker.doInBackground() line: 1
SwingWorker$1.call() line: 296
FutureTask$Sync.innerRun() line: 334
SwingWorker$2(FutureTask<V>).run() line: 166
InferenceSwingWorker(SwingWorker<T,V>).run() line: 335
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1110
ThreadPoolExecutor$Worker.run() line: 603
Thread.run() line: 722

2011-10-12


Daemon Thread [SwingWorker-pool-3-thread-1] (Suspended (access of field workingMemory in N3SourcetoDrools))
N3SourcetoDrools.removeRecordedFacts(N3Source) line: 857
N3DroolsEngineFacade.translate(N3Source, boolean, boolean, boolean) line: 90
Project.doTranslateN32Drools(boolean, boolean) line: 931
Project.translateN32Drools(boolean) line: 882
Project.prepareDrools(boolean) line: 860
Project.doRunDrools(boolean) line: 814
Project.runDroolsTriples(boolean) line: 765
DroolsInferenceEngine.launch() line: 30
InferenceSwingWorker.doInBackground() line: 48
InferenceSwingWorker.doInBackground() line: 1
SwingWorker$1.call() line: 296
FutureTask$Sync.innerRun() line: 334
SwingWorker$2(FutureTask<V>).run() line: 166
InferenceSwingWorker(SwingWorker<T,V>).run() line: 335
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1110
ThreadPoolExecutor$Worker.run() line: 603
Thread.run() line: 722

Thread [doN3SourceAdded: BloodPressure.n3] (Suspended)
N3SourcetoDrools.copyN3factsToDrools(List<ITriple>) line: 630
N3DroolsEngineFacade.copyN3factsToDrools(List<ITriple>) line: 231
Project.translateToDrools(N3Source, boolean, boolean) line: 975
N3ConversionRefesher.updateKB(Project, N3Source) line: 170
UpdateN3Thread.run() line: 41

Drools engine : associate an URI to the return value of a property call (in a rule), WIP

tests PASS, except random known errors ( not in eclipse ) :

test_person_import3(eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules): Wait AbstractButton with text "address" loaded , etc ...

2011-10-11

16:16:53 [SwingWorker-pool-3-thread-1] [error] SwingWorker-pool-3-thread-1: Drools Error: Rule Compilation error $P.contentPane cannot be resolved or is not a field

16:16:53 [SwingWorker-pool-3-thread-1] [error] SwingWorker-pool-3-thread-1: $PANE cannot be resolved

16:16:53 [SwingWorker-pool-3-thread-1] [error] SwingWorker-pool-3-thread-1: ErrorLines:

16:16:53 [SwingWorker-pool-3-thread-1] [error] SwingWorker-pool-3-thread-1: - 33

-----------------------------------------

INTERNAL ERROR when initializing internal rule engine

null

eulergui.inference.drools.impl.N3JavaMappingBuiltin.acceptConsequent(N3JavaMappingBuiltin.java:658)

eulergui.inference.drools.impl.DroolsTripleHandler.acceptConsequent(DroolsTripleHandler.java:248)

eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:778)

eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:285)

eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:257)

Cause:

-------------------------------------

INTERNAL ERROR when initializing internal rule engine

null

java.lang.Class.forName0(Native Method)

java.lang.Class.forName(Class.java:186)

eulergui.util.ReflectionHelper.findMethodWithSameNameAndArgumentsLength(ReflectionHelper.java:153)

eulergui.inference.drools.impl.N3JavaMappingBuiltin.acceptConsequent(N3JavaMappingBuiltin.java:653)

eulergui.inference.drools.impl.DroolsTripleHandler.acceptConsequent(DroolsTripleHandler.java:248)

Cause:

2011-10-10

RDFa parser in EulerGUI

The cruftiest RDFa parser in the world ! ( self admitedly :) )

https://github.com/shellac/java-rdfa#readme

It has a Maven repo ! http://www.rootdev.net/maven/repo/

<jmvanel> Hi shellac

<jmvanel> just discovered your RDFA parser !

<jmvanel> I'll probably add it in EulerGUI

<shellac> hi there

<shellac> oh, please do

<shellac> I will implement 1.1 soon! they keep changing it :-(

RDF Meets JPA

Articles

Empire: RDF & SPARQL Meet JPA

http://semanticweb.com/empire-rdf-sparql-meet-jpa_b15617

http://semanticweb.com/binding-java-objects-to-rdf_b10682

2011-10-06

- try to fix randon errors in TestJemmy subsclasse : call waitUpdateThreads in launch*

TODO: in TestJavaEditor random errors in finding editor content

Still 1 Test in error: test_person_import3(eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules)

Waiting for "getText() Component Chooser "name="subordonate""
" subcomponent
Trace:
Start to wait action "Wait for "getText() Component Chooser "name="subordonate""
" subcomponent to be displayed"
11:40:19 [main] [error] main: >> InvocationTargetException in GetTextComponentChooser

2011-10-05

- wait N3 sources preprocessing before activating inference engines ,

- and modify also the test : TestJemmy.generateAndLaunch(), but TODO: Failures: 1, Errors: 6

- the exit in EulerGUI stops the test suite (!?) , so add a test ProjectGUI.isTestMode()

Tests run: 174, Failures: 0, Errors: 0, Skipped: 0

[INFO] 
[INFO] <<< maven-surefire-report-plugin:2.8.1:report (default-cli) @ eulergui <<<
[INFO] 
[INFO] --- maven-surefire-report-plugin:2.8.1:report (default-cli) @ eulergui ---
[WARNING] Unable to locate Test Source XRef to link to - DISABLED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 20:41.762s
[INFO] Finished at: Wed Oct 05 17:13:15 CEST 2011

Try to fix the no exit issue when the last remaining frame is the generated frame:

- added a call to StatefulSession.dispose() , but that does not solve my issue

- call exit when the last remaining frame is the EulerGUI

NOTES:

- DefaultCloseOperation is always DISPOSE_ON_CLOSE , cf http://download.oracle.com/javase/6/docs/api/java/awt/doc-files/AWTThreadIssues.html

- the issue does not seem to be the preferences thread (?)

FIXED:

Exception in thread "AWT-EventQueue-0" java.lang.Error: Cannot call invokeAndWait from the event dispatcher thread
        at java.awt.EventQueue.invokeAndWait(EventQueue.java:1223)
        at javax.swing.SwingUtilities.invokeAndWait(SwingUtilities.java:1346)
        at n3_project.ProjectGUI.newWindow(ProjectGUI.java:266)
        at n3_project.ProjectGUI.newWindow(ProjectGUI.java:251)
        at n3_project.ProjectFileManagement$1.actionPerformed(ProjectFileManagement.java:628)
        at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2018)

COMMIT: upgrade Maven plugins :

maven-jar-plugin ..................................... 2.3.1 -> 2.3.2

[INFO] maven-javadoc-plugin ..................................... 2.7 -> 2.8

[INFO] maven-release-plugin ................................... 2.1 -> 2.2.1

[INFO] org.codehaus.mojo:build-helper-maven-plugin .............. 1.5 -> 1.7

[INFO] org.codehaus.mojo:buildnumber-maven-plugin ........ 1.0-beta-4 -> 1.0

[INFO] org.codehaus.mojo:exec-maven-plugin .................... 1.2 -> 1.2.1

2011-10-04

field InferenceEngineSupport engineSupport moved to class InferenceSwingWorker

~/jmv_ubuntu_11.4/src/eulergui_scala/ % mvn -f pom_scala.xml clean compile
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.3.2:compile (default-compile) on project eulergui: Compilation failure: Compilation failure:
[ERROR] /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/
src/main/parser4j/java/eulergui/parser/n3/impl/parser4j/gen/MainGenerateParserDataForN3.java:[3,53] error: package eulergui.parser.n3.impl.parser4j.service.match does not exist
[ERROR] /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui_scala/
src/main/parser4j/java/eulergui/parser/n3/impl/parser4j/gen/MainGenerateParserDataForN3.java:[77,38] error: cannot find symbol

[INFO] --- maven-scala-plugin:2.15.2:compile (default) @ eulergui ---

[WARNING] you don't define org.scala-lang:scala-library as a dependency of the project

[INFO] Checking for multiple versions of scala

[INFO] The following plugin updates are available:
[INFO]   maven-checkstyle-plugin .................................. 2.6 -> 2.7
[INFO]   maven-jar-plugin ..................................... 2.3.1 -> 2.3.2
[INFO]   maven-javadoc-plugin ..................................... 2.7 -> 2.8
[INFO]   maven-release-plugin ................................... 2.1 -> 2.2.1
[INFO]   org.codehaus.mojo:build-helper-maven-plugin .............. 1.5 -> 1.7
[INFO]   org.codehaus.mojo:buildnumber-maven-plugin ........ 1.0-beta-4 -> 1.0
[INFO]   org.codehaus.mojo:exec-maven-plugin .................... 1.2 -> 1.2.1
[INFO]   org.codehaus.mojo.webstart:webstart-maven-plugin  1.0-beta-1 -> 1.0-beta-2
[INFO] 
[WARNING] The following plugins do not have their version specified:
[WARNING]   emma:maven-emma-plugin ................................. (unknown)
[WARNING]   org.apache.felix:maven-bundle-plugin ................... (unknown)

cd eulergui_scala
mvn -f pom_scala.xml eclipse:eclipse

Michel Daviot a écrit:

J'ai bossé sous Eclipse Helios avec Scala 2.9.1, sans Maven ni SBT ...

Pour migrer, j'ai d'abord identifié les sources avec le moins de dépendances, renommé le fichier scala en java et fait toutes les modifs à la main.

J'ai trouvé le compilo d'Eclipse moyen sur un projet mixte, je devais systématiquement faire un clean du projet sinon j'avais des erreurs de compilation loufoques.

Une fois tous les fichiers sources au format scala, j'ai progressivement retiré les dépendances vers les bilbiothèques java, en particulier les collections, et commencé à "scalaiser" certaines parties du code.

ttp://download.scala-ide.org/releases-29/2.0.0-beta

<jmvanel> Manual : http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html

<jmvanel> Beta : http://eulergui.sourceforge.net/tmp/

<jmvanel> now runs on Java 7

You might be interested in the SPARQL queries; don't know a better tool for that

which tools do you use to explore the semweb ? for data and for vocabs ?

2011-10-03

http://wiki.eclipse.org/FAQ_How_do_I_increase_the_heap_size_available_to_Eclipse?

scala eclipse plugin : http://download.scala-ide.org/releases/2.0.0-beta

./ape.exe -guess -text 'p:Paul has a car.' -solo owlfsspp

TODO before EulerGUI release

https://gist.github.com/1259259

http://community.jboss.org/wiki/DroolsLanguageEnhancements#Casting_Nested_Objects

Traits, Duck Typing and Dynamic Semantic Learning

http://blog.athico.com/2011/07/traits-duck-typing-and-dynamic-semantic.html

https://github.com/droolsjbpm/drools/blob/master/drools-compiler/src/test/resources/org/drools/factmodel/traits/testTraitDon.drl

https://issues.jboss.org/browse/JBRULES-3215?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12631832#comment-12631832

To disable compile time type checking for the Assignment class you can use a declare statement:

declare Assignment @typesafe( false ) end

Good evening

I need testers again for EulerGUI, this time it is the features for exploration of SW that I put forward, see http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/explore_semweb.html

For SPARQL queries also, I know of no better GUI tool .

Snapshot here: http://eulergui.sourceforge.net/tmp/ - IRC here : # eulergui

eg test/true_antecedent_java2.n3
 ...
Exception in thread "main" java.lang.NullPointerException
        at eulergui.gui.controller.ApplicationKB.registerProject(ApplicationKB.java:538)
        at eulergui.project.Project.setApplicationKB(Project.java:1431)
        at eulergui.project.Project.prepare(Project.java:1182)
        at eulergui.project.ProjectFactory.prepareProject(ProjectFactory.java:313)
        at n3_project.ProjectGUI.newWindow(ProjectGUI.java:262)
        at n3_project.ProjectGUI.main(ProjectGUI.java:214)

New test : test/javaMappingAccessFieldAntecedent.n3

:f a java:javax-swing-JFrame .

{ ?P a java:javax-swing-JFrame .
  # ?P javap:contentPane ?PANE .
} => {
  ?P javap:contentPane ?PANE .
  _:LAB a java:javax-swing-JLabel ; javam:setText "Papilio" .
  ?PANE javam:add _:LAB .
  ?P javam:pack ()
    ; javam:setVisible ( true ).
}.

COMMIT

Drools engine : now possible to associate an URI to the return value of a method or property call (as fact , not in a rule), e.g.:

_:obj a java:javax-swing-JFrame .
_:obj javam:getContentPane _:PANE . #<<<<
_:LAB a java:javax-swing-JLabel ; javam:setText "Papilio" .
_:PANE javam:add _:LAB .

TESTED in BasicRuntimeTest.testJavaMappingAntecedentVariableObject

2011-10-02

This morning

COMMIT

- Add call to Namespaces.declareImportantPrefixes() in OpenPreferencesAction.java .

- make methods public to enable N3 Java triples to access it :

ProjectGUI.getSourceFilesManagement()

SourceFilesManagement.addInToolbarAndMenu()

2011-10-01

Add features in EG through the preferences.n3 file

I try to add features in EG through the preferences.n3 file; conceptually this is a combination of Spring framework configuration and eclipse extension points .

I think of adding an ACE import in EG ; this would be added by the preferences file .

Currently this does not work in EulerGUI :

java:eulergui-EulerGUI javam:instance _:instance .

EulerGUI.instance () is a (singleton) method without argument that returns an EulerGUI object.

It does not fit well with the current Java-N3 mapping , where this would be interpreted as the call to method instance with one argument bound to name instance in the KB .

I could add this feature : at runtime, when the object in a Java N3 triple is not bound, it is interpreted as a new binding to the return value of the method corresponding to the N3 predicate.

Currently this does not work, Drools says: $SFM cannot be resolved

{ ?P a java:n3_project-ProjectGUI .
} => {
  ?P javap:sourceFilesManagement ?SFM .
  ?ACTION a java:n3_project-LocalAction .
  ?ACTION javam:setProperties ( ?ACTION "bla" "icon1" "bla bli" "" ) .
  ?SFM javam:addInToolbarAndMenu ?ACTION .
}.

because this is generated:

  DeferredPropertyAssignment dpa_P2 = new DeferredPropertyAssignment();
  dpa_P2.setSubject($P.toString() );
  dpa_P2.setPredicate( "<http://java.sun.com/predicate#sourceFilesManagement>" );
  dpa_P2.setObject($SFM.toString() );
  insert( dpa_P2 );

2011-09-30

EulerGUI TODO

TODO

search join in src

inference buttons are activated after all the N3 source buttons : use setReaderThread ???

test ng4j

example with TDB : store biz data on SPARQL instead of file

EulerGUI dev : accelerate GUI startup

Fixed non thread safe stuff in manipulating listeners list in ProjectGUI and ProjectChangeSupport

<jmvanel> soon today there will be a GUI quickly shown, and after in another thread the downloads, conversions to N3 , parsing, and feeding the KB takes places ;

<rszeno> :)

<jmvanel> when it's finished the inference buttons are activated

<jmvanel> after all the N3 source buttons are activated ;

<jmvanel> so what happens is visible :)

Working with threads like I do forces me to read my code and make it more robust ; it's like exercise that make a person more robust .

In N3ConversionRefesher.doN3SourceAdded() , a new thread is started for each N3Source, to process each ones in parallel. It's even better on multi-core machines, but even on single core, the download from Internet can occur in parallel.

svn commit src/main/java/eulergui/gui/view/ButtonsPanel.java src/main/java/eulergui/gui/controller/ProjectGUI_Updater.java

Accelerate GUI startup by postponing listeners until after reading input and GUI creation (WIP)

- now in class ButtonsPanel,add N3Source Panel of buttons only if not already there

2011-09-29

Start ATTEMPTO servers locally

% cat ~/bin/start_ace_servers.sh
cd ~/src/ape/ ; swipl -x ape.exe -- -httpserver -port 8000 &
cd  ~/src/owlverbalizer/
swipl -x owl_to_ace.exe -- -httpserver -port 5123 -workers 2 -timelimit 30 &

Changed the Protégé plugins location to

http://smi-protege.stanford.edu/protege4/plugins/4.1/

was:

http://smi-protege.stanford.edu/protege4/plugins/4.1-plugins-2011-03-28.repository

EulerGUI dev : accelerate GUI startup

Accelerate GUI startup by postponing listeners until after reading input (WIP)

Accelerate GUI startup by postponing listeners until after reading input (WIP)

- now calling app.rethrowEventsForListener(guiUpdater) , waiting in AWT event thread,

then app.rethrowEventsExceptListener(guiUpdater) in a new thread , to have all downloads and processings in background

java.util.ConcurrentModificationException
at java.util.LinkedHashMap$LinkedHashIterator.nextEntry(LinkedHashMap.java:373)
at java.util.LinkedHashMap$KeyIterator.next(LinkedHashMap.java:384)
at eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:76)
at eulergui.project.Project.rethrowEventsPlease(Project.java:1359)
at n3_project.ProjectGUI.rethrowEventsExceptListener(ProjectGUI.java:293)
at n3_project.ProjectGUI.access$1(ProjectGUI.java:291)
at n3_project.ProjectGUI$2.run(ProjectGUI.java:283)
at java.lang.Thread.run(Thread.java:662)

2011-09-28

TODO add "Sketch of a roadmap" to projects

Wrong !!!!!!!!!

{ ?P a java:eulergui-project-Project .
} => {
  ?P javam:addN3Source <jar://eulergui/rules/project-stats.n3> .
}.

Right !!!!

{ ?P a java:eulergui-project-Project .
} => {
  ?P owl:import <jar://eulergui/rules/project-stats.n3> .
}.

src/main/resource//eulergui/rules/project-stats.n3

{ ?D void:endPoint ?EP .
} => {
  ?EG java:addEnPoint ?EP .
}.

rszeno> btw, one trick, type in the address bar about:about then you have access to the inner side of the browser . some things are usefull some are not

move class TemporaryFrame to package eulergui.gui;

N3 rules triggering Java actions

Posted on

http://sourceforge.net/mailarchive/forum.php?thread_name=CANwvFKATX1LedgDm582AVDesg-ACBL5zzK4mr6fEYaoPPzN-XQ%40mail.gmail.com&forum_name=deductions-user

and

http://sourceforge.net/mailarchive/forum.php?thread_name=CANwvFKATX1LedgDm582AVDesg-ACBL5zzK4mr6fEYaoPPzN-XQ%40mail.gmail.com&forum_name=eulergui-user

<jmvanel> BTW uploaded a snapshot yesterday , so that you can load http://graph.facebook.com/jmvanel into EG :)

I'm having fun with N3 rules triggering Java actions; look at examples/BloodPressure.n3p . This works nicely :

{       ?L :alert "true"
        ; log:uri ?LL .
} => {  ?F a java:javax-swing-JFrame
        ; javap:title ?LL
        ; javam:setSize ( 200 200 )
        ; javap:visible true .
}.

However from a software engineering point of view, this is mixing too much N3 and Java. On the right handside, one has to know too much of Java. And EulerGUI does not have the facilities of eclipse for Java code completion.

For EulerGUI framework, the recommended practice is to encapsulate the Java action in a class . Then this class itself will be encapulated in a pure N3 action:

{       ?L :alert "true"
        ; log:uri ?LL .
} => {  :application :displayAlert ?LL . }.

{ :application :displayAlert ?LL .
} => { 
  ?F a java:eulergui-gui-TemporaryFrame
  ; javap:localizedMessage ?LL .
}.

In this article, I showed how one can add features to the current project, which becomes thus a kind of application.

In a next article, I'll show how one can add features to EulerGUI itself, expressed by rules, Java classes, or a mixture of both.

The snapshots are here :

http://eulergui.sourceforge.net/tmp/

11:52:45 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.InstantiationException: java.net.URL
11:52:45 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Continuing ...
11:52:45 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.RuntimeException: failed to evaluate: <unbound>=Class.new();
11:52:45 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Continuing ...

2011-09-27

https://github.com/daveray/seesaw#readme

FIX : can now add N3 URL source that has JSON as default; need to control the Accept header not only in SourceFactory, but in IOManager.downloadN3ToLocalCache() ; also need to open in the editor the local N3

TESTED with http://graph.facebook.com/jmvanel

glad of this post in public-lod@w3.org "Facebook Linked Data"

PROBLEM when managing N3 Cache for N3 source http://www.facebook.com/jmvanel
N3SourceFromXML_Gloze.extractXMLNamespaces():
Could not load from URI http://www.facebook.com/jmvanel
 reason: The entity name must immediately follow the '&' in the entity reference.
 cause: null

eulergui.inputs.N3SourceFromXML_Gloze.extractXMLNamespaces(N3SourceFromXML_Gloze.java:126)
eulergui.inputs.N3SourceFromXML_Gloze.convertToN3(N3SourceFromXML_Gloze.java:68)
eulergui.project.N3Source.manageN3Cache(N3Source.java:553)
eulergui.project.N3Source.doUpdate(N3Source.java:389)
eulergui.inputs.N3SourceFromXML_Gloze.prepare(N3SourceFromXML_Gloze.java:47)

Cause:
org.xml.sax.SAXParseException: The entity name must immediately follow the '&' in the entity reference.
org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
eulergui.inputs.N3SourceFromXML_Gloze.extractXMLNamespaces(N3SourceFromXML_Gloze.java:123)
eulergui.inputs.N3SourceFromXML_Gloze.convertToN3(N3SourceFromXML_Gloze.java:68)
eulergui.project.N3Source.manageN3Cache(N3Source.java:553)
eulergui.project.N3Source.doUpdate(N3Source.java:389)
 , caused by The entity name must immediately follow the '&' in the entity reference.

http://notes.3kbo.com/scala

<rszeno> apt-get install redland-utils

<rszeno> rapper is in redland-utils

<rszeno> if you have apt-file installed, after each upgrade you must do 'apt-file update'

<rszeno> then 'apt-file find rapper' or whatever you want to find

<rszeno> i use apt-get, apt-cache, debtags, apt-file and apt-show-versions

<rszeno> apt-get for install/remove/purge packages

<rszeno> apt-cache, debtags, apt-file to find things about packages

<rszeno> apt-show-versions when i use mixed repository, stable+testing+backports or such combinations

<rszeno> sorry, is my fault, :)

<rszeno> rapper is in raptor2-utils or in raptor-utils, rdfproc is in redland-utils

<rszeno> and roqet is in rasqal-utils

<rszeno> what i can't find is the device for my cd/dvd writer, :)

<jmvanel> merci

<jmvanel> I actually did it for my Ubuntu partition, need to redo it for Debian .

EulerGUI dev

FIX eclipse warnings , except in ParserDataIO TODO dead code !? says eclipse 3.7

FIX person-app.n3p : secondary form "address" now appears when clicking button

2 changed n3_nojs/java_event-rules.n3

Tests in error: 
  test_cv2(eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules): Wait AbstractButton with text "Skill" loaded
Tests run: 173, Failures: 0, Errors: 1, Skipped: 0
[INFO] --- maven-surefire-report-plugin:2.8.1:report (default-cli) @ eulergui ---
[WARNING] Unable to locate Test Source XRef to link to - DISABLED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 14:31.417s

Thread Name: N3 sources modification Checker
java.lang.Thread.getStackTrace(Thread.java:1479)
eulergui.util.StackHelper.printStackTrace(StackHelper.java:13)
eulergui.gui.view.ButtonsPanel.findButtonsForN3Source(ButtonsPanel.java:53)
eulergui.gui.view.ButtonsPanel.n3SourceEnablement(ButtonsPanel.java:87)
eulergui.gui.view.ButtonsPanel.enableN3Source(ButtonsPanel.java:77)
eulergui.gui.controller.ProjectGUI_Updater.editN3ButtonEnabled(ProjectGUI_Updater.java:130)
eulergui.gui.controller.ProjectGUI_Updater.n3SourceUpdated(ProjectGUI_Updater.java:123)
eulergui.project.ProjectChangeSupport.fireN3SourceUpdated(ProjectChangeSupport.java:167)
eulergui.project.Project.fireN3SourceUpdated(Project.java:1421)
eulergui.gui.controller.N3ConversionRefesher.n3SourceChanged(N3ConversionRefesher.java:50)
ProjectGUI_Updater.n3SourceUpdated(): could not be updated: file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/deductions/n3_nojs/bbjava_event-rules.n3
Thread Name: N3 sources modification Checker
java.lang.Thread.getStackTrace(Thread.java:1479)
eulergui.util.StackHelper.printStackTrace(StackHelper.java:13)
eulergui.gui.view.ButtonsPanel.n3SourceEnablement(ButtonsPanel.java:92)
eulergui.gui.view.ButtonsPanel.enableN3Source(ButtonsPanel.java:77)
eulergui.gui.controller.ProjectGUI_Updater.editN3ButtonEnabled(ProjectGUI_Updater.java:130)
eulergui.gui.controller.ProjectGUI_Updater.n3SourceUpdated(ProjectGUI_Updater.java:123)
eulergui.project.ProjectChangeSupport.fireN3SourceUpdated(ProjectChangeSupport.java:167)
eulergui.project.Project.fireN3SourceUpdated(Project.java:1421)
eulergui.gui.controller.N3ConversionRefesher.n3SourceChanged(N3ConversionRefesher.java:50)
eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:144)
eulergui.project.Project.fireN3SourceChanged(Project.java:1407)
eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:90)

2011-09-26

AIR Web Rule Language

http://dig.csail.mit.edu/2009/AIR/

EulerGUI : SocketException: Connection reset

COMMIT

N3Source. convertToN3() : avoid SocketException: Connection reset

==> TEST suite passes

tests on Windows 7:

Running deductions.runtime.TestRulesForUserEvents
Tests run: 4, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1,516,610.732 sec <<< FAILURE!
Running eulergui.gui.TestFacebookSearch
Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 85.103 sec <<< FAILURE!
Running eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules
Tests run: 6, Failures: 0, Errors: 2, Skipped: 0, Time elapsed: 192.406 sec <<< FAILURE!
Running eulergui.gui.TestN3Source
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.163 sec
Exception while removing reference: java.lang.InterruptedException
java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
        at sun.java2d.Disposer.run(Disposer.java:127)
        at java.lang.Thread.run(Thread.java:662
Running eulergui.gui.TestN3SourceInGUI
Tests run: 2, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 15.303 sec
Exception while removing reference: java.lang.InterruptedException
java.lang.InterruptedException
        at java.lang.Object.wait(Native Method)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:118)
        at java.lang.ref.ReferenceQueue.remove(ReferenceQueue.java:134)
        at sun.java2d.Disposer.run(Disposer.java:127)
        at java.lang.Thread.run(Thread.java:662)

2011-09-25

I have a trouble with eclipse : it exits during the test run; never had this; tried to uninstall several plugins ...

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 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.Reader.read(Reader.java:123)
at eulergui.util.ReaderUtils.copyReader(ReaderUtils.java:55)
at eulergui.util.ReaderUtils.copyReader(ReaderUtils.java:24)
at n3_project.IOManager.downloadURLToLocalCache(IOManager.java:190)
at n3_project.IOManager.downloadN3ToLocalCache(IOManager.java:184)
at eulergui.project.N3Source.convertToN3(N3Source.java:469)
at eulergui.project.N3Source.manageN3Cache(N3Source.java:545)
at eulergui.project.N3Source.doUpdate(N3Source.java:388)
at eulergui.project.N3Source.update(N3Source.java:375)
at eulergui.project.N3Source.parseResult(N3Source.java:432)
at eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:252)
at eulergui.inference.drools.impl.N3DroolsEngineFacade.translate(N3DroolsEngineFacade.java:91)
at eulergui.project.Project.doTranslateN32Drools(Project.java:931)
at eulergui.project.Project.translateN32Drools(Project.java:882)
at eulergui.project.Project.prepareDrools(Project.java:860)
at eulergui.project.Project.doRunDrools(Project.java:814)
at eulergui.project.Project.runDroolsTriples(Project.java:765)
at eulergui.inference.drools.DroolsInferenceEngine.launch(DroolsInferenceEngine.java:30)
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)

2011-09-23

back links

echelon renamed to FaceBook

http://stackoverflow.com/questions/4121567/embedded-scala-repl-inherits-parent-classpath

Ran rooscaloo, Scala RETE engine

https://github.com/daveray/rooscaloo

I'm glad, because I Ran rooscaloo.

Switching to latest REPL interpreter, and also setting the classpath to tha parent classpath.

2011-09-21

Trying to run rooscaloo, Scala RETE engine

http://darevay.com/

Dave Ray http://blog.darevay.com/about/

How do I add scala-compiler.jar to my eclipse project ?

Hi Dave

I'm learning Scala, and I develop an IDE called EulerGUI about rules

and Semantic Web that uses Drools.

These are good reasons to get interested in rooscaloo (and I like your

blog too ).

I guess the Scala language has slightly changed since you made

rooscaloo (what wezre the version at the time ? ).

I had to add imports in a few classes (I can send a patch ).

But now I'm blocked, because I don't know a good way to satisfy this

import with eclipse :

import scala.tools.nsc.InterpreterResults._


http://jonaquino.blogspot.com/2007/08/why-jedit-text-editor-rocks.html

http://wiki.habariproject.org/en/Creating_and_Applying_Patches_for_Subversion#Testing_patches_that_are_not_yet_released

I found the howto for Maven + Scala here http://stuq.nl/weblog/2008-11-26/4-steps-to-add-scala-to-your-maven-java-projects

( the plugin site itself is outdated and incomplete :

http://scala-tools.org/mvnsites/maven-scala-plugin/ )

2011-09-19

Are there migration tools / translation (possibly partial translation ) to Java (or other) to Scala?

http://scala-tools.org/mvnsites/maven-scala-plugin/usage.html

From ScalaByExample.pdf :

Using averageDamp, we can reformulate the square root function as follows.

def sqrt(x: Double) = fixedPoint(averageDamp(y => x/y))(1.0)

This expresses the elements of the algorithm as clearly as possible.

2011-09-18

Drools bug report : NPE in Drools 5.3.0

For Drools bug report:

http://eulergui.sourceforge.net/maven2/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-20110824.171234-1.jar

http://eulergui.sourceforge.net/maven2/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-20110824.171234-1-sources.jar

etirelli, the BUG is reported at https://issues.jboss.org/browse/JBRULES-3215

http://deductions.svn.sourceforge.net/svnroot/deductions/n3_nojs/form-rules.n3

rule "form-rules.n3 9"
when
  $Triple_1 : Triple( $EVENT : subject, predicate == "<http://www.w3.org/1999/02/22-rdf-syntax-ns#type>", object == "<http://jmvanel.free.fr/ontology/gui_generic.owl#FocusLostEvent>" )
  $Triple_2 : Triple( subject == $EVENT, predicate == "<http://jmvanel.free.fr/ontology/gui_generic.owl#eventSource>", $FIELD : object )
  $Triple_3 : Triple( subject == $EVENT, predicate == "<http://jmvanel.free.fr/ontology/gui_generic.owl#newValue>", $VALUE : object )
  Assignment( name == $EVENT, $EVENT_reference : reference, $JTEXT_FIELD : reference.source )
  $Triple_4 : Triple( subject == $FIELD, predicate == "<http://jmvanel.free.fr/ontology/gui_generic.owl#inputWidgetSpecification>", $PREDICATE : object )
then
  Triple newTriple;
  TripleResult newTripleResult;
  newTriple = new Triple(  );
  newTriple.setSubject( $EVENT );
  newTriple.setPredicate( "<http://jmvanel.free.fr/ontology/gui_generic.owl#consumed>".toString() );
  newTriple.setObject( "true" );  insertLogical( newTriple );
  String $RESOURCE = Triple.resource("RESOURCE") ;
  newTriple = new Triple(  );
  newTriple.setSubject( $RESOURCE );
  newTriple.setPredicate( $PREDICATE.toString() );
  newTriple.setObject( $VALUE );  insertLogical( newTriple );
  newTriple = new Triple(  );
  newTriple.setSubject( $RESOURCE );
  newTriple.setPredicate( "<http://jmvanel.free.fr/ontology/software_applications.owl#status>".toString() );
  newTriple.setObject( "<http://jmvanel.free.fr/ontology/software_applications.owl#userData>" );  insertLogical( newTriple );
  newTriple = new Triple(  );
  newTriple.setSubject( $FIELD );
  newTriple.setPredicate( "<http://jmvanel.free.fr/ontology/gui_generic.owl#fieldSubject>".toString() );
  newTriple.setObject( $RESOURCE );  insertLogical( newTriple );
  System.out.println( "#TRACE ( " + "\"gui:FocusLostEvent new_value\"" + " " + $EVENT + " " + $FIELD + " " + "\" ?RESOURCE ?PREDICATE ?VALUE\"" + " " + "\"    \"" + " " + $RESOURCE + " " + $PREDICATE + " " + $VALUE + " " +  ")" );
  DeferredPropertyAssignment dpa_GUIKBAdapter11 = new DeferredPropertyAssignment();
  dpa_GUIKBAdapter11.setSubject("<http://jmvanel.free.fr/ontology/gui_generic.owl#GUIKBAdapter>".toString() );
  dpa_GUIKBAdapter11.setPredicate( "<http://java.sun.com/method#setBoldFont>" );
  dpa_GUIKBAdapter11.setObject($JTEXT_FIELD.toString() );
  insert( dpa_GUIKBAdapter11 );

end

[Rule name='form-rules.n3 9']

declaration

identifier : $JTEXT_FIELD

Pattern type='[ClassObjectType class=eulergui.inference.drools.impl.Assignment]', index='3', offset='0', identifer=''

Triple newTriple;
  TripleResult newTripleResult;
  newTriple = new Triple(  );
  newTriple.setSubject( $EVENT );
  newTriple.setPredicate( "<http://jmvanel.free.fr/ontology/gui_generic.owl#consumed>".toString() );
  newTriple.setObject( "true" );  drools.insertLogical( newTriple );
  String $RESOURCE = Triple.resource("RESOURCE") ;
  newTriple = new Triple(  );
  newTriple.setSubject( $RESOURCE );
  newTriple.setPredicate( $PREDICATE.toString() );
  newTriple.setObject( $VALUE );  drools.insertLogical( newTriple );
  newTriple = new Triple(  );
  newTriple.setSubject( $RESOURCE );
  newTriple.setPredicate( "<http://jmvanel.free.fr/ontology/software_applications.owl#status>".toString() );
  newTriple.setObject( "<http://jmvanel.free.fr/ontology/software_applications.owl#userData>" );  drools.insertLogical( newTriple );
  newTriple = new Triple(  );
  newTriple.setSubject( $FIELD );
  newTriple.setPredicate( "<http://jmvanel.free.fr/ontology/gui_generic.owl#fieldSubject>".toString() );
  newTriple.setObject( $RESOURCE );  drools.insertLogical( newTriple );
  System.out.println( "#TRACE ( " + "\"gui:FocusLostEvent new_value\"" + " " + $EVENT + " " + $FIELD + " " + "\" ?RESOURCE ?PREDICATE ?VALUE\"" + " " + "\"    \"" + " " + $RESOURCE + " " + $PREDICATE + " " + $VALUE + " " +  ")" );
  DeferredPropertyAssignment dpa_GUIKBAdapter11 = new DeferredPropertyAssignment();
  dpa_GUIKBAdapter11.setSubject("<http://jmvanel.free.fr/ontology/gui_generic.owl#GUIKBAdapter>".toString() );
  dpa_GUIKBAdapter11.setPredicate( "<http://java.sun.com/method#setBoldFont>" );
  dpa_GUIKBAdapter11.setObject($JTEXT_FIELD.toString() );
  drools.insert( dpa_GUIKBAdapter11 );

Daemon Thread [SwingWorker-pool-3-thread-1] (Suspended (breakpoint at line 89 in ClassUtils))
ClassUtils.canonicalName(Class) line: 89
DeclarationTypeFixer.fix(Declaration) line: 11
JavaRuleBuilderHelper.createVariableContext(String, String, RuleBuildContext, Declaration[], Declaration[], Map<String,Class<?>>) line: 158
JavaRuleBuilderHelper.createConsequenceContext(RuleBuildContext, String, String, String, Map<String,Declaration>, BoundIdentifiers) line: 94
ASMConsequenceStubBuilder(AbstractASMConsequenceBuilder).consequenceContext(RuleBuildContext, String) line: 47
ASMConsequenceStubBuilder(AbstractASMConsequenceBuilder).build(RuleBuildContext, String) line: 17
RuleBuilder.build(RuleBuildContext) line: 99
PackageBuilder.addRule(RuleDescr) line: 1993
PackageBuilder.addPackage(PackageDescr) line: 793
PackageBuilder.addPackageFromDrl(Reader) line: 355
N3SourcetoDrools.droolsCompile(String, String) line: 396
N3SourcetoDrools.translate(IRDFIterator, String, boolean, boolean, boolean) line: 315
N3SourcetoDrools.translate(N3Source, boolean, boolean, boolean) line: 257
N3DroolsEngineFacade.translate(N3Source, boolean, boolean, boolean) line: 91
Project.doTranslateN32Drools(boolean, boolean) line: 931
Project.translateN32Drools(boolean) line: 882
Project.prepareDrools(boolean) line: 860
Project.doRunDrools(boolean) line: 814
Project.runDroolsTriples(boolean) line: 765
DroolsInferenceEngine.launch() line: 30
RunActionGeneric$EngineSwingWorker.doInBackground() line: 117
RunActionGeneric$EngineSwingWorker.doInBackground() line: 1
SwingWorker$1.call() line: 296
FutureTask$Sync.innerRun() line: 334
SwingWorker$2(FutureTask<V>).run() line: 166
RunActionGeneric$EngineSwingWorker(SwingWorker<T,V>).run() line: 335
ThreadPoolExecutor.runWorker(ThreadPoolExecutor$Worker) line: 1110
ThreadPoolExecutor$Worker.run() line: 603
Thread.run() line: 722

Running n3_project.helpers.TestDroolsQuery
Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 9.231 sec <<< FAILURE!

Running n3_project.TestReasonning
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 2.195 sec <<< FAILURE!
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
Running n3_project.helpers.TestSimplifiedURI
Tests run: 15, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.081 sec
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
Running n3_project.helpers.TestDroolsQuery
Tests run: 2, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 4.495 sec <<< FAILURE!
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
Running n3_project.TestProject
Tests run: 5, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 3.994 sec <<< FAILURE!
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false
Running n3_project.TestProjectSequence
Tests run: 3, Failures: 0, Errors: 3, Skipped: 0, Time elapsed: 2.669 sec <<< FAILURE!
Concurrency config is parallel='none', perCoreThreadCount=true, threadCount=2, useUnlimitedThreads=false

2011-09-17

                                                           
def exists[T](xs: Array[T], p: T => boolean) = {                                           
  var i: int = 0
  while (i < xs.length && !p(xs(i))) i = i + 1
i < xs.length

def sqrts(xs: List[double]): List[double] =
  xs filter (0 <=) map Math.sqrt

2011-09-16

new snapshot ( tests pass:

Révision : 2665

Tests run: 175, Failures: 0, Errors: 0, Skipped: 0

[INFO] BUILD SUCCESS

[INFO] Total time: 13:59.522s

[INFO] Finished at: Fri Sep 16 16:49:23 CEST 2011

[INFO] Final Memory: 22M/148M

N3SourceFromSPARQLSource.doUpdate()

/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/bbeuler_project.xml.n3p.n3 (Aucun fichier ou dossier de ce type)Thread Name: AWT-EventQueue-0

java.lang.Thread.getStackTrace(Thread.java:1479)

eulergui.gui.controller.ProjectGUI_Updater.printStackTrace(ProjectGUI_Updater.java:141)

eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:69)

eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:57)

eulergui.inputs.N3SourceFromSPARQLSource.prepare(N3SourceFromSPARQLSource.java:51)

eulergui.project.N3Source.setProject(N3Source.java:318)

n3_project.SPARQLServiceInputAction.actionPerformed(SPARQLServiceInputAction.java:58)

[ERROR] - 2011-09-16 12:47:27,340 [AWT-EventQueue-0] unif.TemporaryFrame (TemporaryFrame.java:<init>:66)

TemporaryFrame.TemporaryFrame(): SPARQL source not found at file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/bbeuler_project.xml.n3p.n3

/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/bbeuler_project.xml.n3p.n3 (Aucun fichier ou dossier de ce type)

java.io.FileInputStream.open(Native Method)

java.io.FileInputStream.<init>(FileInputStream.java:106)

java.io.FileInputStream.<init>(FileInputStream.java:66)

sun.net.www.protocol.file.FileURLConnection.connect(FileURLConnection.java:70)

sun.net.www.protocol.file.FileURLConnection.getInputStream(FileURLConnection.java:161)

projectGUI.getEditorManagement().doOpenEditor(n3);


sudo route del -net 192.168.1.0 netmask 255.255.255.0 dev eth0

/sbin/route -n

Table de routage IP du noyau

Destination Passerelle Genmask Indic Metric Ref Use Iface

192.168.1.0 0.0.0.0 255.255.255.0 U 2 0 0 wlan0

169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth0

0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 wlan0

2011-09-15

sudo /sbin/ifconfig eth0 192.168.1.80
sudo /sbin/route add default gw 192.168.1.1
sudo ifconfig wlan0 up

If you want code for which people can get an overview, you could check out Dan Connolly Scala project started a year and a half ago

http://code.google.com/p/swap-scala/

<rszeno> i just finish to install trang

<rszeno> a good book, http://books.xmlschemata.org/relaxng/page2.html

2011-09-14

REFACTOR: extract DroolsHelper.workingMemoryDump() ; call it in both applicationKB and user KB dump

<Utopiah> jmvanel: you might be interested in the Software Design aspect of http://www.rci.rutgers.edu/~mleyton/ISMA.htm

<hivemind-sb`> Title: International Society for Mathematical and Computational Aesthetics (at www.rci.rutgers.edu)

Installed subclise for eclipse 3.7 on Debian

http://subclipse.tigris.org/update_1.6.x

Added this in eclipse/eclipse.ini after -vmargs , as explained on http://subclipse.tigris.org/wiki/JavaHL :

-Djava.library.path=/usr/lib/jni

A Rosetta stone : N3 rules - Prolog

N3

{ :BloodPressure :val ?x.
  ?x math:greaterThan 70
} => { :Service112 :alert "true" } .

Prolog

alert('Service112', "true") :-
  val(BloodPressure, X),
  X > 70 .

Sulci

https://github.com/yohanboniface/sulci

2011-09-13

mvn project-info-reports:dependencies

Uploading a snapshot ; with the correction for multithreading ( probably only making a difference for tests , but who knows )

WebId, etc

<jmvanel> any URL about webid for dummies ?

<rszeno> maven libraries http://www.w3.org/wiki/Foaf%2Bssl#Libraries

<rszeno> http://www.w3.org/wiki/WebID#WebIDs_and_the_WebID_Protocol

<rszeno> better is to try yourself but some things are broken now

<rszeno> section 1.2

Subscribed to mailing list foaf-protocols

2011-09-12

the names for generated rule file from OWL were not informative

Upgrade Surefire to 2.10-SNAPSHOT; reverted to forkMode>pertest , from forkMode>never

I have clearer ideas about my ClassNotFoundException troubles ...

<jmvanel> thrown by at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50) ,

<jmvanel> for one project source class ;

<jmvanel> in fact it works fine with SureFire 2.10-SNAPSHOT , but ...

<jmvanel> but, even for one test, the problem appears when I set forkMode == never

<krosenv> forkMode never is quite constrained

<krosenv> that just means you can't use never

http://stackoverflow.com/questions/499634/how-to-detect-and-debug-multi-threading-problems

TODO ATTEMPTO lexicon

2011-09-10

11:10:46 PM [main] [error] main: java.lang.IllegalArgumentException: URI scheme is not "file"

11:10:46 PM [main] [error] main: at java.io.File.<init>(File.java:366)

11:10:46 PM [main] [error] main: at n3_project.IOManager.getInputStream(IOManager.java:39)

11:10:46 PM [main] [error] main: at eulergui.parser.n3.impl.parser4j.service.TestForJos.doTheTestForOneFile(TestForJos.java:89)

1

all tests in src test java
eulergui.gui.TestGenericGuiGeneration
testOWLReasoner(eulergui.gui.TestGenericGuiGeneration)
org.netbeans.jemmy.TimeoutExpiredException: Frame with title "Ontology Hierarchy"
at org.netbeans.jemmy.Waiter.waitAction(Waiter.java:147)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:412)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:202)
at org.netbeans.jemmy.FrameWaiter.waitFrame(FrameWaiter.java:221)
at org.netbeans.jemmy.operators.JFrameOperator.waitJFrame(JFrameOperator.java:248)
at org.netbeans.jemmy.operators.JFrameOperator.waitJFrame(JFrameOperator.java:268)
at eulergui.gui.TestJemmy.checkOWLReasoner(TestJemmy.java:362)
at eulergui.gui.TestGenericGuiGeneration.testOWLReasoner(TestGenericGuiGeneration.java:50)
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.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)

eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules
test_foaf_import2(eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules)
org.netbeans.jemmy.TimeoutExpiredException: Wait AbstractButton with text "Image" loaded
at org.netbeans.jemmy.Waiter.waitAction(Waiter.java:147)
at org.netbeans.jemmy.operators.ComponentOperator.waitComponent(ComponentOperator.java:337)
at org.netbeans.jemmy.operators.ComponentOperator.waitComponent(ComponentOperator.java:302)
at org.netbeans.jemmy.operators.JButtonOperator.<init>(JButtonOperator.java:100)
at org.netbeans.jemmy.operators.JButtonOperator.<init>(JButtonOperator.java:119)
at eulergui.gui.TestJemmy.checkObjectProperty(TestJemmy.java:341)
at eulergui.gui.TestGenericGuiGenerationInsertLogical.test_foaf_import2(TestGenericGuiGenerationInsertLogical.java:50)
at eulergui.gui.TestGenericGuiGenerationInsertLogicalRefactorRules.test_foaf_import2(TestGenericGuiGenerationInsertLogicalRefactorRules.java:37)
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.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)

eulergui.gui.TestEulerGUIInputs
testXMLInputGloze(eulergui.gui.TestEulerGUIInputs)
org.netbeans.jemmy.TimeoutExpiredException: JFileChooser's window
at org.netbeans.jemmy.Waiter.waitAction(Waiter.java:147)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:412)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:202)
at org.netbeans.jemmy.DialogWaiter.waitDialog(DialogWaiter.java:315)
at org.netbeans.jemmy.operators.JDialogOperator.waitJDialog(JDialogOperator.java:591)
at org.netbeans.jemmy.operators.JFileChooserOperator.<init>(JFileChooserOperator.java:101)
at org.netbeans.jemmy.operators.JFileChooserOperator.<init>(JFileChooserOperator.java:119)
at eulergui.gui.TestEulerGUIInputs.testXMLInputGloze(TestEulerGUIInputs.java:65)
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.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)

InErrorTests
eulergui.gui.TestImportSwrl
testLocalImportSwrlWithDrools(eulergui.gui.TestImportSwrl)
org.netbeans.jemmy.TimeoutExpiredException: Frame Title Component Chooser "jEdit.*.as.rules.n3.*"
at org.netbeans.jemmy.Waiter.waitAction(Waiter.java:147)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:412)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:202)
at org.netbeans.jemmy.FrameWaiter.waitFrame(FrameWaiter.java:221)
at org.netbeans.jemmy.operators.FrameOperator.waitFrame(FrameOperator.java:411)
at org.netbeans.jemmy.operators.JFrameOperator.<init>(JFrameOperator.java:72)
at org.netbeans.jemmy.operators.JFrameOperator.<init>(JFrameOperator.java:85)
at org.netbeans.jemmy.operators.JFrameOperator.<init>(JFrameOperator.java:93)
at eulergui.gui.TestImportSwrl.checkTranslatedRule(TestImportSwrl.java:81)
at eulergui.gui.TestImportSwrl.testLocalImportSwrlWithDrools(TestImportSwrl.java:42)
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 junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
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)

eulergui.gui.TestGenericGuiGeneration
testOWLReasoner(eulergui.gui.TestGenericGuiGeneration)
org.netbeans.jemmy.TimeoutExpiredException: Frame with title "Ontology Hierarchy"
at org.netbeans.jemmy.Waiter.waitAction(Waiter.java:147)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:412)
at org.netbeans.jemmy.WindowWaiter.waitWindow(WindowWaiter.java:202)
at org.netbeans.jemmy.FrameWaiter.waitFrame(FrameWaiter.java:221)
at org.netbeans.jemmy.operators.JFrameOperator.waitJFrame(JFrameOperator.java:248)
at org.netbeans.jemmy.operators.JFrameOperator.waitJFrame(JFrameOperator.java:268)
at eulergui.gui.TestJemmy.checkOWLReasoner(TestJemmy.java:362)
at eulergui.gui.TestGenericGuiGeneration.testOWLReasoner(TestGenericGuiGeneration.java:50)
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 junit.framework.TestSuite.runTest(TestSuite.java:243)
at junit.framework.TestSuite.run(TestSuite.java:238)
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)

eulergui.gui.TestEulerGUITooltip
testTooltip(eulergui.gui.TestEulerGUITooltip)
junit.framework.AssertionFailedError: "<HTML><http://exampleS#waza>:<BR></HTML>" does not match pattern: .*Comment for waza in the ex: namespace.*
at junit.framework.Assert.fail(Assert.java:47)
at junit.framework.Assert.assertTrue(Assert.java:20)
at eulergui.gui.TestEulerGUITooltip.checkString(TestEulerGUITooltip.java:69)
at eulergui.gui.TestEulerGUITooltip.checkTooltipAfterIndexing(TestEulerGUITooltip.java:55)
at eulergui.gui.TestEulerGUITooltip.testTooltip(TestEulerGUITooltip.java:31)
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.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)

<jmvanel> CONCLUSION : fom my pov : 1) the names for generated rule file from OWL are not informative

<jmvanel> 2) Drools N3 engine can't understand @forAll :x .

<jmvanel> { [] a :x } => { [ :usedClass :x ] . }

Sep 10, 2011 2:42:00 PM eulergui.gui.TestJemmy setUp
INFO: TestJemmy.setUp(): testAddNewN3Source
Using org.netbeans.jemmy.drivers.DefaultDriverInstaller driver installer
java.lang.ClassNotFoundException: eulergui.project.ProjectLegacy
at org.codehaus.plexus.classworlds.strategy.SelfFirstStrategy.loadClass(SelfFirstStrategy.java:50)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:244)
at org.codehaus.plexus.classworlds.realm.ClassRealm.loadClass(ClassRealm.java:230)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:247)
at com.sun.beans.ObjectHandler.classForName(ObjectHandler.java:68)
at com.sun.beans.ObjectHandler.classForName(ObjectHandler.java:55)
at com.sun.beans.ObjectHandler.classForName2(ObjectHandler.java:159)
at com.sun.beans.ObjectHandler.startElement(ObjectHandler.java:194)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:453)
at com.sun.org.apache.xerces.internal.parsers.AbstractXMLDocumentParser.emptyElement(AbstractXMLDocumentParser.java:179)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanStartElement(XMLDocumentFragmentScannerImpl.java:1343)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:364)
at javax.xml.parsers.SAXParser.parse(SAXParser.java:142)
at java.beans.XMLDecoder.getHandler(XMLDecoder.java:238)
at java.beans.XMLDecoder.readObject(XMLDecoder.java:201)
at eulergui.project.ProjectFactory.normalizeAndReadXMLEncoderStream(ProjectFactory.java:188)

- FIX TestCreateProjectInGUI : pushSaveProject() should block until operation finishes

- FIX RETETest: java.lang.IllegalArgumentException: parser4j/n3-parser.data resource does not exist

in ParserDataIO : changed ligne 66,

Thread.currentThread().getContextClassLoader()

into

getClass().getClassLoader()

TODO : remove the class when next release in parser4j

2011-09-09

<jmvanel>

mvn versions:display-plugin-updates says:

[INFO] All plugins with a version specified are using the latest versions.

BUT maven-surefire-plugin is at version>2.8.1 ( not 2.9 )

Is this a know problem ?

Guided tour of Pelorus

<rszeno> imagine something based on the same principle where exploring, inference and everything else can start from a data set specified by user, a url for example

<rszeno> a static interface doesn't fit in this landscape

<rszeno> i would split this in two subsystem, one for ajusting the interface and another for navigation

<rszeno> navigation like in pelorus

<rszeno> this involve a classification mechanism

<rszeno> something similar would be nice for Flora

<jmvanel> sorry , don't understand http://nasa.clarkparsia.com/

<rszeno> you didn't open the link?

<jmvanel> yes

<rszeno> and?

<rszeno> did you click on Saturn 1B for example?

<rszeno> or better, Saturn 5

<rszeno> in the first list box

<jmvanel> i just did

<jmvanel> noithing shows that it's clickable :(

<rszeno> now select something from the second list box

<jmvanel> i did

<rszeno> at each selection, it add data to the next listbox

<rszeno> under each listbox are some operators, and, or not,

<jmvanel> but how do I interporet that in terls of RDF ?

<rszeno> are enabled only after selection

<jmvanel> interpret

<rszeno> each listbox represent a property of a class

<rszeno> or a class in this case

<rszeno> the connection with next listbox is based on the relation

<rszeno> Launch is a property of Lounch Vehicle

<rszeno> building a general, non specific interface, will start from ontologies involved

<rszeno> http://www.thefreelibrary.com/The+Role+of+Classification+in+Knowledge+Representation+and...-a057046525

<rszeno> there is a section for facet

<rszeno> http://www.miskatonic.org/library/facet-web-howto.html

<jmvanel> that for the guided tour

<jmvanel> thanks for the guided tour

<rszeno> :)

<rszeno> you are welcome

<jmvanel> I'll see the other link later; now I struggle with the test suite ;

<rszeno> probably is complicate to build such a thing, :)


a matter of costs

<rszeno> taguchi lose curve, :)

<rszeno> http://elsmar.com/Taguchi.html

EulerGUI dev

Now I have a tedious programming task : I have a stack of depth 4 , were I pass a Project argument , and I should now pass a list , because of the N3 project format :

Thread [main] (Suspended)
ProjectFactory.restoreN3P(URI) line: 271
ProjectFactory.restoreAny(URI, boolean) line: 371
CommandLineArguments.makeProjectFromUserArgument(String[]) line: 44
ProjectGUI.main(String[]) line: 195

Thread [AWT-EventQueue-0] (Suspended)
ApplicationKB.recoverProjectObjectFromKB(URL, URI) line: 469
ApplicationKB.loadN3Project(URI) line: 457
ProjectFactory.restoreN3P(URI) line: 270
ProjectFactory.restoreAny(URI, boolean) line: 371
ProjectFileManagement$OpenProjectAction.actionPerformed(ActionEvent) line: 529
JMenu$1(AbstractButton).fireActionPerformed(ActionEvent) line: 1995ventDispatchThread.run() line: 122

When reading an N3 project file , a new (empty) project with URI made after the project file (ending in .n3). But the project contained in the file is ignored.

<file:/home/jmv/src/eulergui_new/euler_project.xml.n3p.n3>

Question asked on #java without answer :

I use a library class writing on a OutputStream or Writer; I want to interpose a string replacement on lines, before writing to a file;

so I need a class that will buffer all output up to an end of line, and call a user method to transform it

library class --> ForwardingOutputStream --> CorrectorBufferedInputStream --> FileOuputStream

2011-09-08

webmarker link

Logic programming and knowledge representation. Chitta Baral and Michael Gelfond. Journal of Logic Programming 19:73–148, 1994.

2011-09-07

the spec gives the translation of OWL RL in a neutral rule language : http://www.w3.org/TR/owl2-profiles/#Reasoning_in_OWL_2_RL_and_RDF_Graphs_using_Rules

Degugging : saving the N3 project file:

uriForSubject
 (java.lang.String) <file:/home/jmv/src/eulergui_new/euler_project.xml.n3p>
triple.getSubject()
 (java.lang.String) <file:///home/jmv/src/eulergui_new/euler_project.xml.n3p>

It's NOT caused by URLHelper.normalizeURL() : just 1 reference in addN3SourceToEulerArguments()

Here is NOT the root cause :

Thread [doN3SourceAdded: file:/tmp/eg-3944119603762958536.n3] (Suspended (breakpoint at line 45 in Triple))
LineTrackingTriple(Triple).<init>(String, String, String) line: 45
LineTrackingTriple.<init>(String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, LinesAndCols) line: 33
DroolsTripleHandler.acceptTriple(String, LinesAndCols, String, LinesAndCols, String, LinesAndCols, String, LinesAndCols) line: 174
ParserLink.visitAllURI(LineTrackingTripleHandler) line: 629
N3SourcetoDrools.translate(IRDFIterator, String, boolean, boolean, boolean) line: 285
N3SourcetoDrools.translate(N3Source, boolean, boolean, boolean) line: 257
N3DroolsEngineFacade.translate(N3Source, boolean, boolean, boolean) line: 91
Project.translateToDrools(N3Source, boolean, boolean) line: 973
N3ConversionRefesher.updateKB(Project, N3Source) line: 161
UpdateN3Thread.run() line: 41

This is the root cause :

model.getWriter( "N3" ).write( model, tmpOutputStream, null);

Jena 's writer transforms <file:/XXX into <file:///XXX .

2011-09-06

for f in www.coplfr.org/**/*.html
do
  echo "==== $f ===="
  xmllint --noout --html --postvalid --dtdvalid  http://www.w3.org/TR/html4/strict.dtd $f
done

for f in www.coplfr.org/**/*.html
do
  echo "==== $f ====" 
  tidy -errors -quiet --show-errors 1 --show-warnings no $f
done

2011-09-05

http://www.agrozoo.net/

Exploration capabilities in EulerGUI

Starting from a plain RDF data URI

About "discover capabilities" , do you want to try what already exists ? Type

eg --pass http://jmvanel.free.fr/hypervert/images_le_clos/vue_est.rdf

Now click on Tools -> add referred ontologies.

These "referred ontologies" (coming from prefix declarations) are added to the project, in an deactivated state. You can then open them in the N3 editor just like any N3 source.

Now click on Tools -> launch OWL reasoner.

You get multiple new windows docked, each showing a tree of OWL classes. There is one frame per N3 source , if it really has ontology information; and the frame titles indicate the N3 source.

Now open the FOAF frame; type Person in the upper field ; it filters the tree to show only classes having this string.

This filtering feature is useful to explore large ontologies. I reckon that Protégé has much the same features, but Protégé does not have the filtered tree.

Starting from the name of an ontology

An even smarter way of getting started, when you only have the name of an ontology is this. Suppose you heard about FOAF (actually the most well-know ontology) , but you don't know where it is .

You just write in the editor :

foaf:bla :x :x .

then save. EulerGUI , leveraging on prefix.cc , will add missing prefix declaration;

then you can do Tools -> add referred ontologies like above (and remove the dummy triple foaf:bla :x :x. ) .

It works in the editor, and in the N3 shell too.

RDF image annotation with Kanzaki tool

I completed RDF image annotation of the view towards east of the arboretum , with the nice Kanzaki tool : http://jmvanel.free.fr/hypervert/images_le_clos/vue_est.rdf

Technically it is interesting as an example of RDF usage . The RDF is used by an XSLT transform that generates the image map..

http://www.w3.org/2003/07/Annotea/BookmarkSchema-20030707

2011-09-04

<rszeno> lynx -dump -display-charset=utf-8 URL > textfile

<rszeno> is a excellent way to get pages as text

<rszeno> http://www.deepspace6.net/projects/netcat6.html

<rszeno> this is the tool but there is no docs on site

<rszeno> is package in debian anyway

<rszeno> http://linux.die.net/man/1/nc6

<rszeno> look to the "File transfer" section

<jmvanel> i heard about nc, it's a swiss knife with network stuff

<jmvanel> While checking my garden inventory , I found this nice page in RDf with an XSLT style :

<jmvanel> http://www.ipni.org/ipni/plantNameByVersion.do?id=322338-1&version=1.3&output_format=lsid-metadata&show_history=true

<jmvanel> alas, the XSLT is not generic

<jmvanel> maybe some rules would add intelligence to the display ?

I try the URI with eg --pass , but there is a stupid bug :

Exception in thread "AWT-EventQueue-0" java.lang.IllegalArgumentException: URI has a query component
        at java.io.File.<init>(File.java:372)
        at n3_project.ProjectGUI.setLastFile(ProjectGUI.java:814)
        at n3_project.ProjectGUI.<init>(ProjectGUI.java:181)
        at n3_project.ProjectGUI.newWindow(ProjectGUI.java:245)
        at n3_project.ProjectGUI$1.run(ProjectGUI.java:205)

http://www.ipni.org/link_to_ipni.html

2011-09-03

EulerGUI

Project URI and save as N3

Thoughts: naturalist's observations site, etc

add to FAQ:

2011-09-02

date -u +"%G-%m-%dT%TZ"
<rszeno> this output the date in w3c date format

http://metacog.org/doc.html

JavaMail, mstor, etc

http://wiki.modularity.net.au/mstor/index.php?title=Main_Page

http://www.velocityreviews.com/forums/t390522-javamail-and-mbox.html

http://wiki.modularity.net.au/mstor/index.php?title=Maven2

http://linux.die.net/man/5/mbox

<jmvanel> hi what is the incantation to show the classpath ?

<mart> mvn dependency:build-classpat

2011-08-31

metacog.org

<Utopiah> jmvanel: have you read http://metacog.org/doc.html ?

Title: metacog.org - Moshe Looks, PhD - dissertation (at metacog.org)

maybe it could be a way to move forward once the process has been boostrapped via your EulerGUI?

http://www.idsia.ch/~juergen/agi10yi.pdf

2011-08-30

Edit the Project N3 in the N3 editor

DESIGN NOTE: there is a duplication of information, for historical reasons :

Combine open internal KB in editor, open project from N3 , OpenPreferencesAction, save project in N3 ?

Need to watch modification of N3 file file created in LaunchApplicationKBN3Editor "open internal KB in editor" ; similar to watching of user preference file in OpenPreferencesAction;

but fileSnapshot in class LaunchApplicationKBN3Editor is not updated with the KB; could use Drools mechanism to do that.

11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0: com.hp.hpl.jena.n3.turtle.TurtleParseException: Line 6, column 84: Unresolved prefixed name: xs:long
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.ParserBase.throwParseException(ParserBase.java:274)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.ParserBase.resolvePName(ParserBase.java:195)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.PrefixedName(TurtleParser.java:680)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.IRIref(TurtleParser.java:664)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.RDFLiteral(TurtleParser.java:555)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.GraphTerm(TurtleParser.java:482)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.VarOrTerm(TurtleParser.java:399)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.GraphNode(TurtleParser.java:362)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Object(TurtleParser.java:215)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.ObjectList(TurtleParser.java:197)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.PropertyListNotEmpty(TurtleParser.java:165)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.TriplesSameSubject(TurtleParser.java:130)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.Statement(TurtleParser.java:76)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.parser.TurtleParser.parse(TurtleParser.java:46)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.ParserTurtle.parse(ParserTurtle.java:37)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.turtle.TurtleReader.readWorker(TurtleReader.java:21)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.JenaReaderBase.readImpl(JenaReaderBase.java:101)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at com.hp.hpl.jena.n3.JenaReaderBase.read(JenaReaderBase.java:35)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at n3_project.ResultEditorN3Action.convertReaderIntoN3(ResultEditorN3Action.java:99)
11:45:58 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.tools.LaunchApplicationKBN3Editor.actionPerformed(LaunchApplicationKBN3Editor.java:53)

2011-08-29

EulerGUI

An HTTP server that is not a SPARQL server

Stack obtained with an HTTP server that is not a SPARQL server ( e.g. http://vivo-onto.slis.indiana.edu/SPARQL/ )

Now the ResultSetException is caught and TemporaryFrame shown with "Does not seem to be a SPARQL endpoint."

N3SourceFromSPARQLSource.doUpdate(): file:/home/jmv/src/eulergui_new/examples/find_properties.sparql ; http://vivo-onto.slis.indiana.edu/SPARQL
eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:95)
eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:55)
eulergui.project.N3Source.update(N3Source.java:369)
eulergui.gui.view.ButtonsForN3Source$1.actionPerformed(ButtonsForN3Source.java:308)
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)
javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:242)
javax.swing.plaf.basic.BasicButtonListener.mouseReleased(BasicButtonListener.java:236)
java.awt.AWTEventMulticaster.mouseReleased(AWTEventMulticaster.java:272)

Cause:
com.hp.hpl.jena.sparql.resultset.ResultSetException: Not an ResultSet result
com.hp.hpl.jena.sparql.resultset.SPARQLResult.getResultSet(SPARQLResult.java:68)
com.hp.hpl.jena.sparql.resultset.XMLInput.fromXML(XMLInput.java:30)
com.hp.hpl.jena.sparql.resultset.XMLInput.fromXML(XMLInput.java:25)
com.hp.hpl.jena.query.ResultSetFactory.fromXML(ResultSetFactory.java:278)
com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execSelect(QueryEngineHTTP.java:151)
n3_project.SPARQLToN3Converter.doSelectQuery(SPARQLToN3Converter.java:137)
eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:72)
eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:55)
eulergui.project.N3Source.update(N3Source.java:369)
eulergui.gui.view.ButtonsForN3Source$1.actionPerformed(ButtonsForN3Source.java:308)

2011-08-26

http://www.iconarchive.com/show/simplistica-icons-by-dryicons/info-icon.html

This exception should be caught with a popup:

java.io.FileNotFoundException: https://eulergui.svn.sourceforge.net/svnroot/eulergui/trunk/eulergui/examples/ckan_explore.rq
at sun.net.www.protocol.http.HttpURLConnection.getInputStream(HttpURLConnection.java:1434)
at java.net.URLConnection.getContent(URLConnection.java:688)
at sun.net.www.protocol.https.HttpsURLConnectionImpl.getContent(HttpsURLConnectionImpl.java:406)
at java.net.URL.getContent(URL.java:1024)
at n3_project.SPARQLToN3Converter.getQueryString(SPARQLToN3Converter.java:171)
at eulergui.inputs.N3SourceFromSPARQLSource.getQueryString(N3SourceFromSPARQLSource.java:121)
at eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:64)
at eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:55)
at eulergui.inputs.N3SourceFromSPARQLSource.prepare(N3SourceFromSPARQLSource.java:49)
at eulergui.project.N3Source.setProject(N3Source.java:312)
at eulergui.project.Project.addN3Source(Project.java:277)

011-08-25

Thread [doN3SourceAdded: ./errors-in-editor.n3] (Suspended)
N3Source.manageParseN3() line: 405
N3Source.update() line: 370
N3Source.parseResult() line: 426
ParsingException.getResult() line: 27
N3ParsingExceptionProcessor.process(Throwable, ProjectGUI, TemporaryFrame) line: 38
N3ConversionRefesher.updateN3(N3Source) line: 135
UpdateN3Thread.run() line: 40

2011-08-24

http://maven.apache.org/plugins/maven-site-plugin/examples/site-deploy-to-sourceforge.net.html

[jmvanel@shell-23002]~% sf-help

Your interactive shell was created with a default project of: eulergui.
If you login without a project specified, that is the project you will be
able to modify.  You can also login with these projects:

    ssh jmvanel,ecolosim@shell.sourceforge.net
    ssh jmvanel,exist@shell.sourceforge.net
    ssh jmvanel,wwbota@shell.sourceforge.net
    ssh jmvanel,xmlpub@shell.sourceforge.net
    ssh jmvanel,eulergui@shell.sourceforge.net
    ssh jmvanel,deductions@shell.sourceforge.net
    ssh jmvanel,jmvanel.u@shell.sourceforge.net

Refactoring : moving a field to a delegate class : is it possible ?

I have a a field f , several methods using f, says m1 and m2, and another field deleg of type C1 . I'd like to move together f, m1 , m2 to class C1 .

2011-08-23

Building Drools from sources

Developing Drools and jBPM

https://github.com/droolsjbpm/droolsjbpm-build-bootstrap/blob/master/README.md

ProjectGUI_Updater.n3SourceAdded(): nanoTime 279151242225728
ProjectGUI_Updater.n3SourceUpdated(): file:/home/jmv/src/eulergui_new/testEG/new.n3
ProjectGUI_Updater.findButtonsForN3Source(): eulergui.project.ProjectState@2a9df354
ProjectGUI_Updater.findButtonsForN3Source(): eulergui.tools.SWRLTranslator@39e87719
ProjectGUI_Updater.findButtonsForN3Source(): eulergui.gui.controller.ApplicationKB@60223be4
ProjectGUI_Updater.findButtonsForN3Source(): eulergui.gui.controller.ProjectGUI_Updater@5c68b20
ProjectGUI_Updater.findButtonsForN3Source(): eulergui.gui.controller.N3ConversionRefesher@397af435
ProjectGUI_Updater.n3SourceUpdated(): Thread Name: AWT-EventQueue-1

java.lang.AssertionError: findButtonsForN3Source: buttonsFound != null
        at eulergui.gui.controller.ProjectGUI_Updater.findButtonsForN3Source(ProjectGUI_Updater.java:137)
        at eulergui.gui.controller.ProjectGUI_Updater.n3SourceUpdated(ProjectGUI_Updater.java:235)
        at eulergui.project.ProjectChangeSupport.fireN3SourceUpdated(ProjectChangeSupport.java:167)
        at eulergui.project.Project.fireN3SourceUpdated(Project.java:1401)
        at eulergui.gui.controller.N3ConversionRefesher.n3SourceAdded(N3ConversionRefesher.java:56)
        at eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:77)
        at eulergui.project.Project.addN3Source(Project.java:289)
        at eulergui.project.Project.addN3Source(Project.java:272)
        at n3_project.SourceFilesManagement$AddN3Action.actualAction(SourceFilesManagement.java:236)
        at n3_project.SourceFilesManagement$AddN3Action.actionPerformed(SourceFilesManagement.java:213)

    public void setProject(Project project) {
    this.project = project;
    project.addProjectListener(new N3ConversionRefesher(this));
    project.addProjectListener(new ProjectGUI_Updater(this));

2011-08-20

EulerGUI TODO

- do not check timestamp of N3 source web location when the current timestamp is too recent, e.g. 500 ms.

- error highlighting and caret placement in editor broken

- run SPARQL in a thread

- before running SPARQL, the left button should be grey, and after running be activated (same for translations from other non N3 sources)

- new example ckan_explore.n3p should also show metadata about the data sources discovered

- SPARQL endpoints should have a tooltip with a short description

- new endpoints found in EG project should be added in the combo box

what are the properties used in data source directories for SPARQL endpoints ? For example in http://semantic.ckan.net/sparql/ it is http://rdfs.org/ns/void#sparqlEndpoint

- new endpoint added by user should be added in the combo box

- http://semantic.ckan.net/sparql/ should be added in the combo box

- RDFToN3Converter : stream were not closed :( TODO : check closing in other places

- TODO: have to fix the GUI's list management in EulerGUI singleton (cf Revision 2576)

- REGRESSION FIXED: adding a new SPARQL query to a project ( cause: field uri_ in N3SourceFromSPARQLSource was not set ) TODO: probably a more general fix is to fix N3Source.setProject(Project) , so that fileds uri_ , location and project are in sync (cf Revision 2566)

- TODO bad behavior on GUI events in deductions/n3_nojs/person-app.n3p

DONE

removed these useless declarations ( and changed the defaults in eclipse compiler ) :

private static final long serialVersionUID = 1L;

Idea for a non -trivial and useful graph transform : N3 <==> SPARQL

for N3 ==> SPARQL : reify N3 rules ; add FILTER and other SPARQL stuff, generate SPARQL string

2011-08-19

COMMIT

now N3 URI sources are added in a thread ! GUI much more reactive !

e.g. when loading http://purl.org/dc/terms/ , you see first the button for DC terms , then 1 sec after you see the button for the rules in it

Thread when adding an RDF remote URI to the project :

Thread [AWT-EventQueue-0] (Suspended)
Thread.sleep(long) line: not available [native method]
Process.execute(long) line: 44
ProofEngine.runProofEngine(String[], PrintStream, PrintStream) line: 180
ProofEngine.runProofEngine(String[]) line: 199
EyeHelper.reasonExternalProlog(Project) line: 52
Project.reasonExternalProlog() line: 499
SWRLTranslator.runTranslatorProject(N3Source) line: 115
SWRLTranslator.n3SourceAdded(Project, N3Source) line: 51
ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 78
Project.addN3Source(N3Source, boolean) line: 289
Project.addN3Source(N3Source) line: 272
SourceFactory.addSource(URL, Project) line: 121
ProjectGUI$ActionChooseURL_N3.actionPerformed(ActionEvent) line: 675
JButton(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
JButton(Component).processMouseEvent(MouseEvent) line: 6288
JButton(JComponent).processMouseEvent(MouseEvent) line: 3267
JButton(Component).processEvent(AWTEvent) line: 6053
JButton(Container).processEvent(AWTEvent) line: 2041
JButton(Component).dispatchEventImpl(AWTEvent) line: 4651
JButton(Container).dispatchEventImpl(AWTEvent) line: 2099
JButton(Component).dispatchEvent(AWTEvent) line: 4481
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4577
LightweightDispatcher.processMouseEvent(MouseEvent) line: 4238
LightweightDispatcher.dispatchEvent(AWTEvent) line: 4168
ProjectGUI$URLDialog(Container).dispatchEventImpl(AWTEvent) line: 2085
ProjectGUI$URLDialog(Window).dispatchEventImpl(AWTEvent) line: 2478
ProjectGUI$URLDialog(Component).dispatchEvent(AWTEvent) line: 4481
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 643
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 84
EventQueue$1.run() line: 602
EventQueue$1.run() line: 600
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 98
EventQueue$2.run() line: 616
EventQueue$2.run() line: 614
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
EventQueue.dispatchEvent(AWTEvent) line: 613
EventDispatchThread.pumpOneEventForFilters(int) line: 269
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184
EventDispatchThread.pumpEventsForFilter(Conditional, EventFilter) line: 178
Dialog$1.run() line: 1046
Dialog$3.run() line: 1098
AccessController.doPrivileged(PrivilegedAction<T>) line: not available [native method]
ProjectGUI$URLDialog(Dialog).show() line: 1096
ProjectGUI$URLDialog(Component).show(boolean) line: 1584
ProjectGUI$URLDialog(Component).setVisible(boolean) line: 1536
ProjectGUI$URLDialog(Window).setVisible(boolean) line: 842
ProjectGUI$URLDialog(Dialog).setVisible(boolean) line: 986
ProjectGUI.popupURLChooser() line: 648
SourceFilesManagement$AddN3URLAction.actionPerformed(ActionEvent) line: 242
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: 6288
JToolBar$1(JComponent).processMouseEvent(MouseEvent) line: 3267
JToolBar$1(Component).processEvent(AWTEvent) line: 6053
JToolBar$1(Container).processEvent(AWTEvent) line: 2041
JToolBar$1(Component).dispatchEventImpl(AWTEvent) line: 4651
JToolBar$1(Container).dispatchEventImpl(AWTEvent) line: 2099
JToolBar$1(Component).dispatchEvent(AWTEvent) line: 4481
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: 4481
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 643
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 84
EventQueue$1.run() line: 602
EventQueue$1.run() line: 600
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 98
EventQueue$2.run() line: 616
EventQueue$2.run() line: 614
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
EventQueue.dispatchEvent(AWTEvent) line: 613
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

EulerGUI ideas TODO :

COMMIT:

ProjectGUI :

- if no context ( project or file opened before ) use user.dir ( startup dir ) for file choosers

- if given file for lastFile is a temporary file , or in the eulergui cache , do not change lastFile

- prefixes beginning with / like http://purl.org/dc/terms/ , gave a bad name for associated rules : /tmp/.as.rules.n3

- use get/set lastFile in most places

http://www.w3.org/2001/sw/wiki/Tools

EulerGUI DONE : bug : changing endpoint URI and saving project : EG is blocked, and moreover the .n3p is empty !!!

this was happening when the SPARQL server is taking a long time.

Stack when blocked when changing endpoint URI and saving project :

Thread [AWT-EventQueue-0] (Suspended)
SocketInputStream.socketRead0(FileDescriptor, byte[], int, int, int) line: not available [native method]
SocketInputStream.read(byte[], int, int) line: 129
BufferedInputStream.fill() line: 218
BufferedInputStream.read1(byte[], int, int) line: 258
BufferedInputStream.read(byte[], int, int) line: 317
ChunkedInputStream.readAheadBlocking() line: 525
ChunkedInputStream.readAhead(boolean) line: 582
ChunkedInputStream.read(byte[], int, int) line: 669
HttpURLConnection$HttpInputStream(FilterInputStream).read(byte[], int, int) line: 116
HttpURLConnection$HttpInputStream.read(byte[], int, int) line: 2676
HttpURLConnection$HttpInputStream.read(byte[]) line: 2671
UTF8Reader.loadMore(int) line: 365
UTF8Reader.read(char[], int, int) line: 110
BranchingReaderSource(ReaderSource).readInto(WstxInputData) line: 84
BranchingReaderSource.readInto(WstxInputData) line: 57
ValidatingStreamReader(StreamScanner).loadMore() line: 992
ValidatingStreamReader(StreamScanner).getNext() line: 763
ValidatingStreamReader(BasicStreamReader).skipToken() line: 3342
ValidatingStreamReader(BasicStreamReader).nextFromTree() line: 2622
ValidatingStreamReader(BasicStreamReader).next() line: 1019
XMLInputStAX$ResultSetStAX.getOneSolution() line: 410
XMLInputStAX$ResultSetStAX.hasNext() line: 217
SPARQLToN3Converter.doSelectQuery(Query, URL, String) line: 146
N3SourceFromSPARQLSource.doUpdate() line: 67
N3SourceFromSPARQLSource.getLocalN3() line: 91
N3SourceFromSPARQLSource(N3Source).getFileName() line: 734
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
GeneratedMethodAccessor11.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
Expression(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]
Expression(Statement).invoke() line: 137
Expression.getValue() line: 98
DefaultPersistenceDelegate.doProperty(Class, PropertyDescriptor, Object, Object, Encoder) line: 210
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).writeExpression(Expression) line: 279
XMLEncoder.writeExpression(Expression) line: 372
java_util_AbstractMap_PersistenceDelegate(java_util_Map_PersistenceDelegate).initialize(Class<?>, Object, Object, Encoder) line: 523
DefaultPersistenceDelegate(PersistenceDelegate).initialize(Class<?>, Object, Object, Encoder) line: 190
DefaultPersistenceDelegate.initialize(Class<?>, Object, Object, Encoder) line: 393
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.doProperty(Class, PropertyDescriptor, Object, Object, Encoder) line: 212
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: 1116
Project.save() line: 1139
ProjectFileManagement$SaveProjectLocalAction.actionPerformed(ActionEvent) line: 439
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: 809
BasicMenuItemUI$Handler.mouseReleased(MouseEvent) line: 850
JMenu$1(Component).processMouseEvent(MouseEvent) line: 6288
JMenu$1(JComponent).processMouseEvent(MouseEvent) line: 3267
JMenu$1(Component).processEvent(AWTEvent) line: 6053
JMenu$1(Container).processEvent(AWTEvent) line: 2041
JMenu$1(Component).dispatchEventImpl(AWTEvent) line: 4651
JMenu$1(Container).dispatchEventImpl(AWTEvent) line: 2099
JMenu$1(Component).dispatchEvent(AWTEvent) line: 4481
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: 4481
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 643
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 84
EventQueue$1.run() line: 602
EventQueue$1.run() line: 600
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 98
EventQueue$2.run() line: 616
EventQueue$2.run() line: 614
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
EventQueue.dispatchEvent(AWTEvent) line: 613
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

2011-08-18

Tried to get N3 out of ckan, but it only speaks JSON :( :

wget –header="Content-Type: application/n3" http://ckan.net/api/rest/package

EulerGUI TODO : bug : changing endpoint URI and saving project : EG is blocked, and moreover the .n3p is empty !!!

EulerGUI idea (TODO?): add a new EG engine that starts "eye" by a system call like FuXi and CWM ; this would be OK for Jos

<rszeno> lcpvrr1 try 'select distinct ?l where { [] rdfs:label ?l . }'

<rszeno> for 15 labels i would not use dbpedia, :)

<jmvanel_> back ; now 28°

<rszeno> ?s rdfs:label ?l will ask for a cartezian product, that means will search for 'number of ?s' * 'number of ?l' but [] will tell virtuoso to ignore ?s wich mean a size of 'number of ?l'

<rszeno> that is first reason

<rszeno> second, passing all results over the net, duplicates is slow, so let virtuoso to remove duplicates using distinct

<jmvanel_> should add this in EG manual

2011-08-17

Exploring CKAN, a portal of Open Data

Looking in CKAN things, we find information here : http://wiki.ckan.net/RDF_and_CKAN ( CKAN is not natively RDF ). From this we intuited the CKAN SPARQL Endpoint: http://semantic.ckan.net/sparql/ .

It is using mainly the VOID vocabulary ( Vocabulary of Interlinked Datasets) : http://vocab.deri.ie/void .

The quite generic steps for exploring a data source are :

1. Getting the properties and classes used

find_properties.sparql SELECT DISTINCT ?p WHERE {?s ?p ?o}

find_classes.sparql SELECT DISTINCT ?Concept WHERE {?x a ?Concept}

2. Looking at values of the most interesting property

By asking all properties, I discovered that the property for sparql Endpoint is http://rdfs.org/ns/void#sparqlEndpoint ; not http://vocab.deri.ie/void#sparqlEndpoint as indicated in the doc.

# NOTE : http://vocab.deri.ie/void#sparqlEndpoint does not exist in CKAN data !! 
CONSTRUCT {
  ?D <http://rdfs.org/ns/void#sparqlEndpoint> ?EP.
}
WHERE {
  ?D <http://rdfs.org/ns/void#sparqlEndpoint> ?EP.
}

3. Focusing on an interesting URI

Looking for "ecology" in previous result, there is one SPARQL database : <http://ckan.net/package/linked-open-data-of-ecology>

So the apropriate query is :

CONSTRUCT {
  <http://ckan.net/package/linked-open-data-of-ecology> ?P ?O .
}
WHERE {
  <http://ckan.net/package/linked-open-data-of-ecology> ?P ?O .
}

whose result is ( abridged ) :

<http://ckan.net/package/linked-open-data-of-ecology>
      <http://purl.org/dc/terms/description>
              """<p>Linked Open Data of Ecology (<a href=\"http://ecowlim.tfri.gov.tw/lode\">LODE</a>) is a prototype to integrate the data of ecology by linked data approach. So far the subjects include most of <a href=\"http://ecowlim.tfri.gov.tw/lode/resource/firedb/ForestFireEvent\">wildfire</a>, <a href=\"http://ecowlim.tfri.gov.tw/lode/page/taibnet/Species\">taxonomy</a>, biodiversity data of <a href=\"http://ecowlim.tfri.gov.tw/lode/page/taif/Species\">plants</a> and <a href=\"http://ecowlim.tfri.gov.tw/lode/page/flyhorse/Species\">insects</a> in Taiwan. 
</p>
<p>2011/07/20: Recently we added a new dataset about measurements of DBH(diameters breast height) of tree entities in Nansi forest dynamics plot (<a href=\"http://ecowlim.tfri.gov.tw/lode/resource/fdp/NansiForestDynamicsPlotCensus/01\">FDP-NS</a>).
</p>""" ;
      <http://purl.org/dc/terms/isPartOf>
              <http://ckan.net/group/lodcloud> ;
      <http://purl.org/dc/terms/title>
              "Linked Open Data of Ecology" ;
      <http://rdfs.org/ns/void#exampleResource>
              <http://ecowlim.tfri.gov.tw/lode/data/taibnet/Species/Callyodon_laxtoni?output=xml> , <http://ecowlim.tfri.gov.tw/lode/data/firedb/ForestFireEvent/1065?output=xml> , <http://ecowlim.tfri.gov.tw/lode/data/taif/Specimen/TAIF-PLANT-1-1-10026-187900?output=n3> , <http://ecowlim.tfri.gov.tw/lode/data/flyhorse/CollectingEvent/10015?output=xml> ;
      <http://rdfs.org/ns/void#sparqlEndpoint>
              <http://ecowlim.tfri.gov.tw/sparql/query> ;
      <http://xmlns.com/foaf/0.1/homepage>
              <http://ecowlim.tfri.gov.tw/lode> .

NOTE: no prefix was found on prefix.cc for CKAN !?! This would have simplified the above listing .

The EulerGUI project gathering the step 1,2,3 is : ckan_explore.n3p .

Now that I found this data source, ckan:linked-open-data-of-ecology , I can start again the same steps : Getting the properties and classes used; ??????? WIP ?????????

BAD NEWS ! running this on data source ckan:linked-open-data-of-ecology :

find_properties.sparql SELECT DISTINCT ?p WHERE {?s ?p ?o}

runs a long time, and EulerGUI is not responsive during querying :(((

The EulerGUI project gathering the step 1,2,3 is : ecology_explore.n3p .

EulerGUI TODO listed in commits

- TODO : prefixes beginning with / like http://purl.org/dc/terms/ , give a bad name for associated rules : /tmp/.as.rules.n3

TODO: have to fix the GUI's list management in EulerGUI singleton.

Revision 2567 - Modified Sat Jul 30 13:58:24 2011 UTC (2 weeks, 3 days ago) by jmvanel

FIX LaunchOWLReasonerAction : making class tree from a SPARQL query was not working

TODO : less ad-hoc fix, so that making class tree from any N3Source is sure to work

Always close streams

http://stackoverflow.com/questions/4072878/i-o-concept-flush-vs-sync

http://www.javapractices.com/topic/TopicAction.do?Id=8

http://stackoverflow.com/questions/2732260/in-java-when-i-call-outputstream-close-i-always-need-to-call-outputstream-flus

Could not load N3 source from URL http://purl.org/net/opmv/ns#
ERROR in reasoning with External Prolog
n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:59)
eulergui.project.Project.reasonExternalProlog(Project.java:499)
eulergui.tools.SWRLTranslator.runTranslatorProject(SWRLTranslator.java:114)
eulergui.tools.SWRLTranslator.n3SourceAdded(SWRLTranslator.java:50)
eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:78)
eulergui.project.Project.addN3Source(Project.java:289)
eulergui.project.Project.addN3Source(Project.java:272)
n3_project.SourceFactory.addSource(SourceFactory.java:121)
n3_project.ProjectGUI$ActionChooseURL_N3.actionPerformed(ProjectGUI.java:670)
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

Cause:
java.lang.NullPointerException
n3_project.helpers.EyeHelper.addN3SourceToEulerArguments(EyeHelper.java:192)
n3_project.helpers.EyeHelper.getEulerArguments(EyeHelper.java:148)
n3_project.helpers.EyeHelper.reasonExternalProlog(EyeHelper.java:50)
eulergui.project.Project.reasonExternalProlog(Project.java:499)
eulergui.tools.SWRLTranslator.runTranslatorProject(SWRLTranslator.java:114)
eulergui.tools.SWRLTranslator.n3SourceAdded(SWRLTranslator.java:50)
eulergui.project.ProjectChangeSupport.fireAddN3Source(ProjectChangeSupport.java:78)
eulergui.project.Project.addN3Source(Project.java:289)
eulergui.project.Project.addN3Source(Project.java:272)
n3_project.SourceFactory.addSource(SourceFactory.java:121)

http://purl.org/net/opmv/ns#

http://semantic.ckan.net/

file:/tmp/.as.rules.n3

Thread [doN3SourceAdded: http://purl.org/dc/terms/] (Suspended (exception ParsingException))
ParserLink.parse(N3Source) line: 117
N3SourceFromRDF(N3Source).doParseN3() line: 444
N3SourceFromRDF(N3Source).manageParseN3() line: 392
N3SourceFromRDF(N3Source).update() line: 370
N3ConversionRefesher.updateN3(N3Source) line: 102
UpdateN3Thread.run() line: 40

2011-08-15

Trouble reading dc terms

On IRC chat #eulergui

EG has trouble reading http://purl.org/dc/terms/ ; probably some content-type that was not foressen

no, it works and returns appplication/rdf+xml , one of the types requested ;

<jmvanel_> the bug is after and mine

<jmvanel_> somewhere in project.addN3Source(n3);

<jmvanel_> somehow RDF/XMl is sent to Euler , which dislikes this :(

<jmvanel_> FYI Euler is used when adding an N3/RDF source to create rules for OWL patterns like rdfs:subclassOf , etc

==> the root cause was that there is a missing feature in N3 Java parser :

"string"@en-US

about language tag :

<jmvanel_> the answer is simple for me : if CWM and Euler accept it , then accept it too ...

<jmvanel_> however ...

<jmvanel_> I discovered the issue in DC terms , and it might be a problem with the RDF ==> N3 translation in Jane

<jmvanel_> indeed , DC terms has lots of xml:lang="en-US"

<jmvanel_> gotten directly by :

<jmvanel_> wget –header="Content-Type: application/rdf+xml" http://purl.org/dc/terms/

Thread [AWT-EventQueue-0] (Suspended)
N3Source.manageN3Cache(N3Source) line: 510
IOManager.getLocalCache(N3Source) line: 143
N3SourceFromRDF(N3Source).getLocalCache() line: 675
N3SourceFromRDF(N3Source).getLocalN3() line: 671
SWRLTranslator.runTranslatorProject(N3Source) line: 107
SWRLTranslator.n3SourceAdded(Project, N3Source) line: 50
ProjectChangeSupport.fireAddN3Source(Project, N3Source) line: 78
Project.addN3Source(N3Source, boolean) line: 289
Project.addN3Source(N3Source) line: 272
SourceFactory.addSource(URL, Project) line: 121
ProjectGUI$ActionChooseURL_N3.actionPerformed(ActionEvent) line: 670
JButton(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
JButton(Component).processMouseEvent(MouseEvent) line: 6288
JButton(JComponent).processMouseEvent(MouseEvent) line: 3267
JButton(Component).processEvent(AWTEvent) line: 6053
JButton(Container).processEvent(AWTEvent) line: 2041
JButton(Component).dispatchEventImpl(AWTEvent) line: 4651
JButton(Container).dispatchEventImpl(AWTEvent) line: 2099
JButton(Component).dispatchEvent(AWTEvent) line: 4481
LightweightDispatcher.retargetMouseEvent(Component, int, MouseEvent) line: 4577
LightweightDispatcher.processMouseEvent(MouseEvent) line: 4238
LightweightDispatcher.dispatchEvent(AWTEvent) line: 4168
ProjectGUI$URLDialog(Container).dispatchEventImpl(AWTEvent) line: 2085
ProjectGUI$URLDialog(Window).dispatchEventImpl(AWTEvent) line: 2478
ProjectGUI$URLDialog(Component).dispatchEvent(AWTEvent) line: 4481
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 643
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 84
EventQueue$1.run() line: 602
EventQueue$1.run() line: 600
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 98
EventQueue$2.run() line: 616
EventQueue$2.run() line: 614
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
EventQueue.dispatchEvent(AWTEvent) line: 613
EventDispatchThread.pumpOneEventForFilters(int) line: 269
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184
EventDispatchThread.pumpEventsForFilter(Conditional, EventFilter) line: 178
Dialog$1.run() line: 1046
Dialog$3.run() line: 1098
AccessController.doPrivileged(PrivilegedAction<T>) line: not available [native method]
ProjectGUI$URLDialog(Dialog).show() line: 1096
ProjectGUI$URLDialog(Component).show(boolean) line: 1584
ProjectGUI$URLDialog(Component).setVisible(boolean) line: 1536
ProjectGUI$URLDialog(Window).setVisible(boolean) line: 842
ProjectGUI$URLDialog(Dialog).setVisible(boolean) line: 986
ProjectGUI.popupURLChooser() line: 643
SourceFilesManagement$AddN3URLAction.actionPerformed(ActionEvent) line: 242
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: 6288
JToolBar$1(JComponent).processMouseEvent(MouseEvent) line: 3267
JToolBar$1(Component).processEvent(AWTEvent) line: 6053
JToolBar$1(Container).processEvent(AWTEvent) line: 2041
JToolBar$1(Component).dispatchEventImpl(AWTEvent) line: 4651
JToolBar$1(Container).dispatchEventImpl(AWTEvent) line: 2099
JToolBar$1(Component).dispatchEvent(AWTEvent) line: 4481
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: 4481
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 643
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 84
EventQueue$1.run() line: 602
EventQueue$1.run() line: 600
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 98
EventQueue$2.run() line: 616
EventQueue$2.run() line: 614
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
EventQueue.dispatchEvent(AWTEvent) line: 613
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

Trying ckan.net with EulerGUI

http://ckan.net/package?q=plants : 17 responses , but not all botany, because of words synonymy

<jmvanel__> there is an API :) to ckan

btw that's the kind of test you could do with EG ; EG is also a general purpose semweb tool ( I should avertise this more )(

back to kcan )

<jmvanel__> I tried to open one linked data in EG : http://ckan.net/package/taxonconcept ; this is view as web page in the Web browser ;

<jmvanel__> and I hoped that with EG accept-content headers I would get N3 / RDF

<jmvanel__> ok , that also what EG does

<jmvanel__> and IT WORKS !!

( started grahpviz on http://ckan.net/package/taxonconcept in EG ; run since minutes :(( )

( EG use with LOD : tried "add refered ontologies to current project", but to visible effect , and no log :(( )

( EG use with LOD : the interesting triple in http://ckan.net/package/taxonconcept is : <http://ckan.net/package/taxonconcept> void:sparqlEndpoint <http://lsd.taxonconcept.org/sparql>

Could be a nice feature for EG to record all void:sparqlEndpoint triples , and reuse them endpoints in the SPARQRL feature

( EG use with LOD : tried in the editor : control A ; edit / text / format paragraph ==> it adds eol's after column 80 , and it DOES touch strings :(((

another irritating bug in EG : the default dir for saving is ..

Analysis of the proof vocabulary

The proof vocabulary is in http://www.w3.org/2000/10/swap/reason# .

The EulerGUI project eulergui/examples/proofVerbalization.n3p is an example of both proof explanation and XHTML generation.

Structure of the RDF graph of a proof explanation

A r:Proof has r:component's ; and r:gives some triples.

The r:component's typically are r:Inference; which r:gives some triples for conclusion; and has r:evidence's.

The r:evidence's is rdf:List whose elements are either r:Extraction (i.e. simple extraction from the facts and rules), or r:Inference, or r:binding

, or r:rule .

An r:Extraction has a property r:because which is a r:Parsing , having a r:source which is the URI of the N3 source.

A r:binding has a r:variable, that has an n3:uri ( a string like "http://localhost/var#x3" ), a r:boundTo property which represents the value , and has an n3:uri .

An r:rule is an r:Extraction , that has an r:gives property (the rule N3 text), etc.

Here is the proof explanation in the above project ; to obtain it, uncheck the box near the post-processing project button. The output of the original project is an XHTML document as a string.

[ a r:Proof, r:Conjunction;
 r:component [ a r:Inference; r:gives {:Davis :connected :Hancock}; r:evidence (
  [ a r:Extraction; r:gives {:Davis :connected :Hancock}; r:because [ a r:Parsing; r:source </media/bd003f3b-ff18-4655-91dc-e014b/home/jmv/src/eulergui/examples/transitiveProp.n3>]]);
  r:binding [ r:variable [ n3:uri "http://localhost/var#x0"]; r:boundTo [ n3:uri "http://example.com#Davis"]];
  r:rule [ a r:Extraction; r:gives {@forAll var:x0. {var:x0 :connected :Hancock} => {var:x0 :connected :Hancock}}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp-query.n3>]]];

 r:component [ a r:Inference; r:gives {:Parker :connected :Hancock}; r:evidence (
  [ a r:Inference; r:gives {:Parker :connected :Hancock}; r:evidence (
   [ a r:Extraction; r:gives {:connected a owl:TransitiveProperty}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]
   [ a r:Extraction; r:gives {:Parker :connected :Davis}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]
   [ a r:Extraction; r:gives {:Davis :connected :Hancock}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]);
   r:binding [ r:variable [ n3:uri "http://localhost/var#x0"]; r:boundTo [ n3:uri "http://example.com#connected"]];
   r:binding [ r:variable [ n3:uri "http://localhost/var#x1"]; r:boundTo [ n3:uri "http://example.com#Parker"]];
   r:binding [ r:variable [ n3:uri "http://localhost/var#x2"]; r:boundTo [ n3:uri "http://example.com#Davis"]];
   r:binding [ r:variable [ n3:uri "http://localhost/var#x3"]; r:boundTo [ n3:uri "http://example.com#Hancock"]];
   r:rule [ a r:Extraction; r:gives {@forAll var:x0, var:x1, var:x2, var:x3. {var:x0 a owl:TransitiveProperty.
    var:x1 var:x0 var:x2.
    var:x2 var:x0 var:x3} => {var:x1 var:x0 var:x3}}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]]);
  r:binding [ r:variable [ n3:uri "http://localhost/var#x0"]; r:boundTo [ n3:uri "http://example.com#Parker"]];
  r:rule [ a r:Extraction; r:gives {@forAll var:x0. {var:x0 :connected :Hancock} => {var:x0 :connected :Hancock}}; r:because [ a r:Parsing; r:source </media/bd003f3b-/home/jmv/src/eulergui/examples/transitiveProp-query.n3>]]];

 r:gives {
  :Davis :connected :Hancock.
  :Parker :connected :Hancock.
 }].

2011-08-14

EulerGUI : NullPointerException on N3 query

ATTENTION: RulebaseStatistics: Packages: 1, Rules: 6
Exception in thread "doN3SourceAdded: transitiveProp-query.n3" java.lang.RuntimeException: Erreur pendant re-parsing N3 source "transitiveProp-query.n3"
        at eulergui.project.N3Source.manageParseN3(N3Source.java:401)
        at eulergui.project.N3Source.update(N3Source.java:370)
        at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:102)
        at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)
Caused by: java.lang.NullPointerException
        at net.sf.parser4j.parser.service.ParseStackAction.reduce(ParseStackAction.java:226)
        at net.sf.parser4j.parser.service.Parser.matchManagement(Parser.java:1033)
        at net.sf.parser4j.parser.service.Parser.checkForMatch(Parser.java:926)
        at net.sf.parser4j.parser.service.Parser.parse(Parser.java:286)
        at eulergui.parser.n3.impl.parser4j.service.N3Parser.parseN3(N3Parser.java:177)
        at eulergui.drools_engine.ParserLink.doParse(ParserLink.java:131)
        at eulergui.drools_engine.ParserLink.parse(ParserLink.java:109)
        at eulergui.project.N3Source.doParseN3(N3Source.java:444)
        at eulergui.project.N3Source.manageParseN3(N3Source.java:392)
        ... 3 more

UPDATED eulergui/examples/proofVerbalization.n3p , as an example of both proof explanation and XHTML generation

uploaded EulerGUI snapshot

--strings Dump :s to stdout ordered by :k whereever { :k log:outputString :s }

<rszeno> euler have problem with n3 sets notation

<rszeno> i guess cwm have a minor problem too, a bug

    @prefix : <#> . 
    # :a :b ($ :c :d :c $) .
    # cwm bug?, must be $) instead of )
    :a :b ($ :c :d :c ) .
    :e :f {$ :g, :h, :g $} .     
    # euler fail for both

<jmvanel_> my plans for today : 1) update string generation example since Jos implemented --strings CWM argument ;

<jmvanel_> 2) fix form generator customized example deductions/n3_nojs/person-app.n3p

<jmvanel_> 3) read KADS hidden in the middle of the park , to get a chance to also see birds

<jmvanel_> tomorrow : read some of ward and tqm , redefine std* in EG , mail to ACE list about lexicons

Martin Ward and fme ( FermaT Maintenance Environment)

<rszeno> short story, :)

<rszeno> my problem with wsl: in order to use it i need to do one of:

<rszeno> 1. convert existing soft manualy to wsl

<rszeno> 2. build a parser and logic to extract and convert soft to wsl

<rszeno> both are unpractical

<rszeno> martin ward extend Hoare, Hoare extend Floyd, best reading in reverse order

<jmvanel_> thanks for the 3 downloads

<rszeno> you probably need, if you want, all ward thesis

<jmvanel_> it's strange that ward does not provide some tools to convert one of the well know languages ( or subset ) to WSL .

<jmvanel_> wsl looks like assemby language

<rszeno> he generate software wsl to scheme

<jmvanel_> ( opened fme )

<rszeno> are control structure only

<rszeno> the 4 from floyd, start, halt, branch ( if) and join control

<rszeno> but with extended syntax for while ....

<rszeno> look ugly because of upper case letters, :)

<rszeno> this is the thesis page http://www.cse.dmu.ac.uk/~mward/martin/thesis/index.html

jdk1.7.0 is NOT compatible with EG, because of Drools.

And I should upgrade Drools from 5.1.1 to 5.2.0FINAL, but there are undefined problems :(

I read the page where Oracle tries to reassure open source guys http://openjdk.java.net/faq/

Openjdk 7 will be available in Ubuntu 11.10

Now I donwload Java SE 7 JDK from Oracle

2011-08-12

<rszeno> i think i found something interesting, yesterday when i search for Meta II

<rszeno> http://www.bayfronttechnologies.com/l02draco.htm

<rszeno> http://www.cse.dmu.ac.uk/~mward/martin/papers/

<rszeno> both, Neighbors James and Martin Ward have interesting Phd thesis

<rszeno> there are some pdf on both pages

<rszeno> Martin Ward have some tools, fermat3 and fme

<rszeno> fme is in java, fermat in perl+scheme, scm

<rszeno> i tried the demos for fermat3 and fme

http://nltk.googlecode.com/svn/trunk/doc/book/ch02.html

##nlp

<jmvanel> Is there an english linguistic resource to get these word categories : non-human, human, masculine, feminine ?

( preferably within nltk )

2011-08-11

Search DBPedia for algorithms

TODO

2011-08-10

http://www.upriss.org.uk/fca/fcademo.html

http://en.wikipedia.org/wiki/Formal_concept_analysis

<jmvanel> Anyway , if you like the idea of writing some domain analysis in english, I volunteer to translate your prose in ACE :)

<rszeno> i will try, :)

<jmvanel> that can be the start of new intelligent behiavor in your applications , and on my side that's a way of testing my services to customers.

Professor George F. Luger

http://www.cs.unm.edu/~luger/

With this command I can start at once the program, provided the debugger has been started in eclipse (which has connection type = socket listen ) :

java -Xdebug -Xrunjdwp:transport=dt_socket,address="8000" -jar $HOME/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar examples/BloodPressure.n3p

--- pom.xml     (révision 2103)
+++ pom.xml     (révision 2096)
@@ -508,7 +508,7 @@
       <!-- artifactId>parser</artifactId -->
       <artifactId>all</artifactId>
       <!--version>beta4</version-->
-      <version>trunk2</version>
+      <version>trunk</version>
     </dependency>

2011-08-09

update N3; PARSE ERROR in file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/examples/catch_allQ.n3 ( /media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/examples/catch_allQ.n3 ) 
Erreur pendant re-parsing N3 source "catch_allQ.n3"
eulergui.project.N3Source.manageParseN3(N3Source.java:401)
eulergui.project.N3Source.update(N3Source.java:370)
eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:102)
eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)

Cause:
file:/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/eulergui/examples/catch_allQ.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:444)
eulergui.project.N3Source.manageParseN3(N3Source.java:392)
eulergui.project.N3Source.update(N3Source.java:370)
eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:102)
eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)

alias cwm=/media/bd003f3b-ff18-4655-91dc-e014ba1af42e/home/jmv/src/swap/2000/10/swap//cwm.py

if( ! inferenceEngineFactory.isInstalled() ) setEnabled(false);

Euler : working on formatting with rules: proof explanation

COMMIT: examples : update proofVerbalization.n3p ( generation of XHTML from Euler proof explanation )

# TODO somehow we need to output a pure string out of Euler : send a mail to Jos to ask for --strings options of CWM

[ a r:Proof, r:Conjunction;
 r:component [ a r:Inference; r:gives {:Davis :connected :Hancock}; r:evidence (
  [ a r:Extraction; r:gives {:Davis :connected :Hancock}; r:because [ a r:Parsing; r:source </media/bd003f3b-ff18-4655-91dc-e014b/home/jmv/src/eulergui/examples/transitiveProp.n3>]]);
  r:binding [ r:variable [ n3:uri "http://localhost/var#x0"]; r:boundTo [ n3:uri "http://example.com#Davis"]];
  r:rule [ a r:Extraction; r:gives {@forAll var:x0. {var:x0 :connected :Hancock} => {var:x0 :connected :Hancock}}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp-query.n3>]]];

 r:component [ a r:Inference; r:gives {:Parker :connected :Hancock}; r:evidence (
  [ a r:Inference; r:gives {:Parker :connected :Hancock}; r:evidence (
   [ a r:Extraction; r:gives {:connected a owl:TransitiveProperty}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]
   [ a r:Extraction; r:gives {:Parker :connected :Davis}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]
   [ a r:Extraction; r:gives {:Davis :connected :Hancock}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]);
   r:binding [ r:variable [ n3:uri "http://localhost/var#x0"]; r:boundTo [ n3:uri "http://example.com#connected"]];
   r:binding [ r:variable [ n3:uri "http://localhost/var#x1"]; r:boundTo [ n3:uri "http://example.com#Parker"]];
   r:binding [ r:variable [ n3:uri "http://localhost/var#x2"]; r:boundTo [ n3:uri "http://example.com#Davis"]];
   r:binding [ r:variable [ n3:uri "http://localhost/var#x3"]; r:boundTo [ n3:uri "http://example.com#Hancock"]];
   r:rule [ a r:Extraction; r:gives {@forAll var:x0, var:x1, var:x2, var:x3. {var:x0 a owl:TransitiveProperty.
    var:x1 var:x0 var:x2.
    var:x2 var:x0 var:x3} => {var:x1 var:x0 var:x3}}; r:because [ a r:Parsing; r:source </home/jmv/src/eulergui/examples/transitiveProp.n3>]]]);
  r:binding [ r:variable [ n3:uri "http://localhost/var#x0"]; r:boundTo [ n3:uri "http://example.com#Parker"]];
  r:rule [ a r:Extraction; r:gives {@forAll var:x0. {var:x0 :connected :Hancock} => {var:x0 :connected :Hancock}}; r:because [ a r:Parsing; r:source </media/bd003f3b-/home/jmv/src/eulergui/examples/transitiveProp-query.n3>]]];

 r:gives {
  :Davis :connected :Hancock.
  :Parker :connected :Hancock.
 }].

2011-08-07

ACE was started as a pure logical and linguistic framework. Then a bridge to OWL+rules was added. But the core of Semantic Web is not OWL!

Its is RDF.

In fact there are many people who work in the field of Semantic Web for exploiting or leveraging data; and these data are RDF, often queryable in SPARQL.

movement called Linked Open Data, trying tp bring every valuable data on earth into RDF.

ACE core is stiil not

propose an N3 format for ACE lexica, leveraging on RDFS/OWL; there will be importers for plain RDFS/OWL ontologies that will

How to add datatype properties to ACE ?

Ask on ##nlp : Are there RDF vocabularies for NLP ?

Wordnet stuff

The french wordnet from INRIA is not in the Global Wordnet Grid

http://www.globalwordnet.org/gwa/gwa_grid.htm

Saw this in WordNet new:

At long last, WordNet 3.1 is up on the web interface. Updated database files will be coming soon. Watch this space! (6/11)

WordNet lexicon for Attempto

How to get verb transitivity from WordNet frames ?

NLTK WordNet HOWTO

NLTK book chapter 2 ""

http://nltk.googlecode.com/svn/trunk/doc/book/ch02.html

##nlp IRC

<jmvanel> Is there an english linguistic resource to get these word categories : non-human, human, masculine, feminine ?

( preferably within nltk )

2011-08-06

2011-08-05

Working with formal english:

0) just think out loud and write it

1) get the syntax right

2) ensure with paraphrase that the semantics is what is intented

3) check vocabulary coherence and check for synomyms, generalisations

4) try to align properties and classes with a well known ontology (FOAF, DC, etc)

5) write a test with EulerGUI to check the desired inferences

6) design the applicative architecture (choose inference engine, populate the user RDF graph, extract inferences or set callback/listeners, ...)

7) write applicative test

8) implement the bridges between rule base and platform services ( database, GUI, network, etc )

Remarks

genenerally, you would separe business logic and applicative logic ( what to show and ask to user and when )

WordNet lexicon for Attempto

limitations

2011-08-03

http://text-processing.com/demo/tokenize/

2011-08-02

http://gate.ac.uk/overview.html

Overview of noun water

The noun water has 6 senses (first 4 from tagged texts)

1. (136) water, H2O -- (binary compound that occurs at room temperature as a clear colorless odorless tasteless liquid; freezes into ice below 0 degrees centigrade and boils above 100 degrees centigrade; widely used as a solvent)

2. (41) body of water, water -- (the part of the earth's surface covered with water (such as a river or lake or ocean); "they invaded our territorial waters"; "they were sitting by the water's edge")

3. (2) water -- (once thought to be one of four elements composing the universe (Empedocles))

4. (2) water system, water supply, water -- (a facility that provides a source of water; "the town debated the purification of the water supply"; "first you have to cut off the water")

5. urine, piss, pee, piddle, weewee, water -- (liquid excretory product; "there was blood in his urine"; "the child had to make water")

6. water -- (a liquid necessary for the life of most animals and plants; "he asked for a drink of water")

So the first sense is not the one most "important"; it is the sixth sense in my opinion.

Now let's look at the "inheritance" structure of the sixth sense :

% wn water -hypen -n6 

Synonyms/Hypernyms (Ordered by Estimated Frequency) of noun water

Sense 6
water
       => liquid
           => fluid
               => substance
                   => matter
                       => physical entity
                           => entity
                   => part, portion, component part, component, constituent
                       => relation
                           => abstraction, abstract entity
                               => entity
       => food, nutrient
           => substance
               => matter
                   => physical entity
                       => entity
       => nutrient
           => substance
               => matter
                   => physical entity
                       => entity

I hope that this synset corresponds (enough !) the Attempto notions of mass noun:

In [78]: wn.synset('matter.n.03').definition
Out[78]: 'that which has mass and occupies space'

Why is it so ? bug or feature ?

In [92]: wn.synset('topic.n.02') == wn.synset('matter.n.03')
Out[92]: False

Understanding Python's "with" statement

<jmvanel_> I'm hoping to make something usable for people like you

<jmvanel_> it's just a matter of having the critic mass ( users providing feedback ==> enhancement ==> more users )

* danbri suggests a super-quick-start guide showing simplest useful use case

<danbri> and have sensible defaults everywhere! the app offers lots of choice ( = complexity)

<danbri> if it can't find "Cwm", ... it shouldn't offer a Cwm option, etc

<jmvanel_> sure

<jmvanel_> I added the "piping" screenshot in the doc : http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#L1200

2011-08-01

NelleV kindly did a bug report for me on ipython: https://github.com/ipython/ipython/issues/651

WordNet lexicon for Attempto

Installed PyDev in eclipse

noun_mass

http://www.nltk.org/getting-started

nltk howto/wordnet

http://attempto.ifi.uzh.ch/site/docs/ace_lexicon.html

2011-07-31

Error when refreshing or opening examples/dbpedia_classes.sparql
N3SourceFromSPARQLSource.doUpdate(): file:/home/jmv/src/eulergui_new/examples/dbpedia_classes.sparql ; http://dbpedia.org/sparql
eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:81)
eulergui.inputs.N3SourceFromSPARQLSource.getLocalN3(N3SourceFromSPARQLSource.java:91)
eulergui.project.N3Source.getFileName(N3Source.java:736)
n3_project.EditorManagement.fileToOpen(EditorManagement.java:79)
n3_project.EditorManagement.doOpenEditor(EditorManagement.java:98)
n3_project.EditorManagement.reallyDoOpenEditor(EditorManagement.java:72)
n3_project.EditorManagement$1.actionPerformed(EditorManagement.java:41)
javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)
javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2318)
javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:387)

Cause:
HttpException: HttpException: 500 SPARQL Request Failed: HttpException: 500 SPARQL Request Failed
com.hp.hpl.jena.sparql.engine.http.HttpQuery.execCommon(HttpQuery.java:350)
com.hp.hpl.jena.sparql.engine.http.HttpQuery.execGet(HttpQuery.java:189)
com.hp.hpl.jena.sparql.engine.http.HttpQuery.exec(HttpQuery.java:144)
com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execModel(QueryEngineHTTP.java:168)
com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:158)
com.hp.hpl.jena.sparql.engine.http.QueryEngineHTTP.execConstruct(QueryEngineHTTP.java:156)
n3_project.SPARQLToN3Converter.doQuery(SPARQLToN3Converter.java:72)
eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:73)
eulergui.inputs.N3SourceFromSPARQLSource.getLocalN3(N3SourceFromSPARQLSource.java:91)
eulergui.project.N3Source.getFileName(N3Source.java:736)

Querying DBPedia with EulerGUI

Reference: SPARQL queries as N3 sources in EulerGUI Manual

Work on classes

At first I tried the default query on the DBPedia URI (http://dbpedia.org/sparql) , with a web browser :

select distinct ?Concept where {[] a ?Concept}

Then I wrote the equivalent CONSTRUCT query :

CONSTRUCT {
  ?C a ?Concept 
} where {
  ?C a ?Concept
}

Alas, this does not work :

Virtuoso S1T00 Error SR171: Transaction timed out

I retried with an extended query and 300 000 ms timeout :

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT {
  ?C rdfs:subClassOf ?SUPER.
} where {
  ?C a ?Concept.
  ?C rdfs:subClassOf ?SUPER.
}

... and ... IT WORKS ! in one second . So it appears that the original query was too general for Virtuoso to optimize it. This is not the subject matter, so let me return to the original subject of exploring DBPedia with EulerGUI.

Note that this query does not bring the top level classes. An elegant way to do that is, assuming that each class has at least one label or other documentation property:

CONSTRUCT {
  ?Concept ?P ?O.
} where {
  ?C a ?Concept.
  ?Concept ?P ?O.
}

However, Virtuoso does not like this elegance and (on the web interface) says:

Virtuoso 37000 Error SP031: SPARQL compiler: Variable 'Concept' is used in the query result set but not assigned

Unchecking "Rigorous check of the query" does not bring an answer with the web interface, because of timeout.

Anyway, these queries allows to build the class tree in EulerGUI (click on "launch OWL reasonner" in tools menu). One can see that the Wikipedia ontology has 2837 classes. The classes are taken from OpenCyc, Sumo, Umbel, and certainly others. The level of generality (granularity) varies greatly. It's obviously an ontology made of bits and pieces ( "faite de bric et de broc"@fr ).

This variant brings labels and comments if present, but still does not give the top level classes:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT {
  ?C rdfs:subClassOf ?SUPER;
     rdfs:label ?L;
     rdfs:comment ?COM.
} where {
  ?C a ?Concept.
  ?C rdfs:subClassOf ?SUPER # cannot be OPTIONAL
  OPTIONAL { ?C rdfs:label ?L }
  OPTIONAL { ?C rdfs:comment ?COM }
}

This variant supposes that all classes are declared as OWL classes, which may not be the case on some serveurs:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX owl: <http://www.w3.org/2002/07/owl#>
CONSTRUCT {
  ?C rdfs:subClassOf ?SUPER;
     rdfs:label ?L;
     rdfs:comment ?COM.
} where {
  ?Concept a owl:Class.
  ?C rdfs:subClassOf ?SUPER # cannot be OPTIONAL
  OPTIONAL { ?C rdfs:label ?L }
  OPTIONAL { ?C rdfs:comment ?COM }
}

Work on properties

Get list of all properties in DBPedia

with SPARQL select query :

SELECT DISTINCT ?P WHERE {?S ?P ?O}

with N3 query:

:d eu:findall ( ?P {?S ?P ?O} ?PLIST ).

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT {
  ?P a rdfs:Property.
} where {
  ?P a rdfs:Property.
}

empty result !

PREFIX owl: <http://www.w3.org/2002/07/owl#>
CONSTRUCT {
  ?P a owl:DatatypeProperty.
} where {
  ?P a owl:DatatypeProperty.
}

736 lines

PREFIX owl: <http://www.w3.org/2002/07/owl#>
CONSTRUCT {
  ?P a owl:ObjectProperty.
} where {
  ?P a owl:ObjectProperty.
}

632 lines

How to do logical or with SPARQL ? With UNION or OPTIONAL . So here is a way to combine the two preceding queries :

PREFIX owl: <http://www.w3.org/2002/07/owl#>
PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
CONSTRUCT {
  ?P a rdfs:Property.
} where {
  { ?P a owl:ObjectProperty } UNION
  { ?P a owl:DatatypeProperty }
}

1365 lines.

Work on individuals

Get list of all properties for a specific individual; this SPARQL query outputs all triples about an URI (DBpedia: Buddy_Guy) and the rdfs:label on properties used:

PREFIX rdfs: <http://www.w3.org/2000/01/rdf-schema#>
PREFIX dbpedia: <http://dbpedia.org/resource/>

CONSTRUCT {
  dbpedia:Buddy_Guy ?p ?v .
  ?p rdfs:label ?pname .
  ?p rdfs:comment ?pcomment .
}
WHERE {
  dbpedia:Buddy_Guy ?p ?v .
  OPTIONAL { ?p rdfs:label ?pname }
  OPTIONAL { ?p rdfs:comment ?pcomment }
}

--------------------------------------------------------------------------------------

WIP

2011-07-30

EulerGUI bug: adding a new SPARQL query to a project

Exception that should be caught, when a SPARQL source is created, but no endpoint yet :

30 juil. 2011 15:30:42 n3_project.SPARQLToN3Converter doQuery
INFO: 
No dataset description for query
Exception in thread "doN3SourceAdded: file:/home/jmv/src/eulergui_new/examples/dbpedia_classes.sparql" java.lang.RuntimeException: N3SourceFromSPARQLSource.doUpdate(): file:/home/jmv/src/eulergui_new/examples/dbpedia_classes.sparql ; 
at eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:81)
at eulergui.project.N3Source.update(N3Source.java:369)
at eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:102)
at eulergui.gui.controller.UpdateN3Thread.run(UpdateN3Thread.java:40)
Caused by: com.hp.hpl.jena.query.QueryExecException: No dataset description for query
at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.prepareDataset(QueryExecutionBase.java:471)
at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.getPlan(QueryExecutionBase.java:416)
at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.startQueryIterator(QueryExecutionBase.java:400)
at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.execConstruct(QueryExecutionBase.java:151)
at com.hp.hpl.jena.sparql.engine.QueryExecutionBase.execConstruct(QueryExecutionBase.java:141)
at n3_project.SPARQLToN3Converter.doQuery(SPARQLToN3Converter.java:72)
at eulergui.inputs.N3SourceFromSPARQLSource.doUpdate(N3SourceFromSPARQLSource.java:73)

Stack when adding a new SPARQL query to a project:

Thread [doN3SourceAdded: null] (Suspended (exception NullPointerException))
StringTokenizer.<init>(String, String, boolean) line: 182
StringTokenizer.<init>(String, String) line: 204
StringHelper.subStringAfterLastSlash(String) line: 145
N3SourceFromSPARQLSource(N3Source).makeLocalN3File() line: 683
N3SourceFromSPARQLSource(N3Source).convertToN3() line: 461
N3Source.manageN3Cache(N3Source) line: 538
IOManager.getLocalCache(N3Source) line: 143
N3SourceFromSPARQLSource(N3Source).getLocalCache() line: 675
N3SourceFromSPARQLSource(N3Source).getLocalN3() line: 671
N3SourceFromSPARQLSource.doUpdate() line: 73
N3SourceFromSPARQLSource(N3Source).update() line: 369
N3ConversionRefesher.updateN3(N3Source) line: 102
UpdateN3Thread.run() line: 40

Root cause: field uri_ in N3SourceFromSPARQLSource was not set.

------------------------------

Thread [AWT-EventQueue-0] (Suspended (exception RuntimeException))
YearDV(AbstractDateTimeDV).getTimeZone(String, AbstractDateTimeDV$DateTimeData, int, int) line: not available
YearDV.parse(String) line: not available
YearDV.getActualValue(String, ValidationContext) line: not available
XSSimpleTypeDecl.getActualValue(Object, ValidationContext, ValidatedInfo, boolean) line: not available
XSSimpleTypeDecl.validate(String, ValidationContext, ValidatedInfo) line: not available
XSDYearType(XSDDatatype).parse(String) line: 249
LiteralLabelImpl.setValue(String) line: 201
LiteralLabelImpl.setLiteralLabel_1(String, String, RDFDatatype) line: 95
LiteralLabelImpl.<init>(String, String, RDFDatatype) line: 84
LiteralLabelFactory.createLiteralLabel(String, String, RDFDatatype) line: 16
Node.createLiteral(String, String, RDFDatatype) line: 91
XMLInputStAX$ResultSetStAX.getOneSolution() line: 470
XMLInputStAX$ResultSetStAX.hasNext() line: 217
SPARQLToN3Converter.doSelectQuery(Query, URL, String) line: 146
N3SourceFromSPARQLSource.doUpdate() line: 67
N3SourceFromSPARQLSource.getLocalN3() line: 91
N3SourceFromSPARQLSource(N3Source).getFileName() line: 736
ProjectGUI.manageLastFile() line: 783
ProjectGUI.setProject(Project) line: 777
ProjectFileManagement$OpenProjectAction.actionPerformed(ActionEvent) line: 535
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: 809
BasicPopupMenuUI$Actions.doReturn() line: 429
BasicPopupMenuUI$Actions.actionPerformed(ActionEvent) line: 403
SwingUtilities.notifyAction(Action, KeyStroke, KeyEvent, Object, int) line: 1639
JRootPane(JComponent).processKeyBinding(KeyStroke, KeyEvent, int, boolean) line: 2851
KeyboardManager.fireBinding(JComponent, KeyStroke, KeyEvent, boolean) line: 267
KeyboardManager.fireKeyboardAction(KeyEvent, boolean, Container) line: 216
JComponent.processKeyBindingsForAllComponents(KeyEvent, Container, boolean) line: 2928
JRootPane(JComponent).processKeyBindings(KeyEvent, boolean) line: 2920
JRootPane(JComponent).processKeyEvent(KeyEvent) line: 2814
JRootPane(Component).processEvent(AWTEvent) line: 6065
JRootPane(Container).processEvent(AWTEvent) line: 2041
JRootPane(Component).dispatchEventImpl(AWTEvent) line: 4651
JRootPane(Container).dispatchEventImpl(AWTEvent) line: 2099
JRootPane(Component).dispatchEvent(AWTEvent) line: 4481
DefaultKeyboardFocusManager(KeyboardFocusManager).redispatchEvent(Component, AWTEvent) line: 1850
DefaultKeyboardFocusManager.dispatchKeyEvent(KeyEvent) line: 712
DefaultKeyboardFocusManager.preDispatchKeyEvent(KeyEvent) line: 990
DefaultKeyboardFocusManager.typeAheadAssertions(Component, AWTEvent) line: 855
DefaultKeyboardFocusManager.dispatchEvent(AWTEvent) line: 676
ProjectGUI(Component).dispatchEventImpl(AWTEvent) line: 4523
ProjectGUI(Container).dispatchEventImpl(AWTEvent) line: 2099
ProjectGUI(Window).dispatchEventImpl(AWTEvent) line: 2478
ProjectGUI(Component).dispatchEvent(AWTEvent) line: 4481
EventQueue.dispatchEventImpl(AWTEvent, Object) line: 643
EventQueue.access$000(EventQueue, AWTEvent, Object) line: 84
EventQueue$1.run() line: 602
EventQueue$1.run() line: 600
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext) line: 98
EventQueue$2.run() line: 616
EventQueue$2.run() line: 614
AccessController.doPrivileged(PrivilegedAction<T>, AccessControlContext) line: not available [native method]
AccessControlContext$1.doIntersectionPrivilege(PrivilegedAction<T>, AccessControlContext, AccessControlContext) line: 87
EventQueue.dispatchEvent(AWTEvent) line: 613
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

After saving a SPARQL query just created:

null
eulergui.gui.controller.ProjectGUI_Updater.findButtonsForN3Source(ProjectGUI_Updater.java:124)
eulergui.gui.controller.ProjectGUI_Updater.n3SourceChanged(ProjectGUI_Updater.java:204)
eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:145)
eulergui.project.Project.fireN3SourceChanged(Project.java:1387)
eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:90)
eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:62)
java.lang.Thread.run(Thread.java:662)

Cause:

2011-07-20

Now watching this parser in OCAML for ACE Attempto : https://github.com/ontologiae/DRS-Analysis-Tool

GIT self training on sulci

After reading http://cworth.org/hgbook-git/tour/ , I cleaned my bad merge this way :

cd ~/src/sulci_jmvanel/
git fetch origin
git reset --hard origin

( following this advice : http://stackoverflow.com/questions/101752/aborting-a-merge-in-git )

Now , after reading this http://stackoverflow.com/questions/4169832/update-my-github-repo-which-is-forked-out-from-another-project, I did:

cd ../sulci
git pull
cd ../sulci_jmvanel
git pull ../sulci

So , I know that ../sulci is the "parent" from which sulci_jmvanel has been cloned, but it's not the origin that git knows; the origin is

the github remote depot of it .

2011-07-19

To restrict the discussion, it's about the ACE core, not the User Input projects (ACE View, ACEWiki, etc).

"attempto" <attempto@lists.ifi.uzh.ch>, jean.philippe.fauconnier@gmail.com, "Pierre-Alexandre Voye" <ontologiae@gmail.com>, "Olivier Cayrol" <Olivier.Cayrol@logilab.fr>,

Attempto lexicons

I think that the most important missing features in ACE are related to lexicons. There are several issues. The first is that there are several formats for ACE lexicons : one on core ACE, one in ACEWiki, another within OWL files in ACEView.

The second is that currently available lexicons are quite small.

I have 2 proposals for that.

I can start from this word list available on Linux (Ubuntu) :

/usr/share/dict/american-english

It's a plain word list with 1 word per line. For example it has both "studies" and "study" .

Then, for each word, I can use WordNet Lemmatizer in NLTK [1] to lemmatize it (that is, associate "studies" to "study" ). Each such pair will be added to an associative array. After processing the file this way, it's esay to output the lexixon formats for ACE tools. The WordNet API in NLTK will also be used to find out if it's a noun or a verb.

Example of using NLTK for lemmatization

import nltk
nltk.download()
wordnet
from nltk.stem.wordnet import WordNetLemmatizer
lmtzr = WordNetLemmatizer()
lmtzr.lemmatize('cars')


The 2nd proposal is to reuse OWL ontologies to obtain ACE lexicons. That will be in another mail ...

[1] NLTK Natural Language Toolkit - http://www.nltk.org/

Attempto and Semantic Web 1 - lexixons and OWL ontologies

ontologies in the broad sense should be reusable with Attempto. The motivation is that today a knowledge is not built in isolation anymore. Rather, for interoperability and ease of development, well established and good quality domain ontologies are used as starting point.

These

The passive can be the regular form, e.g. :

Attempto foaf-fundedBy EEC .

Even NL sentences have to refer to non-ambiguous word senses .

This is what I try to explain here ( in french :( ) :

http://jmvanel.free.fr/ai/comprehension-sans-protocole.html

Attempto is not enough, the word senses must be disambiguated as I said above.

This can be added quite easily to Attempto by RDF/N3 prefixed URI 's like foaf:Agent in this example :

Every foaf:Person is a foaf:Agent .

which is not accepted today by Attempto . But this is correct Attempto :

Every foaf-Person is a foaf-Agent .

foaf:Agent is a concept well defined by an ontology ( http://xmlns.com/foaf/spec/ ) , and moreover this FOAF ontology is widely used, which is good for interoperability, even without prior protocols or conventions.

Attempto and Semantic Web 2 - lexixons and OWL ontologies

templates

"man" has-plural "men".

TODO <<<<<<<<<<<<<<<

Attempto and building software applications

2011-07-18

http://www.ibm.com/developerworks/aix/library/au-lsof.html

<sseehh_> https://twitter.com/#!/iamhelpingu my twitter bot

<jmvanel_> seen ; didn't know it's possible to do a twitter bot :)

2011-07-17

EulerGUI

Working on "Too many open files" issue

to run with remote debugger:

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address="8000" \
     -jar target/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar

So there are 2 errors : first a Jar URL should not be checked for modifications, second the stream is not closed :

Thread [modification Checker for user preferences] (Suspended (breakpoint at line 110 in FileInputStream))
FileInputStream.<init>(File) line: 110
FileInputStream.<init>(String) line: 79
FileURLConnection.connect() line: 70
FileURLConnection.initializeHeaders() line: 90
FileURLConnection.getHeaderField(String) line: 126
JarURLConnection.getHeaderField(String) line: 203
JarURLConnection(URLConnection).getHeaderFieldDate(String, long) line: 603
JarURLConnection(URLConnection).getLastModified() line: 532
URICacheImpl.getURITimeStamp(String, boolean) line: 97
URICacheImpl.getURITimeStamp(String) line: 76
N3Source.isURITimeStampUptodate() line: 490
URIModificationChecker.checkN3Source(N3Source) line: 88
URIModificationChecker.run() line: 62
Thread.run() line: 662

REMEDY :

URICacheImpl.getURITimeStamp(String uri) : when scheme equals "jar" , return 0 , as the jars are not supposed to change

TODO EulerGUI

in http://searchFromString40 at 5,50 thru 5,69: DefaultParseNodeInErrorStatus: no prefix for "owl:"
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: ParserLink.parse(): n3ParseResult.isInError: file:/tmp/eg-4829451876663415317.n3
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: ParserLink.parse(): LineNumber: -1
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.RuntimeException: ParsingException: N3 source:17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: @prefix rdf: <http://www.w3.org/1999/02/22-rdf-syntax-ns#> .
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: @prefix rdfs: <http://www.w3.org/2000/01/rdf-schema#> .
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: @prefix : <http://jmvanel.free.fr/ontology/examples/person#>.
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: @prefix ded: <http://deductions.sf.net/owl/events#>.
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0: { owl:DatatypeProperty rdfs:label ?DETAIL } => { owl:DatatypeProperty rdfs:label ?DETAIL}.
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.project.Project.searchFromString(Project.java:1098)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.RDFTooltipsInEditor.getDetailsForResource(RDFTooltipsInEditor.java:105)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.RDFTooltipsInEditor.getLabelForResource(RDFTooltipsInEditor.java:126)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.RDFTooltipsInEditor.getFormattedDetailsForResource_old(RDFTooltipsInEditor.java:39)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.TextEditor$5.getToolTipText_KB(TextEditor.java:582)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.TextEditor$5.getToolTipText(TextEditor.java:550)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at org.gjt.sp.jedit.textarea.ExtensionManager.getToolTipText(ExtensionManager.java:135)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at org.gjt.sp.jedit.textarea.TextAreaPainter.getToolTipText(TextAreaPainter.java:663)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:662)
17:08:54 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.Timer.fireActionPerformed(Timer.java:291)

Maven

Create a plain vanilla Maven project

jmvanel_> is there a command to create a plain vanilla Maven project ?

<whaley> jmvanel_: i always use `mvn archetype:generate`... the default value for archetype will give you a "vanilla" java project

Maven bug report (assembly)

bug report : jar-with-dependencies: class from the source in project does NOT override the class in jar dependency

When running plugin maven-assembly-plugin 2.2.1 with jar-with-dependencies, and there is a class C1 in src/main/java/ that overrides a class in some dependency, in the resulting XXX-jar-with-dependencies.jar the C1.class comes from the dependency, not from the source in project.

I would except the class from the source in project to override the corresponding class in jar dependency,

So the executable jar is not built correctly. This is particularly annoying, because the tests pass , but the executable jar is not correct.

You can see this in the test project attached, where I override class TestCase of JUnit , adding a main , and setting this overriden class as the main class :

% java -jar target/maven_bug_build_override_class-1.0-SNAPSHOT-jar-with-dependencies.jar
Exception in thread "main" java.lang.NoSuchMethodError: main

( the original class TestCase of JUnit has no main ).

Hack for EulerGUI snapshot (Maven issue)

The executable jar was corrupted at the stage of building, so the tests passed , but with the executable jar it was impossible to open the N3 editor .

A snapshot is uploading at the usual place : http://eulergui.sourceforge.net/tmp/

I had to apply this hack after mvn package :

cd target/classes
zip -r ../eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar .
cp ../eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar \
   ~/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/
cd ../..

2011-07-16

http://en.wikipedia.org/wiki/Unsolved_problems_in_artificial_intelligence redirects to AI-complete

<hivemind-sb> Title: AI-complete - Wikipedia, the free encyclopedia (at en.wikipedia.org)

<RandIter> there is also http://en.wikipedia.org/wiki/List_of_open_problems_in_computer_science

<hivemind-sb> Title: List of unsolved problems in computer science - Wikipedia, the free encyclopedia (at en.wikipedia.org)

<jmvanel_> Hi when running plugin maven-assembly-plugin 2.2.1 with jar-with-dependencies, there is a class in src/main/java/ that does NOT override the corresponding class in jar dependency,

jmv-desktop: ~/src/eulergui_new/ % egrep 'Adding archived file-set|jEdit.class' ~/Documents/bbkonsole_maven_build.txt
 ...
[DEBUG] Adding archived file-set in: /home/jmv/.m2/repository/org/jedit/jedit/4.3.1/jedit-4.3.1.jar to archive location: 
 ...
[DEBUG] Adding archived file-set in: /home/jmv/src/eulergui_new/target/eulergui-1.9-SNAPSHOT.jar to archive location: 
 ...
[INFO] org/gjt/sp/jedit/jEdit.class already added, skipping
[DEBUG] adding entry org/gjt/sp/jedit/jEdit.class
[INFO] org/gjt/sp/jedit/jEdit.class already added, skipping

16:56:33 [AWT-EventQueue-0] [message] Log: java.class.path=/home/jmv/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.NoSuchMethodError: org.gjt.sp.jedit.jEdit.getView()Lorg/gjt/sp/jedit/View;
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.TextEditor.displayEditor(TextEditor.java:293)
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at n3_project.EditorManagement.openJavaEditor(EditorManagement.java:135)
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at n3_project.EditorManagement.doOpenEditor(EditorManagement.java:104)
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at n3_project.EditorManagement.reallyDoOpenEditor(EditorManagement.java:72)
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at n3_project.EditorManagement$1.actionPerformed(EditorManagement.java:41)
16:56:33 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:1995)

Trying RatPoison

* #ratpoison :http://ratpoison.sourceforge.net

<jmvanel__> cthuluh, X: user not authorized to run the X server, aborting.

<cthuluh> 8)

<cthuluh> wait, are you trying this from within your current X session?

<jmvanel__> yes :( ; i shoulld use the functions keys to get a console

<cthuluh> perhaps startx -- :1 # would be enough

<jmvanel__> no, not enough

<cthuluh> ok then try it from a tty :)

<jmvanel> yeah !!!

<jmvanel> it works ; I did Control Alt F3 :) first

<cthuluh> cool. now you can enjoy the (almost too) rich interface of ratpoison!

<jmvanel> but It's not what I expected ... opened a terminal by control t c ; then in gnome terminal, I did File / open terminal ; but there is no tiling by ratpoison :( ; the original terminal still ocupies the whole screen

<jmvanel> also started xchat ; again it ocupies the whole screen

<cthuluh> sure

* necrodearia est parti (Ping timeout: 276 seconds)

<cthuluh> just split your screen

<jmvanel> how ?

<cthuluh> C-t ?

<jmvanel> thanks ; after typing several control alt FX , I lost every X server :(

<cthuluh> huhu

<cthuluh> your primary one is probably on tty7. the newest one is probably on tty8

<jmvanel> with Control Alt F8 I get my regular gnome environment ;

<jmvanel> but I lost ratpoison :(

<jmvanel> following your advice , I started ratp with startx -- :1

<cthuluh> hmmm. on debian, or on ubuntu?

<jmvanel> on ubuntu I try ratp ; on debian I chat with you on my laptop

<jmvanel> with Control Alt F7 I get OS start messages

<cthuluh> ah. beware of the great ubuntu gremlin

<jmvanel> :)

* necrodearia (~mizery@unaffiliated/necrodearia) a rejoint #ratpoison

<cthuluh> try ps aux | grep X

<cthuluh> it should give you the consoles on with X servers are running

<jmvanel> I 'm afraid I can't tame the gremlin

<cthuluh> then shred it ;)

<cthuluh> there's no reason for your ratpoison instance to disappear

<jmvanel> with Control Alt F3 I get the startx messages for ratp , but no graphical environment

<cthuluh> and with F9 ?

<jmvanel> yeah , fine !!!!!!!

<jmvanel> F9

<jmvanel> I'm reallly dumb with these keys

<cthuluh> 8)

<jmvanel> so, now I try control t 1 , 2 etc to switch windows

<jmvanel> it works , but NOT with the numbers in the number keys on ther right :(

<jmvanel> looks like a bug somewhere ...

<cthuluh> hmmm

<jmvanel> and how to tile my windows ?

<cthuluh> read again the topic: no handholding ;)

<cthuluh> I don't get your first question

<jmvanel> about the number keys ?

<cthuluh> the numeric keypad doesn't work?

<jmvanel> right

<cthuluh> is the led turned on, when you're in ratpoison?

<jmvanel> yes , and I use it always

<cthuluh> then I have no idea

<jmvanel> works fine in gnome

<cthuluh> well

<cthuluh> can you type numbers using it, in ratpoison?

<cthuluh> (start an xterm, type 123)

<jmvanel> the numeric keypad does work within rp , inside a terminal or xchat, but NOT with control t

<jmvanel> ( it' possible that ubuntu has an old version of rp )

<jmvanel> expreimented control t s :))

<jmvanel> How can I rremove Command

<jmvanel> Kill the current frame. This is a no-op if there is only one frame.un this :

<jmvanel> How can I run the remove Command ?

<jmvanel> I did Cntrl t cntrl k ; it closed the current frame , BUT its space is still occupied by a black zone that is unused by any remaining frame :(((

2011-07-15

[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 15:12.267s
[INFO] Finished at: Fri Jul 15 19:44:33 CEST 2011

Upgrade Maven plugins to latest versions: maven-assembly-plugin 2.2.1 , maven-surefire-plugin 2.8.1

URIModificationChecker : avoid useless call to fireN3SourceChanged() when no N3 Source is Changed

This was doubling the number of widgets at each user event in project deductions/n3_nojs/person-app.n3p

2011-07-11

/ape.exe -guess -text 'If a user U has-as-friend a person X, and has-as-friend a person Y, and X is not Y, and X has-as-friend Z, and Y has-as-friend Z, and Z is not U then Z is-a-proposed-friend-for U.' -solo paraphrase

Every user X1 that v:has-as-friend a person X2 and that v:has-as-friend a person X3 that v:has-as-friend something X4 that is not the user X1 and that is v:has-as-friend by the person X2 that is not the person X3 is v:is-a-proposed-friend-for by X4.

too many open files

null

n3_project.ResultManagement.displayOriginalSourceWithErrors(ResultManagement.java:249)
eulergui.gui.controller.N3ParsingExceptionProcessor.process(N3ParsingExceptionProcessor.java:36)
eulergui.gui.controller.N3ConversionRefesher.updateN3(N3ConversionRefesher.java:127)
eulergui.gui.controller.N3ConversionRefesher.n3SourceChanged(N3ConversionRefesher.java:46)
eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:145)
eulergui.project.Project.fireN3SourceChanged(Project.java:1384)
eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:90)
eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:62)
java.lang.Thread.run(Thread.java:662)

quand j'aurai un peu de temps , je voudrais essayer sulci , et // réfléchir sur les bonnes pratiques existantes sur le mélange harmonieux d'ontologies, thésaurus, et indexation ;

<jmvanel_> et bien sûr partager ça avec l'équipe sulci

----------------------------------------

Web sémantique : donner un nom aux choses;

et établir des relations entre elles.

pas nécessairement des grosses bases: messages entre applications et / ou humain ; navigation de proche en proche

mail + RDF ?

--------------------------------------------------------

Are there some central "yellow pages" directories of data sources , where I can query for public data sources about a subject, domain or concept?

La sémantique : le livre est sur le meuble .

-----------------------------------------------------------

2011-07-10

Thread [main] (Suspended (breakpoint at line 960 in N3SourcetoDrools))
N3SourcetoDrools.setRuleBase(RuleBase) line: 960
N3DroolsEngineFacade.setRuleBase(RuleBase) line: 174
Project.compiledRulebaseLoadedFromCache(String) line: 717
Project.translateN32Drools(boolean) line: 864
Project.prepareDrools(boolean) line: 843
ApplicationKB.<init>() line: 98
ApplicationKB.instance() line: 76
Project.prepare() line: 1162
ProjectFactory.prepareProject(Project, URL, boolean) line: 328
CommandLineArguments.makeProjectFromEulerCommandLine(String[]) line: 107
CommandLineArguments.makeProjectFromUserArgument(String[]) line: 48
ProjectGUI.main(String[]) line: 193

jmv-desktop: ~/src/eulergui_new/examples/ % N3SourcetoDrools.setRuleBase(): re-create workingMemory and copy 24 facts from old WM


The N3 shell is blocking when running in background and the Unis shell prints :

[1]  + suspended (tty output)  ~/apps/eclipse/eclipse -vmargs -Djava.library.path=/usr/lib/jni $*

when running this instruction in UnixTerminal.initializeTerminal() :

        // set the console to be character-buffered instead of line-buffered
        stty("-icanon min 1");

And the stack is :

Thread [N3 Shell] (Suspended)
UnixTerminal.initializeTerminal() line: 86
Terminal.setupTerminal() line: 75
Terminal.getTerminal() line: 26
ConsoleReader.<init>(InputStream, Writer, InputStream) line: 174
ConsoleReader.<init>(InputStream, Writer) line: 169
BasicRuntimeShell.run() line: 51
Thread.run() line: 662

2011-07-09

TODO : remove :

> # Copied from cache at Mon Apr 25 22:00:18 CEST 2011
> #  for URI file:/home/jmv/src/eulergui_new/test/catch_allQ.n3
> 
> # in cache since Mon Apr 25 22:00:17 CEST 2011
> #  from file:/home/jmv/src/eulergui_new/test/catch_allQ.n3

java -Xdebug -Xrunjdwp:transport=dt_socket,server=y,suspend=y,address=8000 \
 -jar $HOME/.m2/repository/eulergui/eulergui/1.9-SNAPSHOT/eulergui-1.9-SNAPSHOT-jar-with-dependencies.jar &

http://groups.yahoo.com/group/wwbota/

The Fifth International Conference on Web Reasoning and Rule Systems

http://axel.deri.ie/RR2011/Programme.html

http://www.agi-wiki.org/

http://help.eclipse.org/indigo/index.jsp?topic=%2Forg.eclipse.platform.doc.user%2Ftasks%2Frunning_eclipse.htm

Looking for PHP rules engines

This one looks good enough :

http://www.swindle.net/php-rules/tutorials/getting-started

http://code.google.com/p/phprulez/source/browse/#svn%2Ftrunk : empty project !!!!!!!!!!

2011-07-06

Examine POWL

Powl – Semantic Web Development Plattform

Last source code Update 2010-09-14

Last and only release 2006-11-07

Large models : A pOWL installation with the largest available models in its store:

NCI Oncology (463,878 statements)

Wordnet (473,528 statements)

UNSPSC code (82,500 statements)

Go to the large models ==> Alas !!! Le délai d'attente est dépassé

On the contrary, Web Protege has a demo that works !

2011-07-05

ssh-keygen -t rsa -C "jeanmarc.vanel@gmail.com"
git config --global user.name "Jean-Marc Vanel"
git config --global user.email "jeanmarc.vanel@gmail.com"
git config --global github.user jmvanel
git config --global github.token 45d70027fd748b80d4be0590f373d0b7

Your API token is 45d70027fd748b80d4be0590f373d0b7 — keep it secret! Changing your password will generate a new token.

http://agi-wiki.org/

Ideas :

2011-07-04

Java API for WordNet Searching (JAWS)

http://nlp.stanford.edu/software/lex-parser.shtml#Download The Stanford Parser: A statistical parser

http://manu.sporny.org/2011/false-choice/

Welcome to IPython. I will try to create a personal configuration directory

where you can customize many aspects of IPython's functionality in:

/home/jmv/.ipython

Initializing from configuration: /usr/lib/python2.7/dist-packages/IPython/UserConfig

Successful installation!

Please read the sections 'Initial Configuration' and 'Quick Tips' in the

IPython manual (there are both HTML and PDF versions supplied with the

distribution) to make sure that your system environment is properly configured

to take advantage of IPython's features.

Important note: the configuration system has changed! The old system is

still in place, but its setting may be partly overridden by the settings in

"~/.ipython/ipy_user_conf.py" config file. Please take a look at the file

if some of the new settings bother you.

http://stackoverflow.com/questions/771918/how-do-i-do-word-stemming-or-lemmatization

import nltk
from nltk.stem.wordnet import WordNetLemmatizer
lmtzr = WordNetLemmatizer()
nltk.download()
wordnet
lmtzr.lemmatize('cars')

from nltk.corpus import wordnet as wn

2011-07-02

http://www.codecatalog.net/

/usr/share/dict/american-english

Attempto

This is a good example of ambiguous pronoun reference :

If a bearer has a payment-incident then its order is canceled.

Paraphrase : If a bearer has a n:payment-incident X1 then an order of the n:payment-incident X1 is a:canceled Remedy 1 : BAD : If a bearer B has a payment-incident then the orders of B are canceled.

Paraphrase : If a bearer X1 has a n:payment-incident then at least 2 orders of the bearer X1 are a:canceled .

Remedy 1 : GOOD : If a bearer B has a payment-incident then every order of B is canceled.

Paraphrase : If a bearer X1 has a n:payment-incident then if there is an order X2 of the bearer X1 then the order X2 is a:canceled .

En Français :

Si un porteur B a un incident de paiement, alors chaque commande de B est annulée.

tried in sulci:

http://dev.sulci.dotcloud.com/

EulerGUI dev

Fixes TODO in EulerGUI

2011-07-01

?D list:in ?L

/home/jmv/src/deductions/n3_nojs/person-app.n3p

12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0: Exception in thread "AWT-EventQueue-0" 
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0: java.lang.NullPointerException
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.TextEditor$5.getToolTipText_KB(TextEditor.java:559)
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at eulergui.gui.view.TextEditor$5.getToolTipText(TextEditor.java:544)
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at org.gjt.sp.jedit.textarea.ExtensionManager.getToolTipText(ExtensionManager.java:135)
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at org.gjt.sp.jedit.textarea.TextAreaPainter.getToolTipText(TextAreaPainter.java:663)
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.ToolTipManager$insideTimerAction.actionPerformed(ToolTipManager.java:662)
12:21:20 [AWT-EventQueue-0] [error] AWT-EventQueue-0:  at javax.swing.Timer.fireActionPerformed(Timer.java:291)

2011-06-30

hg clone http://dig.csail.mit.edu/hg/tabulator/
ln -s ~/src/tabulator/  ~/.mozilla/extensions/\{ec8030f7-c20a-464f-9b0e-13a3a9e97384\}

Framenet

The genifer guys

http://blog.automenta.com/ sseehh

Looking for a semantic web simple navigator application that pretty prints RDF with resources as clickable hyperlinks . It could be stand alone or a browser plugin.

Of course it's not as simple as that, because common sens rules have be applied :

hg clone http://dig.csail.mit.edu/hg/tabulator/

RDF data for software projects

At launchpad they have that ( no N3 directly available ) :

<?xml version="1.0" encoding="utf-8"?>
<rdf:RDF xmlns:doaml="http://ns.balbinus.net/doaml#"
         xmlns:foaf="http://xmlns.com/foaf/0.1/"
         xmlns:lp="https://launchpad.net/rdf/launchpad#"
         xmlns:wot="http://xmlns.com/wot/0.1/"
         xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#">
    <lp:Product>
        <lp:specifiedAt rdf:resource="/lena/+rdf"/>
        <lp:name>lena</lp:name>
        <lp:displayName>LENA</lp:displayName>
        <lp:title>LENA - a Fresnel LEns based RDF NAvigator with SPARQL selector support.</lp:title>
        <lp:shortDescription>LENA stands for LEns based NAvigator. A lens represents a particular view onto RDF data and is described by the Fresnel Display Vocabulary. LENA enables viewing RDF data in your web browser, rendered according to the lens descriptions you provide. LENA supports the use of multiple lenses and indicates if they are available for a resource, so that a different view onto the same data is always just one click away!

To write lenses for complex RDF structures created through sophisticated ontology frameworks like COMM or X-COSIM, LENA supports SPARQL selectors. As comprehensive query language for RDF, SPARQL complies to the requirements needed to select from these complex structured RDF graphs. While a Fresnel SPARQL selector is a designated Fresnel selector an implementation did not yet exist. LENA provides an extension to support Fresnel SPARQL selectors that is now integrated into the Simile Fresnel engine.

The data which shall be processed by LENA, can either be put into the provided directory or be accessed through a Sesame HTTP repository. For more information about the usage of LENA see the FAQ. </lp:shortDescription>
        <lp:description></lp:description>
        <lp:creationDate>2008-07-16 13:38:24 UTC</lp:creationDate>
        <lp:homepage rdf:resource="http://isweb.uni-koblenz.de/Research/lena"/>
        
        <lp:series>
            <lp:ProductSeries>
                <lp:specifiedAt
    rdf:resource="/lena/trunk/+rdf"/>
            </lp:ProductSeries>
        </lp:series>
        <lp:owner>
            <foaf:Agent>
                <foaf:Account
    rdf:resource="/~tastentom/+rdf"/>
            </foaf:Agent>
        </lp:owner>
        <lp:status>Active</lp:status>     
    </lp:Product>
</rdf:RDF>

Wordnet 3.0 in RDF

Reading : Wordnet 3.0 in RDF

Explanations here : http://semanticweb.cs.vu.nl/lod/wn30/

Happily it follows the same schema as RDF mapping for WordNet version 2 (http://www.w3.org/TR/wordnet-rdf/#introduction ).

For example this synset :

http://semanticweb.cs.vu.nl/europeana/lod/purl/vocabularies/princeton/wn30/synset-chair-noun-1.rdf

<?xml version='1.0' encoding='UTF-8'?>
<!DOCTYPE rdf:RDF [
    <!ENTITY cornetto 'http://purl.org/vocabularies/cornetto/'>
    <!ENTITY rdf 'http://www.w3.org/1999/02/22-rdf-syntax-ns#'>
    <!ENTITY rdfs 'http://www.w3.org/2000/01/rdf-schema#'>
    <!ENTITY skos 'http://www.w3.org/2004/02/skos/core#'>
    <!ENTITY wn20s 'http://www.w3.org/2006/03/wn/wn20/schema/'>
    <!ENTITY wn30 'http://purl.org/vocabularies/princeton/wn30/'>
    <!ENTITY wnschema 'http://purl.org/vocabularies/princeton/wordnet/schema#'>
    <!ENTITY xsd 'http://www.w3.org/2001/XMLSchema#'>
]>

<rdf:RDF
    xmlns:cornetto="&cornetto;"
    xmlns:rdf="&rdf;"
    xmlns:rdfs="&rdfs;"
    xmlns:skos="&skos;"
    xmlns:wn20s="&wn20s;"
    xmlns:wn30="&wn30;"
    xmlns:wnschema="&wnschema;"
    xmlns:xsd="&xsd;"
>
 ...
<wn20s:NounSynset rdf:about="&wn30;synset-chair-noun-1">
  <wnschema:action rdf:resource="&wn30;synset-seat-verb-2"/>
  <wnschema:beneficiary rdf:resource="&wn30;synset-people-noun-1"/>
  <rdfs:label xml:lang="en-us">chair</rdfs:label>
  <skos:inScheme rdf:resource="&wn30;"/>
  <wn20s:gloss xml:lang="en-us">a seat for one person, with a support for the back; "he put his coat over the back of the chair and sat down"</wn20s:gloss>
  <wn20s:hyponymOf rdf:resource="&wn30;synset-seat-noun-3"/>

  <wn20s:senseLabel xml:lang="en-us">chair</wn20s:senseLabel>
  <wn20s:synsetId rdf:datatype="&xsd;integer">103001627</wn20s:synsetId>
</wn20s:NounSynset>
 ...
<rdf:Description rdf:about="&wn30;synset-chaise_longue-noun-1">
  <wn20s:hyponymOf rdf:resource="&wn30;synset-chair-noun-1"/>
</rdf:Description>

As a bonus it has some equivalents in european languages (chaise_longue is actually english).

One can also use this URI for a Turtle rendition :

http://semanticweb.cs.vu.nl/europeana/lod/purl/vocabularies/princeton/wn30/synset-chair-noun-1.ttl

which contains this triple block :

wn30:synset-chair-noun-1
  a wn20s:NounSynset ;
  wnschema:action wn30:synset-seat-verb-2 ;
  wnschema:beneficiary wn30:synset-people-noun-1 ;
  rdfs:label "chair"@en-us ;
  skos:inScheme <http://purl.org/vocabularies/princeton/wn30/> ;
  wn20s:gloss "a seat for one person, with a support for the back; \"he put his coat   over the back of the chair and sat down\""@en-us ;
  wn20s:hyponymOf wn30:synset-seat-noun-3 ;
  wn20s:senseLabel "chair"@en-us ;
  wn20s:synsetId 103001627 .

2011-06-29

Installing ACEWiki on my laptop

MAIL SENT to Tobias

The OS is Debian 6.0.1 .

cd $HOME/src/acewiki/ 
bzr update
ant createwebapps
ln -s $HOME/src/ape/ape.exe .
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:/usr/lib -jar jetty-runner*.jar acewiki.war &

ALAS !!!

java: symbol lookup error: /usr/lib/swi-prolog/lib/amd64/libjpl.so: undefined symbol: PL_is_initialised

Indeed, this symbol is undefined in libjpl.so, and defined in libswipl.a :

objdump --syms /usr/lib/swi-prolog/lib/amd64/libswipl.a | grep PL_is_initialised
0000000000000000 g     F .text  000000000000003b PL_is_initialised

The remedy was to add /usr/lib/libswipl.so in LD_PRELOAD .

export LD_PRELOAD=$PLBASE/lib/$PLARCH/libjpl.so:/usr/lib/libswipl.so

It works also on Ubuntu 11.04 ; you have to add package swi-prolog .

Links: ozma, maven-scala-plugin, Actor_model , OpenCog

http://scala-tools.org/mvnsites/maven-scala-plugin/usage.html

http://en.wikipedia.org/wiki/Actor_model

https://github.com/sjrd/ozma

http://wiki.opencog.org/w/OpenCog_Technical_Information

opencog/server/cogserver
telnet localhost 17001

TODO

- in person-app.n3p , clicking in input field adds many new fields ( seems to happen with cached rule base )

- mail to Attempto

- enhance generated forms: ComboBox, cardinality > 1

- add ACE input in EulerGUI

- rule :defaultValue in generic_gui_projection-rules.n3

- Generic mechanism in N3/Drools engine for a property with cardinality one

2011-06-28

SEARCH:

NLP datasets WORD forms plural , conjugation for verbs

http://aclweb.org/aclwiki/index.php?title=Main_Page

http://aclweb.org/aclwiki/index.php?title=Resources_for_English

git clone git://github.com/automenta/jcog

http://wiki.opencog.org/w/Building_OpenCog_on_Ubuntu#Get_the_source_code

and then

http://wiki.opencog.org/w/Building_OpenCog

What's missing the most in Attempto

I'm thinking of what's missing in Attempto:

We provide expertise, training, consulting and technology transfer on three key technologies:

Résumé

Mr. Bryan B. Thompson is the co-founder and Chief Scientist of SYSTAP, LLC. His technical background includes expertise in cloud computing; the semantic web; web architecture; relational, object, and RDF database architectures; knowledge management and collaboration; artificial intelligence and connectionist models; natural language processing; metrics, scalability studies, benchmarks and performance tuning; decision support systems; and usability design. Significant developments include:

•The creation of bigdata®, an open source distributed database. Bigdata® is commercial licensed through OEMs and is used within in the intelligence community, telecommunications industry, managed storage networks, heath care, bioinformatics, etc.;

•The synthesis of a cognitive model of human reasoning about risk and uncertainty (“Recognition / Metacognition theory”: Cohen, Freeman & Thompson, 1998) with a connectionist model of human reflexive inference (“Shruti”: Shastri & Ajjanagadde 1993; Shastri, 1996) that provides a cognitive and computational explanation and model of expertise and critical thinking behaviors;

•Novel extensions to the IBIS architecture include support for reasoning with positive and negative evidence, support for planning, and support for engaging individuals in critical thinking dialogs that identify the sources of uncertainty in their expressed arguments.

•A class of optimal incremental planners (Thompson and Cohen, 1999) and their application to sophisticated knowledge models within an architecture for a connectionist reasoner (“Shruti”; Shastri, http://www.icsi.berkeley.edu/~shastri/shruti);

•An adaptive control methodology known as Action Dependent Heuristic Dynamic Programming (Lukes, Thompson and Werbos, Jan 1990). This method was first and most extensively published by Watkins as Q-Learning in his doctoral thesis (Watkins, 1989).

Compétences

semantic web

cloud computing

database engine design

cognitive science

AI and connectionist models

adaptive control systems

2011-06-27

Looking for several tools and libraries in Oz .

Mozart oz "semantic web"

On #oz IRC

<jmvanel_> Hi

<jmvanel_> I get comile erroes "unification error in needed statement" for simple examples like Lengh of a list in Van Roy 's book 's .

<jmvanel_> I suspect something wrong in my installation

I forgot the declare keyword at the begining !

I'm also reading about ozma, as someone here suggested .

<jmvanel_> And I ordered Van Roy's book in french .

The ozma thesis by Sébastien Doeraene actually allows to learn in parallel ;) Scala and Oz .

This was a little exercise to correct the syntax:

declare
fun {Learn Language} Language end
Knowledge = [thread
{Learn 'OZ'} end
     thread {Learn 'Scala'} end ]

{Browse Knowledge}

I found a bug in the OPI : when feeding region { Send P 1 ; missing }, it says ------- accepted and nothing happens

I can run demo/Bounce.oz like this : ozc -x Bounce.oz ; ./Bounc

but I don't know how to run it in emacs.

I like this sentence:

Hence, introducing the thread has not changed the global effect of the program.

737 746 Van Roy 156 174

Peter Van Roy 's home page : http://www.info.ucl.ac.be/~pvr/cvvanroy.html

COMMITED

- SourceFilesManagement : the proofExplanation JCheckBox was not set from the .n3p project

- for inner text panel, use global N3 Font from EulerGUI.instance().getN3Font()

- upgrade to Euler 2011-07-29

SNAPSHOT UPLOADED

2011-06-25

Attempto sentences : calls

Every call C is urgent or C is important. KO!!!!!

Paraphrase

If there is a call X1 then the call X1 is urgent or something is important.

Further simplifications:

If there is a call X1 then the call X1 is urgent or X1 is important. OK!!!!!

If there is a call X1 then the call X1 is urgent or is important. OK!!!!!

If there is a call then the call is urgent or is important. OK!!!!!

If there is a call then the call is urgent or is not urgent .

Paraphrase

If there is a call X1 then the call X1 is urgent or it is false that the call X1 is urgent.

Every call has an origin.

Test with Yap 's format built-in

WORKS:

format( "aaaaaabbb", jj ).

format("~s ~n", ["aaaaaabbb"] ).

format("~k --- ~n after newline", aaaaaa(b,c) ).

format("~a", aaaaaa ).

error(existence_error(procedure,format_to_chars/3),[context(user:format_to_chars([100,101,99,105,109,97,108,32],[],_134277),user:main/0)|local_sp(context(user:format_to_chars([100,101,99,105,109,97,108,32],[],_134277),user:main/0),269967868,[],[])])

Cause:

java.lang.RuntimeException: ** ERROR ** sem ** error(existence_error(procedure,format_to_chars/3),[context(user:format_to_chars(

[84,104,101,32,112,114,111,111,102,32,105,115,32,97,32,99,111,110,106,117,110,99,116,105,111,110,32,111,102,32,102,111,

108,108,111,119,105,110,103,32,99,111,109,112,111,110,101,110,116,115,58,60,98,114,47,62,10,9],

[<http://localhost/var#e1>],_146293),user:cn/1)|local_sp(context(user:format_to_chars(

[84,104,101,32,112,114,111,111,102,32,105,115,32,97,32,99,111,110,106,117,110,99,116,105,111,110,32,111,102,32,102,111,

108,108,111,119,105,110,103,32,99,111,109,112,111,110,101,110,116,115,58,60,98,114,47,62,10,9],

[<http://localhost/var#e1>],_146293),user:cn/1),270093164,[],[])])

euler.Process.execute(Process.java:57)

COMMITED

FIXES:

DroolsTripleHandler : avoid error and stack trace for unimplemented Euler builtins, eg e:format

ProjectLegacy : for proofExplanation and postProcessingActiveproject file roundtrip was broken

java.lang.NumberFormatException: For input string: "The proof is a conjunction of following components:<br/>"
        at sun.misc.FloatingDecimal.readJavaFormatString(FloatingDecimal.java:1222)
        at java.lang.Double.parseDouble(Double.java:510)
        at n3_project.helpers.Triple.n3ValueToNumeric(Triple.java:374)
        at eulergui.inference.drools.impl.DroolsTripleHandler.droolsValueToNumericOperand(DroolsTripleHandler.java:638)
        at eulergui.inference.drools.impl.DroolsTripleHandler.acceptAntecedentSubjectList(DroolsTripleHandler.java:1644)
        at eulergui.inference.drools.impl.DroolsTripleHandler.acceptAntecedentSubjectList(DroolsTripleHandler.java:1489)
        at eulergui.drools_engine.ParserLink.visitAllURI(ParserLink.java:695)
        at eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:287)
        at eulergui.inference.drools.impl.N3SourcetoDrools.translate(N3SourcetoDrools.java:259)
        at eulergui.inference.drools.impl.N3DroolsEngineFacade.translate(N3DroolsEngineFacade.java:90)
        at eulergui.project.Project.translateToDrools(Project.java:953)
        at eulergui.gui.controller.N3ConversionRefesher.updateKB(N3ConversionRefesher.java:148)
        at eulergui.gui.controller.N3ConversionRefesher.n3SourceChanged(N3ConversionRefesher.java:47)
        at eulergui.project.ProjectChangeSupport.fireN3SourceChanged(ProjectChangeSupport.java:145)
        at eulergui.project.Project.fireN3SourceChanged(Project.java:1383)
        at eulergui.infrastructure.URIModificationChecker.checkN3Source(URIModificationChecker.java:90)
        at eulergui.infrastructure.URIModificationChecker.run(URIModificationChecker.java:62)

2011-06-23

java.lang.NoSuchMethodException: <unbound>=ProjectLegacy.setProofExplanation(Boolean);

at java.beans.Statement.invokeInternal(Statement.java:260)

java.io.IOException: Too many open files

at java.io.UnixFileSystem.createFileExclusively(Native Method)

at java.io.File.checkAndCreate(File.java:1704)

at java.io.File.createTempFile(File.java:1792)

at java.io.File.createTempFile(File.java:1828)

at n3_project.IOManager.getTemporaryFileWithSuffix(IOManager.java:113)

My .vimrc

set nu
syntax on
set hlsearch
set incsearch
" pasted from Mercury distrib README
filetype on
filetype plugin on
syntax enable

this project : http://openmind.media.mit.edu/ I don't know to what extent it's reusable , but the idea is nice.

http://www.google.com/search?q=task+manager+linux

http://www.automenta.com/ == sseehh of genifer

TODO read "Logic Programming" in Tutorial of Oz :

http://www.mozart-oz.org/documentation/tutorial/node12.html#chapter.lp

2011-06-22

compare Oz with Mercury

Dialog on #oz

If I compare Oz with Mercury, I note:

Mozart has a problem with porting to 64-bit, see "Mozart Project Ideas"

Oz seems to be written in C++, not in Oz :( (while Mercury is written in Mercury)

Oz is not running on a JVM

Functionality "Dataflow concurrency" is very interesting. I know of no language that has it .

Oz started from a more global thought , whereas Mercury started as adding functional features to Prolog, while removing the Prolog hacks like cut, etc

<jmvanel> I'm glad with the book by Van Roy, the Oz tutorail, and other material, but I have the usual questions:

<jmvanel> list of real projects in productions using Oz ; roadmap for new features

<jmvanel> another question is : is there a library for SemanticeWeb ?

<jmvanel> in case ... of , why is used [] as a separator between patterns ? Normally [] represents the empty list as in Prolog ...

Dialog on #Genifer

jmvanel> From experience, maintaining an IDE GUI like EulerGUI, with its extensive non-regression tests, even if it's time consuming, is nice because there is something that works, and continues to work while features grow .

<jmvanel> Of course features grow at a slow pace because the code quality is too low as I wrote .

<jmvanel> Also I think it's important to leverage on Semantic Web standards, even though it's just about data portability .

<_KY_> Semantic web has its limitations

<jmvanel> It also goes a good way in the direction of concepts portability .

<jmvanel> sure

<_KY_> The logic used is sometimes not expressive enough

<jmvanel> sure

<_KY_> I think what's critical is that the entire system must be capable of evolving

<jmvanel> they took the limitations from DL theory

From experience, maintaining an IDE GUI like EulerGUI, with its extensive non-regression tests, even if it's time consuming, is nice because there is something that works, and continues to work while features grow .

Nice general practical notes on Java

http://www.leepoint.net/notes-java/

Oz - Mozart

I tried this nice Prolog equivalent in Mozart :

proc {Append ?A ?B ?C}
  choice
    A=nil B=C
  [] As Cs X in
    A=X|As C=X|Cs {Append As B Cs}
  end
end

{Browse {SolveAll
  proc {$ S} X#Y=S in {Append X Y [1 2 3]} end}}

But it answers :

variable SolveAll not introduced

I have to work the basic syntax ...

The Mozart Browser "allows you to see the evolution of the instantiation of a term as concurrent computations (threads) proceed and add more information".

DOES NOT WORK:

mport Solve

proc {Append ?A ?B ?C}
choice
A=nil B=C
[] As Cs X in
A=X|As C=X|Cs {Append As B Cs}
end
end

{Browse {SolveAll
proc {$ S} X#Y=S in {Append X Y [1 2 3]} end}}

Links

http://www.mozart-oz.org/documentation/

http://www.info.ucl.ac.be/~pvr/ds/mitbook.html


semantic task manager with rules

Tweet

I dream of a semantic task manager with rules. Something that I could create with projects #EulerGUI and #Déductions.

http://www.google.com/search?client=ubuntu&channel=fs&q=emantic+task+manager+with+rules&ie=utf-8&oe=utf-8

Following the RDF annotation principle, if URI's are available for

2011-06-21

http://gephi.org/users/install/#linux

Oz - Mozart

About the enhanced Pascal program, FastTriangle, in the book by Van Roy, is there a compiler option to automatically save the duplicated function call into a variable, or issue a warning ?

The original Pascal program,

fun {ShiftLeft L}
  case L of H|T then
    H|{ShiftLeft T}
  else [0] end
end

The FastPascal enhanced Pascal program:

fun {FastPascal N}
  if N==1 then [1]
  else L in
    L={FastPascal N-1}
    {AddList {ShiftLeft L} {ShiftRight L}}
  end
end

2011-06-20

SNAPSHOT uploaded at 15:20 .

TODO

show a caret in N3 Shell GUI

Generic mechanism in N3/Drools engine for a property with cardinality one

TODO

There should be a generic mechanism in N3/Drools engine for a property with cardinality one. If the property would be a Java Property, it would be automatic. The second rule below is not a good mechanism, because app:currentUserLanguage triples are never removed. I see these solutions:

  1. use a timestamp to keep only the most recent triple, possibly a Drools fusion timestamp
  2. for properties that should be "transferred" to the Java world, just retract the triple when "transferring" to the Java world (here in the first rule)
  3. use a Drools query listener ??? (cf 4.3.3.2.2. Live Querries)

{ # when a new language is asserted, apply it
  app:currentApplication app:userLanguage ?LANG .
  ?GUI a java:n3_project-ProjectGUI .
} => {
  ?GUI javap:language ?LANG .
  app:currentApplication app:currentUserLanguage ?LANG .
  _:d eg:trace ( "userLanguage: called javap:language " ?GUI ?LANG  ).
}.

{ # when a new language is asserted, and it is different from the old one, delete the old one
  # TODO should be a generic mechanism for a property with cardinality one
  # maybe keep the javap: properties asserted in the KB
  app:currentApplication app:currentUserLanguage ?CLANG .
  app:currentApplication app:userLanguage ?LANG .
  ?LANG log:notEqual ?CLANG .
} => {
  _:d kb:retract ( app:currentApplication app:userLanguage ?LANG ) .
  _:d eg:trace ( "retracted app:currentApplication app:userLanguage" ?LANG  ).
}.

COMMITED

add N3 shell user input to the project as <project-name>-shell-history.n3

http://code.google.com/p/genifer/

Plugin to simplify boolean expressions

static code analysis

in N3SourcetoDrools.translate() , rdfModel waits if necessary that N3 updating and parsing finishes

this was breaking test TestEulerGUIInputs

/** test for a plugin to simplify boolean expressions or embedded if blocks */
private void toBeRemoved( boolean b1, boolean b2 ) throws MalformedURLException, ParserException,
URISyntaxException {
if (b1) {
eventLoop();
} else if (!b1 && b2) {
initialize();
}
}

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:349)
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:911)
eulergui.project.Project.translateN32Drools(Project.java:879)
eulergui.project.Project.prepareDrools(Project.java:843)
eulergui.gui.controller.ApplicationKB.<init>(ApplicationKB.java:98)
eulergui.gui.controller.ApplicationKB.instance(ApplicationKB.java:76)
Cause:
java.lang.NullPointerException
eulergui.project.N3Source.manageParseN3(N3Source.java:365)
eulergui.project.N3Source.update(N3Source.java:349)
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:911)
eulergui.project.Project.translateN32Drools(Project.java:879)
eulergui.project.Project.prepareDrools(Project.java:843)
eulergui.gui.controller.ApplicationKB.<init>(ApplicationKB.java:98)
eulergui.gui.controller.ApplicationKB.instance(ApplicationKB.java:76)

http://www.leepoint.net/notes-java/GUI-lowlevel/keyboard/keyboard.html

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")

2011-06-11

AgentSpeak(L): BDI Agents speak out in a logical computable language

2011-06-10

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

2011-06-09

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

Trying Kawa GUI

Kawa is a kind of Scheme in Java; Scheme is itself is a kind of Lisp.

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!")

2011-05-31

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

2011-05-30

COMMIT

class EulerGUI : fixed excessive log for getLogger("cache")

2011-05-29

Twitted by Ontologiae : Jason, a AgentSpeak interpreter (BDI oriented language) uses a Description Logic Reasoner

http://lambda-the-ultimate.org/node/3003

Enforce OWL max Cardinality with rules

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
              ]

Looking for testers

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" .

2011-05-28

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:

  1. user saves N3 preference file
  2. through URIModificationChecker's loop and N3ConversionRefesher, an n3SourceChanged() event is initiated on the internal KB (ApplicationKB), which re-parses the preference N3 file ~/.eulergui/preferences.n3 which replaces the old one in the KB
  3. the new triple preference :
    app:currentApplication app:userLanguage "de" .

    replaces the old one

  4. because ApplicationKB is a project listener, fireAllRules() is called through n3SourceChanged()

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

2011-05-27

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 .

Looking for testers on SWIG IRC

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

2011-05-26

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

ACE examples: concrete material

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 :

  1. if one defines a new concrete type, one must define at least one cement and one granulate
  2. if we admit the CWA, a formula involving a concrete containing a cement and a granulate is valid

Remarks:

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 :(

2011-05-25

http://bellard.org/jslinux/

TODO COMMIT

- Added toString() in FormulaMutableImpl.java

DISPLAY=localhost:0.0 gvim -c 'a|bisous !!!!!!!!!!!!!!!!!.'
E233: ouverture du display impossible

EulerGUI : fixed the build from sources

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

Issue with Maven build: class from dependency chosen

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 .

2011-05-24

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)

2011-05-23

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.

eclipse questions

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 ?

2011-05-21

According to stackoverflow.com , findbugs seems the best before PMD and Checkstyle ; so I ran :

mvn findbugs:gui 

http://findbugs.sourceforge.net/contributing.html

2011-05-19

Running EulerGUI test suite on windows

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
------------

2011-05-18

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

Tested JLine with remote debugger

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

2011-05-17

S.M.A.R.T.

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

EulerGUI dev.

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)

2011-05-16

Tested JLine

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

Tested Joafip on Linux

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

2011-05-15

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

Troubles with Ubuntu

<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

Troubles with npviewer

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 !?!

2011-05-14

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)

2011-05-13

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)

2011-05-12

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)

Added translations of OWL subclass assertions to N3 rules in EulerGUI

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

2011-05-11

gnome-session-save --kill

Heat problems!

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 !!!!!!!!!!!

EulerGUI regressions fixed

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

OWL and N3 rules

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.
}.

Added translations of OWL subclass assertions to N3 rules in EulerGUI

COMITTED in Déductions:

add owl-subclass-assertions-to-rules.n3 to swrl-n3-rules.n3p

TESTED wih examples/koala.n3p

Tooltips in EulerGUI

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)

2011-05-10

Time comparisons with EulerGUI

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

EulerGUI multi-thread fixes

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

2011-05-09

- 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.

Real estate; delegate computations to Java in N3 rule engine

Suppose an ontology like this:

AppartmentOrHouse <>--- Room <>--- ClosedCurve <>--- Point

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:

  1. how to ease access to the RDF data for the Java code ?
  2. how to give the N3 rule engine access to the results of the Java code ?

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. }.

2011-05-08

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

2011-05-07

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 )



2011-05-06

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)

2011-05-05

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

2011-05-04

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

2011-05-02

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 )

2011-05-01

java.lang.RuntimeException: ** ERROR ** file:///home/jmv/src/eulergui_new/examples/dl-safe_small.owl ** invalid_document(after_line(46))

2011-04-30

EulerGUI : N3 parser called several times

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

2011-04-29

[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

EulerGUI : timeout for N3 sources from Internet

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"

2011-04-28

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

EulerGUI : cache for N3 sources from Internet

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

2011-04-27

Trying EclEmma 1.5.2 Java Code Coverage for Eclipse

http://www.eclemma.org/

EulerGUI : cache for N3 sources from Internet

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

2011-04-22

Pave the way for a cache for N3 sources from Internet

This is necessary for doing demos without Internet :) .

2011-04-21

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 .

2011-04-20

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

2011-04-19

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

2011-04-18

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)

2011-04-17

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)

2011-04-16

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>.
}

2011-04-15

EulerGUI's Drools N3 engine

- 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

2011-04-09

EulerGUI's Drools N3 engine

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

2011-04-04

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)

2011-04-03

env LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so skype

Regression : focus lost processing is lost !

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)

2011-04-02

- 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

2011-04-01

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

2011-04-31

"Ext JS is the developer's choice for building powerful desktop web applications using JavaScript and web standards."

http://www.sencha.com/products/extjs/

EulerGUI's Drools N3 engine

TODO

FIX: class GUIKBAdapter : call to fireAllRules() was missing in forwardGUIEventsToKBEmbed()

Variables in Drools N3 engine

Different facets of variables in Drools N3 engine

A possible design
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 )

Try to match a Java property in antecedent

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

2011-04-30

gui_generic.owl ontology generated by rule-documentor : WIP

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/

In some cases a prefix is not available to the N3 searches made by the editor tooltips

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

2011-04-29

Added http://prefix.cc/kb

Drools N3 engine : try to match a Java AWT FocusEvent

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" )

2011-04-27

For motivation and explanation, see <http://www.w3.org/DesignIssues/Diff>

Attempt to an N3 Comparator

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> [] .

Regression : focus lost processing is lost !

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()

Documenting eg: and kb: builtins

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

New N3 project file : tested

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 !

Tested mixed business-Java rules

COMMIT in déductions :

n3_nojs/person-app.n3 : add callback in N3 that adds a label when user input is "JMV"

TODO :

2011-04-26

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/

Still worries with the test suite

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

2 tests run for a long time

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)

EulerGUI TODO: redesign threads for a quicker application start

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.

2011-04-25

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

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)

2011-04-24

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

2011-04-23

New batch runner

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 )

Refactoring N3 Swing rule base

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 } .

2011-04-22

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)

2011-04-21

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/

A major achievement

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)}

2011-04-20

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)

Leveraging the new embedded Java objects for a application

The application domain

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/

The user interaction piloted by rules

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 :

Data manipulations

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"):

  1. add RDF statement ,
  2. modify RDF statement,
  3. remove RDF statement,
  4. create a new RDF identifier with its type.

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.
}. 

Design

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:

  1. having input fields that do not necessary coincide with the domain ontologies
  2. verification of user input,
  3. different and specific widgets.

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 .

Trouble with RDF conformance in the Swing rule base

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.

2011-04-19

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 .
} .

EulerGUI + embedded Java objects demo

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

2011-04-18

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 )

2011-04-16

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)

Testing embedded Java objects

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

2011-04-15

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)

Testing embedded Java objects

_: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 !

Still random errors in test suite

[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.

Announce Release EulerGUI 1.8

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

2011-04-14

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/

Maven trick: display-dependency-updates-mojo

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

Release EulerGUI 1.8

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]

2011-04-13

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

2011-04-12

grep -l X11.XException target/surefire-reports/* | grep -v output.txt | grep -v '.xml'

Deployment of an EulerGUI runtime

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 ).

  1. Java platform : "pure" expert system, not stateful : use Euler engine jar ( < 8Mb ) + EG jar ( < 1Mb )
  2. Java platform : stateful Knowledge Base with Drools : drools-core (< 2.2 Mb ) + EG jar ( < 1Mb ) + compiled rule base in cache
  3. any platform supporting Yap prolog engine : call a Yap run with a system exec call or the Yap C API, on a set of N3 data and rules representing an EulerGUI project (one N3 data file has to be populated prior to calling Yap, and the result has to be parsed, which is easy with --no-qnames Euler option)
  4. any platform supporting Python : use Python N3 engines : CWM or FuXi
  5. any platform : use EulerGUI web server (work in progress ) , or Euler server based on URL-encoding an argument string for stateless processing

Now for database access here are the options:

  1. use existing SPARQL source in EulerGUI (not sure if currently the query is re-done at every inference launch), and a choice of SPARQL server (Jena TDB or SDB, Virtuoso, Redland, Sesame, etc )
  2. use one of the relational to RDF bridges : D2R. DataMaster, etc

And for user interface generation here are the options. This is very promising, but it's work in progress.

  1. there is a nice OWL ==> Swing form generator, that is working at runtime with the Drools engine, but it is not feature complete;

    we are finishing the new architecture for embedding Java objects in KB, so that they are activable by rules.

  2. of course one can reuse an existing framework for form generation, or an existing code base
  3. we are working on a code generator for several GUI platforms : Swing , GWT, TCL/TK, HTML+PHP ; leveraging on an ontology of atomic user interactions (see in French the thread applications exemples ) , and on Euler capabilities to produce formatted strings ( builtin e:format )

Fixed BasicRuntime (alias N3 shell, N3 command line)

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 .

2011-04-11

http://main.csregistry.org/tiki-index.php?page=my+account&bl=y

I'll do the release this week end , no hurry ...

TODO

Testing the N3 shell ( alias N3 command line )

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 .

2011-04-10

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)

Smart behavior when network is down and up again

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

2011-04-09

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 .

Documenting a rule base with EulerGUI

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 !

RDF graph for Simulation data

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 .

2011-04-08

Uploaded an EulerGUI snapshot at Révision 2206

2011-04-07

http://java.dzone.com/articles/upgrading-maven-3

doc : https://cwiki.apache.org/MAVEN/maven-3x-compatibility-notes.html

EulerGUI developpement

TODO

Investigating random errors

In TestRulesForUserEvents

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 Test*Generation*

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)

Fixed TestDroolsQuery , after regression due to literal processing

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

2011-04-06

Links

http://botego.com/howdoesitwork.htm

http://www.nltk.org/getting-started

prymas - Question and Answering, Knowledge Management, Information Retrieval blog

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

2011-04-05

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".

EulerGUI developpement

temporarily unactivate TestEulerGUIInputs . testXMLInputGloze() , pending correction of N3 parser's NPE regression

Test failing : TestDroolsQuery

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)

Catch error in getTimeStamp

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)

Testing embedded Java objects

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 ?

New error in parser, after recent correction for triple order

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

2011-04-04

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

2011-04-02

Disorder in the triples out of parser N3

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 :

{
?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 ) .
} .

The stack :


2011-02-26

EulerGUI : fix bug in base URI in parser

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.

N3 format for EulerGUI project

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 .

2011-02-25

Due to a bad update on W$ on Samsung phones, the phone does not boot anymore, and costumers are obliged to exchange the phone !

N3 format for EulerGUI project using DeferredPropertyAssignment: degugging

Subprojects

Pave the way for Subprojects with N3 format for EulerGUI project: harmonize properties Uri and Location in class Project.

isActivated

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:

  1. add in class N3Source a new method getURIAsN3, with this antecedent :
    ?N3S a java:eulergui-project-N3Source .
    ?N3S java:URIAsN3 ?IMPORT .
    ?IMPORT :isActivated ?ACTIV .
  2. use string:concatenation (not implemented at the moment)
  3. change 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

2011-02-24

N3 format for EulerGUI project using DeferredPropertyAssignment

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

2011-02-22

N3 + Java cohabitation

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.

2011-02-16

[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9 minutes 42 seconds
[INFO] Finished at: Wed Feb 16 19:30:57 CET 2011

EulerGUI : enhance new Java N3 mapping

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

2011-02-14

http://identi.ca/jmvanel/foaf

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:

2011-02-12

:m a nmo:EMail .

After questions by <rszeno>

FAQ on Déductions form generator

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).

2011-02-11

79.92.90.238

http://help.eclipse.org/help33/index.jsp?topic=/org.eclipse.platform.doc.user/tasks/running_eclipse.htm

EulerGUI : dans la merde avec les tests et les threads

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.

EulerGUI : problem with search in command line

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

2011-02-10

NEPOMUK Message Ontology

http://www.semanticdesktop.org/ontologies/nmo/

http://vocab.deri.ie/

PIMO - Personal Information Model

http://www.semanticdesktop.org/ontologies/2007/11/01/pimo#

EulerGUI TODO

Rule examples to test with the new N3 Command Line

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.

EulerGUI tests

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

2011-02-07

[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"

Validate an EulerGUI project

Rules:

2011-02-05

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

The most desirable features for EG

We basically have the bricks for that.

2011-02-04

http://whatismyipaddress.com/

Solved problem with video on Skype on Ubuntu

env LD_PRELOAD=/usr/lib32/libv4l/v4l1compat.so  skype

http://developer.skype.com/LinuxSkype

http://doc.ubuntu-fr.org/skype

Tackling the POM ==> DOAP conversion

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

EulerGUI : commited new button to stop inference engines

Thanks to Cyril !

[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 16 minutes 20 seconds

2011-02-03

EulerGUI cleaning

ParserLink objects were not reusable twice ==> TestImportSwrl was broken when binding new Reasoner4J inference engine

substitute viewvc with svnroot in examples/

Coping with Sourceforge ViewVC server outage

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!

2011-02-02

Back from south India !

Sourceforge server has problems: ViewVC

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/

Installing Ubuntu on EeePC Asus

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.

2011-01-10

<jmv_> We'll talk of a possible partnership wth logilab.fr , a Parisian Service Company in SemWeb , OSS, and scientific soft .

OWL -> N3 rules translation

Every man likes at least 3 cars .

In OWL parlance:

man SubClassOf like min 3 car

There are 2 ways of translating with rules:

  1. infer false model when a man X likes less than 3 cars
  2. infer the existence of 3 cars liked by a man X

Well, for point 1, one must quit Open World Assumption.

For point 2, blank nodes will be added.

AceWiki

Problem accessing /acewiki/. Reason:

 com/thoughtworks/xstream/io/HierarchicalStreamDriver

Caused by:

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 

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) 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) 

Powered by Jetty:/

Rifle

Subscribed to mailing list .

https://sourceforge.net/apps/mediawiki/rifle/

EulerGUI

Features

compliments

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.

2011-01-09

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

2011-01-08

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

OWL -> N3 rules translation

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

2011-01-07

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

OWL -> N3 rules translation

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.

2011-01-06

find . -maxdepth 1 -name '*n3' -size 0 -exec ls -l '{}' \;
find . -maxdepth 1 -name '*n3' -size 0 -exec rm '{}' \; 

Grips with ACE View

Trying rules owl-subclass-assertions-to-rules.n3 with wine.rdf

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

2011-01-04

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

Factoring common part in N3 rule

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.

EulerGUI release 1.7.1

[INFO] BUILD SUCCESSFUL

[INFO] ------------------------------------------------------------------------

[INFO] Total time: 12 minutes 28 seconds

2011-01-03

http://www.agfa.com/w3c/Talks/2004/03swig/slide4-0.html

Copy and paste in the X-Window way in OpenOffice

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

End user tools for collaborative SW developements

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/

2011-01-02

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)

EulerGUI TODO

Explore possible model feature in Euler

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.

2011-01-01

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)

Splitting EulerGUI into several Maven sub-projects

qu'y aurait-il pour vous faire plaisir ?

<lcpvrr> ha 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 :

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)

2010-12-26

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

Thinking declaratively

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).

2010-12-25

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

2010-12-22

announce on jEdit

internship: rules and queries on OWL models

jEdit completion

EulerGUI TODO

Bug in EulerGUI release!

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 )

EulerGUI release!

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

Links

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

2010-12-21

# 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 .

Announces for EulerGUI 1.7 and 1.7.1

semantic-web@w3.org

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

Protégé

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.

Jena

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.

Drools

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

FuXi

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

Pellet

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

WebSemantique.org

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

My corrections to DesignIssues/N3Logic by Tim Berners-Lee

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: 2012-03-09$

Today, http://www.w3.org/DesignIssues/N3Logic.html says:

Tim Berners-Lee, August 2005

$Revision: 1.19 $ of $Date: 2012-03-09$

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: 2012-03-09$</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: 2012-03-09$</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: 2012-03-09$</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/&nbsp;&nbsp;/ \&nbsp;/g

http://www.w3.org/DesignIssues/Notation3

2010-12-20

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

2010-12-18

http://reasoner4j.svn.sourceforge.net/viewvc/reasoner4j/

EulerGUI

TODO before release

2010-12-17

EulerGUI

New popup messages for bad URL in N3 source, open project, and open sub-project

TODO

2010-12-16

RDF vocab for rules

<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 ) .
}

Future tweets

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

2010-12-15

refactoring : put all of class EulerBuiltins into class MathBuiltins

RIF_In_RDF

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.


EulerGUI

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

Drools : how to have GUI automatically updated by the KB

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.

Ontology for Unit and Measurement

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

2010-12-10

EulerGUI

- 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

2010-12-09

ProjectFactory : Remove unnecessary call to prepareN3Sources()

Tests run: 133, Failures: 0, Errors: 0, Skipped: 0

BUILD SUCCESSFUL

[INFO] Total time: 12 minutes 28 seconds

2010-12-08

EulerGUI

TODO

Messages for N3 errors : getting them in all cases

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

Test and clean

[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

2010-12-07

EulerGUI test and clean

TODO

TODO : Remove the preparations during and after reading by XMLDecoder

GOALS

ISSUES


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.

Struggle with form generation gone wild

COMITTED

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
]

2010-12-04

Expressing counting, maximum, sums in ACE

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"

EulerGUI testing

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

2010-12-03

EulerGUI testing

TODO

Déductions sample "pricing"

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

EulerGUI testing

Still problems with form generation and Drools' Insert Logical

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:

2010-12-02

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;"

EulerGUI testing

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> .

Problem with N3 sources modification Checker

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

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)

2010-12-01

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

French localization of eclipse

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.

EulerGUI testing

- FIXED Infinite loops in Drools inference: hard-coded useInsertLogical = true and false was remaining

in N3SourceToDrools and N3SourceUpdater

- added a missing I18 string

Infinite loop with acceleration_form.n3p

#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

REGRESSION: N3 sources' URI broken for a Web subproject of a file project

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

2010-11-30

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/

EulerGUI development

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()

Trying RDFAuthor

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/

2010-11-29

http://www.ip-adress.com/

Trying RDF download with HTTP header accept:application/rdf+xml

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.

EulerGUI development

TODO

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

2010-11-28

EulerGUI development

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 }

Protégé 4.1 feedback

2010-11-26

Semantic Web training finished !!!!!!!!!

EulerGUI development

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

2010-11-25

ARQ - Basic Federated SPARQL Query

EulerGUI development

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

2010-11-24

Following "Give yourself a URI" , I made my URI: http://jmvanel.free.fr/jmv.rdf#me .

Making URI's for the most common things

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 accepted into the Apache Incubator

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

2010-11-23

EulerGUI development

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.

2010-11-22

./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)
   )
)

Using ATTEMPTO for speficying rules for RDF graph transforms

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 :) .

EulerGUI development

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

Generic file and URL modification checking service

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.

2010-11-21

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

EulerGUI development

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

Trying DBPedia SPARQL queries

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.

2010-11-19

EulerGUI dev

- 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

2010-11-16

EulerGUI dev

DONE

The actual SPARQL query is done when opening the editor for the result or updating the query

2010-11-15

Raw 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).

Sketch of a roadmap

The Déductions stuff

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.

The CNL stuff

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

EulerGUI dev

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

2010-11-14

EulerGUI TODO

2010-11-10

EulerGUI

SPARQL queries:

TODO: redo the SPARQL query when the SPARQL source file is updated (saved or loaded)

Tooltips in N3 editor

- 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

2010-11-09

http://stackoverflow.com/questions/76327/how-can-i-prevent-java-from-creating-hsperfdata-files

EulerGUI : tooltips in N3 editor

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

The Jena object model for RDF and inference

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.

Comparison with EulerGUI model

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:

Modularizing the inference engines support in EulerGUI

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:

2010-11-08

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 :(

EulerGUI

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

Work on updating translated stuff when files are changed

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

Solved broken tests

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

Last revision before moving refectoring branch to trunk

~/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

Explanation of the OWL inconsistency

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)

2010-11-07

REGRESSION:

- populating the N3 from SPARQL was broken

- proposal for API change in N3Source : see mailing list deuctions-fr

- NOT tested : dbpedia is down

2010-11-06

Cleaned EulerGUI's Project class

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

2010-11-05

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}.

2010-11-04

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()

2010-11-03

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.

Register-a-User-Name-on-Freenode

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

Drools: 5.1.1; bug with loading from serialized

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)

EulerGUI

Enhance tooltips in editor, backed by N3 searches

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

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)

2010-11-02

AbstractRuleBase.pkgs

Map<Rule, BaseNode[]>

ReteooBuilder.rules

ReteooBuilder line 235

file:/home/jmv/src/eulergui_new/examples/swrl-n3-rules-owl.n3p

REGRESSIONS

2010-10-25

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.

2010-10-23

http://www.webkb.org/doc/model/comparisons.html by Philippe Martin.

Problems with EulerGUI

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)

Theorem proving with Euler engine

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)

Business Rules community

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

2010-10-22

Try JRules language with Attempto

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

Re-trying Rifle RIF tool

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

2010-10-21

Revelator: a game for better arguments

Exchanged several mails with MK whom I met at CNL2010

http://code.google.com/p/revelator/

ETALIS, system for Complex Event Processing, in Logic Programming

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.

2010-10-20

Prova Rule Language -- version 3.0.3 is released on October 17, 2010

MyLogitech usb microphone on Linux

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 !!!!!

Mail to an junior researcher, PW

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.

2010-10-19

ICOM conceptual modelling tool

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.

2010-10-18

Me on Google Code

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/

2010-10-17

ACE View with Protégé 4.1

Building from sources

http://protegewiki.stanford.edu/wiki/Protege4DevDocs#Building_Protege4.1_from_scratch_using_ant

http://smi-protege.stanford.edu/svn/protege4/ide/eclipse/protege4.1/

Applicative test with Jemmy

  1. start Protégé
  2. wait for a new window
  3. click on "Create New Ontology"
  4. wait for a new window entitled "Create ontology wizard"
  5. click on button "Continue"
  6. again
  7. click on button "Finish"
  8. click on tab "ACE View"
  9. paste in "Ace snippet editor" :

    Toulouse belongs-to France .

  10. the same sentence should appear in panel "Paraphrases"
  11. the panel's title should be "Paraphrases: 1"
  12. this should appear in panel "Corresponding logical axioms"

    Toulouse belong-to France

  13. the panel's title should be "Corresponding logical axioms: OWL: 1 SWRL: 0"

2010-10-15

http://www.irchelp.org/irchelp/networks/servers/

Text below the panel after launching a Inference Engine: added JScrollPane

Test German localization of EulerGUI

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 &

2010-10-14

DONE

2010-10-11

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

2010-10-10

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)

2010-10-08

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

TODO

2010-10-06

http://en.wikipedia.org/wiki/Deductive_database

http://www.prova.ws/

http://people.cs.kuleuven.be/~peter.vanweert/

JPA+Drools

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 ?

Remove the *.java from the EulerGUI archive

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

2010-10-05

Simple JPA implementation based on JoaFip

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

Manage subprojects in new N3 project file

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> .

2010-10-04

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

Ambiguity in Controled Natural Languages

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 )

EulerGUI: introduce OSCache

COMMITED

Cache for Drools compiled Rule Bases

Now BUILD (SUCCESSFUL) is only 7 minutes 18 seconds !!!

TODO

EulerGUI TODO before release

2010-10-03

EulerGUI: introduce OSCache

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

2010-09-30

Preparing EulerGUI for release

TODO

Manage subprojects in new N3 project file:

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)

2010-09-29

Testing GF

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))))

2010-09-28

I joined the #mercury IRC chanel on freenode.

Trying Grammatical Framework (GF)

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/ ?

Installing from source depot

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

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

2010-09-27

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

After CNL 2010

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

Questions about CNL

Sent a message to the participants.

Questions about GF (Grammatical Framework)

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/

2010-09-26

https://sites.google.com/a/octo.com/nosql/home

Migration to eclipse 3.6

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.

Cleaning EulerGUI for release

Regressions in the EulerGUI "refactoring" branch

2010-09-25

unchecked is replaced (partially) by rawtypes

Groovy, Grape

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

Subclipse Subversion plugin in eclipse

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

2010-09-23

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

Regressions in the EulerGUI "refactoring" branch

Learning Mercury

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?

2010-09-22

Learning Scala

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

2010-09-21

Strong background in software engineering.

Concerns about keeping a clean code base, avoiding forks, avoiding re-implementations, while still preserving the freedom of researchers.

Import a whole repository changes database on SF.NET

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

EulerGUI development: read projects files in N3 with URI's different from <>

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

Web application architecture with database: questions

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.

2010-09-20

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.

RDF property for expressing the (dereferentiable) URL origin (file or Web) of an URI ?

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

2010-09-19

Trying XRadar with Maven

http://xradar.sourceforge.net/usage/maven-plugin/howto.html

mvn site

DOES NOT WORK:

EulerGUI tests: drag-and-drop of an OWL file

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);

2010-09-18

Debugging with the Maven Jetty Plugin in Eclipse

http://docs.codehaus.org/display/JETTY/Debugging+with+the+Maven+Jetty+Plugin+inside+Eclipse

Trying AceWiki

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)

2010-09-17

Succeeded to run AceWiki from Maven

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

Installing SWI Prolog from sources

./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

Try to run AceWiki

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.

GF (grammatical-framework) for Attempto Controled English

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 ?

Installed GF (grammatical-framework)

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 ??? ).

2010-09-16

After CNL 2010

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


AceWiki suggestions

Questions

Mavenizing AceWiki

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.

2010-09-14

LePUS3, SEMAT

2010-09-14

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

2010-09-13

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

2010-09-11

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

Re-installing Prova from Subversion

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

2010-09-10

EulerGUI: New N3 project file: populating Project object through rules

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

2010-09-09

EulerGUI: New N3 project file: populating Project object through rules

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)

2010-09-08

EulerGUI: New N3 project file: populating Project object through rules

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 .
}.

2010-09-07

EulerGUI: New N3 project file: populating Project object through rules

// ---------- 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

2010-09-02

DONE:

Trunk: Upgrade euler to 2010-09-03, pellet to 2.2.1

TODO

create the N3 project file with a <> as RDF subect.

CHR

CHR in EulerGUI & Déductions: ideas

Questions/remarks

"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

2010-08-28

Running eye in command line

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

CHR summer school

Christiansen thinks that Attempto could benefit from a CHR implementation

Questions about CHR

EulerGUI: fixing regressions in the refactoring branch

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

2010-08-27

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.

Working on multi-value properties for form generation

Attempto sentence:

Every n : PersonList contains at least one person .

OWL syntax:

PersonList subClassOf contain some person

Paraphrase

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.

EulerGUI: EulerGUI project in N3 format

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.

2010-08-26

EulerGUI: fixing regressions in the refactoring branch

Fixed:

NOT Fixed:

2010-08-25

Merging the refactoring branch in EulerGUI

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 )

2010-08-24

Merging the refactoring branch in EulerGUI

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

2010-08-23

Problems with OWL API

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)

Old an new EulerGUI tasks

Update of Old EulerGUI Tasks ( from april 2010 )

  1. lobbying with Protégé and OWL API teams: we need this to be working:

    <> 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)

  2. N3 Editor : completion; enhance tooltip explaining the properties and classes 3h
  3. Import Java classes from byte code or sources, with method bodies : maybe reuse eclipse parser
  4. Java application objects in the KB along with business objects, see N3 - Java mapping ; an alternative to using the instanciator technology; useful for the internal KB and generated applications (4h)
  5. action to start a Déduction form to enter properties for a new instance (4h):

Dependencies:

Other recent tasks:

  1. presentation brochure for company Deduction
  2. write training program
  3. form generator: implement multi-valued properties, OWL 2 restrictions;
  4. Application examples: wine management, contacts management
  5. generation of all formats from RDF: ideas for a quite generic RDF export ( see just below )
  6. evaluate Prova ; read article by Adrian Paschke
  7. merge Olivier's refactoring
  8. continue refactorings: extract Drools engine, remove package dependencies, etc
  9. introduce plugins within EulerGUI with Felix; on demand download of features
  10. make a Protégé 4.1 plugin with EulerGUI
  11. implement some applicative N3 rules within EulerGUI, cf Rules to extend EulerGUI behavior
  12. EulerGUI project in N3 format, extending the Protégé OWL format
  13. infrastructure for processing N3 rules; translate to Drools, Prova, CHR, SWRL, ... ; use Euler new mode --no-qvar
  14. new translator to Drools

Dependencies:

3->4

8->9

5+13 -> 14

Ideas for a quite generic RDF exporter

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:

  1. generate XML, or classes in PHP or Python, or other Knowledge Representation languages like KIF (Knowledge Interchange Format)
  2. translate RDFS classes to Java classes with public fields
  3. translate a Java AST (e.g. from eclipse compiler) expressed as an N3 graph, into actual Java source
  4. generate property files
  5. generate simple english sentences

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):

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.

EulerGUI: cache for Drools rulebase, etc

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

2010-08-22

http://conceptbase.sourceforge.net/userManual72/

Arguments for Déductions project

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.

2010-08-07

ideas for a quite generic RDF exporter on the Jena list :

http://tech.groups.yahoo.com/group/jena-dev/message/44523

EulerGUI : better manage Drools WM and RuleBase

WIP: cache Drools RuleBase instead of Packages.

2010-08-06

~/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)

Snapshot of EulerGUI

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

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.

EulerGUI : better manage Drools WM and RuleBase

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

2010-08-05

COMMITED : upgrade to ARQ 2.8.5

What is the status of the negation by failure in Mercury?

ws.prova.api2.ProvaCommunicatorImpl

Trying apache-felix-maven-bundle-plugin

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.

Maven SCR Plugin

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.

Reading about Prova

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
 }
}

Using Maven Surefire 2.6 snapshot

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

2010-08-04

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?

2010-08-03

Subscribed to http://lists.owldl.com/mailman/listinfo/pellet-users

To post to this list, send your email to: pellet-users@lists.owldl.com

Trying Smart Cache

Smart Cache Manual

2010-08-02

Trying Prova

svn 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

Links to logic engines: Thea, Lambda Prolog, Prova

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

LNCS 4254 - Prova: Rule-Based Java Scripting for Distributed Web ...

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 ...

2010-08-01

HTTP header Last-Modified in Sourceforge's Subversion depot

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.

2010-07-31

Test of eulergui_refactoring

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 !!!!

2010-07-30

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.

2010-07-29

http://datao.net/

http://generic-concept.com/blogs/olivier/

Drools question

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 ?

2010-07-28

Drools question

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" ) 

2010-07-27

Rifle RIF tool

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

Articles on user interface generation

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

2010-07-26

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.

EulerGUI architecture TODO

N3 rules for form generation with Drools insertLogical

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 ! :)

2010-07-25

Test of eulergui_refactoring

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 months, 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

2010-07-24

Test of eulergui_refactoring

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)

Drools N3 engine : enhance implementation of log:notEqualTo

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 )

Drools N3 engine : simplify the translation of e:findall when empty result

now 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.

2010-07-23

Drools : get the set of all values of a variable : collectSet

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

TODO EulerGUI

N3 rules for form generation with Drools insertLogical

I did not work the first time !

e:findall seem to be a problem.

2010-07-22

Drools insertLogical

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

Maven bootstrap

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

Questions about Drools

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 .

Drools bug reports

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

2010-07-21

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

EulerGUI: stateful KB example, new cache for Drools

project.addProjectListener(new SWRLTranslator()); // TODO SWRLTranslator should be added by default

Stateful KB example

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

Testing new cache for Drools Packages

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

2010-07-20

Training for Déductions project

2010-07-18

Cache for Drools compiled Rule Bases and URL documents

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 :

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 ...

EulerGUI

DONE

CreateClassFormMouseListener: add a toolTip in the class tree view to tell user to click and edit an instance of the OWL class.

2010-07-17

EulerGUI

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)

2010-07-16

Re-testing Neon toolkit for ontologies

There are very many plugins (http://neon-toolkit.org/wiki/Neon_Plugins):

neon_plugins

2010-07-13

file:///home/jmv/src/mercury-compiler-10.04-beta-2010-06-24/doc/mercury_ref.html

Educational material, courses

"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/

2010-07-11

http://community.jboss.org/wiki/MavenGettingStarted-Users

mvn -e exec:java -Dexec.mainClass="DroolsRunExportedProjectOldAPI"

Drools Bug Report

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

2010-07-10

Working on a Drools 5.1.0M2 bug

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

2010-07-09

Test new Euler/Eye jars

% 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 .

2010-07-08

Déduction Swing form generator : OWL someValuesFrom

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 !

2010-07-07

ATTEMPTO - algebraic expression with ACE OWL

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."

2010-07-05

Déduction Swing form generator : transform model to and from forms

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 ).
}.

EulerGUI ideas: Parameter of a query, find rules depending on property

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 ) .
}.

2010-07-03

Déductions form generator: update form when computation occurs in a rule

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 .
}.

Test Pellet engine for SWRL rule

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.

EulerGUI development

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 ).
}.

2010-07-02

Search for pure prolog provers or inference engines

http://www.ai.sri.com/~stickel/pttp.html

No assert or retract, just 20 cuts, 1228 lines.

LeanTaP, Satchmo

Mercury

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

ATTEMPTO

How easy would it be to add probabilistic features to ATTEMPTO, e.g. fuzzy logic ?

ATTEMPTO Prolog code quality

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

2010-06-28

Mercury CVS repository

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

2010-06-26

TODO EulerGUI

Test of branch eulergui_refactoring

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

2010-06-25

Searched for "temporal logic user interface" .

Questions to IA scientist

Mercury

Would it be easy to port to Mercury ATTEMPTO or Euler?

Installing Mercury

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

Mercury tutorial

Et voila! --> Et voilà!

Looking at SOAR

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.

2010-06-24

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.

Reading about Sumo and SigmaKee

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.

2010-06-23

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.

Framework for generation of any format from RDF

For example: generate XML, or classes in Java or Python, or other Knowledge Representation languages like KIF (Knowledge Interchange Format).

Concrete examples:

  1. translate RDFS classes to Java classes with public fields
  2. translate a Java AST (e.g. from eclipse compiler) expressed as an N3 graph, into actual Java source
  3. generate property files
  4. generate simple english sentences

We will suppose that the N3 or RDF has already been transformed so that:

Any API to walk though an RDF graph is suitable, e.g. Jena's. In addition one needs to distinguish:

References

Reusable business models in OWL or RDFS

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

2010-06-19

Testing my modifications of the ACE --> OWL translator

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 .

Missing stuff and troubles

  1. selecting "ACE local" in the ACE View preferences (see above)
  2. ./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>
        
  3. For each n:mobile M for each n : acceleration G for each n:elapsed-time T there is a n:distance D such that M v:travels-during the n:elapsed-time T , and M v:travels the n:distance D, and D = ( 1 / 2 ) * G * T * T .

    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>

2010-06-18

Install ACE server on my machine

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.

2nd Workshop on Controlled Natural Language

Marettimo Island, Sicily (ITALY)

September 13-15 2010

http://staff.um.edu.mt/mros1/cnl2010/index.html

SWI Prolog

Setting my SWI Prolog startup file

echo ':- system:set_prolog_flag(history, 50).' > ~/.plrc

Miscellaneous SWI Prolog IDE Suggestions

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?

Minor issues with SWI debugger

Using SWI-Prolog (Multi-threaded, 64 bits, Version 5.8.0) on Ubuntu 10.4

  1. breakpoints disappear after doing make
  2. query
  3. after numbervars/3 has been called, the bindings do not show the presence of the terms $VAR(1)
  4. if the debugger window is present, right clicking "edit" in the Prolog navigator does not work

2010-06-16

Debugging ACE to OWL translator

swipl -s ace_to_owl.pl -g cli

Try to make this clause recusive:

get_argument(expr(X, Y, Z), _RefList, data, EXPR)

Look at RIF specifications and implementations

http://github.com/sandhawke

RIF Basic Logic Dialect : http://www.w3.org/TR/rif-bld/

Fuzzy logic with Euler

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

2010-06-15

Attempto tests (ACE) : neurology examples

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:


Testing ACE editor again from sources

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

Testing Euler plugins

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.

jenabean

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/

prolog_navigator in SWI Prolog

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

2010-06-12

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.zilonis.org/

http://www.mulgara.org/index.html

http://www.prova.ws/

writing_owl_in_ace

http://liris.cnrs.fr/~pchampin/research/

http://dl.kr.org/

2010-06-11

Today 1,200 downloads for EulerGUI !!!

Ideas for ACE View

2010-06-10

Attempto tests (ACE) : algebraic expresssions

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

2010-06-06

Try verbalizing FOAF with ACE View

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.

2010-06-05

Questions about ACE (Attempto) and ACE View

2010-06-03

TO READ: Posted on the Protégé list: http://www.linkeddatatools.com/semantic-web-basics

EulerGUI: postponed N3 Java Mapping Builtin

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

2010-06-02

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

EulerGUI : Pellet 2.1.1

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

2010-06-01

N3 Java Mapping Builtin: issues

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:

  1. when detecting in a Java triple a variable not declared in the rule scope, generate on the LHS a criterium like:
    Assignment( name = "<http://../GUIKBAdapter>" , reference.class = ?GUIKBAdapter_class
     reference = ?GUIKBAdapter_reference )
  2. replace the predefined Java objects with references to Drools gloval variables

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.

2010-05-31

N3JavaMappingBuiltin: empty lists, boolean

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 ).
} .

2010-05-28

Testing new N3 - Java mapping with Déductions Swing rules

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 ).
} .

2010-05-27

Leverage new Java mapping in EulerGUI: generated forms

TODO

2010-05-25

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

2010-05-24

http://www.agence-nationale-recherche.fr/Agence

Swappiness

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

2010-05-23

Jean-Yves Girard's book The Blind Spot, etc

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) :

The Linear Logic Primer

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

2010-05-19

Reading DRS report (Discourse Representation Structures for ACE 6.5)

./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)

2010-05-18

My debut on semanticoverflow.com: rules for OWL

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

Running ACE View in command line

ACE View in command line

swipl
consult( 'ace_to_owl.pl' ).
cli.

Pass ACE View SWRL tests with EulerGUI

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:

137: 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.

Ontology for algebraic expressions with physical quantities

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

Mathematical expressions in ACE View

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

2010-05-17

Upload snaphot : SCM-Revision: 1653

Mathematical expressions in ACE View

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

2010-05-16

svn propset svn:keywords Revision swrl-n3-rules.n3

2010-05-15

svn co https://jena.svn.sourceforge.net/svnroot/jena jena

semantic-web@w3.org

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

SWRL builtins in SWRL to N3 translator

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 .

NullPointerException with jEdit

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)

2010-05-14

sudo swapoff -a
sudo swapon -a

REGRESSIONS:

argument to Euler is not kept in the Project file;

Status of the SWRL translation

http://semwebcentral.org/projects/swrl-test-suite/

DONE

TODO

UNUSED

AtomList

Class Variable is not used, but maybe not useful ?

Implement DatavaluedPropertyAtom

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.

Books: Linux, the Working Ontologist

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

SPARQL and N3 Highlighting in GEdit

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>

Installed sparql-query

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'

2010-05-13

Upload a snapshot for revision 1631

EulerGUI: small helpful features

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:

Infinite loop in Euler with findall : normal ?

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 .

2010-05-12

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. ???????????

2010-05-11

EulerGUI specifications

Human visible outputs of EulerGUI

We should design the human visible outputs of EulerGUI:

Intelligent extraction of data compatible with a query

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/

Graphical services management on Linux: BUM

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

OWL API : Turtle Parser does not process relative URI's

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)

2010-05-09

findall with several clauses in Drools translator

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" .

2010-05-08

TODO

2010-05-07

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

2010-05-06

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

2010-05-04

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 .

2010-05-03

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.

2010-04-27

Eclipse Platform

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

EulerGUI TODO + DONE

TODO

DONE

BUG FIX: Re-tested SPARQL GUI : create a new SPARQL source, in the project's directory or elsewhere

2010-04-26

EulerGUI DONE

- 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 .

2010-04-23

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 :).

2010-04-21

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
}.

Implement list:in in Drools

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.

Model - rules coherence

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 &

2010-04-20

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

Completion implementation in N3 editor: implementation notes

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.

2010-04-19

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.

2010-04-17

How to bypass most of syntaxic sugar with CWM:

cwm --n3=lst examples/people_pets-small.n3

Implement list:in in Drools

test/findall3.n3p

Regressions

Problems with large & complex ontologies and Déduction application generation

ACE View self training : bus lines

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 .

2010-04-15

OWL API : Turtle Parser does not process relative URI's

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 .

EulerGUI: euler arguments are now windows-compatible.

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]

2010-04-14

SWRL builtins implemented in N3

SWRL Section 8. Built-Ins

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.

Test rules with Attempto

See my mails on the Attempto list:

https://lists.ifi.uzh.ch/pipermail/attempto/2010-April/thread.html

Test mathematical formulas with Attempto

% ./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 <<<<<<<<<

Test Olivier's bus line example with Attempto ACE View

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 :

  1. it is wrong that "Every town has a location" ; in fact the "have" predicate is not used at all;

    this explains why there is no inference is made

  2. the "have" predicate is used in two different meanings;

    two different object predicates should be used;

  3. departureTown and arrivalTown are not suitable concepts for a class: a town is for departure or arrival depending on the bus line considered; cf the UML discussion about airport and airlines in Pascal Roques' book "UML par la pratique"

ACE View Remarks:

  1. it is strange that an extra variable ?x11 is added, together with a sameAs clause in the consequent (of course my SWRL => N3 translator is not prepared to that)
  2. would it be possible that the ACE View translator from ACE to SWRL keeps the variable names from the original text ? Note that my SWRL to N3 also creates new variable names, as also does the paraphrase generator in ACE.

2010-04-13

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

Problems with large & complex ontologies and Déduction application generation

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 ).

runtime-rules.html

2010-04-12

km-rdf by Yves Raimond

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.

TODO for knowledge engineering demo

EulerGUI prioritary tasks

  1. checking that insertLogical() in Drools removing a triple also removes the bad consequenses, and that the tests still pass: 2h
  2. lobbying with Protégé and OWL API teams: we need this to be working:
    <> owl:imports <plants.n3> . # KO: IllegalArgumentException: URI is not absolute

    4h

  3. N3 Editor : completion and tooltip explaining the properties and classes

    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

  4. Import Java classes (both from byte code and javadoc; javadoc has comments useful to import) 4h
  5. Insert Java application objects in the KB along with business objects, see project_ontology ; an alternative to using the instanciator technology; useful for the internal KB and generated applications 4h
  6. add to the existing class tree an action to start a Déduction form to enter properties for a new instance 4h

2010-04-11

Base DTD for eclipse plugins


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
>

Building OWLAPI from sources

svn co https://owlapi.svn.sourceforge.net/svnroot/owlapi/v3/trunk owlapi_v3

Mail sent to the list.

EulerGUI plugin architecture (extension points)

interface N3SourceFactory

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 got to have some plugin architecture in EulerGUI

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 ?

Protégé 4.1 links given by Timothy

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

[3] http://protegewiki.stanford.edu/index.php/Protege4DevDocs#Using_an_Integrated_Development_Environment

[4] http://protegewiki.stanford.edu/index.php/CompileProtege4InEclipseFromSvn

Trying the vacuous plugin from Protégé wiki

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

2010-04-10

1000 EulerGUI downloads !!!

http://sourceforge.net/projects/eulergui/files/

By comparison Adam Pease's Sigma is at 4400 :

https://sourceforge.net/projects/sigmakee/files/

Update on SWRL + OWL translation as N3 rules

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. add more OWL expressions types to this OWL ==> N3 translator
  2. in a post-load step in EulerGUI (after project load) , automatically run his OWL ==> N3 translator, so that the rules are available for inferencing (similar to what is already done for SWRL rules, see [1] )
  3. in a post-load step also add all the implementation by rules in N3 logic for most of OWL concepts [2] from the Euler project
  4. complete the SWRL to N3 translator [1] with SWRL builtins, and pass SWRL test suite from [3] ;
  5. for running translated SWRL rules on the Drools / N3 engine, define an API and Java implementation for SWRL builtins that can be shared with Martin O'Connor's forthcoming Drools engine for SWRL
  6. work on a translator from N3 logic to Drools rules, by populating an RDF graph of Drools rule objects conforming to the Drools API [4], using rule based techniques similar to the above translators; the goal is to completely replace the current Java implementation of a translator from N3 logic to Drools rules [5]

[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/

[4] https://hudson.jboss.org/hudson/job/drools/lastSuccessfulBuild/artifact/trunk/target/javadocs/unstable/drools-core/org/drools/rule/Rule.html

[5] translator from N3 logic to Drools rules http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/html/documentation.html#Translatin

2010-04-09

http://semwebcentral.org/projects/swrl-test-suite/

swrl-ex3-n.n3 : swrl:DatavaluedPropertyAtom

swrl-ex4-n.n3 : swrl:builtin

EulerGUI SWRL engine

TODO

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:

2010-04-08

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

EulerGUI tests

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

2010-04-07

ACE View from french

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

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 TODO documents

Updating past documents : TODO / EulerGUI: new , Rules for EulerGUI + taches.html in EulerGUI

2010-04-06

EulerGUI new feature : OWL class tree view with a text filter

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

2010-04-05

Develop SWRL => N3 translation: test with ACE View

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:

protege_aceview

ALAS !!!!!!!!

None of the 5 examples in the ACE View documentation has any rule !

eclipse, SWT and Swing

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

2010-04-04

Develop SWRL => N3 translation: test with ACE View

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:

Automatically adding OWL rules from Euler to a project

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.

Trying the new N3 project for EulerGUI

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>

Euler Eye: issue with list:in

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

Jos played an important role in establishing RDF list syntax

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

2010-04-03

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

Develop SWRL => N3 translation

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 :

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.

2010-04-02

// 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

2010-04-01

use global constant ProjectGUI.LOGGER instead of Logger.getLogger("theDefault")

because the latter has a non-externalized string

Update eulergui/html/project_ontology.html

2010-03-31

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

EulerGUI: test post processing project with Eye

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.

Announces: TopBraid 3.3 / SPARQLMotion, ARQ 2.8.3

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

Transitive closure of all properties in N3

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.
}.

2010-03-30

In eclipse, clicking on a resource bundle entry: "The properties file could not be detected"

Examples of Resolving Relative URIs

TODO / EulerGUI: new

mail to Olivier + EulerGUI server + appli. FB + expenses

  1. After the translation of SWRL in N3, we now must start automatically the translator (which is an EulerGUI project) on .owl files, and add rules to the N3 project ...

    implementation: use the observer pattern in class Project; later leverage on point 1.

  2. Must add in the Feature Requests:
  3. updated eulergui/html/project_ontology.html; yesterday evening I did some tests with Protégé to see what it is to be Protégé 4.1 compatible
  4. lobbying with Protégé and OWL API teams:

    anonymous imports is not blocking, but we need this to be working:

    <> owl:imports <plants.n3> . # KO: IllegalArgumentException: URI is not absolute
  5. I need to update eulergui/html/n3_rules_good_practices.html , after my experience with rule generation
  6. Must also write an ontology of the subset of Drools language we use for N3 rules (maybe just import and reuse the existing API);

    dependant on feature "Import Java classes"

    useful for "new N3==>Drools rule based translator"

  7. new N3==>Drools rule based translator

    cf mails with Martin O'Connor

  8. EulerGUI server

    expose methods via standard tools (Axis ... )

  9. FaceBook + expense report application
  10. Wine application
  11. Automatically adding OWL rules from Euler to a project
  12. useful stuff: add "recent projects" in the file menu
  13. Data Validation (constraints)

    implies checking that insertLogical() in Drools removing a triple also removes the bad consequenses, and that the tests still pass

  14. new ontology and N3 format for RDF + OWL + rules projects

    Work In Progress, see eulergui/html/project_ontology.html

  15. Insert Java application objects in the KB along with business objects, see project_ontology

    an alternative to using the instanciator technology;

    useful for the internal KB and generated applications

  16. functionalities implemented with ApplicationKB, alias internal KB, see below : "Rules for EulerGUI"
  17. parameterized queries (aka query in Drools )

    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.

  18. message panel

    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

  19. Catalog of XML Schema in N3

    agree on the RDF vocabulary;

    implementation: replace the class XMLSchemaCatalog and can either add thisCatalog to the internal KB, or use a Jena Model

  20. write a "script" in Java: run the demo case: FaceBook, those from Deductions manual

    implementation: we listen to the end of the current window ProjectGUI to start the next project. We should not have to change ProjectGUI.

  21. N3 shell (with standard input or a tab), NTH with completion, examples:
    <> owl:import <foo.n3>
    :app xml:lang "fr"
        
  22. translate 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.

    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 ] ) ] .

  23. Automatically adding OWL rules from Euler to a project

    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

  24. annotate rules: special comments, reify , or ???

    ask for ideas to CWM list

Bugs

  1. manage simplified URI's for post-Processing Project
  2. implement ProjectSequence.reasonExternalProlog() ; TODO test, after a correction to Euler (Euler does not understand file: URL's)
  3. Regression: after new Window; save as... , the window title has not changed.

    not reproduced !

Protégé 4.1

Tried reading N3 relative documents

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"


Running Protégé 4.1 from sources

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.

EulerGUI features

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.

Translator from SWRL to N3 logic, implemented in N3 logic

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.

2010-03-29

http://tech.groups.yahoo.com/group/jena-dev/

Translator from SWRL to N3 logic, implemented in N3 logic

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.

2010-03-27

Reactivate ApplicationKB; correct error when populating the KB with project data

EulerGUI editor features

See "EulerGUI ideas"

Tooltip explaining predicates

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:

  1. a 100% Java implementation, using the Jena API to query the TDB cache for ?CURRENT_PREDICATE ?P ?V
  2. a KB centered implementation along the line of the current Déduction technology; for this we need:

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.

Correspondance from resources to ontologies

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.

Tooltip explaining classes

It 's much the same as for predicates.

Translator from SWRL to N3 logic, implemented in N3 logic

Answer gotten from Jos, with e:tuple .

N3 syntax for jEdit

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

2010-03-26

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

Translator from SWRL to N3 logic, implemented in N3 logic

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}

2010-03-25

yap -l /home/jmv/src/eulersharp/2006/02swap/euler.yap \
    -g main -- --nope --pass /home/jmv/src/eulergui/examples/parents.n3

2010-03-24

Translator from SWRL to N3 logic, implemented in N3 logic

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.
}.

2010-03-23

Translator from SWRL to N3 logic, implemented in N3 logic

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}

2010-03-22

Translator from SWRL to N3 logic, implemented in N3 logic

# 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) .

Articles: OpenRuleBench, etc

Towards a Model-driven Approach for Reverse

Engineering Design Patterns

Awny Alnusair and Tian Zhao

University of Wisconsin-Milwaukee, USA

{alnusair,tzhao}@uwm.edu

OpenRuleBench, and several inference engines

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

2010-03-20

http://www.cs.kuleuven.be/~dtai/krr/idlogic/index.html FO(.)

http://www.commandlinefu.com/

Protege 4.1 Alpha update (build 102)

2010-03-18

EulerGUI ideas

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

Install JEdit on local and remote repository

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

2010-03-17

Martin O'Connor pointed me to his SWRL Language FAQ: What are DL-Safe SWRL Rules?

Rules for EulerGUI

Now copied in the EG Manual.

With EulerGUI internal rule engine

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 ) :

With "user data KB" rule engine

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 :

2010-03-15

http://www.dilbert.com/strips/?Page=6

svn co https://parser4j.svn.sourceforge.net/svnroot/parser4j/trunk/parser4j/ \
       parser4j

EulerGUI : Regression with gluing components

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

Check the SWRL implementation in Protégé

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

2010-03-14

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 ?

Mailman administration

Choosing moderated :

https://lists.sourceforge.net/lists/admin/eulergui-commits/privacy/sender

2010-03-13

http://code.google.com/p/jenabean/wiki/Mapping

http://wigblog.blogspot.com/2004/05/gmail-lacks-basic-privacy-protections.html

Trying SWRL tab (SWRLTab) in Protégé 3.4.4

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 ):

protege4_swrl

When cliking on "Jess->OWL" , the inferred triples are added to the current ontology.

Comparison with EulerGUI and new features

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 :

  1. open a result frame with the first or second yellow smiley,
  2. save that to a persistent file,
  3. add that persistent file to the projet

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 .

EulerGUI refactoring

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

2010-03-12

Someone on the Jemmy list suggested Wink , a freeware Tutorial and Presentation creation software, but it runs only on Windows. recordmydesktop runs on Linux .

Error in the test batch in EulerGUI

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

JNLP + Maven

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)

Feature Requests for EulerGUI; Maven depots to watch

https://sourceforge.net/tracker/?group_id=237733&atid=1104479

Mail nofications from Subversion on SourceForge

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

2010-03-11

Failed tests:

testFieldOldArchitecture(deductions.runtime.TestRulesForUserEvents)

testFormFromClass(deductions.runtime.TestRulesForUserEvents)

Tests in error:

test_person_import(eulergui.gui.TestSwingGeneration)

2010-03-10

Developing a plug-in for Protege 4

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

Proposals for a new N3 format for RDF + OWL + rules projects

Commited into eulergui/html/project_ontology.html

The context

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.

The current situation

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>

The EulerGUI "Project" ontology

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) :

  1. use inheritance (rdfs:subclassOf) from the base class :RDFImport , leading to classes like RDFImportFromXML, RDFImportFromXMI, RDFImportFromXSD, RDFImportFromSPARQL
  2. use an enumerated property :hasFormat with domain :RDFImport, and with values coming from their XML namespace or specification URL , like <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 .

Implementation

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

Use the EulerGUI Java instantiator

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 .....

Migration path from XML projects to projects in N3

The steps , that will keep the application working:

  1. add one RDF database per N3 Project (a Drools Working Memory)
  2. populate the RDF database by the observer Design Pattern on the Project class (for runtime events)
  3. populate the RDF database after reading the old XML project (in Project.prepare() )
  4. when closing the application, write the RDF database on an N3 file with extension .n3p.n3 (use the Jena pretty printer like in the second yellow button)
  5. read a new N3 Project file with extension .n3p.n3 : use the above rule set
  6. populate the Project class with OWL imports : either add some Java callback, or do it with a rule that will look into the OWL imports, using the builtin log:parsedAsN3 (see CwmBuiltins )

Protégé configuration is not in RDF or N3

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

Trying SWRL tab (SWRLTab) in Protégé 3.4.3

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.

2010-03-09

FaceBook rule in SWRL

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:

ACE View source and Protégé 4.1

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)

2010-03-05

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/

2010-03-04

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 );

2010-03-02

Sightseeing and reviewing EulerGUI with Olivier

TODO

Form generator in Protégé: reuse ?

EulerGUI: Specification for constraints on user inputs

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!" .
} .

2010-02-28

TODO explain in the Manual

--help --debug

CWM Features and Tutorial

Delivery Context Ontology

W3C Working Draft 16 June 2009

http://www.w3.org/TR/dcontology/

Location of the swrl definition in owl

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 .

2010-02-27

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
}.

Trying the Facebook example with Protégé 4.0.2

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 !!!!!!!!!!!!

Tutorial on writing rules

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

2010-02-21

http://en.wikipedia.org/wiki/Rewriting

http://rewriting.loria.fr/

http://esw.w3.org/topic/foaf+ssl

Chat with Henry Story

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

2010-02-19

DONE EulerGUI:

model-rules-coherence.n3 : test and enhance; works with Euler only

Embedded Maven

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

Datao by Olivier Rossel is a nice graph based GUI for RDF.

I should try Datao on Windows or 32 bit Linux :

http://jump.to/datao

2010-02-18

EulerGUI and students; questionnaire

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?

2010-02-16

Attempto "chocolate" tests

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

2010-02-15

mvn exec:java -Dexec.args=

Recent EulerGUI commits: tests and regression

BUILD SUCCESSFUL on Linux, Windows 7 and XP !!!!!!!!!!!

Troubles on Windows 7 + cygwin with Maven and Subversion

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 !!

2010-02-14

Recent EulerGUI commits: tests and regression

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.

2010-02-12

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

Translator from SWRL to N3 logic, implemented in N3 logic

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 .

2010-02-10

RESTClient 2.3 error

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

2010-02-08

Recent EulerGUI commits: Java editor

New Java editor: prevent unsaved edits: now the window with unsaved edits does not close,

but saving it allows it to close

TODO

2010-02-07

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.

List of Projects That Use Protege

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 problems

The gloze.base parameter

There 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.

Problem with xml:lang in the XML Schema

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.

Problem with the XHTML Schema and string content

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

A bad warning message

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.

Gloze within EulerGUI

The XML rood node is an RDF blank node

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 <<<<

2010-02-05

RDFa

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

2010-02-03

To read

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/

2010-02-02

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

Haskell

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

Recent EulerGUI commits

[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

2010-02-01

LarKC: The Large Knowledge Collider http://www.larkc.eu/

Recent EulerGUI commits

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

A multi-valued property that is a LinkedHashMap: question on ##swing

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 ?

2010-01-30

Nice post on the Jena list:

Re: [jena-dev] What is JENA inference support lacking in the technical sense

Specification of EulerGUI Server : parametrized queries

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

2010-01-27

Noop , the new Java deescendant from Google:

http://code.google.com/p/noop/

Installed Thea

Thea is an OWL 2 and SWRL engine in Prolog . I got responses from Vangelis.

Running FuXi from repository: trouble

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

Links

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

2010-01-25

Funny , but certainly a fake interview of Sroustrup:

http://artlung.com/smorgasborg/Invention_of_Cplusplus.shtml?

Readings: ACE View, Jena 2 Inference support

ACE View — an ontology and rule editor based on Attempto Controlled English, by Kaarel Kaljurand

Jena 2 Inference support

2010-01-22

Misc. links on OWL reasoners

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

(Re)Tried Open Mind / Common sense

I tried to teach him about carpel: it has parts: style, stigma, ovary (cf Flower Morphology ).

Several things are wrong

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.

2010-01-21

Recent EulerGUI commits

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

2010-01-20

Announces EulerGUI 1.4.1

EulerGUI bug: creating a new SPARQL query

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 :( .

2010-01-19

(re)trying Euler server

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 :

http://localhost:8088/.eye+http%3A%2F%2Fwww.agfa.com%2Fw3c%2Feuler%2Fmedic.n3+--query+http%3A%2F%2Fwww.agfa.com%2Fw3c%2Feuler%2FmedicF.n3

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).

2010-01-18

http://www.2paths.com/2008/12/30/mulgara-rdf-store/

http://planetrdf.com/guide/

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).

2010-01-13

Add to doc.; add an example

Trying Joseki from sources

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

A server that wraps EulerGUI

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:

  1. generic CRUD: relative URL : insert , delete

    insert or delete an single triple, given by parameters subject, predicate, object

  2. it can also wrap a series of insertions with the same subject in a single URL, e.g. http://swi/note_de_frais/facture?payeur=p1&fournisseur=f1&montant=123.45&date=2010-01-11+17:20:50

    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:

  3. N3 facts: relative URL : n3;

    this will replace options 1 and 2 ( even delete via predicates kb:replace )

  4. N3 rules : relative URL : n3
  5. N3 query : relative URL : n3_query

    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:

Updated Fuxi

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

Subtleties of regular expressions

This article illustrates the subtleties of regular expressions, and their limits compared to compiler generators:

Finding Comments in Source Code Using Regular Expressions

Drools N3 engine: factorial test

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)

2010-01-11

RDF servers

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.

2010-01-10

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.

2010-01-08

EulerGUI 1.4 Announce for English language followers

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 1.4 Announce on Protégé list

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

Drools N3 engine: built-ins

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)

2010-01-06

Trying TDB Jena

The user manual is here:

http://openjena.org/wiki/TDB

Intelligent test generation

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.

ordered lists in OWL

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

Links: Non-monotonic_logic, Closed_world_assumption, etc

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

2010-01-05

Attempto (ACE)

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 ...

2010-01-04

http://www.w3.org/2005/rules/wg/wiki/List_of_Rule_Systems

Releasing EulerGUI 1.4

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

MVEL

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 (W3C Rule Interchange Format)

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

Attempto (ACE): tried some examples

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

Tests with empathy and Google Talk

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

introductory material on the semantic web

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

neo4j

NEO4J Getting_Started_Guide

I'm surprised that one can add properties to a relationship !

2010-01-03

Checking EulerGUI dependencies

Euler (updated to 2009-12-18), Jena, Pellet, Drools

RuleML

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:

http://ruleml.org/0.91/xsd/

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

RuleML and ACE

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();

Attempto and N3

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

2009-12-24

Consolidating EulerGUI

DONE

2009-12-23

TODO: test person_xforms.n3p

Gloze

DONE

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)

2009-12-22

Gloze use cases

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" )

2009-12-21

Gloze

Maybe use this constructor to initialize Gloze with the important Schema list from EulerGUI :

public Gloze(URL[] schemaLocation, URI[] targetNS) throws Exception {

DONE

2009-12-20

Gloze

now all 39 Gloze specific tests pass, including TestOWL

2009-12-19

Gloze

TODO for Gloze itself:

DONE

2009-12-18

http://www.mtholyoke.edu/courses/dstrahma/cs341/myslides/Ch25_DedDB.PPT

Recompiling Gloze 1.01-beta2

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 !

Debugging Maven test cases with eclipse

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>

2009-12-17

EulerGUI

XML export with Gloze

Issues with "root" resource in an RDF graph

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" .

Arranged URI management in EulerGUI

Now at 1pm, it only works with eclipse; in fact there was 2 errors in file URI management:

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].

2009-12-16

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.

EulerGUI

XML export with Gloze

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()

2009-12-15

Ontology+Development on hal.archives-ouvertes.fr

Fetching Jena sources from depots

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

EulerGUI

DONE

XML export with Gloze

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() .

2009-12-14

EulerGUI Drools N3 engine

Cardinality

DONE

2009-12-13

ncal -w

EulerGUI Drools N3 engine

Need to change that in Triple, because loading factsTriples.xml currently is broken .

public Object
// String 
getObject() {

Cardinality

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 .
} .

2009-12-12

Installed Drools eclipse plugin

JBoss Tools Update Sites

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.

EulerGUI Drools N3 engine: cardinality

2009-12-10

EulerGUI Drools N3 engine: cardinality

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 .

2009-12-09

EulerGUI Drools N3 engine: cardinality

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""

2009-12-08

java.net People

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)

2009-12-04

DONE

TODO

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)

2009-12-03

EulerGUI: SPARQL queries

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)
       }

Enhancement in opening buggy projects

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.

2009-12-02

TODO : EulerGUI Manual: review recent features: SPARQL, XML import and export

EulerGUI : enhancements in tests

Bypass the Parser4J tests

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

Disactivate the windows in Jemmy tests

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 .

Testing my modifications in Gloze

~/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

2009-12-01

export EMPATHY_DEBUG=all

Testing Gloze in EulerGUI

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

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

2009-11-30

xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd

Maven test details

Jemmy Operators Environment

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

2009-11-29

EulerGUI + Déductions : update Jemmy 2 test

Functional (Jemmy) tests:

Trying Jester, a test tester

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

Joafip + Drools

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/

2009-11-28

EulerGUI + Déductions : update Jemmy 2 test

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, ...

2009-11-27

EulerGUI + Déductions : update Jemmy 2 test

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

2009-11-26

http://generic-concept.com/blogs/olivier/

EulerGUI + Déductions : update Jemmy 2 test

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:

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

On phone with Olivier Moïse

orbit from eclipse foundation

buckminster is kind of a super-Maven

generic-concept/blog/

2009-11-25

Top 10 Principles for Software Generation

by jkennedy on June 17, 2009

EulerGUI + Déductions : added a Jemmy 2 test

Jemmy is a Java GUI testing library for Swing and SWT.

eulergui revision=995

[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.

2009-11-24

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

Looking for java gui testing frameworks

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

Jemmy tutorial

<dependency>
  <groupId>org.netbeans</groupId>
  <artifactId>jemmy</artifactId>
  <version>2.2.7.5</version>
</dependency>

JToolbar problem with uispec4j

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 .

2009-11-23

removed at revision 990 in class n3_project/helpers/N3SourcetoDrools :

conf.setSequentialAgenda( SequentialAgenda.SEQUENTIAL );

My PS1 for zsh

export PS1="%m:%~%# "

which gives e.g. :

jmv-desktop:~/src/joafip% 

2009-11-22

IDE's and tools

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

A Tour of Scala

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

Questions about Abbot

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.

Working on Joafip + Drools

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

2009-11-21

http://maven.apache.org/guides/mini/guide-central-repository-upload.html

Working on Joafip

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

Putting Abbot on Maven

I asked what they think on the Abbot list .

Download sources and build

cd ${HOME}/src
svn co https://abbot.svn.sourceforge.net/svnroot/abbot/abbot/trunk \
       abbot
cd ${HOME}/src/abbot/
ant jar

Work on local repository without pom

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

Work on local repository with pom.xml

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

Using Abbot in my EulerGUI project managed by Maven

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.

2009-11-20

http://www.octoberrulesfest.org/speakers.html

EulerGUI TODO

Rules for form generation

DONE

TODO

REFLEXION

There should be a way to infer the action for events, based on a semantics added to the fields.

2009-11-18

Rules for form generation

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

2009-11-17

svn co https://eulersharp.svn.sourceforge.net/svnroot/eulersharp/trunk \
       eulersharp 

My Philips webcam works with cheese!

Philips SPC 210NC PC Camera

But not with Empathy :(

Rules for form generation

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 ) .
} .

2009-11-16

http://linuxfund.org/projects/

Rules for form generation

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

2009-11-14

Deductive+Databases

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.

Rules for form generation

2009-11-13

Webcam on Packard Bell

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 :) .

Rules for form generation

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

2009-11-12

Aleph & Inductive Logic Programming

http://www.comlab.ox.ac.uk/activities/machinelearning/Aleph/aleph.html

http://www.cs.mu.oz.au/481/project/aleph/aleph_workshop.html

2009-11-05

Explanations about rules for form generation

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).

2009-10-30

Keyboard problems on ubuntu

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.

Prepare EulerGUI 1.4

Now it's always successful ! :)

[INFO] BUILD SUCCESSFUL
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 3 minutes 4 seconds

Grunt at subversive

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 ).

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

2009-10-29

Solved strange random errors in Maven tests for EulerGUI

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.

Pause in Drools-Joafip-EulerGUI integration

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

2009-10-25

Hyperlinks: ubiquity-xforms, Nepomuk, transmodel.org, ...

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

2009-10-24

10-Open-Source-Companies-to-Watch : : lessons to draw ?

http://www.voelter.de/conferences/index.html

Create a branch in EulerGUI for joafip + Drools

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.

2009-10-23

Adapt a persistent storage to Drools ?

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/

2009-10-22

EulerGUI : on semanticweb.org; group in French

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

EulerGUI

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)

2009-10-21

Trying Virtuoso RDF store, Open Source version

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).

Complete Kubuntu to Ubuntu migration

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

2009-10-20

Biological Collections software

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.

Generating XForms with EulerGUI

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).

Capturing desktop session for demos

recordMyDesktop is a desktop session recorder for GNU / linux.

Looking for tools for doing JavaScript animations

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/

Troubles with webcam Philips SPC210C on Ubuntu x86_64

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

2009-10-19

EulerGUI Jena output stack trace

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)

Generating XForms with EulerGUI

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.

Links: TAP, etc

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

Solving problems with 2 screens on Ubuntu

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

2009-10-16

Unix_way_of_sex = unzip; strip; touch; finger; mount; fsck; more; yes; gasp; umount; sleep

EulerGUI features

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

2009-10-15

Déductions & XForms

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 .

2009-10-14

The tests for N3 ParserJ4 from rdflib

The tests for N3 ParserJ4 have moved here :

http://rdflib.googlecode.com/svn/branches/2.4.x/test/n3/listTest.n3

EulerGUI feature: read plain XML from URL

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

2009-10-13

EulerGUI features

Detect RDF, OWL and plain XML

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 )

XML import

Enhanced XML import :

extracted XML Namespaces from plain XML source and transmit them with Schema location to Gloze.

2009-10-12

Déductions GUI rules: generate XForms

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

2009-10-11

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

EulerGUI new feature: XML Export

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.

EulerGUI is a hybrid creature

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

2009-10-09

EulerGUI new feature: XML Export

2009-10-08

Almost ready for EulerGUI 1.4 . I'd like to add XML export using Gloze .

Xorion : a CMS with XRX architecture

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

Communication

2009-10-07

Learning SPARQL

2009-10-06

Trying dbpedia

http://dbpedia.org/sparql?default-graph-uri=http%3A%2F%2Fdbpedia.org&should-sponge=&query=select+distinct+%3FConcept+where+{[]+a+%3FConcept}&format=text%2Fplain&debug=on&timeout=ĵĵ

2009-10-05

Trying Sesame 2.3-pr1 SPARQL server

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)

Trying Joseki SPARQL server

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:

http://localhost:2020/

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.).

EulerGUI new feature: calling SPARQL end point

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

Exploring SPARQL public endpoints

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.

2009-10-05

SPARQL Endpoints

http://www.pidgin.im/download/ubuntu/

2009-10-01

EulerGUI new feature: calling SPARQL end point

First shot at integrating SPARQL services like in Twinkle; see ARQ

Maven + Pellet

Added Thorsten's repository for Pellet in EulerGUI.

http://lists.owldl.com/pipermail/pellet-users/2009-June/003650.html

2009-09-30

http://protegewiki.stanford.edu/index.php/Protege4DevDocs

Got a very good answer by Thomas Schneider to my question "where are the implied individuals ?"

EulerGUI new features

Integrating Pellet

First shot at integrating Pellet: show class tree, show unsatisfiable classes

TODO

EulerGUI doc. date

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

2009-09-29

Trying DL queries in Protégé 4

http://protegewiki.stanford.edu/index.php/DLQueryTab

Trying Pellet SPARQL-DL queries with Pellet

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/

EulerGUI : change the description on main page

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.

2009-09-28

XML & XSD import : update

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:

EulerGUI: specifications

Open a form "Déductions style"

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".

Export whole project as XML

Not in "missing features"

Using Gloze, this feature is quite easy to add.

Export whole project as application

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

An equivalent Web application

TODO <<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

2009-09-27

EulerGUI: Reading plain XML files or XML Schema

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'.

Mail to Roberto G.

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

2009-09-25

Links: Java sources

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/

Maven ecosystem

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>

cimtool.org

Through Pierre Attar, I heard of CIM Tools:

http://www.cimtool.org/

add Maven config. in ReDeFer

add Maven config. in ReDeFer (not tested; for Maven build to work, it will need some directory changes in sources)

Crash with Jena 2.6.0 and HSQLDB

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!

2009-09-24

Now I'm commiter to ReDeFer on Google Code !

2009-09-23

Déductions: plain XML as RDF

Testing Redefer plain XML to RDF conversion

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

Problem with attribute namespace

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.

2009-09-22

Missing feature in Gloze: enumerations

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>

2009-09-21

Artificial Intelligence: Structures and Strategies for Complex Problem Solving : http://www.cs.unm.edu/~luger/ai-final/

triplr

http://triplr.org/

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?

EulerGUI instantiation: correction

For instanciating a Method call with a list as object, a resource was wrongly taken in account as a literal string.

Déductions GUI rules: migration after package change in EulerGUI

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

2009-09-20

EulerGUI : refactoring : moving Project and N3Source in a separate package

Alas this broke all the XML .n3p files.

Java instantiation in EulerGUI

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.

Trying rhizomik / Redefer project

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 ! :))))))))

2009-09-19

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/

Déductions GUI rules: migration to generic GUI platform

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.

2009-09-18

OWL API is available through Maven: http://owlapi.sourceforge.net/source.html

FuXi Builtin Predicates

Déductions: plain XML as RDF

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).

Trying to debug the output of Gloze

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 ...

Trying rhizomik / Redefer project

One more project, XSLT based, to convert from XML and XSD to RDF and OWL :

http://rhizomik.net/

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.

Examine XForms for integration with Déduction GUI rules

XForms specification

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>

2009-09-17

Jos De Roo on sf.net

Déductions GUI rules: migration to generic platform

See "Déductions: reflexions on multi-platform generation"

Links: Dbin

Dbin looks interesting as an example of Web navigation and annotating of an RDF database : http://www.dbin.org/overview.php

http://infomesh.net/2001/cwm/

No abstract classes in OWL:

https://mailman.stanford.edu/pipermail/protege-owl/2007-September/003823.html

Tried Gloze on a large XSD

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 ?

2009-09-16

Installing Sonar

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

http://www.squale.org/

I also applied for SonarJ (unrelated and non open source )

http://www.hello2morrow.com/products/downloads

2009-09-15

Exploring Jena

Exploring Jena code base

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.

Trying jena eyeball

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 ......

Amaya : features wished

3 features wished: copy & paste

Fuxi

Fuxi and N3 syntax

/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

Fuxi has moved

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/

See post "Updates to 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 .

2009-09-14

Trying SGML/XML with Yap

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 ).

sourceforge download stats KO

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.

Trouble with Philips Webcam SPC210NC

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

Links:

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/

2009-09-04

http://www.troposproject.org/

My program for "vacancies"

Announces for EulerGUI 1.2.1

Announce in the Protégé list

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.

User Manual, for EulerGUI

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 .

* Summary for AI researchers

Announce for the Drools list

[Announce] EulerGUI 1.2.1 + Déductions application generator

http://www.nabble.com/drools---user-f11823.html

http://www.nabble.com/-Announce--EulerGUI-1.2.1-%2B-D%C3%A9ductions-application-generator-td25298621.html

The preceding announce on this list was on february 23:

http://www.nabble.com/EulerGUI-released---IDE-for-semantic-Web-with-Drools-engine-and-Drools-export-td22164229.html

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.

The EulerGUI documentation.

Déductions is a Java Swing application generator from OWL models and N3 logic rules.

The User Manual for the application generator .

Announce for the PlanetMDE list

Announce for the news AI list

Announce for news:fr.comp.lang.java

Announce for LinuxFr.org

Annonce EulerGUI 1.2.1 sur LinuxFr.org

2009-09-03

Déductions generated applications : test and debug

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 cases for Déduction from Web

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

2009-09-02

Project Sequence : postProcessingURL was not taken in account when it's a relative URL.

How to find any eclipse source file

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

Converting UML 2 metamodel into OWL

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 :

http://dev.eclipse.org/viewcvs/index.cgi/org.eclipse.mdt/org.eclipse.uml2/plugins/org.eclipse.uml2.uml/model/UML.ecore?root=Modeling_Project&view=co

2009-09-01

I found where the settings are on kubuntu: in konqueror, open settings:.

See http://www.kubuntu.org/docs/kquickguide/C/ch04s04.html

2009-08-31

Instead of monitoring several forums and threads , it is simpler to monitor Jos De Roo's profile:

https://sourceforge.net/users/josd

Translating Java class into OWL

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.

Convert UML2 metamodel into 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

2009-08-30

https://sourceforge.net/search/?type_of_search=soft&words=rdf+uml

2009-08-28

OWL 2 with form generator: TODO

Google Summer of Code 2009

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

Prolog

Another Prolog in Java : http://www.binnetcorp.com/OpenCode/kernelprolog.html

http://www.cs.unm.edu/~luger/ai-final/index.html

Prolog design patterns

Ways of processing a list: http://computing.unn.ac.uk/staff/cgpb4/prologbook/node71.html

Some General Program Schemata

Bravo, Paul Brna ! ( 10 years ago )

I should buy this book: Artificial Intelligence: Structures and Strategies for Complex Problem Solving

2009-08-26

http://sewiki.iai.uni-bonn.de/research/gentl/example

UIMA

http://incubator.apache.org/uima/

http://gate.ac.uk/

Pyke, Logic Programming in Python

I saw this recent project that looks good:

http://pyke.sourceforge.net/

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.

Spell check in different language in Amaya

To change the language, apply a lang attribute to the text with the Attributes tool, and restart the spell-check procedure.

2009-08-25

Links: fresnel, etc

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/

Releasing EulerGUI with Maven

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/

2009-08-24

Conzilla - A Concept Browser

I tried through the Java Cache Viewer :

javaws -viewer &

But it didn't start without any message :( .

Mail sent to the project administrator.

Links: graph transforms, etc

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

Towards Concrete Syntax Patterns for Logic-based Transformation Rules, Malte Appeltauera and Günter Kniesela

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

Concrete vs. Abstract Syntax

By me:

Applying rules to form generation from OWL models


http://www.google.fr/search?hl=fr&client=firefox-a&rls=org.mozilla%3Aen-US%3Aofficial&hs=38t&q=grap%C4%A5+transform+logic+rules&btnG=Rechercher&meta=

Temporal Graph Queries to Support Software Evolution

Handbook of Graph Grammars and Computing by Graph Transformation

Towards Model Transformation with TXL

From Graph to GUI: Displaying RDF Data from the Web with Arago

Towards Graph Transformation based Generation of Visual Editors using Eclipse


MDWE 2008 - Model-Driven Web Engineering

A Mapping Language from Models to DI Diagrams

On Model Transformation and Graph Transformation, Tom Mens,
   Service de Génie Logiciel, Institut d’Informatique,   Université de Mons-Hainaut : READ!

Refactoring of UML models using AGG

Code Generation Network - Generators for MDA

Tiger Project

The Tiger Project (Transformation-based generation of modeling environments) is a tool environment that allows to generate an Eclipse editor plugin based on the Graphical Editing Framework (GEF) from a formal, graph-transformation based visual language specification. Moreover the Eclipse JET engine is used for generation.

Conzilla - A Concept Browser | Overview / Conzilla - The Concept Browser browse

Not found freely:

http://www.springerlink.com/content/l31200735ml16781/

EulerGUI mailing list management at sf.net

I had to set a mailman password. For that I had to go to "admin/features".

N3 refactoring: extract part of antecedent

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:

  1. rewrite the begining of antecedent 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;

  2. to leave the rule base logically unchanged, add this rule OR" :
    { 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 . } .

Déductions generated applications : choice of a subclass

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.

Problem with Drools recompilation

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)

2009-08-21

Déductions generated applications : choice of a subclass

The text field and the focus lost listener both come from the same reason: a property value must be updated by the user.

2009-08-20

Rules about rules with Euler / Eye

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 :

http://eulergui.svn.sourceforge.net/viewvc/eulergui/trunk/eulergui/examples/add-properties-from-rules.n3

{
  ?A => ?C .
  ?A log:includes { ?SA ?PA ?OA } .
  ?C log:includes { ?SC ?PC ?OC } .
} => {
  ?PA a rdfs:Property .
  ?PC a rdfs:Property .
} . 

Déductions generated applications : choice of a subclass

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

2009-08-19

Déductions generated applications : choice of a subclass

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.

Memory analyser

Maven eclipse integration

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"

N3 syntax for jEdit

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)

2009-08-15

RDFS to OWL conversion - food example

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.

2009-08-14

Déductions generated applications

2009-08-13

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

2009-08-08

Article for OWLED 2009

I gave it yesterday at the last minute !

Applying rules to form generation from OWL models

FOAF: when owl:Thing is specified as a placeholder

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.

2009-08-05

RIF_Working_Group at W3C

Corese Tutorial

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/

Team EDELWEISS INRIA

A community written in Java ! :)

Eclipse [3] is an open platform for tool integration managed by an open community written in Java [19].

Déductions generated applications

2009-08-04

Déductions generated applications

2009-08-03

http://www.aaai.org

Déductions generated applications

2009-08-02

Generate readable diagrams

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:

Drawing graphs with dot .

Déductions generated applications

Notes:

2009-07-31

Déductions generated applications

2009-07-30

A concurrent to N3, and JSON: http://www.yaml.org/

Déductions generated applications

TODO :

DONE

2009-07-29

Downloaded Firefox Minefield from:

http://ftp.mozilla.org/pub/mozilla.org/firefox/nightly/latest-trunk/

2009-07-28

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

2009-07-27

Déductions generated applications

2009-07-26

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).

2009-07-24

TODO EulerGUI: give (facultative) name to projects

2009-07-23

Misc. link on RDF, OWL

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/

XForms

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

RDF Forms

Ten XML Schemas you should know

https://www.ibm.com/developerworks/xml/library/x-schematips/

2009-07-21

Isaviz: /usr/share/fonts/X11/75dpi/

http://www.learnprolognow.org/

Resource for linking in the web of data http://sameas.org

Déductions generated applications

Idea: JCHR

Instead of Drools, JCHR could be used for inferring forms in Déductions generated applications. But there no examples with Java user classes.

Update

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:

2009-07-20

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

Idea : intelligent window manager

The use case:

Add Fuxi inference engine in EulerGUI

Trying CHR as a production rule system

Classical monkey and banana problem, illustrates how CHR can be used as a fairly efficient production rule system.

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

2009-07-17

Updated a Déduction+and+EulerGUI+Blog

2009-07-16

TODO

Déduction generated application new architecture

Connecting Focus lost events.

2009-07-15

Hosted XML Database Solution ? We provide supported hosting of eXist XML Database!

http://www.webcomposite.com/host.html

OWLED 2009 - OWL: Experiences and Directions

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

2009-07-14

Links : B method, etc

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

2009-07-06

http://en.wikipedia.org/wiki/Graph_rewriting

I have to be here:

http://semanticweb.org/wiki/Tools

Generating XML from RDF

???? TODO

RETE engines in Phyton

http://www.mindswap.org/~katz/pychinko/

Drools N3 engine: Duplicated triples

Implemented something for "Duplicated triples with Drools engine"

cf http://eulergui.wiki.sourceforge.net/page/edit/A + D% C3% A9duction + and + + EulerGUI Blog? token = 27a713ef5247da534b80e1321b9165e4

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.

2009-07-04

CALO, Cognitive Assistant that Learns and Organizes

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 )

Spark In A Nutshell

The tones project

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

OWL 2

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.

2009-07-03

Drools N3 engine

What

I attack to something I left out for months:

Duplicated triples with Drools engine

cf http://eulergui.wiki.sourceforge.net/page/edit/A + D% C3% A9duction + and + + EulerGUI Blog? token = 27a713ef5247da534b80e1321b9165e4

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.

How

Pave the way by slitting the output in 4 string buffers.

2009-07-01

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/

2009-06-29

http://www.defeasible.org/ruleml2009/who

The Sourcerer project

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

http://sourcerer.ics.uci.edu/

Inference engine with database access

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:

2009-06-28

CommonKads course slides:

http://www.commonkads.uva.nl/INFO/course-slides/

Explanations on N3 + Java in Déductions generated applications

There are 2 way of translating the N3 result into Java :

  1. a batch simple translation of instantiations, property assignements, and method calls into JavaScript; this happens (in class Instantiator) after rules firing;
  2. a hook into the translation of N3 rules into Drools rules, by which this Java is executed during rules firing; this allows to manipulate the Working Memory (insert, retract)

Building Protégé from sources

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 !!!!!!!!!

web_protege

Proposals for the Protégé team

Use RDF/turtle format instead of XML or Java properties files

Example: portlet definition file, project file (.pprj)

Leverage on semantics and rules for Java insfrastructure

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 :

  1. ease the unification of Protégé 3 and 4
  2. create a larger common code base for Protégé Swing GUI and Protégé Web, by leveraging the similarity of concepts
  3. move towards ontology based software design

To ease the porting of Protégé 3 plugins to Protégé 4, maybe also an ontology based approach could be appropriate.

Compare Euler Eye engine and Drools N3

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

2009-06-27

sudo dpkg --install amaya_wx-11.2-pre4-1_amd64.deb

TODO Déduction form generation new architecture

Trying Sindice

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'

Back from Protégé conference 2009 in Amsterdam

I learned much new stuff:

Met many people nice people:

2009-06-21

UML Textual (UMLT)

Working with Luc on UMLT input in EulerGUI.

2009-06-20

I should take time to read Adam Pease's publications:

http://www.adampease.org/professional/

Tried opencalais

This web interface, from a NL sentence, marks it with RDF statements for the words it recognized.

http://viewer.opencalais.com/

Mostly Proper Nouns are recognized.

This can be complementary to Attempto.

Open Mind Common Sense

If I had time, I'd make an account and play with Open Mind Common Sense :

http://openmind.media.mit.edu/

2009-06-18

Readings about logic

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

2009-06-17

Déductions app. generator: calling user Java code

Updated

http://deductions.svn.sourceforge.net/viewvc/deductions/html/unification.html

added "Calling user Java code"

2009-06-16

http://developers.sun.com/learning/javaoneonline/j1online.jsp?track=javase&yr=2009

Ontology links

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/

2009-06-13

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

2009-06-12

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

2009-06-10

Twitter message

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.

2009-06-08

Trying Protégé 4.0.111 with an N3 file

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".

Déductions: mixing languages in rules

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.

e-commerce demo.

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

My first FOAF description

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

2009-06-04

The 6th Annual European Semantic Web Conference (ESWC2009)

SMILA - SeMantic Information Logistics Architecture (eclipse)

Knowledge_Interchange_Format (KIF)

Déductions: testing new generated GUI

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

2009-06-02

Sound is silent on Ubuntu

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

2009-06-01

CouchDB

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

Idea: Using Déduction Forms for creating a Déduction application

Software categories

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?

2009-05-27

Testing APE (ACE, Attempto)

With the command line

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 .'

With the Web client

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

Oslo

Microsoft modeling strategy: Work in progress

http://searchsoa.techtarget.com/news/article/0,289142,sid26_gci1333523,00.html

Conferences

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

rmll.info

IWOCE2009 - Open Component Ecosystems

Making invitations for his seminars in Paris

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#

Changing status on LinkedIn

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

2009-05-24

Misc. links

http://semantic-conference.com/2008/ataglance/index.html

sat4j.org

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 ?

Guice dependency injection

Reading

http://code.google.com/docreader/#p=google-guice&s=google-guice&t=Motivation

Updated EulerGUI summary and categories

https://sourceforge.net/project/admin/group_trove.php

Compare modelization OWL UML

Lots of interesting stuff with these search words, including my home page :) .

http://www.google.fr/search?q=compare+modelization+OWL+UML&ie=utf-8&oe=utf-8&aq=t&rls=com.ubuntu:en-US:unofficial&client=firefox-a

2009-05-23

Tidying HTML

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.

2009-05-21

Uploading stuff to Maven central repository

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

2009-05-20

Setting computer clock time on Ubuntu with ntpdate & NTP time server

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.

Misc. links

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

2009-05-19

RDF databases and applications built on them

It's interesting that Amabra / Topaz uses Trac for its bugs management !

Sesame, Mulgara, Redland, ...

Groupware

http://java-source.net/open-source/groupware

Language Comment
libresource

Java
PHPGroupware PHP

Bug tracking systems

http://java-source.net/open-source/issue-trackers

Language Comment

Trac

Python looks good, many features and users

codendi

? supposedly Open Source, but looks like a closedsource software

redmine

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

flyspray

PHP apparently no documentation
scarab Java from the same forge as ArgoUML

2009-05-14

Group comp . lang . java . programmer

announce: EulerGUI 1.1

2009-05-12

Oracle bought Sun and Java:

http://www.oracle.com/us/corporate/press/018363

Input file for EulerGUI

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 .

Déductions: reflexions on multi-platform generation

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 .
?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 .
} .

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.

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 .
} .

2009-05-08

http://www.student.dtu.dk/~s042078/magicrescue/manpage.html

Tasks

TODO

2009-05-05

Challenges

RuleML Challenge

http://www.defeasible.org/ruleml2009/cfp.txt

2009-05-04

Former LinkeIn header:

Jean-Marc extends the Deductions frameworks for GUI generation to inheritance and adding pointers to a selection of objects.

2009-05-03

I should add my projects to http://swik.net/

GATE summer school 2009 July 20th - 31st 2009 - University of Sheffield http://www.gate.ac.uk/conferences/fig09/

Deductions

Command-line User Interface

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.

Design GUI - KB architecture

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:

  1. do as much as possible in rules, avoiding ad-hoc Java code
  2. subscribe to events in a generic way on a whole component tree or application, much like Abbot does
  3. manage the heterogeous content of the KB: the user data + current GUI objects

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.

Proposed change: dynamic KB

Currently the relation between the KB and generated GUI objects is "fire and forget". To enable inferences on the GUI objects we want to keep the same KB for the whole user session.

The user events considered are classical: Statements such as :
 ?X :createFormFromResource ?RESOURCE
will 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.

Migration path

A variant of the GUIHelper class, deductions.runtime.GUIKBAdapter, will forward the relevant events to the KB. This can be done via introspection. There will be no decisions made in this Java code, just verbatim forwarding of the event properties. Related to the event forwarding, the enhancement is that now the binding of the event actions is not done in Java code, but through rules. A variant could be to use an event recorder like Abbot. Anyway the event actions will be GUIKBAdapter , so the loop is closed. For the 4 user events considered the rules in the KB will do the job (from a user p.o.v.) : Three other packages will be created: As new packages are used, a branch in Subversion is not needed for EulerGUI. However for Déductions ( the N3 models and rules ), due to numerous hyperlinks existing, a branch and a tag in Subversion is needed, or a new directory like n3/gui .

Tests

The class deductions.runtime.GUIKBAdapter is really stupid. However, one can test the correct translation of Java GUI events to a list of N3 statements.

The main thing is testing the rules in the KB for the 4 user events considered. This can be done (bypassing GUIKBAdapter) by adding statements to the KB corresponding to the user events, firing rules, and checking the KB.

The Java instantiator must also be tested for:

Finally, the N3 Drools engine needs more testing, notably the implementation of the CWM and Euler builtins.

2009-05-02

Trying the music in command line:

http://wiki.xmms2.xmms.se/wiki/Using_the_application

2009-04-30

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/

2009-04-29

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 )

2009-04-28

Problems with Maven release:perform

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.

2009-04-27

Downloaded http://sourceforge.net/projects/weka/

Using Abbot on EulerGUI

http://abbot.sourceforge.net/doc/overview.shtml

2009-04-26

serach : "ergonomic UML editor"

UMLT == UML Textual

I wrote the first shot of a BNF grammar:

EulerGUI demo. : Facebook rules

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.

EulerGUI release

2009-04-25

Sesame first steps

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)

N3 rule to change a literal type ?

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 .

aaai08 proceedings available !

http://www.aaai.org/Library/AAAI/aaai08contents.php

Trying OpenCyc OWL Web interface

http://sw.opencyc.org/

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

2009-04-09

Déductions

New use case

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".

Developers' training

Seminar " computer specialist "

Themes to add to current presentation: architecture.odp

2009-04-08

Trying Twinkle SPARQL GUI on DBPedia

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

morla rdf

Tried to install Morla RDF, but that doesn't compile on KUbuntu :( . Sent a mail to the list.

2009-04-07

Integrate ACE (Attempto) in EulerGUI

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

Slides presented at TAO Industrial Workshop

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.

2009-04-04

In RDF class membership (rdfs:type) is just another property .

Discussions on OO (Object Orientation) versus DL (Description Logics)

What are the advantages of ontologies over UML?

http://www.linkedin.com/groupAnswers?viewQuestionAndAnswers=&gid=49970&discussionID=2211887&goback=.anh_49970

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:

http://www.cs.york.ac.uk/puml

Model Driven Engineering on http://planet-mde.org

Added new mailing list for Déductions

https://sourceforge.net/mailarchive/forum.php?forum_name=deductions-user

2009-04-01

Connect on SourceForge with ssh

ssh -t jmvanel,eulergui@shell.sourceforge.net create

2009-03-29

OWL definition in RDFS : http://www.w3.org/2002/07/owl

Testing RDFS to OWL conversion

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.

2009-03-27

add rdfs_owl-rules.n3 for rdfs to owl conversion

(similar to UML to owl conversion),

plus a test project

Public repository for reusable models ?

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 :

http://swoogle.umbc.edu/

http://olp.dfki.de/ontoselect

http://www.schemaweb.info/

But maybe there are projects and sites I'm not aware for OO models ?

2009-03-26

Searched:

owl rdfs models public repository

owl rdfs search engine

Working on the UML--OWL rules.

Maven extra sources and eclipse

the schema for Maven pom.xml

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.

2009-03-24

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

Searching for a generic XMI parser

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.

2009-03-23

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

Idea for rules applied to UML

detect all association cycles : they are suspect

Problems with Maven repo. for eclipse

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

XMI to N3 translator

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>

generic emf factory for any URI

Sent to the EMF newsgroup:

http://www.eclipse.org/newsportal/article.php?id=40335&group=eclipse.tools.emf#40335

UML input integration in EulerGUI

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

2009-03-21

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

XMI to N3 Converter

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 .

EulerGUI Demo.

to add to Demo: show annotation of an existing resource that interacts existing rules: e.g. "good customer" => "send reward"

Reading and thinking on EMF

2009-03-20

Upgraded to

2009-03-19

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

Create Your Own IRC Channel

http://www.irchelp.org/irchelp/irctutorial.html#part3

I wait for an answer here:

http://groups.google.com/group/fuxi-discussion

Déduction architecture

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 .

Design Java - N3 mixin

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.

???????????

Tried Netbeans profiler on Parser4J ( NetBeans eclipse comparison BTW)

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:

  1. different source folder folder are compiled in the order specified
  2. as in Maven there is a distinction between test source and application source

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.

2009-03-18

I'd like to have time to read Jan Wielemaker's PhD thesis, titled Logic programming for knowledge-intensive interactive applications .

Mixed paradigm architecture for Déductions updated

??????????????????????

Building IsaViz from sources (RDF editor)

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.

2009-03-16

Installing eclipse 3.5 M6

http://www.polarion.org/index.php?page=download&project=subversive

2009-03-16

http://en.wikipedia.org/wiki/MapReduce

Development plan and status for Déductions updated

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 :) .

2009-03-15

http://eulersharp.svn.sourceforge.net/viewvc/eulersharp/trunk/2006/02swap/euler.yap?sortby=date&view=log

Lazy load of jars - Maven ?

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/

2009-03-14

http://mind.sourceforge.net/

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

Déductions : debug inheritance in forms

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.

2009-03-13

Yesterday demo. and presentation of Déductions and EulerGUI in Versailles:

2009-03-12

Ideas for Euler GUI

Misc. : pres. on rule-based programming, Science Commons, etc

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://2009.ruleml.org/

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

2009-03-11

drools-50-cr1 is out !

Tests with Drools engine + new N3 parser

Now passing:

deductions/n3/java_projection-test.n3p

2009-03-10

Déductions generated GUI

missing feature: set default values for properties

Integrating new N3 parser with Drools engine

Integrity Constraints

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.

2009-03-09

Search on JUnit+parallel

Discussion with Pieter Van Gorp - grabats 2009

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

2009-03-06

Ideas : JoaFip, EMF, JSR94

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

LinkedIn current status

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.

2009-03-05

Challenges of Deduction project: calling Java

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 :

  1. there is IDE help for developing this "augmentation code"
  2. regenerating the application from rules and specs will break as little as possible the "augmentation code"

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 ?

EulerGUI : Drools engine - findall

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:

2009-03-04

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

2009-03-02

http://www.journaldunet.com/contact/contact.shtml

EulerGUI Generated application

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

Test VNC - serveur Linux, client Windows UltraVNC

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:

http://www.generation-linux.fr/index.php?post/2008/06/20/121-prise-de-controle-d-un-poste-a-distance-avec-vnc

http://doc.ubuntu-fr.org/vnc

2009-03-01

Thought about application in domotics of the "comprehension without protocol" principle

Deductions: to do before wednesday demo.

EulerGUI: Current data binding partipating classes

This is ugly; will have to clean after wednesday demo.

2009-02-27

TO READ: jena sesame model

Deduction runtime: storage

TODO

2009-02-26

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

2009-02-25

Reaching out onto the Web

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

2009-02-24

Proposal for a vocabulary for RDF projects for development tools

???????????? TODO

Announce of EulerGUI 1.0

Announce on news:comp.lang.java.announce

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 !

Misc.

Trouble with SF.NET (Sourceforge) Download:

https://sourceforge.net/tracker/?func=browse&group_id=1&atid=200001

news://fr.comp.lang.java

(moderated) http://groups.google.com/group/comp.lang.java.announce/topics?gvc=2

Drools users list

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 ?

Ideas

2009-02-23

EulerGUI doc. COMMIT for release:

Problems with Maven release:prepare solved

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:

2009-02-22

http://eulergui.wiki.sourceforge.net/

http://www.jboss.org/drools/sightings.html

http://www.blogger.com/home

Problems with maven-assembly-plugin + jar-with-dependencies

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

2009-02-19

added GUIgenerator.html, a user manual for the Deduction GUI generator;

TODO : explain internal design

2009-02-18

Drools bug ?

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 !)

2009-02-17

On the path to a Drools bug

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:

  1. the facts include:
    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>" )
  2. so, according to Criteria C1 and C2 in rule "0", every Triple object whose predicate is rdf:type and object is java:javax_swing_JPanel should entail insertion in Working Memory of a corresponding TripleResult
  3. rule "1" was writen to debug things, and tests directly the same conditions as point 2, and asserts a TripleResult object including the original subject of the Triple on the LHS

Now, 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

2009-02-12

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.

Problem solved with Drools

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 ).

2009-02-11

Testing APE

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.

Debug with Drools

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_> :)

Drools engine for N3 logic: Drools interrogations

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 ?

2009-02-08

Drools engine for N3 logic

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.

2009-02-07

Workshop on Controlled Natural Language (CNL) 2009

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.

EulerGUI project

Drools engine for N3 logic

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:

Use N3 format ( TODO )

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 ...

2009-02-06

SQL humour

Astronomy : select * from *

Politics : select idiots from ambitious

Handicraft : create table from_precious_wood

Drools engine for N3 logic applied in "Déductions" GUI generation

Current situation

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.

Missing features and plan

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:

  1. rework the current JavaScript+Java instanciation code, maybe use Drools, as this is second order logic plus default processing, and N3 logic cannot do that;
  2. rework the current hand-made N3-->Drools translation code

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.

Redesign the JavaScript+Java instanciation code

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.

2009-02-05

Drools

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' )

2009-02-04

Prolog SWI - Yap compatibility

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

2009-02-03

Download SWI Prolog source from new server:

git://prolog.cs.vu.nl/home/pl/git/pl-57x.git

Debugging my rules for GUI construction

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

euler_gui_nri

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

euler_gui_nri expand all forms

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 .
} .

2009-02-02

Debugging my rules for GUI construction

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 .

Tests

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 .

Ideas and remedies

  1. remove the unused stuff (see above)
  2. use a Description Logic engine such as Pellet to compute the class hierarchy
  3. split the inference into 3 steps, storing an N3 file at each step:
    1. compute a "generic" GUI following gui_generic.n3 (high level, no explicit labels, text fields and buttons)
    2. compute a "convergence" GUI (low level, compatible with Swing, RCP, HTML, Qt: explicit labels, text fields and buttons)
    3. compute actual Swing GUI
  4. I made a recursion to generate form and sub-forms starting from the "edited Class", the starting point of the data managed by the application; it is not necessary; I can generate forms for any class, reached or not by the application
  5. also, I need to start using my Drools N3 engine in the generated application, as this is easy to package; it would manage business validation rules, and step 3 or more
  6. simplify query : see below

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.

2009-02-01

Test OWL Inconsistent ontology

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.

Debugging my rules for GUI construction

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.

2009-01-31

Tidy EulerGUI

Now that Luc Peuvrier is here, I need to tidy all I can :) !

2009-01-29

Déductions - GUI generation : popup frame for object properties

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:

Trying a large OWL with Déductions GUI generating rules

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/=

2009-01-28

Marc Godin is studying fishes :

Only dead fish swim with the stream.

Déductions - GUI generation : data binding

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

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?

2009-01-25

N3 block comment

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
""""].

2009-01-23

Déductions - development plan

I take the opportunity to write the development plan as an N3 document.

Development plan for Déductions as an N3 document.

Experimenting with e:findall in Euler

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.

Open an N3 ontology in Protégé 4

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é:

gui_generic ontology in Protégé

2009-01-22

Euler suggestions

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 .

2009-01-21

Customer with existing Access application

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/

2009-01-20

Found through nice Amarok pre-defined Radio fluxes: Radio: 1Club.FM - Blues Classics Channel 65k MP3 - http://78.129.227.106:8028

Déductions - GUI generation : work on subclasses

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 .

EulerGUI - documentation

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.

Errors in Euler / EYE (new stand-alone Yap engine)

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.

2009-01-19

EulerGUI - integrated new Prolog self sufficient 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 .

Déductions - GUI generation : work on subclasses

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

2009-01-18

Déductions - GUI generation : implement Property details

COMMITED:

This is what I get today with the purchase order test :

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.

2009-01-16

Déductions - GUI generation : purchaseorder.owl

Working on EulerGUI project test_order.n3p , including ontology purchaseorder.owl .

COMMITED

ISSUES

JDK7, FAM

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.

Misc. confguration: NTP, SMTP

The Property - Class graph

domain, range, subClassOf, subPropertyOf

2009-01-15

Déductions - GUI generation : splitting rules

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

2009-01-14

Déductions - GUI generation driven by logic rules

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).

2009-01-13

For some reason files on the SVN repository were executable: remedy:

svn propdel svn:executable *.n3
svn commmit

Déductions - graph transform driven by logic rules

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.

Using RDF ID when no rdf:label - Generated GUI - déductions

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" ;

2009-01-11

Generated GUI - déductions

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.

EulerGUI - TODO - new window

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.

2009-01-08

Slowly emerging after a cold ...

Deductions architecture

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

2009-01-05

Looking at RDF Java API : jrdf

They claim to have taken inspiration from Sesame and Jena .

http://jrdf.sourceforge.net/0.5.5.4/doc/javadoc/index.html

2008-12-24

Deductions architecture : generate other GUI's than Swing

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 .

2008-11-11

Translating N3 into Drools language

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

2008-11-06

Dialog on the Drools IRC

<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

2008-11-02

Deductions project

Advanced JavaScript within JDK

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)) {

2008-10-19

Deductions project

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 :-) .

First Application generated by Deductions

One of the goals is to remake the Euler GUI application with the Deduction technology.

2008-10-07

Deductions project

Reading N3 logics specification

Saw interesting features: N3Document, definitiveDocument, definitiveService .

Write non-regression tests

Componentization of software file search feature

Jedit

Google Chrome

Not really much memory saving than Firefox.

Some nice features:

My grips:

My suggestions

2008-08-24

Trying CWM proof checker

% export PYTHONPATH=~/apps/cwm-1.2.1
[jmv@localhost]~/apps/cwm-1.2.1% python swap/check.py

2008-07-07

Euler N3 reasoner

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.

SWI Prolog

I used threads to accerate on a 4 core machine. I learn XPCE.

2008-05-19

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

2008-05-08

http://demo.openlinksw.com/rdfbrowser/

Is there an editor for N3 including rules ?

Euler notes

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

2008-05-04

Building Protégé 4 from SVN

http://www.cs.man.ac.uk/~iannonel/eclipseSetup/eclipseBuildAndRun.html

2008-05-01

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/

Installing Coq on Fedora

sudo yum install ocaml
sudo yum install LablGTK
sudo yum install camlp4
./configure; make world; sudo make install

Workflow for a DL + Prolog framework: trial of Euler

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: ???

Questions on Euler

Notes

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 $*

Questions

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.

The good servant: example

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.

2008-04-20

general concept inclusion (GCI) .

Reading this article:

Description Logics as Ontology Languages for the Semantic Web

Franz Baader1 , Ian Horrocks2 , and Ulrike Sattler1

Trying tabled Prolog: XSB

% 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

2008-03-29

Trying Sigma Kif Web application

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/

Programming advice: let the semantic be explicit

Why?

How?

Representing weight in FOL

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] :

weight( bunchOf(S) ) = Σ s S weight ( s )

and to enter enough mathematic knowledge to make Prover9 infer this:

∀s ∈S, weight ( s ) C weight ( bunchOf ( S ) C . card ( S )

and then

weight ( bunchOf ( S ) / C card ( S )

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 !

Upper ontologies

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.

SUMO

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)))))

2008-03-22

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]

2008-03-19

knowledge representation substance fruit individual

OCL and First Order Logic

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.

Prover9 : how to recover the answers

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


2008-03-09

CHR

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".

Blog versus HTML site

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.

2008-03-02

CHR, SQL+ XSB

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 .

2008-02-17

CHR

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

2008-02-03

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

2008-01-28

Intentional programming; describing libraries formally in term of functionalities

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:

  1. features and functionalities (the intention) by aligning with WordNet, OpenCyc, or OWL ontologies;
  2. one or more typical sequences of calls ( e.g. a Protocol State Machine in UML 2 )

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/

2008-01-27

http://martinfowler.com/dslwip/

My gnuplot tricks

set samples 1000
set grid
plot [-5 : 5] [-10 : 10]  1/x -1 +4*x**2  title "pour Marie"

Table of contents