<?xml version="1.0" encoding="ISO-8859-1" ?>

<rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"  xmlns:dc="http://purl.org/dc/elements/1.1/"  xmlns:dcterms="http://purl.org/dc/terms/"  xmlns:foaf="http://xmlns.com/foaf/0.1/"  xmlns:sioc="http://rdfs.org/sioc/ns#" >
<sioc:Space rdf:about="http://demo.openlinksw.com/tutorial/">
<sioc:name>OpenLink Virtuoso Features Demonstrations and Tutorials</sioc:name>
<sioc:description>OpenLink Virtuoso Features Demonstrations and Tutorials</sioc:description>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/xml"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/repl"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/rdfview"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/services"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/wap"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/web"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/web2"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/rdf"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/apps"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlapps"/>
    <sioc:space_of rdf:resource="http://demo.openlinksw.com/tutorial/semweb"/>
</sioc:Space>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/hosting">
 <sioc:description>Data Management - SQL
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_2/ho_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_3/ho_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_4/ho_s_4.vspx"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_5/ho_s_5.vspx"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_10/ho_s_10.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_11/ho_s_11.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_14/ho_s_14.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_15/ho_s_15.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_1/ho_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_13/ho_s_13.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/xml">
 <sioc:description>Data Management - XML
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_2/xq_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_2a/xq_s_2a.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_3/xq_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_4/xq_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_0/sx_e_0.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_1/sx_e_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_2/sx_e_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_3/sx_e_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_4/sx_e_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_5/sx_e_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_6/sx_e_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_7/sx_e_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_8/sx_e_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_e_9/sx_e_9.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_f_1/sx_f_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_g_1/sx_g_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/sx_h_1/sx_h_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_1/xs_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_2/xs_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_3/xs_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_4/xs_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_5/xs_s_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_6/xs_s_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_7/xs_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_8/xs_s_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_9/xs_s_9.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_1/ms_a_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_2/ms_a_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_3/ms_a_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_3a/ms_a_3a.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_3b/ms_a_3b.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_4/ms_a_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/ms_a_5/ms_a_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xp_v_1/xp_v_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xp_v_2/xp_v_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xp_v_3/xp_v_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_u_1/xs_u_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_u_2/xs_u_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlsql/xs_u_3/xs_u_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt/xs_f_1/xs_f_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt/xs_f_2/xs_f_2.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/repl">
 <sioc:description>Data Management - Data Replication
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_xb_1/re_xb_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_xb_2/re_xb_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_xb_3/re_xb_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_xb_4/re_xb_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sb_1/re_sb_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sb_2/re_sb_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sb_3/re_sb_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sb_4/re_sb_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sd_1/re_sd_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sd_2/re_sd_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sd_3/re_sd_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_sm_1/re_sm_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/repl/re_ds_1/re_ds_1.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/rdfview">
 <sioc:description>Data Management - RDF
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/rdfview/rd_v_1/rd_v_1.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/services">
 <sioc:description>Web Services - SOAP Services
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_1/so_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_2/so_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_3/so_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_4/so_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_14/so_s_14.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_17/so_s_17.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_20/so_s_20.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_21/so_s_21.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_22/so_s_22.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_23/so_s_23.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_24/so_s_24.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_25/so_s_25.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_26/so_s_26.vspx"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_27/so_s_27.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_28/so_s_28.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_29/so_s_29.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_34/so_s_34.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_35/so_s_35.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_36/so_s_36.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_37/so_s_37.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_30/so_s_30.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_31/so_s_31.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_32/so_s_32.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_33/so_s_33.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_5/so_s_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_6/so_s_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_7/so_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_11/so_s_11.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_18/so_s_18.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_8/so_s_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_9/so_s_9.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/rm_s_1/rm_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/rp_s_1/rp_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/rp_s_2/rp_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_10/so_s_10.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_12/so_s_12.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_15/so_s_15.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_16/so_s_16.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_19/so_s_19.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_13/so_s_13.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ws_s_1/ws_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ws_s_2/ws_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ws_s_3/ws_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ws_s_4/ws_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ws_s_4a/ws_s_4a.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ws_s_5/ws_s_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ud_s_1/ud_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ud_s_2/ud_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/ud_s_3/ud_s_3.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/wap">
 <sioc:description>Web Services - Wireless Access Protocols
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/wap/wa_b_1/wa_b_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/wap/wa_b_2/wa_b_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/wap/wa_b_3/wa_b_3.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/bpeldemo">
 <sioc:description>Business Process Integration - BPEL
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/echo/echo.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/fi/fi.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/LoanFlow/LoanFlow.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/SecLoan/SecLoan.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/RMLoan/RMLoan.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/SecRMLoan/SecRMLoan.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/sqlexec/sqlexec.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/UseCases/UseCases.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/java_exec/java_exec.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/clr_exec/clr_exec.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/processXSLT/processXSLT.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/processXQuery/processXQuery.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/bpeldemo/processXSQL/processXSQL.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/web">
 <sioc:description>Development - Web 1.0
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_1/vs_b_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_2/vs_b_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_3/vs_b_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_4/vs_b_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_5/vs_b_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_6/vs_b_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_7/vs_b_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_8/vs_b_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_b_9/vs_b_9.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_1/vx_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_2/vx_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_3/vx_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_10/vx_s_10.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_11/vx_s_11.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_12/vx_s_12.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_4/vx_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_5/vx_s_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_6/vx_s_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_7/vx_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_9/vx_s_9.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_8/vx_s_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_1/vs_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_2/vs_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_3/vs_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_4/vs_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_5/vs_s_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_6/vs_s_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_s_7/vs_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_u_1/vs_u_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_u_2/vs_u_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_u_3/vs_u_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_u_4/vs_u_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_u_5/vs_u_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_u_7/vs_u_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_x_1/vs_x_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_x_2/vs_x_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_x_3/vs_x_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_1/vs_d_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_2/vs_d_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_3/vs_d_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_4/vs_d_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_5/vs_d_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_6/vs_d_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_7/vs_d_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_d_8/vs_d_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_c_1/vs_c_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_r_1/vs_r_1.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/web2">
 <sioc:description>Development - Web 2.0
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/blog/blog.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/blog_bridge/blog_bridge.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/blog_query/blog_query.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/forums/forums.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/rss_feed/rss_feed.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vx_s_13/countries.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_24/so_s_24.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_10/so_s_10.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_17/so_s_17.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_12/so_s_12.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_16/so_s_16.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_2/so_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_21/so_s_21.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_27/so_s_27.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_28/so_s_28.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_7/so_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_15/so_s_15.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/so_s_19/so_s_19.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_xr_1/vs_xr_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/web/vs_xr_2/vs_xr_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/xa_s_1/xa_s_1.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/xmlxslt">
 <sioc:description>Development - XML
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt/xs_t_1/xs_t_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt/xs_e_1/xs_e_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt/xs_d_1/xs_d_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xmlxslt/xs_l_1/xs_l_1.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/rdf">
 <sioc:description>Development - RDF
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/services/rn_s_1/rn_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/rdf/rq_s_2/rq_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/rdf/rq_s_3/rq_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/rdf/ri_s_1/ri_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/rdf/rd_s_1/rd_s_1.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/intprot">
 <sioc:description>Development - NNTP
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_1/sm_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_2/sm_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_3/sm_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_4/sm_s_4.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_5/sm_s_5.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_6/sm_s_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/sm_s_7/sm_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/nn_s_1/nn_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/intprot/nn_s_2/nn_s_2.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/apps">
 <sioc:description>Demo applications - Framework Hosting
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/ibuyspy/ibuyspy.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/apps/petshop/petshop.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_12/ho_s_12.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_6/ho_s_6.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_7/ho_s_7.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_30/ho_s_30.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_8/ho_s_8.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_9/ho_s_9.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_16/ho_s_16.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/hosting/ho_s_17/ho_s_17.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/xmlapps">
 <sioc:description>Demo applications - XML Data Access
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_1/xq_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_2/xq_s_2.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_2a/xq_s_2a.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_3/xq_s_3.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/xq_s_4/xq_s_4.vsp"/>
</sioc:Container>
<sioc:Container rdf:about="http://demo.openlinksw.com/tutorial/semweb">
 <sioc:description>Demo applications - Semantic Web
 </sioc:description>
<rdf:type>Tutorial</rdf:type>
  <sioc:has_space rdf:resource="http://demo.openlinksw.com/tutorial/"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/xml/rq_s_1/rq_s_1.vsp"/>
    <sioc:container_of rdf:resource="http://demo.openlinksw.com/tutorial/semweb/sem_s_1/sem_s_1.vsp"/>
