예제 #1
0
        /// <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;
        }
예제 #2
0
        /// <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;
        }
예제 #3
0
        /// <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) + " ");
        }
예제 #4
0
        /// <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());
        }
예제 #5
0
        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>());
            }
        }
예제 #6
0
        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));
            }
        }
예제 #7
0
 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());
 }