/// <summary> /// Updates the properties of a resource in the backing RDF store. /// </summary> /// <param name="resource">Resource that is to be updated in the backing store.</param> /// <param name="transaction">Transaction associated with this action.</param> public virtual void UpdateResource(Resource resource, ITransaction transaction = null) { string updateString; if (resource.IsNew) { updateString = string.Format(@"WITH {0} INSERT {{ {1} }} WHERE {{}}", SparqlSerializer.SerializeUri(Uri), SparqlSerializer.SerializeResource(resource, IgnoreUnmappedProperties)); } else { updateString = string.Format(@"WITH {0} DELETE {{ {1} ?p ?o. }} INSERT {{ {2} }} WHERE {{ OPTIONAL {{ {1} ?p ?o. }} }}", SparqlSerializer.SerializeUri(Uri), SparqlSerializer.SerializeUri(resource.Uri), SparqlSerializer.SerializeResource(resource, IgnoreUnmappedProperties)); } SparqlUpdate update = new SparqlUpdate(updateString) { Resource = resource }; ExecuteUpdate(update, transaction); resource.IsNew = false; resource.IsSynchronized = true; }
/// <summary> /// Updates the properties of a resource in the backing RDF store. /// </summary> /// <param name="resource">Resource that is to be updated in the backing store.</param> /// <param name="transaction">ransaction associated with this action.</param> public void UpdateResource(Resource resource, ITransaction transaction = null) { string updateString; if (resource.IsNew) { updateString = string.Format(@"WITH {0} INSERT {{ {1} }} WHERE {{}}", SparqlSerializer.SerializeUri(Uri), SparqlSerializer.SerializeResource(resource)); } else { updateString = string.Format(@"WITH {0} DELETE {{ {1} ?p ?o. }} INSERT {{ {2} }} WHERE {{ {1} ?p ?o. }} ", SparqlSerializer.SerializeUri(Uri), SparqlSerializer.SerializeUri(resource.Uri), SparqlSerializer.SerializeResource(resource)); } SparqlUpdate update = new SparqlUpdate(updateString); update.Resource = resource; ExecuteUpdate(update, transaction); resource.IsNew = false; }
/// <summary> /// Generate the Dataset for a single model /// </summary> /// <param name="model"></param> /// <returns></returns> public static string GenerateDatasetClause(IModel model) { if (model == null) { return(""); } if (model is IModelGroup) { return(GenerateDatasetClause(model as IModelGroup)); } return("FROM " + SparqlSerializer.SerializeUri(model.Uri) + " "); }
/// <summary> /// Generate a dataset clause for an enumeration of models. /// </summary> /// <param name="models">An enumeration of models.</param> /// <returns></returns> public static string GenerateDatasetClause(IEnumerable <IModel> models) { if (!models.Any()) { return(""); } StringBuilder resultBuilder = new StringBuilder(); foreach (var model in models) { resultBuilder.Append("FROM "); resultBuilder.Append(SparqlSerializer.SerializeUri(model.Uri)); resultBuilder.Append(" "); } return(resultBuilder.ToString()); }
public IEnumerable <T> GetResources <T>(int offset = -1, int limit = -1) where T : Resource { _query.Offset = offset; _query.Limit = limit; if (_inferenceEnabled) { SparqlQuery uriQuery = new SparqlQuery(SparqlSerializer.Serialize(_model, _query, true)); StringBuilder uris = new StringBuilder(); var uriList = FetchUris(uriQuery).ToList(); foreach (Uri u in uriList) { if (u != null) { uris.Append(SparqlSerializer.SerializeUri(u)); } } if (!uriList.Any()) { return(new List <T>()); } SparqlQuery query = new SparqlQuery(string.Format("DESCRIBE {0} {1}", uris, SparqlSerializer.GenerateDatasetClause(_model))); ISparqlQueryResult res = _model.ExecuteQuery(query); if (IsSorted) { return(res.GetResources <T>().OrderBy(o => { return (o != null) ? uriList.IndexOf(o.Uri) : -1; })); } else { return(res.GetResources <T>()); } } else { SparqlQuery query = new SparqlQuery(SparqlSerializer.Serialize(_model, _query)); return(_model.ExecuteQuery(query, _inferenceEnabled).GetResources <T>()); } }
public T GetResource <T>(Uri uri, ITransaction transaction = null) where T : Resource { SparqlQuery query = new SparqlQuery(String.Format("DESCRIBE {0} {1}", SparqlSerializer.SerializeUri(uri), DatasetClause)); ISparqlQueryResult result = ExecuteQuery(query, transaction: transaction); IList resources = result.GetResources <T>().ToList(); if (resources.Count > 0) { T res = resources[0] as T; res.IsNew = false; res.IsSynchronized = true; res.IsReadOnly = true; res.SetModel(this); return(res); } else { string msg = "Error: Could not find resource <{0}>."; throw new ArgumentException(string.Format(msg, uri)); } }
public bool ContainsResource(Uri uri, ITransaction transaction = null) { return(ExecuteQuery(new SparqlQuery(string.Format(@"ASK {0} {{ {1} ?p ?o . }}", DatasetClause, SparqlSerializer.SerializeUri(uri))), transaction: transaction).GetAnwser()); }