internal static IResource CreateUpdateControlledGraph(this SpinWrappedDataset queryModel, IResource graphNode, INode mode = null) { IGraph currentDataset = queryModel.CreateUpdateControlledDataset(); if (RDFUtil.sameTerm(graphNode, queryModel._datasetNode)) { return(graphNode); } INode updatedGraph = null; if (currentDataset.ContainsTriple(new Triple(graphNode, RDF.PropertyType, RDFRuntime.ClassReadOnlyGraph))) { throw new SpinException("The graph " + graphNode.Uri().ToString() + " is marked as Readonly for the current dataset"); } if (!currentDataset.ContainsTriple(new Triple(graphNode.getSource(), RDF.PropertyType, SD.ClassGraph))) { currentDataset.Assert(graphNode.getSource(), Tools.CopyNode(RDF.PropertyType, currentDataset), Tools.CopyNode(SD.ClassGraph, currentDataset)); currentDataset.Assert(graphNode.getSource(), Tools.CopyNode(RDFRuntime.PropertyUpdatesGraph, currentDataset), Tools.CopyNode(graphNode.getSource(), currentDataset)); } updatedGraph = queryModel.GetUpdateControlledGraph(graphNode); if (updatedGraph == null) { if (mode == null) { mode = RDFRuntime.PropertyUpdatesGraph; } currentDataset.Retract(currentDataset.GetTriplesWithObject(graphNode.getSource()).ToList()); updatedGraph = currentDataset.CreateUriNode(UriFactory.Create(RDFRuntime.GRAPH_NS_URI + Guid.NewGuid().ToString())); currentDataset.Assert(updatedGraph, Tools.CopyNode(RDF.PropertyType, currentDataset), Tools.CopyNode(RDFRuntime.ClassUpdateControlGraph, currentDataset)); currentDataset.Assert(updatedGraph, Tools.CopyNode(mode, currentDataset), Tools.CopyNode(graphNode.getSource(), currentDataset)); // addition to simplify additional graph mapping constraints patterns currentDataset.Assert(updatedGraph, Tools.CopyNode(RDFRuntime.PropertyUpdatesGraph, currentDataset), updatedGraph); } else if (!RDFUtil.sameTerm(graphNode, updatedGraph)) { updatedGraph = ((IResource)updatedGraph).getSource(); currentDataset.Retract(graphNode.getSource(), Tools.CopyNode(RDFRuntime.PropertyUpdatesGraph, currentDataset), Tools.CopyNode(graphNode.getSource(), currentDataset)); currentDataset.Assert(updatedGraph, Tools.CopyNode(mode, currentDataset), Tools.CopyNode(graphNode.getSource(), currentDataset)); } return(Resource.Get(updatedGraph, queryModel.spinProcessor)); }
public IEnumerable <IResource> getObjects(INode property) { return(_model.GetTriplesWithSubjectPredicate(this, property).Select(t => Resource.Get(t.Object, _model))); }
internal static IResource CreateUpdateControlledGraph(this SpinWrappedDataset queryModel, Uri graphUri, INode mode = null) { return(queryModel.CreateUpdateControlledGraph(Resource.Get(RDFUtil.CreateUriNode(graphUri), queryModel.spinProcessor), mode)); }