-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
377 lines (237 loc) · 13.7 KB
/
index.html
File metadata and controls
377 lines (237 loc) · 13.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
<!DOCTYPE html>
<!--[if IEMobile 7 ]><html class="no-js iem7"><![endif]-->
<!--[if lt IE 9]><html class="no-js lte-ie8"><![endif]-->
<!--[if (gt IE 8)|(gt IEMobile 7)|!(IEMobile)|!(IE)]><!--><html class="no-js" lang="en"><!--<![endif]-->
<head>
<meta charset="utf-8">
<title>Welcome to LDA - Linked Data for Applications (LDA)</title>
<meta name="author" content="Your Name">
<meta name="description" content="Welcome to LDA Mar 28th, 2014 LDA is a light-weight framework that helps developers design and implement integrated
systems – for example …">
<!-- http://t.co/dKP3o1e -->
<meta name="HandheldFriendly" content="True">
<meta name="MobileOptimized" content="320">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="canonical" href="http://ld4apps.github.io">
<link href="/favicon.png" rel="icon">
<link href="/stylesheets/screen.css" media="screen, projection" rel="stylesheet" type="text/css">
<link href="/atom.xml" rel="alternate" title="Linked Data for Applications (LDA)" type="application/atom+xml">
<script src="/javascripts/modernizr-2.0.js"></script>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
<script>!window.jQuery && document.write(unescape('%3Cscript src="./javascripts/libs/jquery.min.js"%3E%3C/script%3E'))</script>
<script src="/javascripts/octopress.js" type="text/javascript"></script>
<!--Fonts from Google"s Web font directory at http://google.com/webfonts -->
<link href="//fonts.googleapis.com/css?family=PT+Serif:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
<link href="//fonts.googleapis.com/css?family=PT+Sans:regular,italic,bold,bolditalic" rel="stylesheet" type="text/css">
</head>
<body >
<header role="banner"><hgroup>
<h1><a href="/">Linked Data for Applications (LDA)</a></h1>
<h2>Composite Apps for the Cloud</h2>
</hgroup>
</header>
<nav role="navigation"><ul class="subscription" data-subscription="rss">
<li><a href="/atom.xml" rel="subscribe-rss" title="subscribe via RSS">RSS</a></li>
</ul>
<form action="https://www.google.com/search" method="get">
<fieldset role="search">
<input type="hidden" name="q" value="site:ld4apps.github.io" />
<input class="search" type="text" name="q" results="0" placeholder="Search"/>
</fieldset>
</form>
<ul class="main-navigation">
<li><a href="/">Home</a></li>
<li><a href="/blog/">Blog</a></li>
<li><a href="/blog/archives/">Archives</a></li>
</ul>
</nav>
<div id="main">
<div id="content">
<div>
<article role="article">
<header>
<h1 class="entry-title">Welcome to LDA</h1>
<p class="meta">
<time datetime="2014-03-28T09:04:00-04:00" pubdate data-updated="true">Mar 28<span>th</span>, 2014</time></p>
</header>
<p>LDA is a light-weight framework that helps developers design and implement integrated
systems – for example websites – that are composed of multiple applications and can be easily deployed
on clouds.</p>
<p>LDA helps you implement applications, but LDA’s primary purpose is not implementing individual applications – there are
lots of technologies for that. Rather, LDA helps implement coherent systems – for example large websites – made up of
multiple applications that talk to each other. LDA applications are system components that communicate entirely through HTTP/REST interfaces.
Two other common approaches for integrating applications, the ‘central repository’ approach and the one that in recent years
has come to be called ‘SOA’, have problems that we believe the LDA approach overcomes.</p>
<p><img src="images/system.png" alt="" /></p>
<p>We have seen that the regular HTML web is an extraordinary integrator.
By embedding links – usually HTML anchor tags – inside pages, HTML
enables the user of a browser to navigate to other pages without constraining in any way how those pages are implemented – they
don’t even have to be HTML. This integration does not require any sort of
coordination or contract between the owners of the referenced pages and the
owner of the page that references them, except perhaps to demand that the URLs
used to reference the pages should not change or disappear. This extraordinarily
simple idea has allowed the world-wide web to freely integrate
commerce sites, blogs and micro-blogs, music sites, video sites, social
networking sites, government sites, news sites and so on.</p>
<p>The basic idea of Linked Data is that if you just substitute a data model
(<a href="/what-is-this-rdf-thing/index.html">RDF</a>) for HTML and otherwise
‘make like the world-wide web’, then applications can achieve the same sort of easy and
limitless integration of UI, data and function that we see for pages in the HTML web.
For this to work, we need to implement client applications that ‘make like a browser’
and server applications that expose all data as hypertext-linked resources. The LDA
framework provides server-side and a client-side components that make it easy to
create applications that follow exactly that pattern.</p>
<p>LDA implements (parts of) newer specifications like the
<a href="http://www.w3.org/TR/ldp/">Linked Data Platform</a> in addition to using long-standing technologies like HTML and RDF.</p>
<p>The server-side component is written in Python,
about 75% of which would need to be ported to other languages to support application development in
those languages. We have not yet done such ports, so currently you have to write server
applications in Python to use our framework. The other 25% of the server code takes
the form of subsystems that implement standard system functions – authentication,
access control and multi-tenancy – that are accessed as HTTP resources and so can
remain in Python even on a system that implements applications in other languages.</p>
<p>LDA’s client component consists of Javascript libraries containing helper methods
for various common tasks. There is almost no framework code on the client – you can write
your clients using whatever Javascript frameworks you like and still use the LDA libraries.
The libraries simply make it easier to work with data from resources produced by LDA-based servers.</p>
<h2>Getting Started</h2>
<p>The best way to get started with LDA is by downloading the framework and example repositories
from github and then running the ‘Todo Sample’ and its corresponding tutorial.</p>
<ul>
<li><a href="/downloading-the-software/index.html">Downloading the Software</a></li>
<li><a href="/developing-lda-applications/index.html">Developing LDA Applications</a></li>
</ul>
<p>Once you understand the ‘Todo Sample’, you should have a pretty good understanding of how
a basic LDA application functions. If you then look at (and run) the rest of the examples,
you’ll start to see the kinds of things that are possible with LDA and how
flexible and open it is wrt. UI programming style.</p>
<p>There are also a number of resources that you may want to read to get a better understanding
of the architecture and patterns that LDA is encouraging and why.</p>
<ul>
<li><a href="/lda-client-libraries/index.html">LDA Client Libraries</a></li>
<li><a href="/lda-server-libraries/index.html">LDA Server Libraries</a></li>
<li><a href="/what-is-this-rdf-thing/index.html">What Is This RDF Thing</a></li>
<li>More to come …</li>
</ul>
<p>You can contact us, ask questions, get involved, etc., by posting github issues or asking question on Stack Overflow …</p>
<h2>Summary of features and capabilities</h2>
<ol>
<li> Provides a set of protocols for multiple RESTful applications – we call them subsystems – to be seamlessly integrated in a single system behind a reverse proxy.</li>
<li> Provides a set of optional ‘standard’ subsystems that implement common functions for the whole system. These include:
<ol>
<li>Authentication</li>
<li>Access Control</li>
<li>Multi-tenancy</li>
</ol>
</li>
<li> Provides an optional server-side implementation framework for building individual subsystems within the system.
<ol>
<li>Implements POST, GET, PATCH and DELETE http methods and translates them into CRUD operations on a database. Allows programmers to override these standard method behaviors in any way they choose. Commonly this is done to implement validations on data, augment resources beyond the data stored for them in the database, interface with external services, fabricate resources that are not stored in the database, implement side-effects and so on.</li>
<li>Implements a strict separation of business logic from UI presentation logic such that all presentation logic is executed on the client and the server contains only business logic.</li>
<li>Allows each subsystem to use its own database, and even its own database technology, or optionally to share.</li>
<li>Ensures that all externally-visible pointers and identifiers are in the form of opaque HTTP URLs – no database keys or other local-scope identifiers are externally visible.</li>
<li>Ensures the resilience of database data in the face of server rename. All references in databases to resources in the same system – even on different machines – are stored in relative form.</li>
<li>Detects optimistic concurrency collisions on resource updates and helps clients recover.</li>
<li>Accepts and produces data in a number of different formats – the most commonly-used are a nested JSON format (for programmers) and HTML/RDFa (for the browser)</li>
<li>Allows flexible query on the stored data with the results exposed as Linked Data resources. The queries are also Linked Data resources.</li>
<li>Implements Linked Data Basic Profile Containers via query on underlying resources. (Pagination of Containers is still a to-do).</li>
<li>Tracks version history of all resources</li>
<li>Interfaces with the authentication subsystem for login/logout</li>
<li>Interfaces with the access control subsystem to secure resources</li>
<li>Interfaces with the multi-tenancy subsystem to support multiple tenants</li>
</ol>
</li>
<li> Provides helper methods for writing javascript clients that exercise the REST interface of the system.
<ol>
<li>Supports ‘single-page applications’ (SPAs) on both web browsers and mobile devices. Ensures a search-engine-optimizable, bookmarkable, HTML representation for each resource of the system.</li>
<li>Translates between various data formats on the client</li>
<li>Calculates minimum patches for updating data</li>
<li>Calculates and displays version-history differences</li>
<li>Provides some simple methods for exercising the REST methods from the client</li>
</ol>
</li>
</ol>
<footer>
<p class="meta">
<time datetime="2014-03-28T09:04:00-04:00" pubdate data-updated="true">Mar 28<span>th</span>, 2014</time>
</p>
<div class="sharing">
<a href="//twitter.com/share" class="twitter-share-button" data-url="http://ld4apps.github.io/index.html" data-via="" data-counturl="http://ld4apps.github.io/index.html" >Tweet</a>
</div>
</footer>
</article>
</div>
<aside class="sidebar">
<section>
<h1>Guides</h1>
<ul id="Pages">
<li class="page">
<a href="/developing-lda-applications/index.html">Developing LDA Applications</a>
</li>
<li class="page">
<a href="/downloading-the-software/index.html">Downloading the Software</a>
</li>
<li class="page">
<a href="/index.html">Welcome to LDA</a>
</li>
<li class="page">
<a href="/lda-client-libraries/index.html">LDA Client Libraries</a>
</li>
<li class="page">
<a href="/lda-server-libraries/index.html">LDA Server Libraries</a>
</li>
<li class="page">
<a href="/mpnally-tutorial/index.html">Original Mpnally Tutorial</a>
</li>
<li class="page">
<a href="/standard-subsystems/index.html">LDA Standard Subsystems</a>
</li>
<li class="page">
<a href="/what-is-this-rdf-thing/index.html">What Is This RDF Thing?</a>
</li>
</ul>
</section>
<section>
<h1>GitHub Repos</h1>
<ul id="gh_repos">
<li class="loading">Status updating...</li>
</ul>
<a href="https://github.com/ld4apps">@ld4apps</a> on GitHub
<script type="text/javascript">
$(document).ready(function(){
if (!window.jXHR){
var jxhr = document.createElement('script');
jxhr.type = 'text/javascript';
jxhr.src = '/javascripts/libs/jXHR.js';
var s = document.getElementsByTagName('script')[0];
s.parentNode.insertBefore(jxhr, s);
}
github.showRepos({
user: 'ld4apps',
count: 20,
skip_forks: true,
target: '#gh_repos'
});
});
</script>
<script src="/javascripts/github.js" type="text/javascript"> </script>
</section>
</aside>
</div>
</div>
<footer role="contentinfo"><p>
Copyright © 2014 - Your Name -
<span class="credit">Powered by <a href="http://octopress.org">Octopress</a></span>
</p>
</footer>
<script type="text/javascript">
(function(){
var twitterWidgets = document.createElement('script');
twitterWidgets.type = 'text/javascript';
twitterWidgets.async = true;
twitterWidgets.src = '//platform.twitter.com/widgets.js';
document.getElementsByTagName('head')[0].appendChild(twitterWidgets);
})();
</script>
</body>
</html>