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)); } }
private static void setInitialBindings(INode resource, ITemplateCall templateCall, SparqlParameterizedString arq) { QuerySolutionMap arqBindings = new QuerySolutionMap(); arqBindings.Add(SPIN.THIS_VAR_NAME, resource); Dictionary <IArgument, IResource> args = templateCall.getArgumentsMap(); foreach (IArgument arg in args.Keys) { INode value = args[arg]; arq.SetParameter(arg.getVarName(), value); } }
private static void runQueryOnClass(List <ConstraintViolation> results, SparqlParameterizedString arq, IQuery spinQuery, String label, SpinWrapperDataset model, IResource cls, Dictionary <String, IResource> initialBindings, bool thisUnbound, bool thisDeep, INode source, List <SPINStatistics> stats, IProgressMonitor monitor) { SpinProcessor spinModel = cls.getModel(); // let the underlying engine handle this. if (true || thisUnbound || SPINUtil.isRootClass(Resource.Get(cls, spinModel)) /*|| model.contains(null, RDF.type, cls)*/) { QuerySolutionMap arqBindings = new QuerySolutionMap(); if (!thisUnbound) { arqBindings.Add(SPINUtil.TYPE_CLASS_VAR_NAME, cls); } if (initialBindings != null) { foreach (String varName in initialBindings.Keys) { INode value = initialBindings[varName]; arqBindings.Add(varName, value); } } if (monitor != null) { monitor.subTask("Checking SPIN constraint on " + SPINLabels.getLabel(cls) + (label != null ? ": " + label : "")); } DateTime startTime = DateTime.Now; if (thisDeep && !thisUnbound) { arq.CommandText = SPINUtil.addThisTypeClause(arq.CommandText); arqBindings[SPINUtil.TYPE_CLASS_VAR_NAME] = cls; } //TODO replace this with the real query rewriting IGraph cm = model.MonitorConstruct(arq, spinQuery, arqBindings); model.DeleteGraphInternal(cm.BaseUri.ToString()); DateTime endTime = DateTime.Now; if (stats != null) { TimeSpan duration = endTime - startTime; String queryText = SPINLabels.getLabel(spinQuery); if (label == null) { label = queryText; } stats.Add(new SPINStatistics(label, queryText, duration, startTime, cls)); } model.UpdateGraph(model._transactionUri.ToString(), cm.Triples, null); addConstructedProblemReports(cm, results, model, cls, null, label, source); } }