private static void addTemplateCallResults(List <ConstraintViolation> results, QueryOrTemplateCall qot,
                                                   SpinWrapperDataset model, INode resource, bool matchValue, IProgressMonitor monitor)
        {
            ITemplateCall templateCall = qot.getTemplateCall();
            ITemplate     template     = templateCall.getTemplate();

            if (template != null && template.getBody() is IQuery)
            {
                IQuery spinQuery = (IQuery)template.getBody();
                if (spinQuery is IAsk || spinQuery is IConstruct)
                {
                    SparqlParameterizedString arq = DatasetUtil.createQuery(spinQuery);
                    setInitialBindings(resource, templateCall, arq);

                    if (spinQuery is IAsk)
                    {
                        if (((SparqlResultSet)model.Query(DatasetUtil.prepare(arq, model, null).ToString())).Result != matchValue)
                        {
                            List <SimplePropertyPath> paths = getPropertyPaths(resource, spinQuery.getWhere(), templateCall.getArgumentsMapByProperties());
                            String message = SPINLabels.getLabel(templateCall);
                            message += "\n(SPIN constraint at " + SPINLabels.getLabel(qot.getCls()) + ")";
                            results.Add(createConstraintViolation(paths, NO_FIXES, model, resource, message, templateCall));
                        }
                    }
                    else if (spinQuery is IConstruct)
                    {
                        IGraph cm     = model.MonitorConstruct(DatasetUtil.prepare(DatasetUtil.convertConstructToInsert(arq, spinQuery, model._transactionUri), model, null), spinQuery, null);
                        INode  source = getSource(qot);
                        String label  = SPINLabels.getLabel(templateCall);
                        addConstructedProblemReports(cm, results, model, qot.getCls(), resource, label, source);
                    }
                }
            }
        }
        private static void addQueryResults(List <ConstraintViolation> results, QueryOrTemplateCall qot, SpinWrapperDataset model, INode resource, bool matchValue, List <SPINStatistics> stats, IProgressMonitor monitor)
        {
            QuerySolutionMap arqBindings = new QuerySolutionMap();

            arqBindings.Add(SPIN.THIS_VAR_NAME, resource);

            IQuery query = qot.getQuery();
            SparqlParameterizedString arq = DatasetUtil.createQuery(query);

            DateTime startTime = DateTime.Now;

            if (query is IAsk)
            {
                if (((SparqlResultSet)model.Query(DatasetUtil.prepare(arq, model, arqBindings).ToString())).Result != matchValue)
                {
                    String message;
                    String comment = qot.getQuery().getComment();
                    if (comment == null)
                    {
                        message = SPINLabels.getLabel(qot.getQuery());
                    }
                    else
                    {
                        message = comment;
                    }
                    message += "\n(SPIN constraint at " + SPINLabels.getLabel(qot.getCls()) + ")";
                    List <SimplePropertyPath> paths = getPropertyPaths(resource, qot.getQuery().getWhere(), null);
                    INode source = getSource(qot);
                    results.Add(createConstraintViolation(paths, NO_FIXES, model, resource, message, source));
                }
            }
            else if (query is IConstruct)
            {
                model.UpdateInternal(DatasetUtil.prepare(DatasetUtil.convertConstructToInsert(arq, query, model._transactionUri), model, arqBindings));
                IGraph cm = new Graph();
                cm.BaseUri = model._transactionUri;
                model.LoadGraph(cm, model._transactionUri);
                addConstructedProblemReports(cm, results, model, qot.getCls(), resource, qot.getQuery().getComment(), getSource(qot));
            }
            DateTime endTime = DateTime.Now;

            if (stats != null)
            {
                TimeSpan duration = startTime - endTime;
                String   label    = qot.toString();
                String   queryText;
                if (qot.getTemplateCall() != null)
                {
                    queryText = SPINLabels.getLabel(qot.getTemplateCall().getTemplate().getBody());
                }
                else
                {
                    queryText = SPINLabels.getLabel(qot.getQuery());
                }
                INode cls = qot.getCls() != null?qot.getCls() : null;

                stats.Add(new SPINStatistics(label, queryText, duration, startTime, cls));
            }
        }