interpret models and do useful things based on them.
With different interpreters behind different resources
it is easy to combine both interpreters and
metamodels into flexible applications.
Groovy
Interpreter
Model Storage (XML files)
Git Apache Lucene
Resourcebus Core
Storage API
Client Server Cache
Resource API
JavaScr ipt
Interpreter
Clojure
Interpreter
Prolog
Interpreter
Freemarker
Interpreter
XSLT
Interpreter
Meta
Interpreter
Menu
Interpreter
Editor
Interpreter
Figure 4: Resourcebus architecture.
Currently the most interesting interpreter realized is
the Editor Interpreter used by the Metada
Metarepository to provide for form-based editing of
arbitrary models based on the interpretation of their
metamodels. It nicely demonstrates how changes in
metamodel immediately take effect in the runtime.
The same way that Resourcebus interpreters
enable execution of various domain-specific
languages, they may support execution of various
general-purpose or special-purpose languages that
can be this way easily used within Resourcebus and
even use its client API to access other resources. We
have used or at least tested interpreters for the
following languages: Groovy (Koenig, 2007),
JavaScript (Crockford, 2008), Scala (Odersky,
2010), Clojure (Emerick, 2012), Freemarker
(Forsythe, 2013), XSLT (Kay, 2007), and XQuery
(Boag, 2010).
We plan Resourcebus interpreters to be hot-
pluggable and to enable parallel existence of their
several versions. The former should allow for
flexible dynamic configuration of applications, the
latter should enable long-term support of older
functionalities without having to migrate to newer
versions of interpreters.
4 CONCLUSIONS
In this paper we have presented our work on
something that we see as a substrate for model-
driven creations. Resourcebus is designed to be as
simple as possible, but to provide all foundational
services that all modeling tools need to provide, such
as model storage, versioning, access control,
intelligent caching, and a way to plug-in model
interpreters. Resourcebus aims to be compatible with
current standards such as HTTP and RDF, and future
standards such as Linked Data Platform (LDP). This
way it could serve as the basis for sharing and
distribution of models and metamodels on the web.
Our further work will be focused on finishing
version 1.0 with enough examples so that other
researchers would be able to test and potentially use
Resourcebus for implementation of their own ideas.
Issues that are still unresolved include combining
multiple types of model storage including in-
memory storage, finalization of the REST
application style, implementation of more sample
interpreters, such as ones for model-to-model
transformations, and support for event processing.
REFERENCES
Beckett, D., Berners-Lee, T., Prud'hommeaux, E.,
Carothers, G., 2013. Turtle: Terse RDF Triple
Language, W3C Candidate Recommendation.
Berners-Lee, T., 2006. Linked Data Design Issues. W3C-
Internal Document, http://www.w3.org/DesignIssues/
LinkedData.html.
Boag, S., Chamberlin, D., Fernández, M. F., et al, 2010.
XQuery 1.0: An XML Query Language (Second
Edition). W3C Recommendation.
Chacon, S., 2009. Pro Git. Apress, New York.
Crockford, D., 2008. JavaScript: The Good Parts.
O'Reilly Media, Sebastopol.
Emerick, C., Carper, B., Grand, C., 2012. Clojure
Programming: Practical Lisp for the Java World.
O'Reilly Media, Sebastopol.
Erdweg, S., van der Storm, T., Völter, M., et al, 2013. The
State of the Art in Language Workbenches:
Conclusions from the Language Workbench
Challenge. In Proceedings of the Software Language
Engineering conference (Indianapolis, USA, October
26-28, 2013). Springer.
Eysholdt, M., Behrens, H., 2010. Xtext: implement your
language faster than the quick and dirty way. In
Proceedings of the ACM international conference
companion on Object oriented programming systems
languages and applications companion, pp. 307-309.
Fielding, R., Taylor, R., 2002. Principled Design of the
Modern Web Architecture, ACM Transactions on
MODELSWARD2014-InternationalConferenceonModel-DrivenEngineeringandSoftwareDevelopment
464