</sioc:Container>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_2/ho_s_2.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Integrating Common Language Runtime Objects with Virtuoso</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:30 GMT</dcterms:created_at>
<sioc:description>Using C# Objects to extend Virtuoso via User Defined Types.</sioc:description>
<sioc:content>
    Overview
    The following tutorial demonstrates how Virtuoso can be extended 
    through the use of a .NET bound language such as C# to create User Defined 
    Types (UDTs), Stored Procedures, and Functions. This is an enhancement of its 
    Object-Relational Database functionality. 
    The demonstrations in this section highlight transparent integration 
    (hosting) between Virtuoso and the Microsoft .NET and Mono implementations of 
    the ECMA Common Language Infrastructure (CLI). 
    
    Prerequisites
    The following prerequisites ensure the usability of these  
    tutorial demos on Windows or Linux (and in other future Mono implementations): 

 Linux
   
     Mono Runtime and Frameworks (ideally the version bundled with Virtuoso)
     Mono SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Linux with Mono Hosting
     
Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example

  The following tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. 
  Please follow the steps below to maximize the value of this tutorial:


 Click on the &quot;Set Initial State&quot; link which registers the two C# classes with Virtuoso. Click on the &quot;ho_s_2.sql&quot; link to see the code behind this step 
 Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown


 &quot;ho_s_2.sql&quot; performs the following steps
  
   Registers the &quot;MyFinances&quot; and &quot;Point&quot; classes with Virtuoso. Click 
   on the &quot;MyFinances.cs&quot; and &quot;Point.cs&quot; links to see the C# source code of these 
   classes
   Creates the conventional SQL table &quot;Employee&quot; 
   Creates the Object-Relational table &quot;Supplier&quot; that includes a column 
   named &quot;Location&quot; that is of  Type &quot;Point&quot; (a UDT)
   Populates each of the newly created tables with data
   Creates the &quot;distance&quot; stored procedure which uses a C# function 
   member (method) to calculate the distance between points.
  

 	&quot;vsp1.vsp&quot; uses the static method &quot;tax&quot; of the &quot;MyFinances&quot; class to 
 compute the payroll tax values for each employee via the &quot;salary&quot; column (like 
 a SQL function would). Take note of the Virtuoso class invocation syntax for 
 static C# methods (the relevant member function type in this demo; true to 
 C# these are called by name rather than instance).
 &quot;vsp2.vsp&quot; uses the &quot;distance&quot; method of the UDT based column 
 &quot;location&quot; to test for distance values less than &quot;3&quot;. The distance values are 
 return values from the &quot;Point&quot; class. Note that the &quot;Point&quot; class computes 
 the distance between two arbitrary points.
 &quot;vsp3.vsp&quot; is a variation of the previous demo, with the column 
 &quot;location&quot; being used to access and conditionally test the values of data 
 member &quot;x&quot; (shown in &quot;Point.cs&quot; as 0).
 &quot;vsp4.vsp&quot; is another variation of a query on the &quot;Supplier&quot; table, 
 in this particular case the query uses a Stored Procedure (see definition in 
 &quot;ho_s_2.sql&quot;) to filter its result set.  It achieves this by using data member 
 values &quot;x&quot; and &quot;y&quot; from column &quot;location&quot;, and the arbitrary values 1 &amp; 
 2 as input parameters for the Stored Procedure &quot;distance&quot;.  It then tests 
 the return values for those less than 3.
  
    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
    Overview
    The following tutorial demonstrates how Virtuoso can be extended 
    through the use of a .NET bound language such as C# to create User Defined 
    Types (UDTs), Stored Procedures, and Functions. This is an enhancement of its 
    Object-Relational Database functionality. 
    The demonstrations in this section highlight transparent integration 
    (hosting) between Virtuoso and the Microsoft .NET and Mono implementations of 
    the ECMA Common Language Infrastructure (CLI). 
    
    Prerequisites
    The following prerequisites ensure the usability of these  
    tutorial demos on Windows or Linux (and in other future Mono implementations): 

 Linux
   
     Mono Runtime and Frameworks (ideally the version bundled with Virtuoso)
     Mono SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Linux with Mono Hosting
     
Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example

  The following tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. 
  Please follow the steps below to maximize the value of this tutorial:


 Click on the &quot;Set Initial State&quot; link which registers the two C# classes with Virtuoso. Click on the &quot;ho_s_2.sql&quot; link to see the code behind this step 
 Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown


 &quot;ho_s_2.sql&quot; performs the following steps
  
   Registers the &quot;MyFinances&quot; and &quot;Point&quot; classes with Virtuoso. Click 
   on the &quot;MyFinances.cs&quot; and &quot;Point.cs&quot; links to see the C# source code of these 
   classes
   Creates the conventional SQL table &quot;Employee&quot; 
   Creates the Object-Relational table &quot;Supplier&quot; that includes a column 
   named &quot;Location&quot; that is of  Type &quot;Point&quot; (a UDT)
   Populates each of the newly created tables with data
   Creates the &quot;distance&quot; stored procedure which uses a C# function 
   member (method) to calculate the distance between points.
  

 	&quot;vsp1.vsp&quot; uses the static method &quot;tax&quot; of the &quot;MyFinances&quot; class to 
 compute the payroll tax values for each employee via the &quot;salary&quot; column (like 
 a SQL function would). Take note of the Virtuoso class invocation syntax for 
 static C# methods (the relevant member function type in this demo; true to 
 C# these are called by name rather than instance).
 &quot;vsp2.vsp&quot; uses the &quot;distance&quot; method of the UDT based column 
 &quot;location&quot; to test for distance values less than &quot;3&quot;. The distance values are 
 return values from the &quot;Point&quot; class. Note that the &quot;Point&quot; class computes 
 the distance between two arbitrary points.
 &quot;vsp3.vsp&quot; is a variation of the previous demo, with the column 
 &quot;location&quot; being used to access and conditionally test the values of data 
 member &quot;x&quot; (shown in &quot;Point.cs&quot; as 0).
 &quot;vsp4.vsp&quot; is another variation of a query on the &quot;Supplier&quot; table, 
 in this particular case the query uses a Stored Procedure (see definition in 
 &quot;ho_s_2.sql&quot;) to filter its result set.  It achieves this by using data member 
 values &quot;x&quot; and &quot;y&quot; from column &quot;location&quot;, and the arbitrary values 1 &amp; 
 2 as input parameters for the Stored Procedure &quot;distance&quot;.  It then tests 
 the return values for those less than 3.
  
    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_3/ho_s_3.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Sending an SMS message through an ASP .NET SOAP Client to update a table </dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:30 GMT</dcterms:created_at>
<sioc:description>Demonstrating the use of C# to create Virtuoso hosted Stored 
    Procedures and Triggers. In this demo the database events trigger SMS 
    messages that are relayed via C# based SOAP Client.</sioc:description>
<sioc:content>
    Overview
    The following tutorial demonstrates how a C# based Managed SOAP 
    Client is used to create SMS based database notification services inside 
    Virtuoso. This demo executes a database trigger every time a new Supplier 
    record is added, updated or deleted. In this example a C# class acts as a
    SOAP client to a 3rd party XML Web Service that provides the SMS (Short Message 
    Services) delivery to mobile phones. Note, this demo will work with any phone 
    that is capable of receiving SMS (TEXT) messages.
    
    Prerequisites
    This demo currently works only on a Virtuoso server running under Microsoft Windows with following components installed:
    
      Windows
        
          .NET Runtime and Frameworks
          .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
          Virtuoso Universal Server for Windows with .NET CLR Hosting.
        
      
    
    
    Tutorial Example

  Please follow the steps below to maximize the value of this tutorial:
  
   Click on the &quot;Set Initial State&quot; link which registers the &quot;redcoalsmssvc&quot; service with Virtuoso. Click on the &quot;ho_s_3.sql&quot; link to see the code behind this step
   Click on the &quot;Run&quot; links to actually experience the demo
  

  Demo Breakdown
  
   &quot;ho_s_3.sql&quot; performs the following steps
  
     Registers the &quot;redcoalsmssvc&quot; class with Virtuoso. Click on the &quot;redcoalsms.cs&quot; and &quot;redcoalsmsref.cs&quot; links to see the C# source code. Note that the class &quot;redcoalsmssvc&quot; is part of an assembly that has the namespace &quot;redcoalsms&quot;
     Creates the &quot;Suppliers&quot; table 
     Creates a stored procedure &quot;redcoal_send_sms&quot; which demonstrates the syntax for creating an instance variable which includes the assembly namespace in the type reference. Specifically, note the use of an underscore instead of a dot when making this assignment 
     Creates a Trigger named &quot;send_sms_to_mgr_new_supp&quot; that sends an SMS message each time a new &quot;Supplier&quot; table record is inserted
     Creates a Trigger named &quot;send_sms_to_mgr_mod_supp&quot; that sends an SMS message each time a &quot;Supplier&quot; record is updated
     Creates a Trigger named &quot;send_sms_to_mgr_mod_supp&quot; that sends an SMS message each time a supplier record is deleted
  
  &quot;setup_sms.vsp&quot; sets up all of the base data and verifies that SMS service connectivity required by this demo is available.
   &quot;handler.vsp&quot; is the actual interface through which you add or delete supplier records which result in SMS notifications being sent to your mobile phone.
  


   </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
    Overview
    The following tutorial demonstrates how a C# based Managed SOAP 
    Client is used to create SMS based database notification services inside 
    Virtuoso. This demo executes a database trigger every time a new Supplier 
    record is added, updated or deleted. In this example a C# class acts as a
    SOAP client to a 3rd party XML Web Service that provides the SMS (Short Message 
    Services) delivery to mobile phones. Note, this demo will work with any phone 
    that is capable of receiving SMS (TEXT) messages.
    
    Prerequisites
    This demo currently works only on a Virtuoso server running under Microsoft Windows with following components installed:
    
      Windows
        
          .NET Runtime and Frameworks
          .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
          Virtuoso Universal Server for Windows with .NET CLR Hosting.
        
      
    
    
    Tutorial Example

  Please follow the steps below to maximize the value of this tutorial:
  
   Click on the &quot;Set Initial State&quot; link which registers the &quot;redcoalsmssvc&quot; service with Virtuoso. Click on the &quot;ho_s_3.sql&quot; link to see the code behind this step
   Click on the &quot;Run&quot; links to actually experience the demo
  

  Demo Breakdown
  
   &quot;ho_s_3.sql&quot; performs the following steps
  
     Registers the &quot;redcoalsmssvc&quot; class with Virtuoso. Click on the &quot;redcoalsms.cs&quot; and &quot;redcoalsmsref.cs&quot; links to see the C# source code. Note that the class &quot;redcoalsmssvc&quot; is part of an assembly that has the namespace &quot;redcoalsms&quot;
     Creates the &quot;Suppliers&quot; table 
     Creates a stored procedure &quot;redcoal_send_sms&quot; which demonstrates the syntax for creating an instance variable which includes the assembly namespace in the type reference. Specifically, note the use of an underscore instead of a dot when making this assignment 
     Creates a Trigger named &quot;send_sms_to_mgr_new_supp&quot; that sends an SMS message each time a new &quot;Supplier&quot; table record is inserted
     Creates a Trigger named &quot;send_sms_to_mgr_mod_supp&quot; that sends an SMS message each time a &quot;Supplier&quot; record is updated
     Creates a Trigger named &quot;send_sms_to_mgr_mod_supp&quot; that sends an SMS message each time a supplier record is deleted
  
  &quot;setup_sms.vsp&quot; sets up all of the base data and verifies that SMS service connectivity required by this demo is available.
   &quot;handler.vsp&quot; is the actual interface through which you add or delete supplier records which result in SMS notifications being sent to your mobile phone.
  


   ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_4/ho_s_4.vspx">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Hosting CLR types using VSPX session management</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:31 GMT</dcterms:created_at>
<sioc:description>Demonstrating the use of C# to create Virtuoso hosted Stored 
    Procedures and Triggers.  In this demo a database events trigger SMS 
    messages that are relayed via a C# based SOAP Client.  It also demonstrates 
    Virtuoso Server Pages session management.</sioc:description>
