package org.basex.examples.local;
import org.basex.core.*;
import org.basex.core.cmd.*;
/**
* This example demonstrates how databases can be created from remote XML
* documents, and how XQuery can be used to locally update the document and
* perform full-text requests.
*
* @author BaseX Team 2005-17, BSD License
*/
public final class WikiExample {
/**
* Runs the example code.
* @param args (ignored) command-line arguments
* @throws BaseXException if a database command fails
*/
public static void main(final String... args) throws BaseXException {
// Database context.
Context context = new Context();
System.out.println("=== WikiExample ===");
// Create a database from a remote XML document
System.out.println("\n* Create a database from a file via http.");
// Use internal parser to skip DTD parsing
new Set("intparse", true).execute(context);
final String doc = "http://en.wikipedia.org/wiki/Wikipedia";
new CreateDB("WikiExample", doc).execute(context);
// Insert a node before the closing body tag
// N.B. do not forget to specify the namespace
System.out.println("\n* Update the document.");
new XQuery(
"declare namespace xhtml='http://www.w3.org/1999/xhtml';" +
"insert node " +
" <p>I will match the following query because I contain " +
"the terms 'ARTICLE' and 'EDITABLE'. :-)</p> " +
"into //body"
).execute(context);
// Match all paragraphs' textual contents against
// 'edit.*' AND ('article' or 'page')
System.out.println("\n* Perform a full-text query:");
System.out.println(new XQuery(
"declare namespace xhtml='http://www.w3.org/1999/xhtml';" +
"for $x in //p/text()" +
"where $x contains text ('edit.*' ftand ('article' ftor 'page')) " +
" using wildcards distance at most 10 words " +
"return <p>{ $x }</p>"
).execute(context));
// ----------------------------------------------------------------------
// Drop the database
System.out.println("\n* Drop the database.");
new DropDB("WikiExample").execute(context);
// ------------------------------------------------------------------------
// Close the database context
context.close();
}
}