Semantic Java is a Java library that will allow people to use all the Semantic Web technologies in Java, and in other object-oriented languages if we copy the code into those languages: OWL, SPARQL, rules, and Semantic Web Services. It makes object-oriented programming a lot more powerful. When writing object-oriented programs, people can use the OWL data model, which is markedly more powerful than the object-oriented data model currently. We can indeed use all the OWL reasoning in object-oriented programming. We can currently run SPARQL SELECT queries on all of Java's main memory, albeit indirectly. The other types of SPARQL queries and rules should be close to running on all of main memory. We may be able to make methods into Semantic Web Services. We can currently translate Java and RDF back and forth. So we can post all Java data directly on the Semantic Web. If we copy the code to other object-oriented languages, we can post that data too. People often have means of getting object-oriented data from relational data, so we can post that relational data too.
There is a deep connection between OWL and object-oriented programming that other software has sometimes used, but not to the fullest extent possible. OWL and OOP correspond by having object-oriented classes be OWL classes, object-oriented attributes be OWL properties, and object-oriented packages be ontologies. The software treats class membership as unary predicates, as in the Semantic Web, and object-oriented attributes as binary predicates relating two entities. It interprets all object-oriented data as being logical statements. The attribute is the predicate, the object with the attribute is the first argument to the predicate, and each value of the attribute is a second argument to the predicate. So in Java, if an attribute is a Set, it is a set of logical statements. When a List or array is used in an attribute, sometimes what is really meant is a set of logical statements, and sometimes what is really meant is an ordered list like rdf:List. Of course, the Semantic Web has means of representing lists in logic.
Object-oriented programming simply is logic. Classes are really the same in OWL and OOP: categories with members, with subclasses. They can both be interpreted as unary predicates. OWL properties and object-oriented attributes are the same: binary predicates relating two entities. Object oriented languages already have a lot of the OWL data model implemented: classes, properties, and rdfs:subClassOf reasoning. If we make this connection, then we can simply add the rest of the OWL data model to the object-oriented data model to make it better. All object-oriented libraries are already ontologies. We can add as much semantics to them as we like.
The rest of the software is under development, though the part that lets us post Java data on the Semantic Web should be ready to use. To use that part, all you need to do is download the software and read the top of the documentation page. There is an article explaining the rest of the software. Or see the example program.
To learn about the Semantic Web, you can see the resources on this page. People should really like using the Semantic Web in OOP, as it really expands OOP.
The entire RDF, RDFS, and OWL ontologies have been translated into Java; see the packages beginning with "org.w3" in the source code and Javadoc. So we can write ontologies entirely in Java. The entire OWL-S, WSMO-Lite, Dublin Core, and FOAF ontologies have been automatically translated without loss of information, on the ontologies page. You can translate your ontology into Java and try the software. All the property reasoning is working with attributes, as you can see in the example program. The rdf:type reasoning is half-way working for all the restrictions.
See the SourceForge page for discussion, or email Timothy Armstrong at firstname.lastname@example.org. Any feedback would be deeply appreciated! The software is an alpha release until I can get some feedback on it.