Virtuoso Universal Server Open-Source Edition Anton Avramov.

20
Virtuoso Universal Server Open-Source Edition Anton Avramov

Transcript of Virtuoso Universal Server Open-Source Edition Anton Avramov.

Page 1: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Virtuoso Universal ServerOpen-Source Edition

Anton Avramov

Page 2: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Openlink Software - Кратка история

• 1992 – Основана• 1992 - Разработка на ODBC драйвери• 1998 - Купува Kubl от Ори Ърлинг и започва

проекта Виртуозо• 2000 - Сформира се мултинационален екип

България, Русия, Новосибирск, Холандия, Финландия, САЩ, Англия и др.

• 2006 - Пуска се Open-Source Версия

Page 3: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Проектът Virtuoso

• Virtuoso Universal Server– DB Server, WEB Server, …

• Компилирана на 32 платформи– Linux– Windows– MacOS– Solaris– SunOS– FreeBSD– HP-UX– ….

Page 4: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Проектът Virtuoso - възможности

• Database Server– SQL-200n (including SQLX)– Stored procedures, User Define Type, Views, Triggers, Indexes,

Free-text indexes– XML Storage, XML Free text index, XSLT, XML Schema, XPath,

and XQuery• Web Application Server

– Hosting (PHP, Perl, Python, Java, CLR, .Net & ASPX Host, Mono, Ruby)

– VSP, VSPX Web Services SOAP, WSDL, UDDI, WS-Security, WS-Routing, WS-ReliableMessaging, WS-Policy, WS-Addressing, BPEL4WS

• Internet & Web – HTTP, WebDAV, SMTP, POP3, LDAP, FTP, NNTP – Blogging & Weblogs

• … и други

Page 5: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Application Server – VSP

• Текстов файл в файловата система или WebDav

• Автоматучно компилиране до процедура в базата дани

<html> <body> <p> <?vsp http(‘Hello World’); ?> </p> <?vsp declare name varchar; name := ‘Pesho’; ?> <p> My name is <?V name ?>. </p> </body></html>

Page 6: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Application Server - VSP

SQL

oптимизатор

на заявките

<html> <body> <table> <?vsp for( SELECT name, address FROM customers

WHERE country = ‘BG’) do{ ?> <tr> <td><?V name ?></td><td><?V address ?></td> </tr> <?vsp } if (true) {

DBA.DB.myprocedure(params); } ?> </table> </body></html><?vsp http_xslt ('file://my_transformation.xslt'); ?>

Page 7: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database

• Начини за връзка– ISQL – Interactive SQL

– Conductor – Web Interface• http://localhost:8889/conductor

– ODBC, JDBC– Visual Studio Plugin – OPL Explorer

….

$isql localhost:1111 dba dbaSQL> select * from my_table;…SQL> select my_procedure();….

Page 8: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database

• Views, Triggers – Instead of

INSERT INTO Customers_Orders

View Customers_Orders

Table Customers Table Orders

INSTEAD OF INSERT TRIGGERINSERT INTO CustomersINSERT INTO Orders

Page 9: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database - Indexes

• SQL Inverse Functions

-- Създаваме viewCREATE VIEW euro_item AS SELECT id, dollar_to_euro (price) as price, name FROM item; -- Декларираме реципрочни функцийdb.dba.sinv_create_inverse ('euro_to_dollar', 'dollar_to_euro', 1);

-- Изпълняваме запистванеSELECT * FROM euro_item WHERE price > 100;

-- Нормално това би означавалоSELECT * FROM item WHERE dollar_to_euro (I_price) > 100;

-- Но благодарение на реципрочната функция се изпълняваSELECT * FROM item WHERE price > euro_to_dollar (100);

Page 10: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database – Free text indexes

