Chapter 3. Application development with PHP 
115
Integrating the components
To put this all together, we create database.php in lib directory. The __autoload() 
function in our bootstrap file, www/index.php, is able to load it when needed. The 
bootstrap file also instantiates $db and $view and loads them in registry 
variables. Finally, we create a template to display the result. In the case of our 
small survey application, we create an HTML template embedded with some php 
code. Typically, we recommend that you create different templates for different 
URLs supported by the application, and one index.php exists as an initial 
template. vote.php is our only template and displays both initial movie 
information and modified survey results, because this is the most appropriate 
way of displaying results for this application. The code in Example 3-14 shows 
the app/view/vote.php.
Example 3-14   vote.php
<html><head>
<title><?php echo $this → escape($this → title); ?></title>
</head><body>
<h1>Name your favorite movie of the week</h1>
<form action="/add/movie" method="POST">
Suggestion: <input type=text name=movie_name><P>
<INPUT type=submit value="Submit new movie and/or vote">
<?php
$movie_name = $_POST_['movie_name'];
$vote = $_POST['vote'];
echo "<table border=0><tr><th>Vote</th>";
echo "<th>Idea</th><th colspan=2>Votes</th>";
echo "</tr>\n";
$sum =  $this → escape($this → sum['SUM']);
foreach ($this → result as $row) { ?>
<TR><TD align=center>
<input type=radio name=vote value='<?php echo 
$row['NAME'];?>'></td><td>
<?php
echo $row['NAME']."</td><td ALIGN=right>";
echo $row['VOTE']."</td><td>";
if($sum && (int)$row['VOTE']) {
$per = (int)(100 * $row['VOTE']/$sum);
echo "<img src=/images/logo.jpg height=12 ";
echo "width=$per> $per %</TD>";
}
echo "</tr>\n";
}
echo "</table>\n";
?>
Pdf thumbnail creator - Draw thumbnail images for PDF in C#.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
enable pdf thumbnails in; pdf reader thumbnails
Pdf thumbnail creator - VB.NET PDF Thumbnail Create SDK: Draw thumbnail images for PDF in vb.net, ASP.NET, MVC, Ajax, WinForms, WPF
Support Thumbnail Generation with Various Options for Quick PDF Navigation
how to create a thumbnail of a pdf document; how to make a thumbnail from pdf
116
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
<input type=submit value="Submit idea and/or vote">
<input type=reset>
</form></body></html>
With everything in place, you can see that the presentation layer is separate from 
the business logic layer, and adding more business logic and presentation is 
extremely easy. The code looks clean; it is flexible and extensible. The end result 
is the Web site shown in Figure 3-2.
Figure 3-2   Movie of the Week initial page
3.4.2  Zend framework: XCS 
One of the major advantages of using a Web framework is that it provides the 
abstraction to the database layer to create a database driven Web site easily. 
The developer can concentrate on the behavior of data rather than the details of 
database access and manipulation. With the amount of proliferation of XML data 
over the Web and elsewhere, there is a need to abstract the persistence access 
of XML data. DB2 Express-C V9 provides pureXML storage to store and manage 
XML data in its native structure. XML Content Store (XCS) has been created to 
help simplify the development of XML-centric Web applications. XCS is an 
Create Thumbnail in Web Image Viewer | Online Tutorials
Go to the toolbar: Select "Thumbnail Creator" & activate "HQ Annotate & Redact Documents or Images; Create Thumbnail; RasterEdge OCR Engine; PDF Reading; Encode &
can't see pdf thumbnails; pdf file thumbnail preview
VB.NET Image: How to Process & Edit Image Using VB.NET Image
VB.NET Image Cropping Assembly to Crop Image, VB.NET Image Thumbnail Creator Control SDK.
thumbnail pdf preview; enable pdf thumbnails
Chapter 3. Application development with PHP 
117
incubator technology in Zend Framework and provides both a persistence data 
access layer as well as an API for managing XML data easily. 
In this section, we provide an architectural overview of the XCS. We describe 
each of the components that makes up the XCS, and we explain how they work 
together. Figure 3-3 illustrates the XCS architecture.
Figure 3-3   XCS architecture overview
XMLContent (Zend_Db_Xml_Content)
As a developer, you can encounter XML data in many forms, such as Web 
services messages, RSS/Atom feeds, and configuration files. Once you decide 
that this XML data needs to be saved somewhere, we can assume several things 
about this data:
 First, we need a way to uniquely identify it, so that once it is saved, it can 
easily be programmatically found and retrieved. The unique name can be a 
numeric ID or a user-provided name. 
 The second assumption is that the XML data will be stored “as is”. It will not 
