0% found this document useful (0 votes)
18 views49 pages

Applied XML Programming For Microsoft NET 1st Edition Dino Esposito Instant Download

The document provides information about the book 'Applied XML Programming for Microsoft .NET' by Dino Esposito, including its content, structure, and key topics such as XML parsing, data manipulation, and interoperability within the .NET framework. It also includes links to download the book and other related resources. Additionally, it outlines the author's background and the book's intended audience, emphasizing the importance of XML in modern programming.

Uploaded by

voraanasayo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
18 views49 pages

Applied XML Programming For Microsoft NET 1st Edition Dino Esposito Instant Download

The document provides information about the book 'Applied XML Programming for Microsoft .NET' by Dino Esposito, including its content, structure, and key topics such as XML parsing, data manipulation, and interoperability within the .NET framework. It also includes links to download the book and other related resources. Additionally, it outlines the author's background and the book's intended audience, emphasizing the importance of XML in modern programming.

Uploaded by

voraanasayo
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 49

Applied XML programming for Microsoft NET 1st

Edition Dino Esposito download

https://ebookultra.com/download/applied-xml-programming-for-
microsoft-net-1st-edition-dino-esposito/

Explore and download more ebooks or textbooks


at ebookultra.com
We believe these products will be a great fit for you. Click
the link to download now, or visit ebookultra.com
to discover even more!

Introducing Microsoft ASP NET Ajax 1st Edition Dino


Esposito

https://ebookultra.com/download/introducing-microsoft-asp-net-
ajax-1st-edition-dino-esposito/

Programming Microsoft Visual Basic NET Version 2003


Francesco Balena

https://ebookultra.com/download/programming-microsoft-visual-basic-
net-version-2003-francesco-balena/

Programming Microsoft SQL Server 2000 with Microsoft


Visual Basic NET 1st edition Edition Rick Dobson

https://ebookultra.com/download/programming-microsoft-sql-
server-2000-with-microsoft-visual-basic-net-1st-edition-edition-rick-
dobson/

Microsoft Access 2013 Programming by Example with VBA XML


and ASP 1st Edition Julitta Korol

https://ebookultra.com/download/microsoft-access-2013-programming-by-
example-with-vba-xml-and-asp-1st-edition-julitta-korol/
Parallel Programming with Microsoft NET Design Patterns
for Decomposition and Coordination on Multicore
Architectures Patterns Practices 1st Edition Colin
Campbell
https://ebookultra.com/download/parallel-programming-with-microsoft-
net-design-patterns-for-decomposition-and-coordination-on-multicore-
architectures-patterns-practices-1st-edition-colin-campbell/

Professional ASP NET 2 0 XML Thiru Thangarathinam

https://ebookultra.com/download/professional-asp-net-2-0-xml-thiru-
thangarathinam/

Microsoft NET Remoting 1st Edition Kim Williams

https://ebookultra.com/download/microsoft-net-remoting-1st-edition-
kim-williams/

Applied NET Attributes 1st Edition Tom Barnaby

https://ebookultra.com/download/applied-net-attributes-1st-edition-
tom-barnaby/

Programming ASP NET AJAX 1st Edition Christian Wenz

https://ebookultra.com/download/programming-asp-net-ajax-1st-edition-
christian-wenz/
Applied XML programming for Microsoft NET 1st
Edition Dino Esposito Digital Instant Download
Author(s): Dino Esposito
ISBN(s): 9780735618015, 0735618011
Edition: 1
File Details: PDF, 6.91 MB
Year: 2003
Language: english
Applied XML Programming for Microsoft .NET
Dino Esposito

Microsoft Press
A Division of Microsoft Corporation One Microsoft Way Redmond, Washington 98052-6399

Copyright © 2003 by Dino Esposito

All rights reserved. No part of the contents of this book may be reproduced or
transmitted in any form or by any means without the written permission of the publisher.

Library of Congress Cataloging-in-Publication Data [ pending.]


Esposito, Dino, 1965-
Applied XML Programming for Microsoft .NET / Dino Esposito
p. cm.
Includes index.
ISBN 0-7356-1801-1

1. XML (Document markup language) 2. Microsoft .NET. I. Title.

QA76.76.H94 E85 2002

005.7'2--dc21 2002029546

Printed and bound in the United States of America.

1 2 3 4 5 6 7 8 9 QWT 7 6 5 4 3 2

Distributed in Canada by H.B. Fenn and Company Ltd.

A CIP catalogue record for this book is available from the British Library.
Microsoft Press books are available through booksellers and distributors worldwide. For
further information about international editions, contact your local Microsoft Corporation
office or contact Microsoft Press International directly at fax (425) 936-7329. Visit our
Web site at www.microsoft.com/mspress. Send comments to:
<[email protected]>.

ActiveX, IntelliSense, JScript, Microsoft, Microsoft Press, MS-DOS, Visual Basic, Visual
Studio, Win32, Windows and Windows NT are either registered trademarks or
trademarks of Microsoft Corporation in the United States and/or other countries. Other
product and company names mentioned herein may be the trademarks of their
respective owners.

The example companies, organizations, products, domain names, e-mail addresses,


logos, people, places, and events depicted herein are fictitious. No association with any
real company, organization, product, domain name, e-mail address, logo, person,
place, or event is intended or should be inferred.
Acquisitions Editor: Anne Hamilton
Project Editor: Lynn Finnel
Technical Editor: Marc Young

Body Part No. X08-81851


Dino Esposito

