OpenLink Universal Integration Middleware - Frequently Asked Questions about the Virtuoso Product Family
- Virtuoso Universal Server
- Why is Virtuoso described as a Universal Server?
- What is the difference between the Open Source and Commercial Editions?
- How does Virtuoso deliver on SOA?
- Can Virtuoso be considered an ESB?
- Enterprise Data Management
- Virtual Database Engine
- What does Virtuoso mean by a 'Virtual database'?
- With what types of databases does Virtuoso interface?
- How does Virtuoso deal with distributed transaction issues?
- How does Virtuoso deal with differences in SQL dialects?
- How do you set up a virtual database?
- What are the security implications of a virtual database with Virtuoso?
- Can I join data across different database engines?
- SQL Database Engine Functionality
- Is Virtuoso a relational DBMS?
- What client APIs does Virtuoso support?
- What level of SQL is supported?
- What is the SQL security model supported by Virtuoso?
- What is Virtuoso's transaction support?
- What is Virtuoso's distributed-transaction support?
- What SQL optimization does Virtuoso perform?
- How does one administer a Virtuoso database?
- How does Virtuoso handle backups?
- What is Virtuoso's support of stored procedures?
- Can one extend Virtuoso's SQL?
- Is there full text indexing support?
- What is the internationalization support of Virtuoso?
- What encoding formats are supported?
- What development environment/debugging/profiling facilities are there for SQL and stored procedures?
- Does Virtuoso support stored procedures across different database engines?
- Does Virtuoso support VIEWS that include tables hosted different database environments?
- What tools does Virtuoso support for analyzing data?
- Object-Relational Functionality
- What about SQL-200n Object Oriented features?
- How do Third-party Runtime-Hosting modules execute?
- What types of security or privileges are provided for Third-party Runtime Hosting?
- Does Virtuoso Object-Relational database support arbitrary length types?
- What does Virtuoso offer in terms of Complex Objects like the creation of Composite Types?
- How are Composite Types handled and called?
- What about Data Inheritance?
- Does the Virtuoso Object-relational Database Support Triggers?
- XML Data Management
- How does Virtuoso store XML?
- How does Virtuoso generate XML from relational data?
- Can Virtuoso present legacy RDBMSs as XML stores?
- How does one combine native XML and relational data in queries?
- How do you make and transform XML inside queries and SQL procedures?
- What is the XPATH, XSLT, XQuery standard-compliance?
- What are the searching functions available: Standard XML languages (XQuery, XPath or/and proprietary languages)?
- What about SQLX standard support?
- How can one combine full text and XML structure-based queries in document-centric applications?
- RDF Data Management
- How do you load RDF data into Virtuoso RDF Triple Store?
- How do you query and perform searches with Virtuoso RDF Triple Store?
- What RDF Datatypes are supported in Virtuoso RDF Triple Store?
- How many graph models can Virtuoso RDF Triple Store support?
- What Data Access methods are supported ?
- Application Integration (Web Services & SOA)
- Web Services
- Why is Virtuoso described as a Web Services Platform?
- What is the benefit of Service Composition in Virtuoso?
- What is meant by Service Invocation Endpoints?
- Content Management, DAV, and HTTP Services
- Web Server
- Does Virtuoso offer a Web application development language?
- Can Virtuoso be used as Search Engine?
- What is Virtuoso's relevance in the world of XML?
- Does Virtuoso store XML Data Natively?
- Why is XML Data-Storage Important?
- Can I create Dynamic XML documents from SQL Data?
- Can Dynamic XML documents be built using SQL data from different databases?
- Which databases are supported by Virtuoso's SQL to XML functionality?
- Why is creation of XML documents from SQL important?
- What is the core web services protocol support?
- What WS-Security features are supported?
- How does one test web services under Virtuoso?
- How does one publish existing business logic via Web Services?
- What is the proven interoperability of the Virtuoso Web Services implementation as compared to other vendors?
- Process Management & Integration (BPEL)
- What is BPEL?
- What is Virtuoso BPEL Process Manager?
- BPEL Engine and Process Manager
- Is the BPEL engine and Process Manager compliant with Web Service standards?
- How is support for WS-Reliable Messaging integrated with VBPM?
- Can I use my existing BPEL files with the BPEL Process Manager?
- How do I monitor process activity?
- How are problems with long-running transactions handled?
- How do I test my business processes for all of the errors?
- What does the BPEL Process Manager system tell me about my executing processes?
- What information is provided on process?
- What other integration does the BPEL Process Manager offer?
- What about support for .NET or Java?
- What about Interoperability?
- Are there any special requirement to use Virtuoso BPEL?
- Collaboration and Network Effects FAQ
- What Mail Services does Virtuoso provide?
- Can I store e-mail received by a mail server in Virtuoso?
- How do I interact with my e-mails if stored within Virtuoso?
- What about Spam-filtering and Mail Services?
- News (NNTP)
- Data-access and Security
- How big is a typical Virtuoso installation?
- How much memory does Virtuoso require?
- What operating systems does Virtuoso support?
- How is Virtuoso Commercially Packaged?
- Does your product have an API and/or an SDK?
- Can Virtuoso be configured to make use of multiple processors
- Linked Data
Virtuoso is a cross-platform server that implements multiple server-side protocols as part of a single-server product offering. There is one server product? that offers WebDAV/HTTP, Application, and Database-server functionality alongside Native XML Storage, Universal Data-Access Middleware, Business Process Integration, and Web-Services Platform.
The Open-Source Edition lacks several features which are only available in Enterprise Edition:
- Sponger's Meta Cartridges
- SPARQL-GEO & GeoSpatial? indexing in general
- Virtual Database Functionality
- Data replication
- Clustering & High Availability
Virtuoso Universal Server supports the key SOA concepts including creating composite applications from loosely coupled data, and construction of web services from heterogeneous datasources, as well as integration, management, and synchronization of business processes.
Virtuoso is a Universal Server, but can be considered an Enterprise Service Bus (ESB). By supporting of a number of web service protocols including WS-RM, Virtuoso can act as a shared messaging layer for connecting application logic and other web services or business processes.
In the simplest form, a virtual database provides the ability to search across several databases with a single query (database-federation). Virtuoso extends this query functionality and data-transformation through hosted logic, SQL, SQL stored procedures and XML, and Virtuoso PL.
Virtuoso supports a number of database platforms and can simultaneously connect your ODBC, JDBC, UDBC, OLE-DB client applications and services to data existing in such databases as Oracle, Microsoft SQL Server, DB/2, Informix, Progress, Ingres and as well as other ODBC-compliant database engines.
When running on Windows, Virtuoso can act as an MS DTC (Distributed Transaction Coordinator) resource manager and client. This means that for a client aware of distributed transactions, Virtuoso can be enlisted as a participant in a 2PC transaction via ODBC, OLE/DB and .NET client interfaces. If Virtuoso acts as a participant in a distributed transaction and involves data from remote databases, it will propagate the enlistment if the remote database in question supports this. A virtuoso stored procedure can also initiate a distributed transaction into which it then enlists multiple other resource-managers as the need may arise. The enlistment is transparently handled by the VDB logic once the Virtuoso transaction has been declared as distributed.
Any transactions involving updates to exactly one remote database plus Virtuoso can be handled as single-phase commit without danger of corruption.
On other platforms, Virtuoso can act as an XA-compatible resource manager. In these environments Virtuoso cannot at present enlist remote databases but can be enlisted itself. The most convenient client API for this is JDBC with its distributed transaction support.
At the time of defining a remote data source, Virtuoso makes queries concerning its capabilities. It will use these results in generating SQL statements to pass to this data source. For example, if a remote database does not support a specific SQL function or construct, e.g. outer join, it will not present it with SQL statements containing these and will perform the unsupported operation locally instead. This is entirely transparent to the Virtuoso client.
Select a data source from the available ODBC data sources on your system, view the tables, views and stored procedures available on each, select which ones you want to access via Virtuoso and you are set. From now on, you may manipulate these remote objects from Virtuoso SQL and applications. A web-based UI takes you through this process in a few clicks.
The Security Manager inside the Virtual Database Engine is responsible for protecting data and data transmission through encryption. The security manager is also responsible for managing Application, User, Group, Role and Domain privileges as they relate to the creation, manipulation and destruction of Virtual Database data and metadata.
Certainly; Virtuoso provides the end-user or application developer with the ability to make single concurrent connections to multiple back-end databases and data sources (XML and XML Web Services). It is important to note that Virtuoso's data-access interfaces are all compliant with industry standards (XML, Web Services, ODBC, JDBC, NET, and OLE-DB) thereby broadening the number of applications, tools, and application-development environments capable of exploiting this Virtual Database functionality.
A simple heterogeneous join scenario could involve joining the "Customers" table in an Oracle database with the "Orders" tables in a Microsoft SQL Server database, and then making this available for ODBC and/or XML application consumption.
A more complex scenario could involve joining data across Oracle, SQL Server, and an XML URI (such as an RDF or RSS data feed from a web log, content syndicate, or web service), and then making this available to ODBC, XML, Web Services, JDBC, OLE DB and NET client applications.
Virtuoso implements a traditional relational database engine's functionality. This functionality includes SQL (Structured Query Language) for relational data, a Query processor, View Support, Standard Datatype support including character, number and dates, stored procedures, concurrency support, transactions, distributed transactions, scrollable cursor support just to name a few.
ODBC, JDBC, .NET data provider, OLE/DB. The Java and .NET clients are pure Java and .NET respectively. ODBC is Virtuoso's native low-level CLI.
Virtuoso is fully SQL92-compliant and supports several of the SQL-200n features, including:
- User-Defined Data Types with methods, inheritance etc.
- User-defined aggregates, including 20+ built-in statistical operations.
- SQLX for generating XML results in queries, including a native XML data type.
- Cubes and Rollup in GROUP BY.
Virtuoso supports standard SQL role-based security and full table and column-level granting of privileges. Additionally, Virtuoso offers row-level security through a system of policy functions. Event hooks can be defined for performing extra validation at login time, such as consulting an LDAP directory for the user's credentials.
Virtuoso's Transaction Manager component ensures that transactions are Atomic, Consistent, Isolated and Durable (ACID). The Transaction Manager ensures VDB Engines are capable of supporting Online Transaction Processing (OLTP) and Distributed Transaction-oriented applications and services. Virtuoso provides the 4 standard levels of isolation: dirty read, read committed, repeatable read and serializable. Repeatable-read is the default setting. See Virtual Database questions for a discussion of distributed transactions.
Virtuoso preserves transaction atomicity, consistency, integrity, and durability (ACID) across it own database servers as well as heterogeneous servers through the support of transaction commits and rollbacks using a 2-phase commit protocol.
Virtuoso has a cost-based SQL optimizer. It uses table row-count, data-size and value-distribution statistics for evaluating the cost of diverse execution plans. For each plan, loop-invariants are extracted, loop and hash join types are evaluated, different indices are compared for access performance and predicates are evaluated as early as possible, most restrictive first, for any join order being contemplated. Additionally, the programmer can explicitly specify the join order and join type (loop/hash) for each table.
Virtuoso database can be administered through the Virtuoso Conductor or through the interactive SQL tool ISQL.
Backups can be handled in a variety of ways. Virtuoso has both off-line and on-line incremental backups.
Virtuoso's transaction mechanism is based on keeping a read-only checkpoint plus a transaction log for any committed but non-checkpointed transactions. Virtuoso has an incremental, on-line backup function, which can backup a running database in its checkpoint state without restricting concurrent update activity. Virtuoso records at each checkpoint the pages, which were changed since the last backup. Hence the next backup will only cover pages which are changed in the checkpoint state since the last backup. Each checkpoint can optionally start a new transaction log, leaving a full audit trail of transaction logs. Having a series of full plus optionally incremental backups up to a certain checkpoint and then the transaction logs consecutive to the last backed up checkpoint will guarantee a full recovery up to the latest transaction committed at the time of failure. The backup function automatically compresses the backup and chunks it into fixed-size chunks for convenience in handling large databases.
On the other hand, as long as no checkpoint intervenes, it is safe to copy the database file(s) plus the log for an up-to-data clean image of the database.
Virtuoso has a very extensive procedure language called Virtuoso PL. The syntax of the Virtuoso PL resembles C with inline SQL-99 and PSM-96 features such as exception handlers. Stored procedures provide a significant increase in performance over client applications on the same machine for any application involving a number of short SQL operations, as in the case of OLTP.
Virtuoso can extend SQL by import Java and .NET classes and functions as well as build-in SQL functions written in C. In addition, you can persist instances of imported classes into Virtuoso tables. For all intents and purposes, a hosted class instance is indistinguishable from a native SQL user-defined type instance.
Virtuoso supports full-text indexing providing the ability to choose complex, multi-part document-ids for application-specific sorting of hits, efficient storage of secondary, non-free-text data in the free-text index for best retrieval performance, options for restarting searches at a specific hit as well as ascending and descending orders of the document id's.
Virtuoso supports Unicode (NCHAR/LONG NVARCHAR) columns as well as a national character set, which define how strings will get converted from narrow to wide characters. There is a number of pre-defined character sets included in a system table called SYS_CHARSETS. This list can be updated by defining new characters using a build-in function called charset_define().
Virtuoso supports Unicode, ASCII, and UTF.
What development environment/debugging/profiling facilities are there for SQL and stored procedures?
Virtuoso comes with a library of online tutorials which demonstrate all salient aspects of software development in Virtuoso/PL. Examples include XML processing, full text features, dynamic web pages, hosting Java and .Net and various scripting languages etc.
Virtuoso has a rich set of debugging and profiling tools. The interactive SQL utility has a debug mode in which you can set breakpoints and single-step stored procedures with functionality similar to what gdb or dbx offer for C.
On Windows, there is a MS Visual Studio extension package which allows defining Virtuoso SQL projects, provides IntelliSense? syntax highlighting and completion and many other features. The Virtuoso .NET data provider has design time interfaces to Visual Studio for drag and drop use in C# projects.
For performance profiling, Virtuoso offers a call graph profiler and test coverage utility. These show elapsed times and line-by-line execution counts for stored procedure code.
For regular database statistics, Virtuoso provides index-by-index cache-hit rates, wait times, deadlock-counts and other information for assisting database tuning.
Yes, Virtuoso enables you to write stored procedures that reference tables hosted in different database engines. This has two major benefits:
- You can store more of your database-centric application-logic within virtuoso and then leverage the performance advantages that stored procedures have over dynamic SQL.
- Your stored procedures no longer have to be database specific, a major reason why stored procedures are not used in when writing database-independent applications.
Yes, you can create logical VIEWS that include joins across tables within different database engines and data sources (XML and Web Services).
Virtuoso supports the basic SQL OLAP extensions for GROUP BY, i.e. CUBE, ROLLUP, GROUPING etc. Virtuoso does not offer specialized storage for OLAP cubes.
Virtuoso SQL supports SQL2000-style objects as standalone data in procedures and as column data types. The Virtuoso Object System supports single inheritance, late binding, polymorphism and persistence of objects as column values in SQL tables. An object's implementation may be native SQL, with methods in/PL, or the objects may be implemented in Java, or any Microsoft .NET or Mono ECMA CLI bound language. Hosted and native objects are indistinguishable from the perspective of a Virtuoso SQL application. The native methods and data members are automatically made accessible from SQL when the class or class hierarchy is imported into the SQL schema (data dictionary). Virtuoso supports single inheritance between tables through the SQL-200n UNDER clause. A subtable will inherit the supertable's columns, primary key and indices and can for itself add new columns and indices. Selects on supertables will also include rows that belong to subtables.
Virtuoso supports SQL 2K User Defined Types (UDTs) and User-Defined Functions (UDFs) which can be defined in SQL, Java and .NET-bound languages. Virtuoso also offers Procedure Views which are similar to table-valued functions that allows you to define a view as a stored procedure.
Runtime Hosting Languages such as Perl, Python, Ruby loaded in process. These are callable via special functions from SQL. Web pages in these languages can be hosted without any special programming.
Privileges are roles based at the table, column, procedure and type levels. Row Level security is based on table by table policy functions.
Virtuoso supports all combinations of narrow, wide and binary strings.
Virtuoso allows you to create UDTs which can reference any other UDTs. You can also declare columns to contain sort and long UDT instances regardless of implementation be it SQL, Java or .NET.
User-Defined Functions' arguments and return-values are passed by value and by reference. OID-referenced objects have no persistent identity. Virtuoso functions and composite types support dot-operators for data-members and member functions like other formal languages. In addition, since the objects are types at runtime arrays and other complex data structures can also contain UDT instances as well as other data.
Single inheritance for tables is provided via the under table and under for UDT functionality. Function-overloading is provided via dynamic binding of methods based on runtime type of self when there are multiple eligible methods, discriminating on compile-time types of arguments.
Virtuoso supports SQL99 row-level triggers that can call outside code for signalling to clients although no special client-notification mechanism is supported by the Virtuoso client-server protocol.
Virtuoso offers the XMLType datatype. This data-type can be made from a text representation and can again be converted into text. XPATH, XSLT, XQuery and SQLX operations can be applied to this type. It can be stored as either text or in a pre-parsed binary format. XMLType defined as a column value, a XML tree can be specifically full text indexed so that XML elements are taken into account. Besides normal text index operations, this indexing also allows resolving occurrence of elements, inclusion of text inside elements etc.
Virtuoso has several mechanisms for transforming SQL data into XML. One option is the "FOR XML" clause, which is a SQL option that can convert the output of a SELECT statement into a tree.
- SQLX is the standard SQL way of creating XML content from relational data. Special aggregates and functions allow composing trees in queries
- Mapping Schemas - A mapping schema is an XML schema, which defines how the data is to be extracted from, joins of relational tables. When an XPATH query is evaluated against a mapping schema, Virtuoso generates an SQL query, which will retrieve only the required rows and then generate the XML tree.
The SQL-based XML-generation features do not differentiate between local and remote tables, so any relational data will be accessible via these means as XML.
Virtuoso SQL offers special predicates for testing stored XML against XPATH and text conditions as well as extracting fragments from stored XML trees. New XML can be made from these with the SQLX functions or XSLT stylesheets, for example. A result column of a query may fully well consist of XML data. Inside a stored procedure, further XML operations can be applied to the data, in the case of a client the XML is seen as text via the client API.
Another approach is to write queries in XQuery and access SQL data from there. Any XML mapping schema appears as a document accessible with the XMLView XPATH extension function. Joins of tables can thus be accessed and filtered as if they were XML data to begin with. Note that this does not entail constructing XML for data, which is actually not needed by the Xquery statement.
XSLT and XQuery are most convenient for extensive processing of XML. For quickly generating simple XML trees from SQL data, SQLX functions are most convenient. For complex mapping of relational and XML data, mapping schemas are most convenient. For a one-to-one mapping between a foreign-key relation in SQL and tree-hierarchy in XML, the `FOR XML' SQL extension is most convenient.
Virtuoso currently supports XPATH 2.0, XSLT 1.1, and XQuery 1.0.
What are the searching functions available: Standard XML languages (XQuery, XPath or/and proprietary languages)?
XPath, Xquery, Freetext queries, and, or not proximity and wildcards. A free-text expression may be embedded inside an XPath predicate using a special XPath expression.
Virtuoso supports offers full support of SQLX which is SQL with a collection of functions added for creating XML entities from standard relational queries. The SQL/XML is an emerging standard driven by the H2.3 Task Group (formerly the SQLX Group). Current support for these functions includes XMLELEMENT, XMLATTRIBUTES, XMLFOREST, XMLCONCAT, and XMLAGG when combined with SQL result in XML that is returned in a column in a result set.
This is possible in either SQL or XQuery. In SQL, for example, one can join a table of XML documents with author information by writing a SQL join between a publications table and an authors table. The author reference would just be extracted with XPATH after application of a free-text-based content-filtering.
In XQuery, the documents table and authors tables would be represented as documents via mapping schemas and the one could write flwr statements for joining the two.
_RDF Triple Store_?
You can load N3, Turtle, and RDF/ XML files into a Virtuoso-hosted "named graph" using Virtuoso SQL functions. The same functionality is also available to single triple statements.
Virtuoso also has the ability to automatically extract metadata from DAV resources via metadata extractors. Virtuoso includes a number of metadata-extractors for a range of known data-formats (typically microformats and some popular binary file types). These metadata extractors enable automatic triple-generation, graph-association, and storage in Virtuoso's RDF Triple Store. It is also important to note that Virtuoso actually converts WebDAV metadata into RDF providing richer query capability against WEbDAV? resources.
SPARQL statements can be written inside SQL statements or presented as top-level SQL queries. This means that any ODBC, JDBC, .NET or OLE/DB application can simply make SPARQL queries just as if they were SQL queries.
Virtuoso also supports the SPARQL transport protocol, allowing SPARQL queries to be executed over HTTP. It also supports the SPARQL XML results serialization format.
If an RDF type corresponds to a SQL data type, the data is stored as a native instance of the SQL type in question. For strings with language tags and other RDF data that has no direct SQL counterpart, a special representation preserving the RDF semantic is used.
SPARQL protocol over HTTP; any SQL client library can be used for issuing SPARQL queries just as well as SQL queries.
Virtuoso implements the complete stack of Web Services foundation protocols; SOAP, WSDL, and UDDI. It enables SQL Stored Procedures, Microsoft .NET, Mono, and Java-based application logic to be invoked using SOAP. These SOAP-compliant services are automatically described using WSDL, and advertised for binding via UDDI. This entire process is achievable without writing a single line of new code.
Exposure of existing time-tested application-logic for invocation using Web Services protocols without any code re-writes. Code format support includes SQL Stored Procedures, .NET assemblies, Java Classes, C/C++ modules, etc.
Service Invocation endpoint are HTTP/WebDAV based virtual directory and multi-homing functionality that provides endpoints for SOAP-, WS-Security-, WSDL-, and UDDI-compliant interactions with composite services.
Virtuoso can act as a repository through DAV, or WebDAV, a protocol for Web-based Distributed Authoring and Versioning. Repository content elements are called documents, corresponding to files, and folders/collections, corresponding to directories. Collectively these documents and folders (collections) are known as resources.
Virtuoso implements the DAV protocol, allowing you to create and manage resources either directly through repository manipulations or indirectly, through a variety of WebDAV services.
Yes, as an HTTP/WebDAV-compliant server all of the components within its WebDAV repository are accessible by URL and WebDAV protocol using HTTP/WebDAV-compliant clients (user agents such as web browsers). The same applies to local operating systems files (subject to security controls of course).
Examples of WebDAV clients include the Windows (via Web Folders feature), Mac OS X, Nautilus Desktop (Linux and Solaris). An ever increasing pool web development tools and content-management systems include in-built support for WebDAV.
Migrating your existing Web Site to one hosted by Virtuoso is as simple as using the Virtuoso HTML-based UI to import the site.
Virtuoso has provided a built-in RFC-959/RFC-2389 Protocol Server for FTP as well as an FTP client since V3.2. Virtuoso FTP Client allows through Virtuoso PL code the ability to retrieve, submit and list files from any FTP server and stored the results on a local file system or in the database. The FTP Server provides FTP access to the Virtuoso WebDAV repository using the same authentication and permissions system as WebDAV.
Yes, the Web application development language is called Virtuoso Server Pages (VSP; file extension .vsp) which can be used in conjunction with XML-based server side control called Virtuoso Server Pages for XML (VSPX, file extension .vspx). VSPX offers a suite of data-bound controls for browsing and updating SQL data, input-validation, session-management and any other common web application development environment features.
XSLT can be used for pre- and post-processing VSPX pages. On the preprocessing side, it can serve to divide logic from layout by expanding simple markup into complex controls and scripting. On the output side it can be used to process the HTML generated by a dynamic web page to add HTML layout and graphic elements to bare-bones data produced by the business logic.
Yes, like any search engine it possesses Free Text search capabilities that leverage its ability to produce Free Text indexes on all text data (SQL or otherwise). Virtuoso free text search includes word-proximity searches and the ability to combine XPATH, Free Text and Regular Expressions, if required, in the same query. Ultimately you can harvest and then index any form of text-based web data (HTML, XHTML, XML etc.) stored in Virtuoso.
It addresses the fundamental question: from where is all the XML data going to come? You can't exploit the benefits of XML without XML data; likewise you can't manually recreate XML data in an attempt to address this reality. Virtuoso enables you to create XML data from existing data sources such as your SQL databases. It also enables the creation of XML data from data external URL accessible data. An in-built validating XML parser and an XSL-T engine lie at the root of Virtuoso's XML Services offerings.
Yes, XML documents are stored in an XML repository. These documents may be parsed or unparsed at time of storage; in either case indexes are built which provide rapid access to these documents.
A major benefit of XML is its ability to provide an open format for data representation, exchange, protocol and application modeling. By using XML as a uniform data interface to disparate data sources, it becomes much easier to cost-effectively develop and deploy next generation web applications; increasingly these applications will depend on data hosted in a variety of databases and data sources.
Yes, Virtuoso implements SQL extensions that enable the results of standard SQL queries to be transformed into XML documents, which are openly accessible to user agents such as Web Browsers via HTTP and/or WebDAV. It is important to note that these SQL-XML documents are accessible by URL and sensitive to the underlying changes that occur in the underlying database tables from which they have been derived.
Yes, the SQL to XML functionality sits above Virtuoso's virtual database (VDB) functionality, which enables a unified logical and physical representation of database tables and views that reside in disparate database engines from different database vendors. The only requirement is that these databases have to be ODBC- or JDBC-accessible - implying the existence of data-access drivers for these databases.
It supports any database that supports ODBC and/or JDBC, so pretty much every database.
A lot of data that you would typically like to use as the foundation of your web application initiatives more than likely resides in application databases that are predominantly SQL-based.
SOAP 1.1, 1.2, WS-Security, WS-Trust and WS-Policy.
Virtuoso support of Web Services Security includes enabling the use of symmetric and asymmetric encryption, digital signing, and identity authentication as defined by the WS-Security specification.
Published SOAP Services can be tested through VSMX which is a Virtuoso-generated test page allowing you to test SOAP Services. The SOAP Services can be referenced by the Server instances URL and the virtual directory containing the logical path of the services.
Business logic defined in stored procedures and functions can be exposed as SOAP services whether they are native within Virtuoso or from remote data sources. These stored procedure can be published by linking the selected stored procedure through the Remote Procedure Interface, then creating a new or selecting an existing Virtual Directory and finally publishing to the Virtual Directory using the publish function in the Virtual Director User Interface.
What is the proven interoperability of the Virtuoso Web Services implementation as compared to other vendors?
Virtuoso participates in interoperability tests rounds for different implementations of the SOAP and WSDL specifications defined by the SOAP Builders and WS-RM Interop communities. The Virtuoso SOAP server and client implements SOAP protocol versions 1.1 and 1.2. The SOAP services hosted in Virtuoso can be described with an automatically generated WSDL document or with a user-supplied WSDL document. The Virtuoso SOAP Server and client with protocol support version 1.1 and automatically generated WSDL documents have been tested. Interop tests are organized into rounds and each round consists of the following groups: (List of service endpoints and client results is available in html form or via SOAP).
- SOAP Interop Round 1 - Base interop tests are superseded by Round 2 Base test
- SOAP Interop Round 2 - SOAP interop base, GroupB? and GroupC?
- SOAP Interop Round 3 - WSDL interop including EmptySA?, Import1-3, Compound1 &2, DocLit?, DocLit? Parameters and RpcEncoded? Tests
- SOAP Interop Round 4 - Contains DIME/SwA, Fault message processing, WSDL/XSD
- WS-RM - WS-ReliableMessaging? tests to test messaging over SOAP
Virtuoso's SOAP server and client with protocol support for version 1.2 have been tested with test cases as per W3C SOAP Version 1.2 Specification Assertions and Test Collection. Rounds 1-4 tests are located on Virtuoso Interop and through our SOAP on-line tutorials. The WS-RM interop tests can be experienced through our on-line WS-RM tutorials.
BPEL4WS (BPEL for short) is an XML vocabulary for orchestrating SOAP and WSDL-compliant Web Services. It is the critical standard for creating composite processes from a collection of Web Services using the principles of Service Oriented Architecture (SOA).
Virtuoso BPEL Process Manager (VBPM) engine is a run-time and administration environment for executing processes based on BPEL4WS 1.1 (BPEL for Web Services), the latest version of a specification designed by Microsoft, IBM, BEA Systems and Siebel Systems. The software vendors are shepherding the spec through e-business standards body OASIS.
Virtuoso provides a number of WS protocols on the WS-I standards including Security (WS-Security) and Reliability (WS-Reliable Messaging). Virtuoso BPEL engine also includes a number of Web Services protocols that add security, reliability and Enterprise scalability.
- WS-Reliable Messaging
- WS-Policy Attachment
- WS-Policy Assertions
- XML Signature
- XML Encryption
Processes in can be deployed for any business-critical transactions over the Internet using the WS-Reliable Messaging (WS-RM) specification through guaranteed (at-most-once, at-least-once, and exactly once) messaging for any partner via BPEL Process Manager.
Yes. Virtuoso BPEL Process manager fully implements the BPEL specification and can deploy any BPEL document created using any BPEL modeling tool that supports this specification.
The BPEL Process Manager includes a web-based user interface for testing, debugging, and monitoring deployed business process.
The BPEL Process manager includes support for compensation, fault-handling and event handling.
The BPEL Process Manager product includes a debugger to test business processes in the Debug Message Queue, which includes the state of a given process, actions for the process and list of instances for the process.
The BPEL Process Manager provides real-time status for all running processes and transactions on any BPEL processes deployed on the server including Information on bpel source, wsdl and partner links.
The BPEL Process manager provides statistics and reporting details on process and instances which can be so that processes can be analyzed and later optimized for deployment.
The BPEL Process manager has extensive database-, XML- and Web Service integration and provides for intelligent transformation for XML and non-XML applications and data. Virtuoso allows integration of databases into Service-Oriented Architectures (SOAs), by automating the creation of Web Services from multiple tables in any ODBC-, JDBC- or ADO.Net-compliant database.
Through the BPEL process manager any BPEL processes can directly invoke local hosted Java or .NET logic as well as access SQL data resident in local and remote tables.
Virtuoso BPEL has gone through an extensive interoperability testing against Microsoft, Oracle, and other vendors' implementations. Virtuoso also offers an interoperability site for testing and sharing results, which validate the Virtuoso BPEL engine, and ensures the rapid orchestration of existing Web services.
The BPEL engine requires at least Virtuoso Universal Server 4.5 and the BPEL Process Manager, which is compatible with any browser on any platform.
SMTP, POP3 and NNTP?
Virtuoso includes an SMTP sink/drive that enables any SMTP-compliant Mail Transfer Agent (MTA, such as sendmail, exim) to write its mail into a Virtuoso database. Email data stored in Virtuoso is retrievable via the POP3 protocol with IMAP4 support planned for a later release. SMTP and POP3 are also available as Virtuoso PL functions enabling the creation of sophisticated mail-oriented applications.
Yes, Virtuoso provides e-mail storage drivers for popular SMTP servers such as sendmail and Windows SMTP. This means that you can configure your mail server such that it stores e-mails inside Virtuoso rather than in the OS.
There are two ways of doing this: the first is use Virtuoso as your POP3 server, and then let your POP3-based mail client interact directly with Virtuoso. Secondly, you can move mail from within the Virtuoso SQL repository into the WebDAV repository for direct access.
Virtuoso enables you to combine the functionality of a mail system and database so that you can custom develop spam filters or customize Virtuoso (via its server extensions kit) to work with 3rd party Spam filter tools. Virtuoso can enable spam-filtering to occur immediately after mails are deposited in your mailbox, and prior to POP3 mail retrieval.
Yes, Virtuoso implements NNTP (Network News Transport Protocol) allowing a very simple interface for creating your own newsgroups.
Yes, you can use Virtuoso to attach to newsgroups hosted on any NNTP Server.
- Standard SQL-92 GRANT/REVOKE statements for DB users.
- Access control lists for incoming clients based on source IP.
- Each incoming connection can be passed to a hook function (a Virtuoso/PL stored procedure) for custom security measures.
- SSL TLS is available for both ODBC and JDBC clients
- x509 certificates for both ODBC and JDBC
- For HTTP/DAV/SOAP Access
- By default, requests for resources contained within the DAV repository are checked using HTTP/1.1 Digest authentication, using credentials stored in system users tables.
- A UNIX-like permission mechanism is used to control access to contents of DAV repository; these permissions apply to users and groups of users.
- BASIC and HTTP/1.1 Digest authentication.
- Custom authentication methods may be implemented via an authentication hook API.
- Role-Based Security
- WS-Security - enabling the use of symmetric and asymmetric encryption, digital signing, and identity authentication as defined by the WS-Security specification. Visit the online tutorials.
Approximately 300MB. If you exclude tutorial materials, sample applications, demos, and documentation the installation is approximately 100MB.
Nothing special, it can run within an 64MB environment if this is all you have, but it can also take advantage of large system memory providing you with the ability configure Virtuoso as an in-memory database if you so desire.
Virtuoso currently supports Windows (XP/2K/2003), Linux (Redhat,Suse) Mac OS X, FreeBSD?, Solaris, and other UNIX (32- & 64-bit platforms).
Virtuoso comes in two distinct formats: Standard Edition and Enterprise Edition. The Enterprise Edition includes out of the box bindings for third-party distributed transaction-management environments such as MTS/COM+ and J2EE.
Virtuoso clients connect to Virtuoso via standard APIs and protocols. The APIs includes ODBC, JDBC, a .NET data provider and OLE/DB. Client libraries are provided for all these. Protocols include SOAP, most WS* protocols, DAV, XML for Analysis (XMLA) and others. Common operating systems and development environments offer clients for these protocols.
For adding application logic server side, one may use Virtuoso/PL, Java, .NET bound languages or C. Examples of all these are included in the package.
A single query runs on single thread (plus I/O in separate thread) in Virtuoso. Without waiting for disk, it's faster to run it in a single thread than to parallelize and get synchronization overheads . While waiting for disk access, CPU times does not matter as the idle CPUs are waiting for disk reads.
The key requirement to an RDBMS database is its ability to serve hundreds clients in parallel. Having 4 or more queries from 4 or more clients, all cores of the machine will have something to run.
When we complete the Virtuoso cluster version you will be able to parallelize a query between boxes, in that case many boxes may simultaneously run many threads per query; but any given box of the cluster will run no more than one thread per query at time. The cluster wins in speed because the total RAM is bigger, not because multi-threading per query is so useful.
See detailed information here.