OpenLink’s newest iteration of the Virtuoso database engine is geared to take the wild innovation of its predecessor to new heights.
Adding to Version 2.7’s support for XML, Web services, and Internet standards — a list longer than your arm (see our Test
Center Analysis, "Across the universe") — the forthcoming Version 3.0 will also host ASP.Net pages and user-defined functions written in .Net languages on both
Windows and Linux, more than proving it worth a look.

Virtuoso Universal Server 3.0 Beta
OpenLink Software, openlinksw.com
|
Beta |
 |
Business Case: Enterprise middleware that unifies SQL, text, XML, and object data will play an increasingly vital role in delivering business
data to users.
Technology Case: Virtuoso 3.0's capability of hosting .Net languages, on both Windows and Linux, creates exciting new options for integrators.
Pros: + Aggressive support for publishing Web services from local or foreign databases and for consuming them from anywhere + Equipped to index and search XML data + All-in-one combination of universal database, application server, and Web-services-savvy integration toolkit
Cons: - Activation threshold for learning to use this complex, multifunctional product is high
Cost: Starts at $599 for five concurrent users
Platforms: Windows, Linux, Solaris, AIX, HP-UX, Mac OS X
|
 |
About our Reviews and Scoring Methodology
|
|
|
|
OpenLink CEO Kingsley Idehen, Virtuoso's mastermind, abides by two basic principles: No. 1, Data management is the foundation of IT; and No. 2, developers
who build on that foundation need choices.
One dimension of choice is data flavor. To that end, Virtuoso's SQL core embraces XML, has a validating parser and XSLT (Extensible
Stylesheet Language Transformation) processor embedded in it, can index and search within XML blobs, can express SQL queries as XML
(optionally producing an XML Schema), and supports the still-evolving XQuery 1.0 standard.
Another dimension of choice is data access. In terms of data consumption, Virtuoso, which is rooted in OpenLink's suite of data-access drivers, can augment its own SQL tables and stored procedures by linking to foreign ones such as those
from Oracle or Microsoft SQL Server. Its PL (procedure language) also includes primitives used to fetch data by way of HTTP
Get, raw SOAP calls, or WSDL-described SOAP calls.
As a data provider, Virtuoso supports database-style clients with ODBC, JDBC, and OLE-DB drivers; SOAP clients by means of
PL wrappers around local or remote procedures; and WebDAV (Web-based Distributed Authoring and Versioning) clients, including Windows Explorer and Office, by projecting file-system-like
views of query results.
Yet another dimension of choice is platform — a vague term that encompasses OS, application server, and programming environment.
Virtuoso has many of the OS bases covered: Microsoft Windows, Linux, Sun Solaris, AIX, Hewlett-Packard HP-UX, and Mac OS X.
It runs as a self-contained application server, using PL code embedded in Virtuoso Server Pages to manipulate the SQL, XML,
and DAV resources controlled by the engine.
Whereas Version 2.7 is equipped with the option to embed a PHP (Hypertext Preprocessor) run time and a Java run time — which
can in turn host JSP (Java Server Pages) using, for example, Tomcat — Version 3.0 extends hosting support to .Net, using ASP.Net
on Windows, and to Mono — the Ximian-led open-source .Net project — on Linux.
But there's more to this story than just JSP or ASP.Net support. User-defined functions written in Java or .Net languages
are directly available to SQL statements and PL procedures. Java or .Net objects can be serialized, stored in the database,
and invoked from the database. Creating this object/relational/XML hybrid in a single environment is an accomplishment; doing
it for Java and multiple flavors of .Net is truly inspiring.
Working Web services
There's so much going on under Virtuoso's hood that you really need a concrete example to see how the pieces fit together.
Although it seems that everybody wants to write an RSS (Rich Site Summary) aggregator nowadays, I picked that project anyway
because it nicely illustrates Virtuoso's diverse powers. The starting point for an RSS aggregator is a list of news feeds.
My feeds live in a Frontier database and are published to the Web as an OPML (Outline Processor Markup Language) file. There
are a dozen ways to use Virtuoso to acquire that list of feeds. I could, for example, use Virtuoso’s built-in Web client to
fetch the OPML file as a database column and then use its built-in XSLT processor to reduce the XML to a list of URLs. Instead,
because I had already written a SOAP service that returns the list of feeds, I decided to call it from Virtuoso.