Hi Guil,

On Jul 5, 2010, at 8:17 PM, Guilherme Scomparim wrote:

> Hi People,
> 
> I am creating a Metamodel as one single model and I am importing this
> metamodel to design another model.
> 
> In order to do this I need to create classes and restrictions in the
> model based on the imported metamodel that contain the rule below.
> 
> CONSTRUCT {
>   ?Class a owl:Class .
>   ?Class rdfs:subClassOf pmda:StateClass .
>   ?Class owl:equivalentClass _:b0 .
>   _:b0 a owl:Restriction .
>   _:b0 owl:onProperty ?cProperty .
>   _:b0 ?cFunc ?cValue .
> }
> WHERE {
>   ?Crit a pmda:StateCriterion .
>   ?Class pmda:hasCriterion ?Crit .
>   ?Crit pmda:criterionProperty ?cProperty .
>   ?Crit pmda:criterionOperator ?cOpe .
>   ?cOpe pmda:operatorFunction ?cFunc .
>   ?Crit pmda:criterionValue ?cValue .
> }
> 
> The classes creation are working perfectly, however when I create a
> restriction via a SPIN Rule and I hit the inference button the
> application executes thousands of iterations and it seams to enter in
> a loop because I always stoped before it ends.
> 
> When this happen my inference configuration is TopSPIN  (incremental,
> iteratively) and then Jena Built in Reasoner
> 
> If I set up for TopSPIN  (non-incremental, single-pass) and then Jena
> Built in Reasoner it doesn’t work, however if I add another TopSPIN
> engine configuring the inferences to be TopSPIN  (non-incremental,
> single-pass) then TopSPIN  (non-incremental, single-pass) again and
> then Jena Built in Reasoner.  In this way it works but it creates two
> restrictions for each time I run the inference.
> 
> My questions are:
> 
> Does TBC support the creation of restrictions via Rule? In case of
> yes, what am I doing wrong?

Yes it's fine to create any such RDF structure with SPIN. TopSPIN will iterate 
as long as new triples have been created in one iteration, leading to potential 
endless loops. Blank nodes in a CONSTRUCT head are always new, and thus lead to 
new triples. So you either need to limit to one iteration (as you have found 
out), or you could check whether the restriction pattern is already present in 
the WHERE clause - and only add a new restriction if it isn't already there.

If you have a complex set up in which you want to combine multiple steps, you 
could use SPARQLMotion and split your rules into multiple categories (e.g. 
my:mappingRule rdfs:subPropertyOf spin:rule...) In SPARQLMotion you can specify 
which rule predicate to run at each stage.

Another option that sometimes works is to use spin:constructors, which are 
always just executed once, for a newly created object. The use case here is if 
you create a completely new structure starting from a source structure.

Not sure if this helps.

Cheers,
Holger

-- 
You received this message because you are subscribed to the Google
Group "TopBraid Suite Users", the topics of which include TopBraid Composer,
TopBraid Live, TopBraid Ensemble, SPARQLMotion and SPIN.
To post to this group, send email to
[email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/topbraid-users?hl=en

Reply via email to