summaryrefslogtreecommitdiff
path: root/xsd/documentation/cxx/tree/dbxml
diff options
context:
space:
mode:
Diffstat (limited to 'xsd/documentation/cxx/tree/dbxml')
-rw-r--r--xsd/documentation/cxx/tree/dbxml/driver.cxx175
-rw-r--r--xsd/documentation/cxx/tree/dbxml/index.xhtml348
-rw-r--r--xsd/documentation/cxx/tree/dbxml/library.xsd75
3 files changed, 0 insertions, 598 deletions
diff --git a/xsd/documentation/cxx/tree/dbxml/driver.cxx b/xsd/documentation/cxx/tree/dbxml/driver.cxx
deleted file mode 100644
index 56cbb4a..0000000
--- a/xsd/documentation/cxx/tree/dbxml/driver.cxx
+++ /dev/null
@@ -1,175 +0,0 @@
-// file : examples/cxx/tree/dbxml/driver.cxx
-// author : Boris Kolpackov <boris@codesynthesis.com>
-// copyright : not copyrighted - public domain
-
-#include <memory> // std::auto_ptr
-#include <string>
-#include <cassert>
-#include <iostream>
-
-#include <dbxml/DbXml.hpp>
-
-#include "library.hxx"
-
-using std::cerr;
-using std::endl;
-using std::string;
-using std::auto_ptr;
-
-using namespace DbXml;
-using namespace xsd::cxx; // for xml::string
-
-void
-print_document (const string& desc,
- XmlContainer container,
- const string& name)
-{
- XmlDocument doc (container.getDocument (name));
-
- string content;
- doc.getContent (content);
-
- cerr << endl
- << desc << endl
- << content << endl;
-}
-
-int
-main ()
-{
- try
- {
- using namespace library;
- using xml_schema::date;
-
- XmlManager manager;
-
- {
- XmlContainer container (manager.createContainer ("new.bdbxml"));
-
- XmlUpdateContext update_context (manager.createUpdateContext ());
-
- XmlQueryContext context (manager.createQueryContext ());
- context.setNamespace ("lib", "http://www.codesynthesis.com/library");
-
-
- // Create a new document from an object model.
- //
- {
- // Create a new catalog with one book.
- //
- catalog c;
-
- book b (20530902, // ISBN
- "The Elements of Style", // Title
- genre::reference, // Genre
- "ES"); // ID
-
- author strunk ("William Strunk, Jr.", date (1869, 7, 1));
- strunk.died (date (1946, 9, 26));
-
- b.author ().push_back (strunk);
- c.book ().push_back (b);
-
-
- // Create a new XML document.
- //
- XmlDocument doc (manager.createDocument ());
- doc.setName ("new.xml");
-
-
- // Obtain its DOM representation and add the root element.
- //
- xercesc::DOMDocument& dom_doc (*doc.getContentAsDOM ());
-
- dom_doc.appendChild (
- dom_doc.createElementNS (
- xml::string ("http://www.codesynthesis.com/library").c_str (),
- xml::string ("lib:catalog").c_str ()));
-
-
- // Serialize the object model to the XML document. Also avoid
- // re-initializing the Xerces-C++ runtime since XmlManager has
- // it initialized.
- //
- catalog_ (dom_doc, c, xml_schema::flags::dont_initialize);
-
-
- // Place the document into the container.
- //
- container.putDocument (doc, update_context);
-
- print_document ("after create:", container, "new.xml");
- }
-
- // Create an object model from a document in DB.
- //
- {
- // Resolve the document in the container.
- //
- XmlDocument doc (container.getDocument ("new.xml"));
-
-
- // Create the object model from the document's DOM. Also avoid
- // re-initializing the Xerces-C++ runtime since XmlManager has
- // it initialized.
- //
- auto_ptr<catalog> c (catalog_ (*doc.getContentAsDOM (),
- xml_schema::flags::dont_initialize));
-
- cerr << *c << endl;
- }
-
-
- // Lookup a document fragment.
- //
-
- string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']");
-
- // Find "The Elements of Style".
- //
- XmlValue v;
- XmlResults results (manager.query (query, context));
-
- if (results.next (v))
- {
- // Create an object model from the document fragment.
- //
- auto_ptr<book> b (
- new book (
- *static_cast<xercesc::DOMElement*> (v.asNode ())));
-
- cerr << *b << endl;
-
-
- // Add another author, change the availability status.
- //
- author white ("E.B. White", date (1899, 7, 11));
- white.died (date (1985, 10, 1));
-
- b->author ().push_back (white);
- b->available (false);
-
-
- // Update the document fragment from the object model.
- //
- *static_cast<xercesc::DOMElement*> (v.asNode ()) << *b;
-
-
- // Update the document in the container.
- //
- XmlDocument doc (v.asDocument ());
- container.updateDocument (doc, update_context);
- }
-
- print_document ("after update:", container, "new.xml");
- }
-
- manager.removeContainer ("new.bdbxml");
- }
- catch (const std::exception& e)
- {
- cerr << e.what () << endl;
- return 1;
- }
-}
diff --git a/xsd/documentation/cxx/tree/dbxml/index.xhtml b/xsd/documentation/cxx/tree/dbxml/index.xhtml
deleted file mode 100644
index adfeb24..0000000
--- a/xsd/documentation/cxx/tree/dbxml/index.xhtml
+++ /dev/null
@@ -1,348 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
-<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">
-
-<head>
- <title>C++/Tree Mapping and Berkeley DB XML Integration Guide</title>
-
- <meta name="copyright" content="&copy; 2006-2010 Code Synthesis Tools CC"/>
- <meta name="keywords" content="xsd,xml,schema,c++,mapping,data,binding,berkeley,db,dbxml"/>
- <meta name="description" content="C++/Tree Mapping and Berkeley DB XML Integration Guide"/>
-
- <link rel="stylesheet" type="text/css" href="../../../default.css" />
-
-<style type="text/css">
- pre {
- background : #cde8f6;
-
- padding : 0 0 0 1em;
- margin : 2em 0em 2em 0;
-
- }
-
- h1 {padding-top: 1em;}
-
-</style>
-</head>
-
-<body>
-<div id="container">
- <div id="content">
-
- <h1>Introduction</h1>
-
- <p>This guide shows how to integrate the
- <a href="http://www.codesynthesis.com/products/xsd/c++/tree/">C++/Tree</a>
- mapping generated by
- <a href="http://www.codesynthesis.com/products/xsd/">CodeSynthesis XSD</a>
- with
- <a href="http://www.oracle.com/database/berkeley-db/xml/index.html">Berkeley DB XML</a>.
-
- Berkeley DB XML is an embedded XML database which allows efficient
- storage and query of XML instance documents.
-
- CodeSynthesis XSD is a W3C XML Schema to C++ data binding compiler.
-
- The C++/Tree mapping allows you to manipulate the data stored in XML
- using objects that semantically correspond to your application
- domain rather than dealing with direct representations of XML.
-
- For an introduction to
- the Berkeley DB XML refer to the
- <a href="http://www.oracle.com/database/berkeley-db/xml/index.html">Berkeley DB XML
- Getting Started Guide</a>.
- For an introduction to the C++/Tree mapping refer to
- the <a href="../guide/">C++/Tree Mapping Getting Started Guide</a>.
- </p>
-
-
- <p>This guide describes the following four operations:</p>
-
- <ul>
- <li>Create a new document in DB from an object model</li>
- <li>Create an object model from a document in DB</li>
- <li>Create an object model from a document fragment in DB</li>
- <li>Update a document fragment in DB from an object model</li>
- </ul>
-
- <p>Our examples will be based on simple XML for book library. The XML
- Schema definition for the library is in
- <a href="./library.xsd">library.xsd</a> and is compiled by XSD
- to obtain <code>library.hxx</code> and <code>library.cxx</code>.
- All C++ code fragments that are presented in this guide are available
- as a single program in <a href="./driver.cxx">driver.cxx</a>.
- The complete example is available in the
- <code>examples/cxx/tree/dbxml</code> directory of the XSD distribution.</p>
-
- <p>Note that due to the incomplete DOM API implementation provided by DB
- XML (as of version 2.3.10), the generated code and your application
- should be compiled with the <code>DBXML_DOM</code> macro defined in
- order to avoid using unsupported parts of the API.
- </p>
-
- <p>A sample XML document for the library schema is presented below:</p>
-
- <pre>
-&lt;lib:catalog xmlns:lib="http://www.codesynthesis.com/library">
- &lt;book available="true" id="ES">
- &lt;isbn>20530902&lt;/isbn>
- &lt;title>The Elements of Style&lt;/title>
- &lt;genre>reference&lt;/genre>
-
- &lt;author>
- &lt;name>William Strunk, Jr.&lt;/name>
- &lt;born>1869-07-01&lt;/born>
- &lt;died>1946-09-26&lt;/died>
- &lt;/author>
-
- &lt;author>
- &lt;name>E.B. White&lt;/name>
- &lt;born>1899-07-11&lt;/born>
- &lt;died>1985-10-01&lt;/died>
- &lt;/author>
- &lt;/book>
-&lt;/lib:catalog>
- </pre>
-
- <h1>Create Document from Object Model</h1>
-
- <p>In this step, we will programmatically create a book catalog
- with one book, save it into an <code>XmlDocument</code> object
- using one of the serialization functions generated by XSD (
- <code>catalog_</code> in our case), and store the
- <code>XmlDocument</code> object as a new document in the
- DB container:</p>
-
- <pre>
-XmlManager manager;
-XmlContainer container (manager.createContainer ("new.bdbxml"));
-XmlUpdateContext update_context (manager.createUpdateContext ());
-XmlQueryContext context (manager.createQueryContext ());
-context.setNamespace ("lib", "http://www.codesynthesis.com/library");
-
-// Create a new catalog with one book.
-//
-catalog c;
-
-book b (20530902, // ISBN
- title ("The Elements of Style"), // Title
- genre::reference, // Genre
- "ES"); // ID
-
-author strunk ("William Strunk, Jr.", date (1869, 7, 1));
-strunk.died (date (1946, 9, 26));
-
-b.author ().push_back (strunk);
-c.book ().push_back (b);
-
-// Create a new XML document.
-//
-XmlDocument doc (manager.createDocument ());
-doc.setName ("new.xml");
-
-// Obtain its DOM representation and add the root element.
-//
-xercesc::DOMDocument&amp; dom_doc (*doc.getContentAsDOM ());
-
-dom_doc.appendChild (
- dom_doc.createElementNS (
- xml::string ("http://www.codesynthesis.com/library").c_str (),
- xml::string ("lib:catalog").c_str ()));
-
-// Serialize the object model to the XML document. Also avoid
-// re-initializing the Xerces-C++ runtime since XmlManager has
-// it initialized.
-//
-catalog_ (dom_doc, c, xml_schema::flags::dont_initialize);
-
-// Place the document into the container.
-//
-container.putDocument (doc, update_context);
- </pre>
-
- <p>If we now resolve the <code>new.xml</code> in the container and
- print its content, we will get:</p>
-
- <pre>
-&lt;lib:catalog xmlns:lib="http://www.codesynthesis.com/library">
- &lt;book available="true" id="ES">
- &lt;isbn>20530902&lt;/isbn>
- &lt;title>The Elements of Style&lt;/title>
- &lt;genre>reference&lt;/genre>
- &lt;author>
- &lt;name>William Strunk, Jr.&lt;/name>
- &lt;born>1869-07-01&lt;/born>
- &lt;died>1946-09-26&lt;/died>
- &lt;/author>
- &lt;/book>
-&lt;/lib:catalog>
- </pre>
-
- <h1>Create Object Model from Document</h1>
-
- <p>Creating an object model from a document is a matter
- of obtaining <code>XmlDocument</code> object and passing its DOM
- representation to one of the parsing functions generated by XSD
- (<code>catalog_</code> in our case):
- </p>
-
- <pre>
-// Resolve the document in the container.
-//
-XmlDocument doc (container.getDocument ("new.xml"));
-
-// Create the object model from the document's DOM. Also avoid
-// re-initializing the Xerces-C++ runtime since XmlManager has
-// it initialized.
-//
-auto_ptr&lt;catalog> c (catalog_ (*doc.getContentAsDOM (),
- xml_schema::flags::dont_initialize));
-
-cerr &lt;&lt; *c &lt;&lt; endl;
- </pre>
-
- <p>This code fragment prints:</p>
-
- <pre>
-book:
-isbn: 20530902
-title: The Elements of Style
-genre: reference
-author:
-name: William Strunk, Jr.
-born: 1869-07-01
-died: 1946-09-26
-available: 1
-id: ES
- </pre>
-
- <h1>Create Object Model from Document Fragment</h1>
-
- <p>The following code fragment looks up the book with id <code>"ES"</code>
- using XQuery. It then creates a <code>book</code> object from the
- resulting <code>XmlValue</code>:</p>
-
- <pre>
-string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']");
-
-// Find "The Elements of Style".
-//
-XmlValue v;
-XmlResults results (manager.query (query, context));
-
-if (results.next (v))
-{
- // Create an object model from the document fragment.
- //
- auto_ptr&lt;book> b (
- new book (
- *static_cast&lt;xercesc::DOMElement*> (v.asNode ())));
-
- cerr &lt;&lt; *b &lt;&lt; endl;
-}
- </pre>
-
-<p>This code fragment prints:</p>
-
- <pre>
-isbn: 20530902
-title: The Elements of Style
-genre: reference
-author:
-name: William Strunk, Jr.
-born: 1869-07-01
-died: 1946-09-26
-available: 1
-id: ES
- </pre>
-
- <p>Note that we had to perform a <code>static_cast</code> from
- <code>xercesc::DOMNode</code>
- returned by the <code>XmlValue::asNode</code> member function to
- <code>xercesc::DOMElement</code>. This is safe since we know
- that in our schema books are represented as XML elements.</p>
-
- <h1>Update Document Fragment from Object Model</h1>
-
- <p>Analogous to the create case, the following code fragment looks
- up the book with id <code>"ES"</code> using XQuery. It then creates
- a <code>book</code> object from the resulting <code>XmlValue</code>,
- adds another author, changes the availability status, and saves
- the changes back to the <code>XmlValue</code> object:
- </p>
-
- <pre>
-string query ("collection('new.bdbxml')/lib:catalog/book[@id='ES']");
-
-// Find "The Elements of Style".
-//
-XmlValue v;
-XmlResults results (manager.query (query, context));
-
-if (results.next (v))
-{
- // Create an object model from the document fragment.
- //
- auto_ptr&lt;book> b (
- new book (
- *static_cast&lt;xercesc::DOMElement*> (v.asNode ())));
-
- // Add another author, change the availability status.
- //
- author white ("E.B. White", date (1899, 7, 11));
- white.died (date (1985, 10, 1));
-
- b->author ().push_back (white);
- b->available (false);
-
- // Update the document fragment from the object model.
- //
- *static_cast&lt;xercesc::DOMElement*> (v.asNode ()) &lt;&lt; *b;
-
- // Update the document in the container.
- //
- XmlDocument doc (v.asDocument ());
- container.updateDocument (doc, update_context);
-}
- </pre>
-
- <p>If we now resolve the <code>new.xml</code> in the container and
- print its content, we will get:</p>
-
- <pre>
-&lt;lib:catalog xmlns:lib="http://www.codesynthesis.com/library">
- &lt;book available="false" id="ES">
- &lt;isbn>20530902&lt;/isbn>
- &lt;title>The Elements of Style&lt;/title>
- &lt;genre>reference&lt;/genre>
- &lt;author>
- &lt;name>William Strunk, Jr.&lt;/name>
- &lt;born>1869-07-01&lt;/born>
- &lt;died>1946-09-26&lt;/died>
- &lt;/author>
- &lt;author>
- &lt;name>E.B. White&lt;/name>
- &lt;born>1899-07-11&lt;/born>
- &lt;died>1985-10-01&lt;/died>
- &lt;/author>
- &lt;/book>
-&lt;/lib:catalog>
- </pre>
-
- </div>
- <div id="footer">
- &copy;2006-2010 <a href="http://www.codesynthesis.com">CODE SYNTHESIS TOOLS CC</a>
-
- <div id="terms">
- Permission is granted to copy, distribute and/or modify this
- document under the terms of the
- <a href="http://www.codesynthesis.com/licenses/fdl-1.2.txt">GNU Free
- Documentation License, version 1.2</a>; with no Invariant Sections,
- no Front-Cover Texts and no Back-Cover Texts.
- </div>
- </div>
-
-</div>
-
-</body>
-</html>
diff --git a/xsd/documentation/cxx/tree/dbxml/library.xsd b/xsd/documentation/cxx/tree/dbxml/library.xsd
deleted file mode 100644
index c71c312..0000000
--- a/xsd/documentation/cxx/tree/dbxml/library.xsd
+++ /dev/null
@@ -1,75 +0,0 @@
-<?xml version="1.0"?>
-
-<!--
-
-file : examples/cxx/tree/dbxml/library.xsd
-author : Boris Kolpackov <boris@codesynthesis.com>
-copyright : not copyrighted - public domain
-
--->
-
-<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
- xmlns:xse="http://www.codesynthesis.com/xmlns/xml-schema-extension"
- xmlns:lib="http://www.codesynthesis.com/library"
- targetNamespace="http://www.codesynthesis.com/library">
-
- <xsd:simpleType name="isbn">
- <xsd:restriction base="xsd:unsignedInt"/>
- </xsd:simpleType>
-
-
- <xsd:complexType name="title">
- <xsd:simpleContent>
- <xsd:extension base="xsd:string">
- <xsd:attribute name="lang" type="xsd:language"/>
- </xsd:extension>
- </xsd:simpleContent>
- </xsd:complexType>
-
- <xsd:simpleType name="genre">
- <xsd:restriction base="xsd:string">
- <xsd:enumeration value="romance"/>
- <xsd:enumeration value="fiction"/>
- <xsd:enumeration value="horror"/>
- <xsd:enumeration value="history"/>
- <xsd:enumeration value="philosophy"/>
- <xsd:enumeration value="reference"/>
- </xsd:restriction>
- </xsd:simpleType>
-
- <xsd:complexType name="person">
- <xsd:sequence>
- <xsd:element name="name" type="xsd:string"/>
- <xsd:element name="born" type="xsd:date"/>
- <xsd:element name="died" type="xsd:date" minOccurs="0"/>
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:complexType name="author">
- <xsd:complexContent>
- <xsd:extension base="lib:person">
- <xsd:attribute name="recommends" type="xsd:IDREF" xse:refType="lib:book"/>
- </xsd:extension>
- </xsd:complexContent>
- </xsd:complexType>
-
- <xsd:complexType name="book">
- <xsd:sequence>
- <xsd:element name="isbn" type="lib:isbn"/>
- <xsd:element name="title" type="lib:title"/>
- <xsd:element name="genre" type="lib:genre"/>
- <xsd:element name="author" type="lib:author" maxOccurs="unbounded"/>
- </xsd:sequence>
- <xsd:attribute name="available" type="xsd:boolean" default="true"/>
- <xsd:attribute name="id" type="xsd:ID" use="required"/>
- </xsd:complexType>
-
- <xsd:complexType name="catalog">
- <xsd:sequence>
- <xsd:element name="book" type="lib:book" maxOccurs="unbounded"/>
- </xsd:sequence>
- </xsd:complexType>
-
- <xsd:element name="catalog" type="lib:catalog"/>
-
-</xsd:schema>