be modified or changed in any way. Any modifications that are required will 
be made by the application outside of the XCS. Internally, the XML data is 
stored as a DOM document, but an application is free to access the data as a 
file stream, string, or several other convenient access methods which can or 
cannot be implementation-dependent. 
 Third, the capability is provided to add additional metadata about the XML 
data that is saved. For example, if the XML data is a blog entry, perhaps the 
C# PDF Library SDK to view, edit, convert, process PDF file for C#
allows you to read, add, edit, update, and delete PDF file metadata, like Title, Subject, Author, Creator, Producer, Keywords, etc. C#.NET: Edit PDF Thumbnail.
pdf thumbnail creator; create thumbnail from pdf c#
VB.NET Image: .NET Imaging Viewing and Processing Programming SDK
RasterEdge.Imaging.Barcode.Scanner.dll: contrary to the barcode creator, barcode scanner RasterEdge.Imaging.PDF.dll: used to processing PDF file in VB project
create thumbnail jpeg from pdf; create thumbnail jpg from pdf
118
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
application would care to know the date and title of the entry, or the hostname 
where the entry originated. This metadata is saved in an about property and 
is also XML. 
 Finally, often XML data is accompanied by binary data, such as .jpeg, .pdf, or 
.doc files. An attachment property associates this binary data with the XML 
data. In the current implementation of Zend_Db_Xml_Content, the 
attachment property can contain either zero or at most one item, though 
optionally, a future version can contain any number of items.
These properties of the XML data are encapsulated in an object called 
Zend_Db_Xml_Content
. Zend_Db_Xml_Content objects are the fundamental 
components of the XCS because they are the XCS representation of XML data. 
As we will see, the Zend_Db_Xml_ContentStore component needs to know 
about the persistence technology (for example, a relational database) and how to 
access it, but Zend_Db_Xml_Content objects do not need to know anything 
about it.
Zend_Db_Xml_ContentStore
Zend_Db_Xml_ContentStore
is an abstract class that represents a repository of 
XML documents. It is responsible for updating the data source based on changes 
made to a Zend_Db_Xml_Content object in the repository as well as retrieving 
Zend_Db_Xml_Content objects from the data source based on search or ID 
criteria. A 
data source
is defined very generally as the persistence layer where 
the XML data is saved. It can be a relational database, an XML database, or a 
file system, and it stores the XML data in its own format. When an 
Zend_Db_Xml_ContentStore object is instantiated, it receives a 
connection 
handle,
which describes in a meaningful way what the data source is. 
Example 3-15 shows how to create an XML ContentStore using DB2 dbAdapter.
Example 3-15   Creating an XML ContentStore
// Create a DBAdapter using database connection properties
$dbuser = ‘db2admin’;
$dbpass = ‘db2admin’;
$dbname = ‘contacts’;
$params = array(‘username’ => $dbuser,
‘password’ => $dbpass,
‘dbname’   => $$dbname);
$conn = Zend_Db::factory(‘Db2’, $params);
$xcs = new Zend_Db_Xml_XmlContentStore_Db2($conn, ‘blogs’);
.NET PDF SDK - Description of All PDF Processing Control Feastures
Support editing PDF document metadata: Title, Subject, Author, Creator, Producer, Keywords, Created Date, and Last Modified Date; PDF Thumbnail.
enable pdf thumbnail preview; pdf thumbnail viewer
How to C#: Basic SDK Concept of XDoc.PDF for .NET
Author, Creator, Producer, Keywords, Created Date, and Last Modified Date. Class: PDFMetadata. Thumbnail. You can generate thumbnail image(s) from PDF file for
pdf thumbnail generator; show pdf thumbnails
Chapter 3. Application development with PHP 
119
In Example 3-15 on page 118, XML ContentStore $xcs has been given a name, 
so $xcs only manages XML data related to specific application 
blogs
. Other 
content stores can be created to manage other types of XML data. 
Zend_Db_Xml_ContentStore knows how to access the persistence layer to 
perform Create, Read, Update, and Delete (CRUD) operations and abstracts 
these operations by using convenience methods. For example, if the persistence 
layer is a relational database, a call to the method insert() builds an appropriate 
SQL insert statement based on the structure of the underlying tables used and 
the content of the Zend_Db_Xml_Content object. It connects to the database 
and executes the statement. Other CRUD methods work in a similar fashion and 
include update(), delete(), deleteById(), and selectAll(). Example 3-16 shows 
how to save XML data in the XML ContentStore.
Example 3-16   Saving XML data in the XML ContentStore
// create an Zend_Db_Xml_Content object from a file
// using a utility method
$xmldoc = Zend_Db_Xml_XmlUtil::createDocument();
$xmldoc = Zend_Db_Xml_XmlUtil::importXmlFile(‘data.xml’);
//save the XML document to the persistence layer
$xcs → insert($xmldoc);
Similar functions exist for update and delete. In addition, 
Zend_Db_Xml_ContentStore also contains a simple search facility that retrieves 
Zend_Db_Xml_Content by its ID or by searching within the XML data or the 
metadata in Zend_Db_Xml_Content. The search on XML data is done using 
XPath expressions. Some of these methods are find() and findById().
Zend_Db_Xml_ContentStore_DB2
The class XMLContentStoreDB2 is implemented using the DB2 adapter which in 
turn uses the ibm_db2 CLI driver. For example, to insert, the application gives 
the XCS an XMLContent object and the XMLContentStoreDB2 takes care of the 
underlying details. Because DB2 9 supports a native XML data type, one 
Zend_Db_Xml_ContentStore_DB2 object maps to one table with four columns 
named as ID, DATA, ABOUT, and ATTACHMENT. The table columns are defined as 
follows:
 ID is a unique integer and is used as the primary key of the table.
 DATA is defined as an XML column.
 ABOUT is defined as an XML column.
 ATTACHMENT is defined as a BLOB column.
