internal void Initialise() { IEnumerable <Uri> localGraphs = Storage.ListGraphs(); foreach (IUriNode spinLibrary in Configuration.GetTriplesWithPredicateObject(RDF.PropertyType, SPIN.ClassLibraryOntology).Select(t => t.Subject)) { // TODO maybe clean this to use SPINImports instead if (localGraphs.Contains(spinLibrary.Uri)) { IGraph library = new ThreadSafeGraph(); library.BaseUri = spinLibrary.Uri; Storage.LoadGraph(library, spinLibrary.Uri); spinProcessor.Initialise(library); } else { spinProcessor.Initialise(spinLibrary.Uri); } } // TODO explore the dataset to add spin:import triples Configuration.Changed += OnDatasetDescriptionChanged; }
internal static SpinDatasetDescription Load(IUpdateableStorage storage, Uri datasetUri = null, IEnumerable <Uri> graphsUri = null) { SpinDatasetDescription dataset; if (datasetUri == null) { SparqlResultSet datasetDiscovery = (SparqlResultSet)storage.Query("SELECT ?dataset WHERE {?dataset a <" + SD.ClassDataset.Uri.ToString() + ">}"); int datasetCount = datasetDiscovery.Results.Count; if (datasetCount > 1) { throw new Exception("More than one dataset has been found in the current storage provider. Please specify which to use through the datasetUri parameter."); } else if (datasetCount == 1) { datasetUri = ((IUriNode)datasetDiscovery.Results.FirstOrDefault().Value("dataset")).Uri; } else { datasetUri = UriFactory.Create(RDFRuntime.DATASET_NS_URI + Guid.NewGuid().ToString()); } } dataset = new SpinDatasetDescription(datasetUri); storage.LoadGraph(dataset, datasetUri); dataset.BaseUri = datasetUri; Triple isUpdateControlledDataset = dataset.GetTriplesWithPredicate(RDFRuntime.PropertyUpdatesDataset).FirstOrDefault(); if (isUpdateControlledDataset != null) { dataset._sourceUri = ((IUriNode)isUpdateControlledDataset.Object).Uri; } else { dataset.Assert(RDFUtil.CreateUriNode(datasetUri), RDF.PropertyType, SD.ClassDataset); } return(dataset); }