You can subscribe to this list here.
| 2004 |
Jan
|
Feb
|
Mar
(57) |
Apr
(103) |
May
(164) |
Jun
(139) |
Jul
(173) |
Aug
(196) |
Sep
(221) |
Oct
(333) |
Nov
(214) |
Dec
(88) |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 2005 |
Jan
(163) |
Feb
(165) |
Mar
(98) |
Apr
(93) |
May
(199) |
Jun
(118) |
Jul
(200) |
Aug
(212) |
Sep
(185) |
Oct
(297) |
Nov
(437) |
Dec
(272) |
| 2006 |
Jan
(542) |
Feb
(329) |
Mar
(267) |
Apr
(332) |
May
(267) |
Jun
(130) |
Jul
(161) |
Aug
(348) |
Sep
(166) |
Oct
(305) |
Nov
(173) |
Dec
(173) |
| 2007 |
Jan
(199) |
Feb
(118) |
Mar
(133) |
Apr
(200) |
May
(208) |
Jun
(146) |
Jul
(198) |
Aug
(146) |
Sep
(187) |
Oct
(182) |
Nov
(181) |
Dec
(83) |
| 2008 |
Jan
(252) |
Feb
(124) |
Mar
(124) |
Apr
(101) |
May
(143) |
Jun
(122) |
Jul
(129) |
Aug
(60) |
Sep
(80) |
Oct
(89) |
Nov
(54) |
Dec
(112) |
| 2009 |
Jan
(88) |
Feb
(145) |
Mar
(105) |
Apr
(164) |
May
(123) |
Jun
(154) |
Jul
(374) |
Aug
(341) |
Sep
(219) |
Oct
(137) |
Nov
(373) |
Dec
(240) |
| 2010 |
Jan
(197) |
Feb
(270) |
Mar
(253) |
Apr
(150) |
May
(102) |
Jun
(51) |
Jul
(300) |
Aug
(512) |
Sep
(254) |
Oct
(258) |
Nov
(288) |
Dec
(143) |
| 2011 |
Jan
(238) |
Feb
(179) |
Mar
(253) |
Apr
(332) |
May
(248) |
Jun
(255) |
Jul
(216) |
Aug
(282) |
Sep
(146) |
Oct
(77) |
Nov
(86) |
Dec
(69) |
| 2012 |
Jan
(172) |
Feb
(234) |
Mar
(229) |
Apr
(101) |
May
(212) |
Jun
(267) |
Jul
(129) |
Aug
(210) |
Sep
(239) |
Oct
(271) |
Nov
(368) |
Dec
(220) |
| 2013 |
Jan
(179) |
Feb
(155) |
Mar
(59) |
Apr
(47) |
May
(99) |
Jun
(158) |
Jul
(185) |
Aug
(16) |
Sep
(16) |
Oct
(7) |
Nov
(20) |
Dec
(12) |
| 2014 |
Jan
(21) |
Feb
(17) |
Mar
(18) |
Apr
(13) |
May
(27) |
Jun
(15) |
Jul
(19) |
Aug
(22) |
Sep
(30) |
Oct
(16) |
Nov
(19) |
Dec
(16) |
| 2015 |
Jan
(14) |
Feb
(24) |
Mar
(33) |
Apr
(41) |
May
(14) |
Jun
(80) |
Jul
(53) |
Aug
(8) |
Sep
(7) |
Oct
(15) |
Nov
(13) |
Dec
(2) |
| 2016 |
Jan
(22) |
Feb
(12) |
Mar
(30) |
Apr
(6) |
May
(33) |
Jun
(16) |
Jul
(8) |
Aug
(20) |
Sep
(12) |
Oct
(18) |
Nov
(12) |
Dec
(11) |
| 2017 |
Jan
(24) |
Feb
(26) |
Mar
(47) |
Apr
(23) |
May
(19) |
Jun
(14) |
Jul
(28) |
Aug
(30) |
Sep
(17) |
Oct
|
Nov
|
Dec
|
| 2019 |
Jan
(1) |
Feb
(73) |
Mar
(90) |
Apr
(42) |
May
(116) |
Jun
(90) |
Jul
(127) |
Aug
(103) |
Sep
(56) |
Oct
(42) |
Nov
(95) |
Dec
(58) |
| 2020 |
Jan
(102) |
Feb
(31) |
Mar
(93) |
Apr
(60) |
May
(57) |
Jun
(45) |
Jul
(29) |
Aug
(32) |
Sep
(44) |
Oct
(86) |
Nov
(51) |
Dec
(71) |
| 2021 |
Jan
(44) |
Feb
(25) |
Mar
(78) |
Apr
(130) |
May
(64) |
Jun
(74) |
Jul
(21) |
Aug
(64) |
Sep
(40) |
Oct
(43) |
Nov
(21) |
Dec
(99) |
| 2022 |
Jan
(154) |
Feb
(64) |
Mar
(45) |
Apr
(95) |
May
(62) |
Jun
(48) |
Jul
(73) |
Aug
(37) |
Sep
(71) |
Oct
(27) |
Nov
(40) |
Dec
(65) |
| 2023 |
Jan
(89) |
Feb
(130) |
Mar
(124) |
Apr
(50) |
May
(93) |
Jun
(46) |
Jul
(45) |
Aug
(68) |
Sep
(62) |
Oct
(71) |
Nov
(108) |
Dec
(82) |
| 2024 |
Jan
(53) |
Feb
(76) |
Mar
(64) |
Apr
(75) |
May
(36) |
Jun
(54) |
Jul
(98) |
Aug
(137) |
Sep
(58) |
Oct
(177) |
Nov
(84) |
Dec
(52) |
| 2025 |
Jan
(70) |
Feb
(53) |
Mar
(72) |
Apr
(47) |
May
(88) |
Jun
(49) |
Jul
(86) |
Aug
(51) |
Sep
(65) |
Oct
(91) |
Nov
(18) |
Dec
|
| S | M | T | W | T | F | S |
|---|---|---|---|---|---|---|
|
|
|
|
|
1
(3) |
2
(10) |
3
(2) |
|
4
|
5
(1) |
6
(1) |
7
(2) |
8
(7) |
9
(3) |
10
(6) |
|
11
(7) |
12
(10) |
13
(9) |
14
(2) |
15
|
16
(2) |
17
|
|
18
|
19
|
20
|
21
(7) |
22
(2) |
23
(1) |
24
(13) |
|
25
(9) |
26
(1) |
27
(8) |
28
(6) |
29
(9) |
30
(9) |
|
|
From: <di...@us...> - 2006-06-30 22:10:47
|
Revision: 3769 Author: dizzzz Date: 2006-06-30 15:10:34 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3769&view=rev Log Message: ----------- Added link to sfnet / Patches. Better location , we should not loose contributed patches....... Modified Paths: -------------- trunk/eXist-1.0/webapp/acronyms/sidebar.xml trunk/eXist-1.0/webapp/apps/sidebar.xml trunk/eXist-1.0/webapp/library/sidebar.xml trunk/eXist-1.0/webapp/sidebar.xml trunk/eXist-1.0/webapp/xquery/sidebar.xml Modified: trunk/eXist-1.0/webapp/acronyms/sidebar.xml =================================================================== --- trunk/eXist-1.0/webapp/acronyms/sidebar.xml 2006-06-30 21:35:00 UTC (rev 3768) +++ trunk/eXist-1.0/webapp/acronyms/sidebar.xml 2006-06-30 22:10:34 UTC (rev 3769) @@ -58,13 +58,14 @@ <link href="../api/index.html">Javadocs</link> </item> <item> - <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691"> - Bug Tracker - </link> + <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691">Bug Tracker</link> </item> <item> - <link href="http://sourceforge.net/SVN/?group_id=17691">SVN</link> + <link href="http://sourceforge.net/SVN/?group_id=17691">Subversion</link> </item> + <item> + <link href="http://sourceforge.net/tracker/?atid=317691&group_id=17691&func=browse">Patches</link> + </item> </group> <group name="Administration"> <item> Modified: trunk/eXist-1.0/webapp/apps/sidebar.xml =================================================================== --- trunk/eXist-1.0/webapp/apps/sidebar.xml 2006-06-30 21:35:00 UTC (rev 3768) +++ trunk/eXist-1.0/webapp/apps/sidebar.xml 2006-06-30 22:10:34 UTC (rev 3769) @@ -64,13 +64,14 @@ <link href="../api/index.html">Javadocs</link> </item> <item> - <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691"> - Bug Tracker - </link> + <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691">Bug Tracker</link> </item> <item> - <link href="http://sourceforge.net/svn/?group_id=17691">SVN</link> + <link href="http://sourceforge.net/svn/?group_id=17691">Subversion</link> </item> + <item> + <link href="http://sourceforge.net/tracker/?atid=317691&group_id=17691&func=browse">Patches</link> + </item> </group> <group name="Administration"> <item> Modified: trunk/eXist-1.0/webapp/library/sidebar.xml =================================================================== --- trunk/eXist-1.0/webapp/library/sidebar.xml 2006-06-30 21:35:00 UTC (rev 3768) +++ trunk/eXist-1.0/webapp/library/sidebar.xml 2006-06-30 22:10:34 UTC (rev 3769) @@ -61,13 +61,14 @@ <link href="../api/index.html">Javadocs</link> </item> <item> - <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691"> - Bug Tracker - </link> + <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691">Bug Tracker</link> </item> <item> - <link href="http://sourceforge.net/svn/?group_id=17691">SVN</link> + <link href="http://sourceforge.net/svn/?group_id=17691">Subversion</link> </item> + <item> + <link href="http://sourceforge.net/tracker/?atid=317691&group_id=17691&func=browse">Patches</link> + </item> </group> <group name="Administration"> <item> Modified: trunk/eXist-1.0/webapp/sidebar.xml =================================================================== --- trunk/eXist-1.0/webapp/sidebar.xml 2006-06-30 21:35:00 UTC (rev 3768) +++ trunk/eXist-1.0/webapp/sidebar.xml 2006-06-30 22:10:34 UTC (rev 3769) @@ -74,13 +74,14 @@ <link href="http://wiki.exist-db.org/space/Change+Log">ChangeLog</link> </item> <item> - <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691"> - Bug Tracker - </link> + <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691">Bug Tracker</link> </item> <item> - <link href="http://sourceforge.net/svn/?group_id=17691">SVN</link> + <link href="http://sourceforge.net/svn/?group_id=17691">Subversion</link> </item> + <item> + <link href="http://sourceforge.net/tracker/?atid=317691&group_id=17691&func=browse">Patches</link> + </item> </group> <group name="Administration"> <item> Modified: trunk/eXist-1.0/webapp/xquery/sidebar.xml =================================================================== --- trunk/eXist-1.0/webapp/xquery/sidebar.xml 2006-06-30 21:35:00 UTC (rev 3768) +++ trunk/eXist-1.0/webapp/xquery/sidebar.xml 2006-06-30 22:10:34 UTC (rev 3769) @@ -64,13 +64,14 @@ <link href="../api/index.html">Javadocs</link> </item> <item> - <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691"> - Bug Tracker - </link> + <link href="http://sourceforge.net/tracker/?group_id=17691&atid=117691">Bug Tracker</link> </item> <item> - <link href="http://sourceforge.net/svn/?group_id=17691">SVN</link> + <link href="http://sourceforge.net/svn/?group_id=17691">Subversion</link> </item> + <item> + <link href="http://sourceforge.net/tracker/?atid=317691&group_id=17691&func=browse">Patches</link> + </item> </group> <group name="Administration"> <item> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-30 21:35:06
|
Revision: 3768 Author: wolfgang_m Date: 2006-06-30 14:35:00 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3768&view=rev Log Message: ----------- Deleted some old documentation files, which were no longer linked from other pages Removed Paths: ------------- trunk/eXist-1.0/webapp/test.jsp Deleted: trunk/eXist-1.0/webapp/test.jsp =================================================================== --- trunk/eXist-1.0/webapp/test.jsp 2006-06-30 21:34:08 UTC (rev 3767) +++ trunk/eXist-1.0/webapp/test.jsp 2006-06-30 21:35:00 UTC (rev 3768) @@ -1,11 +0,0 @@ -<%@ taglib uri="http://exist-db.org/exist" prefix="e" %> - -<html> - <head> - <title>JSP Test</title> - </head> - <body> - <e:collection var="c" uri="xmldb:exist:///db"/> - <p>Collection: <%= c.getName() %>.</p> - </body> -</html> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-30 21:34:13
|
Revision: 3767 Author: wolfgang_m Date: 2006-06-30 14:34:08 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3767&view=rev Log Message: ----------- Deleted some old documentation files, which were no longer linked from other pages Modified Paths: -------------- trunk/eXist-1.0/webapp/sitemap.xmap Removed Paths: ------------- trunk/eXist-1.0/webapp/login.xml Deleted: trunk/eXist-1.0/webapp/login.xml =================================================================== --- trunk/eXist-1.0/webapp/login.xml 2006-06-30 21:30:52 UTC (rev 3766) +++ trunk/eXist-1.0/webapp/login.xml 2006-06-30 21:34:08 UTC (rev 3767) @@ -1,45 +0,0 @@ -<?xml version="1.0" encoding="ISO-8859-1"?> - -<!-- Author: Wolfgang Meier "me...@if..." --> -<document xmlns:xi="http://www.w3.org/2001/XInclude"> - <!-- include header --> - <xi:include href="header.xml"/> - <xi:include href="sidebar.xml"/> - - <body> - - <section title="Login"> - <p>This resource is protected. Please login. If you have not - set up any users, login as "admin" and leave the - password field empty. For testing purposes, you may also log in - as "guest" with password "guest".</p> - - <form action="xadmin.xsp" method="POST" id="login"> - <table border="0"> - <tr> - <td width="30%"> - User: - </td> - <td width="70%"> - <input type="text" name="user"/> - </td> - </tr> - <tr> - <td width="30%"> - Password: - </td> - <td width="70%"> - <input type="password" name="password"/> - </td> - </tr> - <tr> - <td colspan="2" align="right"> - <input type="submit"/> - </td> - </tr> - </table> - </form> - </section> - </body> -</document> - Modified: trunk/eXist-1.0/webapp/sitemap.xmap =================================================================== --- trunk/eXist-1.0/webapp/sitemap.xmap 2006-06-30 21:30:52 UTC (rev 3766) +++ trunk/eXist-1.0/webapp/sitemap.xmap 2006-06-30 21:34:08 UTC (rev 3767) @@ -74,6 +74,11 @@ <map:generator label="content,data" name="exist-cluster" src="org.exist.cluster.cocoon.ClusterGenerator"/> <map:generator label="content,data" name="cluster-info" src="org.exist.cluster.cocoon.ClusterInfoGenerator"/> + + <map:generator name="xquery" + logger="sitemap.generator.xquery" + src="org.exist.cocoon.XQueryGenerator"> + </map:generator> </map:generators> <!--+ @@ -773,26 +778,6 @@ <map:transform type="encodeURL"/> <map:serialize type="html"/> </map:match> - - <!-- this is a protected resource: it uses the xmldb-login action - to authenticate a user against the database --> - <map:match pattern="xadmin.xsp"> - <map:act src="xmldb:exist:///db" type="xmldb-login"> - <map:generate src="xadmin.xsp" type="serverpages"/> - <map:transform type="xinclude"> - <map:parameter name="use-request-parameters" value="true"/> - </map:transform> - <map:transform src="stylesheets/doc2html-2.xsl"> - <map:parameter name="use-request-parameters" value="true"/> - </map:transform> - <map:serialize encoding="UTF-8" type="html"/> - </map:act> - <!-- no session found: display login form --> - <map:generate src="login.xml"/> - <map:transform type="xinclude"/> - <map:transform src="stylesheets/doc2html-2.xsl"/> - <map:serialize type="html"/> - </map:match> <map:match pattern="request.xml"> <map:generate type="request"> @@ -817,6 +802,13 @@ <map:serialize type="html"/> </map:match> + <map:match pattern="docquery.xq"> + <map:generate src="docquery.xq" type="xquery"/> + <map:transform type="cinclude"/> + <map:transform src="stylesheets/db2html.xsl"/> + <map:serialize type="html"/> + </map:match> + <map:match pattern="**.xml"> <map:generate src="{1}.xml"/> <map:transform type="cinclude"/> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-30 21:31:10
|
Revision: 3766 Author: wolfgang_m Date: 2006-06-30 14:30:52 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3766&view=rev Log Message: ----------- Added proper title fields to documents. Modified Paths: -------------- trunk/eXist-1.0/webapp/ant-tasks.xml trunk/eXist-1.0/webapp/client.xml trunk/eXist-1.0/webapp/cluster.xml trunk/eXist-1.0/webapp/configuration.xml trunk/eXist-1.0/webapp/credits.xml trunk/eXist-1.0/webapp/deployment.xml trunk/eXist-1.0/webapp/devguide.xml trunk/eXist-1.0/webapp/journal.xml trunk/eXist-1.0/webapp/ldap-security.xml trunk/eXist-1.0/webapp/stylesheets/doc2html-2.xsl trunk/eXist-1.0/webapp/updating.xml Modified: trunk/eXist-1.0/webapp/ant-tasks.xml =================================================================== --- trunk/eXist-1.0/webapp/ant-tasks.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/ant-tasks.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -3,8 +3,9 @@ <book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> <graphic fileref="logo.jpg"/> - - <title>Open Source Native XML Database</title> + + <productname>Open Source Native XML Database</productname> + <title>Ant Tasks</title> <author> <firstname>Wolfgang M.</firstname> <surname>Meier</surname> Modified: trunk/eXist-1.0/webapp/client.xml =================================================================== --- trunk/eXist-1.0/webapp/client.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/client.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -1,23 +1,24 @@ <?xml version="1.0" encoding="UTF-8"?> -<?xml-stylesheet href="file://localhost/home/wolf/Java/Morphon_XML-Editor_3.1/Examples/docbook/docbook.css" type="text/css"?> -<book xmlns:ci="http://apache.org/cocoon/include/1.0" - xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation="file://localhost/home/wolf/Java/Morphon_XML-Editor_3.1/Examples/docbook/xsd/docbook.xsd"> +<book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>Java Admin Client</title> <author> <firstname>Wolfgang M.</firstname> <surname>Meier</surname> <affiliation> - <address format="linespecific"> <email>wol...@ex...</email> </address> + <address format="linespecific"><email>wolfgang at exist-db.org</email></address> </affiliation> </author> </bookinfo> + <ci:include src="sidebar.xml"/> + <chapter id="ch01"> <title>Java Client</title> + <para>eXist offers an integrated command-line and gui client in class <classname>org.exist.client.InteractiveClient</classname>. The client is entirely based on the XML:DB API and provides commands for most database related tasks, like creating and Modified: trunk/eXist-1.0/webapp/cluster.xml =================================================================== --- trunk/eXist-1.0/webapp/cluster.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/cluster.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -6,6 +6,7 @@ <book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> <graphic fileref="logo.jpg"/> + <productname>Open Source Native XML Database</productname> <title>Cluster configuration</title> <author> <firstname>Piranha</firstname> Modified: trunk/eXist-1.0/webapp/configuration.xml =================================================================== --- trunk/eXist-1.0/webapp/configuration.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/configuration.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -3,17 +3,16 @@ <bookinfo> <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>Server Configuration</title> <author> <firstname>Wolfgang M.</firstname> - <surname>Meier</surname> - <affiliation> <address format="linespecific"> - <email>wol...@ex...</email> - </address> + <email>wolfgang at exist-db.org</email> + </address> </affiliation> </author> Modified: trunk/eXist-1.0/webapp/credits.xml =================================================================== --- trunk/eXist-1.0/webapp/credits.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/credits.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -5,7 +5,8 @@ <bookinfo> <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>Credits</title> <author> <firstname>Wolfgang M.</firstname> <surname>Meier</surname> Modified: trunk/eXist-1.0/webapp/deployment.xml =================================================================== --- trunk/eXist-1.0/webapp/deployment.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/deployment.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -5,13 +5,14 @@ <book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>Server Deployment</title> <author> <firstname>Wolfgang M.</firstname> <surname>Meier</surname> <affiliation> <address format="linespecific"> - <email>wol...@ex...</email> + <email>wolfgang at exist-db.org</email> </address> </affiliation> </author> Modified: trunk/eXist-1.0/webapp/devguide.xml =================================================================== --- trunk/eXist-1.0/webapp/devguide.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/devguide.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -2,13 +2,14 @@ <book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>Developer's Guide</title> <author> <firstname>Wolfgang M.</firstname> <surname>Meier</surname> <affiliation> <address format="linespecific"> - <email>me...@if...</email> + <email>wolfgang at exist-db.org</email> </address> </affiliation> </author> Modified: trunk/eXist-1.0/webapp/journal.xml =================================================================== --- trunk/eXist-1.0/webapp/journal.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/journal.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -2,6 +2,7 @@ <book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> <graphic fileref="logo.jpg"/> + <productname>Open Source Native XML Database</productname> <title>Cluster Journal description</title> <author> <firstname>Piranha</firstname> Modified: trunk/eXist-1.0/webapp/ldap-security.xml =================================================================== --- trunk/eXist-1.0/webapp/ldap-security.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/ldap-security.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -3,7 +3,8 @@ <bookinfo> <graphic fileref="logo.jpg" /> - <title>Open Source Native XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>LDAP Security Manager</title> <author> <surname>Milowski</surname> Modified: trunk/eXist-1.0/webapp/stylesheets/doc2html-2.xsl =================================================================== --- trunk/eXist-1.0/webapp/stylesheets/doc2html-2.xsl 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/stylesheets/doc2html-2.xsl 2006-06-30 21:30:52 UTC (rev 3766) @@ -55,6 +55,11 @@ Nifty("div.block ul", "bottom"); } </script> + <style type="text/css"> + #xmlprague { position: absolute; top: 50px; right: 50px; } + #xmlprague div { text-align: center; margin-bottom: 8px; color: #666;} + #xmlprague a { color: #333; } + </style> </head> <body bgcolor="#FFFFFF"> @@ -66,6 +71,12 @@ <h1><xsl:value-of select="header/title"/></h1> </div> </div> + <div id="xmlprague"> + <div>Join us: <a href="http://wiki.exist-db.org/space/start/2005-12-22/1#First_eXist_Workshop_in_conjunction_with_XML_Prague,_June_17/18">eXist Workshop</a> at</div> + <a href="http://xmlprague.cz"> + <img src="resources/xmlprague2006_250x60.png" border="0"/> + </a> + </div> <xsl:apply-templates select="sidebar:sidebar"/> <xsl:apply-templates select="newsblock"/> <xsl:apply-templates select="body"/> Modified: trunk/eXist-1.0/webapp/updating.xml =================================================================== --- trunk/eXist-1.0/webapp/updating.xml 2006-06-30 21:26:43 UTC (rev 3765) +++ trunk/eXist-1.0/webapp/updating.xml 2006-06-30 21:30:52 UTC (rev 3766) @@ -3,7 +3,8 @@ <bookinfo> <graphic fileref="logo.jpg" /> - <title>Open Source XML Database</title> + <productname>Open Source Native XML Database</productname> + <title>Updating from Older eXist Versions</title> <author> <firstname>Wolfgang M.</firstname> <surname>Meier</surname> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-30 21:26:51
|
Revision: 3765 Author: wolfgang_m Date: 2006-06-30 14:26:43 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3765&view=rev Log Message: ----------- Deleted some old documentation files, which were no longer linked from other pages Removed Paths: ------------- trunk/eXist-1.0/webapp/design.xml trunk/eXist-1.0/webapp/donations.xml trunk/eXist-1.0/webapp/howtos-2.xml trunk/eXist-1.0/webapp/howtos.xml trunk/eXist-1.0/webapp/performance.xml trunk/eXist-1.0/webapp/xadmin.xsp Deleted: trunk/eXist-1.0/webapp/design.xml =================================================================== --- trunk/eXist-1.0/webapp/design.xml 2006-06-30 21:16:18 UTC (rev 3764) +++ trunk/eXist-1.0/webapp/design.xml 2006-06-30 21:26:43 UTC (rev 3765) @@ -1,195 +0,0 @@ -<book xmlns:ci="http://apache.org/cocoon/include/1.0"> - <ci:include src="sidebar.xml"/> - <chapter id="ch01"> - <title>Design of eXist</title> - <para>This is a documentation about the internals and implementation of eXist.</para> - <section id="sectIndexing"> - <title>Nodes indexing</title> - <section> - <title>Algorithm</title> - <para> - -A reference article is the following : - <p> - <i>Wolfgang Meier</i>. - <ulink url="http://exist-db.org/webdb.pdf">eXist: An Open Source Native XML Database</ulink> - </p> - -There is a basic problem since a long time and I basically know how -to solve it. I just lack the time to figure out the one missing algorithm. -Version 1.0b1 is at least able to warn users when it fails to index a document. - </para> - - <para> -Let me explain the basic problem: eXist uses a numbering scheme to address -nodes in the document tree. This has many benefits compared to other -approaches. Most important, eXist can resolve node relationships by just -looking at the numerical identifiers. This makes query processing fast. -Assume you have a document like this: - </para> - -<pre> -<![CDATA[ -<section> - <title>Title</title> - <para><b>bold text</bold></para> -</section> - -Internally, eXist assigns the following ids to every node: - -1 <section> -| | -2 <title> 3 <para> -| | -4 "Title" 5 <b> -| | -6 7 "bold text" -]]> -</pre> - - <para> -The assigned ids have some special properties: you can easily determine the id of -the parent node, the first child node or any siblings by just looking at the -id. This is what eXist's query engine does to resolve path steps. Obviously, -looking at numeric identifiers is much faster than actually loading the DOM -nodes. - </para> - - <para> -As you can see, node 6 is a "virtual" node. It simply has to be inserted to -balance the tree (eXist just balances the nodes in every level of the tree, -not the tree as a whole). - </para> - - <para> -As is obvious, there will always be some point where the balancing fails. The -problem does not arise as long as the data is more or less regularily -structured. However, if too many "virtual" nodes have to be inserted at -adjacent levels of the tree, the assigned numbers will explode. For example, -this happens if you have a large number of simple elements below the root -node, but also some deeply nested nodes between them (in this case, the -solution is simple: split the document below the root node into several -pieces). - </para> - - <para> -What possibilities do we have to solve this? - -<ol> -<li> -Choose a different numbering scheme - -Replacing the numbering scheme wouldn't be too difficult. Several schemes have -been proposed in the literature. However, they all have drawbacks in one way -or another. In particular, most schemes can only be applied to some types of -XPath operations, but not to all, so we would have to store much more -information with the DOM to support the missing operations. -</li> - -<li> -Throw the numbering scheme overboard - -There are other possible approaches to XML indexing. For example, some systems -use a limited index: they just track if a node does occur in a document or -not (and possibly its location within storage). This way, they can limit the -number of documents to be searched. Then a traditional top-down tree -traversal is used to search the documents in question. These systems are fast -on a large number of rather small documents, but performance may get bad for -larger docs or ancestor-descendant queries, which involve traversing a large -portion of the node tree. -</li> - -<li> -Automatically split documents in a way transparent to the user - -This alternative is my favourite one. Whenever the indexer recognizes that the -numbering scheme may get at its limits, the document is automatically split -into several smaller parts. This works transparent to the user. He just sees -one document. -</li> -</ol> - </para> - - <para> -Searching through a split document is cheap: whenever the query engine reaches -the root node of a split document, it replaces the node id of the root node -with the original id of the node in the main document, and continues to -process the query from there. - </para> - - <para> -So, the only question remaining is to find an algorithm to correctly determine -the split positions in the original document to get an optimal distribution -of nodes. - </para> -<hr/> - <para> -I now have a -possible solution on paper. It doesn't require too many modifications to the -storage system (it extends node ids to be two-dimensional to support -sub-document partitions), so a solution is in sight at least. - </para> - </section> - <section> - <title>Nodes indexing implementation</title> -Here is an UML-like diagram (made with BlueJ) of org/exist/storage package. -NativeBroker is the main class here, a facade to the rest of the implementation. - -The actual indexing occurs in class NativeElementIndex. -<br /> -<img alt="storage diagram" border="0" src="resources/storage-diagram.jpg" /> - - <para> -The storage package depends on the store package for the actual storage files. -<br /> -<img alt="storage diagram" border="0" src="resources/storage.store-diagram.jpg" /> - </para> - </section> - </section> - - <section> - <title>DOM processing</title> - <section> - <title>Algorithm</title> - <para> -Again, the reference article is the following : - <p> - <i>Wolfgang Meier</i>. - <ulink url="http://exist-db.org/webdb.pdf">eXist: An Open Source Native XML Database</ulink> - </p> - </para> - </section> - <section> - <title>DOM implementation</title> -Here is an UML-like diagram (made with BlueJ) of org/exist/dom package. -ElementImpl and AbstractNodeSet are the main classes. -<img alt="DOM diagram" border="0" src="resources/dom-diagram.jpg" /> - </section> - </section> - - <section> - <title>XPath processing</title> - <section> - <title>Algorithm</title> - <para> -Again, the reference article is the following : - <p> - <i>Wolfgang Meier</i>. - <ulink url="http://exist-db.org/webdb.pdf">eXist: An Open Source Native XML Database</ulink> - </p> - </para> - </section> - <section> - <title>XPath implementation</title> -Here is an UML-like diagram (made with BlueJ) of org/exist/xquery package. -It is made for the largest part of the hierarchy of AbstractExpression . - -The Ancestor-Descendant Join algorithm is described in W. Meier's article. It is implemented in ???. -<img alt="DOM diagram" border="0" src="resources/xquery-diagram.jpg" /> -<br /> -Value is a sub-package of xquery. -It is made for the largest part of the hierarchies of AbstractSequence, ComputableValue, and Atomic Value . - </section> - </section> - </chapter> -</book> Deleted: trunk/eXist-1.0/webapp/donations.xml =================================================================== --- trunk/eXist-1.0/webapp/donations.xml 2006-06-30 21:16:18 UTC (rev 3764) +++ trunk/eXist-1.0/webapp/donations.xml 2006-06-30 21:26:43 UTC (rev 3765) @@ -1,92 +0,0 @@ -<?xml version="1.0"?> -<!--<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbookx.dtd">--> - -<book xmlns:ci="http://apache.org/cocoon/include/1.0"> - - <bookinfo> - <graphic fileref="logo.jpg"/> - <title>Open Source XML Database</title> - <author> - <firstname>Wolfgang M.</firstname> - <surname>Meier</surname> - <affiliation> - <address format="linespecific"> - <email>wol...@ex...</email> - </address> - </affiliation> - </author> - </bookinfo> - - <ci:include src="sidebar.xml"/> - - <chapter> - <title>Support eXist</title> - - <section> - <title>Why support?</title> - - <para>eXist started as a spare time project in 2001. Only a small part of the work on eXist - has been covered by different academic projects in which I (Wolfgang) have been involved. The rest - is spare time. eXist itself is not directly supported by academic funding. It is real - free software in the sense that it depends on the commitment of volunteers.</para> - </section> - - <section> - <title>How to support?</title> - - <variablelist> - <varlistentry> - <term>Contribute to the project</term> - <listitem> - <para>First of all, the best way to support eXist is to contribute code, bug-fixes, - test cases, documentation and the like. If you're not a programmer, there are - other ways to support the team: e.g. by writing tutorials or howtos, - or simply by spreading the news about eXist.</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Make a Donation</term> - <listitem> - <para>Donate any amount you find appropriate using - <a href="https://www.paypal.com/affil/pal=sbhati%40web.de" target="_blank">PayPal</a> - or <a href="http://order.kagi.com/cgi-bin/store.cgi?storeID=28U">Kagi</a>. Donations help me as maintainer and main developer of eXist to keep the - project alive, to fix - bugs and implement new features.</para> - <para>Making a donation also assumes direct, higher priority support by the - maintainer of the software.</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Sponsor the developments you need</term> - <listitem> - <para>I'm willing to offer the implementation of extra features and modifications, - if my time frame permits it. Just contact - <a href="mailto:wol...@ex...">me</a> for a possible arrangement. - The results of such work should go back into eXist.</para> - </listitem> - </varlistentry> - <varlistentry> - <term>Other ways</term> - <listitem> - <para>If none of the alternatives described is appropriate for you, don't hesitate to - contact <a href="mailto:wol...@ex...">me</a>. - We can surely find another arrangement.</para> - </listitem> - </varlistentry> - </variablelist> - - <itemizedlist> - <listitem> - <para>Donate using - <a href="https://www.paypal.com/affil/pal=sbhati%40web.de" target="_blank">PayPal</a> - (low fees, but requires registration) - </para> - </listitem> - <listitem> - <para>Donate using <a href="http://order.kagi.com/cgi-bin/store.cgi?storeID=28U">Kagi</a> (no registration)</para> - </listitem> - </itemizedlist> - </section> - </chapter> -</book> - Deleted: trunk/eXist-1.0/webapp/howtos-2.xml =================================================================== --- trunk/eXist-1.0/webapp/howtos-2.xml 2006-06-30 21:16:18 UTC (rev 3764) +++ trunk/eXist-1.0/webapp/howtos-2.xml 2006-06-30 21:26:43 UTC (rev 3765) @@ -1,432 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!DOCTYPE book SYSTEM "file:/Users/byoung/Documents/dtd/docbook-xml-4.2/docbookx.dtd"> -<book xmlns:ci="http://apache.org/cocoon/include/1.0"> - <bookinfo> - <graphic fileref="logo.jpg"/> - <title>Open Source XML Database</title> - <author> - <firstname>Wolfgang M.</firstname> - <surname>Meier</surname> - <affiliation> - <address format="linespecific"> - <email>me...@if...</email> - </address> - </affiliation> - </author> - </bookinfo> - - <ci:include src="sidebar.xml"/> - - <chapter> - <chapterinfo revision=""> - <author> - <firstname>Wolfgang M.</firstname> - <surname>Meier</surname> - <affiliation> - <address format="linespecific"> - <email>me...@if...</email> - </address> - </affiliation> - </author> - <author> - <firstname>Benjamin</firstname> - <surname>Young</surname> - <affiliation> - <address format="linespecific"> - <email>by...@bi...</email> - </address> - </affiliation> - </author> - </chapterinfo> - <title>How-Tos</title> - - <section> - <title>Integrating eXist into an existing Cocoon 2.0.4 installation</title> - - <para> eXist comes with its own pre-installed Cocoon. However, integrating eXist into an already - running Cocoon is not very difficult. Follow the steps bellow to integrate eXist 0.9 into an existing - Cocoon 2.0.4 web application.</para> - - <para>The following paragraphs assume that you have already set up a web application based on Cocoon.</para> - - <para>First create a directory named data in the WEB-INF folder of your Cocoon based web application. - This is where the database files will be created by eXist.</para> - - <para>Next, copy the <filename>conf.xml</filename> configuration file from eXist into the <filename>WEB-INF</filename> folder of your Cocoon application. - Additionally, you have to copy a number of jar-files from eXist's <filename>WEB-INF/lib</filename> folder into the <filename>WEB-INF/lib</filename> folder - of your Cocoon application:</para> - - <itemizedlist> - <listitem><para>exist.jar</para></listitem> - <listitem><para>antlr.jar</para></listitem> - <listitem><para>axis.jar</para></listitem> - <listitem><para>clutil.jar</para></listitem> - <listitem><para>commons-collections-2.1.jar</para></listitem> - <listitem><para>commons-discovery.jar</para></listitem> - <listitem><para>commons-httpclient-20020423.jar</para></listitem> - <listitem><para>commons-jxpath-1.0.jar</para></listitem> - <listitem><para>commons-logging-1.0.jar</para></listitem> - <listitem><para>jakarta-oro-2.0.6.jar</para></listitem> - <listitem><para>jaxrpc.jar</para></listitem> - <listitem><para>libreadline-java.jar</para></listitem> - <listitem><para>log4j.jar</para></listitem> - <listitem><para>saaj.jar</para></listitem> - <listitem><para>trove.jar</para></listitem> - <listitem><para>tt-bytecode.jar</para></listitem> - <listitem><para>wsdl4j.jar</para></listitem> - <listitem><para>xmldb.jar</para></listitem> - <listitem><para>xmlrpc-1.1.jar</para></listitem> - </itemizedlist> - - <para>If you want WebDAV access you'll also need:</para> - - <itemizedlist> - <listitem><para>webapp/WEB-INF/lib/dom4j.jar</para></listitem> - <listitem><para>webapp/WEB-INF/lib/xincon.jar</para></listitem> - <listitem><para>webapp/WEB-INF/lib/catalina-util.jar</para></listitem> - </itemizedlist> - - <para>Next step: edit the <filename>web.xml</filename> file in your <filename>WEB-INF</filename> directory. - From the <filename>web.xml</filename> file that comes with eXist copy the servlet definitions for the - RpcServlet, DatabaseAdminServlet, AxisServlet, AdminServlet and (optionally) the xincon servlet into your - own <filename>web.xml</filename>. Additionally, copy all the servlet-mapping sections for these servlets. - Please note that order is important in the <filename>web.xml</filename> file: the block with <servlet> sections - should always precede the <servlet-mapping> sections.</para> - - <para>An example <filename>web.xml</filename> file is shown below:</para> - - <example> - <title>web.xml example (Cocoon version 2.0.4 and eXist 0.9)</title> - - <screen> - <![CDATA[ -<?xml version="1.0" encoding="ISO-8859-1"?> - -<!-- - This is the web-app configurations that allow Cocoon to work under - Apache Tomcat. Please, follow the installation section of the - documentation for more information about installing Cocoon on Tomcat ---> - -<!DOCTYPE web-app - PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" - "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> - -<web-app> - <display-name>eXist Server</display-name> - <description>eXist Server Setup</description> - - <!-- Servlets required by eXist --> - - <!-- RpcServlet provides XML-RPC access to eXist --> - <servlet> - <servlet-name>org.exist.xmlrpc.RpcServlet</servlet-name> - <servlet-class>org.exist.xmlrpc.RpcServlet</servlet-class> - </servlet> - - <!-- DatabaseAdminServlet: used to start/stop the database. --> - <servlet> - <servlet-name>org.exist.DatabaseAdminServlet</servlet-name> - <servlet-class>org.exist.DatabaseAdminServlet</servlet-class> - - <!-- where to find eXist's configuration file - relative to basedir - --> - <init-param> - <param-name>configuration</param-name> - <param-value>conf.xml</param-value> - </init-param> - - <!-- eXist's home directory. All file names in - the configuration file will be relative to this - directory. - --> - <init-param> - <param-name>basedir</param-name> - <param-value>WEB-INF/</param-value> - </init-param> - - <init-param> - <param-name>start</param-name> - <param-value>true</param-value> - </init-param> - - <load-on-startup>2</load-on-startup> - - </servlet> - - <!-- configure the Axis servlet. Axis provides eXist's - web-services via SOAP --> - <servlet> - <servlet-name>AxisServlet</servlet-name> - <display-name>Apache-Axis Servlet</display-name> - <servlet-class> - org.apache.axis.transport.http.AxisServlet - </servlet-class> - </servlet> - - <servlet> - <servlet-name>AdminServlet</servlet-name> - <display-name>Axis Admin Servlet</display-name> - <servlet-class> - org.apache.axis.transport.http.AdminServlet - </servlet-class> - <load-on-startup>100</load-on-startup> - </servlet> - - <!-- xincon: Provides Webdav for eXist --> - <servlet> - <servlet-name>xincon</servlet-name> - <servlet-class>xincon.WebdavServlet</servlet-class> - <init-param> - <param-name>dbroot</param-name> - <param-value>xmldb:exist:///db</param-value> - </init-param> - - <!-- log4j parameters --> - <init-param> - <param-name>log4j-priority</param-name> - <param-value>DEBUG</param-value> - </init-param> - <init-param> - <param-name>log4j-layout</param-name> - <param-value>%-5p [%M] %m%n</param-value> - </init-param> - <!-- end log4j parameters --> - - <!-- load this servlet first to avoid conflicts with - eXist's log-configuration --> - <load-on-startup>1</load-on-startup> - </servlet> - - <!-- Configure Cocoon2 --> - - <servlet> - <servlet-name>Cocoon2</servlet-name> - <display-name>Cocoon2</display-name> - <description>The main Cocoon2 servlet</description> - - <!-- I'm skipping Cocoon configuration here ... --> - </servlet> - - <servlet-mapping> - <servlet-name>org.exist.xmlrpc.RpcServlet</servlet-name> - <url-pattern>/xmlrpc</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>org.exist.DatabaseAdminServlet</servlet-name> - <url-pattern>/admin</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>xincon</servlet-name> - <url-pattern>/webdav/*</url-pattern> - </servlet-mapping> - - <!-- Axis servlets --> - <servlet-mapping> - <servlet-name>AxisServlet</servlet-name> - <url-pattern>servlet/AxisServlet</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>AxisServlet</servlet-name> - <url-pattern>*.jws</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>AxisServlet</servlet-name> - <url-pattern>/services/*</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>AdminServlet</servlet-name> - <url-pattern>servlet/AdminServlet</url-pattern> - </servlet-mapping> - - <!-- - Cocoon handles all the URL space assigned to the webapp using its sitemap. - It is recommended to leave it unchanged. Under some circumstances though - (like integration with proprietary webapps or servlets) you might have - to change this parameter. - --> - <servlet-mapping> - <servlet-name>Cocoon2</servlet-name> - <url-pattern>/</url-pattern> - </servlet-mapping> - -</web-app>]]> - </screen> - </example> - - <para>Finally, to use the XML:DB taglib included with eXist, you should define - it as a built-in logicsheet in the configuration of Cocoon. Add the following - to <filename>WEB-INF/cocoon.xconf</filename>:</para> - - <example> - <title>Adding a new built-in logicsheet to cocoon.xconf</title> - - <screen><![CDATA[ -<target-language name="java"> - <!-- Defines the XSP Core logicsheet for the Java language --> - <parameter name="core-logicsheet" value="resource://org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl"/> - - <!-- Insert the following section: --> - <builtin-logicsheet> - <parameter name="prefix" value="xmldb"/> - <parameter name="uri" value="http://exist-db.org/xmldb/1.0"/> - <parameter name="href" value="resource://org/exist/xmldb.xsl"/> - </builtin-logicsheet> - - <!-- ... more builtin-logicsheets ... --> -</target-language> -]]> - </screen> - </example> - - <para>If you want to access eXist through Cocoon's XML:DB pseudo protocol, - don't forget to add eXist's XML:DB driver to the <source-handler> - section. The section should look something like this:</para> - - <example> - <title>Adding eXist's XML:DB driver</title> - <screen><![CDATA[ -<!-- xmldb pseudo protocol --> -<source-handler logger="core.source-handler"> - <!-- ...other predefined protocol handlers... --> - <!-- xmldb pseudo protocol --> - <protocol class="org.apache.cocoon.components.source.XMLDBSourceFactory"> - <!-- Xindice driver --> - <driver class="org.apache.xindice.client.xmldb.DatabaseImpl" type="xindice"/> - <!-- Add here other XML:DB compliant databases drivers --> - <driver class="org.exist.xmldb.DatabaseImpl" type="exist"/> - </protocol> -</source-handler>]]> - </screen> - </example> - - <para>You should now be able to restart your servlet-engine. You may check - if eXist is running by browsing to http://your-host:8080/your-app/admin</para> - </section> - - <section> - <title>Getting up and running with Jetty</title> - - <para>contributed by <emphasis>Michael I. Angermann</emphasis></para> - - <para>Besides Tomcat, eXist runs very well on - <ulink href="http://jetty.mortbay.org/jetty/">Jetty</ulink>. - Jetty is a 100% Java HTTP Server and Servlet Container.</para> - - <para>To get <filename>jetty-4.1.1.zip</filename> up and running with - <filename>eXist-0.8.1.zip</filename></para> - - <para>Make a directory called <filename>exist</filename> in - <filename>c:\jetty\demo\webapps</filename></para> - - <para>Unpack <filename>eXist-0.8.1.war.zip</filename> into - <filename>c:\jetty\demo\webapps\exist</filename></para> - - <para>From <ulink href="http://hsqldb.sourceforge.net"> - http://hsqldb.sourceforge.net</ulink> - add <filename>hsqldb.jar</filename> to - <filename>c:\jetty\demo\webapps\exist\WEB-INF\lib</filename>.</para> - - <para>Put these files in <filename>c:\jetty\lib</filename>:</para> - - <unorderedlist> - <listitem><para>tools.jar</para></listitem> - <listitem><para>xalan.jar</para></listitem> - <listitem><para>xercesImpl.jar</para></listitem> - <listitem><para>xml-apis.jar</para></listitem> - </unorderedlist> - - <note> - <para><filename>tools.jar</filename> comes from the jdk - release under <filename>c:\jdk\lib</filename></para></note> - - <note> - <para> - <filename>xalan.jar</filename>, <filename>xercesImpl.jar</filename>, - <filename>xml-apis.jar</filename> comes from - <ulink href="http://xml.apache.org">http://xml.apache.org</ulink>. - Xalan Java Version 2.4.0 (<filename>xalan-j_2_4_0-bin.zip</filename>, - dated Sept. 03, 2002). - </para> - </note> - - <para>Modify the following (2) files:</para> - - <unorderedlist> - <listitem><para><filename>c:\jetty\build.xml</filename></para></listitem> - <listitem><para><filename>c:\jetty\etc\demo.xml</filename></para></listitem> - </unorderedlist> - - <para>Add these lines in to build.xml</para> - - <example> - <title>Added lines in build.xml</title> - - <screen><![CDATA[ -<property name="xerces.jar" -value="${lib}/xercesImpl.jar"/> - -<property name="xmlapis.jar" -value="${lib}/xml-apis.jar"/> - -<property name="xalan.jar" -value="${lib}/xalan.jar"/> - -<property name="tools.jar" -value="${lib}/tools.jar"/> - -<!-- Modify the classpath id with the following -pathelements --> - -<path id="classpath"> - <pathelement location="${jetty1.2.jar}" /> - <pathelement location="${jasper.jar}" /> - <pathelement location="${servlet.jar}" /> - - <!-- add in these lines --> - - <pathelement location="${tools.jar}" /> - <pathelement location="${xalan.jar}" /> - <pathelement location="${xmlapis.jar}" /> - <pathelement location="${xerces.jar}" /> - <path refid="extpath" /> -</path> - ]]></screen> - </example> - - <para>Add the following lines to demo.xml:</para> - - <example> - <title>Added lines in demo.xml</title> - - <screen><![CDATA[ -<Call name="addWebApplication"> - <Arg>/exist/*</Arg> - <Arg><SystemProperty name="jetty.home" - default="."/>/demo/webapps/exist/</Arg> - <Arg><SystemProperty name="jetty.home" - default="."/>/etc/webdefault.xml</Arg> - <Arg type="boolean">false</Arg> <!-- if true, - expand war in temp dir --> -</Call> - ]]></screen> - </example> - - <para>To bring up jetty and exist type</para> - - <synopsis>ant demo</synopsis> - - <para>Type into your browser</para> - - <synopsis>http://localhost:8080/exist/index.xml</synopsis> - - </section> -</chapter> - -</book> Deleted: trunk/eXist-1.0/webapp/howtos.xml =================================================================== --- trunk/eXist-1.0/webapp/howtos.xml 2006-06-30 21:16:18 UTC (rev 3764) +++ trunk/eXist-1.0/webapp/howtos.xml 2006-06-30 21:26:43 UTC (rev 3765) @@ -1,739 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!--DOCTYPE book SYSTEM "file:/Users/byoung/Documents/dtd/docbook-xml-4.2/docbookx.dtd"--> -<book xmlns:ci="http://apache.org/cocoon/include/1.0"> - <bookinfo> - <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> - <author> - <firstname>Wolfgang M.</firstname> - <surname>Meier</surname> - <affiliation> - <address format="linespecific"> - <email>me...@if...</email> - </address> - </affiliation> - </author> - <author> - <firstname>Benjamin</firstname> - <surname>Young</surname> - <affiliation> - <address format="linespecific"> - <email>by...@bi...</email> - </address> - </affiliation> - </author> - <author> - <firstname>Michael I.</firstname> - <surname>Angermann</surname> - <affiliation> - <address format="linespecific"> - <email>by...@bi...</email> - </address> - </affiliation> - </author> - </bookinfo> - - <ci:include src="sidebar.xml"/> - - <chapter> - <title>How-Tos</title> - - <section> - <title>Entity resolution</title> - - <para>If a local XML file is uploaded to the database server, the server may have difficulties to resolve - external entities like, for example, document type declarations. This applies in particular to system - identifiers using local paths. We thus need a way to map those local paths into paths accessible to - the server.</para> - - <para>eXist uses the same entity resolution mechanism as Cocoon. This mechanism is based on catalog - files. The catalog file maps public identifiers to their correct physical location, i.e. their system identifier. - It can also map one system identifiers to an alternate system identifier. For example, the minimal catalog - shipped with eXist looks as follows:</para> - - <example> - <title>Example Catalog</title> - <programlisting><![CDATA[ -OVERRIDE YES -PUBLIC "-//PLAY//EN" - "entities/play.dtd" -OVERRIDE YES -SYSTEM "play.dtd" "entities/play.dtd" -]]></programlisting> - </example> - - <para>The catalog first maps the public identifier "-//PLAY//EN" to the file - <filename>entities/play.dtd</filename>. Filenames are relative to eXist's home - directory (which is <filename>webapp/WEB-INF</filename> in this case). </para> - - <para>Second, the system identifier "play.dtd" is mapped to the same physical location - as the public identifier. This second rule applies, if an XML document declares its - doctype as</para> - - <synopsis><!DOCTYPE PLAY SYSTEM "play.dtd"></synopsis> - - <para>The server will map "play.dtd" into the path "entities/play.dtd" relative to the - home directory of eXist.</para> - - <para>If you would like to add other mappings, you may either edit the default catalog file or - specify an alternate file in the indexer/entity-resolver section of <filename>conf.xml</filename>.</para> - </section> - - <section> - <title>Integrating eXist into an existing Cocoon installation</title> - - <para> eXist comes with its own pre-installed Cocoon. However, integrating eXist into an already - running Cocoon is not very difficult. The following paragraphs assume that you have already set up a web application based on - Cocoon.</para> - - <para>First create a directory named data in the WEB-INF folder of your Cocoon based web application. - This is where the database files will be created by eXist.</para> - - <para>Next, copy the <filename>conf.xml</filename> configuration file from eXist's - <filename>webapp/WEB-INF/</filename> directory into the <filename>WEB-INF</filename> - folder of your Cocoon application. Additionally, you have to copy a number of jar-files - from the <filename>lib</filename> folder into the <filename>WEB-INF/lib</filename> directory - of your Cocoon application:</para> - - <itemizedlist> - <listitem><para>exist.jar (from the root directory of eXist)</para></listitem> - <listitem><para>lib/core/antlr.jar</para></listitem> - <listitem><para>lib/core/commons-pool-x.x.jar</para></listitem> - <listitem><para>lib/core/log4j.jar</para></listitem> - <listitem><para>lib/core/xmldb.jar</para></listitem> - <listitem><para>lib/core/xmlrpc-x.x.jar</para></listitem> - <listitem><para>lib/optional/axis.jar</para></listitem> - <listitem><para>lib/optional/commons-logging-x.x.x.jar</para></listitem> - <listitem><para>lib/optional/axis-jaxrpc.jar</para></listitem> - <listitem><para>lib/optional/axis-saaj.jar</para></listitem> - <listitem><para>lib/optional/wsdl4j.jar</para></listitem> - </itemizedlist> - - <para>If you want WebDAV access you'll also need:</para> - - <itemizedlist> - <listitem><para>webapp/WEB-INF/lib/dom4j.jar</para></listitem> - <listitem><para>webapp/WEB-INF/lib/xincon.jar</para></listitem> - <listitem><para>webapp/WEB-INF/lib/catalina-util.jar</para></listitem> - </itemizedlist> - - <para>Next step: edit the <filename>web.xml</filename> file in your <filename>WEB-INF</filename> directory. - From the <filename>web.xml</filename> file that comes with eXist copy the servlet definitions for the - RpcServlet, EXistServlet, AxisServlet, AdminServlet and (optionally) the xincon servlet into your - own <filename>web.xml</filename>. Additionally, copy all the servlet-mapping sections for these servlets. - Please note that order is important in the <filename>web.xml</filename> file: the block with <servlet> sections - should always precede the <servlet-mapping> sections.</para> - - <para>An example <filename>web.xml</filename> file is shown below:</para> - - <example> - <title>web.xml example (Cocoon version 2.0.4 and eXist 0.9)</title> - - <screen> - <![CDATA[ -<?xml version="1.0" encoding="ISO-8859-1"?> - -<!--+ - | Configuration file for the web application. - | - | Provides XMLRPC + SOAP access to eXist and configures Cocoon2. If you don't need - | XMLRPC or SOAP or Cocoon, remove the corresponding servlets and servlet-mappings. - +--> -<!DOCTYPE web-app - PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.2//EN" - "http://java.sun.com/j2ee/dtds/web-app_2_2.dtd"> -<web-app> - <display-name>eXist Server</display-name> - <description>eXist Server Setup</description> - - <!-- RpcServlet provides XML-RPC access to eXist --> - <servlet> - <servlet-name>org.exist.xmlrpc.RpcServlet</servlet-name> - <servlet-class>org.exist.xmlrpc.RpcServlet</servlet-class> - </servlet> - - <!-- DatabaseAdminServlet: this servlet can be used to ensure that - eXist is running in the background. Just set the start-parameter - to true and load-on-startup to 1 --> - <servlet> - <servlet-name>EXistServlet</servlet-name> - <servlet-class>org.exist.http.servlets.EXistServlet</servlet-class> - - <!-- where to find eXist's configuration file - relative to the basedir of the web-application. - --> - <init-param> - <param-name>configuration</param-name> - <param-value>conf.xml</param-value> - </init-param> - - <!-- eXist's home directory. All file names in - the configuration file will be relative to this - directory. - --> - <init-param> - <param-name>basedir</param-name> - <param-value>WEB-INF/</param-value> - </init-param> - - <init-param> - <param-name>start</param-name> - <param-value>true</param-value> - </init-param> - - <load-on-startup>2</load-on-startup> - - </servlet> - - <!-- XQueryServlet generates HTML from an XQuery file. --> - <servlet> - <servlet-name>XQueryServlet</servlet-name> - <servlet-class>org.exist.http.servlets.XQueryServlet</servlet-class> - - <init-param> - <param-name>url</param-name> - <param-value>xmldb:exist:///db</param-value> - </init-param> - </servlet> - - <!-- configure the Axis servlets. Axis provides eXist's - web-services via SOAP --> - <servlet> - <servlet-name>AxisServlet</servlet-name> - <display-name>Apache-Axis Servlet</display-name> - <servlet-class>org.apache.axis.transport.http.AxisServlet</servlet-class> - </servlet> - - <servlet> - <servlet-name>AdminServlet</servlet-name> - <display-name>Axis Admin Servlet</display-name> - <servlet-class> - org.apache.axis.transport.http.AdminServlet - </servlet-class> - <load-on-startup>100</load-on-startup> - </servlet> - - <!-- xincon: Provides Webdav for eXist --> - <servlet> - <servlet-name>xincon</servlet-name> - <servlet-class>xincon.WebdavServlet</servlet-class> - <init-param> - <param-name>dbroot</param-name> - <param-value>xmldb:exist:///db</param-value> - </init-param> - - <init-param> - <param-name>log4j-priority</param-name> - <param-value>WARN</param-value> - </init-param> - <init-param> - <param-name>log4j-layout</param-name> - <param-value>%-5p [%M] %m%n</param-value> - </init-param> - - <load-on-startup>1</load-on-startup> - </servlet> - - <!-- Cocoon2 Configuration starts here ================================ --> - - <servlet> - <servlet-name>Cocoon</servlet-name> - <display-name>Cocoon</display-name> - <description>Cocoon</description> - - <!-- - The regular servlet class (trusts the servlet container classloader) - --> - <servlet-class>org.apache.cocoon.servlet.CocoonServlet</servlet-class> - - <!-- - In cases you're facing class loading problems, you can alternatively - use the following servlet-class instead of the above one - - <servlet-class>org.apache.cocoon.servlet.ParanoidCocoonServlet</servlet-class> - --> - - <!-- - This parameter tells cocoon to set the thread's context classloader to - its own classloader. If you experience strange classloader issues, - try setting this parameter to "true" or using ParanoidCocoonServlet. - --> - <init-param> - <param-name>init-classloader</param-name> - <param-value>false</param-value> - </init-param> - - <!-- - This parameter points to the main configuration file for Cocoon. - Note that the path is specified in absolute notation but it will be - resolved relative to the servlets webapp context path - --> - <init-param> - <param-name>configurations</param-name> - <param-value>/WEB-INF/cocoon.xconf</param-value> - </init-param> - - <!-- - This parameter indicates the configuration file of the LogKit management - --> - <init-param> - <param-name>logkit-config</param-name> - <param-value>/WEB-INF/logkit.xconf</param-value> - </init-param> - - <!-- - This parameter indicates the category id of the logger from the LogKit - configuration used by the CocoonServlet. - --> - <init-param> - <param-name>servlet-logger</param-name> - <param-value>access</param-value> - </init-param> - - <!-- - This parameter indicates the category id of the logger from the LogKit - management configuration for the Cocoon engine. - This logger is used for all components described in the cocoon.xconf - and sitemap.xmap file not having specified a logger with the - logger="..." attribute in the component configuration file. - --> - <init-param> - <param-name>cocoon-logger</param-name> - <param-value>core</param-value> - </init-param> - - <!-- - This parameter indicates the log level to use throughout startup of the system. - As soon as the logkit.xconf the setting of the logkit.xconf configuration is - used instead! Only for startup and if the logkit.xconf is not readable/available - this log level is of importance. - - Available levels are: - DEBUG: prints all level of log messages. - INFO: prints all level of log messages except DEBUG ones. - WARN: prints all level of log messages except DEBUG and INFO ones. - ERROR: prints all level of log messages except DEBUG, INFO and WARN ones. - FATAL_ERROR: prints only log messages of this level - --> - <init-param> - <param-name>log-level</param-name> - <param-value>WARN</param-value> - </init-param> - - <!-- - Allow reinstantiating (reloading) of the cocoon instance. If this is - set to "yes" or "true", a new cocoon instance can be created using - the request parameter "cocoon-reload". - --> - <init-param> - <param-name>allow-reload</param-name> - <param-value>no</param-value> - </init-param> - - <!-- - This parameter is used to list classes that should be loaded - at initialization time of the servlet. - Usually this classes are JDBC Drivers used - --> - <init-param> - <param-name>load-class</param-name> - <param-value> - <!-- For IBM WebSphere: - com.ibm.servlet.classloader.Handler --> - - <!-- For Database Driver: --> - <!-- org.hsqldb.jdbcDriver --> - - <!-- For PostgeSQL Database: - org.postgresql.Driver --> - - <!-- For Oracle Database: - oracle.jdbc.driver.OracleDriver --> - - <!-- ODBC - sun.jdbc.odbc.JdbcOdbcDriver --> - - <!-- For parent ComponentManager sample: - org.apache.cocoon.samples.parentcm.Configurator - --></param-value> - </init-param> - - <!-- - Causes all files in multipart requests to be processed. - Default is false for security reasons. - Unsupported values will be interpreted as false. - --> - <init-param> - <param-name>enable-uploads</param-name> - <param-value>true</param-value> - </init-param> - - <!-- - This parameter allows to specify where Cocoon should put uploaded files. - The path specified can be either absolute or relative to the context - path of the servlet. On windows platform, absolute directory must start - with volume: C:\Path\To\Upload\Directory - - The default directory is "upload-dir" in the work-directory - - <init-param> - <param-name>upload-directory</param-name> - <param-value>WEB-INF/work/upload-dir</param-value> - </init-param> - --> - - <!-- - Causes all files in multipart requests to be saved to upload-dir. - Default is true for security reasons. - Unsupported values will be interpreted as false. - --> - <init-param> - <param-name>autosave-uploads</param-name> - <param-value>true</param-value> - </init-param> - - <!-- - Specify handling of name conflicts when saving uploaded files - to disk. Acceptable values are deny, allow, rename (default). - Files are renamed x_filename where x is an integer value incremented - to make the new filename unique. - --> - <init-param> - <param-name>overwrite-uploads</param-name> - <param-value>allow</param-value> - </init-param> - - <!-- - Specify maximum allowed size of the upload. Defaults to 10 Mb. - --> - <init-param> - <param-name>upload-max-size</param-name> - <param-value>100000000</param-value> - </init-param> - - <!-- - This parameter allows to specify where Cocoon should create its page - and other objects cache. The path specified can be either absolute or - relative to the context path of the servlet. On windows platform, - absolute directory must start with volume: C:\Path\To\Cache\Directory - - The default directory is "cache-dir" in the work-directory - - <init-param> - <param-name>cache-directory</param-name> - <param-value>WEB-INF/work/cache-dir</param-value> - </init-param> - --> - - <!-- - This parameter allows to specify where Cocoon should put it's - working files. The path specified is either absolute or relative - to the context path of the Cocoon servlet. On windows platform, - absolute directory must start with volume: C:\Path\To\Work\Directory - - The default directory is "cocoon-files" directory in the servlet - context's temp directory (context property javax.servlet.context.tempdir). - - <init-param> - <param-name>work-directory</param-name> - <param-value>WEB-INF/work</param-value> - </init-param> - --> - - <!-- - This parameter allows to specify additional directories or jars - which Cocoon should put into it's own classpath. - Note that you must separate them using the platforms path.separator - (":" for *nix and ";" for Windows systems). Also note that absolute - pathes are take as such but relative pathes are rooted at the context - root of the Cocoon servlet. - - <init-param> - <param-name>extra-classpath</param-name> - <param-value>WEB-INF/extra-classes1:/[YOU-ABSOLUTE-PATH-TO]/own.jar</param-value> - </init-param> - --> - - <!-- - This parameter allows you to select the parent component manager. - The class will be instantiated via the constructor that takes a single - String as a parameter. That String will be equal to the text after the - '/'. - - Cocoon honors the LogEnabled and Initializable interfaces for this class, - if it implements them. - - If you uncomment the following lines the parent CM is set to the Parent CM sample, which will look up - a configuration via JNDI at org/apache/cocoon/samples/parentcm/ParentCMConfiguration - and use it. - <init-param> - <param-name>parent-component-manager</param-name> - <param-value>org.apache.cocoon.samples.parentcm.ParentComponentManager/org/apache/cocoon/samples/parentcm/ParentCMConfiguration</param-value> - </init-param> - --> - - <!-- - If you set this parameter to 'true' or 'yes', Cocoon will add processing - time to the end of each response. Value 'hide' adds processing time as an HTML - comment. By default, processing time is not added (corresponds to value 'no'). - - <init-param> - <param-name>show-time</param-name> - <param-value>hide</param-value> - </init-param> - --> - - <!-- - If true or not set, this class will try to catch and handle all Cocoon exceptions. - If false, it will rethrow them to the servlet container. - --> - <init-param> - <param-name>manage-exceptions</param-name> - <param-value>true</param-value> - </init-param> - - <!-- - If true, Avalon Excalibur instrumentation will be enabled on all Instrumentable - components with Cocoon and your Cocoon application. - - <init-param> - <param-name>enable-instrumentation</param-name> - <param-value>true</param-value> - </init-param> - --> - - <!-- - This defines the location of the instrument manager configuration, only used - if the init-param enable-instrumentation is enabled. - - <init-param> - <param-name>instrumentation-config</param-name> - <param-value>/WEB-INF/instrumentation.xconf</param-value> - </init-param> - --> - - <!-- - Set encoding used by the container. If not set the ISO-8859-1 encoding will be assumed. - --> - <init-param> - <param-name>container-encoding</param-name> - <param-value>ISO-8859-1</param-value> - </init-param> - - <!-- - Set form encoding. This will be the character set used to decode request parameters. - If not set the ISO-8859-1 encoding will be assumed. - --> - <init-param> - <param-name>form-encoding</param-name> - <param-value>UTF-8</param-value> - </init-param> - - <!-- - This parameter allows you to startup Cocoon2 immediately after startup - of your servlet engine. - --> - <load-on-startup>1</load-on-startup> - </servlet> - - <!-- URL space mappings ============================================= --> - - <!-- Define where the XMLRPC servlet listens --> - <servlet-mapping> - <servlet-name>org.exist.xmlrpc.RpcServlet</servlet-name> - <url-pattern>/xmlrpc</url-pattern> - </servlet-mapping> - - <!-- eXist's DatabaseAdminServlet --> - <servlet-mapping> - <servlet-name>EXistServlet</servlet-name> - <url-pattern>/rest/*</url-pattern> - </servlet-mapping> - - <!-- XQueryServlet --> - <servlet-mapping> - <servlet-name>XQueryServlet</servlet-name> - <url-pattern>*.xql</url-pattern> - </servlet-mapping> - - <!-- Define where Xincon listens for WebDAV requests --> - <servlet-mapping> - <servlet-name>xincon</servlet-name> - <url-pattern>/webdav/*</url-pattern> - </servlet-mapping> - - <!-- The following servlet-mappings are for Axis (SOAP) --> - <servlet-mapping> - <servlet-name>AxisServlet</servlet-name> - <url-pattern>/axis-servlet/AxisServlet</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>AxisServlet</servlet-name> - <url-pattern>*.jws</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>AxisServlet</servlet-name> - <url-pattern>/services/*</url-pattern> - </servlet-mapping> - - <servlet-mapping> - <servlet-name>AdminServlet</servlet-name> - <url-pattern>/axis-servlet/AdminServlet</url-pattern> - </servlet-mapping> - - <!-- Finally, we establish the main mapping for Cocoon --> - - <!-- - Cocoon handles all the URL space assigned to the webapp using its sitemap. - It is recommended to leave it unchanged. Under some circumstances though - (like integration with proprietary webapps or servlets) you might have - to change this parameter. - --> - <servlet-mapping> - <servlet-name>Cocoon</servlet-name> - <url-pattern>/</url-pattern> - </servlet-mapping> - - <!-- - Some servlet engines (Tomcat) have defaults which are not overriden - by '/' mapping, but must be overriden explicitly. - --> - <servlet-mapping> - <servlet-name>Cocoon</servlet-name> - <url-pattern>*.jsp</url-pattern> - - </servlet-mapping> - <!-- - Some servlet engines (WebLogic) have defaults which are not overriden - by '/' mapping, but must be overriden explicitly. - --> - <servlet-mapping> - <servlet-name>Cocoon</servlet-name> - <url-pattern>*.html</url-pattern> - </servlet-mapping>]]></screen> - -<screen><![CDATA[ - - <!-- various MIME type mappings ====================================== --> - - <mime-mapping> - <extension>css</extension> - <mime-type>text/css</mime-type> - </mime-mapping> - - <mime-mapping> - <extension>xml</extension> - <mime-type>text/xml</mime-type> - </mime-mapping> - - <mime-mapping> - <extension>xsl</extension> - <mime-type>text/xml</mime-type> - </mime-mapping> - - <mime-mapping> - <extension>xconf</extension> - <mime-type>text/xml</mime-type> - </mime-mapping> - - <mime-mapping> - <extension>xmap</extension> - <mime-type>text/xml</mime-type> - </mime-mapping> - - <mime-mapping> - <extension>ent</extension> - <mime-type>text/plain</mime-type> - </mime-mapping> - - <mime-mapping> - <extension>grm</extension> - <mime-type>text/plain</mime-type> - </mime-mapping> - - <!-- Add a security-constraint for the DatabaseAdminServlet: the servlet allows to - shutdown the database. We don't want everybody to be able to access this. --> - <security-constraint> - <web-resource-collection> - <web-resource-name>DatabaseAdmin</web-resource-name> - <url-pattern>/admin</url-pattern> - </web-resource-collection> - <auth-constraint> - <role-name>dba</role-name> - </auth-constraint> - </security-constraint> - - <login-config> - <auth-method>FORM</auth-method> - <realm-name>eXist Database Admin Realm</realm-name> - <form-login-config> - <form-login-page>adminLogin.xml</form-login-page> - <form-error-page>adminLogin.xml</form-error-page> - </form-login-config> - </login-config> - - <security-role> - <role-name>dba</role-name> - </security-role> -</web-app>]]> - </screen> - </example> - - <para>Finally, to use the XML:DB taglib included with eXist, you should define - it as a built-in logicsheet in the configuration of Cocoon. Add the following - to <filename>WEB-INF/cocoon.xconf</filename>:</para> - - <example> - <title>Adding a new built-in logicsheet to cocoon.xconf</title> - - <screen><![CDATA[ -<target-language name="java"> - <!-- Defines the XSP Core logicsheet for the Java language --> - <parameter name="core-logicsheet" value="resource://org/apache/cocoon/components/language/markup/xsp/java/xsp.xsl"/> - - <!-- Insert the following section: --> - <builtin-logicsheet> - <parameter name="prefix" value="xmldb"/> - <parameter name="uri" value="http://exist-db.org/xmldb/1.0"/> - <parameter name="href" value="resource://org/exist/xmldb.xsl"/> - </builtin-logicsheet> - - <!-- ... more builtin-logicsheets ... --> -</target-language> -]]> - </screen> - </example> - - <para>If you want to access eXist through Cocoon's XML:DB pseudo protocol, - don't forget to add eXist's XML:DB driver to the <source-handler> - section. The section should look something like this:</para> - - <example> - <title>Adding eXist's XML:DB driver</title> - <screen><![CDATA[ -<!-- xmldb pseudo protocol --> -<source-handler logger="core.source-handler"> - <!-- ...other predefined protocol handlers... --> - <!-- xmldb pseudo protocol --> - <protocol class="org.apache.cocoon.components.source.XMLDBSourceFactory"> - <!-- Xindice driver --> - <!--driver class="org.apache.xindice.client.xmldb.DatabaseImpl" type="xindice"/--> - <!-- Add here other XML:DB compliant databases drivers --> - <driver class="org.exist.xmldb.DatabaseImpl" type="exist"/> - </protocol> -</source-handler>]]> - </screen> - </example> - - <para>Please comment out the Xindice driver if you don't have Xindice in - your classpath.</para> - - <para>You should now be able to restart your servlet-engine. You may check - if eXist is running by browsing to http://your-host:8080/your-app/admin</para> - </section> - -</chapter> - -</book> Deleted: trunk/eXist-1.0/webapp/performance.xml =================================================================== --- trunk/eXist-1.0/webapp/performance.xml 2006-06-30 21:16:18 UTC (rev 3764) +++ trunk/eXist-1.0/webapp/performance.xml 2006-06-30 21:26:43 UTC (rev 3765) @@ -1,281 +0,0 @@ -<?xml version="1.0" encoding="UTF-8"?> -<!--<!DOCTYPE book PUBLIC "-//OASIS//DTD DocBook XML V4.1.2//EN" "docbookx.dtd">--> -<book xmlns:ci="http://apache.org/cocoon/include/1.0"> - <bookinfo> - <graphic fileref="logo.jpg"/> - <title>Open Source Native XML Database</title> - <author> - <firstname>Wolfgang M.</firstname> - <surname>Meier</surname> - <affiliation> - <address format="linespecific"> - <email>wol...@ex...</email> - </address> - </affiliation> - </author> - </bookinfo> - <ci:include src="sidebar.xml"/> - <chapter> - <title>Performance HowTo</title> - <section> - <title>Indexing</title> - <section> - <title>Use a Local Connection to the Database for Large Files</title> - <para>The XML:DB driver uses XMLRPC calls to communicate with a - remote database server. When storing files, the file content - has first to be send over the network. To avoid memory problems, the XMLRPC interface supports - file uploads in chunks. This way, not the whole file has to fit into - main memory. Instead, the file is first uploaded chunk by chunk and stored - into a temporary file on the server, which is then stored into the database. - However, sending the content of larger files over XMLRPC can cost a lot - of time.</para> - - <para>It is thus usually better to use a client with direct connection to - the database to load a large amount of data. The client will open - the database in embedded mode, so no network connection is established. - To launch the client in local mode, enter:</para> - - <synopsis>bin/client.sh -l</synopsis> - - <para>Please note that you should stop any running server before starting - the client in local mode.</para> - - <para>The embedded XML:DB driver uses SAX to parse the XML files. Since the - file content is not loaded into memory, there should be no limit to the - size of a file.</para> - - <para>Developers using the XML:DB API should prefer the setContent() - method of class XMLResource and pass a Java File object. The file object - is directly forwarded to the indexer.</para> - </section> - <section> - <title>Collection Size</title> - - <para>For previous versions of eXist, we recommended to split - large collections into several sub-collections. This does no - longer apply to recent releases. eXist can now well handle - collections with a few thousand files in it.</para> - - <para>You should still think about splitting a collection if it - contains more than, let's say, 10,000 files. However, too many - collections make the database slow. So please don't create - thousands of sub-collections. Reading collection metadata is - expensive and has a bad impact on query performance.</para> - </section> - - <section> - <title>Restrict Fulltext-Indexing</title> - <para>Another alternative is to exclude some parts of your - documents from fulltext-indexing. By default, eXist tries to - index every character sequence it finds. But usually, fulltext-queries - make more sense for some parts of a document than for - others. For example, URLs, serial numbers and the like - consume a lot of space in the index, but will rarely be - searched this way. </para> - <para>The <ulink href="configuration.xml">configuration - document</ulink> contains some information about how to - exclude or include document parts into the fulltext index. - Please note that, even if you exclude some elements from - fulltext-indexing, you will still be able to apply all - standard XPath operators and functions to them. They will - just perform slower.</para> - </section> - <section> - <title>Page Buffer Sizes and Memory Usage</title> - <para> Native backend page buffer sizes may sometimes get too - small, which may cause a lot of page-in/page-out operations.</para> - - <para>The database writes some information about page buffer usage - to the log files whenever it is stopped or flushes pages to disk. - There should be several lines in the log looking like this:</para> - - <synopsis>2003-01-13 21:22:38,096 [Thread-1] INFO (BTree.java [printStatistics]:1188) - elements.dbx INDEX 1024 / 1 / 3/ 1</synopsis> - <synopsis>2003-01-13 21:22:38,097 [Thread-1] INFO (BFile.java [printStatistics]:421) - elements.dbx DATA 256 / 256 / 984 / 2</synopsis> - - <para>The log shows two entries for each index file: INDEX and DATA. - These correspond to the two page buffers used by each index file. - The INDEX buffer contains B+-tree pages, th... [truncated message content] |
|
From: <di...@us...> - 2006-06-30 21:16:23
|
Revision: 3764 Author: dizzzz Date: 2006-06-30 14:16:18 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3764&view=rev Log Message: ----------- Minor cleanup in html admin interface Modified Paths: -------------- trunk/eXist-1.0/webapp/admin/admin.xql Modified: trunk/eXist-1.0/webapp/admin/admin.xql =================================================================== --- trunk/eXist-1.0/webapp/admin/admin.xql 2006-06-30 21:13:29 UTC (rev 3763) +++ trunk/eXist-1.0/webapp/admin/admin.xql 2006-06-30 21:16:18 UTC (rev 3764) @@ -158,7 +158,7 @@ <li><a href="{session:encode-url(request:get-uri())}?panel=status">System Status</a></li> <li><a href="{session:encode-url(request:get-uri())}?panel=browse">Browse Collections</a></li> <li><a href="{session:encode-url(request:get-uri())}?panel=users">Manage Users</a></li> - <li><a href="{session:encode-url(request:get-uri())}?panel=setup">Examples and Documentation Setup</a></li> + <li><a href="{session:encode-url(request:get-uri())}?panel=setup">Examples Setup</a></li> <li><a href="{session:encode-url(request:get-uri())}?panel=shutdown">Shutdown</a></li> <li><a href="{session:encode-url(request:get-uri())}?logout=yes">Logout</a></li> </ul> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <di...@us...> - 2006-06-30 21:13:37
|
Revision: 3763 Author: dizzzz Date: 2006-06-30 14:13:29 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3763&view=rev Log Message: ----------- Late commit of patch by Rui Alberto L. Goncalves "XMLDBTransformer xupdate" I've added xupdate possibility to XMLDBTransfomer.. Here's a suggested patch in attach! I found it very useful!! Sample usage of xupdate: <db:collection user="" ... the as the usual ...> <db:update> <xu:modifications version="1.0"> XUPDATE HERE </xu:modifications> </db:update> </db:collection> Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java Modified: trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java =================================================================== --- trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java 2006-06-30 20:27:57 UTC (rev 3762) +++ trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java 2006-06-30 21:13:29 UTC (rev 3763) @@ -38,7 +38,18 @@ import org.xmldb.api.base.XMLDBException; import org.xmldb.api.modules.XMLResource; import org.xmldb.api.modules.XPathQueryService; +import org.xmldb.api.modules.XUpdateQueryService; + +import javax.xml.transform.stream.StreamResult; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.TransformerConfigurationException; +import javax.xml.transform.sax.TransformerHandler; +import javax.xml.transform.sax.SAXTransformerFactory; + + + + /** * Transformer component for querying an XML database using the * XMLDB API. @@ -61,6 +72,7 @@ public static final String CURRENT_NODE_ELEMENT = "current-node"; public static final String SELECT_NODE = "select-node"; public static final String RESULT_SET_ELEMENT = "result-set"; + public static final String XUPDATE_ELEMENT = "update"; public static final String ERROR_ELEMENT = "error"; public static final String ERRMSG_ELEMENT = "message"; @@ -70,6 +82,7 @@ public static final String FATAL_ERROR = "fatal"; public static final String WARNING = "warn"; + public static final String INFO= "info"; public static final int IN_COLLECTION = 1; public static final int IN_QUERY = 2; @@ -86,6 +99,14 @@ private XMLResource currentResource = null; private HashMap namespaces = new HashMap(20); private String prefix = null; + + + private StringWriter queryWriter; + private TransformerHandler queryHandler; + + /** The trax <code>TransformerFactory</code> used by this transformer. */ + private SAXTransformerFactory tfactory = null; + /** * Setup the component. Accepts parameters "driver", "user" and @@ -116,6 +137,12 @@ public void startElement(String uri, String localName, String qname, Attributes attribs) throws SAXException { + if(queryHandler!=null) { + this.queryHandler.startElement(uri, localName, qname, attribs); + } + else + { + if (isRecording) { if (NAMESPACE.equals(uri) && FOR_EACH_ELEMENT.equals(localName)) ++nesting; @@ -131,6 +158,8 @@ startCurrent(attribs); else if (SELECT_NODE.equals(localName)) startSelectNode(attribs); + else if(XUPDATE_ELEMENT.equals(localName)) + startXUpdate(attribs); } else { if (currentResource != null) { try { @@ -154,6 +183,7 @@ } else super.startElement(uri, localName, qname, attribs); } + } } protected void startCollection(Attributes attribs) throws SAXException { @@ -192,6 +222,54 @@ } } + /** + * Helper for TransformerFactory. + */ + protected SAXTransformerFactory getTransformerFactory() { + if (tfactory == null) { + tfactory = (SAXTransformerFactory) TransformerFactory.newInstance(); + //tfactory.setErrorListener(new TraxErrorHandler(getLogger())); + } + return tfactory; + } + + + protected void startXUpdate(Attributes attribs) throws SAXException { + if (collection == null) { + reportError(FATAL_ERROR, "no collection selected"); + return; + } + queryWriter = new StringWriter(256); + try { + this.queryHandler = getTransformerFactory().newTransformerHandler(); + this.queryHandler.setResult(new StreamResult(queryWriter)); + //this.queryHandler.getTransformer().setOutputProperties(format); + } + catch (TransformerConfigurationException e) { + throw new SAXException("Failed to get transformer handler", e); + } + // Start query document + this.queryHandler.startDocument(); + + Iterator i = namespaces.entrySet().iterator(); + while (i.hasNext()) { + Map.Entry entry = (Map.Entry)i.next(); + this.queryHandler.startPrefixMapping((String)entry.getKey(), (String)entry.getValue()); + } + + } + + protected void endXUpdate() throws SAXException + { + try { + XUpdateQueryService service = (XUpdateQueryService) collection.getService("XUpdateQueryService", "1.0"); + long count = service.update(queryWriter.toString()); + } + catch(XMLDBException e) { + reportError(FATAL_ERROR, "Unable to perform update: "+e.getMessage() , e); + } + } + protected void startSelectNode(Attributes attribs) throws SAXException { if (collection == null) { reportError(FATAL_ERROR, "no collection selected"); @@ -412,6 +490,19 @@ * @see org.xml.sax.ContentHandler#endElement(java.lang.String, java.lang.String, java.lang.String) */ public void endElement(String uri, String loc, String raw) throws SAXException { + if (this.queryHandler != null && !(NAMESPACE.equals(uri) && XUPDATE_ELEMENT.equals(loc)) ) { + this.queryHandler.endElement(uri, loc, raw); + } else if(NAMESPACE.equals(uri) && XUPDATE_ELEMENT.equals(loc)) { + Iterator i = namespaces.entrySet().iterator(); + while (i.hasNext()) { + Map.Entry entry = (Map.Entry) i.next(); + this.queryHandler.endPrefixMapping((String)entry.getKey()); + } + endXUpdate(); + this.queryHandler = null; + } + else + { if (isRecording) { if (NAMESPACE.equals(uri) && FOR_EACH_ELEMENT.equals(loc) && --nesting == 0) endForEach(); @@ -423,10 +514,11 @@ mode = 0; } else if (FOR_EACH_ELEMENT.equals(loc)) { endForEach(); - } + } return; } else super.endElement(uri, loc, raw); + } } protected void endForEach() throws SAXException { @@ -464,7 +556,11 @@ } public void characters(char[] p0, int p1, int p2) throws SAXException { - super.characters(p0, p1, p2); + if(queryHandler!=null) { + this.queryHandler.characters(p0,p1,p2); + } else { + super.characters(p0, p1, p2); + } } protected class ForEach { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <di...@us...> - 2006-06-30 20:28:28
|
Revision: 3762 Author: dizzzz Date: 2006-06-30 13:27:57 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3762&view=rev Log Message: ----------- Late commit of patch supplied by Thorsten Meinl; bugid=1364979 "NPE when using XMLDBTransformer" Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java Modified: trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java =================================================================== --- trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java 2006-06-30 18:26:01 UTC (rev 3761) +++ trunk/eXist-1.0/src/org/exist/cocoon/XMLDBTransformer.java 2006-06-30 20:27:57 UTC (rev 3762) @@ -80,7 +80,6 @@ private String xpath = null; private Collection collection = null; private Stack commandStack = new Stack(); - private Request request; private boolean isRecording = false; private int nesting = 0; private int mode = 0; @@ -105,10 +104,10 @@ */ public void setup(SourceResolver resolver, Map map, String src, Parameters parameters) throws ProcessingException, SAXException, IOException { + super.setup(resolver, map, src, parameters); driver = parameters.getParameter("driver", DEFAULT_DRIVER); user = parameters.getParameter("user", DEFAULT_USER); - password = parameters.getParameter("password", DEFAULT_USER); - request = ObjectModelHelper.getRequest(map); + password = parameters.getParameter("password", DEFAULT_PASSWORD); if (request == null) { throw new ProcessingException("no request object found"); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-30 18:26:14
|
Revision: 3761 Author: wolfgang_m Date: 2006-06-30 11:26:01 -0700 (Fri, 30 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3761&view=rev Log Message: ----------- Documentation updates. Modified Paths: -------------- trunk/eXist-1.0/webapp/client.xml trunk/eXist-1.0/webapp/configuration.xml trunk/eXist-1.0/webapp/deployment.xml trunk/eXist-1.0/webapp/devguide.xml trunk/eXist-1.0/webapp/security.xml Modified: trunk/eXist-1.0/webapp/client.xml =================================================================== --- trunk/eXist-1.0/webapp/client.xml 2006-06-29 20:45:51 UTC (rev 3760) +++ trunk/eXist-1.0/webapp/client.xml 2006-06-30 18:26:01 UTC (rev 3761) @@ -1,9 +1,8 @@ <?xml version="1.0" encoding="UTF-8"?> <?xml-stylesheet href="file://localhost/home/wolf/Java/Morphon_XML-Editor_3.1/Examples/docbook/docbook.css" type="text/css"?> -<book - xmlns:ci="http://apache.org/cocoon/include/1.0" +<book xmlns:ci="http://apache.org/cocoon/include/1.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" - xsi:noNamespaceSchemaLocation='file://localhost/home/wolf/Java/Morphon_XML-Editor_3.1/Examples/docbook/xsd/docbook.xsd'> + xsi:noNamespaceSchemaLocation="file://localhost/home/wolf/Java/Morphon_XML-Editor_3.1/Examples/docbook/xsd/docbook.xsd"> <bookinfo> <graphic fileref="logo.jpg"/> @@ -19,51 +18,63 @@ <ci:include src="sidebar.xml"/> <chapter id="ch01"> <title>Java Client</title> - <para>eXist offers an integrated command-line and gui client in class <classname>org.exist.client.InteractiveClient</classname>. The client is entirely based on the XML:DB API and provides commands for most database related tasks, like creating and removing collections, user management, batch-loading XML data or querying.</para> - <para>The following sections provide a short description of the most common comand-line parameters and their use:</para> + <para>eXist offers an integrated command-line and gui client in class + <classname>org.exist.client.InteractiveClient</classname>. The client is entirely based on + the XML:DB API and provides commands for most database related tasks, like creating and + removing collections, user management, batch-loading XML data or querying.</para> + <para>The following sections provide a short description of the most common comand-line + parameters and their use:</para> <section> <title>Introduction</title> - <para>Class <classname>InteractiveClient</classname> can be launched in two ways: first, you may use the <command moreinfo="none">bin/client.sh</command> or <command moreinfo="none">bin\client.bat</command> skripts. Second, you may use eXist's own startup mechanism contained in the <filename moreinfo="none">start.jar</filename> jar-file. To select the client, pass the string "client" as first argument, e.g.</para> + <para>Class <classname>InteractiveClient</classname> can be launched in two ways: first, you + may use the <command moreinfo="none">bin/client.sh</command> or <command moreinfo="none" + >bin\client.bat</command> skripts. Second, you may use eXist's own startup mechanism + contained in the <filename moreinfo="none">start.jar</filename> jar-file. To select the + client, pass the string "client" as first argument, e.g.</para> <synopsis format="linespecific">java -jar start.jar client</synopsis> <para>The shell scripts basically do the same thing.</para> <para>The client offers three modes of operation:</para> <orderedlist continuation="restarts" inheritnum="ignore"> <listitem> - <para>If an action is specified on the command-line, it will be processed in non-interactive mode and the client will terminate after completition.</para> + <para>If an action is specified on the command-line, it will be processed in + non-interactive mode and the client will terminate after completition.</para> </listitem> <listitem> - <para>Without an action, the client switches to interactive mode and displays the graphical user interface.</para> + <para>Without an action, the client switches to interactive mode and displays the + graphical user interface.</para> </listitem> <listitem> - <para>If option <option>-l</option> or <option>--nogui</option> is specified without an action, the client switches to shell-mode and prompts for user input. No graphical interface is displayed.</para> + <para>If option <option>-l</option> or <option>--nogui</option> is specified without an + action, the client switches to shell-mode and prompts for user input. No graphical + interface is displayed.</para> </listitem> </orderedlist> </section> - + <section> - <title>Using the shell</title> - <para>We will not describe the interactive shell mode in detail here. Most commands work like their - counterparts specified on the command line. On the shell, just type <command moreinfo="none">help</command> - to get a list of supported commands.</para> - <para>The shell-mode may support full command line history and command completition, depending on your type of - operating system. On Unix systems, the client will try to load the GNU readline library, which is part of - most Unix installations. This gives you access to all the nice things you probably know from Linux shells. - For example, pressing the tab-key will try to complete collection and document names. However, for this to - work, the native library <filename moreinfo="none">lib/core/libJavaReadline.so</filename> has to be found - by the system's loader. On Linux, just add <filename moreinfo="none">lib/core</filename> to your - <option>LD_LIBRARY_PATH</option> (the client.sh script does this automatically).</para> - <para>On Windows OS, you should at least be able to use the cursor-up/cursor-down keys to browse - through the command history.</para> - <para>To explain the shell-mode, we just provide a short example, showing how to store the sample files into - the database. Typing <command moreinfo="none">mkcol - shakespeare</command> and pressing enter will create a - shakespeare-collection into which we will put some of the sample documents provided with eXist. To check - if the new collection is present, enter <command moreinfo="none">ls</command> to get a listing of the - current collection contents. The listing below shows an example session of how to add the sample - documents:</para> - <example> - <title>Adding the sample documents</title> - <screen format="linespecific"><![CDATA[ + <title>Using the shell</title> + <para>We will not describe the interactive shell mode in detail here. Most commands work like + their counterparts specified on the command line. On the shell, just type <command + moreinfo="none">help</command> to get a list of supported commands.</para> + <para>The shell-mode may support full command line history and command completition, depending + on your type of operating system. On Unix systems, the client will try to load the GNU + readline library, which is part of most Unix installations. This gives you access to all the + nice things you probably know from Linux shells. For example, pressing the tab-key will try + to complete collection and document names. However, for this to work, the native library + <filename moreinfo="none">lib/core/libJavaReadline.so</filename> has to be found by the + system's loader. On Linux, just add <filename moreinfo="none">lib/core</filename> to your + <option>LD_LIBRARY_PATH</option> (the client.sh script does this automatically).</para> + <para>On Windows OS, you should at least be able to use the cursor-up/cursor-down keys to + browse through the command history.</para> + <para>To explain the shell-mode, we just provide a short example, showing how to store the + sample files into the database. Typing <command moreinfo="none">mkcol shakespeare</command> + and pressing enter will create a shakespeare-collection into which we will put some of the + sample documents provided with eXist. To check if the new collection is present, enter + <command moreinfo="none">ls</command> to get a listing of the current collection contents. + The listing below shows an example session of how to add the sample documents:</para> + <example> + <title>Adding the sample documents</title> + <screen format="linespecific"><![CDATA[ exist:/db>mkcol shakespeare created collection. exist:/db>cd shakespeare @@ -87,61 +98,112 @@ exist:/db>cd xinclude exist:/db/xinclude>put samples/xinclude ]]></screen> - </example> - <para>Adding files to the database is done using put. Put expects either a single file, a file-pattern or a directory name as argument. If a directory is specified, all XML and XSL files in that directory will be put into the database. To add the files in directory samples/shakespeare simply enter put samples/shakespeare. To see if the files have actually been stored, you may view the contents of the current collection with ls. To view a document, use the get command, e.g.:</para> - <synopsis format="linespecific">get hamlet.xml</synopsis> - <note> - <para> - <command moreinfo="none">put</command> also accepts file-patterns, i.e. a path with wildcards ? or *. ** means: any sub-directory. So the command <command moreinfo="none">put samples/**/*.xml</command> will parse any XML files found in the <filename moreinfo="none">samples</filename> directory and any of its sub-directories. </para> - </note> - <note> - <para>If you ever run into problems while experimenting with eXist and your database files get corrupt: just remove the data files created by eXist and everything should work again. The data files all end with <filename moreinfo="none">.dbx</filename>. You will either find them in directory <filename moreinfo="none">webapp/WEB-INF/data</filename> or <filename moreinfo="none">WEB-INF/data</filename>, depending on your installation. It is also ok to backup those data-files to be able to restore them in case of a database corruption.</para> - </note> - </section> - + </example> + <para>Adding files to the database is done using put. Put expects either a single file, a + file-pattern or a directory name as argument. If a directory is specified, all XML and XSL + files in that directory will be put into the database. To add the files in directory + samples/shakespeare simply enter put samples/shakespeare. To see if the files have actually + been stored, you may view the contents of the current collection with ls. To view a + document, use the get command, e.g.:</para> + <synopsis format="linespecific">get hamlet.xml</synopsis> + <note> + <para> + <command moreinfo="none">put</command> also accepts file-patterns, i.e. a path with + wildcards ? or *. ** means: any sub-directory. So the command <command moreinfo="none">put + samples/**/*.xml</command> will parse any XML files found in the <filename + moreinfo="none">samples</filename> directory and any of its sub-directories. </para> + </note> + <note> + <para>If you ever run into problems while experimenting with eXist and your database files + get corrupt: just remove the data files created by eXist and everything should work again. + The data files all end with <filename moreinfo="none">.dbx</filename>. You will either + find them in directory <filename moreinfo="none">webapp/WEB-INF/data</filename> or + <filename moreinfo="none">WEB-INF/data</filename>, depending on your installation. It is + also ok to backup those data-files to be able to restore them in case of a database + corruption.</para> + </note> + </section> + <section> <title>Specifying Parameters</title> - <para>The client uses the CLI library from Apache's Excalibur project to parse command-line parameters. This means that the same conventions apply as for most GNU tools. Most parameters have a short and a long form: for example, the user can be specified in short form with <command>-u user</command> or in long form <command>--user=user</command>. You can also combine argument-less parameters: for example, <command>-ls</command> is short for <command>-l -s</command>.</para> + <para>The client uses the CLI library from Apache's Excalibur project to parse command-line + parameters. This means that the same conventions apply as for most GNU tools. Most + parameters have a short and a long form: for example, the user can be specified in short + form with <command>-u user</command> or in long form <command>--user=user</command>. You can + also combine argument-less parameters: for example, <command>-ls</command> is short for + <command>-l -s</command>.</para> </section> <section> <title>General Configuration</title> - <para>The client reads its default options from the properties file <filename moreinfo="none">client.properties</filename>. Most of the properties can be overwritten by command-line parameters or by the <command moreinfo="none">set</command> command in shell-mode.</para> - <para>The client relies on the XML:DB API to communicate with the database. It will thus work with remote as well as embedded database instances. The correct database instance is determined through the XML:DB base URI as specified in the properties file or through command-line options. The <ulink url="deployment.xml"> deployment</ulink> document describes how different servers are addressed by the XML:DB URI.</para> - <para>The XML:DB base URI used by the client for connections is defined by the <option>uri=</option> property. By default, this is set to <option>uri=xmldb:exist://localhost:8080/exist/xmlrpc</option>. The client will thus try to connect to a database instance running inside the webserver at port 8080 of the local host. This doesn't mean that the client is not communicating through the network. In fact, any XML:DB URI containing a host part is accessed through the XMLRPC protocol.</para> - <para>There are several ways to specify an alternate XML:DB base URI: first, you may change the <option>uri=</option> property in <filename moreinfo="none">client.properties</filename>. Second, you may use the <option>-o</option> parameter on the command-line to temporarily select another target for the connection. For example, to start the client in local mode, use:</para> + <para>The client reads its default options from the properties file <filename moreinfo="none" + >client.properties</filename>. Most of the properties can be overwritten by command-line + parameters or by the <command moreinfo="none">set</command> command in shell-mode.</para> + <para>The client relies on the XML:DB API to communicate with the database. It will thus work + with remote as well as embedded database instances. The correct database instance is + determined through the XML:DB base URI as specified in the properties file or through + command-line options. The <ulink url="deployment.xml"> deployment</ulink> document describes + how different servers are addressed by the XML:DB URI.</para> + <para>The XML:DB base URI used by the client for connections is defined by the + <option>uri=</option> property. By default, this is set to + <option>uri=xmldb:exist://localhost:8080/exist/xmlrpc</option>. The client will thus try + to connect to a database instance running inside the webserver at port 8080 of the local + host. This doesn't mean that the client is not communicating through the network. In fact, + any XML:DB URI containing a host part is accessed through the XMLRPC protocol.</para> + <para>There are several ways to specify an alternate XML:DB base URI: first, you may change + the <option>uri=</option> property in <filename moreinfo="none" + >client.properties</filename>. Second, you may use the <option>-o</option> parameter on the + command-line to temporarily select another target for the connection. For example, to start + the client in local mode, use:</para> <synopsis format="linespecific">bin/client.sh -ouri=xmldb:exist://</synopsis> <para>To access a server running inside the Jetty webserver at port 8080 on a remote host, use</para> <synopsis format="linespecific">bin/client.sh -ouri=xmldb:exist://host:8080/exist/xmlrpc</synopsis> - <para><emphasis>Local mode</emphasis> means here, that an embedded database instance will be initialized and started by the client. It will thus have direct access to the database instance. Use this option if you want to batch-load a large document or a huge collection of documents.</para> - <para>Using the <option>-o</option>, you can temporarily change any property specified in the properties file. Since switching to local mode is required quite often, there's also a shortcut: specifying</para> + <para><emphasis>Local mode</emphasis> means here, that an embedded database instance will be + initialized and started by the client. It will thus have direct access to the database + instance. Use this option if you want to batch-load a large document or a huge collection of + documents.</para> + <para>Using the <option>-o</option>, you can temporarily change any property specified in the + properties file. Since switching to local mode is required quite often, there's also a + shortcut: specifying</para> <synopsis format="linespecific">bin/client.sh -l</synopsis> - <para>is equivalent to the <option></option><command>-ouri=xmldb:exist://</command> option shown above.</para> - <para>If you have set a password for the admin user (as described in the <ulink url="security.xml">security</ulink> doc), you may have to authenticate yourself to the database. In this case, specify the <option>-u username</option> on the command line, e.g.</para> + <para>is equivalent to the <option/><command>-ouri=xmldb:exist://</command> option shown + above.</para> + <para>If you have set a password for the admin user (as described in the <ulink + url="security.xml">security</ulink> doc), you may have to authenticate yourself to the + database. In this case, specify the <option>-u username</option> on the command line, e.g.</para> <synopsis format="linespecific">bin/client.sh -l -u peter -P somepass</synopsis> - <para>If the <option>-P</option> password option is missing, the client will prompt for the password.</para> + <para>If the <option>-P</option> password option is missing, the client will prompt for the + password.</para> <note> - <para>The graphical user interface will always prompt for username and password unless you specify both on the command-line.</para> + <para>The graphical user interface will always prompt for username and password unless you + specify both on the command-line.</para> </note> </section> <section> <title>Storing documents</title> - <para>To store a set of documents, use the <option>-m</option> and <option>-p</option> parameters, e.g.</para> + <para>To store a set of documents, use the <option>-m</option> and <option>-p</option> + parameters, e.g.</para> <synopsis format="linespecific">bin/client.sh -m /db/shakespeare/plays -p /home/exist/xml/shakespeare</synopsis> - <para>The <option>-m</option> argument differs from the <option>-c</option> option, because it tells the client to implicitely create any missing collection. The <option>-p</option> parameter means that all of the following arguments should be interpreted as a list of paths to XML documents, i.e. you may specify more than one document or directory.</para> - <para>If the passed path denotes a directory, the client will try to store all documents in that directory to the database. However, it will not recurse into subdirectories. For this, you have to pass the <option>-d</option>. For example,</para> + <para>The <option>-m</option> argument differs from the <option>-c</option> option, because it + tells the client to implicitely create any missing collection. The <option>-p</option> + parameter means that all of the following arguments should be interpreted as a list of paths + to XML documents, i.e. you may specify more than one document or directory.</para> + <para>If the passed path denotes a directory, the client will try to store all documents in + that directory to the database. However, it will not recurse into subdirectories. For this, + you have to pass the <option>-d</option>. For example,</para> <synopsis format="linespecific">bin/client.sh -d -m /db/movies -p /home/exist/xml/movies</synopsis> - <para>will recurse into all directories below <filename moreinfo="none">/home/exist/xml/movies</filename>. For each subdirectory, a collection will be created below the <filename moreinfo="none">/db/movies</filename> root collection, i.e. you may use this option to recursively import an entire collection tree.</para> + <para>will recurse into all directories below <filename moreinfo="none" + >/home/exist/xml/movies</filename>. For each subdirectory, a collection will be created + below the <filename moreinfo="none">/db/movies</filename> root collection, i.e. you may use + this option to recursively import an entire collection tree.</para> <note> - <para> - eXist can also store binary resources in addition to XML files. The client thus tries to determine if the current file is XML or not. File <filename>mime-types.xml</filename> allows to associate : - <unorderedlist> - <listitem> a MIME type </listitem> - <listitem> an eXist type ("xml" or "binary") </listitem> - <listitem> a file extension </listitem> - </unorderedlist> - This is also used by the eXist servers . - For example to specify that .xmap extension is used for XML files you can specify it like this in mime-types.xml : - <programlisting> + <para> eXist can also store binary resources in addition to XML files. The client thus tries + to determine if the current file is XML or not. File <filename>mime-types.xml</filename> + allows to associate : <unorderedlist> + <listitem> a MIME type </listitem> + <listitem> an eXist type ("xml" or "binary") </listitem> + <listitem> a file extension </listitem> + </unorderedlist> This is also used by the eXist servers . For example to specify that + .xmap extension is used for XML files you can specify it like this in mime-types.xml : <programlisting> <![CDATA[ <mime-type name="text/xml" type="xml"> <description>XML document</description> @@ -149,53 +211,85 @@ </mime-type> ]]> </programlisting> - </para> - </note> + </para> + </note> </section> <section> <title>Removing Collections/Documents</title> - <para>The <option>-r</option> and <option>-R</option> parameters are used to remove a document or collection. <option>-r</option> removes a single document from the collection specified in the <option>-c</option> parameter. For example,</para> + <para>The <option>-r</option> and <option>-R</option> parameters are used to remove a document + or collection. <option>-r</option> removes a single document from the collection specified + in the <option>-c</option> parameter. For example,</para> <synopsis format="linespecific">bin/client.sh -c /db/shakespeare/plays -r hamlet.xml</synopsis> - <para>removes the document <filename moreinfo="none">hamlet.xml</filename> from the <filename moreinfo="none">/db/shakespeare/plays</filename> collection. To remove the entire <filename moreinfo="none">plays</filename> collection, use</para> + <para>removes the document <filename moreinfo="none">hamlet.xml</filename> from the <filename + moreinfo="none">/db/shakespeare/plays</filename> collection. To remove the entire + <filename moreinfo="none">plays</filename> collection, use</para> <synopsis format="linespecific">bin/client.sh -c /db/shakespeare -R plays</synopsis> </section> <section> <title>Executing Queries</title> - <para>To execute queries, use the <option>-x</option> parameter. This parameter accepts an optional argument, - which specifies the query to execute. However, passing XQuery on the command-line is a problem on many operating - systems, because the command shell may interprete whitespace characters as command separators. Thus, if no - argument is passed to <option>-x</option>, the client will try to read the query from standard input. For example, - on Unix you may do</para> + <para>To execute queries, use the <option>-x</option> parameter. This parameter accepts an + optional argument, which specifies the query to execute. However, passing XQuery on the + command-line is a problem on many operating systems, because the command shell may + interprete whitespace characters as command separators. Thus, if no argument is passed to + <option>-x</option>, the client will try to read the query from standard input. For + example, on Unix you may do</para> <synopsis format="linespecific">echo "//SPEECH[LINE &= 'love']" | bin/client.sh -x</synopsis> <para>Queries can also be read from a file. For example,</para> <synopsis>bin/client.sh -F samples/xquery/fibo.xq</synopsis> <para>executes the XQuery contained in <filename>fibo.xq</filename>.</para> - <para>There's an additional parameter to be used in conjunction with <option>-x</option>: <option>-n</option> - specifies the number of hits that should be printed to the standard output.</para> + <para>There's an additional parameter to be used in conjunction with <option>-x</option>: + <option>-n</option> specifies the number of hits that should be printed to the standard + output.</para> </section> <section> <title>XUpdate</title> - <para>You may also update a stored document or multiple documents by passing an XUpdate file on the command-line. For example:<abbrev></abbrev><synopsis>bin/client.sh -c /db/test -f address.xml -X samples/xupdate/xupdate.xml</synopsis>This will apply the modifications described in <abbrev></abbrev><filename>samples/xupdate/xupdate.xml</filename> to the document <filename>address.xml</filename> in collection <filename>/db/test</filename>. If you skip the <option>-f</option> option, the modifications will be applied to all documents in the collection.</para> + <para>You may also update a stored document or multiple documents by passing an XUpdate file + on the command-line. For + example:<abbrev/><synopsis>bin/client.sh -c /db/test -f address.xml -X samples/xupdate/xupdate.xml</synopsis>This + will apply the modifications described in + <abbrev/><filename>samples/xupdate/xupdate.xml</filename> to the document + <filename>address.xml</filename> in collection <filename>/db/test</filename>. If you skip + the <option>-f</option> option, the modifications will be applied to all documents in the + collection.</para> </section> <section> <title>Using an Alternate Database Configuration</title> - <para>If you start the client with option <option>-l</option> or <command>-ouri=xmldb:exist://</command>, it will launch its own embedded database instance. By default, the configuration for the database instance is read from file <filename>conf.xml</filename> located in EXIST_HOME.</para> - <para>However, you may want to use another database installation, stored in an alternate location. To make this as simple as possible, option <option>-C</option> is provided. The parameter expects a configuration file as argument, for example:</para> + <para>If you start the client with option <option>-l</option> or + <command>-ouri=xmldb:exist://</command>, it will launch its own embedded database instance. + By default, the configuration for the database instance is read from file + <filename>conf.xml</filename> located in EXIST_HOME.</para> + <para>However, you may want to use another database installation, stored in an alternate + location. To make this as simple as possible, option <option>-C</option> is provided. The + parameter expects a configuration file as argument, for example:</para> <synopsis>bin/client.sh -C /home/exist/test/conf.xml</synopsis> - <para>This will temporarily launch a new database instance, whose configuration is read from the provided file. As is obvious, option <option>-C</option> implies option <option>-l</option>.</para> + <para>This will temporarily launch a new database instance, whose configuration is read from + the provided file. As is obvious, option <option>-C</option> implies option + <option>-l</option>.</para> </section> -<section> - <title>Backup/Restore on the Command-Line</title> - <para>Release 0.9.1 contains a simple backup/restore client, launched through the <command moreinfo="none">bin/backup.sh</command> or <command moreinfo="none">bin\backup.bat</command> scripts. The client allows to backup any local or remote collection available through the XML:DB API. To backup a collection, use for example</para> - <synopsis format="linespecific">bin/backup.sh -d backup -u admin -p somepass -b /db -ouri=xmldb:exist://</synopsis> - <para>This will launch a database instance in local mode and backup the <filename moreinfo="none">/db</filename> root collection. A hierarchy of directories will be created below the <filename moreinfo="none">backup</filename> directory. The directories correspond to the hierarchy of collections found in the database.</para> - <para>The tool will also backup user permissions for each collection and document. This information is written into the special file <filename moreinfo="none">__contents__.xml</filename> placed in each subdirectory. You need these files to restore the database contents.</para> - <para>To restore the backuped data, use the <option>-r</option> option and pass one of the <filename moreinfo="none">__contents__.xml</filename> files as an argument. The tool will restore all files and collections described in the XML file, for example,</para> - <synopsis format="linespecific">bin/backup.sh -r backup/db/__contents__.xml -ouri=xmldb:exist://</synopsis> - <para>will restore the entire database, while</para> - <synopsis format="linespecific">bin/backup.sh -r backup/db/shakespeare/__contents__.xml -ouri=xmldb:exist://</synopsis> - <para>restores only the <filename moreinfo="none">/db/shakespeare</filename> collection.</para> - <para>Please note that users and groups are defined in the database collection <filename moreinfo="none">/db/system</filename>. This collection will thus be restored first.</para> -</section> -</chapter> + <section> + <title>Backup/Restore on the Command-Line</title> + <para>Release 0.9.1 contains a simple backup/restore client, launched through the <command + moreinfo="none">bin/backup.sh</command> or <command moreinfo="none" + >bin\backup.bat</command> scripts. The client allows to backup any local or remote + collection available through the XML:DB API. To backup a collection, use for example</para> + <synopsis format="linespecific">bin/backup.sh -d backup -u admin -p somepass -b /db -ouri=xmldb:exist://</synopsis> + <para>This will launch a database instance in local mode and backup the <filename + moreinfo="none">/db</filename> root collection. A hierarchy of directories will be created + below the <filename moreinfo="none">backup</filename> directory. The directories correspond + to the hierarchy of collections found in the database.</para> + <para>The tool will also backup user permissions for each collection and document. This + information is written into the special file <filename moreinfo="none" + >__contents__.xml</filename> placed in each subdirectory. You need these files to restore + the database contents.</para> + <para>To restore the backuped data, use the <option>-r</option> option and pass one of the + <filename moreinfo="none">__contents__.xml</filename> files as an argument. The tool will + restore all files and collections described in the XML file, for example,</para> + <synopsis format="linespecific">bin/backup.sh -r backup/db/__contents__.xml -ouri=xmldb:exist://</synopsis> + <para>will restore the entire database, while</para> + <synopsis format="linespecific">bin/backup.sh -r backup/db/shakespeare/__contents__.xml -ouri=xmldb:exist://</synopsis> + <para>restores only the <filename moreinfo="none">/db/shakespeare</filename> collection.</para> + <para>Please note that users and groups are defined in the database collection <filename + moreinfo="none">/db/system</filename>. This collection will thus be restored first.</para> + </section> + </chapter> </book> Modified: trunk/eXist-1.0/webapp/configuration.xml =================================================================== --- trunk/eXist-1.0/webapp/configuration.xml 2006-06-29 20:45:51 UTC (rev 3760) +++ trunk/eXist-1.0/webapp/configuration.xml 2006-06-30 18:26:01 UTC (rev 3761) @@ -1,7 +1,7 @@ <?xml version="1.0" encoding="UTF-8"?> <book xmlns:ci="http://apache.org/cocoon/include/1.0"> <bookinfo> - <graphic fileref="logo.jpg" /> + <graphic fileref="logo.jpg"/> <title>Open Source Native XML Database</title> @@ -26,611 +26,583 @@ </author> </bookinfo> - <ci:include src="sidebar.xml" /> + <ci:include src="sidebar.xml"/> <chapter> <title>Server Configuration</title> <section> <title>Overview</title> - - <para>The central configuration file for - <application>eXist</application> is called - <filename>conf.xml</filename>. By default, if you run the standalone - database server (see <ulink url="deployment.xml">Deployment - Options</ulink>), the file will be loaded from the root directory of the - distribution (as specified by the system property - <option>exist.home</option>). If eXist is running in a servlet-context, - <filename moreinfo="none">conf.xml</filename> is read from the <filename - moreinfo="none">WEB-INF</filename> directory of the web - application.</para> - - <para>If you run the server in standalone mode, it will also read - server.xml for configuration values. This file exists in the home - directory of eXist and is used to control the jetty server (e.g. ports, - etc.) and the servlets (e.g. rest, WebDAV, etc.).</para> - - <para>Why two different locations? If eXist is deployed as part of a web - application, i.e. packaged in a <filename>.war</filename> file, it - usually has no access to files outside of the context it is running in. - That's why the configuration is read from <filename>WEB-INF</filename> - in this case.</para> + <para>This section deals with the configuration of the eXist server. The main configuration + file for <application>eXist</application> is called <filename>conf.xml</filename>, which is + loaded from different directories depending on the server set-up (see <ulink + url="deployment.xml">Server Deployment</ulink> for more information).</para> + <para>Specifically, if you run a <emphasis>standalone</emphasis> database server, the + <filename>conf.xml</filename> file located in the root directory of the distribution (as + specified by the system property <option>exist.home</option>) will be loaded by default. + Note as well that in standalone mode, the server reads <filename>server.xml</filename> for + its configuration values. This file resides in eXist's root directory and is used to control + the Jetty server (e.g. port settings), URL forwarding, and the servlets (i.e. WebDAV, + XML-RPC and REST services). On the other hand, if eXist is running in a servlet-context, + <filename moreinfo="none"> conf.xml</filename> is read from the <filename moreinfo="none" + >WEB-INF</filename> directory of the web application.</para> + <para>Why is the configuration file placed in two separate locations? The reason is that eXist + normally has no access to files outside the context in which it is running when it is + deployed as part of a web application - i.e. packaged in a <filename>.war</filename> file. + Therefore, when eXist is deployed in this way, the configuration is read from the + <filename>WEB-INF</filename> directory.</para> </section> <section> - <title>eXist Configuration with conf.xml</title> - - <para><filename moreinfo="none">conf.xml</filename> basically contains - three sections:</para> - + <title>eXist Configuration: Editing conf.xml</title> + <para>The configuration file <filename moreinfo="none">conf.xml</filename> can be divided into + four sections with the following elements:</para> <variablelist> <varlistentry> <term><db-connection></term> - <listitem> - <para>Configures the storage backend.</para> + <para>Configures the storage back-end.</para> </listitem> </varlistentry> - <varlistentry> <term><serializer></term> - <listitem> - <para>Default settings for the serializer.</para> + <para>Default settings for the serializer (external data representation).</para> </listitem> </varlistentry> - <varlistentry> <term><indexer></term> - <listitem> - <para>Controls the indexing process</para> + <para>Controls the indexing process.</para> </listitem> </varlistentry> - <varlistentry> <term><xupdate></term> - <listitem> - <para>Configuration options related to XUpdate processing</para> + <para>Configuration options related to XUpdate processing.</para> </listitem> </varlistentry> </variablelist> - <para>The following sections describe each of these settings:</para> + <para>The following sections describe the attributes and child elements of the above elements.</para> <section> - <title>db-connection</title> + <title><db-connection></title> + <para>This element contains basic default storage settings for eXist, including memory and + system limits. Only one <sgmltag>db-connection</sgmltag> should be specified. An example + configuration for the native back-end is shown below:</para> - <para>This sections configures the storage backend used by eXist. Only - one <sgmltag>db-connection</sgmltag> should be specified. An example - configuration for the native backend is shown below:</para> - <example> - <title><db-connection> entry</title> + <title>Basic <db-connection> Entry</title> - <programlisting format="linespecific"> -<db-connection database="native" files="data" cacheSize="48M" free_mem_min="5" - pageSize="4096"> - <pool min="1" max="15" sync-period="240000" wait-before-shutdown="60000"/> - <recovery enabled="yes" sync-on-commit="no" group-commit="no" - size="100M" journal-dir="webapp/WEB-INF/data"/> - <watchdog query-timeout="-1" output-size-limit="10000"/> - <default-permissions collection="0775" resource="0775"/> -</db-connection> + <programlisting format="linespecific"><![CDATA[<db-connection database="native" files="data" + cacheSize="48M" free_mem_min="5" pageSize="4096"> + <pool min="1" max="15" sync-period="240000" wait-before-shutdown="60000"/> + <recovery enabled="yes" sync-on-commit="no" group-commit="no" size="100M" + journal-dir="webapp/WEB-INF/data"/> + <watchdog query-timeout="-1" output-size-limit="10000"/> + <default-permissions collection="0775" resource="0775"/> +</db-connection>]]> </programlisting> </example> <section> - <title>database</title> - - <para>The <option>database</option>-attribute selects a database - backend. Since the relational backends are no longer supported, - "native" and "native_cluster" are currently the only backend - available.</para> + <title><db-connection> Attributes</title> + <variablelist> + <varlistentry> + <term>database</term> + <listitem> + <para>This attribute selects a database system type. Since relational database + back-ends are no longer supported by the current release of eXist, only + "<option>native</option>" and "<option>native_cluster</option>" are + available.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>files</term> + <listitem> + <para>This attribute specifies the directory where the native back-end will keep its + database files, and so it is necessary that this directory exists. If a relative + path is specified, it will be based on the root directory as defined in the + <option>exist.home</option> system property. If this data directory does not + have write permissions (see <ulink url="security.xml"> User Authentication and + Access Control</ulink>), eXist will internally switch to <emphasis>read-only + mode</emphasis> such that any attempt to change the database will throw an + exception.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>cacheSize</term> + <listitem> + <para>This attribute sets the maximum amount of main memory used by all page buffers + (i.e. assuming all page buffers are at full capacity). The database uses this + parameter to calculate the maximum size of each internal cache. You can increase + this value if your system allows for greater memory use.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>pageSize</term> + <listitem> + <para>This specifies the number of bytes used for internal data and B-tree pages. + This should be equal to or a multiple of the page size used by the filesystem + (usually a multiple of 4096).</para> + </listitem> + </varlistentry> + <varlistentry> + <term>free_mem_min</term> + <listitem> + <para>This attribute sets the amount of free memory (expressed as a percentage of + the total memory) available for the Java virtual machine, beyond which eXist will + begin to flush its internal caches. During indexing, eXist caches index data in + memory to avoid frequent disk look-ups (see <ulink url="indexing.xml">Configuring + Database Indexes</ulink>). If the amount of free memory drops below the defined + limit, eXist will write all cached data to disk and trigger the garbage + collection.</para> + <para>If your database files are relatively large (i.e. > 50MB) or if you + experience <option>OutOfMemory</option> errors during indexing, you may consider + increasing this setting to > 10%.</para> + </listitem> + </varlistentry> + </variablelist> </section> <section> - <title>files</title> - - <para>The <option>files</option> attribute specifies the directory - where the native backend will keep its database files. The directory - should exist. If the specified path is relative, it will be relative - to the directory defined by the <option>exist.home</option> system - property.</para> - - <para>If the data directory is not writable, eXist will internally - switch to <emphasis>read-only mode</emphasis>, which means that any - attempt to change the database will throw an exception.</para> + <title><pool></title> + <para>These settings control the internal database connection pool.</para> + <variablelist> + <title><pool> Attributes</title> + <varlistentry> + <term>min | max</term> + <listitem> + <para>These options specify the minimum and maximum size of the connection pool. + This pool restricts the number of parallel (basic) operations that can be executed + by the database. Settings should be somewhere between 1 and 20. (Please note that + this has nothing to do with the HTTP and XMLRPC server settings - these servers + have their own connection pools.)</para> + </listitem> + </varlistentry> + <varlistentry> + <term>sync-period</term> + <listitem> + <para>This option defines how often the database will flush its internal buffers to + disk (in milliseconds). The sync-thread will interrupt normal database operation + after the specified time and write all dirty pages to disk.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>wait-before-shutdown</term> + <listitem> + <para>This option specifies the maximum amount of time (in milliseconds) that the + database will allow for any running processes to complete upon database + shutdown.</para> + </listitem> + </varlistentry> + </variablelist> </section> <section> - <title>cacheSize</title> - - <para>This setting controls the maximum amount of main memory - consumed by all page buffers, i.e. the amount of memory used if all - page buffers were completely full. The database uses this parameter - to calculate the maximum size of each of the internal caches. - Increase this parameter if you have enough main memory - available.</para> + <title><recovery></title> + <para>This element configures the journaling and recovery of the database. With recovery + enabled, the database is able to recover from an unclean database shutdowns due to, for + example, power failures, OS reboots, and hanging processes. For this to work correctly, + all database operations must be logged to a journal file. The location, size and other + parameters for this file can be set using the <sgmltag>recovery</sgmltag> element.</para> + <variablelist> + <title><recovery> Attributes</title> + <varlistentry> + <term>enabled</term> + <listitem> + <para>If this attribute is set to <option>yes</option>, automatic recovery is + enabled.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>size</term> + <listitem> + <para>This attributes sets the maximum allowed size of the journal file. Once the + journal reaches this limit, a checkpoint will be triggered and the journal will be + cleaned. However, the database waits for running transactions to return before + processing this checkpoint. In the event one of these transactions writes a lot of + data to the journal file, the file will grow until the transaction has completed. + Hence, the size limit is not enforced in all cases.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>journal-dir</term> + <listitem> + <para>This attribute sets the directory where journal files are to be written. If no + directory is specified, the default path is to the <filename>data</filename> + directory.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>sync-on-commit</term> + <listitem> + <para>This attribute determines whether or not to protect the journal during + operating system failures. That is, it determines whether the database forces a + file-sync on the journal after every commit. If this attribute is set to + "<option>yes</option>", the journal is protected against operating system + failures. However, this will slow performance - especially on Windows systems. If + set to "<option>no</option>", eXist will rely on the operating system to flush out + the journal contents to disk. In the worst case scenario, in which there is a + complete system failure, some committed transactions might not have yet been + written to the journal, and so will be rolled back.</para> + </listitem> + </varlistentry> + </variablelist> </section> <section> - <title>pageSize</title> - - <para>Specifies the number of bytes used for internal data and btree - pages. This should be equal to or a multiple of the page size used - by the filesystem (usually a multiple of 4096).</para> + <title><watchdog></title> + <para>This is the global configuration for the <emphasis>query watchdog</emphasis>. The + watchdog monitors all query processes, and can terminate any long-running queries if + they exceed one of the predefined limits. These limits are as follows:</para> + <variablelist> + <title><watchdog> Attributes</title> + <varlistentry> + <term>query-timeout</term> + <listitem> + <para>This attribute sets the maximum amount of time (expressed in milliseconds) + that the query can take before it is killed..</para> + </listitem> + </varlistentry> + <varlistentry> + <term>output-size-limit</term> + <listitem> + <para>This attribute limits the size of XML fragments constructed using XQuery, and + thus sets the maximum amount of main memory a query is allowed to use. This limit + is expressed as the maximum number of nodes allowed for an in-memory DOM tree. The + purpose of this option is to avoid memory shortages on the server in cases where + users are allowed to run queries that produce very large output fragments.</para> + </listitem> + </varlistentry> + </variablelist> </section> <section> - <title>free_mem_min</title> - - <para>This option specifies the amount of free memory (in percent) - which should be available to the Java virtual machine before eXist - starts to flush its internal caches. During indexing, eXist caches - index data in memory to avoid frequent disk lookups. If the amount - of free memory drops below the defined limit, eXist will write all - cached data to disk and trigger the garbage collection.</para> - - <para>If your files are rather large (> 50MB) or if you - experience OutOfMemory- Errors during indexing, you may consider to - increase this setting to > 10%.</para> + <title><default-permissions></title> + <para>Specifies the default permissions for all resources and collections in eXist (see + <ulink url="security.xml"> User Authentication and Access Control</ulink>). When this + is not configured, the default "<option>mod</option>" (similar to the Unix "chmod" + command) is set to <option>0775</option> in the <option>resources</option> and + <option>collections</option> attributes. A different default value may be set for a + database instance, and local overrides are also possible.</para> </section> <section> - <title>pool</title> - - <para>These settings control the internal database connection pool. - Options <option>min</option> and <option>max</option> specify the - minimum and maximum size of the connection pool. The connection pool - restricts the number of parallel (basic) operations that can be - executed by the database. Settings should be somewhere between 1 and - 20.</para> - - <para>Please note that this has nothing to do with the HTTP and - XMLRPC server settings. Those servers have their own connection - pools.</para> - - <para>Option <option>sync-period</option> defines how often the - database will flush its internal buffers to disk. The sync thread - will interrupt normal database operation after the specified number - of milliseconds and write all dirty pages to disk.</para> - - <para><option>wait-before-shutdown</option> specifies the maximum - amount of time (in milliseconds) the database will wait for running - processes to complete upon database shutdown.</para> + <title><security></title> + <para>The <sgmltag>security</sgmltag> element in the <sgmltag>db-connection</sgmltag> node + is used to select the security manager Class and control the database of users and + groups.</para> + <variablelist> + <title><security> Attributes</title> + <varlistentry> + <term>class</term> + <listitem> + <para>This attribute is <emphasis>required</emphasis>, and specifies a Java class + name used to implement the <code>org.exist.security.SecurityManager</code> + interface, as in the following example:</para> + <example> + <title><security> <emphasis>class</emphasis> Attribute (LDAP)</title> + <screen><security class="org.exist.security.LDAPSecurityManager" /></screen> + </example> + <para>eXist is distributed with the following built-in security manager + implementations:</para> + <variablelist> + <varlistentry> + <term>org.exist.security.XMLSecurityManager</term> + <listitem> + <para>Stores the user information in the database. This is the default manager + if the <sgmltag>security</sgmltag> element is not included in + <sgmltag>db-connection</sgmltag>.</para> + </listitem> + </varlistentry> + <varlistentry> + <term>org.exist.security.LDAPSecurityManager</term> + <listitem> + <para>Retrieves the user and groups from the LDAP database. This requires + addition configuration parameters which are described in the <ulink + url="ldap-security.xml">LDAP Security Manager</ulink> + documentation.</para> + </listitem> + </varlistentry> + </variablelist> + </listitem> + </varlistentry> + <varlistentry> + <term>password-encoding</term> + <listitem> + <para>Password encoding can be set to one of the following types:</para> + <orderedlist> + <listitem> + <para><option>plain</option> - Applies plain encryption.</para> + </listitem> + <listitem> + <para><option>md5</option> (default) - Applies the MD5 algorithm to encrypt + passwords.</para> + </listitem> + <listitem> + <para><option>simple-md5</option> - Applies a simplified MD5 algorithm to + encrypt passwords.</para> + </listitem> + </orderedlist> + </listitem> + </varlistentry> + <varlistentry> + <term>password-realm</term> + <listitem> + <para>The realm to use for basic auth or http-digest password challenges.</para> + </listitem> + </varlistentry> + </variablelist> </section> + </section> - <section> - <title>recovery</title> + <section> + <title><serializer></title> - <para>Configures journalling and recovery: with recovery enabled, - the database can recover from an unclean database shutdown caused by - a power failure, OS reboot, hanging processes etc. For this to work, - all db operations have to be logged to a journal file. The settings - here allow to configure the location of the journal file, its size - and other parameters.</para> + <para>The serializer is responsible for serializing XML documents or document fragments back + into XML. This configuration element defines default settings for various parameters, + which can also be specified programmatically.</para> - <itemizedlist> - <listitem> - <para><option>enabled</option>: set to yes to enable automatic - recovery.</para> - </listitem> - - <listitem> - <para><option>size</option>: allowed maximum size of the journal - file. Once the journal reaches the limit, a checkpoint will be - triggered and the journal will be cleaned. However, the database - needs to wait for running transactions to return before it can - process the checkpoint. If one of these transactions writes a - lot of data, the journal file will grow until the transaction - completed. This means that the size limit is not enforced in all - cases.</para> - </listitem> - - <listitem> - <para><option>journal-dir</option>: the directory where journal - files will be written. Defaults to the data directory if not - specified.</para> - </listitem> - - <listitem> - <para><option>sync-on-commit</option>: should the database force - a file sync on the journal after every commit? Setting this to - ... [truncated message content] |
|
From: <ale...@us...> - 2006-06-29 20:45:53
|
Revision: 3760 Author: alexmilowski Date: 2006-06-29 13:45:51 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3760&view=rev Log Message: ----------- Fixed null pointer exception on unknown mime type. Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java Modified: trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java 2006-06-29 19:50:18 UTC (rev 3759) +++ trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java 2006-06-29 20:45:51 UTC (rev 3760) @@ -120,6 +120,9 @@ charset = param.substring(equals+1).trim(); } } + if (mime==null) { + mime = MimeType.BINARY_TYPE; + } } Collection collection = broker.getCollection(pathUri); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <di...@us...> - 2006-06-29 19:50:27
|
Revision: 3759 Author: dizzzz Date: 2006-06-29 12:50:18 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3759&view=rev Log Message: ----------- Add download link results for input w3c xslt script Modified Paths: -------------- trunk/eXist-1.0/webapp/xqts/report.xql Modified: trunk/eXist-1.0/webapp/xqts/report.xql =================================================================== --- trunk/eXist-1.0/webapp/xqts/report.xql 2006-06-29 18:39:05 UTC (rev 3758) +++ trunk/eXist-1.0/webapp/xqts/report.xql 2006-06-29 19:50:18 UTC (rev 3759) @@ -88,6 +88,7 @@ <li><a href="../index.xml#download">Download</a></li> <li><a href="http://wiki.exist-db.org">Wiki</a></li> <li><a href="../examples.xml">Demo</a></li> + <li><a href="collectresults.xql">Results</a></li> </ul> <h1>XQuery Test Suite - Test Reports</h1> </div> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-29 18:57:23
|
Revision: 3758 Author: alexmilowski Date: 2006-06-29 11:39:05 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3758&view=rev Log Message: ----------- Added introspection to the atom servlet Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/http/AtomServlet.java Added Paths: ----------- trunk/eXist-1.0/src/org/exist/atom/modules/Introspect.java trunk/eXist-1.0/src/org/exist/atom/modules/introspect.xq Property Changed: ---------------- trunk/eXist-1.0/src/org/exist/atom/http/ trunk/eXist-1.0/src/org/exist/atom/modules/ Property changes on: trunk/eXist-1.0/src/org/exist/atom/http ___________________________________________________________________ Name: svn:ignore + AtomServlet.java~ HttpResponseMessage.java~ HttpRequestMIMEMessage_1.java~ HttpRequestMessage.java~ HttpResponseMIMEMessage.java~ HttpRequestMIMEMessage.java~ EXistServlet.java~ Modified: trunk/eXist-1.0/src/org/exist/atom/http/AtomServlet.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/http/AtomServlet.java 2006-06-29 17:45:59 UTC (rev 3757) +++ trunk/eXist-1.0/src/org/exist/atom/http/AtomServlet.java 2006-06-29 18:39:05 UTC (rev 3758) @@ -39,6 +39,7 @@ import org.exist.atom.AtomModule; import org.exist.atom.modules.AtomFeeds; import org.exist.atom.modules.AtomProtocol; +import org.exist.atom.modules.Introspect; import org.exist.atom.modules.Query; import org.exist.atom.modules.Topics; import org.exist.http.BadRequestException; @@ -198,6 +199,9 @@ Query query = new Query(); modules.put("query",query); query.init(new ModuleContext(config,"query")); + Introspect introspect = new Introspect(); + modules.put("introspect",introspect); + introspect.init(new ModuleContext(config,"introspect")); // XML lib checks.... Property changes on: trunk/eXist-1.0/src/org/exist/atom/modules ___________________________________________________________________ Name: svn:ignore + AtomProtocol_1.java~ AtomFeeds.java~ AtomProtocol.java~ AtomModuleBase.java~ Added: trunk/eXist-1.0/src/org/exist/atom/modules/Introspect.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/Introspect.java (rev 0) +++ trunk/eXist-1.0/src/org/exist/atom/modules/Introspect.java 2006-06-29 18:39:05 UTC (rev 3758) @@ -0,0 +1,126 @@ +/* + * AtomProtocol.java + * + * Created on June 16, 2006, 11:39 AM + * + * (C) R. Alexander Milowski al...@mi... + */ + +package org.exist.atom.modules; + +import java.io.IOException; +import java.io.OutputStreamWriter; +import java.io.Writer; +import java.net.URL; +import java.util.Properties; +import org.apache.log4j.Logger; +import org.exist.EXistException; +import org.exist.atom.Atom; +import org.exist.atom.IncomingMessage; +import org.exist.atom.OutgoingMessage; +import org.exist.collections.Collection; +import org.exist.http.BadRequestException; +import org.exist.http.NotFoundException; +import org.exist.security.PermissionDeniedException; +import org.exist.security.xacml.AccessContext; +import org.exist.source.URLSource; +import org.exist.storage.DBBroker; +import org.exist.storage.serializers.Serializer; +import org.exist.util.serializer.SAXSerializer; +import org.exist.util.serializer.SerializerPool; +import org.exist.xmldb.XmldbURI; +import org.exist.xquery.CompiledXQuery; +import org.exist.xquery.XPathException; +import org.exist.xquery.XQuery; +import org.exist.xquery.XQueryContext; +import org.exist.xquery.value.Sequence; +import org.xml.sax.SAXException; + +/** + * + * @author R. Alexander Milowski + */ +public class Introspect extends AtomModuleBase implements Atom { + + protected final static Logger LOG = Logger.getLogger(Topics.class); + + URL getIntrospectQueryURL; + URLSource getIntrospectQuerySource; + + public Introspect() { + getIntrospectQueryURL = getClass().getResource("introspect.xq"); + getIntrospectQuerySource = new URLSource(getIntrospectQueryURL); + } + + public void doGet(DBBroker broker,IncomingMessage request,OutgoingMessage response) + throws BadRequestException,PermissionDeniedException,NotFoundException,EXistException + { + + Collection collection = broker.getCollection(XmldbURI.create(request.getPath())); + if (collection == null) { + throw new BadRequestException("Collection "+request.getPath()+" does not exist."); + } + + XQuery xquery = broker.getXQueryService(); + CompiledXQuery getIntrospectQuery = xquery.getXQueryPool().borrowCompiledXQuery(broker,getIntrospectQuerySource); + + XQueryContext context; + if (getIntrospectQuery==null) { + context = xquery.newContext(AccessContext.REST); + try { + getIntrospectQuery = xquery.compile(context, getIntrospectQuerySource); + } catch (XPathException ex) { + throw new EXistException("Cannot compile xquery "+getIntrospectQueryURL,ex); + } catch (IOException ex) { + throw new EXistException("I/O exception while compiling xquery "+getIntrospectQueryURL,ex); + } + } else { + context = getIntrospectQuery.getContext(); + } + try { + context.setStaticallyKnownDocuments(new XmldbURI[] { XmldbURI.create(request.getPath()).append(AtomProtocol.FEED_DOCUMENT_NAME) }); + context.declareVariable("path",request.getPath()); + } catch (XPathException ex) { + throw new EXistException("Error in setting up the context for "+getIntrospectQueryURL,ex); + } + + try { + Sequence resultSequence = xquery.execute(getIntrospectQuery, null); + if (resultSequence.isEmpty()) { + throw new BadRequestException("No topic was found."); + } + String charset = getContext().getDefaultCharset(); + response.setStatusCode(200); + response.setContentType("application/atomserv+xml; charset="+charset); + Serializer serializer = broker.getSerializer(); + serializer.reset(); + try { + Writer w = new OutputStreamWriter(response.getOutputStream(),charset); + SAXSerializer sax = (SAXSerializer) SerializerPool.getInstance().borrowObject(SAXSerializer.class); + Properties outputProperties = new Properties(); + sax.setOutput(w, outputProperties); + serializer.setProperties(outputProperties); + serializer.setSAXHandlers(sax, sax); + + serializer.toSAX(resultSequence, 1, 1, false); + + SerializerPool.getInstance().returnObject(sax); + w.flush(); + w.close(); + } catch (IOException ex) { + LOG.fatal("Cannot read resource "+request.getPath(),ex); + throw new EXistException("I/O error on read of resource "+request.getPath(),ex); + } catch (SAXException saxe) { + LOG.warn(saxe); + throw new BadRequestException("Error while serializing XML: " + saxe.getMessage()); + } + resultSequence.itemAt(0); + } catch (XPathException ex) { + throw new EXistException("Cannot execute xquery "+getIntrospectQueryURL,ex); + } finally { + xquery.getXQueryPool().returnCompiledXQuery(getIntrospectQuerySource, getIntrospectQuery); + } + + } + +} Added: trunk/eXist-1.0/src/org/exist/atom/modules/introspect.xq =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/introspect.xq (rev 0) +++ trunk/eXist-1.0/src/org/exist/atom/modules/introspect.xq 2006-06-29 18:39:05 UTC (rev 3758) @@ -0,0 +1,17 @@ +declare namespace atom="http://www.w3.org/2005/Atom"; +<service xmlns="http://purl.org/atom/app#"> + <workspace title="{/atom:feed/atom:title}"> + { + "
", + let $current := substring-before(base-uri(/atom:feed),'/.feed.atom'), + $current-path := substring-after($current,'/db') + for $i in (collection($current)/atom:feed) + let $path := substring-after(substring-before(base-uri($i),'/.feed.atom'),'/db') + return ( <collection title="{$i/atom:title}" href="/atom/edit{$path}"> + <accept>text/*,iamge/*,application/*</accept> + </collection>, + "
" + ) + } + </workspace> +</service> \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-29 17:46:01
|
Revision: 3757 Author: alexmilowski Date: 2006-06-29 10:45:59 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3757&view=rev Log Message: ----------- Added fix for comparison on null strings. Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/util/Collations.java Modified: trunk/eXist-1.0/src/org/exist/util/Collations.java =================================================================== --- trunk/eXist-1.0/src/org/exist/util/Collations.java 2006-06-29 17:18:45 UTC (rev 3756) +++ trunk/eXist-1.0/src/org/exist/util/Collations.java 2006-06-29 17:45:59 UTC (rev 3757) @@ -122,7 +122,7 @@ public final static int compare(Collator collator, String s1, String s2) { if (collator == null) - return s1.compareTo(s2); + return s1==null ? (s2==null ? 0 : -1) : s1.compareTo(s2); else return collator.compare(s1, s2); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <br...@us...> - 2006-06-29 17:18:57
|
Revision: 3756 Author: brihaye Date: 2006-06-29 10:18:45 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3756&view=rev Log Message: ----------- Added a work-around to fix a bug when evaluating numeric predicates on virtual node sets. Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/xquery/Predicate.java Modified: trunk/eXist-1.0/src/org/exist/xquery/Predicate.java =================================================================== --- trunk/eXist-1.0/src/org/exist/xquery/Predicate.java 2006-06-29 17:08:34 UTC (rev 3755) +++ trunk/eXist-1.0/src/org/exist/xquery/Predicate.java 2006-06-29 17:18:45 UTC (rev 3756) @@ -297,11 +297,28 @@ case Constants.DESCENDANT_SELF_AXIS: case Constants.DESCENDANT_ATTRIBUTE_AXIS: { + + NodeSet outerNodeSet; + + //Ugly and costly processing of VirtualNodeSEts + //TODO : CORRECT THIS !!! + + if (outerSequence instanceof VirtualNodeSet) { + + outerNodeSet = new ArraySet(outerSequence.getLength()); + for (int i = 0 ; i < outerSequence.getLength() ; i++) { + outerNodeSet.add(outerSequence.itemAt(i)); + } + } else outerNodeSet = outerSequence.toNodeSet(); + + //Comment the line below if you have uncommented the lines above :-) + //TODO: in some cases, especially with in-memory nodes, //outerSequence.toNodeSet() will generate a document //which will be different from the one(s) in contextSet //ancestors will thus be empty :-( - NodeSet outerNodeSet = outerSequence.toNodeSet(); + if (outerSequence instanceof VirtualNodeSet) + ((VirtualNodeSet)outerSequence).realize(); Sequence ancestors = contextSet.selectAncestorDescendant(outerNodeSet, NodeSet.ANCESTOR, true, getExpressionId()); if (contextSet.getDocumentSet().intersection(outerNodeSet.getDocumentSet()).getLength() == 0) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-29 17:08:37
|
Revision: 3755 Author: alexmilowski Date: 2006-06-29 10:08:34 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3755&view=rev Log Message: ----------- Switched to using JUG for UUID generation for JDK 1.4 compatibility. Note: standalone now has a dependency on jug-lgpl-*.jar Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/modules/AtomFeeds.java trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java trunk/eXist-1.0/src/org/exist/start/start.config Modified: trunk/eXist-1.0/src/org/exist/atom/modules/AtomFeeds.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/AtomFeeds.java 2006-06-29 11:00:27 UTC (rev 3754) +++ trunk/eXist-1.0/src/org/exist/atom/modules/AtomFeeds.java 2006-06-29 17:08:34 UTC (rev 3755) @@ -17,7 +17,6 @@ import java.io.OutputStreamWriter; import java.io.Writer; import java.util.Date; -import java.util.UUID; import javax.servlet.http.HttpServletResponse; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; Modified: trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java 2006-06-29 11:00:27 UTC (rev 3754) +++ trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java 2006-06-29 17:08:34 UTC (rev 3755) @@ -18,7 +18,6 @@ import java.util.Date; import java.util.Iterator; import java.util.List; -import java.util.UUID; import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.parsers.ParserConfigurationException; @@ -52,6 +51,8 @@ import org.exist.util.MimeTable; import org.exist.util.MimeType; import org.exist.xmldb.XmldbURI; +import org.safehaus.uuid.UUID; +import org.safehaus.uuid.UUIDGenerator; import org.w3c.dom.Document; import org.w3c.dom.Element; import org.w3c.dom.Node; @@ -155,7 +156,7 @@ DocumentImpl feedDoc = null; TransactionManager transact = broker.getBrokerPool().getTransactionManager(); Txn transaction = transact.beginTransaction(); - String id = "urn:uuid:"+UUID.randomUUID(); + String id = "urn:uuid:"+UUIDGenerator.getInstance().generateRandomBasedUUID(); String currentDateTime = toXSDDateTime(new Date()); Element publishedE = DOM.replaceTextElement(root,Atom.NAMESPACE_STRING,"published",currentDateTime,true,true); DOM.replaceTextElement(root,Atom.NAMESPACE_STRING,"updated",currentDateTime,true,true); @@ -234,7 +235,7 @@ collection = broker.getOrCreateCollection(transaction,pathUri); broker.saveCollection(transaction, collection); } - UUID id = UUID.randomUUID(); + UUID id = UUIDGenerator.getInstance().generateRandomBasedUUID(); String currentDateTime = toXSDDateTime(new Date()); DOM.replaceTextElement(root,Atom.NAMESPACE_STRING,"updated",currentDateTime,true); DOM.replaceTextElement(root,Atom.NAMESPACE_STRING,"id","urn:uuid:"+id,true); @@ -797,7 +798,7 @@ throws ParserConfigurationException { - String id = "urn:uuid:"+UUID.randomUUID(); + String id = "urn:uuid:"+UUIDGenerator.getInstance().generateRandomBasedUUID(); DocumentBuilderFactory docFactory = DocumentBuilderFactory.newInstance(); docFactory.setNamespaceAware(true); Modified: trunk/eXist-1.0/src/org/exist/start/start.config =================================================================== --- trunk/eXist-1.0/src/org/exist/start/start.config 2006-06-29 11:00:27 UTC (rev 3754) +++ trunk/eXist-1.0/src/org/exist/start/start.config 2006-06-29 17:08:34 UTC (rev 3755) @@ -62,6 +62,7 @@ tools/jetty/lib/* mode == standalone lib/optional/commons-logging-%latest%.jar mode == standalone lib/optional/commons-fileupload-%latest%.jar mode == standalone +lib/optional/jug-lgpl-%latest%.jar mode == standalone lib/user/* always tools/ircbot/lib/* mode == jetty tools/ircbot/dist/ircbot.jar mode == jetty \ No newline at end of file This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <di...@us...> - 2006-06-29 11:00:31
|
Revision: 3754 Author: dizzzz Date: 2006-06-29 04:00:27 -0700 (Thu, 29 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3754&view=rev Log Message: ----------- Merged recent cocoon changes into DLN Modified Paths: -------------- branches/DLN/eXist-1.0/src/org/exist/start/start.config Modified: branches/DLN/eXist-1.0/src/org/exist/start/start.config =================================================================== --- branches/DLN/eXist-1.0/src/org/exist/start/start.config 2006-06-29 04:11:47 UTC (rev 3753) +++ branches/DLN/eXist-1.0/src/org/exist/start/start.config 2006-06-29 11:00:27 UTC (rev 3754) @@ -49,6 +49,9 @@ lib/optional/* mode == other lib/optional/* mode == jetty lib/optional/* mode == cluster +lib/cocoon/* mode == other +lib/cocoon/* mode == jetty +lib/cocoon/* mode == cluster lib/* always tools/ant/lib/junit.jar mode == other tools/ant/lib/xmlunit%latest%.jar mode == other This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-29 04:11:50
|
Revision: 3753 Author: alexmilowski Date: 2006-06-28 21:11:47 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3753&view=rev Log Message: ----------- Added support for manually added subtopics. Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq Modified: trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq 2006-06-29 03:44:36 UTC (rev 3752) +++ trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq 2006-06-29 04:11:47 UTC (rev 3753) @@ -7,7 +7,8 @@ /atom:feed/atom:id, "
", /atom:feed/atom:updated, - "
" + "
", + /atom:feed/atom:entry[atom:category[@scheme='http://www.smallx.com/Ontology/Atopic/2006/1/0/topic/relation' and @term='subtopic']] } { let $current := substring-before(base-uri(/atom:feed),'/.feed.atom'), This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-29 03:44:42
|
Revision: 3752 Author: alexmilowski Date: 2006-06-28 20:44:36 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3752&view=rev Log Message: ----------- Added ability to exclude a feed from the subtopics and ancestors via a category element Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq Modified: trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq 2006-06-28 20:22:58 UTC (rev 3751) +++ trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq 2006-06-29 03:44:36 UTC (rev 3752) @@ -19,7 +19,8 @@ for $i in (1 to count($parts)-1) let $apath := string-join(subsequence($parts,1,$i),'/'), $feed := document(concat($apath,'/.feed.atom'))/atom:feed - return (<entry> + return if (not($feed/atom:category[@scheme='http://www.smallx.com/Ontology/Atopic/2006/1/0/display' and @term='false'])) + then (<entry> { "
", $feed/atom:id, @@ -42,11 +43,13 @@ } </entry>, "
" - ), + ) + else (), for $i in (collection($current)/atom:feed) let $path := substring-before(base-uri($i),'/.feed.atom'), $prefix := concat($current,'/') - return if ($current!=$path and not(contains(substring-after($path,$prefix),'/'))) + return if ($current!=$path and not(contains(substring-after($path,$prefix),'/')) + and not($i/atom:category[@scheme='http://www.smallx.com/Ontology/Atopic/2006/1/0/display' and @term='false'])) then (<entry> { "
", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-28 20:23:10
|
Revision: 3751 Author: wolfgang_m Date: 2006-06-28 13:22:58 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3751&view=rev Log Message: ----------- Added my overview article about indexing in eXist. Modified Paths: -------------- trunk/eXist-1.0/webapp/styles/default-style.css trunk/eXist-1.0/webapp/stylesheets/db2html.xsl Added Paths: ----------- trunk/eXist-1.0/webapp/dln_tree.png trunk/eXist-1.0/webapp/lorder_tree.png Added: trunk/eXist-1.0/webapp/dln_tree.png =================================================================== (Binary files differ) Property changes on: trunk/eXist-1.0/webapp/dln_tree.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Added: trunk/eXist-1.0/webapp/lorder_tree.png =================================================================== (Binary files differ) Property changes on: trunk/eXist-1.0/webapp/lorder_tree.png ___________________________________________________________________ Name: svn:mime-type + application/octet-stream Modified: trunk/eXist-1.0/webapp/styles/default-style.css =================================================================== --- trunk/eXist-1.0/webapp/styles/default-style.css 2006-06-28 20:21:53 UTC (rev 3750) +++ trunk/eXist-1.0/webapp/styles/default-style.css 2006-06-28 20:22:58 UTC (rev 3751) @@ -11,7 +11,7 @@ } } -p, .synopsis, .note, .example, .important { +p, .synopsis, .note, .example, .important, .formaltable { font-size: 1em; margin: 0 15px 1em 15px; } @@ -268,18 +268,19 @@ padding-bottom: 5px; } h2 { - font-size: 1.33em; + font-size: 1.5em; font-weight: normal; + font-variant: small-caps; color: #666; line-height: 1.7em; margin: 15px 0 15px 0; border-bottom: 1px solid; } h3 { - font-size: 1em; + font-size: 1.33em; font-weight: normal; + font-variant: small-caps; color: #666666; - font-style: italic; text-align: left; padding-left: 15px; margin-right: 20px; @@ -398,6 +399,18 @@ margin: 5px 0 0 10px; } +.formaltable { +} + +.formaltable h1 { + background-color: inherit; + color: black; + font-size: 1.25em; + font-weight: bold; + text-decoration: underline; + margin-bottom: 0; +} + .note { background-color: #fac783; } Modified: trunk/eXist-1.0/webapp/stylesheets/db2html.xsl =================================================================== --- trunk/eXist-1.0/webapp/stylesheets/db2html.xsl 2006-06-28 20:21:53 UTC (rev 3750) +++ trunk/eXist-1.0/webapp/stylesheets/db2html.xsl 2006-06-28 20:22:58 UTC (rev 3751) @@ -161,10 +161,10 @@ <xsl:attribute name="name"><xsl:value-of select="generate-id()"/></xsl:attribute> </xsl:otherwise> </xsl:choose> - <xsl:apply-templates select="title"/> </a> + <xsl:apply-templates select="title"/> </h3> - <xsl:apply-templates/> + <xsl:apply-templates select="*[not(name()='title')]"/> </xsl:template> <xsl:template match="chapter/section/section/title|article/section/section/title"> @@ -200,7 +200,7 @@ <xsl:apply-templates select="graphic"/> </div> </xsl:template> - + <xsl:template match="bookinfo|articleinfo"> <div id="page-head"> <xsl:choose> @@ -487,4 +487,20 @@ </td> </xsl:template> + <xsl:template match="table"> + <div class="formaltable"> + <h1><xsl:apply-templates select="title"/></h1> + <table> + <xsl:apply-templates select="*[not(self::title)]"/> + </table> + </div> + </xsl:template> + + <xsl:template match="row"> + <tr><xsl:apply-templates/></tr> + </xsl:template> + + <xsl:template match="entry"> + <td><xsl:apply-templates/></td> + </xsl:template> </xsl:stylesheet> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <wol...@us...> - 2006-06-28 20:22:02
|
Revision: 3750 Author: wolfgang_m Date: 2006-06-28 13:21:53 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3750&view=rev Log Message: ----------- Added my overview article about indexing in eXist. Added Paths: ----------- trunk/eXist-1.0/webapp/xmlprague06.xml Added: trunk/eXist-1.0/webapp/xmlprague06.xml =================================================================== --- trunk/eXist-1.0/webapp/xmlprague06.xml (rev 0) +++ trunk/eXist-1.0/webapp/xmlprague06.xml 2006-06-28 20:21:53 UTC (rev 3750) @@ -0,0 +1,364 @@ +<?xml version="1.0" encoding="UTF-8"?> +<article> + <articleinfo> + <title>Index-driven XQuery processing in the eXist XML database</title> + <author> + <firstname>Wolfgang</firstname> + <surname>Meier</surname> + <email>wol...@ex...</email> + </author> + </articleinfo> + + <ci:include xmlns:ci="http://apache.org/cocoon/include/1.0" src="sidebar.xml"/> + + <section> + <title>Introduction</title> + + <para>eXist provides its own XQuery implementation, which is backed by an efficient indexing + scheme at the database core to support quick identification of structural node + relationships. eXist's approach to XQuery processing can thus not be understood without + knowing the indexing scheme and vice versa. Over the past years, two different indexing + schemes for XML documents were implemented in eXist: while the first was based on an + extended level-order numbering scheme, we recently switched to hierarchical node ids to + overcome the limitations imposed by the former approach.</para> + + <para>The presentation provides a quick overview of these developments. I will try to + summarize the logic behind both indexing schemes we implemented in eXist, and point out + their strengths and deficencies. Based on this foundation, we should have a look at some + central aspects of XQuery processing and optimization.</para> + </section> + + <section> + <title>Two Indexing Schemes for XML Documents</title> + + <para>The indexing scheme forms the very core of eXist and represents the basis of all + efficient query processing in the database. Understanding the ideas behind it helps to + understand why some query formulations might be faster than their alternatives and is + certainly a requirement for those who want to work on improving eXist's XQuery engine.</para> + + <para>The main purpose of the indexing scheme is to allow a quick identification of + structural relationships between nodes. To determine the relationship between any pair + of given nodes, the nodes themselves don't need to be loaded into main memory. This is a + central feature since loading nodes from persistent storage is in general an expensive + operation. For eXist, the information contained in the structural index is sufficient to + compute a wide-range of path expression.</para> + + <para>To make this possible, every node in the document tree is labeled with a unique + identifier. The ID is chosen in such a way, that we can compute the relationship between + two nodes in the same document from the ID alone. Ideally, no further information is + needed to determine if a given node can be the ancestor, descendant or sibling of a + second node. We don't need to have access to the actual node data stored in the + persistent DOM.</para> + + <para>If we know all the IDs of elements A and B in a set of documents, we can compute an + XPath expression A/B or A//B by a simple join operation between node set A and B. The + concrete implementation of this join operation will depend on the chosen labelling + scheme. However, the basic idea will more or less remain the same for most schemes. We + will have a closer look at join operations and their characteristics below.</para> + + <section> + <title>Level-Order Numbering</title> + + <para>As explained above, the indexer assigns a unique node ID to every node in the + document tree. Various labeling or numbering schemes for XML nodes have been + proposed over the past years. Whatever numbering scheme we choose, it should allow + us to determine the relationship between any two given nodes from the ID alone.</para> + + <para>The originial numbering scheme used in eXist was based on level-order numbering. + In this scheme, a unique integer ID is assigned to every node while traversing the + document tree in level-order. To be able to compute the relationship between nodes, + level-order numbering models the document tree as a complete k-ary tree, i.e. it + assumes that every node in the tree has exactly k child nodes. Obviously, he number + of children will differ quite a lot between nodes in the real document. However, if + a node has less than k children, we just leave the remaining child IDs empty before + continuing with the next sibling node.</para> + + <para>As a consequence, a lot of IDs will not be assigned to actual nodes. Since the + original level-order numbering scheme requires the resulting tree to be k-ary + complete, it runs out of available IDs quite fast, thus limiting the maximum size of + a document to be indexed.</para> + + <figure> + <title>Document with level-order ids</title> + <graphic fileref="lorder_tree.png"/> + </figure> + + <para>To work around this limitation, eXist implemented a "relaxed" version of the + original proposal. The completeness constrained was dropped in part: instead of + assuming a fixed number of child nodes for the whole document, eXist recomputes this + number for every level of the tree. This simple trick raised the document size limit + considerably. Indexing a regularily structured document of a few hundred megabyte + was no longer an issue.</para> + + <para>However, the numbering scheme still doesn't work well if the document tree is + rather imbalanced. The remaining size limit may not be a huge problem for most + users, but it can really be annoying for certain types of documents. In particular, + documents using the TEI standard may hit the wall quite easily.</para> + + <para>Apart from its size restrictions, level-order numbering has other disadvantages as + well. In particular, inserting, updating or removing nodes in a stored document is + very expensive. Each of these operations requires at least a partial renumbering and + reindexing of the nodes in the document. As a consequence, node updates via XUpdate + or XQuery Update extensions were never very fast in eXist.</para> + + <para>So why did we stay with this numbering scheme for so long? One of the main reasons + was that almost all of the proposed alternative schemes had other major drawbacks. + For example, level-order numbering works well across all XPath axes while other + schemes could only be used for child and descendant, but not the parent, ancestor or + sibling axes.</para> + </section> + + <section> + <title>Switching to a New Scheme</title> + + <para>In early 2006, we finally started a major redesign of the whole indexing core of + eXist. As an alternative to the old level-order numbering, we chose to implement + "dynamic level numbering" (DLN) as proposed by Böhme and Rahm (Böhme, T.; Rahm, E.: + Supporting Efficient Streaming and Insertion of XML Data in RDBMS. Proc. 3rd Int. + Workshop Data Integration over the Web (DIWeb), 2004). This numbering scheme is + based on variable-length ids and thus avoids to put a conceptual limit on the size + of the document to be indexed. It also has a number of positive side-effects, + including fast node updates without reindexing.</para> + + <para>Dynamic level numbers (DLN) are hierarchical ids, inspired by Dewey's decimal + classification. Dewey ids are a sequence of numeric values, separated by some + separator. The root node has id 1. All nodes below it consist of the id of their + parent node used as prefix and a level value. Some examples for simple node ids are: + 1, 1.1, 1.2, 1.2.1, 1.2.2, 1.3. In this case, 1 represents the root node, 1.1 is the + first node on the second level, 1.2 the second, and so on.</para> + + <figure> + <title>Document with DLN ids</title> + <graphic fileref="dln_tree.png"/> + </figure> + + <para>Using this scheme, to determine the relation between any two given ids is a + trivial operation and works for the ancestor-descendant as well as sibling axes. The + main challenge, however, is to find an efficient encoding which 1) restricts the + storage space needed for a single id, and 2) guarantees a correct binary comparison + of the ids with respect to document order. Depending on the nesting depth of + elements within the document, identifiers can become very long (15 levels or more + should not be uncommon).</para> + + <para>The original proposal describes a number of different approaches for encoding DLN + ids. We decided to implement a variable bit encoding that is very efficient for + streamed data, where the database has no knowledge of the document structure to + expect. The stream encoding uses fixed width units (currently set to 4 bits) for the + level ids and adds further units as the number grows. A level id starts with one + unit, using the lower 3 bits for the number while the highest bit serves as a flag. + If the numeric range of the 3 bits (1..7) is exceeded, a second unit is added, and + the next highest bit set to 1. The leading 1-bits thus indicate the number of units + used for a single id. The following table shows the id range that can be encoded by + a given bit pattern:</para> + + <table> + <title>ID ranges</title> + <tgroup cols="2"> + <thead> + <row> + <entry>No. of units</entry> + <entry>Bit pattern</entry> + <entry>Id range</entry> + </row> + </thead> + <tbody> + <row> + <entry>1</entry> + <entry>0XXX</entry> + <entry>1..7</entry> + </row> + <row> + <entry>2</entry> + <entry>10XX XXXX</entry> + <entry>8..71</entry> + </row> + <row> + <entry>3</entry> + <entry>110X XXXX XXXX</entry> + <entry>72..583</entry> + </row> + <row> + <entry>4</entry> + <entry>1110 XXXX XXXX XXXX</entry> + <entry>584..4679</entry> + </row> + </tbody> + </tgroup> + </table> + + <para>The range of available ids increases exponentially with the number of units used. + Based on this algorithm, an id like 1.33.56.2.98.1.27 can be encoded with 48 bits. + This is quite efficient compared to the 64 bit integer ids we used before.</para> + + <para>Besides removing the document size limit, one of the distinguishing features of + the new indexing scheme is that it is insert friendly! To avoid a renumbering of the + node tree after every insertion, removal or update of a node, we use the idea of + sublevel ids also proposed by Boehme and Rahm. Between two nodes 1.1 and 1.2, a new + node can be inserted as 1.1/1, where the / is the sublevel separator. The / does not + start a new level. 1.1 and 1.1/1 are thus on the same level of the tree. In binary + encoding, the level separator '.' is represented by a 0-bit while '/' is written as + a 1-bit. For example, the id 1.1/7 is encoded as follows: </para> + + <synopsis>0001 0 0001 1 1000</synopsis> + + <para>Using sub-level ids, we can theoretically insert an arbitrary number of new nodes + at any position in the tree without renumbering the nodes.</para> + + </section> + </section> + + <section> + <title>XQuery Processing</title> + + <para>Based on the features of the numbering scheme, eXist uses structural joins to resolve + path expressions. If we know the IDs of all nodes corresponding to e.g. + <sgmltag>article</sgmltag> elements in a set of documents and we have a second node set + representing <sgmltag>section</sgmltag> nodes, we can filter out all sections being + children or descendants of an article node by applying a simple join operation on the + two node sets.</para> + + <para>In order to find element and attribute occurrences we use the central structural index + stored in the database file <filename>elements.dbx</filename>. This is basically just a + map, connecting the QNames of elements and attributes to a list of (documentId, nodeId) + pairs. Actually, most of the other index files are structured in a similar way. To + evaluate an XPath expression like /article/section, we look up "article" and "section" + in the structural index, generate the node sets corresponding to the occurrences of + these elements in the input set, then compute an ancestor-descendant join between both + sets.</para> + + <para>Consequently, eXist does rarely use tree traversals to evaluate path expressions. + There are situations where a tree traversal is without alternative (for example, if no + suitable index is available), but eXist usually tries to avoid it wherever it can. For + example, the query engine even evaluates an expression like //A/*[B = 'C'] without + access to the persistent DOM, though A/* would normally require a scan through the child + nodes of A. However, eXist instead defers the evaluation of the wildcard part of the + expression and later filters out those nodes which cannot be children of A.</para> + + <para>This approach to index-based query processing leads to some characteristic features:</para> + + <para>First, operations that require direct access on a stored node will nearly always + result in a significant slow-down of the query - unless they are supported by additional + indexes. This applies, for example, to all operations requiring an atomization step. To + evaluate B = 'C' without index assistance, the query engine needs to do a "brute force" + scan over all B elements. With a range index defined on B, the expression can again be + processed by just using node IDs.</para> + + <para>Second, the query engine is optimized to process a path expression on two given node + sets in one, single operation. The join can handle the entire input sequence at once. + For instance, the XPath expression //A/*[B = 'C'] is evaluated in a single operation for + all context items. Also, the context sequence may contain nodes from an arbitrary number + of different documents in different database collections. eXist will still use only one + operation to compute the expression. It doesn't make a difference if the input set comes + from a single large document, includes all the documents in a specific collection or + even the entire database. The logic of the operation remains the same - though the size + of the processed node set does certainly have an impact on performance.</para> + + <para>This behaviour has further consequences: for example, eXist prefers XPath predicate + expressions over an equivalent FLWOR construct using a "where" clause. The "for" + expression forces the query engine into a step-by-step iteration over the input + sequence. When optimizing a FLWOR construct, we thus try internally to process a "where" + clause like an equivalent XPath predicate if possible. However, computing the correct + dependencies for all variables that might be involved in the expression can be quite + difficult, so a predicate does usually guarantee a better performance.</para> + + <para>Unfortunately, many users prefer SQL-like "where" clauses in places where an XPath + predicate would have the same effect and might even improve the readability of the + query. For example, I sometimes see queries like this:</para> + + <synopsis>for $i in //entry where $i/@type = 'subject' or $i/@type = 'definition' + or $i/@type = 'title' return $i</synopsis> + + <para>which could be reduced to a simple XPath:</para> + + <synopsis>//entry[@type = ('subject', 'definition', 'title')]</synopsis> + + <para>Finally, for an explizit node selection by QName, the axis has only a minimal effect + on performance: A//B should be as fast as A/B, A/ancestor::B or even + A/following-sibling::B. The node set join itself accounts only for a small part of the + processing time, so differences in the algorithm for parent-child or ancestor-descendant + joins don't have a huge effect on overall query time.</para> + + <para>eXist also has a tendency to compute node relationships bottom-up instead of top-down. + Queries on the parent or ancestor axis are fast and it is often preferable to explore + the context of a given node by going up the ancestor axis instead of traversing the tree + beginning at the top. For instance, the following query uses a top-down approach to + display the context of each match in a query on articles:</para> + + <example> + <title/> + + <programlisting> +<![CDATA[for $section in collection("/db/articles")//section +for $match in $section//p[contains(., 'XML')] +return + <match> + <section>{$section/title/text()}</section> + {$match} + </match>]]> + </programlisting> + </example> + + <para>This seems to be a rather natural way to formulate the query, but it forces eXist to + evaluate the inner selection <code>$section//p[contains(., 'XML')]</code> once for every + section in the collection. The query engine will try to optimize this a bit by caching + parts of the expression. However, a better performance can be achieved by slightly + reformulating the query to navigate to the section title along the ancestor axis:</para> + + <example> + <title/> + <programlisting> +<![CDATA[for $match in collection("/db/articles")//section//p[contains(., 'XML')] +return + <match> + <section>{$section/ancestor::title/text()}</section> + {$match} + </match>]]> + </programlisting> + </example> + </section> + + <section> + <title>Outlook</title> + + <para>As of May 2006, the redesign of the database core is basically complete and the code + is to be merged into the main line of development. The ability to update nodes without + reindex has a huge performance impact for all applications that require dynamic document + updates. The annoying document size limits are finally history.</para> + + <para>We are still not running out of ideas though. Our recent redesign efforts will be + extended into other areas. Concerning the database core, there are two major work + packages I would like to point out:</para> + + <para>First, the <emphasis>indexing system</emphasis> needs to be modularized: index + creation and maintenance should be decoupled from the database core, making it possible + for users to control what is written to a specific index or even to plug in new index + types (spatial indexes, n-gram ...). Also, the existing full text indexing facilities + have to become more extensible to better adopt to application requirements. The current + architecture is too limited with respect to text analysis, tokenization, and selective + tokenization. Plans are to replace these classes by the modular analyzer provided by + Apache's Lucene.</para> + + <para>The second area I would like to highlight is <emphasis>query optimization</emphasis>: + currently, query optimization does mainly deal with finding the right index to use, or + changing the execution path to better support structural joins. Unfortunately, the logic + used to select an execution path is hard-coded into the query engine and the decision is + mostly made at execution, not compile time. It is thus often difficult to see if the + correct optimization is applied or not.</para> + + <para>What we need here is a better pre-processing query optimiser which sits between the + frontend and the query backend. Instead of selecting hard-coded optimizations, the new + optimizer should rather rewrite the query before it is passed to the backend, thus + making the process more controlable.</para> + + <para>Also, a good part of the remaining performance issues we observe could be solved by + intelligent query rewriting. We indeed believe there's a huge potential here, which is + not yet sufficiently used by eXist. Though node sets are basically just sequences of + node ids, processing queries on huge node sets can still pose a major problem with + respect to memory consumption and performance in general. Query rewriting can be used to + reduce the general size of the node sets to be processed, for instance, by exploiting + the fact that eXist supports fast navigation along all XPath axes, including parent and + ancestor. Those parts of the query with a higher selectivity can be pushed to the front + in order to limit the number of nodes passed to subsequent expressions. This can result + in a huge performance boost for queries on large document sets.</para> + </section> +</article> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-28 19:35:47
|
Revision: 3749 Author: alexmilowski Date: 2006-06-28 12:35:43 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3749&view=rev Log Message: ----------- Fixed bug where subcollections of subcollections were listed as subtopics. Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq Modified: trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq 2006-06-28 16:56:15 UTC (rev 3748) +++ trunk/eXist-1.0/src/org/exist/atom/modules/topic.xq 2006-06-28 19:35:43 UTC (rev 3749) @@ -30,7 +30,7 @@ "
", <category scheme="http://www.smallx.com/Ontology/Atopic/2006/1/0/topic/relation" term="ancestor"/>, "
", - <link rel="alternate" href="/atom/content{$apath}" type="application/atom+xml"/>, + <link rel="alternate" href="/atom/content/{$apath}" type="application/atom+xml"/>, "
", <summary> { @@ -44,8 +44,9 @@ "
" ), for $i in (collection($current)/atom:feed) - let $path := substring-before(base-uri($i),'/.feed.atom') - return if ($current!=$path) + let $path := substring-before(base-uri($i),'/.feed.atom'), + $prefix := concat($current,'/') + return if ($current!=$path and not(contains(substring-after($path,$prefix),'/'))) then (<entry> { "
", This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <del...@us...> - 2006-06-28 16:56:23
|
Revision: 3748 Author: deliriumsky Date: 2006-06-28 09:56:15 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3748&view=rev Log Message: ----------- Temporarily commented out problematic imports so that trunk compiles correctly in Eclipse Modified Paths: -------------- trunk/eXist-1.0/src/javax/xml/xquery/XQItemAccessor.java trunk/eXist-1.0/src/javax/xml/xquery/XQSequence.java Modified: trunk/eXist-1.0/src/javax/xml/xquery/XQItemAccessor.java =================================================================== --- trunk/eXist-1.0/src/javax/xml/xquery/XQItemAccessor.java 2006-06-28 16:23:46 UTC (rev 3747) +++ trunk/eXist-1.0/src/javax/xml/xquery/XQItemAccessor.java 2006-06-28 16:56:15 UTC (rev 3748) @@ -3,7 +3,7 @@ import org.w3c.dom.Node; import org.xml.sax.ContentHandler; -import javax.xml.stream.XMLStreamReader; +//import javax.xml.stream.XMLStreamReader; import java.util.Properties; import java.io.Writer; import java.io.OutputStream; @@ -26,7 +26,7 @@ int getInt() throws XQException; - XMLStreamReader getItemAsStream() throws XQException; + //XMLStreamReader getItemAsStream() throws XQException; String getItemAsString() throws XQException; Modified: trunk/eXist-1.0/src/javax/xml/xquery/XQSequence.java =================================================================== --- trunk/eXist-1.0/src/javax/xml/xquery/XQSequence.java 2006-06-28 16:23:46 UTC (rev 3747) +++ trunk/eXist-1.0/src/javax/xml/xquery/XQSequence.java 2006-06-28 16:56:15 UTC (rev 3748) @@ -21,7 +21,7 @@ int getPosition() throws XQException; - javax.xml.stream.XMLStreamReader getSequenceAsStream() throws XQException; + //javax.xml.stream.XMLStreamReader getSequenceAsStream() throws XQException; java.lang.String getSequenceAsString(java.util.Properties props) throws XQException; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <di...@us...> - 2006-06-28 16:23:54
|
Revision: 3747 Author: dizzzz Date: 2006-06-28 09:23:46 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3747&view=rev Log Message: ----------- JSR225 classes in wrong package. Moved. Added Paths: ----------- trunk/eXist-1.0/src/javax/ Removed Paths: ------------- trunk/eXist-1.0/src/java/ Copied: trunk/eXist-1.0/src/javax (from rev 3746, trunk/eXist-1.0/src/java) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <br...@us...> - 2006-06-28 12:56:44
|
Revision: 3746 Author: brihaye Date: 2006-06-28 05:56:37 -0700 (Wed, 28 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3746&view=rev Log Message: ----------- Fixed "is" operator that should raise an error when the empty sequence is compared to atomic values Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/xquery/NodeComparison.java Modified: trunk/eXist-1.0/src/org/exist/xquery/NodeComparison.java =================================================================== --- trunk/eXist-1.0/src/org/exist/xquery/NodeComparison.java 2006-06-27 23:14:46 UTC (rev 3745) +++ trunk/eXist-1.0/src/org/exist/xquery/NodeComparison.java 2006-06-28 12:56:37 UTC (rev 3746) @@ -92,39 +92,43 @@ Sequence result; Sequence ls = getLeft().eval(contextSequence, contextItem); - if(ls.isEmpty()) - result = BooleanValue.EMPTY_SEQUENCE; - else { - Sequence rs = getRight().eval(contextSequence, contextItem); - if(rs.isEmpty()) { - return BooleanValue.EMPTY_SEQUENCE; - } else { - NodeValue sv = (NodeValue)ls.itemAt(0); - NodeValue rv = (NodeValue)rs.itemAt(0); - - if(sv.getImplementationType() != rv.getImplementationType()) { - // different implementations - return BooleanValue.FALSE; - } - + Sequence rs = getRight().eval(contextSequence, contextItem); + if(!ls.isEmpty() && !rs.isEmpty()) { + NodeValue lv = (NodeValue)ls.itemAt(0); + NodeValue rv = (NodeValue)rs.itemAt(0); + if(lv.getImplementationType() != rv.getImplementationType()) { + // different implementations : can't be the same nodes + result = BooleanValue.FALSE; + } else { switch(relation) { case Constants.IS: - result = sv.equals(rv) ? BooleanValue.TRUE : BooleanValue.FALSE; + result = lv.equals(rv) ? BooleanValue.TRUE : BooleanValue.FALSE; break; case Constants.ISNOT: - result = sv.equals(rv) ? BooleanValue.FALSE : BooleanValue.TRUE; + result = lv.equals(rv) ? BooleanValue.FALSE : BooleanValue.TRUE; break; case Constants.BEFORE: - result = sv.before(rv) ? BooleanValue.TRUE : BooleanValue.FALSE; + result = lv.before(rv) ? BooleanValue.TRUE : BooleanValue.FALSE; break; case Constants.AFTER: - result = sv.after(rv) ? BooleanValue.TRUE : BooleanValue.FALSE; + result = lv.after(rv) ? BooleanValue.TRUE : BooleanValue.FALSE; break; default: throw new XPathException("Illegal argument: unknown relation"); } - } + } } + else { + if (ls.isEmpty() && !rs.isEmpty()) { + if (!Type.subTypeOf(rs.getItemType(), Type.NODE)) + throw new XPathException("XPTY0004 : the empty sequence cant be an atomic value"); + } + if (!ls.isEmpty() && rs.isEmpty()) { + if (!Type.subTypeOf(ls.getItemType(), Type.NODE)) + throw new XPathException("XPTY0004 : the empty sequence cant be an atomic value"); + } + result = BooleanValue.EMPTY_SEQUENCE; + } if (context.getProfiler().isEnabled()) context.getProfiler().end(this, "", result); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
|
From: <ale...@us...> - 2006-06-27 23:14:49
|
Revision: 3745 Author: alexmilowski Date: 2006-06-27 16:14:46 -0700 (Tue, 27 Jun 2006) ViewCVS: http://svn.sourceforge.net/exist/?rev=3745&view=rev Log Message: ----------- Added support for changing feed metadata via a PUT to the feed collection URL Modified Paths: -------------- trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java trunk/eXist-1.0/src/org/exist/atom/util/DOMDB.java Modified: trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java 2006-06-27 22:37:46 UTC (rev 3744) +++ trunk/eXist-1.0/src/org/exist/atom/modules/AtomProtocol.java 2006-06-27 23:14:46 UTC (rev 3745) @@ -408,37 +408,36 @@ } if (root.getLocalName().equals("feed")) { Collection collection = broker.getCollection(pathUri); - DocumentImpl feedDoc = null; + DocumentImpl feedDoc = collection.getDocument(broker,FEED_DOCUMENT_URI); + if (feedDoc==null) { + throw new BadRequestException("Collection at "+request.getPath()+" does not exist."); + } + + if (DOM.findChild(root,Atom.NAMESPACE_STRING,"title")==null) { + throw new BadRequestException("The feed metadata sent does not contain a title."); + } + TransactionManager transact = broker.getBrokerPool().getTransactionManager(); Txn transaction = transact.beginTransaction(); - - // Prepare the feed w/ the additional metadata - - UUID id = UUID.randomUUID(); - DOM.replaceTextElement(root,Atom.NAMESPACE_STRING,"updated",toXSDDateTime(new Date()),true); - DOM.replaceTextElement(root,Atom.NAMESPACE_STRING,"id","urn:uuid:"+id,true); + try { - if (collection != null) { - feedDoc = collection.getDocument(broker,FEED_DOCUMENT_URI); - if (feedDoc!=null) { - throw new BadRequestException("Collection at "+request.getPath()+" already exists."); - } - } else { - collection = broker.getOrCreateCollection(transaction,pathUri); - } - IndexInfo info = collection.validateXMLResource(transaction,broker,FEED_DOCUMENT_URI,doc); - info.getDocument().getMetadata().setMimeType(Atom.MIME_TYPE); - collection.store(transaction,broker,info,doc,false); + feedDoc.getUpdateLock().acquire(Lock.WRITE_LOCK); + + ElementImpl feedRoot = (ElementImpl)feedDoc.getDocumentElement(); + + // Modify the feed by merging the new feed-level elements + mergeFeed(transaction,feedRoot,root,toXSDDateTime(new Date())); + + // Store the feed + broker.storeXMLResource(transaction, feedDoc); transact.commit(transaction); - } catch (SAXException ex) { - transact.abort(transaction); - throw new EXistException("SAX error: "+ex.getMessage(),ex); - } catch (TriggerException ex) { - transact.abort(transaction); - throw new EXistException("Trigger failed: "+ex.getMessage(),ex); } catch (LockException ex) { transact.abort(transaction); throw new EXistException("Cannot acquire write lock.",ex); + } finally { + if (feedDoc!=null) { + feedDoc.getUpdateLock().release(Lock.WRITE_LOCK); + } } } else if (root.getLocalName().equals("entry")) { Collection collection = broker.getCollection(pathUri); @@ -711,6 +710,78 @@ }); } + public void mergeFeed(final Txn transaction,final ElementImpl target,Element source,final String updated) { + final List toRemove = new ArrayList(); + DOM.forEachChild(target,new NodeHandler() { + public void process(Node parent, Node child) { + if (child.getNodeType()==Node.ELEMENT_NODE) { + String ns = child.getNamespaceURI(); + if (ns!=null && ns.equals(Atom.NAMESPACE_STRING)) { + String lname = child.getLocalName(); + if (lname.equals("updated")) { + // Changed updated + DOMDB.replaceText(transaction,(ElementImpl)child,updated); + } else if (lname.equals("link")) { + Element echild = (Element)child; + String rel = echild.getAttribute("rel"); + if (!rel.equals("edit")) { + // remove it + toRemove.add(child); + } + } else if (!lname.equals("id") && !lname.equals("published") && !lname.equals("entry")) { + // remove it + toRemove.add(child); + } + } else { + // remove it + toRemove.add(child); + } + } else { + toRemove.add(child); + } + } + }); + for (Iterator childrenToRemove = toRemove.iterator(); childrenToRemove.hasNext(); ) { + Node child = (Node)childrenToRemove.next(); + target.removeChild(transaction,child); + } + final Document ownerDocument = target.getOwnerDocument(); + NodeList nl = source.getChildNodes(); + Element firstEntry = DOM.findChild(target,Atom.NAMESPACE_STRING,"entry"); + for (int i=0; i<nl.getLength(); i++) { + Node child = nl.item(i); + if (child.getNodeType()==Node.ELEMENT_NODE) { + String ns = child.getNamespaceURI(); + if (ns!=null && ns.equals(Atom.NAMESPACE_STRING)) { + String lname = child.getLocalName(); + + // Skip server controls updated, published, and id elements + if (lname.equals("updated") || + lname.equals("published") || + lname.equals("id")) { + return; + } + // Skip the edit link relations + if (lname.equals("link")) { + String rel = ((Element)child).getAttribute("rel"); + if (!rel.equals("edit")) { + return; + } + } + } + if (firstEntry==null) { + DOMDB.appendChild(transaction,target,child); + DOMDB.appendChild(transaction,target,ownerDocument.createTextNode("\n")); + } else { + DOMDB.insertBefore(transaction,target,child,firstEntry); + DOMDB.insertBefore(transaction,target,ownerDocument.createTextNode("\n"),firstEntry); + // TODO: this is a total hack. Somehow, the insertion order is wrong due to firstEntry changing position + firstEntry = DOM.findChild(target,Atom.NAMESPACE_STRING,"entry"); + } + } + } + } + protected Element findLink(Element parent,String rel) { NodeList nl = parent.getElementsByTagNameNS(Atom.NAMESPACE_STRING,"link"); for (int i=0; i<nl.getLength(); i++) { Modified: trunk/eXist-1.0/src/org/exist/atom/util/DOMDB.java =================================================================== --- trunk/eXist-1.0/src/org/exist/atom/util/DOMDB.java 2006-06-27 22:37:46 UTC (rev 3744) +++ trunk/eXist-1.0/src/org/exist/atom/util/DOMDB.java 2006-06-27 23:14:46 UTC (rev 3745) @@ -47,6 +47,13 @@ parent.appendChildren(txn,nl,-1); } + public static Node insertBefore(Txn txn,ElementImpl parent,Node child,Node refChild) { + NodeListImpl nl = new NodeListImpl(1); + nl.add(child); + parent.insertBefore(txn,nl,refChild); + return child; + } + public static void replaceText(Txn txn,ElementImpl textE,String value) { DOMDB.removeChildren(txn,textE); textE.appendChild(textE.getOwnerDocument().createTextNode(value)); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |