Sure.  Using the same example model, the following in spin:body would
get a count of grandchildren for the argument ?arg1

SELECT COUNT(?gchild)
WHERE {
    ?arg1 kennedys:child ?child .
    ?child kennedys:child ?gchild .
}

If named gchildCount, then LET (?x := gchildCount
(kennedys:RoseFitzgerald)) would get you a grandchild count for
kennedys:RoseFitzgerald.  Binding to a variable name - (count(?gchild)
as ?n) - isn't necessary in this case as the count is passed via the
function return.

-- Scott

On Dec 14, 6:10 pm, Arthur Keen <[email protected]> wrote:
> Thanks very much.  Could a spin function be used instead of the subselect in 
> the first example?
>
> Arthur
>
> On Dec 14, 2009, at 5:21 PM, Scott Henninger wrote:
>
> > Arthur; There are a couple of ways to do this.  The first is through
> > SELECT aggregates.  Since aggregates are post-result set processing,
> > you have to use a sub-select.  For example, the following will create
> > property that counts the number of children in the example
> > kennedysSPIN model.
>
> > CONSTRUCT { ?this :numberOfChildren ?n . }
> > WHERE {
> >    {   SELECT ?this (COUNT(?child) AS ?n)
> >        WHERE {
> >            ?this kennedys:child ?child .
> >        }  GROUP BY ?this
> >   } .
> > }
>
> > Another approach is to use smf:countMatches, but is only applicable if
> > a single triple pattern is specified (the aggregate will work with
> > more complex queries):
>
> > CONSTRUCT
> > {  ?this :numberOfChildren ?n .
> > }
> > WHERE
> > {  ?this kennedys:child ?child .
> >   LET (?n := smf:countMatches(?this, kennedys:child, ?x)) .
> > }
>
> > -- Scott
>
> > On Dec 14, 3:35 pm, Arthur Keen <[email protected]> wrote:
> >> I am looking for an example of how to do aggregation using SPIN.  I need 
> >> to aggregate metrics in a part-whole hierarchy and would like to use SPIN 
> >> rules to do it.  I have the aggregations working with SELECT, but have not 
> >> found any examples that use CONSTRUCT, so that I can encode the 
> >> aggregations as SPIN rules.
>
> >> Thanks
> >> Arthur
>
> > --
>
> > You received this message because you are subscribed to the Google Groups 
> > "TopBraid Composer Users" group.
> > 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 
> > athttp://groups.google.com/group/topbraid-composer-users?hl=en.

--

You received this message because you are subscribed to the Google Groups 
"TopBraid Composer Users" group.
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-composer-users?hl=en.


Reply via email to