Hi Angelo,

apologies but this type of very detailed question goes beyond what we can afford to answer for TBC-FE and API users. I hope you understand the commercial pressures.

Having said this I believe a problem is the !== comparison in

var nil = 
TermFactory.namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil";);
...

for ( ; node !== nil; ) {
    length++;
    var next = $data.find(node,rest,null).next();
    if (!next || next == node) {
        node = nil;
    }
    else {
        node = next;
    }
}


because the rdf:nil instance delivered by the $data.find is another JS object. Compare by URIs instead.

To pass in ex:minSize, just declare it as

function myMinOccur ($this, $minSize)

and the engine should bind that variable automatically.

Holger


On 28/02/2020 00:04, Angelo Frozza wrote:

Ralph,

True, there was this error.
Thanks.

I already corrected it in the online version of the function.
But the problem of infinite looping continues.

Hugs,

Angelo


Em quinta-feira, 27 de fevereiro de 2020 10:55:15 UTC-3, Ralph Hodgson escreveu:

    Angelo

    Just a first glance. I noticed a spelling mistake: lenght++;

    Ralph Hodgson, @ralphtq
    CTO, TopQuadrant, @TopQuadrant

    On Feb 27, 2020, at 8:44 AM, Angelo Frozza <fro...@gmail.com
    <javascript:>> wrote:

    
    Hi,

    I'm creating a function to test the minimum number of elements in
    an rdf:List. I am using the SHACL-API to run this function.

    I can't use sh:minCount or sh:maxCount because they disregard the
    existence of duplicate elements in the rdf:List, and in my case
    study, I can have more than one element with the same value in
    the rdf:List.

    The function code is:
    |
    function myMinOccur ($this) {
    // Defines an array for the return
    var results = [];
    // Defines the the IRI of the target node
    var propertyName =
    TermFactory.namedNode("http://www.example.org#coordinates
    <http://www.example.org#coordinates>");
    var rest =
    TermFactory.namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#rest
    <http://www.w3.org/1999/02/22-rdf-syntax-ns#rest>");
    var nil =
    TermFactory.namedNode("http://www.w3.org/1999/02/22-rdf-syntax-ns#nil
    <http://www.w3.org/1999/02/22-rdf-syntax-ns#nil>");

            // Finds the object defined by the target node
    var propertyObject = $data.find($this, propertyName, null) ;

    // Navigate the target node graph
            for (var t = propertyObject.next(); t; t =
    propertyObject.next()) {
    // Each instance is a Javascript object
    var node = t.object;
    var head = node;
    var lenght = 0;
    // This loop runs thorugh the list and
    // counts how many elements are in the list.
    for ( ; node !== nil; ) {
                       lenght++;
                       var next = $data.find(node,rest,null).next();
                       if (!next || next == node) { node = nil; }
                          else {node = next;}
    }
    // If the list lenght < 2 ($minSize), then it is an outlier.
    if (length < 2 ) {
    results.push({
    value : head
    });
    }
    }
    return results;
    }
    |


    I have two problems/doubts in this code:
    a) the inner loop is apparently looping, that is, it cannot find
    the end of the list.
    b) How do I pass the value of ex:minSize to the function?

    The problem in (a) was discussed, but with no solution, here:
    https://github.com/linkeddata/rdflib.js/issues/169
    <https://github.com/linkeddata/rdflib.js/issues/169>

    I tested the function with the rdflib.js and rdflib-graph.js
    libraries found at (https://github.com/TopQuadrant/shacl-js
    <https://github.com/TopQuadrant/shacl-js>) and it worked perfectly.
    However, in this test, the loop mentioned in (a) is replaced by
    length = node.elements.length, which is not supported by the
    SHACL-API.

    Attached are the shape graph and data graph files used in the tests.
    The function is found at
    http://54.201.29.21/shapes/Case_1-Functions_iterator.js
    <http://54.201.29.21/shapes/Case_1-Functions_iterator.js>.

    Best regards,

    Angelo
-- You received this message because you are subscribed to the
    Google Groups "TopBraid Suite Users" group.
    To unsubscribe from this group and stop receiving emails from it,
    send an email to topbrai...@googlegroups.com <javascript:>.
    To view this discussion on the web visit
    
https://groups.google.com/d/msgid/topbraid-users/6af577ee-0a59-43c9-8e65-7136d0a7ae51%40googlegroups.com
    
<https://groups.google.com/d/msgid/topbraid-users/6af577ee-0a59-43c9-8e65-7136d0a7ae51%40googlegroups.com?utm_medium=email&utm_source=footer>.
    <Case_1-DataGraph.ttl>
    <Case_1-ShapeGraph.ttl>

--
You received this message because you are subscribed to the Google Groups "TopBraid Suite Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to topbraid-users+unsubscr...@googlegroups.com <mailto:topbraid-users+unsubscr...@googlegroups.com>. To view this discussion on the web visit https://groups.google.com/d/msgid/topbraid-users/9a059d2d-c29c-40c7-a4e4-7b3ab9ddf266%40googlegroups.com <https://groups.google.com/d/msgid/topbraid-users/9a059d2d-c29c-40c7-a4e4-7b3ab9ddf266%40googlegroups.com?utm_medium=email&utm_source=footer>.

--
You received this message because you are subscribed to the Google Groups "TopBraid 
Suite Users" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to topbraid-users+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/topbraid-users/437885e5-70a4-04a5-d7b5-539c103a3bbd%40topquadrant.com.

Reply via email to