- From: Timothy Armstrong <tim.armstrong@gmx.com>
- Date: Sat, 15 Sep 2012 11:30:22 -0400
- To: semantic-web@w3.org
- Message-ID: <50549F0E.6070202@gmx.com>
Hi,
Thank you very much for the replies. I appreciate them very much. Oh, I
think it's very simple: we can just make object-oriented programming
better than it currently is. We let people use property reasoning for
any of their object-oriented attributes. We let them run SPARQL queries
on all of main memory. We let them use rules (I explain a bit below how
that will work). I have in mind to let people write Semantic Web
Services entirely as Java annotations on Java methods without having
anything to do with WSDL. Do you think that would work? Java
annotations would have to support having arbitrary datatypes as values,
but they should anyway, and we could try to get it added to Java (it
would be useful for everyone who uses Java).
My understanding implementing the code in Java was always that we would
be somewhat limited with what we can do with classes because of
multiple-inheritance issues, but that it would be easy to copy my code
to other object-oriented languages that do have multiple-inheritance.
My view now – though I could be wrong here – is that we can implement
OWL defined classes in Java and use them just for the purpose of testing
if a Java object belongs to a class, and for finding all members of a
class, without issues of multiple inheritance arising. I thought it
would be very useful to have methods for defined classes, but we would
not need to have them.
> I agree your approach is useful when semantifying the OO world. But if
> I can achieve the same end result in plain Java (using Jena and our
> own platform), why should I use an extra layer of software (given the
> above points)?
>
Well yes, that really is my main purpose: letting people use the
Semantic Web in object-oriented programming – well, with object
databases, object-relational databases, and object-relational mapping
too. I'm sure your points are very valid. Just what I was trying to
get at in my last post is that my software, or software like it, should
offer certain performance advantages over Semantic Web software that
stores its data as whole triples. All my software needs to do when
making a triple statement is add a Java object to a Java Collection
instead of creating and storing a whole triple. I'm very confident in
my benchmarks now: http://www.semanticoop.org/benchmarks.html. It takes
Jena 10,894 milliseconds to make 50 owl:topObjectProperty statements
each for 20,000 subjects, Sesame 20,953 milliseconds, and my software 41
milliseconds. The numbers come out extremely similarly for each run of
the program. Well, as I said, I like Jena and Sesame very much, and
I'll probably want to integrate them with my software.
> However, you need further reasoning capabilities (e.g., you will want
> to obtain that a is a cousin of b if you have that c is a parent of a,
> d is a parent of b, and c and d are brothers.) And you cannot add this
> through ad hoc functions in your classes, or you will soon have an
> undebugable spaghetti mess of contradictions. You need something like
> a rete network. And then, either you add it to the innards of java, or
> you duplicate your code (and its implicit logic) in the network.
>
Well, cousins was my example for owl:propertyChainAxiom. Here is the
hasCousin property/attribute:
@ObjectProperty
@label("hasCousin")
@comment("The cousins of a person. It is a subproperty of hasRelative.
It is symmetric and irreflexive. It has a property chain axiom: a
person's parents' siblings' children are the person's cousins.")
@domain(Person.class)
@range(Person.class)
@Symmetric
@Irreflexive
@propertyChainAxiom({hasParent.class, hasSibling.class, hasChild.class})
@subPropertyOf(hasRelative.class)
public @interface hasCousin {}
My tests pass with the current version of the family ontology, but there
was a problem with a previous version. So we can do that form of
reasoning in Java, it just has to be debugged.
Here is how I have in mind to do rules. For each rule that is active in
the system, a certain number of subject-predicate pairs will show up in
the consequent when the rule is fired. So when we are trying to find
all the objects of a given subject-predicate pair, which is a Java
Collection that is an attribute, and the pair is in the consequent, we
fire the rule.
Again, thank you very much for your replies.
Tim
http://www.semanticoop.org
Received on Saturday, 15 September 2012 15:30:51 UTC