VB.NET PDF: Basic SDK Concept of XDoc.PDF
Author, Creator, Producer, Keywords, Created Date, and Last Modified Date. Class: PDFMetadata. Thumbnail. You can generate thumbnail image(s) from PDF file for
create thumbnail from pdf; pdf preview thumbnail
C# Image: How to Add Antique & Vintage Effect to Image, Photo
A: Sorry, the API that RasterEdge C#.NET antique effect creator control add are dedicated to provide powerful & profession imaging controls, PDF document, tiff
pdf thumbnail generator online; pdf thumbnail html
120
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Using DB2, each row in the table represents one Zend_Db_Xml_XmlContent 
object. 
Zend_Db_Xml_XmlIterator
It is possible that a search returns one Zend_Db_Xml_Content or a set of 
Zend_Db_Xml_Content objects. In the case where a set is returned, the 
Zend_Db_Xml_XmlIterator class is used to iterate over the set of XML 
documents that meets the search criteria. Zend_Db_Xml_XmlIterator 
implements the Iterator interface so it knows several essential things about the 
set of Zend_Db_Xml_Content objects over which it is iterating. These include its 
current location in the set, how to retrieve the next object in the set, how to go 
back to the beginning of the set, and when it has reached the last item in the set.   
This allows the developer to assign behavior on the XML data at each iteration 
without having to worry about the details of loop control. An example of 
XMLIterator is shown along with the example of other utility functions in the next 
section.
Zend_Db_Xml_XmlUtil
Zend_Db_Xml_XmlUtil
is a utility class that provides static convenience 
methods for passing XML data back and forth from the application to 
Zend_Db_Xml_XmlContent, either for the raw XML data or for the about XML 
metadata. Though the XML is stored internally as a DOM, 
Zend_Db_Xml_XmlUtil can allow an application to use strings, file streams, or 
any other implementation-specific object representation of XML data, such as 
PHP’s SimpleXML. Convenience methods for converting between these different 
types of representations and DOM are provided. Let us assume the following 
document is already saved in the persistence layer as shown in Example 3-17.
Example 3-17   Sample XML document
<?xml version="1.0" encoding=“UTF-8"?>
<book>
<title>Mom, Dad, and The Rainbow House</title>
<author>Mary Staple</author>
<date>2006-05-09</date>
<body>Another fantastic children’s book from bestseller Mary Staple. 
</body>
</book>
To search anywhere for the keyword “Rainbow”, see Example 3-18.
Example 3-18   Searching keyword
keyword = ‘Rainbow’;
C# PowerPoint - PowerPoint Creating in C#.NET
The PowerPoint document file created by RasterEdge C# PowerPoint document creator library is searchable and can be fully populated with editable text and
view pdf thumbnails in; how to show pdf thumbnails in
C# Word - Word Creating in C#.NET
The Word document file created by RasterEdge C# Word document creator library is searchable and can be fully populated with editable text and graphics
can't view pdf thumbnails; show pdf thumbnails in
Chapter 3. Application development with PHP 
121
$found = $xcs → findAnywhere($keyword,  Zend_Db_Xml_XmlUtil::DATA);
To be more specific about case and where exactly in the document to search, 
see Example 3-19.
Example 3-19   Detail searching
$search = array(‘title’ => ‘Rainbow’,
‘author’ => ‘Staple’);
$options = array(‘caseSensitive’ => true,
‘exactMatch’    => false,
‘logic’         => ‘or;
$found = $xcs → find($search, 
Zend_Db_Xml_XmlUtil::DATA, 
$options);
find() returns an XML iterator, which represents a set of XML documents as 
shown in Example 3-20.
Example 3-20   Get XML iterator
foreach($found as $current) {
// get a SimplXML object and do something with it
$sxml = Zend_Db_Xml_XmlUtil::exportToSimpleXML(
$current, 
Zend_Db_Xml_XmlUtil::DATA);
// prints the contents of the <title> element
echo $sxml → title;
We can also use a simple XPath expression to search as shown in 
Example 3-21.
Example 3-21   Search using XPath expression
$xml = $xcs → executeXPathPredicateQuery("/book[date=’2004-12-21’]",
Zend_Db_Xml_Xml_Util::DATA);
foreach ($xml as $current) {
$sxml = Zend_Db_Xml_XmlUtil::exportToSimpleXML($current,  
Zend_Db_Xml_XmlUtil::DATA);
echo '<p>Title: ' . $sxml → title;
}
This will output Mom, Dad, and The Rainbow house. 
122
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Parameters are also accepted in XPath searches using an associative array. It is 
important to match XPath variable names with the keys of the associative array. 
Otherwise, the XPath search fails. Example 3-22 shows the XPath search.
Example 3-22   Xpath search
$param = array();
$param['d'] = '2006-05-09';
$param['t'] = 'Mom, Dad, and the Rainbow House';
$xml = $xcs → executeXPathPredicateQuery(
"/book[date=\$d or title=\$t]",$param);
foreach ($xml as $current) {
$sxml = Zend_Db_Xml_XmlUtil::exportToSimpleXML($current,   
Zend_Db_Xml_XmlUtil::DATA);
echo '<p>Author: ' . $sxml → author;
}
This will output “Author: Mary Staple”.
3.4.3  myContacts.com: An XCS application
In any application environment, there are two types of data used, data for 
persistent storage and data for message flows. XML is undoubtedly suited for 
both types of data: XML for messages and XML for persistent storage of data. 
XML for messages possesses fewer design problems, because each message is 
self-contained and the application process usually decides what should be 
included in a message. Contrary to this, while designing the persistent XML data, 
its static model is very important. The real design challenge is to decide the 
granularity of data and the size of the XML documents and whether to keep 
everything in one large document or create a large number of small documents. 
Irrespective of the size of the XML data, finding information is always a two step 
process, finding the right document and then finding the desired information 
within the document. The architecture of XCS makes the XML persistence model 
easy. Several types of applications benefit from XCS. 
Chapter 3. Application development with PHP 
123
Here are few examples:
 RSS Feed/Blogging Application
Users can specify feeds, applications can pull feed data and store it in XCS. 
Applications can then search and display feeds. Blogs can also be created 
and stored in XCS. Blogs then can be searched, sorted, and displayed. 
 XML-based Content Management system
All types of content can be used to store data in the XCS DATA column. 
ATTACHMENT can be used to store binary objects such as image data. ABOUT 
can store the metadata which can drive the application process flow. 
 Web services
Web services are the applications that utilize XML messages for interaction 
between components. Applications can utilize XCS to store, search, and 
retrieve XML data. 
Essentially, any application that requires XML data interchange can benefit from 
XCS. We have created one application to demonstrate the capability of XCS. Our 
sample application is a social network application. We named it 
myContacts.com
.
This application enables users to: 
 Create and maintain a profile for social and professional networking.
 Search for people within networks.
 Make contacts with the people and collaborate with them.
Solution components
This application can be divided into the following functional components:
 Create and maintain member profile 
We need a persistent XML storage to store all of our member profiles and 
relationships between them. We also need to build user interfaces for new 
members to create profiles and log in to the system. We need to track user 
inputs, build XML with it, and then store it in XCS.
 Track logged in users
We need to track logged in users so that the application knows if a user is 
viewing the user’s own profile or another user’s profile. This is required to 
allow users to make contact with other members. We used PHP’s built-in 
session tracking methods to track the status of logged-in users. 
 Update contacts and relationships
We need user interfaces and controller functions to perform the updates on 
XML data. Luckily, we have XCS implementations of Create, Remove, 
124
DB2 Express-C: The Developer Handbook for XML, PHP, C/C++, Java, and .NET
Update, and Delete (CRUD), so we do not need to worry about underlying 
database calls. We use XMLContent’s ABOUT property to store members’ 
relationships.
 Search
We need to implement search, so that users can look for members they want 
to contact. We utilize XCS’s find functions to implement the search without 
knowing any XQuery implementation programming. 
Solution overview
Figure 3-4 shows the navigation path of the proposed application. In the 
framework design, the Web page navigation flow should decide how the 
Controllers and Views should be created.
Figure 3-4   Navigation diagram for MyContacts.com application
As you can see, we give the user a choice of options. The user can either log in 
or search for someone who is already using this Web site. A user can search for 
a member, but the user cannot view a member’s detailed profile until the user 
logs in. If the user is new, the user is able to create and save the user’s profile in 
the system. We also give the user the option to find a particular member and 
Documents you may be interested
Documents you may be interested