From: Rob V. <rv...@do...> - 2012-09-27 20:06:41
|
Comments inline On 9/25/12 4:37 AM, "Tomasz Pluskiewicz" <tom...@gm...> wrote: >Thanks for your reply. > >You know, there problem with dotNetRDF is that there are quite a few >classes with overlapping functionality and it does get quite >confusing. Yes, not every problem needs a hammer but also a lot of problems need ever so slightly different hammers Right now I'm focuses on getting to a stable 1.0 with only adding minor features (such as the fluent query API) which I'm aiming to do fairly rapidly with 4-8 week release cycles up to 1.0 Beyond that anything is fair game, I have a lot of ideas floating around my head about how I'd restructure things if I had the chance to do a major refactor (think lots of significant breaking changes) and I'm getting towards the stage of writing that up into a design document. This includes simplification and modularization of the API, memory footprint reduction, code deprecation and clean up etc. My thinking is likely that after 1.0.0 I will start a 1.9 branch which will be where the major refactoring takes place and maintain the default branch as bug fixes and minor feature for the 1.0.x series of releases. Once the refactoring in 1.9 is sufficiently done I'll start making parallel beta releases of 1.9.x and once that is sufficiently stable and tested we can merge that back into default, bump the version to 2.0 and release. Parallel to 1.9 as things start getting removed/changed in the 1.9 branch we'd be updating the 1.0.x releases to mark the things that will disappear in 2.0 as deprecated so users who are interested can try out 1.9 with fore knowledge of what the breaking changes are. > >Yesterday I have also again bumped into PersistentTripleStore, which >wraps an IStorageProvider. How does that work? > >And what should I do? Wrap IStorageProvider with PersistentTripleStore >or wrap triple stores with a InMemoryManager. Are there some clearly >defined advantages and disadvantages? A PersistentTripleStore is an in-memory cache of some underlying triple store with the ability to enforce some level of transaction support on changes that happen in-memory. Disadvantages is that it requires you to hold data in memory to make changes, advantages are the transaction support and the use of the more user friendly ITripleStore API. Rob > >Thanks, >Tom > >On Mon, Sep 24, 2012 at 7:05 PM, Rob Vesse <rv...@do...> wrote: >> Ok, comments inline >> >> On 9/24/12 5:25 AM, "Tomasz Pluskiewicz" <tom...@gm...> >> wrote: >> >>>Rob, >>> >>>I think I can devise my own common denominator just for the sake of >>>executing SPARQL and that won't be a big thing. I would like to >>>confront you with some basic idea how I think the ORM solution could >>>work: >>> >>>1. The mapping API is used to map .net types to some rdf classes and >>>their methods/properties to rdf properties. This could get complicated >>>if one wants to achieve a more sophisticated workflow. For example >>>saving triples for particular relation to another graph. A trivial >>>example could be that an example graph: >>> >>>ex:FordFiesta a ex:Car ; ex:speed 150 ; ex:passengers 5 . >>>ex:HondaCivic a ex:Car ; ex:speed 160 ; ex:passengers 5 . >>> >>>could be used to retrieve Car (this being a .net type) instances, each >>>having a integer-valued Car#Speed property. >> >> Yep, with you so far >> >>> >>>2. The configuration API takes those mappings and creates a context >>>factory, which is used to wrap graphs, stores and endpoints thus >>>creating a context. A context will be something like NHibernate's >>>ISession or Entity Framewor's ObjectContext. The context is used to >>>access the underlying datasource transparently for example: >>> >>>IEnumerable<Car> cars = context.GetAll<Car>().Where(car => car.Speed > >>>150); // transform LINQ into SPARQL >>>Car fordFiesta = context.Get<Car>("ex:FordFiesta"); // here possibly >>>do a DESCRIBE or a ?s ?p ?o query on the given source >>> >>>I initially thought that for IGraph I could use simple triple-based >>>access but apparently the querying is quite complex from the start and >>>thus it would be a wasted effort, because at some point it would best >>>be switched to SPARQL anyway (hence my other SPARQL-building topic). >>> >>>3. Accessing property values would have to differ based on the source. >>>For in-memory sources it is easy: if the requested triple is present, >>>retrieve a value. For remote sources perform a query to get the actual >>>value for the accessed property. >> >> >> For points 2 and 3 you might want to talk to Graham and Kal offline, >>what >> you are trying to do sounds very like what they do with BrightstarDB >> >> On point 3 take a look at Andrew Matthew's old LinqToRdf code, his >> approach used class generation so not necessarily a direct parallel but >> essentially he would have an intermediate reference to the value inside >>a >> property and the first time it was accessed resolve it, this is >> particularly useful for properties that establish relationships between >> classes since it avoids having to build the entire object graph at one >>time >> >> In essence lazy load >> >>> >>>The question here is how do I best work with remote sources, >>>especially sparql endpoints. Does dotNetRDF provide some cache for >>>retrieved data, so that it isn't necessary to poll it every time for >>>the same triples. This seems easy to achieve for CONSTRUCT queries, >>>but how should it work for SELECT? >> >> No there is no cache currently, for CONSTRUCT results just stick them >>in a >> Graph/TripleCollection >> >> Maybe the better option is to always use CONSTRUCT >> >>> >>>Looking just now at the interfaces IStorageProvider is likely what I >>>may suit my needs. Please confirm that I could/should use the >>>InMemoryManager to access in-memory graphs and triple stores and the >>>other implementations to access sparql endopints and third party >>>stores. >> >> Yes that would work, InMemoryManager wraps the in-memory query engine >>with >> the standard IStorageProvider interface so using IStorageProvider as >>your >> common denominator may work best for you >> >> Rob >> >>> >>>Thanks, >>>Tom >>> >>>On Fri, Sep 21, 2012 at 10:30 PM, Rob Vesse <rv...@do...> >>>wrote: >>>> Well IGraph and ITripleStore can both be wrapped by ISparqlDataset >>>> instances >>>> >>>> For remote things I am planning to write a dataset implementation that >>>> would wrap another query engine (I.e. convert the calls into SPARQL >>>> queries onto whatever the underlying engine is) because that helps >>>>address >>>> another open task I have but I haven't got very far with it just yet. >>>> >>>> So I'd recommend using ISparqlDataset as the common denominator >>>>provided >>>> you're OK with talking to remote endpoints via this interface not >>>>being >>>> supported just yet. >>>> >>>> Rob >>>> >>>> On 9/21/12 1:08 PM, "Tomasz Pluskiewicz" >>>><tom...@gm...> >>>> wrote: >>>> >>>>>Hi Rob >>>>> >>>>>As you already know I have started working on a ORM-like mapper based >>>>>on dotNetRDF. I intend it to be as thin as possible and rely mostly on >>>>>the underlying powers of your library. To make it possible I have >>>>>defined an interfaces called IRomanticContext+dynamic proxies, which >>>>>will hide the details of how RDF triples and graphs are manipulated. >>>>> >>>>>The question I have comes form the fact the I need multiple context >>>>>types for different types of underlying data. I have indentified the >>>>>IGraph, ITripleStore, ISparqlDataset and BaseEndopint types, which >>>>>give access to various sources of RDF. Will I really need to wrap all >>>>>of those to provide a uniform abstraction layer over dotNetRDF? Is >>>>>there some kind of common denominator? >>>>> >>>>>Regards, >>>>>Tom >>>>> >>>>>---------------------------------------------------------------------- >>>>>-- >>>>>-- >>>>>---- >>>>>Got visibility? >>>>>Most devs has no idea what their production app looks like. >>>>>Find out how fast your code is with AppDynamics Lite. >>>>>http://ad.doubleclick.net/clk;262219671;13503038;y? >>>>>http://info.appdynamics.com/FreeJavaPerformanceDownload.html >>>>>_______________________________________________ >>>>>dotNetRDF-develop mailing list >>>>>dot...@li... >>>>>https://lists.sourceforge.net/lists/listinfo/dotnetrdf-develop >>>> >>>> >>>> >>>> >>>> >>>> >>>>----------------------------------------------------------------------- >>>>-- >>>>----- >>>> Got visibility? >>>> Most devs has no idea what their production app looks like. >>>> Find out how fast your code is with AppDynamics Lite. >>>> http://ad.doubleclick.net/clk;262219671;13503038;y? >>>> http://info.appdynamics.com/FreeJavaPerformanceDownload.html >>>> _______________________________________________ >>>> dotNetRDF-develop mailing list >>>> dot...@li... >>>> https://lists.sourceforge.net/lists/listinfo/dotnetrdf-develop >>> >>>------------------------------------------------------------------------ >>>-- >>>---- >>>Live Security Virtual Conference >>>Exclusive live event will cover all the ways today's security and >>>threat landscape has changed and how IT managers can respond. >>>Discussions >>>will include endpoint security, mobile security and the latest in >>>malware >>>threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >>>_______________________________________________ >>>dotNetRDF-develop mailing list >>>dot...@li... >>>https://lists.sourceforge.net/lists/listinfo/dotnetrdf-develop >> >> >> >> >> >> >>------------------------------------------------------------------------- >>----- >> Live Security Virtual Conference >> Exclusive live event will cover all the ways today's security and >> threat landscape has changed and how IT managers can respond. >>Discussions >> will include endpoint security, mobile security and the latest in >>malware >> threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >> _______________________________________________ >> dotNetRDF-develop mailing list >> dot...@li... >> https://lists.sourceforge.net/lists/listinfo/dotnetrdf-develop > >-------------------------------------------------------------------------- >---- >Live Security Virtual Conference >Exclusive live event will cover all the ways today's security and >threat landscape has changed and how IT managers can respond. Discussions >will include endpoint security, mobile security and the latest in malware >threats. http://www.accelacomm.com/jaw/sfrnl04242012/114/50122263/ >_______________________________________________ >dotNetRDF-develop mailing list >dot...@li... >https://lists.sourceforge.net/lists/listinfo/dotnetrdf-develop |