<sioc:content>Overview
    This is a variation of HO-S-3 with the SOAP client implemented ASP.NET and also demonstrates Virtuoso Server Pages for XML (VSPX) session management.
    
    Prerequisites
    This demo currently works only on a Virtuoso server running under Microsoft Windows with following components installed:
    
      Windows
        
          .NET Runtime and Frameworks
          .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
          Virtuoso Universal Server for Windows with .NET CLR Hosting.
        
      
    
    
    Tutorial Example
    
      The setup_sms.vspx sets up the SMS sending unit.
      The handler.vspx does inserts/deletes/updates to demonstrate the SMS sending from triggers.
      The redcoalsms*.cs is an MS Visual Studio.NET generated SOAP client.
      The redcoalsms.dll should be installed as a private assembly (not as CodeBase) because of permissions.
      For details of the Redcoal SOAP service see it&#39;s description in http://www.xmethods.com
     
    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[Overview
    This is a variation of HO-S-3 with the SOAP client implemented ASP.NET and also demonstrates Virtuoso Server Pages for XML (VSPX) session management.
    
    Prerequisites
    This demo currently works only on a Virtuoso server running under Microsoft Windows with following components installed:
    
      Windows
        
          .NET Runtime and Frameworks
          .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
          Virtuoso Universal Server for Windows with .NET CLR Hosting.
        
      
    
    
    Tutorial Example
    
      The setup_sms.vspx sets up the SMS sending unit.
      The handler.vspx does inserts/deletes/updates to demonstrate the SMS sending from triggers.
      The redcoalsms*.cs is an MS Visual Studio.NET generated SOAP client.
      The redcoalsms.dll should be installed as a private assembly (not as CodeBase) because of permissions.
      For details of the Redcoal SOAP service see it&#39;s description in http://www.xmethods.com
     
    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_5/ho_s_5.vspx">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Hosting CLR types using VSPX session management</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:31 GMT</dcterms:created_at>
<sioc:description>Demonstrating the use of C# to create Virtuoso hosted Stored 
    Procedures and Triggers. In this demo a database event trigger SMS messages 
    that are relayed via a  .NET DOM frameworks based C# SOAP Client. It also 
    demonstrates Virtuoso Server Pages session management.</sioc:description>
<sioc:content>Overview
    HO-S-5 is a variation of HO-S-3 that makes use of VSPX session management
    
    Prerequisites
    The following prerequisites ensure the usability of these  
    tutorial demos on Windows or Linux (and in other future Mono implementations): 

 Linux
   
     Mono Runtime and Frameworks (ideally the version bundled with Virtuoso)
     Mono SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Linux with Mono Hosting
     
Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example
    
      The setup_sms.vspx sets up the SMS sending unit.
      The handler.vspx does inserts/deletes/updates to demonstrate the SMS sending from triggers.
      The redcoalsms_dom.cs is an HttpWebRequest SOAP client using DOM to process SOAP result.
      The redcoalsms_dom.dll should be installed as a private assembly (not as CodeBase) because of permissions.
      For details of the Redcoal SOAP service see it&#39;s description in http://www.xmethods.com
      This service is compatible with Mono (http://go-mono.com)
     
    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[Overview
    HO-S-5 is a variation of HO-S-3 that makes use of VSPX session management
    
    Prerequisites
    The following prerequisites ensure the usability of these  
    tutorial demos on Windows or Linux (and in other future Mono implementations): 

 Linux
   
     Mono Runtime and Frameworks (ideally the version bundled with Virtuoso)
     Mono SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Linux with Mono Hosting
     
Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example
    
      The setup_sms.vspx sets up the SMS sending unit.
      The handler.vspx does inserts/deletes/updates to demonstrate the SMS sending from triggers.
      The redcoalsms_dom.cs is an HttpWebRequest SOAP client using DOM to process SOAP result.
      The redcoalsms_dom.dll should be installed as a private assembly (not as CodeBase) because of permissions.
      For details of the Redcoal SOAP service see it&#39;s description in http://www.xmethods.com
      This service is compatible with Mono (http://go-mono.com)
     
    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_10/ho_s_10.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Integrating Common Language Runtime Objects with Virtuoso</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:29 GMT</dcterms:created_at>
<sioc:description>Using C# Objects to extend Virtuoso via User Defined Types using CREATE LIBRARY/ASSEMBLY syntax.</sioc:description>
<sioc:content>
    Overview
    The HO-S-10 sample is very similar to HO-S-2. The difference is using syntax CREATE LIBRARY. The statement imports assembly to internal Virtuoso table and imports types from it. After this the assembly can be removed from physical path and next time will be read from the table. The &quot;DROP LIBRARY&quot; removes assembly from table and drops imported types. 
    
    Prerequisites
    The following prerequisites ensure the usability of these tutorial demos on Windows

Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example

  The following tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. 
  Please follow the steps below to maximize the value of this tutorial:


 Click on the &quot;Set Initial State&quot; link which registers the two C# classes with Virtuoso.
 It also copies the Point_ho_s_10.dll file to &quot;tmp&quot; directory in the server root. 
 Note that the directory must exists, must be writeable for the user running virtuoso and must be in the DirsAllowed parameter in Virtuoso ini file.
  Click on the &quot;ho_s_10.sql&quot; link to see the code behind this step 
 Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown


 &quot;ho_s_10.sql&quot; performs the following steps
  
   Registers the &quot;Point&quot; classes with Virtuoso. Click 
   on the &quot;Point_ho_s_10.cs&quot; links to see the C# source code of these 
   classes
   Creates the Object-Relational table &quot;Supplier_ho_s_10&quot; that includes a column 
   named &quot;Location&quot; that is of Type &quot;Point&quot; (a UDT)
   Populates table with data
   Using syntax: CREATE LIBRARY/ASSEMBLY &quot;myPoint&quot; as &quot;assembly&quot; WITH PERMISSION_SET = SAFE WITH AUTOREGISTER
   is simular to:
   CREATE LIBRARY/ASSEMBLY &quot;myPoint&quot; as &quot;assembly&quot;; and 
   import_clr (&#39;myPoint&#39;, NULL);
  

 &quot;vsp1.vsp&quot; is a variation of HO-S-2 (vsp3.vsp), with the column 
 &quot;location&quot; being used to access and conditionally test the values of data 
 member &quot;x&quot; (shown in &quot;Point.cs&quot; as 0).

    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
    Overview
    The HO-S-10 sample is very similar to HO-S-2. The difference is using syntax CREATE LIBRARY. The statement imports assembly to internal Virtuoso table and imports types from it. After this the assembly can be removed from physical path and next time will be read from the table. The &quot;DROP LIBRARY&quot; removes assembly from table and drops imported types. 
    
    Prerequisites
    The following prerequisites ensure the usability of these tutorial demos on Windows

Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example

  The following tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. 
  Please follow the steps below to maximize the value of this tutorial:


 Click on the &quot;Set Initial State&quot; link which registers the two C# classes with Virtuoso.
 It also copies the Point_ho_s_10.dll file to &quot;tmp&quot; directory in the server root. 
 Note that the directory must exists, must be writeable for the user running virtuoso and must be in the DirsAllowed parameter in Virtuoso ini file.
  Click on the &quot;ho_s_10.sql&quot; link to see the code behind this step 
 Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown


 &quot;ho_s_10.sql&quot; performs the following steps
  
   Registers the &quot;Point&quot; classes with Virtuoso. Click 
   on the &quot;Point_ho_s_10.cs&quot; links to see the C# source code of these 
   classes
   Creates the Object-Relational table &quot;Supplier_ho_s_10&quot; that includes a column 
   named &quot;Location&quot; that is of Type &quot;Point&quot; (a UDT)
   Populates table with data
   Using syntax: CREATE LIBRARY/ASSEMBLY &quot;myPoint&quot; as &quot;assembly&quot; WITH PERMISSION_SET = SAFE WITH AUTOREGISTER
   is simular to:
   CREATE LIBRARY/ASSEMBLY &quot;myPoint&quot; as &quot;assembly&quot;; and 
   import_clr (&#39;myPoint&#39;, NULL);
  

 &quot;vsp1.vsp&quot; is a variation of HO-S-2 (vsp3.vsp), with the column 
 &quot;location&quot; being used to access and conditionally test the values of data 
 member &quot;x&quot; (shown in &quot;Point.cs&quot; as 0).

    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_11/ho_s_11.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Integrating Common Language Runtime Objects with Virtuoso</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:29 GMT</dcterms:created_at>
<sioc:description>Using Restrictions for C# Imported types.</sioc:description>
<sioc:content>
    Overview
     This tutorial demonstrates the options PERMISSION_SET = SAFE and 
	PERMISSION_SET = UNRESTRICTED on CREATE LIBRARY / ASSEMBLY.
    
    Prerequisites
    The following prerequisites ensure the usability of these demos on Windows

Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example

  The tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. 
  Please follow the steps below to maximize the value of this tutorial:


 Click on the &quot;Set Initial State&quot; link which registers the 
 two C# classes within Virtuoso.  
 It also copies the restricted.dll and unrestricted.dll files to &quot;tmp&quot; directory in the server root. 
 Note that the directory must exists, must be writeable for the user running virtuoso and must be in the DirsAllowed parameter in Virtuoso ini file.
 Click on the &quot;ho_s_11.sql&quot; link to examine 
 the code behind this step.
 Click on the &quot;Run&quot; links to execute the demo.


Demo Breakdown


 &quot;ho_s_11.sql&quot; performs the following steps
  
   Registers the &quot;Rest&quot; and &quot;UnRest&quot; classes with Virtuoso. Click 
   on the &quot;restricted.cs&quot; and &quot;unrestricted.cs&quot; links to see the C# source code of these 
   classes.
  

 The &quot;unrestricted.vsp&quot; is shows classes that try to access 
 File system and system variables. The &quot;restricted.vsp&quot;, uses the same 
 clases, but cannot complete the execution sucessfully because the assembly 
 is imported with PERMISSION_SET = SAFE.  The sample shows the error returned upon 
 executing the classes.

    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
    Overview
     This tutorial demonstrates the options PERMISSION_SET = SAFE and 
	PERMISSION_SET = UNRESTRICTED on CREATE LIBRARY / ASSEMBLY.
    
    Prerequisites
    The following prerequisites ensure the usability of these demos on Windows

Windows
   
     .NET Runtime and Frameworks
     .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
     Virtuoso Universal Server for Windows with .NET CLR Hosting
     

    
    Tutorial Example

  The tutorial shows how C# classes are used to create User
  Defined Types (UDTs) in Virtuoso. 
  Please follow the steps below to maximize the value of this tutorial:


 Click on the &quot;Set Initial State&quot; link which registers the 
 two C# classes within Virtuoso.  
 It also copies the restricted.dll and unrestricted.dll files to &quot;tmp&quot; directory in the server root. 
 Note that the directory must exists, must be writeable for the user running virtuoso and must be in the DirsAllowed parameter in Virtuoso ini file.
 Click on the &quot;ho_s_11.sql&quot; link to examine 
 the code behind this step.
 Click on the &quot;Run&quot; links to execute the demo.


Demo Breakdown


 &quot;ho_s_11.sql&quot; performs the following steps
  
   Registers the &quot;Rest&quot; and &quot;UnRest&quot; classes with Virtuoso. Click 
   on the &quot;restricted.cs&quot; and &quot;unrestricted.cs&quot; links to see the C# source code of these 
   classes.
  

 The &quot;unrestricted.vsp&quot; is shows classes that try to access 
 File system and system variables. The &quot;restricted.vsp&quot;, uses the same 
 clases, but cannot complete the execution sucessfully because the assembly 
 is imported with PERMISSION_SET = SAFE.  The sample shows the error returned upon 
 executing the classes.

    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_14/ho_s_14.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Making Table valued functions in C#</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:30 GMT</dcterms:created_at>
<sioc:description>Using C# Objects to make table valued functions.</sioc:description>
<sioc:content>
	Overview
	The following tutorial demonstrates how Virtuoso can be extended 
	    through the use of a .NET bound language such as C# to create resultsets. 
	The demonstrations in this section highlight transparent integration 
	    (hosting) between Virtuoso and the Microsoft .NET and Mono implementations of 
	    the ECMA Common Language Infrastructure (CLI) as well as how to use the Virtuoso
	    in-process ODBC client to call back the server from hosted managed code. 
    
	Prerequisites
	The following prerequisites ensure the usability of these  
	    tutorial demos on Windows or Linux (and in other future Mono implementations): 
	
	    Linux
		
		    Mono Runtime and Frameworks (ideally the version bundled with Virtuoso)
		    Mono SDK (if you seek to write your own Objects for integration with Virtuoso)
		    Virtuoso Universal Server for Linux with Mono Hosting
		    Virtuoso .NET provider
		
	    
	    Windows
		
		    .NET Runtime and Frameworks
		    .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
		    Virtuoso Universal Server for Windows with .NET CLR Hosting
		    Virtuoso .NET provider
		
	    
	
    
	Tutorial Example
	The following tutorial shows how C# classes can interact with the Virtuoso server. 
	Please follow the steps below to maximize the value of this tutorial:
	
	    Copy the file ho_s_14.dll next to the OpenLink.Data.VirtuosoClient.dll (if not allready there).
	    Click on the &quot;Set Initial State&quot; link which registers the C# class with Virtuoso. Click on the &quot;ho_s_14.sql&quot; link to see the code behind this step 
	    Click on the &quot;Run&quot; links to actually experience the demo
	
	Demo Breakdown
	
	    &quot;ho_s_14.sql&quot; registers the &quot;openlink.virtuoso.tutorial.ho_s_14.add_data&quot; C# static method with Virtuoso. Click 
		on the &quot;ho_s_14.cs&quot; link to see the C# source code of this class
	    	&quot;vsp1.vsp&quot; uses the static method &quot;add_data&quot; of the &quot;openlink.virtuoso.tutorial.ho._s_14&quot; class to 
		make a resultset (like a SQL function would) through an in-process connection to the server. Take note of the
		usage of &quot;OpenLink.Virtuoso.InProcessPort&quot; key from AppDomain.GetData() to get the port on which the hosting Virtuoso server is listening at.
	
    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
	Overview
	The following tutorial demonstrates how Virtuoso can be extended 
	    through the use of a .NET bound language such as C# to create resultsets. 
	The demonstrations in this section highlight transparent integration 
	    (hosting) between Virtuoso and the Microsoft .NET and Mono implementations of 
	    the ECMA Common Language Infrastructure (CLI) as well as how to use the Virtuoso
	    in-process ODBC client to call back the server from hosted managed code. 
    
	Prerequisites
	The following prerequisites ensure the usability of these  
	    tutorial demos on Windows or Linux (and in other future Mono implementations): 
	
	    Linux
		
		    Mono Runtime and Frameworks (ideally the version bundled with Virtuoso)
		    Mono SDK (if you seek to write your own Objects for integration with Virtuoso)
		    Virtuoso Universal Server for Linux with Mono Hosting
		    Virtuoso .NET provider
		
	    
	    Windows
		
		    .NET Runtime and Frameworks
		    .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
		    Virtuoso Universal Server for Windows with .NET CLR Hosting
		    Virtuoso .NET provider
		
	    
	
    
	Tutorial Example
	The following tutorial shows how C# classes can interact with the Virtuoso server. 
	Please follow the steps below to maximize the value of this tutorial:
	
	    Copy the file ho_s_14.dll next to the OpenLink.Data.VirtuosoClient.dll (if not allready there).
	    Click on the &quot;Set Initial State&quot; link which registers the C# class with Virtuoso. Click on the &quot;ho_s_14.sql&quot; link to see the code behind this step 
	    Click on the &quot;Run&quot; links to actually experience the demo
	
	Demo Breakdown
	
	    &quot;ho_s_14.sql&quot; registers the &quot;openlink.virtuoso.tutorial.ho_s_14.add_data&quot; C# static method with Virtuoso. Click 
		on the &quot;ho_s_14.cs&quot; link to see the C# source code of this class
	    	&quot;vsp1.vsp&quot; uses the static method &quot;add_data&quot; of the &quot;openlink.virtuoso.tutorial.ho._s_14&quot; class to 
		make a resultset (like a SQL function would) through an in-process connection to the server. Take note of the
		usage of &quot;OpenLink.Virtuoso.InProcessPort&quot; key from AppDomain.GetData() to get the port on which the hosting Virtuoso server is listening at.
	
    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_15/ho_s_15.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Accessing COM Objects via C#</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:30 GMT</dcterms:created_at>
<sioc:description>Using the .NET to access native COM objects from Virtuoso/PL</sioc:description>
<sioc:content>
	Overview
	The following tutorial demonstrates how Virtuoso can access MS Windows COM
	    objects via .NET. 
	The demonstrations in this section highlight transparent integration 
	    (hosting) between Virtuoso, the Microsoft .NET implementations of 
	    the ECMA Common Language Infrastructure (CLI) and the Win32 COM Layer. 
    
	Prerequisites
	The following prerequisites ensure the usability of these  
	    tutorial demos on Windows: 
		
		    .NET Runtime and Frameworks
		    .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
		    Virtuoso Universal Server for Windows with .NET CLR Hosting
		
    
	Tutorial Example
	The following tutorial shows how the Virtuoso server can call native Win32 COM objects using
	    the .NET runtime as intermediary. 
	Please follow the steps below to maximize the value of this tutorial:
	
	    Register the COM library COM/VirtCOMServer/Debug/VirtCOMServer.dll with COM (via regsvr32.exe COM/VirtCOMServer/Debug/VirtCOMServer.dll).
	    Copy the interop assembly COM/VirtCOMServer/VirtCOMServer.dll next to the virtuoso server binary (if not allready there).
	    Click on the &quot;Set Initial State&quot; link which registers the C# interop class for the Interface IVirtCOMObject with Virtuoso. Click on the &quot;ho_s_15.sql&quot; link to see the code behind this step 
	    Click on the &quot;Run&quot; links to actually experience the demo
	
	Demo Breakdown
	
	    &quot;ho_s_15.sql&quot; registers the &quot;VirtCOMServer.CVirtCOMObjectClass&quot; C# interop class with Virtuoso. Click 
		on the &quot;VirtCOMObject.c&quot; and &quot;VirtCOMObject.h&quot; link to see the C++ source code of this interface and it&#39;s class
	    	&quot;vsp1.vsp&quot; uses the methods &quot;AddAmount&quot;, &quot;Clear&quot; and &quot;get_balance&quot; of the &quot;VirtCOMServer.IVirtCOMObject&quot; Interface to 
		sum a number of amounts and get the resulting total.
	
    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
	Overview
	The following tutorial demonstrates how Virtuoso can access MS Windows COM
	    objects via .NET. 
	The demonstrations in this section highlight transparent integration 
	    (hosting) between Virtuoso, the Microsoft .NET implementations of 
	    the ECMA Common Language Infrastructure (CLI) and the Win32 COM Layer. 
    
	Prerequisites
	The following prerequisites ensure the usability of these  
	    tutorial demos on Windows: 
		
		    .NET Runtime and Frameworks
		    .Net Runtime and Framework SDK (if you seek to write your own Objects for integration with Virtuoso)
		    Virtuoso Universal Server for Windows with .NET CLR Hosting
		
    
	Tutorial Example
	The following tutorial shows how the Virtuoso server can call native Win32 COM objects using
	    the .NET runtime as intermediary. 
	Please follow the steps below to maximize the value of this tutorial:
	
	    Register the COM library COM/VirtCOMServer/Debug/VirtCOMServer.dll with COM (via regsvr32.exe COM/VirtCOMServer/Debug/VirtCOMServer.dll).
	    Copy the interop assembly COM/VirtCOMServer/VirtCOMServer.dll next to the virtuoso server binary (if not allready there).
	    Click on the &quot;Set Initial State&quot; link which registers the C# interop class for the Interface IVirtCOMObject with Virtuoso. Click on the &quot;ho_s_15.sql&quot; link to see the code behind this step 
	    Click on the &quot;Run&quot; links to actually experience the demo
	
	Demo Breakdown
	
	    &quot;ho_s_15.sql&quot; registers the &quot;VirtCOMServer.CVirtCOMObjectClass&quot; C# interop class with Virtuoso. Click 
		on the &quot;VirtCOMObject.c&quot; and &quot;VirtCOMObject.h&quot; link to see the C++ source code of this interface and it&#39;s class
	    	&quot;vsp1.vsp&quot; uses the methods &quot;AddAmount&quot;, &quot;Clear&quot; and &quot;get_balance&quot; of the &quot;VirtCOMServer.IVirtCOMObject&quot; Interface to 
		sum a number of amounts and get the resulting total.
	
    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_1/ho_s_1.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Integrating Java Objects with Virtuoso</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:29 GMT</dcterms:created_at>
<sioc:description>Using Java Objects to extend Virtuoso via User Defined Types.</sioc:description>
<sioc:content>
    Overview
  The following tutorial demonstrates how Virtuoso can be extended 
  through the use of Java to create User Defined Types (UDTs), Stored Procedures, 
  and Functions. This is an enhancement of its Object-Relational Database functionality. 
  The demonstrations in this section highlight transparent integration 
  (hosting) between Virtuoso and the Java Runtime Environment. 
  
    Prerequisites
  The following prerequisites ensure the usability of these tutorial demos on any platform with a Java Runtime environment:

  Java Runtime (J2EE 1.2 and Higher)
  Java SDK (if you seek to write your own Objects for integration with Virtuoso)
  Virtuoso Universal Server with Java Runtime Hosting 
 

    Tutorial Example
The following tutorial shows how Java Classes are used to create User Defined Types (UDTs), Stored Procedures, and Functions in Virtuoso. 
Please follow the steps below to maximize the value of this tutorial:

  Click on the &quot;Set Initial State&quot; link which registers the Java classes used in this demo with Virtuoso. Click on the &quot;ho_s_1.sql&quot; link to see the code behind this step 
  Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown

  &quot;ho_s_1.sql&quot; performs the following steps
    
       Registers the &quot;MyFinances&quot; and &quot;Point&quot; Classes with Virtuoso as 
       UDTs. Click on the &quot;MyFinances.java&quot; and &quot;Point.java&quot; links to see the 
       JAVA source code 
       Creates the conventional SQL table &quot;Employee&quot; 
       Creates the Object-Relational table &quot;Supplier&quot; that includes a 
       column named &quot;Location&quot; that is of  Type &quot;Point&quot; (which is a UDT)
       Populates each of the newly created tables with data
       Creates the &quot;distance&quot; stored procedure which uses UDT 
       methods to calculate the distance between points.
    
    
    &quot;vsp1.vsp&quot; uses the static method &quot;tax&quot; of the &quot;MyFinances&quot; 
    class to compute the payroll tax values for each employee via the 
    &quot;salary&quot; column (like a SQL function would). 
    &quot;vsp2.vsp&quot; uses the &quot;distance&quot; method of the UDT based column 
    &quot;location&quot; to test for distance values less than &quot;3&quot;. The distance values are return values from the &quot;Point&quot; UDT. Note that &quot;Point&quot; class is computing the distance between two arbitrary points
    &quot;vsp3.vsp&quot; is a variation of the previous demo, with the UDT based 
    column &quot;location&quot; being used to access and conditionally test the values of 
    data member &quot;x&quot; (shown in &quot;Point.java&quot; as 0)
    &quot;vsp4.vsp&quot; is another variation of a query on the &quot;Supplier&quot; table, 
    in this particular case the query uses a Stored Procedure (see definition in 
    &quot;ho_s_2.sql&quot;) to filter its result set.  It achieves this by using data member 
    values &quot;x&quot; and &quot;y&quot; from column &quot;location&quot;, and the arbitrary values 1 &amp; 2 
    as input parameters for the Stored Procedure &quot;distance&quot;.  It then tests 
    the return values for those less than 3.

    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
    Overview
  The following tutorial demonstrates how Virtuoso can be extended 
  through the use of Java to create User Defined Types (UDTs), Stored Procedures, 
  and Functions. This is an enhancement of its Object-Relational Database functionality. 
  The demonstrations in this section highlight transparent integration 
  (hosting) between Virtuoso and the Java Runtime Environment. 
  
    Prerequisites
  The following prerequisites ensure the usability of these tutorial demos on any platform with a Java Runtime environment:

  Java Runtime (J2EE 1.2 and Higher)
  Java SDK (if you seek to write your own Objects for integration with Virtuoso)
  Virtuoso Universal Server with Java Runtime Hosting 
 

    Tutorial Example
The following tutorial shows how Java Classes are used to create User Defined Types (UDTs), Stored Procedures, and Functions in Virtuoso. 
Please follow the steps below to maximize the value of this tutorial:

  Click on the &quot;Set Initial State&quot; link which registers the Java classes used in this demo with Virtuoso. Click on the &quot;ho_s_1.sql&quot; link to see the code behind this step 
  Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown

  &quot;ho_s_1.sql&quot; performs the following steps
    
       Registers the &quot;MyFinances&quot; and &quot;Point&quot; Classes with Virtuoso as 
       UDTs. Click on the &quot;MyFinances.java&quot; and &quot;Point.java&quot; links to see the 
       JAVA source code 
       Creates the conventional SQL table &quot;Employee&quot; 
       Creates the Object-Relational table &quot;Supplier&quot; that includes a 
       column named &quot;Location&quot; that is of  Type &quot;Point&quot; (which is a UDT)
       Populates each of the newly created tables with data
       Creates the &quot;distance&quot; stored procedure which uses UDT 
       methods to calculate the distance between points.
    
    
    &quot;vsp1.vsp&quot; uses the static method &quot;tax&quot; of the &quot;MyFinances&quot; 
    class to compute the payroll tax values for each employee via the 
    &quot;salary&quot; column (like a SQL function would). 
    &quot;vsp2.vsp&quot; uses the &quot;distance&quot; method of the UDT based column 
    &quot;location&quot; to test for distance values less than &quot;3&quot;. The distance values are return values from the &quot;Point&quot; UDT. Note that &quot;Point&quot; class is computing the distance between two arbitrary points
    &quot;vsp3.vsp&quot; is a variation of the previous demo, with the UDT based 
    column &quot;location&quot; being used to access and conditionally test the values of 
    data member &quot;x&quot; (shown in &quot;Point.java&quot; as 0)
    &quot;vsp4.vsp&quot; is another variation of a query on the &quot;Supplier&quot; table, 
    in this particular case the query uses a Stored Procedure (see definition in 
    &quot;ho_s_2.sql&quot;) to filter its result set.  It achieves this by using data member 
    values &quot;x&quot; and &quot;y&quot; from column &quot;location&quot;, and the arbitrary values 1 &amp; 2 
    as input parameters for the Stored Procedure &quot;distance&quot;.  It then tests 
    the return values for those less than 3.

    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/hosting/ho_s_13/ho_s_13.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/hosting"/><dc:title>Integrating Java Objects with Virtuoso</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:30 GMT</dcterms:created_at>
<sioc:description>Using Restrictions for Java hosted types.</sioc:description>
<sioc:content>
    Overview
  The following tutorial demonstrates how Virtuoso can Restrict Java hosted types. 
  
    Prerequisites
  The following prerequisites ensure the usability of these tutorial demos on any platform with a Java Runtime environment:

  Java Runtime (J2EE 1.2 and Higher)
  Java SDK (if you seek to write your own Objects for integration with Virtuoso)
  Virtuoso Universal Server with Java Runtime Hosting 
 

    Tutorial Example
Please follow the steps below to maximize the value of this tutorial:

  Click on the &quot;Set Initial State&quot; link which registers the Java classes used in this demo with Virtuoso. Click on the &quot;ho_s_13.sql&quot; link to see the code behind this step 
  Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown

  &quot;ho_s_13.sql&quot; performs the following steps
    
       Registers the &quot;Restricted&quot; and &quot;Unrestricted&quot; Classes with Virtuoso as 
       UDTs. Click on the &quot;Restricted.java&quot; and &quot;Unrestricted.java&quot; links to see the 
       JAVA source code 
       The Restricted types can&#39;t write to FS, can&#39;t read System envariment. For full list from restrictions, please see documentation.
    
    

    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
    Overview
  The following tutorial demonstrates how Virtuoso can Restrict Java hosted types. 
  
    Prerequisites
  The following prerequisites ensure the usability of these tutorial demos on any platform with a Java Runtime environment:

  Java Runtime (J2EE 1.2 and Higher)
  Java SDK (if you seek to write your own Objects for integration with Virtuoso)
  Virtuoso Universal Server with Java Runtime Hosting 
 

    Tutorial Example
Please follow the steps below to maximize the value of this tutorial:

  Click on the &quot;Set Initial State&quot; link which registers the Java classes used in this demo with Virtuoso. Click on the &quot;ho_s_13.sql&quot; link to see the code behind this step 
  Click on the &quot;Run&quot; links to actually experience the demo


Demo Breakdown

  &quot;ho_s_13.sql&quot; performs the following steps
    
       Registers the &quot;Restricted&quot; and &quot;Unrestricted&quot; Classes with Virtuoso as 
       UDTs. Click on the &quot;Restricted.java&quot; and &quot;Unrestricted.java&quot; links to see the 
       JAVA source code 
       The Restricted types can&#39;t write to FS, can&#39;t read System envariment. For full list from restrictions, please see documentation.
    
    

    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/xq_s_2/xq_s_2.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Filter WebDAV content content by XQuery</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:41 GMT</dcterms:created_at>
<sioc:description>fn:collection usage example</sioc:description>
<sioc:content>
	Preliminary
	
	    XQuery collection function can be used to get all parsed documents in collection. Virtuoso engine supports several types of collections:
	
	
	    http://local.virt/DAV/PATHTO - local DAV collection. Contains all documents in DAV collection with path &quot;PATHTO&quot;.
	    
	    http://host:port/path - any other URL that can be used to access remote WebDAV collections 
	
	In this example collection function is used to filter local blog entries and all cached blog entries from subscriptions. search.vsp uses this collection to filter blogs by XPath exression. For instance, search.vsp with &#39;//a&#39; expression returns all link from all blogs.
	
	
	    text.vsp uses collection function to search blogs which contain some word. Note, it uses &quot;contains&quot; predicate to search blogs, this means it is case sensitive.
	
    
	Prerequisites
	This example needs the following VAD packages to be installed:
	
	    Conductor
	    Framework
	    Briefcase
	    Feed Manager
	    Weblog
	
	If you do not have permissions to install the above please ask the administrator.
	The VAD installation can be done via Conductor (if it&#39;s installed) or via ISQL tool using vad_install() API function. 
	    For more details on vad installation please read the user manual.
	
	    Important: before to run any of the actions bellow you need to setup a ODS account (or use tutorial_demo with password secret).
	    In both cases you will need to login in ODS and create instances of the Briefcase, Feed Manager and Weblog applications. 
	
	
	    Using the Feed Manager you should subscribe to some news feeds in RSS, Atom or RDF format.
	
	
	    Using the Briefcase you can upload some sample data in the account&#39;s home directory.
	
	
	    Using the Weblog, make few sample blog posts.
	
    
	Example overview
	This example demonstrates:
	
	    XQuery collection function
	    XPath extension functions
	    WebDAV Resource Filtering and WebDAV Extension Types (DETs)
	
    
	Example Operation
	
	    Login into ODS using the link bellow, after successfull authentication the ODS login will redirect browser back to this page
	    Using the link &#39;Run&#39; start the search.vsp
	    Initially you will have the ODS account&#39;s home directory set as a base, so you can change it using the browse button
	    If you don&#39;t have initial data loaded or data which not satisfies the conditions, the query execution will be produce empty result.
	
    
	Example Setup
	The demo support functions are prepared by loading the supplied SQL file
    
    How to run the examples
	
	    In order to enter the initial data via ODS you need to login and create instances via ODS. After entering the initial data, you will need to go back to this page. If you already done this just skip this step
	    In order to run the examples, you need to login in the Web Applications.
	    To login you can use the already defined user &quot;tutorial_demo&quot; with password &quot;secret&quot; case sensitive. 
	    When you click the &quot;Run&quot; link of the search.vsp file the browser will be redirected to ODS login page. After succefull login the browser will be redirected back to this page. 
	
    </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
	Preliminary
	
	    XQuery collection function can be used to get all parsed documents in collection. Virtuoso engine supports several types of collections:
	
	
	    http://local.virt/DAV/PATHTO - local DAV collection. Contains all documents in DAV collection with path &quot;PATHTO&quot;.
	    
	    http://host:port/path - any other URL that can be used to access remote WebDAV collections 
	
	In this example collection function is used to filter local blog entries and all cached blog entries from subscriptions. search.vsp uses this collection to filter blogs by XPath exression. For instance, search.vsp with &#39;//a&#39; expression returns all link from all blogs.
	
	
	    text.vsp uses collection function to search blogs which contain some word. Note, it uses &quot;contains&quot; predicate to search blogs, this means it is case sensitive.
	
    
	Prerequisites
	This example needs the following VAD packages to be installed:
	
	    Conductor
	    Framework
	    Briefcase
	    Feed Manager
	    Weblog
	
	If you do not have permissions to install the above please ask the administrator.
	The VAD installation can be done via Conductor (if it&#39;s installed) or via ISQL tool using vad_install() API function. 
	    For more details on vad installation please read the user manual.
	
	    Important: before to run any of the actions bellow you need to setup a ODS account (or use tutorial_demo with password secret).
	    In both cases you will need to login in ODS and create instances of the Briefcase, Feed Manager and Weblog applications. 
	
	
	    Using the Feed Manager you should subscribe to some news feeds in RSS, Atom or RDF format.
	
	
	    Using the Briefcase you can upload some sample data in the account&#39;s home directory.
	
	
	    Using the Weblog, make few sample blog posts.
	
    
	Example overview
	This example demonstrates:
	
	    XQuery collection function
	    XPath extension functions
	    WebDAV Resource Filtering and WebDAV Extension Types (DETs)
	
    
	Example Operation
	
	    Login into ODS using the link bellow, after successfull authentication the ODS login will redirect browser back to this page
	    Using the link &#39;Run&#39; start the search.vsp
	    Initially you will have the ODS account&#39;s home directory set as a base, so you can change it using the browse button
	    If you don&#39;t have initial data loaded or data which not satisfies the conditions, the query execution will be produce empty result.
	
    
	Example Setup
	The demo support functions are prepared by loading the supplied SQL file
    
    How to run the examples
	
	    In order to enter the initial data via ODS you need to login and create instances via ODS. After entering the initial data, you will need to go back to this page. If you already done this just skip this step
	    In order to run the examples, you need to login in the Web Applications.
	    To login you can use the already defined user &quot;tutorial_demo&quot; with password &quot;secret&quot; case sensitive. 
	    When you click the &quot;Run&quot; link of the search.vsp file the browser will be redirected to ODS login page. After succefull login the browser will be redirected back to this page. 
	
    ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/xq_s_2a/xq_s_2a.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Filter blogs content by XQuery</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:42 GMT</dcterms:created_at>
<sioc:description>collection usage example</sioc:description>
<sioc:content>
      Example
    collection description
    
      XQuery collection function can be used to get all parsed documents in collection. Virtuoso engine supports several types of collections:
    
    
      http://local.virt/DAV/PATHTO - local DAV collection. Contains all documents in DAV collection with path &quot;PATHTO&quot;.
      
      http://..... - any other URI relates to remote DAV collections 
    
    In this example collection function is used to concatenate the entries from several RSS feed files and show their titles and link to the articles. example.vsp uses this collection to filter blogs by XPath exression. For instance, example.vsp with &#39;//link&#39; expression returns all link from all feeds.
    Click on the &quot;Set initial state&quot; link to load the XML files in /DAV/feeds/xq_s_2a/ DAV Collection.
    Click on the &quot;Run&quot; link to experience the demo. Please note that some of the options query files loaded in demo XQ-S-2.
  </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
      Example
    collection description
    
      XQuery collection function can be used to get all parsed documents in collection. Virtuoso engine supports several types of collections:
    
    
      http://local.virt/DAV/PATHTO - local DAV collection. Contains all documents in DAV collection with path &quot;PATHTO&quot;.
      
      http://..... - any other URI relates to remote DAV collections 
    
    In this example collection function is used to concatenate the entries from several RSS feed files and show their titles and link to the articles. example.vsp uses this collection to filter blogs by XPath exression. For instance, example.vsp with &#39;//link&#39; expression returns all link from all feeds.
    Click on the &quot;Set initial state&quot; link to load the XML files in /DAV/feeds/xq_s_2a/ DAV Collection.
    Click on the &quot;Run&quot; link to experience the demo. Please note that some of the options query files loaded in demo XQ-S-2.
  ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/xq_s_3/xq_s_3.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Slashdot RSS feed retrieval</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:42 GMT</dcterms:created_at>
<sioc:description>document usage example</sioc:description>
<sioc:content>
     Example
    document description
    
      XQuery document function can be used to get a parsed document via URL.
    
    In this example the document is used to retreive the Slashdot RSS feed and convert the contents into a feed index.
    Click on the &quot;Set initial state&quot; link to load the slash.xml file in /DAV/xmlsql/ DAV Collection with execute permisions.
    Click on the &quot;Run&quot; link and the browser will be redirected to /DAV/xmlsql/slash.xml?contenttype=text/html.
  </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
     Example
    document description
    
      XQuery document function can be used to get a parsed document via URL.
    
    In this example the document is used to retreive the Slashdot RSS feed and convert the contents into a feed index.
    Click on the &quot;Set initial state&quot; link to load the slash.xml file in /DAV/xmlsql/ DAV Collection with execute permisions.
    Click on the &quot;Run&quot; link and the browser will be redirected to /DAV/xmlsql/slash.xml?contenttype=text/html.
  ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/xq_s_4/xq_s_4.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>OPML file generation from XHTML source</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:42 GMT</dcterms:created_at>
<sioc:description>document usage example</sioc:description>
<sioc:content>
      Example
      
	  The demo retrieve a HTML pages containing attendees or bloggers listings and convert them to OPML.
	  The conversion is done with XQuery and user-defined XPath functions to resolve the feeds URLs. 
      
      
	  The demo also retrieve few OPML files and re-construct them having the feeds URLs if they are missing.
      
      
	  When setting the initial state, the demo starts to retrieve pages from the different sites. 
	  It could take a long time depending on the Internet connection of the machine that Virtuoso is running on. 
	  It is safe to leave the pop-up open without waiting it to finish and press on the &quot;Run&quot; links,
	  however if this is the first time you run the initial state, the demo will show only partial results.
	  Once the feeds are resolved they will be cached locally in a database table and the generated OPML files will
	  be stored as a WebDAV resources.
      
      
	  The following are source references used in the demo:
      
      
	  http://wiki.techcrunch.com/third_meetup 				        
	  http://news.com.com/html/ne/blogs/CNETNewsBlog100.opml			
	  http://conferences.oreillynet.com/pub/w/23/speakers.html                    
	  http://conferences.oreillynet.com/pub/w/38/speakers.html                    
	  http://www.alwayson-network.com/comments.php?id=10852_0_11_0_C              
	  http://www.gnomedex.com/holdings/br_2005%20Gnomedexers.opml			
	  http://www.web2con.com/pub/w/40/speakers.html                               
	  http://www.thenewpr.com/wiki/pmwiki.php?pagename=Resources.CEOBlogsList     
	  http://nwr.cowblock.net/index.php?action=list				
	  http://okrasoup.typepad.com/black_looks/2005/05/naija_blogs.html		
	  http://allafrica.com/afdb/blogs/blogafrica.opml                             
      
  </sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
      Example
      
	  The demo retrieve a HTML pages containing attendees or bloggers listings and convert them to OPML.
	  The conversion is done with XQuery and user-defined XPath functions to resolve the feeds URLs. 
      
      
	  The demo also retrieve few OPML files and re-construct them having the feeds URLs if they are missing.
      
      
	  When setting the initial state, the demo starts to retrieve pages from the different sites. 
	  It could take a long time depending on the Internet connection of the machine that Virtuoso is running on. 
	  It is safe to leave the pop-up open without waiting it to finish and press on the &quot;Run&quot; links,
	  however if this is the first time you run the initial state, the demo will show only partial results.
	  Once the feeds are resolved they will be cached locally in a database table and the generated OPML files will
	  be stored as a WebDAV resources.
      
      
	  The following are source references used in the demo:
      
      
	  http://wiki.techcrunch.com/third_meetup 				        
	  http://news.com.com/html/ne/blogs/CNETNewsBlog100.opml			
	  http://conferences.oreillynet.com/pub/w/23/speakers.html                    
	  http://conferences.oreillynet.com/pub/w/38/speakers.html                    
	  http://www.alwayson-network.com/comments.php?id=10852_0_11_0_C              
	  http://www.gnomedex.com/holdings/br_2005%20Gnomedexers.opml			
	  http://www.web2con.com/pub/w/40/speakers.html                               
	  http://www.thenewpr.com/wiki/pmwiki.php?pagename=Resources.CEOBlogsList     
	  http://nwr.cowblock.net/index.php?action=list				
	  http://okrasoup.typepad.com/black_looks/2005/05/naija_blogs.html		
	  http://allafrica.com/afdb/blogs/blogafrica.opml                             
      
  ]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_0/sx_e_0.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Overview</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XMLELEMENT() function.</sioc:description>
<sioc:content>
XMLELEMENT() function. Overview

XMLELEMENT takes an element name for identifier, an optional collection of attributes for the element, 
    and arguments that make up the element&#39;s content. 
    It returns an XML element. The second parameter may be omitted and at that time the 
    rest parameters may be present. If one of the arguments is a call of the xpath_eval returning 
    an attribute value, then this value would be added to element&#39;s content (not to element&#39;s attributes).


XMLATTRIBUTES() function. Overview

   This function creates a vector that may be used only as argument of 
   XMLELEMENT function. The vector has an even number of elements, each odd element is a name of an attribute, an
   even element is its value. If the attribute value is NULL, then no attribute and no value is created.
   If none of the attribute is created, then the function returns null.
   If a parameter of the function is a column name, then you can omit the &#39;AS clause&#39;, and Virtuoso uses the partially escaped form of 
   the column name as the attribute name. 


sx_e_? Demos

   Countinue with the next sx_e_? demos to see examples of functoins usage

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
XMLELEMENT() function. Overview

XMLELEMENT takes an element name for identifier, an optional collection of attributes for the element, 
    and arguments that make up the element&#39;s content. 
    It returns an XML element. The second parameter may be omitted and at that time the 
    rest parameters may be present. If one of the arguments is a call of the xpath_eval returning 
    an attribute value, then this value would be added to element&#39;s content (not to element&#39;s attributes).


XMLATTRIBUTES() function. Overview

   This function creates a vector that may be used only as argument of 
   XMLELEMENT function. The vector has an even number of elements, each odd element is a name of an attribute, an
   even element is its value. If the attribute value is NULL, then no attribute and no value is created.
   If none of the attribute is created, then the function returns null.
   If a parameter of the function is a column name, then you can omit the &#39;AS clause&#39;, and Virtuoso uses the partially escaped form of 
   the column name as the attribute name. 


sx_e_? Demos

   Countinue with the next sx_e_? demos to see examples of functoins usage

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_1/sx_e_1.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element without content</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element without content</sioc:description>
<sioc:content>
Example 1
This example shows a simple use of the XMLELEMENT() for creating the xml element &#39;Employee&#39; (for each 
employee) without content:


select XMLELEMENT (&quot;Employee&quot;) from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 1
This example shows a simple use of the XMLELEMENT() for creating the xml element &#39;Employee&#39; (for each 
employee) without content:


select XMLELEMENT (&quot;Employee&quot;) from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_2/sx_e_2.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with a text content</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element with a text content</sioc:description>
<sioc:content>
Example 2
This example shows a use of the XMLELEMENT() for creating the xml element &#39;EmployeeName&#39; 
(for each employee) with the text content that is value of the &#39;LastName&#39; column from the 
&quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot; table.


select XMLELEMENT (&quot;EmployeeName&quot;, &quot;LastName&quot;) 
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 2
This example shows a use of the XMLELEMENT() for creating the xml element &#39;EmployeeName&#39; 
(for each employee) with the text content that is value of the &#39;LastName&#39; column from the 
&quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot; table.


select XMLELEMENT (&quot;EmployeeName&quot;, &quot;LastName&quot;) 
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_3/sx_e_3.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with attributes</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element with attributes</sioc:description>
<sioc:content>
Example 3
This example shows a use of the XMLELEMENT() for creating the xml element &#39;Emp&#39; with three 
attributes - &#39;EmployeeID&#39;, &#39;firstname&#39; and &#39;lastname&#39; getting their values from the  
&#39;EmployeeID&#39;, &#39;FirstName&#39; and &#39;LastName&#39; columns, respectively. The pairs of attribute and its 
value are produced by XMLATTRIBUTES() function. If a parameter of the XMLATTRIBUTES() has no &#39;as clause&#39;, 
Virtuoso uses the partially escaped form of the column name as the attribute name. 


select
     XMLELEMENT (&quot;Emp&quot;, XMLATTRIBUTES (&quot;EmployeeID&quot;, &quot;FirstName&quot; as &quot;firstname&quot;, &quot;LastName&quot; as &quot;lastname&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 3
This example shows a use of the XMLELEMENT() for creating the xml element &#39;Emp&#39; with three 
attributes - &#39;EmployeeID&#39;, &#39;firstname&#39; and &#39;lastname&#39; getting their values from the  
&#39;EmployeeID&#39;, &#39;FirstName&#39; and &#39;LastName&#39; columns, respectively. The pairs of attribute and its 
value are produced by XMLATTRIBUTES() function. If a parameter of the XMLATTRIBUTES() has no &#39;as clause&#39;, 
Virtuoso uses the partially escaped form of the column name as the attribute name. 


select
     XMLELEMENT (&quot;Emp&quot;, XMLATTRIBUTES (&quot;EmployeeID&quot;, &quot;FirstName&quot; as &quot;firstname&quot;, &quot;LastName&quot; as &quot;lastname&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_4/sx_e_4.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with attribute, a text content and a sublement</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element with attribute, a text content and a sublement</sioc:description>
<sioc:content>
Example 4
This example shows a use of the XMLELEMENT() for creating the xml element &#39;Employee&#39; with the  
&#39;EmployeeID&#39; attribute, text content that is concatenations of the value of the &#39;FirstName&#39; column, 
of the blank character and of the value of the &#39;LastName&#39;, and the &#39;Title&#39; subelement having 
&#39;title&#39; attribute.


select XMLELEMENT (&#39;Employee&#39;, XMLATTRIBUTES (&quot;EmployeeID&quot;), &quot;FirstName&quot;||&#39; &#39;||&quot;LastName&quot;, 
                                XMLELEMENT(&quot;Title&quot;, XMLATTRIBUTES ( &quot;Title&quot; as &quot;title&quot;)))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 4
This example shows a use of the XMLELEMENT() for creating the xml element &#39;Employee&#39; with the  
&#39;EmployeeID&#39; attribute, text content that is concatenations of the value of the &#39;FirstName&#39; column, 
of the blank character and of the value of the &#39;LastName&#39;, and the &#39;Title&#39; subelement having 
&#39;title&#39; attribute.


select XMLELEMENT (&#39;Employee&#39;, XMLATTRIBUTES (&quot;EmployeeID&quot;), &quot;FirstName&quot;||&#39; &#39;||&quot;LastName&quot;, 
                                XMLELEMENT(&quot;Title&quot;, XMLATTRIBUTES ( &quot;Title&quot; as &quot;title&quot;)))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_5/sx_e_5.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with two nested subelements</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element with two nested subelements</sioc:description>
<sioc:content>
Example 5
This example shows a use of the XMLELEMENT() for creating the xml element 
&#39;FullName&#39; with two subelements &#39;firstname&#39; and &#39;lastname&#39;. Both subelements have the 
simple text content. 


select
      XMLELEMENT (&#39;FullName&#39;,
                        XMLELEMENT (&#39;firstname&#39;, &quot;FirstName&quot;),
                        XMLELEMENT (&#39;lastname&#39;, &quot;LastName&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 5
This example shows a use of the XMLELEMENT() for creating the xml element 
&#39;FullName&#39; with two subelements &#39;firstname&#39; and &#39;lastname&#39;. Both subelements have the 
simple text content. 


select
      XMLELEMENT (&#39;FullName&#39;,
                        XMLELEMENT (&#39;firstname&#39;, &quot;FirstName&quot;),
                        XMLELEMENT (&#39;lastname&#39;, &quot;LastName&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_6/sx_e_6.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with nested XMLFOREST() function</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element with XMLFOREST() function call as parameter</sioc:description>
<sioc:content>
Example 6
The example shows a use of the XMLELEMENT() with the nested call of XMLFOREST() function. The result is identical
to the previous example.


select
      XMLELEMENT (&#39;FullName&#39;,
                        XMLFOREST (&quot;FirstName&quot;as &quot;firstname&quot;, &quot;LastName&quot; as &quot;lastname&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 6
The example shows a use of the XMLELEMENT() with the nested call of XMLFOREST() function. The result is identical
to the previous example.


select
      XMLELEMENT (&#39;FullName&#39;,
                        XMLFOREST (&quot;FirstName&quot;as &quot;firstname&quot;, &quot;LastName&quot; as &quot;lastname&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_7/sx_e_7.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with nested XMLCONCAT() function</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:40 GMT</dcterms:created_at>
<sioc:description>XML element with XMLCONCAT() function call as parameter</sioc:description>
<sioc:content>
Example 7
The example shows a use of the XMLELEMENT() with the nested call of XMLCONCAT() function. The result is identical
to the previous two examples.


select
      XMLELEMENT (&#39;FullName&#39;,
                             XMLCONCAT (
                                        XMLELEMENT (&#39;firstname&#39;, &quot;FirstName&quot;),
                                        XMLELEMENT (&#39;lastname&#39;, &quot;LastName&quot;))) 
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 7
The example shows a use of the XMLELEMENT() with the nested call of XMLCONCAT() function. The result is identical
to the previous two examples.


select
      XMLELEMENT (&#39;FullName&#39;,
                             XMLCONCAT (
                                        XMLELEMENT (&#39;firstname&#39;, &quot;FirstName&quot;),
                                        XMLELEMENT (&#39;lastname&#39;, &quot;LastName&quot;))) 
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_8/sx_e_8.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with nested XMLAGG() function</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:41 GMT</dcterms:created_at>
<sioc:description>XML element with XMLAGG() function call as parameter</sioc:description>
<sioc:content>
Example 8
This example produces an &#39;Emp&#39; element with attribute &#39;Title&#39;
and a list of all employees having the title &#39;Sales Representative&#39; as element content.


select XMLELEMENT (&#39;Emp&#39;, XMLATTRIBUTES (&quot;Title&quot;),                    
                          XMLAGG (XMLELEMENT (&#39;Name&#39;, &quot;FirstName&quot;, &#39; &#39;, &quot;LastName&quot;)))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;
where &quot;Title&quot;= &#39;Sales Representative&#39;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 8
This example produces an &#39;Emp&#39; element with attribute &#39;Title&#39;
and a list of all employees having the title &#39;Sales Representative&#39; as element content.


select XMLELEMENT (&#39;Emp&#39;, XMLATTRIBUTES (&quot;Title&quot;),                    
                          XMLAGG (XMLELEMENT (&#39;Name&#39;, &quot;FirstName&quot;, &#39; &#39;, &quot;LastName&quot;)))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;
where &quot;Title&quot;= &#39;Sales Representative&#39;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_e_9/sx_e_9.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making an XML element with the entity objects as parameters </dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:41 GMT</dcterms:created_at>
<sioc:description>XML element with the entity objects as parameters</sioc:description>
<sioc:content>
Example 9
This example creates an &#39;FullAddress&#39; element with 

   four attributes, three of them (&#39;PostalCode&#39;, &#39;Address&#39;, &#39;City&#39;) are
   produced by XMLATTRIBUTES, and the fourth attribute - &#39;country&#39; is calculated by 
   xquery_eval 
  &#39;Region&#39; subelement, that is produced by xtree_doc
  text content, that is produced by xpath_eval 
  &#39;emp&#39; subelement with text content from the column &quot;LastName&quot;, that is created by nested
  XMLELEMENT


select XMLELEMENT (&#39;FullAddress&#39;,
                        XMLATTRIBUTES ( &quot;PostalCode&quot;, &quot;Address&quot;, &quot;City&quot;),
                        xtree_doc (&#39;&lt;Region&gt;WA&lt;/Region&gt;&#39;),
                        xquery_eval(&#39;//@country&#39;, xtree_doc(&#39;&lt;a country=&quot;USA&quot;/&gt;&#39;)),
                        xpath_eval(&#39;//@Phone&#39;, xtree_doc(&#39;&lt;a Phone=&quot;(206) 555-9857&quot;/&gt;&#39;)),
                        XMLELEMENT(&#39;emp&#39;, &quot;LastName&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot; 

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example 9
This example creates an &#39;FullAddress&#39; element with 

   four attributes, three of them (&#39;PostalCode&#39;, &#39;Address&#39;, &#39;City&#39;) are
   produced by XMLATTRIBUTES, and the fourth attribute - &#39;country&#39; is calculated by 
   xquery_eval 
  &#39;Region&#39; subelement, that is produced by xtree_doc
  text content, that is produced by xpath_eval 
  &#39;emp&#39; subelement with text content from the column &quot;LastName&quot;, that is created by nested
  XMLELEMENT


select XMLELEMENT (&#39;FullAddress&#39;,
                        XMLATTRIBUTES ( &quot;PostalCode&quot;, &quot;Address&quot;, &quot;City&quot;),
                        xtree_doc (&#39;&lt;Region&gt;WA&lt;/Region&gt;&#39;),
                        xquery_eval(&#39;//@country&#39;, xtree_doc(&#39;&lt;a country=&quot;USA&quot;/&gt;&#39;)),
                        xpath_eval(&#39;//@Phone&#39;, xtree_doc(&#39;&lt;a Phone=&quot;(206) 555-9857&quot;/&gt;&#39;)),
                        XMLELEMENT(&#39;emp&#39;, &quot;LastName&quot;))
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot; 

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_f_1/sx_f_1.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making a Forest of XML elements</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:41 GMT</dcterms:created_at>
<sioc:description>XMLFOREST() function</sioc:description>
<sioc:content>
XMLFOREST() function. Overview

XMLFOREST produces a forest of XML elements from the given list of arguments. 
   The arguments may be string expressions with optional aliases. If string expression is a column name, 
   then you can omit the &#39;AS clause&#39;, and Virtuoso uses the partially escaped form of 
   the column name as the name of the enclosing tag. If the expression evaluates to NULL, then no element is 
   created for that expression. If none of the element is created, then the function returns null.


Example 1
This example produces a forest of five (or four) elements (&#39;FName&#39;, &#39;LName&#39;, &#39;Title&#39;, &#39;Region&#39; - if there is a value,  &#39;str&#39;) 
with the text content from &#39;FirstName&#39;, &#39;LastName&#39;, &#39;Title&#39;, and &#39;Region&#39; 
columns of the &quot;Employees&quot; table and &#39;simple_string&#39; string,
and concatenates the elements produced. Five elements are created for the employee with &quot;EmployeeId&quot; = 1 and four elements 
are created for the employee with &quot;EmployeeId&quot; = 5:


select XMLFOREST (&quot;FirstName&quot; as &quot;FName&quot;, &quot;LastName&quot; as &quot;LName&quot;, &quot;Title&quot;, &quot;Region&quot;, &#39;simple_string&#39; as &quot;str&quot;)
  from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot; 
  where &quot;EmployeeId&quot; = 1 or &quot;EmployeeId&quot; = 5

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
XMLFOREST() function. Overview

XMLFOREST produces a forest of XML elements from the given list of arguments. 
   The arguments may be string expressions with optional aliases. If string expression is a column name, 
   then you can omit the &#39;AS clause&#39;, and Virtuoso uses the partially escaped form of 
   the column name as the name of the enclosing tag. If the expression evaluates to NULL, then no element is 
   created for that expression. If none of the element is created, then the function returns null.


Example 1
This example produces a forest of five (or four) elements (&#39;FName&#39;, &#39;LName&#39;, &#39;Title&#39;, &#39;Region&#39; - if there is a value,  &#39;str&#39;) 
with the text content from &#39;FirstName&#39;, &#39;LastName&#39;, &#39;Title&#39;, and &#39;Region&#39; 
columns of the &quot;Employees&quot; table and &#39;simple_string&#39; string,
and concatenates the elements produced. Five elements are created for the employee with &quot;EmployeeId&quot; = 1 and four elements 
are created for the employee with &quot;EmployeeId&quot; = 5:


select XMLFOREST (&quot;FirstName&quot; as &quot;FName&quot;, &quot;LastName&quot; as &quot;LName&quot;, &quot;Title&quot;, &quot;Region&quot;, &#39;simple_string&#39; as &quot;str&quot;)
  from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot; 
  where &quot;EmployeeId&quot; = 1 or &quot;EmployeeId&quot; = 5

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_g_1/sx_g_1.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making a Forest of XML elements by XMLCONCAT() function</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:41 GMT</dcterms:created_at>
<sioc:description>XMLCONCAT() function</sioc:description>
<sioc:content>
XMLCONCAT() function Overview

XMLCONCAT() accepts a list of XML value expressions as its arguments, and produces a forest of elements by 
   concatenating the XML values that are returned from the same row to make one value. 
   XMLCONCAT works like XMLFOREST,
   except that XMLCONCAT parameters is a list of XML elements. 
    Null expressions are dropped from the result. If all the value expressions are null, then the function returns null.

Example 1
 This example produces a forest from the &#39;FName&#39;, &#39;LName&#39; and &#39;Region&#39; (if a column value is not NULL)
  elements for each employee: 


select XMLCONCAT (
  XMLELEMENT (&#39;FName&#39;, &quot;FirstName&quot;), XMLELEMENT (&#39;LName&#39;, &quot;LastName&quot;), 
  XMLELEMENT (&#39;Region&#39;, &quot;Region&quot;) )
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;; 

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
XMLCONCAT() function Overview

XMLCONCAT() accepts a list of XML value expressions as its arguments, and produces a forest of elements by 
   concatenating the XML values that are returned from the same row to make one value. 
   XMLCONCAT works like XMLFOREST,
   except that XMLCONCAT parameters is a list of XML elements. 
    Null expressions are dropped from the result. If all the value expressions are null, then the function returns null.

Example 1
 This example produces a forest from the &#39;FName&#39;, &#39;LName&#39; and &#39;Region&#39; (if a column value is not NULL)
  elements for each employee: 


select XMLCONCAT (
  XMLELEMENT (&#39;FName&#39;, &quot;FirstName&quot;), XMLELEMENT (&#39;LName&#39;, &quot;LastName&quot;), 
  XMLELEMENT (&#39;Region&#39;, &quot;Region&quot;) )
from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;; 

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xml/sx_h_1/sx_h_1.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making a Forest of XML elements by XMLAGG() function</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:41 GMT</dcterms:created_at>
<sioc:description>XMLAGG() function</sioc:description>
<sioc:content>
XMLAGG() function. Overview

XMLAGG is aggregate function that produces a forest of XML elements from the given list of xml elements. 
   It concatenates the values returned from one column of multiple rows, unlike XMLCONCAT, 
   which concatenates the values returned from multiple columns in the same row.


Example 1
This example produces a forest of all &#39;Name&#39; of the employees having 
the title &#39;Sales Representative&#39; and places it into one top-level element:

  select XMLELEMENT (&#39;SalesRepresentatives&#39;,
    XMLAGG (XMLELEMENT (&#39;Name&#39;, &quot;FirstName&quot;, &#39; &#39;, &quot;LastName&quot;)) )
    from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;
    where &quot;Title&quot;=&#39;Sales Representative&#39;;

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
XMLAGG() function. Overview

XMLAGG is aggregate function that produces a forest of XML elements from the given list of xml elements. 
   It concatenates the values returned from one column of multiple rows, unlike XMLCONCAT, 
   which concatenates the values returned from multiple columns in the same row.


Example 1
This example produces a forest of all &#39;Name&#39; of the employees having 
the title &#39;Sales Representative&#39; and places it into one top-level element:

  select XMLELEMENT (&#39;SalesRepresentatives&#39;,
    XMLAGG (XMLELEMENT (&#39;Name&#39;, &quot;FirstName&quot;, &#39; &#39;, &quot;LastName&quot;)) )
    from &quot;Demo&quot;.&quot;demo&quot;.&quot;Employees&quot;
    where &quot;Title&quot;=&#39;Sales Representative&#39;;

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_1/xs_s_1.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making a freetext index</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:43 GMT</dcterms:created_at>
<sioc:description>Freetext index over XML data</sioc:description>
<sioc:content>
Preliminaries

  Virtuoso provides a compact and efficient free text indexing capability
   for text and XML data.  A free text index can be created on any character
   column, including wide and long data.
  If the column being indexed is XML data, this can be declared and enforced
   by the text index.  XML data will be indexed specially to support efficient
   XPATH predicate evaluation with the xcontains predicate.

create_freetext_index
	: CREATE TEXT [XML] INDEX ON q_table_name &#39;(&#39; column &#39;)&#39;
	[WITH KEY column]
	[NOT INSERT]  
	[CLUSTERED WITH &#39;(&#39; column_commalist &#39;)&#39; ] 
	[USING FUNCTION]
	[LANGUAGE STRING]
	;
The XML keyword specifies that the data is to be indexed as XML, hence
element names and attributes will be processed separately for use with the
XCONTAINS predicate.


Example

  The script inserts the files into the table.
  The data is stored as text, not as persistent XML.
  A VSP page shows the list of rows in the table.
  Each row has the following links:
   
     XML source - send the XML text as escaped text enclosed in an HTML &lt;pre&gt; tag.
     Raw XML - send the XML to the user agent, which must be able to render XML.
   

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Preliminaries

  Virtuoso provides a compact and efficient free text indexing capability
   for text and XML data.  A free text index can be created on any character
   column, including wide and long data.
  If the column being indexed is XML data, this can be declared and enforced
   by the text index.  XML data will be indexed specially to support efficient
   XPATH predicate evaluation with the xcontains predicate.

create_freetext_index
	: CREATE TEXT [XML] INDEX ON q_table_name &#39;(&#39; column &#39;)&#39;
	[WITH KEY column]
	[NOT INSERT]  
	[CLUSTERED WITH &#39;(&#39; column_commalist &#39;)&#39; ] 
	[USING FUNCTION]
	[LANGUAGE STRING]
	;
The XML keyword specifies that the data is to be indexed as XML, hence
element names and attributes will be processed separately for use with the
XCONTAINS predicate.


Example

  The script inserts the files into the table.
  The data is stored as text, not as persistent XML.
  A VSP page shows the list of rows in the table.
  Each row has the following links:
   
     XML source - send the XML text as escaped text enclosed in an HTML &lt;pre&gt; tag.
     Raw XML - send the XML to the user agent, which must be able to render XML.
   

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_2/xs_s_2.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Making a freetext index</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:43 GMT</dcterms:created_at>
<sioc:description>Freetext index over persistent XML data</sioc:description>
<sioc:content>
Example

  Take the table def from nwxml3.sql
  note the create text xml index ....
  The script inserts the files into the table.
  The data is stored as persistent XML.
  A VSP page shows the list of rows in the table.
  Each row has the following links:
    
      XML source - send the XML text as escaped text enclosed in an HTML &lt;pre&gt; tag.
      Raw XML - send the XML to the user agent. Must be able to render XML.
    

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example

  Take the table def from nwxml3.sql
  note the create text xml index ....
  The script inserts the files into the table.
  The data is stored as persistent XML.
  A VSP page shows the list of rows in the table.
  Each row has the following links:
    
      XML source - send the XML text as escaped text enclosed in an HTML &lt;pre&gt; tag.
      Raw XML - send the XML to the user agent. Must be able to render XML.
    

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_3/xs_s_3.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Search on freetext indexed data</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:43 GMT</dcterms:created_at>
<sioc:description>Search on freetext indexed data</sioc:description>
<sioc:content>
Example

  The example shows entity references using data from XS-S-1.
  The VSP page has a button for retrieving title elements from a selected document, where the
   title element contains a substring.
  The example uses the &#39;xpath-contains&#39; predicate.
  The VSP page has a second button with the same function using text-contains.
  This illustrates that xcontains + text-contains does not go through links, but that xpath_contains +
contains does.
  The example has a viewer for the source of each page so that the entity references can be seen.
  The page has some of the rows of the text table as persistent XML and others as text.
  The columns are declared as ANY in SQL. This illustrates the late binding dependent on representation.

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example

  The example shows entity references using data from XS-S-1.
  The VSP page has a button for retrieving title elements from a selected document, where the
   title element contains a substring.
  The example uses the &#39;xpath-contains&#39; predicate.
  The VSP page has a second button with the same function using text-contains.
  This illustrates that xcontains + text-contains does not go through links, but that xpath_contains +
contains does.
  The example has a viewer for the source of each page so that the entity references can be seen.
  The page has some of the rows of the text table as persistent XML and others as text.
  The columns are declared as ANY in SQL. This illustrates the late binding dependent on representation.

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_4/xs_s_4.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Storing of XSLT results</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:43 GMT</dcterms:created_at>
<sioc:description>Search on freetext indexed data using xcontains predicate</sioc:description>
<sioc:content>
Example

  The example shows entity references using data from XS-S-1.
  The VSP page has a button for retrieving title elements from a selected document, where the title
   element contains a substring.
  The example uses the &#39;xpath contains&#39; predicate.
  The VSP page has a second button with the same function using text-contains.
  This illustrates that xcontains + text-contains does not go through links, but that xpath_contains +
contains does.
  The example has a viewer for the source of each page so that the entity references can be seen.
  The page has some of the rows of the text table as persistent XML and others as text.
  The columns are declared as ANY in SQL. This illustrates the late binding dependent on representation.

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example

  The example shows entity references using data from XS-S-1.
  The VSP page has a button for retrieving title elements from a selected document, where the title
   element contains a substring.
  The example uses the &#39;xpath contains&#39; predicate.
  The VSP page has a second button with the same function using text-contains.
  This illustrates that xcontains + text-contains does not go through links, but that xpath_contains +
contains does.
  The example has a viewer for the source of each page so that the entity references can be seen.
  The page has some of the rows of the text table as persistent XML and others as text.
  The columns are declared as ANY in SQL. This illustrates the late binding dependent on representation.

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_5/xs_s_5.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>Storing of XSLT results</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:43 GMT</dcterms:created_at>
<sioc:description>Storing of XSLT results</sioc:description>
<sioc:content>
Example

  The sample shows storing of XSLT results into a table.
  The sample will take abstracts and other suitable subsections from the
  XS-S-1 data and insert them into another table.
  The VSP will show the source and result of the transformation side by side for any given document.
  The example uses data from XS-S-1, so it is important to set it first before trying this demo.

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example

  The sample shows storing of XSLT results into a table.
  The sample will take abstracts and other suitable subsections from the
  XS-S-1 data and insert them into another table.
  The VSP will show the source and result of the transformation side by side for any given document.
  The example uses data from XS-S-1, so it is important to set it first before trying this demo.

]]>
 </content:encoded>
</foaf:Document>
<foaf:Document rdf:about="http://demo.openlinksw.com/tutorial/xmlsql/xs_s_6/xs_s_6.vsp">
  <sioc:has_container rdf:resource="http://demo.openlinksw.com/tutorial/xml"/><dc:title>XPATH interpreter</dc:title>
<dcterms:created_at>Mon, 15 Sep 2008 12:19:43 GMT</dcterms:created_at>
<sioc:description>Applying the XPATH expression</sioc:description>
<sioc:content>
Example

  This example allows a selection from a document formed by
   XS-S-1, and applies a user-written XPATH expression to it.
   The page has selectable sample expressions including:
   
    Count of all titles
    Sum of the length of sect2 titles
    All first paragraphs of sect2&#39;s.
   
  The example uses xpath_eval, and iterates on the results if an array is produced.
  A single element of the XS-S-1 data is picked as the context node.
  A special button applies the operation on all rows with xpath_contains, showing the result set
   with doc name and result.
  This shows how one row can make multiple results with xpath_contains,
   but will return an array with xpath_eval.

</sioc:content>
 <content:encoded xmlns:content="http://purl.org/rss/1.0/modules/content/"><![CDATA[
Example

  This example allows a selection from a document formed by
   XS-S-1, and applies a user-written XPATH expression to it.
   The page has selectable sample expressions including:
   
    Count of all titles
    Sum of the length of sect2 titles
    All first paragraphs of sect2&#39;s.
   
  The example uses xpath_eval, and iterates on the results if an array is produced.
  A single element of the XS-S-1 data is