• Контрол върху индексираните данниCREATE TABLE channels (c_id integer,title varchar, primary key (c_id);

CREATE TABLE articles (c_id integer references channels, a_id integer,content long varchar, primary key (c_id, a_id);

CREATE TEXT INDEX ON articles (content) using function ;

CREATE PROCEDURE articles_content_index_hook ( inout vtb any, inout i_id any) { vt_batch_feed (vtb, (SELECT title FROM channels WHERE a_id = i_id), 0); return 0; };

SELECT TOP 10 * FROM articles WHERE contains(content, ’sample’);

Page 11: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database – XML Support

CREATE TABLE my_xml (id integer, content any);

INSERT INTO my_xml (1,xtree_doc(’<root><node attr=“hello”>text</node></root> ’));

SELECT * FROM my_xml WHERE xpath_eval(‘//node[@attr = “hello”]’);SELECT * FROM my_xml WHERE xpath_contains(‘//node’,’text’);

CREATE TEXT XML INDEX my_xml(content);

SELECT * FROM my_xml WHERE xcontains(content, ’//node[. = “text”]’);

SELECT * FROM my_xml WHERE xcontains(content, ’//node[text-contains (., “text”) ]’);

Page 12: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database – XML (FOR XML Clause)• RAW, AUTO, EXPLICIT

xmla (‘ SELECT "CategoryID", "CatName", "ProdName", "ProductID" FROM "Categories" as "category", "Products" as "product" WHERE "product"."CategoryID" = "category"."CategoryID" FOR XML AUTO ELEMENT '); --------------<category> <CategoryID>1</CategoryID><CatName>Beverages</CatName> <product> <ProdName>Chai</ProdName> <ProductID>1</ProductID> </product> <product> <ProdName>Chang</ProdName> <ProductID>2</ProductID> </product>…</category> <category> …

Page 13: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Database – XML - SQLX

SELECT XMLELEMENT ('FullAddress', XMLATTRIBUTES ( "PostalCode", "City"), xtree_doc ('<Region>WA</Region>'), xquery_eval('//@country', xtree_doc('<a country="USA"/>')), XMLELEMENT('emp', "LastName"))

FROM "Demo"."demo"."Employees“;---------------------------- <FullAddress PostalCode="98122" City="Seattle" country="USA">

<Region>WA</Region><emp>Davolio</emp>

</FullAddress> <FullAddress PostalCode="98401" City="Tacoma" country="USA">

<Region>WA</Region><emp>Fuller</emp>

</FullAddress> . . .

Page 14: Virtuoso Universal Server Open-Source Edition Anton Avramov.

UDT – User Defined Types

CREATE TYPE my_udt as ( A integer default 12 ) method negative() returns integer;

CREATE METHOD negative () returns integer for my_udt { return self.A * -1; }

CREATE TABLE udt_table (ID integer primary key, DATA my_udt);

INSERT INTO udt_table (ID, DATA) VALUES (1, new my_udt ());

SELECT C.DATA.A FROM udt_table C where C.ID = 1;

SELECT C.ID FROM udt_table C WHERE C.DATA.A > 10;

SELECT C.ID FROM udt_table C WHERE C.DATA.negavite() < -10;

Page 15: Virtuoso Universal Server Open-Source Edition Anton Avramov.

WebServices – SOAP

CREATE TYPE “WS”.”soap_demo”.soap_udt as () method getCurrency( in cnt_code varchar) returns varchar;

CREATE METHOD getCurrency ( in cnt_code varchar) returns varchar for “WS”.”soap_demo”. soap_udt

{ return (SELECT amount FROM currencies WHERE code = cnt_code); };

vhost_define(vhost=>'*ini*', lhost=> '*ini*', lpath=> '/myendpoint',ppath=>'/SOAP/', soap_user=> ‘soap_demo') );

GRAND EXECUTE ON “WS”.”soap_demo”.soap_udt TO soap_demo;

http://localhost:8889/myendpoint/services.wsdl

http://localhost:8889/myendpoint/services.vsmx

Page 16: Virtuoso Universal Server Open-Source Edition Anton Avramov.

RDF Database

• Що е то Semantic Web?

Page 17: Virtuoso Universal Server Open-Source Edition Anton Avramov.

RDF Database

• Аз направих тази статия!

Page 18: Virtuoso Universal Server Open-Source Edition Anton Avramov.

RDF Database

... <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:dc="http://purl.org/dc/elements/1.1/"

xmlns="http://purl.org/rss/1.0/" > ... <item rdf:about="http://c.moreover.com/click/here.pl?r123"> <title>XML: A Disruptive Technology</title> <link>http://c.moreover.com/click/here.pl?r123</link> <dc:subject> <rdf:Description> <rdf:value>XML</rdf:value> </rdf:Description> </dc:subject> </item> ...

Page 19: Virtuoso Universal Server Open-Source Edition Anton Avramov.

SPARQL

• Намери ми всичко ….

PREFIX dc: <http://purl.org/dc/elements/1.1/> PREFIX ns: <http://example.org/ns#> SELECT ?title ?price WHERE { ?x ns:price ?price .

FILTER (?price < 30) . ?x dc:title ?title .

}

title price

"The Semantic Web" 23

Page 20: Virtuoso Universal Server Open-Source Edition Anton Avramov.

Въпроси?

Контакт:Антон Аврамов[email protected]

Връзки:http://virtuoso.openlinksw.com/wiki/main/Main/http://sourceforge.net/projects/virtuosohttp://virtuoso.openlinksw.com/http://www.openlinksw.com/