<div dir="ltr"><div><div><div>Martynas,<br><br></div>Following your advice I'm trying to get rid the most possible of a custom object model and try to build something with XSL/XSLT.<br><br></div>I've posted in my blog the last comments regarding this issue:<br><a href="http://cognescent.blogspot.com.ar/2015/12/cognescents-architectural-refactorings.html">http://cognescent.blogspot.com.ar/2015/12/cognescents-architectural-refactorings.html</a><br><br></div>The source repository is not updated with this current changes. It's only analysis work.<br><br>I'd like to use some kind of functional programming for a declarative service/interface model. My approach currently attempts to return triples, wrappers between. But with a working metamodel behind them the declarative part should work fine.<br></div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Dec 6, 2015 at 10:59 AM, Martynas Jusevičius <span dir="ltr"><<a href="mailto:martynas@graphity.org" target="_blank">martynas@graphity.org</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Sebastian,<br>
<br>
I've looked at the code on Git. I think we've gone through this design<br>
phase as well: a custom object model.<br>
<br>
If you constrain yourself only to the standard RDF model and<br>
manipulate it using SPARQL (or an RDF API such as Jena or Sesame),<br>
then you can map the rest of data models into it using vocabularies.<br>
<br>
These class names look like they're taken from the Jena's codebase,<br>
just oversimplified and with much poorer functionality:<br>
<a href="http://sourceforge.net/p/cognescent/repository/ci/master/tree/src/net/java/cognescent/sbi/model/onto/" rel="noreferrer" target="_blank">http://sourceforge.net/p/cognescent/repository/ci/master/tree/src/net/java/cognescent/sbi/model/onto/</a><br>
<br>
In other words, domain model at the object layer is not necessary at<br>
all if you use RDF. And custom APIs are not necessary as you can reuse<br>
generic open-source libraries. Constraint fosters creativity :)<br>
<br>
They say Linked Data should not be treated as a hammer for which every<br>
problem appears as a nail. But it's the first hammer which includes a<br>
manual on how to turn problems into nails -- and them you hammer them<br>
down with ease :)<br>
<br>
<br>
Martynas<br>
<a href="http://graphityhq.com" rel="noreferrer" target="_blank">graphityhq.com</a><br>
<div class="HOEnZb"><div class="h5"><br>
On Fri, Dec 4, 2015 at 5:55 PM, Sebastian Samaruga <<a href="mailto:cognescent@gmail.com">cognescent@gmail.com</a>> wrote:<br>
> Martynas,<br>
><br>
> The sources are in the Git repository of the Sourceforge project. They are<br>
> in the form of an importable Eclipse project, it is not yet a Maven project.<br>
> Once you import the project in Eclipse from the repository (from the<br>
> repository browser of Eclipse put "Import as a project in the workspace")<br>
> you must set some library paths to make it work in your environment.<br>
><br>
> I'm not using the relational model, it is just an analogy.<br>
><br>
> Sebastian.<br>
><br>
><br>
><br>
><br>
> On Fri, Dec 4, 2015 at 5:30 AM, Martynas Jusevičius <<a href="mailto:martynas@graphity.org">martynas@graphity.org</a>><br>
> wrote:<br>
>><br>
>> Sebastian,<br>
>><br>
>> as I mentioned before, a .war file is a poor channel of distribution these<br>
>> days. Please show us your source code and/or deployed application.<br>
>><br>
>> Are you using the relational model or your own metamodel for data<br>
>> integration? This paper explains the advantage of RDF and triples as the<br>
>> canonical model:<br>
>><br>
>> <a href="http://www.topquadrant.com/docs/whitepapers/information-enlightenment-2.0-final.pdf" rel="noreferrer" target="_blank">http://www.topquadrant.com/docs/whitepapers/information-enlightenment-2.0-final.pdf</a><br>
>><br>
>> By putting RDF at the center, you could reuse the RESTful Linked Data<br>
>> processing from Graphity and focus on BI which can be implemented with<br>
>> SPARQL.<br>
>><br>
>><br>
>> Martynas<br>
>> <a href="http://graphityhq.com" rel="noreferrer" target="_blank">graphityhq.com</a><br>
>><br>
>> On Wed, 2 Dec 2015 at 20:20, Sebastian Samaruga <<a href="mailto:cognescent@gmail.com">cognescent@gmail.com</a>><br>
>> wrote:<br>
>>><br>
>>> Martynas,<br>
>>><br>
>>> Happy you replied my message. I've been watching Graphity and it is<br>
>>> awesome. But, although our scopes seems to be similar I think there are huge<br>
>>> differences at implementation level and at presentation level.<br>
>>><br>
>>> What I would like to have built is a 'semantic' browser focused in<br>
>>> analysis and mining for business intelligence and for building indexes and<br>
>>> process flows definitions. I use forms for that and I also use XSL but for<br>
>>> data coming from my metamodel, serialized from JAXB beans. My metamodel is a<br>
>>> completely normalized scheme in which 'tables', 'columns' and 'values' are<br>
>>> interchangeable entities aggregated into 'rows' (Mappings). It comes from a<br>
>>> variety of sources, including but not just RDF. The metamodel has a notion<br>
>>> of triples regarding the application state and I use them when triple<br>
>>> exchange is needed.<br>
>>><br>
>>> I'm aiming to be able, for example, to build queries with analysis<br>
>>> metadata from the URIs given to a REST service. Being this service a HATEOAS<br>
>>> service, a client could browse through the use cases / contexts only with<br>
>>> metadata. Loaders from multiple sources (JDBC, RDF, XML, JSON, CSV, SPARQL,<br>
>>> etc) exist to populate the mappings layer. The browser UI aggregates<br>
>>> 'tables' (metaclasses), once a metaclass is selected it shows its 'columns'<br>
>>> (roles) and selecting a 'column' shows the column values. If I select one<br>
>>> 'row' while navigating (instances) the values shown will be only the ones of<br>
>>> that instance (Mapping).<br>
>>><br>
>>> You can check it in Sourceforge<br>
>>> <a href="http://sourceforge.net/projects/cognescent/" rel="noreferrer" target="_blank">http://sourceforge.net/projects/cognescent/</a><br>
>>><br>
>>> The WAR file downloadable there shows examples with a sample load data<br>
>>> form. Modify datasources.xml in the src root to test other datasources. The<br>
>>> XSL templates (Resumen button in the browser) only outputs the raw XML. Once<br>
>>> the stylesheets are developed they'll bring a cleaner knowledge view.<br>
>>><br>
>>> A sample URI to check in the REST interface would be like (dummy):<br>
>>><br>
>>> <a href="http://localhost:8080/CognescentSBI/resources/data/metaId:instId[predAxisId]/instId:instId[predAxisId]/instId:instId[predAxisId]" rel="noreferrer" target="_blank">http://localhost:8080/CognescentSBI/resources/data/metaId:instId[predAxisId]/instId:instId[predAxisId]/instId:instId[predAxisId]</a><br>
>>><br>
>>> To test the REST service go to:<br>
>>> [your_server:your:port]/CognescentSBI/resources/sbi/data<br>
>>><br>
>>> The predicate axis IDs (predAxisId) will be for the implementation of the<br>
>>> Analyzer component so it can aggregate instances due to this predicates<br>
>>> values. The URI is parsed to build the faceted queries.<br>
>>><br>
>>> Best,<br>
>>> Sebastian.<br>
>>><br>
>>><br>
>>> On Wed, Nov 18, 2015 at 1:29 PM, Martynas Jusevičius<br>
>>> <<a href="mailto:martynas@graphity.org">martynas@graphity.org</a>> wrote:<br>
>>>><br>
>>>> Sebastian,<br>
>>>><br>
>>>> there was little traffic on this list so far, yet your message went<br>
>>>> unnoticed. Sorry for that!<br>
>>>><br>
>>>> You can view the webpage for your data as an (X)HTML representation of<br>
>>>> RDF. It can be completely data-driven and simply a function that<br>
>>>> transforms the RDF response into an (X)THML response. You could do it<br>
>>>> in a number of ways: using an imperative language such as Java, or<br>
>>>> various template engines.<br>
>>>><br>
>>>> From a declarative perspective, XSLT (2.0) is probably the best tool<br>
>>>> for this. The RDF/XML syntax is admittedly not straightforward, but<br>
>>>> XSLT is a functional and Turing-complete language that can handle it<br>
>>>> effectively and transform it to (X)HTML or other formats.<br>
>>>> Graphity Client includes a number of predefined generic XSLT<br>
>>>> stylesheets that can be imported, extended, customized etc:<br>
>>>><br>
>>>> <a href="https://github.com/Graphity/graphity-client/tree/master/src/main/webapp/static/org/graphity/client/xsl" rel="noreferrer" target="_blank">https://github.com/Graphity/graphity-client/tree/master/src/main/webapp/static/org/graphity/client/xsl</a><br>
>>>><br>
>>>> The facets part is more complicated. If you are using SPARQL to<br>
>>>> retrieve RDF results, you can modify the query on the fly, to narrow<br>
>>>> down matches based on the facet selections. That is what we did in<br>
>>>> this project: <a href="http://dedanskeaviser.dk/newspapers" rel="noreferrer" target="_blank">http://dedanskeaviser.dk/newspapers</a><br>
>>>> If not, then it depends on the API you are using to access RDF.<br>
>>>><br>
>>>> I am not familiar with DCI or its concept of actors/roles/contexts.<br>
>>>> Maybe it would be easier if you explained your goals. If you are<br>
>>>> looking for a functional implementation of data-driven applications<br>
>>>> that uses REST and HATEOS and builds interactive forms and other<br>
>>>> navigation items, it is exactly what we provide:<br>
>>>> <a href="http://graphityhq.com/technology" rel="noreferrer" target="_blank">http://graphityhq.com/technology</a><br>
>>>><br>
>>>> We would be happy to this topic discuss further.<br>
>>>><br>
>>>><br>
>>>> Martynas<br>
>>>> <a href="http://graphityhq.com" rel="noreferrer" target="_blank">graphityhq.com</a><br>
>>>><br>
>>>> On Mon, Oct 12, 2015 at 10:26 PM, Sebastian Samaruga<br>
>>>> <<a href="mailto:cognescent@gmail.com">cognescent@gmail.com</a>> wrote:<br>
>>>> > Sorry if this is not the right list. I've came here from a reply in a<br>
>>>> > previous post.<br>
>>>> ><br>
>>>> > I don't know if this is something new, it just seems it was useful for<br>
>>>> > the<br>
>>>> > kind of interface I was looking for. I was just wondering what would<br>
>>>> > be the<br>
>>>> > best way to facilitate browsing and search in the application demo I'm<br>
>>>> > building that renders RDF / Semantic Web contents. I've figured out<br>
>>>> > there<br>
>>>> > must be a tree hierarchy of categories, roles and instances of data to<br>
>>>> > which<br>
>>>> > adhere the incoming data parsing so having a common denominator for<br>
>>>> > different input structures.<br>
>>>> ><br>
>>>> > Having this structures, browsing through the tree of data, an item<br>
>>>> > (leave or<br>
>>>> > node) could be 'picked up' as a facet. For example, if the scenario is<br>
>>>> > "Car<br>
>>>> > Rental" as a category, "Car Model" and "Rental City" as roles and many<br>
>>>> > models of cars and many cities as instances, what if I could pick a<br>
>>>> > car<br>
>>>> > model, a city or both and press "Aggregate" and this resulting in root<br>
>>>> > categories for each specific car rental ("Car Rental 1", "Car Rental<br>
>>>> > 2",<br>
>>>> > etc) with its roles populated with the corresponding criteria values<br>
>>>> > (the<br>
>>>> > city corresponding to "Car Rental 1" given its car, etc).<br>
>>>> ><br>
>>>> > Maybe this sounds dumb. But the question is: how difficult would be to<br>
>>>> > build<br>
>>>> > such a filter criteria using only RDF datasources. RDF statement<br>
>>>> > resources<br>
>>>> > are not individualized by their occurrences. An RDF resource is the<br>
>>>> > same<br>
>>>> > regardless which statements it occurs. And, although I've found a way<br>
>>>> > to<br>
>>>> > individualize occurrences of, for example, Car Rental(s), I can't find<br>
>>>> > the<br>
>>>> > way yet to correlate this instances with the instances of their roles.<br>
>>>> ><br>
>>>> > Also, I'm restricting my mappings (ontology processing output) to<br>
>>>> > three<br>
>>>> > levels depth, which seems arbitrary. I could not restrict the graph to<br>
>>>> > any<br>
>>>> > depth. But I'll keep trying a while with this arrangements. It seems<br>
>>>> > attractive the correlation of categories, roles and instances with<br>
>>>> > some of<br>
>>>> > the concepts in the DCI programming model<br>
>>>> > (<a href="https://en.wikipedia.org/wiki/Data,_context_and_interaction" rel="noreferrer" target="_blank">https://en.wikipedia.org/wiki/Data,_context_and_interaction</a>) which<br>
>>>> > could<br>
>>>> > allow for a model driven focused approach of building the client<br>
>>>> > application, again with the ontology 'common factors' concept in mind.<br>
>>>> ><br>
>>>> > And the concept of actors, roles and contexts seems as an ideal case<br>
>>>> > for a<br>
>>>> > functional language implementation of what could be a runtime<br>
>>>> > environment<br>
>>>> > for data driven applications (think of a REST-HATEOAS client that<br>
>>>> > interactively builds forms and other navigation items simply by<br>
>>>> > content<br>
>>>> > negotiation with a functional data-state-based endpoint).<br>
>>>> ><br>
>>>> > Source, examples and the demo web application are available in the<br>
>>>> > project<br>
>>>> > web page:<br>
>>>> ><br>
>>>> > <a href="http://cognescent.blogspot.com" rel="noreferrer" target="_blank">http://cognescent.blogspot.com</a><br>
>>>> > <a href="http://sourceforge.net/projects/cognescent/" rel="noreferrer" target="_blank">http://sourceforge.net/projects/cognescent/</a><br>
>>>> ><br>
>>>> > Regards,<br>
>>>> > Sebastian<br>
>>><br>
>>><br>
><br>
</div></div></blockquote></div><br></div>