Hmm... I have got my own point of view on that first of all SWRL is not part of OWL specifications so it abstracts out of Description Logics. SWRL represents FOL and in particular Horn Logic, so You may have some problems merging these two forms of representations. By this I mean that the reasoning with DL is perform by other reasoners than the SWRL reasoning. For the first I often use Pellet or HermiT and for SWRL, JESS (the only one I found with full Protégé integration). The problem with reasoning in SWRL is that the results of reasoning are treated in Protégé as asserted statements. Let me explain: if I develop ontology using DL and SWRL when I press reasoning for DL I will get clear separation of asserted and inferred facts. When I perform reasoning for SWRL statements the reasoners will infer some facts and push them into DL knowledge base as asserted and this may case knowledge base inconsistency! So You should remember about it, because DL is not aware of the SWRL statements and most of all expressiveness of the languages is rather different. Many sources discard this issue and I think it is the major problem with fusing OWL and SWRL especially when You implement strong ontological commitments (e.g. disjointness).
In my research I have used SWRL to perform k-tuple reasoning where Description Logic fails because the language cannot express certain types of statements. If You need some examples I can provide them in form of OWL and project (Protégé) files.
I have used Jess only with Protege 3.4.X. I am almost sure that Protege 4.X do not provide plugin for integrating SWRL with Jess Engine. Protege 3.4.X is able to integrate with additional plugin which after configuration gives You the ability to reason with SWRL. Perhaps the makers of 4.X version in correspondence to OWL 2.0 RL decided to support that dialect instead of SWRL.
I am currently desinging some ontoogies with very narrow application of SWRL rules for continuous value classification. I use SWRL in only such these cases where I need to determine if x is in some interval - after that I place an instance in the DL KB assigning the newly inserted value to specific individual.
Example:
the mass of the car is 2750kg - rule states that mass above 2500 kg is suitable for a truck therefore in an instance Vehicle i initially store datatype property (mass) and an object property (possessesVehicleMassClass[domain:Vehicle, range: VehilceMassClass]). After the execution of SWRL rule, JESS inputs the asserted instance of VehicleMassClass (a nominal class with two instances owl:AllDifferent and connects it through the possessesVehicleMassClass property. after that DL reasoner will be able to (using proper DL constructor) infer that that car is actually a Truck.
I will try to prepare an example of this case and atach it to the post.
I finally managed to finish the example ontology. Feel free to experiment - I found out also that Protege 3.5 has a bug - perhaps connected with Pellet reasoner. I checked SWRLJessTab in many configurations with no result - it is definitely a bug in environment. The example I have provided works fine with Protege 3.4.4 + Jess - it uses datatype property value in order to provide reasoning capabilities about concrete domains.
Vehicle ontology classifies Cars on the basis of their mass (datatype property value [float]: using SWRL rule we can input facts for object properties and allow DL reasoner to reclassify the Vehicle Instance.
Vehicle(?x) and Vehicle-mass(?x, ?y) and swrlb:lessThanOrEqual(?y, 2500) implies Vehicle-has-mass-class-VehicleMassClasses(?x, LowerThan2500kg-VehicleMassClasses)
VehicleMassClasses contains classes of important for reasoning values (can be understood as enumeration type). Based on the DL constructor we further classify the Vehicle instances:
Truck equals [Car and ((Vehicle-has-mass-class-VehicleMassClasses has GratherThan2500LowerThan5000kg-VehicleMassClasses) or (Vehicle-has-mass-class-VehicleMassClasses has GratherThan2500LowerThan5000kg-VehicleMassClasses))]
Sorin, SWRL’s behaviour is based on Horn Logic and it’s the main feature of Horn Logic - but it is possible to construct associated rules to achieve reasoning in complex cases.
As for previous needs: To answer more detailed questions about reasoning features or how to write proper SWRL please send me an example with explanation what do You want to code in SWRL.