1. The document discusses using the tmjs Topic Maps engine, written in JavaScript, for server-side applications like a PSI server.
2. Tmjs allows full Topic Maps processing including variants and the TMAPI API in JavaScript, making it platform independent and able to run on modern browsers, mobile devices, and servers using Node.js.
3. An example use case shown is a PSI server that takes a Topic Map as input and serves pages with information about subjects based on their identifiers.
1. W E B V E V E R I E T
JavaScript Topic Maps in
server environments
Jan Schreiber <jans@ravn.no>
Ravn Webveveriet AS, 2010-10-01
1
2. Outline
• JavaScript
• The tmjs Topic Maps engine
• Use Case: A PSI Server
• Outlook
W E B V E V E R I E T
2
3. JavaScript
• JavaScript is LISP with a C-like syntax
• Virtually every personal computer in
the world has at least one JavaScript
interpreter installed on it and in active
use.
W E B V E V E R I E T
3
4. tmjs
• A Topic Maps engine
• Written in pure JavaScript
• Full TMDM including Variants
• TMAPI 2.0-based
• In-memory backend, JTM import/
export, experimental XTM 2.0 import
(requires DOM)
W E B V E V E R I E T
4
5. tmjs
• Platform independent: All(iPhone &
browsers, mobile devices
modern
Android), server-side JavaScript
• Unit tests, CXTM tests (partly) & JSLint
validating
• Small changes to TMAPI due to the lack of
method overloading
• Syntactic sugar: Supports chaining of
TMAPI calls
W E B V E V E R I E T
5
6. Chaining
1 tm.createTopic().addSubjectIdentifier(foo).
2 createName('bar').getParent().
3 createOccurrence(type,'baz').
4 addScopingTopic(quux);
W E B V E V E R I E T
6
7. tmjs: Outlook
• More import/export formats: XTM 2.0, CTM
• Complete TMAPI, add more tests, full CXTM
• Persistence:
• Web SQL Database backend
• Persistent backend for Node (couchdb?)
• Later: Query language
W E B V E V E R I E T
7
8. Use Case: A PSI Server
• Idea: Start the server with a Topic Map
and it will serve information about all
Subject Identifiers for a given domain
W E B V E V E R I E T
8
10. Server-side JavaScript
• 1996: Netscape releases LiveWire as
part of Netscape Enterprise Server 2.0
• 2009: Ryan Dahl writes Node
W E B V E V E R I E T
10
11. Node
• A framework for low-level network
applications based on Google's V8
engine
• TCP, DNS and HTTP are first-class
protocols
• Event-based, asynchronous
programming
• All I/O is non-blocking
W E B V E V E R I E T
11
14. db_query(db, "SELECT * FROM topic", callback);
callback = function (err, result) {
// ...
}
W E B V E V E R I E T
14
15. 1 var tm, servername;
2 // assumes that the TopicMap object tm has been initialized and
3 // the topic map in question has been imported successfuly.
4 // servername is set from a command line parameter
5 http.createServer(function (req, res) {
6 var url = 'http://'+servername+req.url, loc, topic;
7 loc = tm.createLocator(url);
8 topic = tm.getTopicBySubjectIdentifier(loc);
9 if (topic) {
10 res.writeHead(200, {'Content-Type': 'text/html'});
11 // create a page with information about the PSI
12 } else {
13 // Not found: create a 404 response
14 }
15 res.close();
16 }).listen(80);
W E B V E V E R I E T
15
16. Use Case: A PSI Server
• More output formats: XHTML, JTM, XTM
• Support for logging, caching, templates
• Configurable list of information elements
that are included on generated pages (e.g.
dc:description, supertype-subtype)
• PSI black-listing
• subj3ct.com integration
W E B V E V E R I E T
16
17. PSI Server: Observations
• Easy to implement
• It’s really fast: 200+200ms to read the
Opera topic map, 1ms to serve a PSI
page
• tmjs can be used on server and client
side Reuse of application code
W E B V E V E R I E T
17
18. Summary & Outlook
• Server side Topic Maps with JavaScript:
possible!
• Asynchronous TMAPI?
• In its current state maybe best suited
for low-level applications
W E B V E V E R I E T
18
19. What could it be good for?
• TMRAP, TM REST API
• SDshare
• P2P applications
• DNS servers
W E B V E V E R I E T
19
20. Questions?
Download tmjs now!
http://github.com/jansc/tmjs
Coming soon:
http://github.com/jansc/node-psi-server
W E B V E V E R I E T
20