Dino Esposito is Wintellect's ADO.NET and XML expert and a trainer and consultant
who specializes in .NET and Web applications. A frequent speaker at popular industry
events such as Microsoft TechEd, VSLive!, DevConnections, and WinSummit, Dino is
also a prolific author writing the monthly "Cutting Edge" column for MSDN Magazine
and the "Diving into Data Access" column for MSDN Voices. He also regularly
contributes to a number of other magazines, including Visual Studio Magazine, CoDe
Magazine, and asp.netPRO Magazine (http://www.aspnetpro.com). During a few rare
moments of spare time, Dino cofounded http://www.vb2themax.com, a Web site for
Visual Basic and Visual Basic .NET developers.

Fond of sea and beaches, Dino lives in Italy, precisely in the Rome area, with his wife,
Silvia, and two children—Francesco and Michela.
To Silvia, Francesco, and Michela
Acknowledgments

I can say it now: Several times I was about to start an XML book project, but then for
one reason or another the project never took off. So I'd like to start by saying thanks to
the people who believed in a fairly confused book idea and worked to make it happen.
These people are Anne Hamilton and Jeannine Gailey. (By the way, all the best,
Jeannine!)

Lynn Finnel brought the usual fundamental contribution as project editor. As Lynn
originally described her role in the first e-mail we exchanged, being an editor is a
delicate art, as you have to reconcile the needs of many people while meeting your own
deadlines. Thanks again, Lynn.

And a warm thanks goes to Jennifer Harris, who edited the book, and technical
reviewers Marc Young, Jim Fuchs, Julie Xiao, and Jean Ross.
Other people were involved with this book, mostly as personal reviewers. Francesco
Balena tested some of the code and provided a lot of insight. In particular, Giuseppe
Dimauro and Giuseppe Guerrasio helped to figure out the intricacies of the
XmlSerializer class, and Ralph Westphal did the same with custom readers. Kenn
Scribner has been the ideal extension to the MSDN documentation about Web
services. Rainer Heller of Siemens offered a really interesting perspective on Web
services interoperability. It was nice to discuss Web services in the more general
context of a conversation based on the World Football Championships—an indirect
demonstration that Web services are still interoperable today!

Thanks to all the Wintellect guys, and Jason Clark and Jeffrey Richter, in particular, for
their friendly and effective support.

And now my family. I've noticed that many authors, when writing acknowledgments,
promise their families that they will never repeat the experience. Although rewarding for
themselves, they explain, writing a book is too hard on the rest of the family to be
repeated. I'll be honest and sincere here. So, Silvia, and Francesco and Michela, set
your mind at rest. I will do all I can to write even more books. But I love you all beyond
imagination.

—'til the next book


Dino
Table of Contents
Applied XML Programming for Microsoft .NET
Introduction
Part I - XML Core Classes in the .NET Framework
Chapter 1 - The .NET XML Parsing Model
Chapter 2 - XML Readers
Chapter 3 - XML Data Validation
Chapter 4 - XML Writers
Part II - XML Data Manipulation
Chapter 5 - The XML .NET Document Object Model
Chapter 6 - XML Query Language and Navigation
Chapter 7 - XML Data Transformation
Part III - XML and Data Access
Chapter 8 - XML and Databases
Chapter 9 - ADO.NET XML Data Serialization
Chapter 10 - Stateful Data Serialization
Part IV - Applications Interoperability
Chapter 11 - XML Serialization
Chapter 12 - The .NET Remoting System
Chapter 13 - XML Web Services
Chapter 14 - XML on the Client
Chapter 15 - .NET Framework Application Configuration
Afterword
Index
List of Figures
List of Tables
List of Sidebars
Introduction
It was about five years ago, a few days after I finished my first book, when the publisher
came to me with a rather enticing proposal: "Why don't you start thinking about a new
book?" Now I realize that all publishers make this sort of proposition, but at the time the
proposal was definitely alluring, and a clear signal—I thought—of appreciation.
"Because you seem to do so well with new technologies," they said, "we'd like you to
have a look at this new stuff called XML." It was the first time I had heard about XML,
which was not yet a W3C recommendation.

A lot of things have happened in the meantime, and XML did go a long way. You can
be sure that, as I write this, a thousand or more IT managers are giving presentations
that include XML in one way or another. Not many years ago, at a software conference,
I heard a product manager emphasize the key role played by XML in the suite of
products he was presenting. After the first dozen sentences to the effect that "this
feature wouldn't have been possible without XML," one of the attendees asked a candid
question: "Is there a function in which you didn't use XML?" The presenter's genuine
enthusiasm led everyone there (including myself) to believe that programming would no
longer be possible without a strong knowledge of XML. We were more than a little
reassured by the speaker's answer: "Oh no, we didn't use XML in the compiler."

Regardless of the hype that often accompanies it, XML truly is a key element in
software. Today, XML is more than just a software technology. XML is a fundamental
aspect of all forms of programming, as essential as water and air to every human being.
Just as human beings realistically need some infrastructure to take advantage of water
and air, programming forms of life must be supported by software tools to be effective
and express their potential in terms of interoperability, flexibility, and information. For
XML, the most important of these tools is the parser.

An XML parser reads in XML text and outputs a memory representation of the contents.
The input for an XML parser is always plain and platform-independent text, although
potentially encoded in a variety of character sets, whereas the output of an XML parser
is strictly tied to the underlying hardware and software platform. Depending on the
operating system and the programming environment of choice, an XML parser can
generate a Component Object Model (COM) object as well as a Java or a JScript class.
No matter the kind of output, however, the end result is XML data in a programmable
form.

The growing level of integration and orchestration that partner applications need makes
the exchanged XML code more and more sophisticated and often requires the use of
specialized dialects like Simple Object Access Protocol (SOAP) and XPath. As a result,
XML programming requires ad hoc tools for reading and writing in these dialects; all the
better if the tools are tightly integrated into some sort of programming framework.

Effective XML programming requires that you be able to generate XML in a more
powerful way than merely concatenating strings. The XML API must be extensible
enough to accommodate pluggable technologies and custom functionalities. And it
must be serializable and integrate well with other elements of data storage and
exchange, including databases, complex data types (arrays, tables, and lists), and—
why not?—visual user interface elements. In simple terms, XML must no longer be a
distinct API bolted onto the core framework, but instead be a fully integrated member of
the family. This is just what XML is in the Microsoft .NET Framework. And this book is
about XML programming with the .NET Framework.

1
What Is This Book About?

This book explores the array of XML tools provided by the .NET Framework. XML is
everywhere in the .NET Framework, from remoting to Web services, and from data
access to configuration. In the first part of this book, you'll find in-depth coverage of the
key classes that implement XML in the .NET platform. Readers and writers, validation,
and schemas are discussed with samples and reference information. Next the book
moves on to XPath and XSL Transformations (XSLT) and the .NET version of the XML
Document Object Model (XML DOM).

The final part of this book focuses on data access and interoperability and touches on
SQL Server 2000 and its XML extensions and .NET Remoting and its cross-platform
counterpart—XML Web services. You'll also find a couple of chapters about XML
configuration files and XML data islands and browser/deployed managed controls.

What Does This Book Cover?


This book attempts to answer the following common questions:
ƒ Can I read custom data as XML?
ƒ What are the guidelines for writing custom XML readers?
ƒ Is it possible to set up validating XML writers?
ƒ How can I extend the XML DOM?
ƒ Why should I use the XPath navigator object whenever possible?
ƒ Can I embed my own managed classes in an XSLT script?
ƒ How can I serialize a DataSet object efficiently?
ƒ What is the DiffGram format?
ƒ Are the SQL Server 2000 XML Extensions (SQLXML) worth using?
ƒ Why does the XML serializer use a dynamic assembly?
ƒ When should I use Web services instead of .NET Remoting?
ƒ How can I embed managed controls in Web pages?
ƒ How can managed controls access client-side XML data islands?
ƒ How do I insert my own XML data in a configuration file?

All of the sample files discussed in this book (and even more) are available through the
Web at the following address: http://www.microsoft.com/mspress/books/6235.asp. To
open the Companion Content page, click on the Companion Content link in the More
Information box on the right side of the page.

Although all the code shown in this book is in C#, the sample files are available both in
C# and in Microsoft Visual Basic .NET. Here are some of the more interesting
examples:
ƒ An XML reader that reads CSV files and exposes their contents as XML
ƒ An extended version of the XML DOM that detects changes to the disk file and
automatically refreshes its data
ƒ A Web service that offers dynamically created images
ƒ An XML reader class with writing capabilities
ƒ A class that serializes DataTable objects in a true binary format
ƒ A tool to track the behavior of the XML serializer class
ƒ A ListView control that retrieves its data from the host HTML page

These and other samples will get you on your way to XML in the .NET Framework.

2
What Do I Need to Use This Book?

Most of the examples in this book are Windows Forms or console applications. The key
requirements for running these applications are the .NET Framework and Microsoft
Visual Studio .NET. You also need to have SQL Server 2000 installed to make most of
the samples work, and a few examples make use of Microsoft Access 2000 databases.
The SQLXML 3.0 extensions are required for the samples in Chapter 8. The code has
been tested with the .NET Framework SP1.

The SQL Server examples in this book assume that the sa account uses a blank
password, although the use of such a blank password is strongly discouraged in any
professional development environment. If your SQL Server sa account doesn't use a
blank password, you'll need to add the sa password to the connection strings in the
source code. For example, if your sa password is "Hello", the following connection
string provides access to the Northwind database:
string nwind =
"SERVER=localhost;UID=sa;pswd=Hello;DATABASE=northwind;";

Some of the applications in this book require SOAP Toolkit 2.0 and SQLXML 3.0.
These products are available at the following locations:

ƒ SOAP Toolkit 2.0


http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.
asp?url=/MSDN-FILES/027/001/580/msdncompositedoc.xml
ƒ SQLXML 3.0
http://msdn.microsoft.com/downloads/default.asp?URL=/downloads/sample.
asp?url=/MSDN-FILES/027/001/824/msdn-compositedoc.xml

Contacting the Author


Please feel free to send any questions about this book directly to the author. Dino
Esposito can be reached via e-mail at one of the following addresses:
ƒ <[email protected]>
ƒ <[email protected]>
In addition, you can contact the author at the Wintellect (http://www.win-tellect.com) and
VB2-The-Max (http://www.vb2themax.com) Web sites.

Support
Every effort has been made to ensure the accuracy of this book and the contents of the
sample files. Microsoft Press provides corrections for books through the Web at the
following address:
http://www.microsoft.com/mspress/support/

To connect directly to the Microsoft Press Knowledge Base and enter a query regarding
a question or issue that you might have, go to:
http://www.microsoft.com/mspress/support/search.asp

If you have comments, questions, or ideas regarding this book or the sample files,
please send them to Microsoft Press using either of the following methods:

Postal mail:

3
Microsoft Press
Attn:Microsoft .NET XML Programming Editor
One Microsoft Way
Redmond, Wa 98052-6399

E-mail:

<[email protected]>

Please note that product support is not offered through the above mail addresses. For
support information, please visit the Microsoft Product Support Web site at
http://support.microsoft.com

4
Part I: XML Core Classes in the .NET Framework
Chapter List

Chapter 1: The .NET XML Parsing Model


Chapter 2: XML Readers
Chapter 3: XML Data Validation
Chapter 4: XML Writers

Part Overview

5
Chapter 1: The .NET XML Parsing Model
Overview
XML is certainly a hot topic in the software community these days. As you read this,
probably a thousand or more IT managers are giving presentations that include XML in
one way or another. In fact, it's becoming almost redundant to emphasize the effect that
the use of XML can have on applications.

Today, XML is a natural element of all forms of programming life, just as water, sun,
and minerals are fundamental resources for every human being. To take full advantage
of XML, applications need some infrastructure built into the operating system or into the
underlying software platform. Normally, an XML infrastructure takes the form of tools
that provide for parsing, document validation, schema design, and transformations.

The Microsoft .NET Framework provides a comprehensive set of classes that let you
work with XML documents and related technologies at various levels and in strict
accordance with the most recent World Wide Web Consortium (W3C) standards and
recommendations. The XML support available in the .NET Framework covers XML 1.0,
XML namespaces, Document Object Model (DOM) Level 2 Core, XML Schema
Definition (XSD) Language, Extensible Stylesheet Language Transformations (XSLT),
and XPath expressions. In addition, XML core classes are tightly integrated with other
key portions of the .NET Framework, including data access, serialization, and
applications configuration.

In this chapter, we'll take an overall look at XML as it is used in the .NET Framework. In
particular, we'll focus on the new and innovative parsing model based on the concept of
reader components. This first chapter is aimed at providing you with the big picture of
the .NET Framework XML API, the key elements of transition from the previous
Component Object Model (COM)-based Win32 API, and a bird's-eye view of the
interconnections between XML and various parts of the .NET Framework.

XML in the .NET Framework


The .NET Framework XML core classes can be categorized according to their
functions: reading and writing documents, validating documents, navigating and
selecting nodes, managing schema information, and performing document
transformations. The assembly in which the whole XML .NET Framework is
implemented is system.xml.dll.

The most commonly used namespaces are listed here:


ƒ System.Xml
ƒ System.Xml.Schema
ƒ System.Xml.XPath
ƒ System.Xml.Xsl

The .NET Framework also provides for XML object serialization. The classes involved
with this functionality are grouped in the System.Xml.Serialization namespace. XML
serialization writes objects to, and reads them from, XML documents. This kind of
serialization is particularly useful over the Web in combination with the Simple Object
Access Protocol (SOAP) and within the boundaries of .NET Framework XML Web
services.

6
Related XML Standards
Table 1-1 lists the XML-related standards that have been implemented in the .NET
Framework. The table also provides the official URL for each standard for further
reference.

Table 1-1: W3C Standards Supported in the .NET Framework


Standard Reference
XML 1.0 http://www.w3.org/TR/1998/REC-
xml-19980210
XML namespaces http://www.w3.org/TR/REC-xml-
names
XML Schema http://www.w3.org/TR/xmlschema-
2
DOM Level 1 and Level 2 Core http://www.w3.org/TR/DOM-Level-
2
XPath http://www.w3.org/TR/xpath

XSLT http://www.w3.org/TR/xslt

SOAP 1.1 http://www.w3.org/TR/SOAP

As a data exchange technology, XML is fully and tightly integrated into the .NET
Framework. Table 1-2 provides a quick schematic view of the main areas of the .NET
Framework in which significant traces of XML are clearly visible. Each area includes
numerous classes and provides a set of application-level functions.

Table 1-2: Areas of the .NET Framework in Which XML Is Key


Category Description
ADO.NET Data container objects (for example, the DataSet object)
are always transferred and remoted via XML. The .NET
Framework also provides for two-way synchronized
binding between data exposed in tabular format and
XML format.
Configuration Application settings are stored in XML files, making use
of predefined and user-defined section readers. (More
on readers later.)
Remoting Remote .NET Framework objects can be accessed by
using SOAP packets to prepare and perform the call.
Web services SOAP is a lightweight XML protocol that Web services
use for the exchange of information in a decentralized,
distributed environment. Typically, you use SOAP to
invoke methods on a Web service in a platform-
independent fashion.
XML parsing The core classes providing for XML parsing and
manipulation through both the stream-based API and the
XML Document Object Model (XMLDOM).
XML serialization Supplies the ability to save and restore living instances
of objects to and from XML documents.

7
Although not strictly part of the .NET Framework, another group of classes deserves
mention: the managed classes defined in the SQL Server 2000 XML Extensions
(SQLXML). SQLXML 3.0 extends the XML capabilities of SQL Server 2000 by
introducing Web services support. SQLXML 3.0 makes it possible for you to export
stored procedures as SOAP-based Web services and also extends ADO.NET
capabilities with server-side XPath queries and XML views. SQLXML 3.0 is available as
a separate download, but it seamlessly integrates with the existing installation of the
.NET Framework. We'll look at SQLXML 3.0 in more detail in Chapter 8.

In general, the entire set of XML classes provided with the .NET Framework offers a
standards-compliant, interoperable, extensible solution to today's software development
challenges. This support is not a tacked-on API but a true part of the .NET Framework.

Note Almost all of today's XML parsers support the latest W3C
specification for the DOM Level 2 Core. The current specification
does not define a standard interface to persist and restore contents,
however, although the most popular XML parsers, such as
Microsoft's XML Core Services (MSXML)—formerly known as the
Microsoft XML Parser—and some others based on Java, already
have their own ways to persist objects to streams and to restore
objects from them. These mechanisms have yet to be considered
as custom and platform-specific extensions. An official API for
serializing documents to and from XML format will not be available
until DOM Level 3 Core achieves the status of a W3C
recommendation. As of summer 2002, DOM Level 3 Core is
qualified as a work in progress. The publicly available draft defines
the specification for a pair of Load and Save methods designed to
enable loading XML documents into a DOM representation and
saving a DOM representation as an XML document. For more
information, refer to http://www.w3.org/TR/2002/WD-DOM-Level-3-
Core-20020409.
A known parser that already provides an experimental
implementation of DOM Level 3 Core is IBM's XML Parser for Java
(Xml4J). See http://www.alphaworks.ibm.com/tech/xml4j for more
information.

Core Classes for Parsing

Regardless of the underlying platform, the available XML parsers fall into one of two
main categories: tree-based parsers and event-based parsers. Each parser category is
designed according to a different philosophical approach and, subsequently, has its
own pros and cons. The two categories are commonly identified with their two most
popular implementations: XMLDOM and Simple API for XML (SAX). The XMLDOM
parser is a generic tree-based API that renders an XML document as an in-memory
structure. The SAX parser provides an event-based API for processing each significant
element in a stream of XML data.

Conceptually speaking, a SAX parser is diametrically opposed to an XMLDOM parser,


and the gap between the two models is indeed fairly large. XMLDOM seems to be
clearly defined in its set of functionalities, and there is not much more one can
reasonably expect from the evolution of this model. Regardless of whether you like the
XMLDOM model or find it suitable for your needs, you can't really expect to radically
improve or change its way of working. In a certain sense, the down sides of the

8
XMLDOM model (memory footprint and bandwidth required to process large
documents) are structural and stem directly from design choices.

SAX parsers work by letting client applications pass living instances of platform-specific
objects to handle parser events. The parser controls the whole process and pushes
data to the application, which is in turn free to accept or simply ignore the data. The
SAX model is extremely lean and features a limited complexity in space.

The .NET Framework provides full support for the XMLDOM parsing model but not for
the SAX model. The set of .NET Framework XML core classes supports two parser
models: XMLDOM and a new model called an XML reader. The lack of support for SAX
parsers does not mean that you have to renounce the functionality that a SAX parser
can bring, however. All the functions of a SAX parser can be easily and even more
effectively implemented using an XML reader. Unlike a SAX parser, a .NET Framework
XML reader works under the total control of the client application, enabling the
application to pull out only the data it really needs and skip over the remainder of the
XML stream.
Readers are based on .NET Framework streams and work in much the same way as a
database cursor. Interestingly, the classes that implement this cursor-like parsing model
also provide the substrate for the .NET Framework implementation of the XMLDOM
parser. Two abstract classes—XmlReader and XmlWriter—are at the very foundation of
all .NET Framework XML classes, including XMLDOM classes, ADO.NET-related
classes, and configuration classes. So in the .NET Framework you have two possible
approaches when it comes to processing XML data. You can use either any classes
directly built onto XmlReader and XmlWriter or classes that expose information through
the well-known XMLDOM.

The set of XML core classes also includes tailor-made class hierarchies to support
other related XML technologies such as XSLT, XPath expressions, and the Schema
Object Model (SOM).
We'll look at XML core classes and related standards in the following chapters. In
particular, Chapter 2, Chapter 3, Chapter 4, and Chapter 5 describe the core classes
and parsing models. Chapter 6 and Chapter 7 examine the related standards, such as
XPath and XSL.

XML and ADO.NET

The interaction between ADO.NET classes and XML documents takes one of two
forms:
ƒ Serialization of ADO.NET objects (in particular, the DataSet object) to
XML documents and corresponding deserialization. Data can be saved to
XML in a variety of formats, with or without schema information, as a full
snapshot of the in-memory data including pending changes and errors, or
with just the current instance of the data.
ƒ A dual-access model that lets you access and update the same piece of
data either through a hierarchical programming interface or using the
ADO.NET relational API. Basically, you can transform a DataSet object
into an XMLDOM object and view the XMLDOM's subtrees as tables
merged with the DataSet object's tables.

The ADO.NET DataSet class represents the only .NET Framework object that can be
natively saved to XML. The XML representation of a DataSet object can have two
different layouts: the ADO.NET normal form and the DiffGram format. In particular, the
DiffGram format describes the history of the data and all recent changes. Each
changed row in each table is represented by two nodes: the first node contains the

9
snapshot of the row as it was originally read, and the second node contains the current
values. The DiffGram represents a snapshot of the DataSet state and contents at a
given moment. To write DiffGrams, ADO.NET uses an XmlWriter object.
The integration of and interaction between XML and ADO.NET classes is discussed in
Chapter 8.

Application Configuration

Before Microsoft Windows 95, applications stored configuration settings to a text file
with a .ini extension. INI files store information using name/value pairs grouped under
sections. Ultimately, an INI file is a collection of sections, with each section consisting of
any number of name/value pairs.
Windows 95 revamped the role of the system registry—a centralized data repository
originally introduced with Windows NT. The registry is a collection of binary files that the
operating system manages in exclusive mode. Client applications can read and write
the contents of the registry only by using a tailor-made API. The registry works as a
kind of hierarchical database consisting of root nodes (also known as hives), nodes,
and entries. Each entry is a name/ value pair.

All system, component, and application settings are supposed to be stored in the
registry. The registry continues to increase in size, contributing to the creation of a
configuration subsystem with a single (and critical) point of failure. More recently,
applications have been encouraged to store custom settings and preferences in a local
file stored in the application's root folder. For .NET Framework applications, this
configuration file is an XML file written according to a specific schema.
In addition, the .NET Framework provides a specialized set of classes to read and write
settings. The key class is named AppSettingsReader and works as a kind of parser for
a small fragment of XML code—mostly a node or two with a few attributes.

ASP.NET applications store configuration settings in a file named web.config that is


located in the root of the application's virtual folder. Windows Forms applications, on
the other hand, store their preferences in a file with the same name as the executable
plus a .config extension—for example, myprogram.exe.config. The CONFIG file must
be available in the same folder as the main executable. The schema of the CONFIG file
is the same regardless of the application model.

The contents of a CONFIG file is logically articulated into sections. The .NET
Framework provides a number of predefined sections to accommodate Web and
Windows Forms settings, remoting parameters, and ASP.NET run-time characteristics
such as the authentication scheme and registered HTTP handlers and modules.
User-defined applications can extend the XML schema of the CONFIG file by defining
custom sections with custom elements. By default, however, the AppSettingsReader
class supports only settings expressed in a few formats, such as name/value pairs and
a single tag with as many attributes as needed. This schema fits the bill in most cases,
but when you have complex structured information, it soon becomes insufficient.
Information is read from a section using special objects called section handlers. If no
predefined section structure fits your needs, you can provide a tailor-made
configuration section handler to read your own XML data, as shown here:
<configuration>
<configSections>
<section name="MySection"
type="MySectionHandlerClass, assembly" />
</configSections>

10
Random documents with unrelated
content Scribd suggests to you:
that she could not rest. The house was very still now; all the
servants had long since gone to bed. They were a set of faithful but
utterly stupid peasants from the village, and had no notion of what
went on outside the park gates. Matthieu Renard and Annette knew,
and they remained on the watch. Old Matthieu would not go to bed
until he could bring Madame la Marquise some news which would
comfort her, and Annette waited where she could hear the bell, in
case Madame wanted anything.
Madame, sitting by the open window, peered out into the night. The
firing sounded more distant now and more intermittent; the rain had
ceased and the darkness was less intense. Overhead large patches
of star-studded indigo appeared between the fissures in the clouds.
The weary watcher, gazing out into nothingness, her eyes aching
with sleeplessness and many unshed tears, fell anon into a semi-
wakeful languor, while the early hours of the morning sped leaden-
footed by.
Suddenly something woke her to full consciousness. She sat up,
shivering a little; the morning air struck fresh and cool against her
face. Through her torpor-like sleep she had been conscious of the
swift gallop of a horse on the hard road drawing rapidly nearer. Now
she was fully awake, she could hear the clatter of the hoofs—
someone was coming along at break-neck speed—bringing news
probably. She jumped to her feet; the horse had been brought to a
halt outside the gates; the next moment she heard a murmur of
voices and then the sound of footsteps coming up the drive.
Madame, leaning out of the window, called out peremptorily: "Who
goes there?"
But she received no reply. Whoever had arrived at this early hour
had gone into the house. Through the dream-like recollections of
what she had heard, it seemed to Denise that the voice of Fernande
had mingled with that of two men, one of whom might have been
old Matthieu.
She rang the bell violently. Then she looked at the clock. It was close
on five.
After a few minutes there was a knock at the door, and in response
to an impatient "Come in!" it was opened, and Fernande, pale,
obviously tired to death, and with dark circles under her eyes, came
into the room.
"What is it?" queried Madame, in a voice broken by fatigue and
nerve-strain.
"One of the overseers from the armament works, ma tante," replied
Fernande, "with a message from M. de Maurel."
"I desire no message from M. de Maurel," said Madame curtly; "let
him tell you what he wants and go back the way he came."
"There is another man with him, ma tante," hazarded Fernande,
after some hesitation—"one of our people—a prisoner with news of
M. de Puisaye."
Madame waited a moment or two, frowning, debating between her
pride which prompted her to refuse to see an emissary of de Maurel,
and the agony of suspense which was near to killing her. Anxiety
gained the victory.
"Very well," she said. "Let the men come up."
Fernande went, and a minute or two later she returned followed by
two men, one of whom was Mathurin, chief overseer of the de
Maurel smelting works. Both men looked as if they had ridden hard.
Mathurin's coat and hat were covered with dust; the other—a true
type of the Chouans, of those who had fought under de Frotté and
Cadoudal—was dressed in a tattered blouse and ragged linen
breeches; the soles of his boots had parted from their uppers; he
was unkempt and unwashed. Fernande closed the door behind
them, then she slipped round behind Madame to the corner by the
open window, where she could feel the fresh morning air and rest
her aching head against the heavy curtain. Mathurin had already told
her briefly what he had been sent to say: his orders were to see
Mademoiselle de Courson first, and then Madame la Marquise if she
asked for him. Fernande, ensconced beside the window, unseen by
her aunt, could safely indulge in the luxury of tears and of silence.
When the men entered, Madame la Marquise had looked for a
moment keenly and searchingly at the old Chouan. She was ready
and eager to catch the slightest movement or flitting glance which
might have been meant for a signal. She felt anxious and puzzled,
marvelling why de Maurel had sent a messenger to her—at this hour
—and what was the meaning of this prisoner brought hither to speak
with her. Then she turned haughtily to Mathurin.
"Who has sent you?" she queried peremptorily.
"M. le Maréchal Comte de Maurel," replied Mathurin, after he had
touched his forelock with every mark of respect.
"And who are you?" asked Madame again.
"Chief overseer at the smelting works."
"Why did M. de Maurel send you?"
"M. le Maréchal thought Madame la Marquise and Mademoiselle de
Courson would be anxious to know what had happened last night."
"Well," she said coldly, "what did happen?"
"Our alarm bells and sirens went off at half-past ten, Madame la
Marquise."
"I know that—I heard them."
"The mutineers, with Paul Leroux at their head, have been arrested
by our watchmen. Leroux confessed that he had been bribed to
murder M. le Maréchal, and to deliver the armament works into the
hands of a band of Royalists under M. de Puisaye."
"Did M. de Maurel order you to say this?"
"He desired Madame la Marquise to know that Leroux was a coward
as well as a traitor."
"Leroux' personality.... Who is Leroux, by the way?... does not
interest me. Go on."
"Our sirens aroused the garrison of Domfront. The commandant sent
over one of his officers with a small detachment of infantry to see
what was amiss. He only thought of fire or of a mutiny among the
convicts, and he was ready to send us help."
"Well? And then?"
"M. le Maréchal interrogated Leroux in the presence of the officer.
Leroux made a clean breast of all he knew. M. de Maurel then sent
his own couriers from the works to Domfront, to Tinchebrai, and to
Mortain, warning the different commandants against possible attacks
from roaming bands of Chouans. Within a couple of hours all the
garrisons were afoot and in touch with one another."
"Then what happened?"
"This man here, Madame la Marquise," said Mathurin, indicating his
companion, "will be able to tell you better than I can what happened
in the ranks of the Chouans. He fell a prisoner in our hands early in
the night. M. le Maréchal had ridden over to Mortain, and I was with
him when this man was brought in a prisoner. M. le Maréchal
questioned him, and then gave him over into my charge. 'Take the
fellow over to La Frontenay, Mathurin,' he said to me. 'Madame la
Marquise de Mortain and Mademoiselle de Courson will want to hear
what he has to say.' So we both got to horse and rode hither as fast
as we could."
"Very good," said Madame determinedly. "Leave the man here with
me. I desire to speak with him alone."
Mathurin, at the peremptory command, appeared to hesitate.
"Madame la Marquise ..." he stammered.
"Ah çà," she retorted haughtily, "has M. de Maurel sent you here
perchance as my jailer?"
Mathurin, thus challenged, did not know what to say. Madame la
Marquise had a way with her which imposed her will on every one
around her. The worthy overseer was certainly not vested with
powers to gainsay her wishes. He was a shrewd man, loyal to the
depth of his simple heart and ready to be hacked to pieces for M. le
Maréchal; he would have defied an army of haughty ladies if he
thought any harm could come from a private interview with this ill-
conditioned old rascal; but in this case prudence and conciliation was
perhaps the wisest course. And somehow he felt that Mademoiselle
de Courson's presence was, in any case, a safeguard against any
further intrigues against his master. So after an imperceptible
moment of hesitation he made a curt obeisance and backed out of
the room, closing the door behind him.
Far be it from me to suggest that good old Mathurin listened at the
keyhole, but I make bold to assert that very little of Madame la
Marquise's private conversation with the old Chouan escaped him.

III
As soon as the door had closed on Mathurin, Denise de Mortain
turned to the man and said, speaking curtly and rapidly:
"Your name is Jean Blanchet. I know you. Well, tell me quickly
everything you know. When was the alarm given in your camp?"
"At about half-past eleven, Madame la Marquise," replied the man. "I
and six of my mates were patrolling the approaches of the town,
when we heard a rumour that the garrison inside the city was astir.
News had arrived, so 'twas said, that bands of Chouans were
preparing a surprise attack. M. de Puisaye had his headquarters in
the Cerf-Volant woods south of the town; there was only just time to
run and warn him of what was in the air."
"Well?"
"M. de Puisaye at once ordered the alarm to be sounded. Within ten
minutes the whole camp was afoot and M. de Puisaye then
commanded the retreat."
"What?" exclaimed Madame. "Without striking a blow?"
"What would have been the use?" retorted the man with a shrug of
the shoulders. "We had next to no arms, and to make a stand would
have meant fighting against at least two companies of infantry and a
battery of artillery, which could easily have cut us to pieces even
before reinforcements came from Tinchebrai and Domfront. There is
a half-battery of artillery at both those places, and we knew by then
that all the garrisons round were in touch with one another. To have
made a stand," reiterated the man gruffly, "would have meant
useless bloodshed. M. de Puisaye was alive to that. He chose the
wiser course."
"Not the most heroic," murmured Madame, under her breath.
"He had a lot of undisciplined, ill-fed, ill-clothed men to look after.
What could he do? Now if we could have equipped ourselves at the
factories of La Frontenay ..." he added with a harsh laugh.
"I know, I know," said Madame impatiently. "And M. de Puisaye has
retreated—whither?"
"I do not know. To Avranches, I should say. The way was open, and,
in any case, his losses would be very slight."
"And...." A name was on Madame's lips; she checked herself. She did
not dare to speak it—not before this man ... in case....
"And M. de Courson?" she asked.
"M. de Courson must be with M. de Puisaye, I think. I believe M.
d'Aché is with him and M. Prigent."
Then at last anxiety could hold out no longer. Madame had made
heroic efforts to appear calm, but now the hoarse query broke from
her lips: "And M. le Marquis de Mortain?"
Was it her own fevered fancy? But it seemed to her as if the man
hesitated for a second or two ere he replied; he twisted his cap
between his fingers, and a shock of unruly hair falling over his
forehead hid the expression of his eyes.
"M. de Puisaye sent orders to M. de Mortain," he said at last, "to
defend the rear in case the commandant of the garrison got wind of
the retreat and sent a company in pursuit. But M. de Mortain was
not at his post then. M. de Fleurot was in command."
Madame leaned her weight against the chair close by; she passed
her tongue once or twice over her parched lips. The man was
evidently determined not to meet her eye.
"What," she asked after a while, "was the firing which I heard in the
direction of Mortain?"
"M. de Fleurot," replied Blanchet curtly, "fighting a rearguard action
and covering the main retreat. I was in his company."
"And ... what was the result ... of the action, I mean?"
"I cannot say. I was taken prisoner quite early. I only heard rumours
afterwards."
"What were they?"
"That our small contingent was entirely cut up ... there were some
prisoners taken ... but it is generally believed that scarce a man
escaped."
"And ... has anything been heard of M. de Puisaye?"
"No, Madame la Marquise, nothing."
"Or of M. de Courson, or any of the others?"
"No. But," added Blanchet significantly, as he nodded in the direction
of the door, "I believe that Mathurin there knows something."
"You think ..." began Madame involuntarily. Then she paused;
something in the man's look—furtive and compassionate—froze the
words upon her lips.
"Can't you tell me?" she asked under her breath.
"I don't know for certain, Madame la Marquise," he replied.

IV
It meant another struggle against resentment and against pride.
But, in any case, the present uncertainty was unendurable. Denise
de Mortain felt that she would have gone on her knees to the devil
himself if he brought her authentic news of Laurent. She went boldly
to the door, and, opening it, she called:
"Mathurin! Are you there?"
"At your orders, Madame la Marquise," replied the man.
He came back into the room, reluctantly this time. He was a good
fellow, with wife and children of his own. Temperamentally and
traditionally he hated these Royalists—packs of rebels and intriguers,
he called them—and he knew this haughty lady had plotted against
her own son—M. le Maréchal—whom he adored; but there was
something which he had yet to tell her, and in his own rough way he
shrank from the task, feeling nothing but pity for her, because of
what she was doomed to suffer.
"The prisoner tells me," began Madame la Marquise, as calmly as
she could, "that you can give me news of M. le Marquis de Mortain,
my son. Is that so?"
"Yes, Madame la Marquise," replied the man slowly.
"Well," she asked, "why did you not give me that news at once?"
Thus commanded, Mathurin could not help but obey as quickly as
possible. He shifted from one foot to the other, and a look of real
pity softened for a moment the rugged lines of his face.
"Well, Madame la Marquise," he began, "you must know that after
the fight with M. de Puisaye's rearguard we had several prisoners in
our hands. M. le Maréchal took the trouble to interrogate each one
separately. When he had finished, he ordered me to accompany him,
and together we went to the spot where the affray had taken place.
It was on the edge of the wood. It was then about three o'clock in
the morning and the dawn was breaking. The place was littered with
dead. I counted over sixty myself, among them young M. de Fleurot,
whom I knew."
"Yes?" said Madame la Marquise quietly, for the man had paused.
She knew well enough what he was about to tell her. He looked her
straight in the eyes. They expressed a query, and he nodded silently
in reply. A low moan of pain broke from Madame's lips; she pressed
her handkerchief to her lips to smother a louder cry.
"M. le Maréchal found M. le Marquis de Mortain lying amongst the
dead," said Mathurin slowly after a while. "He told me to tell
Madame la Marquise that M. Laurent must have died like a hero; he
had a broken sword in his hand and three bullet wounds in his
chest.... M. le Maréchal lifted him up in his arms and carried him to
his horse. I helped to lift the body into the saddle, and M. le
Maréchal ordered me to ride back to Mortain as fast as I could and
to send out half a dozen men to him at once. 'When you have done
that, Mathurin,' he said to me, 'go to La Frontenay as quickly as may
be, take the prisoner Jean Blanchet with you, and see Madame la
Marquise de Mortain and Mademoiselle de Courson. Tell them that I
have conveyed M. le Marquis to the Château of Courson, and that
there I will await their pleasure.' And that is all, Madame la
Marquise," concluded Mathurin clumsily, for, indeed, he felt
overawed by the look of hopeless grief which had spread over
Madame's marble-like face. "M. le Maréchal ordered the carriole to
be sent for Madame la Marquise. It should be here by now."
When he had finished speaking she gave him a stately nod.
"I thank you, good Mathurin," she said slowly. "I pray you go back to
your master now and tell him that Mademoiselle Fernande and I will
be at the Château of Courson within the hour."
She appeared like a statue, pale and unbending. One slender hand
rested on the back of the chair to steady herself; the other closed
tightly over her lace handkerchief. The kerchief round her shoulders
looked less white than her cheeks: the golden light of a summer's
morning crept in through the narrow window. A glorious sunshine
followed on the storm of the night; the warm rays glinted on
Madame's white hair, on her pale forehead and on the rings upon
her fingers. Mathurin, who had been in Paris in the hot days of the
Terror, remembered, as he looked on her, the martyred Queen going
to her death.
He gave a sign to Jean Blanchet. He would not have dared to say
another word; he felt the majesty of this overwhelming grief, and,
having made a profound obeisance, he and the old Chouan went out
of the room.

V
Fernande's arms were round the unfortunate woman who had sunk
half-swooning into the chair.
So this was the end of it all: the sequel of so many intrigues, so
many hopes, of the carefully-laid plans and the certainty of victory.
Laurent, with his tempestuous, impulsive nature, had atoned with
his life for his one hour of folly; the small band of Royalists was
dispersed, its leaders fugitives; and a proud and self-willed woman
would henceforth be destined to eat out her heart in vain remorse
and regret. Callously she would have sacrificed one son, even whilst
God decreed that He would take the other. Laurent de Mortain had
fallen a victim to the dastardly attempt planned against his brother,
just as much as to the unreasoning jealousy which had made him
desert his post and forfeit his honour.
Madame la Marquise was a broken old woman now; even her hatred
against Fernande was swallowed up in the immensity of her grief.
She allowed the young girl to attend on her, to find her mantle and
hood, and then gently to lead her downstairs. She could not bring
herself to speak to her, however; in her heart, beside the bitterness
of self-reproach, there lurked the dull resentment against the woman
who had ruled over her son's heart until the hour of his death.
Half an hour later the two women, sitting side by side in the carriole,
were driven rapidly to Courson.
CHAPTER XXV
THE WHITE PIGEON

I
Fernande waited in the hall below while Madame la Marquise went
upstairs to see the last of her son. Half a dozen men from the La
Frontenay works formed a guard of honour for the dead.
It was impossible even for Fernande, who knew her aunt so well, to
guess at what Denise de Mortain felt. Her heart was so little capable
of grief, that it was doubtful whether she really mourned Laurent, or
whether pride, in that he died a hero's death, acted as a soothing
balm upon her sorrow. When half an hour later she rejoined her
niece in the small boudoir downstairs, she appeared outwardly quite
calm, and talked of nothing but the new plans which already were
seething in her brain, and which were destined to retrieve the
mistakes of the night.
"De Puisaye was wise," she said, "not to jeopardize his forces. They
are practically intact, ready for a coup which must in the near future
be successful. We fell into many grave errors this time, and we shall
now stand in the happy position of being forewarned."
Fernande thought it best to say nothing. What had been the use of
arguing that Marshal de Maurel was also forewarned now?
"I have not given up the idea of a possible seizure of the La
Frontenay works," Madame went on in her cold and placid way, just
as if all her schemes of the past twelve months had not culminated
in the death of the one being in the world whom she had professed
to love; "but I still think that my own original idea when I first came
to Courson last year, of being in open amity with my son Ronnay,
was the wisest after all. I must speak with your father and with de
Puisaye about that."
Fernande kept back, with difficulty, an exclamation of horror. More
schemes! more intrigues! more tortuous by-paths! Was the whole of
her young life to be linked indissolubly to this endless chain of
treachery? Was she to be passively acquiescent—a tool, where need
be—whenever plots were hatched that revolted her every sense of
loyalty and of truth? Fortunately for her, Madame was too deeply
engrossed in her own calculations to pay much attention to her, and
after a while she—Fernande—was able to escape out of the boudoir
where the atmosphere had already become stifling.
With aching heart she bade a final adieu to Laurent—the companion
of her childhood, the man for whom she had such a tender affection
and whom she had never loved, but also the man to whom she
would have remained rigidly true, despite all that he would have
made her suffer.
Then she went out into the park.
Yet another year of neglect had gone over the terraces and the
walks. It looked perhaps a shade more tangled, a shade more
forlorn. The heavy rain of the night before had broken down the
slender, unpruned twigs of the roses, and the paths were littered
with young branches torn from the parent trees. The scent of wet
earth mingled with the fragrance of heliotrope and white acacia;
there was a riot of bird-song in the old chestnuts and a hum of bees
in the avenue of limes.

Fernande instinctively had wandered to the postern gate which gave


on the apple-orchard. It was ajar, and she pushed it open and
wandered out on the wet grass and under the apple-trees, already
weighted down by the wealth of young fruit.
From the village distant a kilomètre or so from the park gates there
came the sound of a clock striking seven. The air was redolent with
the scent and savour of an early summer's morning. Fernande
breathed it in with delight. The wet leaves of the apple-trees sent
down an occasional shower of raindrops over her hair as she passed,
and now and then she stooped to pick a sprig of brilliant-hued wild
sorrel or a clump of snow-white marguerites.
How lovely was the world! Why should men and women plot and
scheme to make it hideous with their own passions and their
manifold treacheries?
As Fernande left the orchard behind her and struck a narrow path
that wound its way through some ripening wheat-fields, a lark rose
from the ground close by, and its gladsome song filled the lonely
wanderer's heart with a sudden joy. She looked around her and
recalled every phase of that journey, which she had taken a year ago
in the strong arms of the man who knew so well how to love. From
him there had never come reproach, mistrust, misunderstanding.
Even at the hour when she had hurt him most deeply, he told her
that he understood, and if—after the events of the past night—they
were destined to be for ever parted from one another, she would still
retain the certainty that in his great and simple heart he would never
harbour one bitter thought against her. Her friends and kindred, her
own father, her promised husband, had hatched a dastardly and
murderous plot against him, and for her sake he had found it in his
heart to gather his dead brother in his arms, and bring him in
honour and loving gentleness to his last resting-place.
And Fernande, with a sudden gesture of heartfelt longing, stretched
out her arms in the direction where the young birch and chestnut of
La Frontenay woods gleamed through the golden haze of this
midsummer morning.
"Take me, my beloved," she murmured under her breath; "let me
rest in your strong arms again. Let me forget the world and its
intrigues and its treachery within the safe harbour of your sheltering
love!"

II
She wandered on, almost like a sleep-walker in a happy dream; her
feet and the hem of her gown were soaked through with the sweet-
smelling raindrops that still clung to the grass; the wet branches of
the young chestnuts beat against her face as she plunged into the
coppice. Her lips were parted in a strange, elusive smile, and her
eyes gazed into the distance, right through the thicket, as if a
compelling voice was calling to her from afar.
A soft breeze stirred the branches of the mountain-ash overhead,
the scent of elder and acacia went to her head like wine.
He was waiting for her beside the silent pool, and as soon as she
saw him, she knew that he had called to her, and that the
compelling power of his love had drawn her to him, through park
and orchard and fields, in answer to his call.
She stood still on the other side of the pool, and for a moment they
looked across at one another, with the banks of moss and
meadowsweet between them and a whole world around of love and
trust and promise of happiness. No words could be spoken between
them, because there was so much still that must part them for a
while. He understood that well enough, for he always understood;
but she had come to him on this the first morning, when his every
thought, every feeling, had called to her to come, and now he would
be satisfied to wait—that was his way—to wait and bide his time,
knowing by the look in her eyes, by the unspoken avowal on her
sweet lips, that she would come again.
The breeze sighed among the branches of the trees, the birch
whispered to the larch, the chestnut to the oak, and a gentle ripple
stirred the twigs of the meadowsweet. And from somewhere within
the bosom of the silent pool there came the soft and melancholy call
of a number of wood-pigeons.
And to this man and this woman, who stood here in a world of their
own, a world peopled with angels and fairies and sprites, and with
everything that is most fair and most exquisite, it seemed as if from
out the pool there rose something ethereal, luminous and white,
something that was so sacred and pure, that it rose straightway
heavenward, and was soon merged with the fleecy clouds overhead,
whilst the call of the fairy pigeons was stilled.
The trance-like vision lasted only a moment. De Maurel slowly
dropped on his knees, and above the murmurings of the wood
Fernande heard the voice of the man she loved calling to her:
"You will come to me, my beloved?"
And she replied: "Very soon!"

THE END

Printed at The Chapel River Press, Kingston, Surrey.


*** END OF THE PROJECT GUTENBERG EBOOK A SHEAF OF
BLUEBELLS ***

Updated editions will replace the previous one—the old editions will
be renamed.

Creating the works from print editions not protected by U.S.


copyright law means that no one owns a United States copyright in
these works, so the Foundation (and you!) can copy and distribute it
in the United States without permission and without paying
copyright royalties. Special rules, set forth in the General Terms of
Use part of this license, apply to copying and distributing Project
Gutenberg™ electronic works to protect the PROJECT GUTENBERG™
concept and trademark. Project Gutenberg is a registered trademark,
and may not be used if you charge for an eBook, except by following
the terms of the trademark license, including paying royalties for use
of the Project Gutenberg trademark. If you do not charge anything
for copies of this eBook, complying with the trademark license is
very easy. You may use this eBook for nearly any purpose such as
creation of derivative works, reports, performances and research.
Project Gutenberg eBooks may be modified and printed and given
away—you may do practically ANYTHING in the United States with
eBooks not protected by U.S. copyright law. Redistribution is subject
to the trademark license, especially commercial redistribution.

START: FULL LICENSE


THE FULL PROJECT GUTENBERG LICENSE
PLEASE READ THIS BEFORE YOU DISTRIBUTE OR USE THIS WORK

To protect the Project Gutenberg™ mission of promoting the free


distribution of electronic works, by using or distributing this work (or
any other work associated in any way with the phrase “Project
Gutenberg”), you agree to comply with all the terms of the Full
Project Gutenberg™ License available with this file or online at
www.gutenberg.org/license.

Section 1. General Terms of Use and


Redistributing Project Gutenberg™
electronic works
1.A. By reading or using any part of this Project Gutenberg™
electronic work, you indicate that you have read, understand, agree
to and accept all the terms of this license and intellectual property
(trademark/copyright) agreement. If you do not agree to abide by all
the terms of this agreement, you must cease using and return or
destroy all copies of Project Gutenberg™ electronic works in your
possession. If you paid a fee for obtaining a copy of or access to a
Project Gutenberg™ electronic work and you do not agree to be
bound by the terms of this agreement, you may obtain a refund
from the person or entity to whom you paid the fee as set forth in
paragraph 1.E.8.

1.B. “Project Gutenberg” is a registered trademark. It may only be


used on or associated in any way with an electronic work by people
who agree to be bound by the terms of this agreement. There are a
few things that you can do with most Project Gutenberg™ electronic
works even without complying with the full terms of this agreement.
See paragraph 1.C below. There are a lot of things you can do with
Project Gutenberg™ electronic works if you follow the terms of this
agreement and help preserve free future access to Project
Gutenberg™ electronic works. See paragraph 1.E below.
1.C. The Project Gutenberg Literary Archive Foundation (“the
Foundation” or PGLAF), owns a compilation copyright in the
collection of Project Gutenberg™ electronic works. Nearly all the
individual works in the collection are in the public domain in the
United States. If an individual work is unprotected by copyright law
in the United States and you are located in the United States, we do
not claim a right to prevent you from copying, distributing,
performing, displaying or creating derivative works based on the
work as long as all references to Project Gutenberg are removed. Of
course, we hope that you will support the Project Gutenberg™
mission of promoting free access to electronic works by freely
sharing Project Gutenberg™ works in compliance with the terms of
this agreement for keeping the Project Gutenberg™ name associated
with the work. You can easily comply with the terms of this
agreement by keeping this work in the same format with its attached
full Project Gutenberg™ License when you share it without charge
with others.

1.D. The copyright laws of the place where you are located also
govern what you can do with this work. Copyright laws in most
countries are in a constant state of change. If you are outside the
United States, check the laws of your country in addition to the
terms of this agreement before downloading, copying, displaying,
performing, distributing or creating derivative works based on this
work or any other Project Gutenberg™ work. The Foundation makes
no representations concerning the copyright status of any work in
any country other than the United States.

1.E. Unless you have removed all references to Project Gutenberg:

1.E.1. The following sentence, with active links to, or other


immediate access to, the full Project Gutenberg™ License must
appear prominently whenever any copy of a Project Gutenberg™
work (any work on which the phrase “Project Gutenberg” appears,
or with which the phrase “Project Gutenberg” is associated) is
accessed, displayed, performed, viewed, copied or distributed:
This eBook is for the use of anyone anywhere in the United
States and most other parts of the world at no cost and with
almost no restrictions whatsoever. You may copy it, give it away
or re-use it under the terms of the Project Gutenberg License
included with this eBook or online at www.gutenberg.org. If you
are not located in the United States, you will have to check the
laws of the country where you are located before using this
eBook.

1.E.2. If an individual Project Gutenberg™ electronic work is derived


from texts not protected by U.S. copyright law (does not contain a
notice indicating that it is posted with permission of the copyright
holder), the work can be copied and distributed to anyone in the
United States without paying any fees or charges. If you are
redistributing or providing access to a work with the phrase “Project
Gutenberg” associated with or appearing on the work, you must
comply either with the requirements of paragraphs 1.E.1 through
1.E.7 or obtain permission for the use of the work and the Project
Gutenberg™ trademark as set forth in paragraphs 1.E.8 or 1.E.9.

1.E.3. If an individual Project Gutenberg™ electronic work is posted


with the permission of the copyright holder, your use and distribution
must comply with both paragraphs 1.E.1 through 1.E.7 and any
additional terms imposed by the copyright holder. Additional terms
will be linked to the Project Gutenberg™ License for all works posted
with the permission of the copyright holder found at the beginning
of this work.

1.E.4. Do not unlink or detach or remove the full Project


Gutenberg™ License terms from this work, or any files containing a
part of this work or any other work associated with Project
Gutenberg™.

1.E.5. Do not copy, display, perform, distribute or redistribute this


electronic work, or any part of this electronic work, without
prominently displaying the sentence set forth in paragraph 1.E.1
with active links or immediate access to the full terms of the Project
Gutenberg™ License.

1.E.6. You may convert to and distribute this work in any binary,
compressed, marked up, nonproprietary or proprietary form,
including any word processing or hypertext form. However, if you
provide access to or distribute copies of a Project Gutenberg™ work
in a format other than “Plain Vanilla ASCII” or other format used in
the official version posted on the official Project Gutenberg™ website
(www.gutenberg.org), you must, at no additional cost, fee or
expense to the user, provide a copy, a means of exporting a copy, or
a means of obtaining a copy upon request, of the work in its original
“Plain Vanilla ASCII” or other form. Any alternate format must
include the full Project Gutenberg™ License as specified in
paragraph 1.E.1.

1.E.7. Do not charge a fee for access to, viewing, displaying,


performing, copying or distributing any Project Gutenberg™ works
unless you comply with paragraph 1.E.8 or 1.E.9.

1.E.8. You may charge a reasonable fee for copies of or providing


access to or distributing Project Gutenberg™ electronic works
provided that:

• You pay a royalty fee of 20% of the gross profits you derive
from the use of Project Gutenberg™ works calculated using the
method you already use to calculate your applicable taxes. The
fee is owed to the owner of the Project Gutenberg™ trademark,
but he has agreed to donate royalties under this paragraph to
the Project Gutenberg Literary Archive Foundation. Royalty
payments must be paid within 60 days following each date on
which you prepare (or are legally required to prepare) your
periodic tax returns. Royalty payments should be clearly marked
as such and sent to the Project Gutenberg Literary Archive
Foundation at the address specified in Section 4, “Information
about donations to the Project Gutenberg Literary Archive
Foundation.”

• You provide a full refund of any money paid by a user who


notifies you in writing (or by e-mail) within 30 days of receipt
that s/he does not agree to the terms of the full Project
Gutenberg™ License. You must require such a user to return or
destroy all copies of the works possessed in a physical medium
and discontinue all use of and all access to other copies of
Project Gutenberg™ works.

• You provide, in accordance with paragraph 1.F.3, a full refund of


any money paid for a work or a replacement copy, if a defect in
the electronic work is discovered and reported to you within 90
days of receipt of the work.

• You comply with all other terms of this agreement for free
distribution of Project Gutenberg™ works.

1.E.9. If you wish to charge a fee or distribute a Project Gutenberg™


electronic work or group of works on different terms than are set
forth in this agreement, you must obtain permission in writing from
the Project Gutenberg Literary Archive Foundation, the manager of
the Project Gutenberg™ trademark. Contact the Foundation as set
forth in Section 3 below.

1.F.

1.F.1. Project Gutenberg volunteers and employees expend


considerable effort to identify, do copyright research on, transcribe
and proofread works not protected by U.S. copyright law in creating
the Project Gutenberg™ collection. Despite these efforts, Project
Gutenberg™ electronic works, and the medium on which they may
be stored, may contain “Defects,” such as, but not limited to,
incomplete, inaccurate or corrupt data, transcription errors, a
copyright or other intellectual property infringement, a defective or
damaged disk or other medium, a computer virus, or computer
codes that damage or cannot be read by your equipment.

1.F.2. LIMITED WARRANTY, DISCLAIMER OF DAMAGES - Except for


the “Right of Replacement or Refund” described in paragraph 1.F.3,
the Project Gutenberg Literary Archive Foundation, the owner of the
Project Gutenberg™ trademark, and any other party distributing a
Project Gutenberg™ electronic work under this agreement, disclaim
all liability to you for damages, costs and expenses, including legal
fees. YOU AGREE THAT YOU HAVE NO REMEDIES FOR
NEGLIGENCE, STRICT LIABILITY, BREACH OF WARRANTY OR
BREACH OF CONTRACT EXCEPT THOSE PROVIDED IN PARAGRAPH
1.F.3. YOU AGREE THAT THE FOUNDATION, THE TRADEMARK
OWNER, AND ANY DISTRIBUTOR UNDER THIS AGREEMENT WILL
NOT BE LIABLE TO YOU FOR ACTUAL, DIRECT, INDIRECT,
CONSEQUENTIAL, PUNITIVE OR INCIDENTAL DAMAGES EVEN IF
YOU GIVE NOTICE OF THE POSSIBILITY OF SUCH DAMAGE.

1.F.3. LIMITED RIGHT OF REPLACEMENT OR REFUND - If you


discover a defect in this electronic work within 90 days of receiving
it, you can receive a refund of the money (if any) you paid for it by
sending a written explanation to the person you received the work
from. If you received the work on a physical medium, you must
return the medium with your written explanation. The person or
entity that provided you with the defective work may elect to provide
a replacement copy in lieu of a refund. If you received the work
electronically, the person or entity providing it to you may choose to
give you a second opportunity to receive the work electronically in
lieu of a refund. If the second copy is also defective, you may
demand a refund in writing without further opportunities to fix the
problem.

1.F.4. Except for the limited right of replacement or refund set forth
in paragraph 1.F.3, this work is provided to you ‘AS-IS’, WITH NO
OTHER WARRANTIES OF ANY KIND, EXPRESS OR IMPLIED,
INCLUDING BUT NOT LIMITED TO WARRANTIES OF
MERCHANTABILITY OR FITNESS FOR ANY PURPOSE.

1.F.5. Some states do not allow disclaimers of certain implied


warranties or the exclusion or limitation of certain types of damages.
If any disclaimer or limitation set forth in this agreement violates the
law of the state applicable to this agreement, the agreement shall be
interpreted to make the maximum disclaimer or limitation permitted
by the applicable state law. The invalidity or unenforceability of any
provision of this agreement shall not void the remaining provisions.

1.F.6. INDEMNITY - You agree to indemnify and hold the Foundation,


the trademark owner, any agent or employee of the Foundation,
anyone providing copies of Project Gutenberg™ electronic works in
accordance with this agreement, and any volunteers associated with
the production, promotion and distribution of Project Gutenberg™
electronic works, harmless from all liability, costs and expenses,
including legal fees, that arise directly or indirectly from any of the
following which you do or cause to occur: (a) distribution of this or
any Project Gutenberg™ work, (b) alteration, modification, or
additions or deletions to any Project Gutenberg™ work, and (c) any
Defect you cause.

Section 2. Information about the Mission


of Project Gutenberg™
Project Gutenberg™ is synonymous with the free distribution of
electronic works in formats readable by the widest variety of
computers including obsolete, old, middle-aged and new computers.
It exists because of the efforts of hundreds of volunteers and
donations from people in all walks of life.

Volunteers and financial support to provide volunteers with the


assistance they need are critical to reaching Project Gutenberg™’s
goals and ensuring that the Project Gutenberg™ collection will
remain freely available for generations to come. In 2001, the Project
Gutenberg Literary Archive Foundation was created to provide a
secure and permanent future for Project Gutenberg™ and future
generations. To learn more about the Project Gutenberg Literary
Archive Foundation and how your efforts and donations can help,
see Sections 3 and 4 and the Foundation information page at
www.gutenberg.org.

Section 3. Information about the Project


Gutenberg Literary Archive Foundation
The Project Gutenberg Literary Archive Foundation is a non-profit
501(c)(3) educational corporation organized under the laws of the
state of Mississippi and granted tax exempt status by the Internal
Revenue Service. The Foundation’s EIN or federal tax identification
number is 64-6221541. Contributions to the Project Gutenberg
Literary Archive Foundation are tax deductible to the full extent
permitted by U.S. federal laws and your state’s laws.

The Foundation’s business office is located at 809 North 1500 West,


Salt Lake City, UT 84116, (801) 596-1887. Email contact links and up
to date contact information can be found at the Foundation’s website
and official page at www.gutenberg.org/contact

Section 4. Information about Donations to


the Project Gutenberg Literary Archive
Foundation
Project Gutenberg™ depends upon and cannot survive without
widespread public support and donations to carry out its mission of
increasing the number of public domain and licensed works that can
be freely distributed in machine-readable form accessible by the
widest array of equipment including outdated equipment. Many
small donations ($1 to $5,000) are particularly important to
maintaining tax exempt status with the IRS.

The Foundation is committed to complying with the laws regulating


charities and charitable donations in all 50 states of the United
States. Compliance requirements are not uniform and it takes a
considerable effort, much paperwork and many fees to meet and
keep up with these requirements. We do not solicit donations in
locations where we have not received written confirmation of
compliance. To SEND DONATIONS or determine the status of
compliance for any particular state visit www.gutenberg.org/donate.

While we cannot and do not solicit contributions from states where


we have not met the solicitation requirements, we know of no
prohibition against accepting unsolicited donations from donors in
such states who approach us with offers to donate.

International donations are gratefully accepted, but we cannot make


any statements concerning tax treatment of donations received from
outside the United States. U.S. laws alone swamp our small staff.

Please check the Project Gutenberg web pages for current donation
methods and addresses. Donations are accepted in a number of
other ways including checks, online payments and credit card
donations. To donate, please visit: www.gutenberg.org/donate.

Section 5. General Information About


Project Gutenberg™ electronic works
Professor Michael S. Hart was the originator of the Project
Gutenberg™ concept of a library of electronic works that could be
freely shared with anyone. For forty years, he produced and
distributed Project Gutenberg™ eBooks with only a loose network of
volunteer support.
Welcome to our website – the ideal destination for book lovers and
knowledge seekers. With a mission to inspire endlessly, we offer a
vast collection of books, ranging from classic literary works to
specialized publications, self-development books, and children's
literature. Each book is a new journey of discovery, expanding
knowledge and enriching the soul of the reade

Our website is not just a platform for buying books, but a bridge
connecting readers to the timeless values of culture and wisdom. With
an elegant, user-friendly interface and an intelligent search system,
we are committed to providing a quick and convenient shopping
experience. Additionally, our special promotions and home delivery
services ensure that you save time and fully enjoy the joy of reading.

Let us accompany you on the journey of exploring knowledge and


personal growth!

ebookultra.com

You might also like