Abstract: Modular content framework and document format methods and systems are described The described framework and format define a set of building blocks for composing, packaging, distributing, and rendering document-centered content, These building blocks define a platform-independent framework for document formats that enable software and hardware systems to generate, exchange, and display documents reliably and consistently The framework and format have been designed in a flexible and extensible fashion In addition to this general framework and format, a particular format, known as the reach package format, is defined using the general framework The reach package format is a format for storing paginated documents The contents of a reach package can be displayed or printed with full fidelity among devices and applications in a wide range of environments and across a wide range of scenarios.
METHOD AND APPARATUS FOR MAINTAINING RELATIONSHIPS BETWEEN PARTS IN A PACKAGE
TECHNICAL FIELD
This invention relates to a content framework, document format and related methods and systems that can utilize both
BACKGROUND OF THE INVENTION
Typically today, there are many different types of content frameworks to represent content, and many different types of document formats to format various types of documents Many tunes, each of these frameworks and formats requires its own associated software in order to build, produce, process or consume an associated document For those who have the particular associated software installed on an appropriate device, building, producing, processing or consuming associated documents is not much of a problem For those who do not have the appropriate software, building, producing, processing or consuming associated documents is typically not possible
Against this backdrop, there is a continuing need foT ubiquity insofar as production and consumption of documents is concerned
SUMMARY OF THE INVENTION
Modular content framework and document format methods and systems are described The described framework and format define a set of building blocks for composing, packaging, distributing, and rendering document-centered content These building blocks define a platform-independent framework for document formats that enable software and hardware systems to generate, exchange, and
display documents reliably and consistently The framework and format have been designed in a flexible and extensible fashion
In addition to this general framework and format, a particular format known as the reach package format, is defined using the general framework The reach package format is a format for storing paginated documents The contents of a reach package can be displayed or printed with full fidelity among devices and applications in a wide range of environments and across a wide range of scenarios
BRIEF DESCRIPTION OF THE DRAWINGS
Fig 1 is a block diagram of components of an exemplary framework and format in accordance with one embodiment
Fig 2 is a block diagram of an exemplary package holding a document comprising a number of parts m accordance with one embodiment.
Fig 3 is a block diagram that illustrates an exemplary writer that produces a package, and a reader that reads the package, in accordance with one embodiment
Fig 4 illustrates an example part that binds together three separate pages
Fig 5 is a diagram that illustrates an exemplary selector and sequences arranged to produce a financial report containing both an English representation and a French representation of the report, in accordance with one embodiment
Fig 6 illustrates some examples of writers and readers working together to communicate about a package, in accordance with one embodiment
Fig 7 illustrates an example of interleaving multiple parts of a document
Figs 8 and 9 illustrate different examples of packaging the multiple parts of the document shown m Fig 7
Fig 10 illustrates an exemplary reach package and each of the valid types of parts that can make up or be found in a package, in accordance with one embodiment
Fig 11 illustrates an exemplary mapping of Common Language Runtime concepts to XML in accordance with one embodiment
Fig 12 illustrates both upnght and sideways glyph metrics in accordance with one embodiment
Fig 13 illustrates a one-to-one cluster map in accordance with one embodiment
Fig 14 illustrates a many-to-one cluster map in accordance with one embodiment
Fig 15 illustrates a one-to-many cluster map in accordance with one embodiment
Fig 16 illustrates a inany-to-many cluster map in accordance with one embodiment
DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENT
Overview
This document describes a modular content framework and document format The framework and format define a set of building blocks for composing, packaging, attributing, and rendering document-centered content These building blocks define a platform-independent framework for document formats that enable software and hardware systems to generate, exchange, and display documents reliably and consistently The framework and format have been designed in a flexible and extensible fashion In various embodiments, there is no restriction to
the type of content that can be included, how the content is presented, or the platform on which to build cheats for handling the content
In addition to this general framework, a particular format is defined using the general framework. This format is referred to as the reach package format in this document, and is a format for storing paginated or pre-paginated documents The contents of a reach package can be displayed or printed with full fidelity among devices and applications in a wide range of environments and across a wide range of scenarios
One of the goals of the framework described below is to ensure the interoperability of independently-written software and hardware systems reading or writing content produced in accordance with the framework and format described below In order to achieve this interoperability, the described format defines formal requirements that systems that read or write content must satisfy
The discussion below is organized along the following lines and presented m two mam sections—one entitled "The Framework" and one entitled "The Reach Package Format"
The section entiled "The Framework" presents an illustrative packaging model and describes the various parts and relationships that make up framework packages Information about using descriptive metadata m framework packages is discussed, as well as the process of mapping to physical containers, extending framework markup, and the use of framework versionrng mechanisms
The section entitled "The Reach Package Format" explores the structure of one particular type of framework-built package referred to as the reach package This section also describes the package parts specific to a fixed payload and defines a reach package markup model and drawing model This section concludes with
exemplary reach markup elements and their properties along with illustrated
samples
As a high level overview of the discussion that follows, consider Fig 1 which illustrates aspects of the inventive framework and format generally at 100 Certain exemplary components of the framework are illustrated at 102, and certain components of the reach package format are illustrated at 104
Framework 102 comprises exemplary components which include, without limitation, a relationship component, a pluggable containers component, an interleaving/streaming component and a versionmg/extensibility component, each of which is explored in more detail below Reach package format 104 composes components which mclude a selector/sequencer component and a package markup definition component
In the discussion that follows below, periodic reference will be made back to Fig 1 so that the reader can maintain perspective as to where the described components fit in the framework and package format
THE FRAMEWORK
In the discussion that follows, a description of a general framework is provided. Separate primary sub-headmgs include "The Package Model", "Composition Parts Selector and Sequence", "Descriptive Metadata", "Physical Model", "Physical Mappings" and "Versioning and Extensibility" Each primary sub-heading has one or more related sub-headmgs
The Package Model
This section describes the package model and includes sub-headings that describe packages and parts, drivers, relationships, package relationships and the start part
Packages and Parts
In the illustrated and described model, content is held within a package. A package is a logical entity that holds a collection of related parts The package's purpose is to gather up all of the pieces of a document (or other types of content) into one object that is easy for programmers and end-users to work with For example, consider Fig 2 which illustrates an exemplary package 200 holdings document comprising a number of parts including an XML markup part 202 representing the document, a font part 204 describing a font that is used in the document, a number of page parts 206 describing pages of the document, and a picture part representing a picture within the document The XML markup part 202 that represents a document is advantageous in that it can permit easy searchability and referencing without requiring the entire content of a package to be parsed This will become more apparent below
Throughout this document the notion of readers (also referred to as consumers) and writers (also referred to as producers) is introduced and discussed A reader, as that term is used m this document, refers to an entity that reads modular content format-based files or packages A writer, as that term is used m this document, refers to an entity that writes modular content format-based files or packages As an example, consider Fig 3, which shows a writer that produces a package and a reader that reads a package Typically, the writer and reader will be embodied as software In at least one embodiment, much of the processing
overhead and complexities associated with creating and formatting packages is placed on the writer This, in turn, removes much of the processing complexity and overhead from readers which, as will be appreciated by the skilled artisan, is a departure from many current models This aspect will become apparent below
In accordance with at least one embodiment, a single package contains one or more representations of the content held in the package Often a package will be a single file, referred to in this application as a container. This gives end-users, for example, a convenient way to distribute therr documents with all of the component pieces of the document (images, fonts, data, etc.) While packages often correspond directly to a single file, this is not necessarily always so A package is a logical entity that may be represented physically in a variety of ways (e g., without limitation, m a single file, a collection of loose files, m a database, ephemerally rn transit over a network connection, etc ) Thus containers hold packages, but not all packages are stored in containers
An abstract model describes packages independently of any physical storage mechanism For example, the abstract model does not refer to "files", "streams", or other physical terms related to the physical world in which the package is located. As discussed below, the abstract model allows users to create drivers for various physical formats, communication protocols, and the like By analogy, when an application wants to print an image, it uses an abstraction of a printer (presented by the driver that understands the specific land of printer) Thus, the application is not required to know about the specific pnnnng device or how to communicate with the printing device
A container provides many benefits over what might otherwise be a collection of loose, disconnected files For example, similar components may be aggregated and content may be indexed and compressed In addition, relationships
between components may be identified and rights management, digital signatures, encryption and metadata may be applied to components Of course, containers can be used for and can embody other features which are not specifically enumerated above
Common Part Properties
In the illustrated and described embodiment, a part comprises common properties (e g, name) and a stream of bytes This is analogous to a file in a file system or a resource on an HTTP server. In addition to its content, eacb part has some common part properties These include a name - which is the name of the part, and a content type - which is the type of content stored m the part Parts may also have one or more associated relationships, as discussed below
Part names are used whenever it is necessary to refer in some way to a part In the illustrated and described embodiment, names are organized into a hierarchy, similar to paths on a file system or paths m URIs Below are examples of part names
/document xml /tickets/ticket xml /rmages/march/summer.jpeg /pages/page4 xml
As seen above, m this embodiment, part names have the following characteristics
• Part names are similar to file names m a traditional file system.
• Part names begin with a forward slash ('/')
• Like paths in a file-system or paths in a URI, part names can be organized into a hierarchy by a set of directory-like names (tickets, images/march and pages in the above examples)
• This hierarchy is composed of segments delineated by slashes
• The last segment of the name is similar to a filename a traditional file-system.
It is important to note that the rules for naming parts, especially the valid characters that can be used for part names, are specific to the framework described in this document These part name rules are based on internet-standard URI naming rules In accordance with this embodiment, the grammar used for specifying part names in this embodiment exactly matches absjpath syntax defined m Sections 3 3 (Path Component) and 5 (Relative URI References) of RFC2396, (Uniform Resource Identifiers (URI Generic Syntax) specification
The following additional restrictions are applied to absjpath as a valid part
name
• Query Component, as it is defined in Sections 3 (URI Syntactic Components) and 3 4 (Query Component), is not applicable to a part name
• Fragment identifier, as it is described in Section 4 1 (Fragment Identifier), is not apphcable to a part name
• It is illegal to have any part with a name created by appending * ( "/"
~ segment) to the part name of an existing part
Grammar for part names is shown below (Equation Removed)
The segments of the names of all parts m a package can be seen to form a tree. This is analogous to what happens in file systems, in which all of the non-leaf nodes in the tree are folders and the leaf nodes are the actual files containing content These folder-like nodes (1 e, non-leaf nodes) in the name tree serve a similar function of organizing the parts in the package It is important to remember, however, that these "folders*' exist only as a concept in the naming hierarchy — they have no other manifestation in the persistence format.
Part names can not live at the "folder" level Specifically, non-leaf nodes-m the part naming hierarchy ("folder") cannot contain a part and a subfolder with the same name
In the illustrated and described embodiment, every part has a content type which identifies what type of content is stored m a part Examples of content types mclude
(Equation Removed)
Content types are used m the illustrated framework as defined in RFC2045 (Multipurpose Internet Mail Extensions, (MTME)) Specifically, each content type includes a media type (e g, text), a subtype (e g, plain) and an optional set of parameters in key^value form (e g, charset="us-ascn"), multiple parameters are separated by semicolons
Part Addressing
Often parts will contain references to other parts As a simple example, imagine a container with two parts a markup file and an image The markup file will want to hold a reference to the image so that when the markup file is processed, the associated image can be identified and located. Designers of content types and XML schemas may use URIs to represent these references To make this possible, a mapping between the world of part names and world of URIs needs to be defined
In order to allow the use of URIs in a package, a special URI interpretation rule must be used when evaluating URIs in package-based content- the package itself should be treated as the "authority' for URI references and the, .path component of the URI is used to navigate the part name hierarchy in the package
For example, given a package URI of
http //www example com/foo/something package, a reference to /abc/bar.xml is interpreted to mean the part called /abc/barxml, not the URI http //www example com/abc/bar xml
Relative URIs should be used when it is necessary to have a reference from one part to another in a container Using relative references allows the contents of the container to be moved together into a different container (or into the container from, for example, the file system) without modifying the cross-part references
Relative references from a part are interpreted relative to the "base URT' of the part containing the reference By default, the base URI of a part is the part's name
Consider a container which includes parts with the folio wing names:
(Equation Removed)
If the "/markup/page xml" part contains a URI reference to " ./images/picture jpeg", then this reference must be interpreted as referring to the part name "/images/picture jpeg", according to the rules above
Some content types provide a way to override the default base URI by specifying a different base in the content In the presence of one of these overrides, the explicitly specified base URI should be used instead of the default
Sometimes it is useful to "address" a portion or specific point in a part In the URI world, a fragment identifier is used [see, e,g. RFC2396]. In a container, the mechanism works the same way Specifically, the fragment is a string that contains additional information that is understood in the context of the content type of the addressed part For example, in a video file a fragment might identify a frame, m an XML file it might identify a portion of the XML file via an xpath
A fragment identifier is used in conjunction with a URI that addresses a part to identify fragments of the addressed part The fragment identifier is optional and is separated from the URI by a Crosshatch ("#") character As such, it js not part of a URI, but is often used in conjunction with a URI
The following discussion provides some guidance for part naming, as the package and part naming model is quite flexible This flexibility allows for a wide range of applications of a framework package However, it is important to recognize that the framework is designed to enable scenarios in which multiple, unrelated software systems can manipulate "their own" parts of a package without colliding with each other To allow this, certain guidelines are provided which, if followed, make this possible
The guidelines given here describe a mechanism for minimizing or at least reducing the occurrences of part naming conflicts, and dealing with them when they do arise Writers creating parts in a package must take steps to detect and handle naming conflicts with existing parts in the package In the event that a name conflict arises, writers may not blindly replace existing parts
In situations where a package is guaranteed to be manipulated by a single writer, that writer may deviate from these guidelines However, if there is a possibility of multiple independent writers sharing a package, all writers must follow these guidelines It is recommended, however, that all writers follow these guidelines m any case
» It js required that writers adding parts into an existing container do so in a new "folder" of the naming hierarchy, rather than placing parts directly in the root, or in a pre-existing folder In this way, the possibility of name conflicts is limited to the first segment of the part name Parts created within this new folder can be named^ without risking conflicts with existing parts
• In the event that the "preferred" name for the folder is already used by an existing part, a writer must adopt some strategy for choosing alternate folder names Writers should use the strategy of appending digits to the preferred name until an available folder name is found (possibly resorting to a GUID after some number of unsuccessful iterations)
• One consequence of this policy is that readers must not attempt to locate a part via a "magic" or "well known" part name Instead, writers must create a package relationship to at least one part m each folder they create Readers must use these package relationships to locate the parts rather than relying on well known names
• Once a reader has found at least one part in a folder (via one of the aforementioned package relationships) it may use conventions about well known part names within that folder to find other parts
Drivers
The file format described herein can be used by different applications, different document types, etc - many of which have conflicting uses, conflicting formats, and the like, One or more drivers are used to resolve various conflicts, such as differences in file formats, differences in communication protocols, and the lilce For example, different file formats mclude loose files and compound files, and different communication protocols mclude http, network, and wireless protocols A group of drivers abstract various file formats and communication protocols mto a single model Multiple drivers can be provided for different scenarios, different customer requirements, different physical configurations, etc ,
Relationships
Parts in a package may contain references to other parts in that package In general, however, these references are represented mside the referring part in ways that are specific to the content type of the part, that is, in arbitrary markup or an application-specific encoding This effectively hides the internal linkages between parts from readers that don't understand the content types of the parts containing such references
Even for common content types (such as the Fixed Payload markup described m the Reach Package section), a reader would need to parse all of the content m a part to discover and resolve the references to other parts For example, when implementing a print system that prints documents one page at a time, it may be desirable to identify pictures and fonts contained in the particular page Existing systems must parse all information for each page, which can be time consuming, and must understand the language of each page, which may not be the situation with certain devices or readers (e g , ones that are performing intermediate processing on
the document as it passes through a pipeline of processors on the way to a device) Instead, the systems and methods described herein use relationships to identify relationships between parts and to describe the nature of those relationships. The relationship language is simple and defined once so that readers can understand relationships without requiring knowledge of multiple different languages In one embodiment, the relationships are represented in XML as individual parts '"Each part has an associated relationship part that contains the relationships for which the part is a source
For example, a spreadsheet application uses this format and stores different spreadsheets as parts An application that knows nothing about the spreadsheet language can still discover various relationships associated with the spreadsheets. For example, the application can discover images in the spreadsheets and metadata associated with the spreadsheets An example relationship schema is provided below
(Equation Removed)
This schema defines two XML elements, one called 'Yelationshrps" and one called "relationship " This "relationship" element is used to describe a single relationship as described herein and has the following attributes (1) "target," which indicates the part to which the source part is related, (2) "name" which indicates the type or nature of the relationship The "relationships" element is defined to allow it to hold zero or more "relationship" elements and serves simply to collect these "relationship" elements together in a unit
The systems and methods described herein introduce a higher-level mechanism to solve these problems called "relationships" Relationships provide an additional way to represent the land of connection between a source part and a target part in a package Relationships make the connections between parts directly "discoverable" without looking at the content in the parts, so they are independent of content-specific schema and faster to resolve Additionally, these relationships are protocol independent A variety of different relationships may be associated with a particular pail
Relationships provide a second important function allowing parts to be related without modifying them. Sometimes this information serves as a form of "annotation" where the content type of the "annotated" part does not define a way to attach the given information. Potential examples include attached descriptive metadata, print tickets and true annotations Finally, some scenarios require information to be attached to an existing part specifically without modifying that part - for example, when the part is encrypted and can not be decrypted or when the part is digitally signed and changing it would invalidate the signature In another example, a user may want to attach an annotation to a JPEG image file The JPEG image format does not currently provide support for identifying annotations Changing the JPEG format to accommodate this user's desire is not practical
However, the systems and methods discussed herein allow the user to provide an annotation to a JPEG file without modifying the JPEG image format
In one embodiment, relationships axe represented usmg XML in relationship parts Each part in the container that is the source of one or more relationships has an associated relationship part This relationship part holds (expressed rn XML using the content type apphcation/PLACEHOLDER) the list of relationships for that source part
Fig 4 below shows an environment 400 m which a "spine" part 402 (similar to a FixedPanel) binds together three pages 406, 408 and 410. The set of pages bound together by the spine has an associated "print ticket" 404 Additionally, page 2 has its own print ticket 412 The connections from the spine part 402 to1 its-print ticket 404 and from page 2 to its pnnt ticket 412 are represented usmg relationships In the arrangement of Fig 4, the spine part 402 would have an associated relationship part which contained a relationship that connects the spme to ticketl, as shown in the example below
(Equation Removed)
Relationships are represented usmg elements nested in a smgle element These elements are defined in the http //mmcfrels (PLACEHOLDER) namespace See the example schema above, and related discussion, for example relationships
The relationship element has the following additional attributes
(Table Removed)
The Name attribute is not necessarily an actual address Different types of relationships are identified by their Names These names are defined rn the same way that namespaces are defined for XML namespaces Specifically, by using names patterned after the Internet domain name space, non-coordinating parties can safely create non-conflicting relationship names — just as they can for XML namespaces
The relationships part is not permitted to participate rn other relationships However, it is a first class part in all other senses (e g , it is URI addressable, it can be opened, read, deleted, etc) Relationships do not typically pomt at things outside the package URIs used to identify relationship targets do not generally include a URI scheme
A part and its associated relationship part are connected by a naming convention In this example, the relationship part for the spine would be stored m /content/_rels/sprne xml rels and the relationships for page 2 would be stored in /content/_rels/p2 xml rels Note two special naming conventions being used here. First, the relationship part for some (other) part in a given "folder" m the name hierarchy is stored in a "sub-folder" called _rels (to identify relationships) Second, the name of this relationship-holding part is formed by appending the rels
extension to the name of the original part In particular embodiments, relationship parts are of the content type apphcation/xml+relationshipsPLACEHOLDER
A relationship represents a directed connection between two parts Because of the way that the relationship is being represented, it is efficient to traverse relationships from their source parts (since it is trivial to find the relationships part for any given part) However, it is not efficient to traverse relationships backwards from the target of the relationship (since the way to find all of the relationships to a part is to look through all of the relationships in the container)
In order to make backwards traversal of a relationship possible, a new relationship is used to represent the other (traversable) direction This is a modeling technique that the designer of a type of relationship can use Following; the example above, if it were important to be able to find the spine that has ticketl attached, a second relationship would be used connecting from the ticket to the spine, such as
(Equation Removed)
Package Relationships
"Package Relationships" are used to find well-known parts in a package This method avoids relying on naming conventions for finding parts in a package, and ensures that there will not be collisions between identical part names m different payloads
Package relationships axe special relationships whose target is a part, but whose source is not the source is the package as a whole To have a "well-known" part is really to have a "well-known" relationship name that helps you find that part This works because there is a well-defined mechanism to allow relationships to be named by non-coordinating parties, while certain embodiments contain no such mechanism for part name - those embodiments are limited to a set of guidelines The package relationships are found in the package relationships part and is named using the standard naming conventions for relationship parts Thus it's named 7_rels/.rels"
Relationships in this package relationships part are useful in finding well-known parts
The Start Part
One example of a package-level, well-known part is the package "start" part This is the part that is typically processed when a package is opened. It represents the logical root of the document content stored in the package The start part of a package is located by following a well-known package relationship In one example, this relationship has the following name hrtp //mmcf-start-part-PLACEHOLDER.
Composition Parts: Selector and Sequence
The described framework defines two mechanisms for building higher-order structures from parts selectors and sequences
A selector is a part which "selects" between a number of other parts For example, a selector part might "select" between a part representing the English version of a document and a part representing the French version of a document A
sequence is a part which "sequences" a number of other parts For example, a sequence part might combine (into a linear sequence) two parts, one of which represents a five-page document and one of which represents a ten-page document
These two types of composition parts (sequence and selector) and the rules for assembling them comprise a composition model Composition parts can compose other composition parts, so one could have, for example, a selector that selects between two compositions As an example, consider Fig 5, which shows and example of a financial report containing both an English representation and a French representation Bach of these representations is further composed of an introduction (a cover page) followed by the financials (a spreadsheet) In this example, a selector 500 selects between the English and French representatfort of the report If the English representation is selected, sequence 502 sequences the English introduction part 506 with the English financial part 508 Alternately, if the French representation is selected, sequence 504 sequences the French introduction part 510 with the French financial part 512,
Composition Part XML
In the illustrated and described embodiment, composition parts are described using a small number of XML elements, all drawn from a common composition namespace As an example, consider the following
As an example, here is the XML for the example of Fig 5 above
(Equation Removed)
In this XML, MainDocument xml represents an entire part in the package and indicates, by virtue of the "selection" tag, that a selection is to be made between , different items encapsulated by the "item" tag, 1 e , the "EnghshRollup xml" and the "FrenchRollup xml"
The EnghshRollup xml and FrenchRollup xml are, by virtue of the "sequence" tags, sequences that sequence together the respective items encapsulated by their respective "item" tags
Thus, a simple XML grammar is provided for describing selectors and sequences Each part in this composition block is built and performs one operation—either selecting or sequencing By using a hierarchy of parts, different robust collections of selections and sequences can be built
Composition Block
The composition block of a package comprises the set of all composition parts (selector or sequence) that are reachable from the starting part of the package If the starting part of the package is neither a selector nor a sequence, then the composition block is considered empty If the starting part is a composition part, then the child s in those composition parts are recursively traversed to produce a directed, acyclic graph of the composition parts (stopping traversal when a non-composition part is encountered) This graph is the composition block (and it must, in accordance with this embodiment, be acyclic for the package to be valid)
Determining Composition Semantics
Having established the relatively straight forward XML grammar above, The following discussion describes a way to represent the information such that selections can be made based on content type That is, the XML described above provides enough information to allow readers to locate the parts that are assembled together into a composition, but does not provide enough information to help a reader know more about the nature of the composition For example, given a selection that composes two parts, how does a reader know on what basis (e g , language, paper size, etc ) to make the selection0 The answer is that these rules are associated with the content type of the composition part Thus, a selector part that is used for picking between representations based on language will have a different associated content type from a selector part that picks between representations based on paper sizes
The general framework defines the general form for these content types.
Application/XML+Selector-SOMETHING Apphcation/XML+Sequence-SOMETHING
The SOMETHING in these content types is replaced by a word that indicates the nature of the selection or sequence, e g page size, color, language, resident software on a reader device and the like In this framework then, one can invent all kinds of selectors and sequences and each can have very different semantics
The described framework also defines the following well-known content types for selectors and sequences that al] readers or reading devices must understand.
(Table Removed)
As an example, consider the following Assume a package contains a document that has a page, and in the middle of the page there is an area in which a video is to appear In this example, a video part of the page might comprise video in the form of a Qmcktrme video One problem with this scenario is that QuickTime videos are not universally understood. Assume, however, that in accordance with this framework and, more particularly, the reach package format described below, there is a universally understood image format—JPEG When producing the package that contains the document desenbed above, the producer might, in addition to defining the video as a part of the package, define a JPEG image for the page and interpose a SupportedContentType selector so that if the user's computer has software that understands the Quicktrme video, the QuickTime video is selected, otherwise the JPEG image is selected
Thus, as described above, the framework-level selector and sequence components allow a robust hierarchy to be built which, in this example, is defined in XML In addition, there is a well-defined way to identify the behaviors of selectors and sequences using content types Additionally, m accordance with one embodiment, the general framework comprises one particular content type that is predefined and which allows processmg and utilization of packages based on what a consumer (eg a reader or reading device) does and does not understand.
Other composition part content types can be defined using similar rules, examples of which are discussed below
Descriptive Metadata
In accordance with one embodiment, descriptive metadata parts provide writers or producers of packages with a way in which to store values of properties that enable readers of the packages to reliably discover the values These properties are typically used to recoid additional information about the package as a whole, as well as individual parts within the container For example, a descriptive metadata part in a package might hold information such as the author of the package, keywords, a summary, and the like
In the illustrated and described embodiment, the descriptive metadata is expressed in XML, is stored in parts with well-known content types, and can be found using well-known relationship types
Descriptive metadata holds metadata properties Metadata properties are represented by a property name and one or many property values Property values have simple data types, so each data type is descnbed by a single XML qname The fact that descriptive metadata properties have simple types does not mean that one cannot store data with complex XML types in a package In this case, one must
store the information as a full XML part When this is done, all constraints about only using simple types are removed, but the simplicity of the "flat" descnptive metadata property model is lost
In addition to the general purpose mechanism for defining sets of properties, there is a specific, well-defined set of document core properties, stored using this mechanism These document pore properties are commonly used to describe documents and include properties hlce title, keywords, author, etc
Finally, metadata parts holding these document core properties can also hold additional, custom-defined properties in addition to the document core properties.
Metadata Format
In accordance with one embodiment, descriptive metadata parts have a content type and are targeted by relationships according to the following rules
(Table Removed)
The folio-wing XML pattern is used to represent descriptive metadata in
accordance with one embodiment Details about each component of the markup are
given m the table after the sample
(Table Removed)
Document Core Properties
The following is a table of document core properties that includes the name of the property, the property type and a description (Table Removed)
Physical Model
The physical model defines various ways in which a package is used by writers and readers This model is based on three components, a writer, a reader and a pipe between them Fig 6 shows some examples of writers and readers working together to communicate about a package.
The pipe carries data from the writer to the reader In many scenarios, the pipe can simply comprise the API calls that the reader makes to read the package from the local file system This is referred to as direct access
Often, however, the reader and the writer must communicate with each other over some type of protocol This communication happens, for example, across a process boundary or between a server and a desktop computer This is referred to as networked access and is important because of the communications characteristics of the pipe (specifically, the speed and request latency)
In order to enable maximum performance, physical package designs must consider support in three important areas access style, layout style and communication style
Access Style
Streaming Consumption
Because corrrmunication between the writer and the reader using networked access is not instantaneous, it is important to allow for progressive creation and consumption of packages In particular, it is recommended, m accordance with this embodiment, that any physical package format be designed to allow a reader to begin interpreting and processing the data it receives the data (c g, parts), before all of the bits of the package have been delivered through the pipe This capability is called streaming consumption
Streaminfi Creation
When a writer begins to create a package, it does not always know what it will be putting in the package As an example, when an application begins to build a print spool file package, it may not know how many pages will need to be put into the package As another example, a program on a server that is dynamically generating a report may not realize how long the report will be or how many pictures the report will have - until it has completely generated the report In order
to allow writers like this, physical packages should allow writers to dynamically add parts after other parts have already been added (for example, a writer must not be required to state up front how many parts it will be creating when it starts writing) Additionally, physical packages should allow a writer to begin writing the contents of a part without knowing the ultimate length of that part Together, these requirements enable streaming creation
Simultaneous Creation and Consumption
In a highly-pipelined architecture, streaming creation and streaming consumption can occur simultaneously for a specific package. When designing a physical package, supporting streaming creation and supporting streaming consumption can push a design in opposite directions However, it is often possible to find a design that supports both. Because of the benefits in a pipelined architecture, it is recommended that physical packages support simultaneous creation and consumption
Layout Styles
Physical packages hold a collection of parts These parts can be laid out in one of two styles simple ordering and interleaved. With simple ordering, the parts in the package are laid out with a defined ordering When such a package is delivered m a pure linear fashion, starting with the first byte in the package through to the last, all of the bytes for the first part arrive first, then all of the bytes for the second part, and so on.
With interleaved layout, the bytes of the multiple parts are interleaved, allowing for improved performance m certain scenarios Two scenarios that benefit significantly from interleaving are multi-media playback (e g , delivering video and
audio at the same time) and inline resource reference (e g, a reference in the middle
of a markup file to an image)
Interleaving is handled through a special convention for organizing the contents of mterleaved parts By breaking parts into pieces and interleaving these pieces, it is possible to achieve the desired results of interleaving while still making it possible to easily reconstruct the original larger part To understand how interleaving works, Fig 7 illustrates a simple example involving two parts content xml 702 and image jpeg 704 The fust part, content xmL describes the contents of a page and in the middle of that page is a reference to an image (image jpeg) that should appear on the page
To understand why interleaving is valuable, consider how these parts,would be arranged in a package using simple ordering, as shown in Fig. 8 A reader that is processing this package (and is receiving bytes sequentially) will be unable to display the picture until it has received all of the content xml part as well as the image jpeg In some circumstances (e g, small or simple packages,, or fast communications links) this may not be a problem In other circumstances (for example, if content xml was very large or the commumcations link was very slow), needing to read through all of the contentxml part to get to the image will result m unacceptable performance or place unreasonable memory demands on the reader system
In order to achieve closer to ideal performance, it would be nice to be able to split the content xml part and insert the image jpeg part into the middle, right after where the picture is referenced This would allow the reader to begin processmg the image earher as soon as it encounters the reference, the image data follows. This would produce, for example, the package layout shown in Fig 9 Because of the performance benefits, it is often desirable that physical packages support
interleaving Depending on the kind of physical package being used, interleaving may or may not be supported. Different physical packages may handle the internal representation of interleaving differently Regardless of how the physical package handles interleaving, it's important to remember that interleaving is an optimization that occurs at the physical level and a part that is broken into multiple pieces in the physical file is still one logical part, the pieces themselves aren't parts
Communication Styles
Commumcation between writer and reader can be based on sequential delivery of parts or by random-access to parts, allowing them to be accessed out of order Which of these commumcation styles is utilized depends on the capabilities of both the pipe and the physical package format Generally, all pipes will- support sequential delivery Physical packages must support sequential delivery To support random-access scenarios, both the pipe m use and the physical package must support random-access Some pipes are based on protocols that can enable random access (e g, HTTP 1 1 with byte-range support) In order to allow maximum performance when these pipes are in use, it is recommended that physical packages support random-access In the absence of this support, readers will simply wait until the parts they need are delivered sequentially
Physical Mappings
The Togical packaging model defines a package abstraction, an actual instance of a package is based on some particular physical representation of a package The packaging model may be mapped to physical persistence formats, as well as to various transports (e g, network-based protocols) A physical package format can be described as a mapping from the components of the abstract
packaging model to the features of a particular physical format The packaging model does not specify which physical package formats should be used for archiving, distributing, or spooling packages In one embodiment, only the logical structure is specified. A package may be "physically" embodied by a collection of loose files, a ZIP file archive, a compound file, or some other format The format chosen is supported by the targeted consuming device, or by a driver for the device
Components Being Mapped
Each physical package format defines a mapping for the following components Some components are optional and a specific physical package format may not support these optional components
(Table Removed)
There exist many physical storage formats whose features partially match the packaging-model components In defining mappings from the packaging model to such storage formats, it may be desirable to take advantage of any similarities in capabilities between the packaging model and the physical storage medium,' while using layers of mapping to provide additional capabilities not inherently present in the physical storage medium For example, some physical package formats may store individual parts as individual files m a file system In such a physical, format, it would be natural to map many part names directly to identical physical file names Part names using characters which are not valid file system file names may require some land of escaping mechatusm.
In many cases, a single common mapping problem may be faced by the designers of different physical package formats Two examples of common mapping problems arise when associating arbitrary Content Types with parts, and when supporting the Interleaved layout style This specification suggests common solutions to such common mapping problems Designers of specific physical package formats may be encouraged, but are not required, to use the common mapping solutions defined here
Identifying Content Types of Parts
Physical package format mappings define a mechanism for storing a content type for each part Some physical package formats have a native mechanism for representing content types (for example, the "Content-Type" header in MIME) For such physical packages, it is recommended that the mapping use the native mechanism to represent content types for parts For other physical package formats, some other mechanism is used to represent content types The recommended mechanism for representing content types in these packages is hy including a specially-named XML stream in the package, known as the types stream This stream is not a part, and is therefore not itself URI-addressable However, it can be interleaved in the physical package using the same mechanisms ,used' for interleaving parts,
The types stream contains XML with a top level "Types" element, and one or more "Default" and "Override" sub-elements The "Default" elements define default mappings from part name extensions to content types This takes advantage of the fact that file extensions often correspond to content type "Override" elements are used to specify content types on parts that are not covered by, or are not consistent with, the default mappings Package writers may use "Default" elements to reduce the number of per-part "Override" elements, but are not required to do so
The "Default" element has the following attributes (Table Removed)
The "Override" element has the following attributes (Table Removed)
The following is an example of the XML contained in a types stream
The following table shows a sample list of parts, and their corresponding
content types as defined by the above types stream
(Table Removed)
For every part in the package, the types stream contains either (a) one matching "Default" element, (b) one matching "Override" element, or (c) both a matching "Default" element and a matching "Override" element (in which case the "Override" element takes precedence) In general there is, at most, one "Default" element for any given extension, and one "Override" element for any given part name
The order of "Default" and "Override" elements in the types stream is not significant However, m interleaved packages, "Default" and "Override".elements appear in the physical package before the part(s) they correspond to
Interleaving
Not all physical packages support interleaving of the data streams of parts natively In one embodiment, a mapping to any such physical package uses the general mechanism dcscnbed in this section to allow interleaving of parts The general mechanism works by breaking the data stream of a part into multiple pieces that can then be interleaved with pieces of other parts, or whole parts The individual pieces of a part exist m the physical mapping and are not addressable in the logical packaging model Pieces may have a zero size
The following unique mapping from a part name to the names for the individual pieces of a part is defined, such that a reader can stitch together the pieces in then original order to form the data stream of the part
Grammar for deriving piece names for a given part name
piece_name = part_name "/" " [" l*digit *]" [ " last" ] " piece"
The following validity constraints exist for piecejnames generated by the grammar
• The piece numbers start with 0, and are positive, consecutive integer numbers. Piece numbers can be left-zero-padded
• The last piece of the set of pieces of a part contains the ".last" in the piece name before " piece",
• The piece name is generated from the name of the logical part before mapping to names in the physical package
Although it is not necessary to store pieces in their natural order, such storage may provide optimal efficiency A physical package containing interleaved (pieced) parts can also contain non-interleaved (one-piece) parts, so the following example would be valid.
(Table Removed)
Specific Mappings
The following defines specific mappings for the following physical formats Loose files m a Windows file system
Mapping to Loose Files in a Windows file system
In order to better understand how to map elements of the logical model to a physical format, consider the basic case of representing a Metro package as a collection of loose files in a Windows file system. Each part m the logical package will be contained in a separate file (stream). Each part name in the logical model corresponds to the name of the file
(Table Removed)
The part names are translated into valid Windows file names, as illustrated by the table below
Given below are two character sets that are valid for logical part name segments (URI segments) and for Windows filenames, This table reveals two important things
There are two valid URI symbols colon (.) and asterisk (*) which we need to escape when converting a URI to a filename
There are valid filename symbols ^ {} [] # which cannot be present in a URI (they can be used for special mapping purposes, like interleaving)
"Escaping" is used as a technique to produces valid filename characters when a part name contains a character that can not be used in a file name To escape a character, the caret symbol (A) is used, followed by the hexadecimal representation of the character
To map from an abs j?a£h (part name) to a file name
remove first /
convert all / to escape colon and asterisk characters
For example, the part name /a:b/c/d*.xaml becomes the following filename aA25b\c\dA2a.xaml
To perform the reverse mapping,
convert all \ to /
add / to the beginning of the string
unescape characters by replacing ^[hexCode] with the corresponding character (Table Removed)
Versioning and Extensibility
Like other technical specifications, the specification contained herein may evolve with future enhancements The design of the first edition of this specification includes plans for the future interchange of documents between software systems written based on the first edition, and software systems written for future editions Similarly, this specification allows for third-parties to create extensions to the specification Such an extension might, for example, allow for the construction of a document which exploits a feature of some specific printer, while still retaining compatibility with other readers that are unaware of that printer's existence
Documents using new versions of the Fixed Payload markup, or third-party extensions to the markup, require readers to make appropriate decisions about behavior (e g , how to render something visually). To guide readers, the author of a document (or the tool that generated the document) should identify appropriate
behavior for readers encountering otherwise-unrecognized elements or attributes For Reach documents, this type of guidance is important
New printers, browsers, and other clients may implement a variety of support for future features. Document authors exploiting new versions or extensions must carefully consider the behavior of readers unaware of those versions of extensions
Versioning Namespace
XML markup recognition is based on namespace URIs For any XML-namespace, a reader is expected to recognize either all or none of the XML-elements and XML-attributes defined in that namespace. If the reader does not recognize the new namespace, the reader will need to perform fallback rendering operations as specified within the document
The XML namespace URI http //PLACEHOLDER/version- control' includes the XML elements and attributes used to construct Fixed payload markup that is version-adaptive and extensions-adaptive Fixed Payloads are mot required to have < versioning elements within them In order to build adaptive content, however, one must use at least one of the and XML-elements
This Frxed-Payload markup specification has an xmlns URI associated with it 'http //PLACEHOLDER/pdl' Using this namespace in a Fixed Payload will indicate to a reader application that only elements defined in this specification will be used Future versions of this specification will have their own namespaces Reader applications familiar with the new namespace will know how to support the superset of elements of attributes defined in previous versions Reader applications that are not familiar with the new version will consider the URI of the new version as if it were the URI of some unknown extension to the PDL These applications
may not know that a relationship exists between the namespaces, that one is a superset of the other
Backward and 'Torward" Compatibility
In the context of applications or devices supporting the systems and methods discussed herein, compatibility is indicated by the ability of clients to parse and display documents that were authored using previous versions of the specification, or unknown extensions or versions of the specification. Various versioning mechanisms address "backward compatibility," allowing future implementations of clients to "be able to support documents based on down-level versions of the specification, as illustrated below
When an implemented client, such as a printer, receives a document built using a future version of the markup language, the client will be able to parse and , understand the available rendering options The ability of client software, written according to an older version of a specification to handle some documents using features of a newer version is often called "forward compatibility." A document written to enable forward compatibility is described as "version-adaptive "
Further, because implemented clients will also need to be able to support documents that have unknown extensions representing new elements or properties, various semantics support the more general case of documents that are "extension adaptive "
If a printer or viewer encounters extensions that are unknown, it will look for information embedded alongside the use of the extension for guidance about adaptively rendering the surrounding content This adaptation involves replacing unknown elements or attributes with content that is understood However, adaptation can take other forms, including purely ignoring unknown content In the
absence of explicit guidance, a reader should treat the presence of an unrecognized extension in the markup as an error-condition If guidance is not provided, the extension is presumed to be fundamental to understanding the content The rendering failure will be captured and reported to the user
To support this model, new arid extended versions of the markup language should logically group related extensions m namespaces In this way, document authors will be able to take advantage of extended features using a minimum number of namespaces
Versioning Markup
The XML vocabulary for supporting extension-adaptive behavior includes the following elements
(Table Removed)
The Compatibility Rules> Element
Compatibility Rules can be attached to any element that can hold an attached attribute, as well as to the Xaml root element The Compatibility Rules> element controls how the parser reacts to unknown elements or attributes Normally such .' items are reported as errors Adding an Ignorable element to a Compatibilitiy Rules property informs the compiler that items from certain namespaces can be ignored.
Compatibility Rules can contain the elements Ignorable and MustUnderstand. By default, all elements and attributes are assumed to be MustUnderstand Elements and attributes can be made Ignorable by adding an Ignorable element into its container's Compatibility Rules property. An element or property can be made MustUnderstand again by adding a MustUnderstand element to one of the nested containers One Ignorable or MustUnderstand refers to a particular namespace URI within the same Compatibility Rules element
The element affects the contents of a container, not the container's own tag or attributes To affect a container's tag or attributes, its
container must contain the compatibility rules The Xaml root element can be used to specify compatibility rules for elements that would otherwise be root elements, such as Canvas The Compatibility ,Rules compound attribute is the first element rn a container.
The Element
The element declares that the enclosed namespace URI is ignorable An item can be considered ignorable if an tag is declared ahead of the item in the current block or a container block, and the namespace URI is unknown to the parser If the URI is known, the Ignorable tag is disregarded and all items are understood In one embodiment, all items not explicitly declared" as Ignorable must be understood. The Ignorable element can contain and elements, which are used to modify- how an element is ignored as well as give guidance to document editing tools how such content should be preserved rn edited documents
The Element
The element declares that if an element is ignored, the contents of the element will be processed as if it was contained by the container of the ignored element
Attributes (Table Removed)
The Element
The optional element indicates to the document editing tools whether jgnorable content should be preserved when the document is modified The method by which an editing tool preserves or discards the ignorable content is in the domain of the editing tool. If multiple elements refer to the same element or attribute in a namespace, the last specified has precedence.
(Table Removed)
The Element
is an element that reverses the effects of an Ignorable element This technique is useful, for example, when combined with alternate
content Outside the scope defined by the element, the element
remains Ignorable
(Table Removed)
The Element
The element allows alternate content to be provided if any part of the specified content is not understood. An AltexnateContent block uses both a and a block. If anything in the block is not understood, then the contents of the block are used A namespace is declared in order to indicate that the fallback is to be used. If a namespace is declared ignorable and that namespace is used within a block, the content in the block will not be used.
Versiomng Markup Examples
Using
This example uses a fictitious markup namespace, http //PLACEHOLDER/Circle. that defines an element Circle m its initial version and uses the Opacity attribute of Circle introduced in a future version of the markup (version 2) and the Luminance property introduced in an even later version of the markup (version 3) This markup remains loadable in versions 1 and 2, as well as 3 and beyond. Additionally, the element specifies that v3 Luminance
MUST be preserved when editing even when the editor doesn't understand v3 Luminance
(Sequence Removed)
Using
The following example demonstrates the use of the element
(Sequence Removed)
Use of the element causes the references to Y3 Luminance to be in error, even though it was declared to Ignorable in the root element This technique is useful if combined with alternate content that uses, for example, the Luminance property of Canvas added in Version 2 instead (see below) Outside the scope of the Canvas element, Circle's Luminance property is ignorable again,
(Sequence Removed)
Using
If any element or attribute is declared as but is not
understood in the block of an block, the
block is skipped m its entirety and the block is processed as normal
(that is, any Must Understand items encountered are reported as errors)
(Sequence Removed)
THE REACH PACKAGE FORMAT
In the discussion that follows, a description of a specific file format is provided Separate primary sub-headings in this section include "Introduction to the Reach Package Format", "The Reach Package Structure", "Fixed Payload Parts", "FixedPage Markup Basics", "Fixed-Payload Elements and Properties" and < "FrxedPage Markup" Each primary sub-heading has one or more related subheadings
Introduction to the Reach Package Format
Haying described an exemplary framework above, the description that follows is one of a specific format that is provided utilizing the tools described above It is to be appreciated and understood that the following description constitutes but one exemplary format and is not intended to limit application of the claimed subject matter
In accordance with this embodiment, a single package may contain multiple payloads, each acting as a different representation of a document A -payload is a
collection of parts, including an identifiable "root" part and all the parts required for valid processing of that root part. For instance, a pavload could be a fixed representation of a document, a reflowable representation, or any arbitrary representation,
The description that follows defines a particular representation called the fixed payload A fixed payload has a root part that contains a FixedPanel markup which, in turn, references FixedPage parts Together, these describe a precise rendering of a multi-page document
A package which holds at least one fixed payload, and follows other rules described below, is known referred to as a reach package. Readers and writers of reach packages can implement their own parsers and rendering engines, based on the specification of the reach package format.
Features of Reach Packages
In accordance with the described embodiment, reach packages address the requirements that information workers have for distributing, archiving, and rendering documents Using known rendering rules, reach packages can be unambiguously and exactly reproduced or printed from the format in which they are saved, without tying client devices or applications to specific operating systems or service libraries Additionally, because the reach payload is expressed in a neutral, application-independent way, the document can typically be viewed and printed without the application used to create the package To provide this ability, the notion of a fixed payload is introduced and contained in a reach package
In accordance with the described embodiment, a fixed payload has a fixed number of pages and page breaks are always the same The layout of all the elements on a page m a fixed payload is predetermined. Each page has a fixed size
and orientation As such, no layout calculations have to be performed on the consuming side and content can simply be rendered This applies not just to graphics, but to text as well, which is represented in the fixed payload with precise typographic placement. The content of a page (text, graphics, images) is described using a powerful but simple set of visual pnmihves
Reach packages support a variety of mechanisms for organizing pages A group of pages are "glued" together one after another into a "FixedPanel" This group of pages is roughly equivalent to a traditional multi-page document A FixedPanel can then further participate m composition—the process of building sequences and selections to assemble a "compound" document
In the illustrated and described embodiment, reach packages supports a specific land of sequence called a FixedPanel sequence that can be used, for example, to glue together a set of FixedPanels into a single, larger "document" Imagine, for example, gluing together two documents that came from different sources a two-page cover memo (a FixedPanel) and a twenty-page report (a FixedPanel)
Reach packages support a number of specific selectors that can be used when building document packages containing alternate representations of the "same" content In particular, reach packages allow selection based on language, color capability, and page size Thus, one could have, for example, a bi-hngual document that uses a selector to pick between the English representation and the French representation of the document
In addition to these simple uses of selector and sequence for composition m a reach package, it is important to note that selectors and sequences can also refer to further selectors and sequences thus allowing for powerful aggregate hierarchies to be built The exact rules for what can and cannot be done, in accordance with this
embodiment, are specified below in the section entitled "The Reach Package Structure"
Additionally, a reach package can contain additional payloads that are not fixed payloads, but instead are richer and perhaps editable representations of the document This allows a package to contain a rich, editable document that works well m an editor application as well as a representation that is visually accurate and can be viewed without the editing application
Finally, in accordance with this embodiment, reach packages support what is known as a print ticket. The print ticket provides settings that should be used when the package is printed. These print tickets can be attached in a variety of ways to achieve substantial flexibility For example, a print ticket can he "attached^ "to *an enure package and its settings will affect the whole package Print tickets can be further attached at lower levels in the structure (e g , to individual pages) and these print tickets -will provide override settings to be used when printing the; part to which they are attached.
The Reach Package Structure
As described above, a reach package supports a set of features including "fixed" pages, FixedPanels, composition, print tickets, and the like These features are represented in a package using the core components of the package model parts and relationships In this section and its related sub-sections, a complete definition of a "reach package" is provided, including descriptions of how all these parts and relationships must be assembled, related, etc
Reach Package Structure Overview
Fig 10 illustrates an exemplary reach package and, in this embodiment, each of the valid types of parts that can make up or be found in a package The table provided just below lists each valid part type and provides a description of each
(Table Removed)
Because a reach package is designed to be a "view and print anywhere" document, readers and writers of reach packages must share common, unambiguously-defined expectations of what constitutes a 'Valid'' reach package To provide a definition of a "valid" reach package, a few concepts are first defined below
Reach Composition Parts
A reach package must contain at least one FixedPanel that is "discoverable" by traversing the composition block from the starting part of the package In accordance with the descnbed embodiment, the discovery process follows the following algorithm
• Recursively traverse the graph of composition parts starting at the package starting part.
• When performing this traversal, only traverse into composition parts that are reach composition parts (described below)
• Locate all of the terminal nodes (those without outgoing arcs) at the edge pf the graph.
These terminal nodes refer (via their elements) to a set of parts called the reach payload roots
Fixed Payload
A fixed payload is a payload whose root part is a FixedPanel part. For example, each of the fixed payloads in Fig 10 has as its root part an associated FixedPanel part The payload mcludes the full closure of all of the parts required for valid processing of the FixedPanel These mclude
• The FixedPanel itself,
• All FixedPages referenced from within the FixedPanel,
• All image parts referenced (directly, or indirectly through a selector) by any of the FixedPages in the payload;
• AH reach selectors (as described below) referenced directly or indirectly from image brushes used within any of the FixedPages within the payload,
• All font parts referenced by any of the FixedPages in the payload,
• All descriptive metadata parts attached to any part in the fixed payload, and
• Any print tickets attached to any part in the fixed payload-
Validity Rules for Reach Package
With the above definitions in place, conformance rules that describe a "valid" reach package in accordance with the described embodiment are now described
• A reach package must have a starting part defined using the standard
mechanism of a package relationship as described above,
The starting part of a reach package must be either a selector or a sequence,
• A reach package must have at least one reach payload root that is a FixedPanel,
• PnntTicket parts may be attached to any of the composition parts, FixedPanel parts or any of the FixedPage parts identified in the FrxedPanel(s). In the present example, this is done via the http;//PLACEHOLDER/HasPrmtTicketRel relationship,
D PrrntTickets may be attached to any or all of these parts, o Any given part must have no more, than one PnntTicket attached,
• A Descriptive Metadata part may be attached to any part in the package,
• Every Font object m the FixedPayload must meet the font format rules defined in section "Font Parts"
• References to images from within any FixedPage in the fixed payload may point to a selector which may make a selection (potentially recursively through other selectors) to find the actual image partrto be rendered,
• Every Image object used in the fixed payload must meet the font format rules defined in section "Image Parts";
• For any font, image or selector part referenced from a EixedPage (directly, or indirectly through selector), there must be a "required part" relationship (relationship name - http //mmcf-fixed-RequiredResouxce-PLACEHOLDER) from the referencing EixedPage to the referenced part '
Reach Composition Parts
While a reach package may contain many types of composition part, only a well-defined set of types of composition parts have well-defined behavior according to this document These composition parts with well-defined behavior are called reach composition parts Parts other than these are not relevant when determining validity of a reach package
The following types of composition parts are defined as reach composition parts
(Table Removed)
Reach Selectors
Those selector composition parts defined as reach composition parts are called reach selectors As noted above, a language selector picks between representations based on their natural language, such as English or French To discover this language, the selector inspects each of its items Only those that are XML are considered For those, the root element of each one is inspected to determine its language If the xml.lang attribute is not present, the part is ignored The selector then considers each of these parts in turn, selecting the first one whose language matches the system's default language,
A color selector chooses between representations based on whether they are monochromatic or color The page size selector chooses between representations based on their page size A content type selector chooses between representations based on whether their content types can be understood by the system
Reach Sequences
Those sequence composition parts defined as reach composition parts are called reach sequences A. fixed sequence combines children that are fixed content mto a sequence
Fixed Payloads Parts
The fixed payload can contain the following kinds of parts a FixedPanel part, a FixedPage part, Image parts, Font parts, Print Ticket parts, and Descriptive Metadata parts, each of which is discussed below under its own sub-heading
The FixedPanel Part
The document structure of the Fixed-Payload identifies FrxedPages as part of a spine, as shown below The relationships between the spine part and the page parts are defined within the relationships stream for the spine. The FixedPanel part is of content type apphcauon/xml+PLACEHOLDBR
The spine of the Fixed-Payload content is specified rn markup by including a element within a element In the example below, the element specifies the sources of the pages that are held tn th& spme
(Sequence Removed)
The Element
The element has no attributes and must have only one child.
The Element
The element is the document spine, logically binding an ordered sequence of pages together into a single multi-page document Pages always specify their own width and height, but a element may also optionally specify a height and width. This information can be used for a variety of purposes including, for example, selecting between alternate representations based on page size If a element specifies a height and width, it will usually be aligned with the width and height of the pages within the , but these dimensions do not specify the height and width of individual pages
The following table summarizes FixedPanel attributes in accordance with the described embodiment
(Table Removed)
The element is the only allowable child element of the element The elements are in sequential markup order matching the page order of the document
The Element
Each element refers to the source of the content for a single page To determine the number of pages in the document, one would count the number of children contained within the .
The element has no allowable children, and has a single required attribute, Source, which refers to the FixedPage part for the contents of a page
As with the element, the element may optionally include a PageHeight and PageWidth attribute, here reflecting the size of the single page The required page size is specified in the FixedPage part, the optional size on is advisory only The size attributes allow applications such as document viewers to make visual layout estimates for a document quickly, without loading and parsing all of the individual FixedPage parts
The table provided just below summarizes attributes and provides a description of the attributes
(Table Removed)
The URI string of the page content must reference the part location of the content relative to the package
The FixedPage Part
Each element in the references by name (URI) a FixedPage part Each FixedPage part contains FixedPage markup describing the rendering of a single page of content The FixedPage part xs of Content Type apphcation/xml+PLACEHOLDEPv-FixedPage
Describing FixedPages in Markup
Below is an example of how the markup of the source content might look for the page referenced rn the sample spine markup above ()
(Table Removed)
The table below summarizes FixedPage properties and provides a description of the properties
(Table Removed)
Reading Order in FixedPage Markup
In one embodiment, the markup order of the Glyphs child elements contained within a FixedPage must be the same as fhe desired reading order of the text content of the page This reading order may "be used both for interactive selection/copy of sequential text from a FixedPage m a viewer, and for enabling access to sequential text by accessibility technology It is the responsibility of the application generating the FixedPage markup to ensure this correspondence between markup order and reading order.
Image Parts
Supported Formats
In accordance with the described embodiment, image parts used by FixedPages in a reach package can be in a fixed number of formats, e,g , PNG or JPEG, although other formats can be used
Font Parts
In accordance with the described embodiment, reach packages support a limited number of font formats In the illustrated and described embodiment, the supported font format include the TrueType format and the OpenType format
As will be appreciated by the skilled artisan, the OpenType font format is an extension of the TrueType font format, adding support for PostScript font data and complex typographical layout An OpenType font file contains data, in table format, that comprises either a TrueType outline font or a PostScript outline font.
In accordance with the described embodiment, the following font formats are not supported in reach packages Adobe type 1, Bitmap font, Font with hidden attribute (use system Flag to decide whether to enumerate it or not), Vector fonts, and EUDC font (whose font family name is EUDC)
Subsetting Fonts
Fixed payloads represent all text using the Glyphs element described m detail below Since, in this embodiment, the format is fixed, it is possible to subset fonts to contain only the glyphs required by FrxedPayloads Therefore, fonts in reach packages may be subsetted based on glyph usage Though a subsetted font will not
contain all the glyphs in the original font, the subsetted font must be a valid
OpenType font file
Print Ticket Parts
Print ticket parts provide settings that can be used when the package is printed These print tickets can be attached rn a variety of ways to achieve substantial flexibility For example, a print ticket can be "attached" to an entire package and its settings will affect the whole package Print tickets can be further attached at lower levels in the structure (e g, to individual pages) and these print tickets will provide override settings to be used when printing the part to which they are attached.
Descriptive Metadata
As noted above, descriptive metadata parts provide writers or producers of packages with a way rn which to store values of properties that enable readers of the packages to reliably discover the values These properties are typically used to record additional information about the package as a whole, as well as individual parts within the container
FixedPage Marknp Basics
This section describes some basic information associated with the FixedPage markup and includes the following sections "Fixed Payload and Other Markup Standards", "FixedPage Markup Model", "Resources and Resource References", and "FixedPage Drawing Model"
Fixed Payload and Other Markup Standards
The FixedPanel and FixedPage markup for the Fixed Payload m a Teach package is a subset from Windows® Longhorn's Avalon XAML markup That is, while the Fixed Payload markup stands alone as an independent XML markup format (as documented in this document), it loads in the same way as in Longhorn systems, and renders a WYSIWYG reproduction of the original multi-page document
As some background on XAML markup, consider the following XAML markup is a mechanism that allows a user to specify a hierarchy of objects and the programming logic behind the objects as an XML-based markup language. This provides the ability for an object model to be described in XML- This callows extensible classes, such as classes in the Common Language Runtime (CLR) of the NET Framework by Microsoft Corporation, to be accessed in XML. The XAML mechanism provides a direct mapping of XML tags to CLR objects and the ability to represent related code in the markup, It is to be appreciated and understood that various implementations need not specifically utilize a CLR-based implementation of XAML Rather, a CLR-based implementation constitutes but one way in which XAML can be employed m the context of the embodiments described in this document
More specifically, consider the following in connection with Fig. 11 which illustrates an exemplary mapping of CLR concepts (left side components) to XML (right side components) Namespaces are found in the xmlns declaration using a CLR concept called reflection Classes map directly to XML tags. Properties and events map directly to attributes Using this hierarchy, a user can specify a hierarchy tree of any CLR objects m XML markup files Xaml files are xml files with a xaml extension and a mediatype of appli cation/xaml+xml Xaml files have
one root tag that typically specifies a namespace using the xmlns attribute The namespace maybe specified in other types of tags
Continuing, tags m a xaml file generally map to CJLR objects Tags can be elements, compound properties, definitions or resources, Elements are CLR objects that are generally instantiated during runtime and form a hierarchy of objects Compound property tags are used to set a property in a parent tag Definition tags are used to add code into a page and define resources. The resource tag provides the ability to reuse a tree of objects merely by specifying the tree as a resource Definition tags may also be defined within another tag as an xmlns attribute
Once a document is suitably described in markup (typically by a writer), the markup can be parsed and processed (typically by a reader) A suitably configured parser determines from the root tag which CLR assemblies and namespaces should be searched to find a tag In many instances, the parser looks for and will find a namespace definition file in a URL specified by the xmlns attribute The namespace defmihon file provides the name of assemblies and their install path and , a list of CLR namespaces. When the parser encounters a tag, the parser determines which CLR class the tag refers to using the xmlns of the tag and the xmlns definition file for that xmlns The parser searches on the order that the assemblies and namespaces are specified in the definition file When it finds a match, the parser instantiates an object of the class
Thus, the mechanism described just above, and more fully in the application incorporated by reference above, allows object models to be represented in an XML-based file using markup tags This ability to represent object models as markup tags can be used to create vector graphic drawings, fixed-format documents, adaptive-flow documents, and application UIs asynchronously or synchronously
In the illustrated and described embodiment, the Fixed Payload markup is a very minimal, nearly completely parsimonious subset of Avalon XAML rendering primitives. It represents visually anything that can be represented m Avalon, with full fidelity The Fixed Payload markup is a subset of Avalon XAML elements and properties—plus additional conventions, canonical forms, or restrictions in usage compared to Avalop XAML
The radically-rmmmal Fixed Payload markup set defined reduces the cost associated with implementation and testing of reach package readers, such as printer RIPs or interactive viewer applications—as well as reducing the complexity and memory footprint of the associated parser The parsimonious markup set also minimizes the opportunities for subsetting, errors, or inconsistencies among reach package writers and readers, making the format and its ecosystem inherently more robust,
In addition to the minimal Fixed Payload markup, the reach package will specify markup for additional semantic information to support viewers or presentations of Teach package documents with features such as hyperlinks, section/outline structure and navigation, text selection, and document accessibility
Finally, usmg the versioning and extensibility mechanisms described, above, it is possible to supplement the minimal Fixed Payload markup with a richer set of elements for specific target consuming applications, viewers, or devices
FixedPage Markup Model
In the illustrated and described embodiment, a FrxedPage part is expressed in an XML-based markup language, based on XML-Elements, XML-Attributes, and XML-Namespaces. Three XML-Namespaces are defined in this document for inclusion in FixedPage markup One such namespace references the Version-
control elements and attributes defined elsewhere in this specification The principle namespace used for elements and attributes in the FixedPage markup is "http //schemas microsoft com/MMCF-PLACEHOLDER-FixedPage" And finally, FixedPage markup introduces a concept of "Resources" which requires a third namespace, described below
Although FixedPage markup is expressed using XML-JElements and XML-Attributes, its specification is "based upon a higher-level abstract model of "Contents" and "Properties" The FixedPage elements are all expressed as XML-elements Only a handful of FixedPage elements can hold "Contents", expressed as child XML-elements But a property-value may be expressed using an XML-Attribute or using a child XML-element
FixedPage Markup also depends upon the twin concepts of a Resource-Dictionary and Resource-Reference The combination of a Resource-Dictionary and multiple Resource-References allows for a smgle property-value to be shared by multiple properties of multiple FixedPage-markup elements
Properties m FixedPage Markup
In the illustrated and described embodiment, there are three forms of markup which can be used to specify the value of a FixedPage-markup property
If the property is specified using a resource-reference, then the property name is used as an XML-attnbute name, and a special syntax for the attribute-value indicates the presence of a resource reference The syntax for expressing resource-references is described in the section entitled "Resources and Resource-References"
Any property-value that is not specified as a resource-reference may be expressed in XML using a nested child XML-element identifying the property whose value is being set Tins "Compound-Property Syntax" is described below
Finally, some non-resource-reference property-values can be expressed as simple-text strings Although all such property-values may be expressed using Compound-Property Syntax, they may also be expressed using simple XML-attribute syntax
For any given element, any property may be set no more than once, regardless of the syntax used for specifying a value
Simple Attribute Syntax
For a property value expressible as a simple string, XML^attnbute-syntax may be used to specify a property-value. For example, given the FrxedPage-markup element called "SobdColorBrush," with the property called "Color", the following syntax can be used to specify a property value (Sequence Removed)
Compound-Property Syntax
Some property values cannot be expressed as a simple string, e g. an XML-element is used to describe the property value Such a property value cannot be expressed using simple attribute syntax But they can be expressed using compound-property syntax
In compound-property syntax, a child XML-Element is used, but the XML-Element name is derived from a combination of the parent-element name and the property name, separated by dot Given the FixedPage-markup element ,
which has a property "Fill" which may be set to a , the following markup can he used to set the "Fill" property of the element
(Sequence Removed)
Compound-Property Syntax may be used even in cases where Simple-Attribute Syntax would suffice to express a property-value. So, the example of the previous section'
<'-- single Attribute Syntax --> (Sequence Removed)
(Sequence Removed)
When specifying property-value using Compound-Property Syntax, the child XML-elements representing "Properties" must appear before child XML-elements representing "Contents" The order of individual Compound-Property child XML-elements is not important, only that they appear together before any "Contents" of the parent-element
For example, when using both Clip and RenderTransform properties of the element (described below), both must appear before any and Contents of the
c/Canvaa>
Resources and Resource References
Resource Dictionaries can be used to hpid shareable property values, each called a resource Any property value which is itself a FixedPage-markup element may be held rn a Resource Dictionary, Each resource in a Resource Dictionary carries a name. The resource's name can be used to reference the resource, from a property's XML-attnbute,
In the illustrated and described embodiment, the and elements can carry a Resource Dictionary, A Resource Dictionary is expressed in markup as a property of the and elements in a property called '%esouices]' However, individual resource-values are embedded directly within the or XML-element Syntactically, the markup for and resembles that for markup elements with "Contents"
In accordance with this embodiment, or must precede any compound-property-syntax property values of the or They similarly must precede any "Contents" of the or
Defining Fixed-Payload Resource Dictionaries
Any or can carry a Resource Dictionary, expressed
using the XML-element Each element within a single
resource dictionary is given a unique name, identified by using an XML-attribute
associated with the element To distinguish this "Name" attribute from those
attributes corresponding to properties, the Name attribute is taken from a
namespace other than that of the FixedFormat elements The URI for that XML-
namespace is "http //schemas .microsoft com/PLACEHOLDER-for-resources" In
the example below, two geometries are defined, one for a rectangle and the other
for a circle
(Sequence Removed)
Referencing Resources
To set a property value to one of the resources defined above, use an XML-attnbute value which encloses the resource name in {} For example, "{Rectangle}" will denote the geometry to be used In the markup sample below, the rectangular region defined by the geometry objects m the dictionary will be filled by the SohdColorBrush
(Sequence Removed)
In accordance with this embodiment, a resource reference must not occur within the definition of a resource in a Resource Dictionary
Scoping Rules for Resolving Resource References '
Although a single Name may not be used twice in the same Resource Dictionary, the same name may be used in two different Resource Dictionaries within a single prxedPage part. Furthermore, the Resource Dictionary of an inner may re-use a Name defined in the Resource Dictionary of some outer < or
When a resource-reference is used to set a property of an element, various Resource Dictionaries are Searched for a resource of the given name If the element i ; bearing the property is a , then the Resource Dictionary (if present) of that is searched for a resource of the desired name If the element is not a then search begins with the nearest containing or If the desired name is not defined in the initially searched Resource Dictionary, then the next-nearest containing or is consulted An error occurs if the search continued to the root element, and a resource of the desired name is not found in a Resource Dictionary associated with that
The example below demonstrates these rules
(Sequence Removed)
FixedPage Drawing Model
The FixedPage (or a nested Canvas child) element is the element on which other elements are rendered. The arrangement of content is controlled by properties specified for the FixedPage (or Canvas), the properties specified for elements on the FixedPage (or Canvas), and by compositional rules defined for the Frxed-Payload namespace
Using Canvas to Position Elements
In fixed markup, all elements are positioned relative to the current origin (0,0) of the coordinate system The current origin can be moved by applying the
RenderTransform attribute to each element of the FixedPage or Canvas that
contains an element
The following example illustrates positioning of elements through RenderTransform
(Sequence Removed)
Coordinate Systems and Umts
In accordance with the illustrated and described embodiment, the coordinate system is initially set up so that one unit in that coordinate system is equal to 1/96th of an inch, expressed as a floating point value, the origin (0,0) of the coordinate system is the left top corner of the FixedPage element
A RenderTransform attribute can be specified on any child element to apply an affine transform to the current coordinate system.
Page Dimensions
The page dimensions are specified by the 'TageWidth" and "PageHeight" parameters on the FixedPage element
Composition Rules
FixedPages use the painter's model with alpha channel In accordance with the described embodiment, composition must occur according to these rules, and in the following order
• The FixedPage (or any nested Canvas) is thought of as a unbounded' surface to which child elements are drawn in the order they appear in the markup The alpha channel of this surface is initialized to "0 0" (all transparent) In practice the ideal unbounded surface can be thought of as , a bitmap buffer large enough to hold all marks produced by rendering all the child elements
• The contents of the surface are transformed using the affine transform specified by the RenderTransform property of the FixedPage (or Canvas)
• All child elements are rendered onto the surface, clipped by the Clip property (which is also transformed using the RenderTransform property) of the FixedPage (or Canvas) The FixedPage additionally clips to the rectangle specified by (0,0,PageWidth,PageHeight) If a child element has an Opacity property or OpacityMask property, it is applied to the child element before it is rendered onto the surface
• Finally, the contents of the FixedPage (or Canvas) are rendered onto its containing element In the case of FixedPage, the containing element is the physical imaging surface
Rendering occurs according to these rules
• The only elements that produce marks on a surface are "Glyphs" and 'Tath"
• All other rendering effects carl be achieved by positioning "Glyphs" and "Path" elements onto a "Canvas", and applying their various valid attributes
Fixed-Payload Elements and Properties
The Fixed Payload, in accordance with the illustrated and described embodiment, includes a small set of XML elements used in markup to represent pages and then contents The markup in a FixedPanel part brings the pages of a document together to a common, easily-indexed root, using , , and elements Each FixedPage part represents1 a page's contents in a element with only and elements (which together do all of the drawing), and the element to group them
The Frxed-Payload markup's element hierarchy is summarized m following -sections entitled 'Top-level elements", "Geometry for Path, Clip", "Brushes used to fill a Path, Glyphs, or OpacityMask", ""Resource dictionaries for FixedPage or Canvas", "Opacity masks for alpha transparency", "Clipping paths" and "Transforms"
Top-level elements
• [exactly one per FixedPanel part]
o Attributes
■ [none]
o Child Elements
■ [exactly one]
•
o Attributes
■ PageHeight [optional]
■ Page Width [optional] o Child Elements
■ [1-N of these child elements]
•
o Attributes
* Source [required]
■ PageHeight [optional]
■ Page Width [optional] o Child Elements*
■ [none]
•
o Properties expressed via simple XML attributes directly
* PageHeight [required (here or as child element)]
■ PageWidth [required (here or as child element)]
o Resource dictionary itself expressed as an XML child element: ,
*
o Properties expressed via XML child elements
» [required (here or as attribute)]
■ [required (here or as attribute)] o Content via XML child Elements
■
■
■
•
o Properties expressed via simple XML attributes directly
■ Opacity
o Properties expressed via resource dictionary reference: - Clip
■ (RenderTransfonn
■ OpacityMask
o Resource dictionary itself expressed as an XML child element:
)■ o Properties expressed via XML child elements
*
■
■
■
o Content via XML child Elements-
■
■
■
o Properties expressed via simple XML attributes directly
■ Opacity
o Properties expressed via resource dictionary reference:
• Clip
■ RenderTransform
" OpacityMask
" Fill o Properties expressed yia XML child elements
■
■
■
■
■
•
•
o Properties expressed via simple XML attributes directly
■ Opacity
■ BidiLevel
■ FontFacelndex
■ FontHintmgEmSize
■ FontRendermgEmSize
■ FontUri
■ Indices
■ OnginX
■ OnginY
■ Sideways
■ StyleSimulations
■ UmcodeStnng
o Properties expressed via resource dictionary reference:
■ Clip
■ RenderTransform
■ OpacityMask
■ Fill
o Properties expressed via XML child elements
■ -
■
■
■
■
■
■
■
■
■
■
■
■
■
■
■
eometry for Path, Clip
•
o Attributes
■ [none]
o Property value expressed as a single XML child element:
[Path Data has exactly one total of these children]
■
■
•
o Attributes
■ CombmeMode
o Child Elements
[1-N children]
■
■
•
o Attributes'
■ PiHRule
o Child Elements*
[1-N children]
■
•
o Attributes
■ [None]
o Child Elements
[StartSegment comes first, CloseSegment last, 1-N of Poly* in between ]
■
■
■
■
•
o Properties expressed via simple XML attributes directly
■ Point
o Properties expressed via XML child elements
' ■
•
o Properties expressed via simple XML attributes directly
■ Points
o Properties expressed via XML child elements
■
•
o Properties expressed via simple XML attributes directly
» Points o Properties expressed via XML child elements
■
Brushes used to fill a Path, Glyphs, or OpacityMask
•
o Attributes
, • [none]
o Property value expressed as a single XML child element: ■
[Path Fill has exactly one of these children]
■
■
■
■ »
• ^Glyphs FLI1>
o Attributes
■ [none]
o Property value expressed as a single XML child element:
[Glyphs Fill has exactly one of these children]
■
■
■
■
■
•
o Properties expressed via simple XML attributes directly
■ Opacity
■ Color
o Properties expressed via XML child elements
■
■
•
D Properties expressed via simple XML attributes directly
■ Opacity
■ HonzontalAlignment
■ VerticalAlignment
■ ViewBox
■ ViewPort » Stretch
■ TileMode
* ContentUnits
■ ViewportUnits
■ ImageSource
o Properties expressed via resource dictionary reference:
■ Transform
o Properties expressed via XML child elements
■
■
■
■
■
■
■
■
■
■
■
•
o Properties expressed via simple XML attributes directly:
■ Opacity
■ HonzontalAlignment
■ VerticalAlignment
■ ViewBox
■ Viewport
■ Stretch
■ TileMode
■ ContentUnits
* ViewportUnits
o Properties expressed via resource dictionary reference:
■ Transform
■ Drawing
o Properties expressed via XML child elements
■
■
■
■
■
■
■
■
■
■
■
•
o Content via XML child Elements,
"
■
■
•
o Properties expressed via simple XML attributes directly-
■ Opacity
* MappingMode
■ SpreadMethod
■ StartPoint
■ EndPomt
o Properties expressed via resource dictionary reference:
■ Transform.
■ GradientStops
o Properties expressed via XML child elements
■
■
■
■
*
■
■
•
o Properties expressed via simple XML attributes directly
■ Opacity
■ Center
■ Focus
■ RadiusX » RadiusY
o Properties expressed via resource dictionary refereDce:
■ Transform
■ GradientStops
o Properties expressed via XML child elements
■
'
■
■
■ "■
■
•
o Content via XML child Elements*
■ [1-N of these children]
• «3radientStop>
o Properties expressed via simple XML attributes directly
■ Color
■ Offset
o Properties expressed via XML child elements
■
•
Resource dictionaries for FixedPage or Canvas
•
•
These elements are discussed above in the section that discusses Resource Dictionaries
Opacity masks for alpha transparency
•
o Attributes
■ [none]
o Property value expressed as a single XML child element:
[Canvas OpacityMask has exactly one of these children]
■
■
■
■
■
•
o Attributes
■ [none]
o Property value expressed as a single XML child element:
- [Path OpacityMask has exactly one of these children]
■
■
"
■
■
•
o Attributes
■ [none]
o Property value expressed as a single XML child element:
[Glyphs OpacityMask has exactly one of these children]
■
■
■
■
■
Clipping paths
•
o Attributes
■ [none]
o Property value expressed as a single XML child element:
[Canvas Clip has exactly one of these children]
■
■
•
o Attributes
■ [none]
o Property value expressed as a single XML child element: [Path Clip has exactly one of these children]
■
■
•
o Attributes:
■ [none]
o Property value expressed as a single XML child element:
[Glyphs Clip has exactly one of these children] » *
Transforms
•
o Property value expressed as a single XML child element:
■ [required]
•
o Property value expressed as a single XML child element:
■ [required]
•
o Property value expressed as a single XML child element:
■ [required]
•
o Properties expressed via simple XML attributes directly
" Matrix o Properties expressed via XML child elements
■
•
•
o Properties expressed via simple XML attributes directly,
■ MatnxTransform
o Properties expressed via XML child elements
■
•
o Properties expressed via simple XML attributes directly
» MatnxTransform o Properties expressed via XML child elements
■
•
o Properties expressed via simple XML attributes directly,
■ MatnxTransform
o Properties expressed via XML child elements
■ < RadialGradientBrush Transform MatnxTratisfonn>
FixedPage Marknp
Each FixedPage part represents a page's contents m XML markup rooted in a element This FixedPage markup provides WYSIWYG fidelity of a document between writers and readers, with only a small set of elements and properties and elements (which together do all of the drawing), , and the element to group them.
Common Element Properties
Before discussing attributes specific to each element in FixedPage markup, consider the attributes common to the drawing and grouping elements Opacity, Clip, RenderTransform, and OpacityMask Not only are these the only properties common to the top-level elements, they are also the only properties that "accumulate" their results from parent to child element, as described in the Composition Rules section above The accumulation is a result of the application of the Composition Rules The table that follows provides a summary description of
these common attributes, followed by a more thorough discussion of each of the
attributes
Opacity, Attribute
Opacity is used to transparently blend the two elements when rendering (Alpha Blending) The Opacity attribute ranges from 0 (fully transparent) to 1 (fully opaque) Values outside of this inclusive range are clamped to this range during markup parsing So, effectively, [-∞ 0] is transparent and [1 ∞] is opaque
The Opacity Attribute is applied through the following computations (assuming non-premultaphed source and destination colors, both specified as scRGB) (Table Removed)
0E Opacity attribute of element or alpha value at corresponding position m
OpacityMask
As Alpha value present in source surface
Rs, Red value present in source surface
Gs Green value present in source surface
Bs Blue value present in source surface
AD Alpha value already present m destination surface
RD Red value already present in destination surface
GDf Green value already present in destination surface
BD Blue value already present in destination surface
A* Resulting Alpha value for destination surface
R* Resulting Red value for destination surface
G* Resulting Green value for destination surface
B* Resulting Blue value for destination surface ,
All values designated with a T subscript are temporary values (e g RTi)
Step 1: Multiply source alpha value with opacity value
As = As* OE
Step 2: Premultiply source alpha
AT1 = As
RTI = RS * AS
GTI — GS* AS
B71 = Bs • As
Step 3: Premultiply destination alpha
AT2 = AD
RT2 = RD * AD
GT2 = Gp * Ap
Bn ~ BD * AD Step 3: Blend
AT? = (1 - ATi) * ATZ + AT1
RT2 ~ (1 " Axi) * Rxi + R-Tl
Gj2 = (1 - AT1) * Gra + G-n Bn = (1" ATI) * Bx2 ")~ Bxi Step 4: Reverse pre-multiplication
If An - 0, set all A* R* G* B* to 0.
Else
A* = An
R* = RT2/AT2
G* = GT2 / AT2 B* = BT2/AT7
Clip Property
The Clip property is specified as one of the geometric elements or (see Path Data for details) The Clip property is applied in the following way
• All rendered contents that fall inside the geometric element described by the Clip child element are visible.
• All rendered contents that fall outside the geometric element described by the Clip child element are not visible
RenderTransform Child Element
MatnxTransform is the only transformation attribute available to elements It expresses an affine transformation The syntax follows'
(Table Removed)
The six numbers specified in the Matrix attribute are m00, m01, ml0, mil, dx, dy
The full matrix looks like
m00 m0l 0
ml0 mil 0
dx dy 1
A given coordinate X,Y is transformed with a RenderTransform to yield the resulting coordinate X'^Y' hy applying these computations
X' = X * m00 + Y * ml0 + dx Y' =X*m01+Y*mll + dy
OpacityMask Child Element
The OpacityMask specifies a Brush, but in contrast to a Fill Brush, only the alpha channel (see Opacity attribute above) of the brush is used as an additional parameter for rendering the element Each alpha value for each pixel of the element is then additionally multiplied with the alpha value at the corresponding position in the OpacityMask Brush
The Element
The element is used to group elements together Typically,
FixedPage elements are grouped together in a when they share a
composed common attribute (1 e, Opacity, Clip, RenderTransform, or
OpacityMask) By grouping these elements together on a Canvas, common
attributes can often be applied to the canvas instead of to the individual elements
Attributes and Child Elements of
The element has only the common attributes described earlier Opacity, CHp, RenderTransform, and OpacityMask, They are used with the element as described in the table below'
(Table Removed)
The following markup example illustrates the use of
(Sequence Removed)
With respect to the reading order m Canvas markup, consider the following As with FixedPage, the markup order of the Glyphs child elements contained within a Canvas must be the same as the desired reading order of the text content This reading order may be used both for interactive selection/copy of sequential text from a FixedPage m a viewer, and for enabling access to sequential text by" accessibility technology It is the responsibility of the application generating the FixedPage markup to ensure this correspondence between* markup order and reading order.
Child Glyphs elements contained within nested Canvas elements are ordered in-line between sibling Glyphs elements occurring before and after the Canvas,
Example
(Sequence Removed)
The Element
The Path Element is an XML-based element that describes a geometric region The geometric region is a shape which may be filled, or used as a clipping path. Common geometry types, such as rectangle and ellipse, can be represented
using Path geometries A path is described by specifying the required Geometry Data child element and the rendering attributes, such as Fill or Opacity
Properties and Child Elements of
The following properties are applicable to elements as described "below
(Table Removed)
path's geometry
To descnbe how to paint a region described by the geometry of the child element, use the Fill property To restrict the region on which shapes can be drawn, use the Clip property
Using to Descnbe Geometries
A path's geometry is specified as a series of nested child elements of , as shown below The geometry may be represented with either a containing a set of child elements, or a single child element containing
(Sequence Removed)
The same or elements define,the geometry for a chppmg path used in the Clip property of Canvas, JPath, or Glyphs
The following table introduces the hierarchy of child, elements defining Path geometries
(Table Removed)
Ge ometryCollection
A GeometryCollection is a set of geometric objects that are combined together for rendering according to Boolean CombineMode options The
GeometryCollection element js the mechanism m FixedPage markup for building Visual combinations of geometric shapes
(Table Removed)
The CombineMode attribute specifies the Boolean operation used to combine the set of geometric shapes m a GeometryCollection Depending on the mode, different regions will be included or excluded.
(Table Removed)
CombmeModes are handled as follows
Not Commutative Complement and Exclude are not commutative and therefore are defined between the first geometry in the GeometryCollection and each individual remaining geometries For example, for the set { gl, g2, g3 } a CombineMode of Exclude would be applied as ((gl exclude g2) and (gl exclude g3))
Commutative Boolean operations Union, Xor, Intersect are commutative and therefore apply order-independent to the geometries
PathGeometry
A PathGeometry element contains a set of PathFigure elements The union of the PathFigures defines the interior of the PathGeometry
(Table Removed)
With respect to the FilIRule attribute, consider the following The filled area of PathGeometry is defined by taking all of the contained PathFigure that have then" Filled attribute set to true and applying the FilIRule to determine the enclosed area FillRule options specify how the intersecting areas of Figure elements contained in a Geometry are combined to form the resulting area of the Geometry
in accordance with the described embodiment, EvenOdd Fill and NonZero Fill algonthms are provided
The EvenOdd Fill algorithm determines the "insideness" Of a point on the canvas by drawing a ray from that point to infinity in any direction and then examining the places where a segment of the shape crosses the ray Starting with a count of zero, add one each time a Segment crosses the ray from left to right and subtract one each time a path segment crosses the ray from nght to left After counting the crossings, if the result is zero then the point is outside the path Otherwise, it is inside
The NonZero Fill algonthm determines the "insideness" of a point on the canvas by drawing a ray from that point to infinity m any direction and counting the
number of path Segments from the given shape that the ray crosses If this number is odd, the point is mside, if even, the point is outside
PathFigure
A PathFigure element is composed of a set of one or more line or curve segments The segment elements define the shape of the PathFigure The PathFigure must always define a closed shape
(Table Removed)
A figure requires a starting point, after which each line or curve segment continues from the last point added. The first segment in the PathFigure set must be a StartSegment, and CloseSegment must be the last segment StartSegment has a Point attribute CloseSegment has no attributes -
(Table Removed)
Fixed-Payload Markup for Path Data Geometries
The following provides the markup for drawing and filling a Path on a Canvas In the specific example beJow, a rectangular Path is drawn on a Canvas and filled with a solid green brush
(Sequence Removed)
The following markup describes drawing a cubic Bezaer curve That is, in addition to the PolyLineSegment, Frxed-Payload markup includes the PolyBezierSegment for drawing cubic Bezier curves
(Sequence Removed)
Brushes
A brush is used to paint the interior of geometric shapes defined by the element, and to fill the character bitmaps rendered with, a element A brush is also used in defining the alpha-transparency mask rn , , and The FixedPage markup includes the foliowmg brushes,
(Table Removed)
Attributes vary across brushes, although all brushes have an Opacity attribute The IrnageBrush and DrawlngBrush share tiling capabilities The two gradient-fill brushes have attributes in common as well
The use of a brush child element in markup is shown below
(Sequence Removed)
Common Properties for Brushes
In accordance with the described embodiment, the following properties are applicable to all brushes, except for the simple brush. SohdColorBrush, which has fewer optional child elements (Table Removed)
Common Attributes for DrawingBrush and IrnageBrush
(Table Removed)
The Horizontal Alignment attribute specifies how the brush is aligned horizontally within the area it fills out The Vertical Alignment attribute specifies how the brush is aligned vertically within the area it fills out The ViewBox attribute has a default value of (0,0,0,0), interpreted as unset When unset,, no adjustment is made and the Stretch attribute is ignored. The viewbox specifies a new coordinate system for the contents, 1 e redefines the extent and origin of the viewport. The Stretch attribute helps to specify how those contents map into the viewport The value of the viewBox attribute is a list of four "unitless" numbers , , and , separated by whitespace and/or a comma, and is of type Rect The Viewbox rect specifies the rectangle in user space that maps to the bounding box It works the same as inserting a scaleX and scaleY The Stretch attribute (in case the optjon is other than none) provides additional control for preserving the aspect ratio of the graphics An additional transformation is applied to all descendants of the given element to achieve the specified effect If there is a transform on the Brush, it is applied "above" the mapping to ViewBox
The Stretch attribute has the following modes None, Fill, Uniform, UmformToFill
(Table Removed)
Simple Brushes and their Attributes
The Path Brush and Canvas Brush child elements include the following. SohdColorBrush, ImageBrush, and DrawingBrush
SolidColorBrush fills defined geometric regions with a solid color. If there is an alpha component of the color, it is combined m a multiplicative way with the corresponding opacity attribute in the Brush.
(Table Removed)
The following example illustrates how color attributes are expressed for the SohdColorBrush
(Sequence Removed)
ImageBrush can be used to fill a space with an image The markup for ImageBrush allows a URI to be specified If all other attributes are set to then-default values, the image will be stretched to fill the bounding box of the region.
(Table Removed)
The ImageSource attribute must reference either one of the supported Reach Image Formats or a selector which leads to an image of one of these types
DrawingBrush can be used to fill a space with a vector drawing DrawingBrush has a Drawing Child Element, whose use in markup is shown below
(Sequence Removed)
Gradient Brushes and their Attributes
Gradients are drawn by specifying a set of gradient stops as XML Child Elements of the gradient brushes These gradient stops specify the colors along some sort of progression There are two types of gradient brushes supported in this framework linear and radial
The gradient is by drawn by doing interpolations between the gradient stops in the specified color space LinearGradientBrush and GradientBrush share the following common attributes
(Table Removed)
GradientStops Holds an ordered sequence of GradientStop elements
With respect to the SpreadMethod attribute, consider the following SpreadMethod options specify how the space is filled. The default value is Pad
(Table Removed)
With respect to the LinearGradientBrush, consider the following The LmearGradientBrush specifies a linear gradient brush along a vector.
(Table Removed)
The following markup example shows the use of the LinearGradientBrush A page with a rectangular path is filled with a linear gradient
(Sequence Removed)
This example shows a page with a rectangular path that is filled with a linear gradient The Path also has a clip property in the shape of an octagon which chps it
(Sequence Removed)
The RadialGradient is similar in programming model to the linear gradient However, whereas the linear gradient has a start and end point to define the gradient vector, the radial gradient has a circle along with a focal point to define the gradient behavior The circle defines the end point of the gradient — m other words, a gradient stop at 1 0 defines the color at the circle's circumference. The focal pomt defines center of the gradient A gradient stop at 0 0 defines the color at the focal point
(Table Removed)
Alpha and Transparency
In accordance with the illustrated and described embodiment, each pixel of each element carries an alpha value ranging from 0 0 (completely transparent) to 1 0 (fully opaque) The alpha value is used when blending elements to achieve the visual effect of transparency
Each element can have an Opacity attribute with which the alpha value of each pixel of the element will be multiplied uniformly
Additionally, the OpacityMask allow the specification of per-pixel opacity which will control how rendered content will be blended into its destination The opacity specified by OpacityMask is combined multiphcatively with any opacity which may already happen to be present in the alpha channel of the contents The per-pixel Opacity specified by the OpacityMask is determined by looking at the alpha channel of each pixel m the mask - the color data is ignored
The type of OpacityMask is Brush This allows the specification of how the Brush's content is mapped to the extent of the content in a variety of different ways Just as when used to fill geometry, the Brushes default to filling the entire content space, stretching or replicating its content as appropriate This means that an ImageBrush will stretch its ImageSource to completely coyer the contents, a GradientBrush will extend from edge to edge
The required computations for alpha blending are described in the earlier section "Opacity Attribute"
The following example dlustrates how an OpacityMask is used to create a "fade effect' on a Glyphs element The OpacityMask in the example is a linear gradient that fades from opaque black to transparent black.
(Sequence Removed)
Images in Reach Documents
On FixedPages, rmages fill enclosed regions To place an image on a FixedPage, a region must first be specified on the page The region is defined by the geometry of a Path element
The Fill property of the Path element specifies the fill contents for the described region Images are one type of fill, drawn into a region by the ImageBrush. All brushes have default behavior that will fill an entire region by either stretching or repeating (tiling) the brush content as appropriate In the case of ImageBrush, the content specified by the Image Source property will be stretched to completely cover the region
The markup below demonstrates how to place an image onto a Canvas
(Sequence Removed)
Smce many images are rectangular, including a rectangular Path element in the Resource Dictionary may be useful in simplifying the markup The Path can then be positioned using a RenderTransform attribute (see above),
(Sequence Removed)
Color
Colors can be specified in illustrated and described markup using scRGB or sRGB notation The scRGB specification is known as 'TEC 61966-2-2 scRGB" and can be obtained from www ree ch
The ARGB parameters are described in the table below
(Table Removed)
Color Mapping
Currently, consideration is being given to the tagging of colored elements with metadata specifying color context Such metadata could contain an ICC color profile, or other color definition data.
The Element
Text is represented in Fixed Payloads using a Glyphs element. The element is designed to meet requirements for printing and reach documents.
Glyphs elements may have combinations of the following properties
(Table Removed)
Overview of Text Markup
Glyph metrics
Each glyph defines metrics that specify how it aligns with other glyphs. Exemplary metrics in accordance with one embodiment are shown in Pig 12
Advance Widths and Combining Marks
In general, glyphs within a font are either base glyphs ox combining marks that may be attached to base glyphs Base glyphs usually have an advance width that is non-zero, and a 0,0 offset vector Combining marks usually have a zero advance width The offset vector may be used to adjust the position of a combining mark and so may have a non 0,0 value for combining marks
Each glyph in the glyph run has three values controlling its position The values indicate origin, advance width, and glyph offset, each of which is described below
• Origin: Each glyph is assumed>to be given a nominal origin, for the first glyph in the run this is the origin of the run,
• Advance Width: The advance width for each glyph provides the origin of the next glyph relative to this glyphs origin The advance vector is always drawn m the direction of the run progression
• Glyph Offset (Base or Mark): The glyph offset vector adjusts this glyphs position relative to its nominal origin,
Characters, Glyphs, and the Cluster Map
Cluster maps contain one entry per Unicode codepoint The value in the entry is the offset of the first glyph in the Glyphlndices array that represents this codepornt Alternately, where the codepoint is part of a group of codepoints representing an indivisible character cluster, the first glyph in the Glyphlndices array represents the offset of the first glyph that represents that cluster
Cluster Mappings
The cluster map can represent codepoint-to-glyph mappings that are one-to-one, many-to-one, one-to-many, or many-to-many. One-to-one mappings are when each codepornt is represented by exactly one glyph, the cluster map entries in Fig 13 are 0, 1, 2,
Many-to-one mappmgs are when two or more codepoints map to a single glyph The entries for those codepoints specify the offset of that glyph m the glpyh index buffer In the example of Fig 14, the 'f and V characters have been replaced by a ligature, as is common typesetting practice in many serif fonts
With respect to one-to-many mappmgs, consider the following in connection with Fig 15 'Sara Am' contains a partAthdt sits on top of the previous base character (the ring), and a part that sits to the right of the base character (the hook)
When Thai text is micro-justified, the hook is spaced apart from the base character, while the ring remains on top of the base character, therefore many fonts encode the ring and the hook as separate glyphs When one codepornt maps to two or more glyphs, the value in the ClusterMap for that codepoint references the first glyph in the Glyphlndeces array that represents that codepornt,
With respect to many-to-many mappings, consider the following in connection with Fig 16, In some fonts an indivisible group of codepomts for a character cluster maps to more than one glyph For example, this is common in fonts supporting Indie scripts When an indivisible group of codepomts maps to one or more glyphs, the value in the ClusterMap for each of the codepoints reference the first glyph in the Glyphlndeces array that represents that codepomt
The following example shows the Unicode and glyph representations of the
Tamil word □ □ □ □ The first two codepoints combine to generate three glyphs ,
Specifying Clusters
Cluster specifications precede the glyph specification for the first glyph of a non 1 1 cluster (mappings are more complex than one-character-to-one-glyph) Each cluster specification has the following form
(Table Removed)
Markup
The Glyphs element specifies a font as a URI, a face index and a set of other attributes described above For example
(Table Removed)
Each glyph specification has the following form [GlyphIndex][,tAdvance][,[uOffset][,[vOffset][,[Flags]]]]] Each part of the glyph specification is optional'
(Table Removed)
With respect to calculating advance without rounding error accumulation consider the following Each advance value must be calculated as the exact unrounded origin of the subsequent glyph minus the sum of the calculated (1 e rounded) advance widths of the preceding glyphs In this way each glyph is positioned to within 0 5% of an em of its exact position,
(Table Removed)
Optimizing the Size of Glyphs Markup
Markup details, such as glyph indices and advance widths, can be omitted from the markup if a targeted client can regenerate them reliably, The following
L
options allow dramatic optimization of commonly used simple scripts
Optimizing Markup of Glyph Indices
Glyph indices may be omitted from markup where there is a one-to-one mapping between the posit ons of characters in the Unicode string and the positions of glyphs in the glyph string, and the glyph index is the value in the CMAP (character mapping) table of the font, and the Unicode character has unambiguous semantics
Glyph indices should be provided m the markup where the mapping of characters to glyphs
• is not one-to-one, such as where two or more codepomts form a single glyph (ligature), or
• one codepoint generates multiple glyphs, or
• where any other form of glyph substitution has happened, such as through application of an OpenType feature
Glyph indices should be provided in markup where a rendering engine might substitute a different glyph than that m the CMAP (character mapping) table m the font Glyph indices should be provided where the desired glyph representation is not that m the CMAP table of the font
Optimizing Markup of Glyph Positions
Glyph advance width may be omitted from the markup where the advance Width required is exactly that for the glyph rn the HMTX (horizontal metrics) or VMTX (vertical metrics) tables of the font
Glyph vertical offset may be omitted from the markup where it is zero This is almost always true for base characters, and commonly true for combining marks in simpler scripts However, this is often false for combining marks in more complex scripts such as Arabic and Indie
Optimizing Markup of Glyph Flags
Glyph flags may be omitted for base glyphs with normal justification priority
Application Program Interface
The following describes an example embodiment of a platform-independent packaging Application Program Interface (API) This layer of the APIs consists of abstract classes and die other base classes that are included as a part of the packaging layer The API includes the classes discussed below
Container
A container is a logical entity that holds together a collection of parts,
(Table Removed)
Constructors
protected Container (Filelnfo filelnfo, FileAccess access)
Protected constructor for the base class Explicitly defining m this class, so that it is easier to document and maintain this constructor Hie compiler would have added one anyways ififs not specified Also this is the current contract between the abstract class and the subclasses When the filelnfo object is null it defines that the container was opened or created on a stream
Properties
public virtual DateTime CreationTime {get, set,}
Gets or sets the creation time of this container When this value is set LastAccessTime and LastWnteTime should also be updated to the same value System JO JFilelnfo object is used to manipulate this value Exceptions
- InvahdArgumentException - If CreationTime is set to a value that is greater than LastAccessTime or LastWnteTime
- InvalidOperationException - If the Container was opened on a stream there is no u>ay to get this property
public virtualDateTime LastAccessTime {get, set,}
Gets or sets tlie last time this contmnei was opened System 10 Filelnfo object is used to manipulate this value
Exceptions
- InvahdArguTnentException - If LastAccessTime is set to a vahie that is less tfian CreationTime or LastWriteTime
- InvahdOperahonExxxption - If the Container was opened on a stream there is no way to get this property
public virtual DateTime LastWriteTime {get, set,}
Gets or sets the last time this container was modified, Also when LastWriteTime is updated, LastAccessTime should be updated to the same value System JO Jhlelnfo object is used to manipulate this value Exceptions
- InvahdArgumentException ■ If LastWriteTime a set to a value that is hss than CreationTune,
- InvalidOperatioriBxception -If the Container was opened on o stream there is no way to get this property
public FileAccess FileOpenAccess {get,}
Gets the FileAccess with which the contamer was opened This is a read only property This
property gets set when the container is opened,
public abstract Part StarttngPart {get; set;}
Gets or sets the StartmgPart of the container
Methods
public static Container OpenOnFile (stringpath)
This ovei haded version of OpenOnFile method will return a Container specified at the given path This method calls the overload which accepts all the parameters with thefollounng defaults
FileMode - FileMode OpenOrCreate
FileAccess - FileAccess ReadWnte
FileShare - FileShareJNone __
public static Container OpenOnFile (stringpath, FileMode mode)
This overloaded version of OpenOnFile method will return a Container specified at the given path
in the specified file mode This method calls the overload which accepts all the parameters with
the following defaults -
FileAccess - FileAccess ReadWnte
FileShare - FileShai eJVone
public static Container OpenOnFile (stringpath, FileMode mode, FileAccess access)
This overloaded version of OpenOnFile method will return a Container specified at the gwenpath
m the specified file mode and file access This method calls the overload which accepts all the
parameters with the following default -
FileShaie - FileShareJfone
public static Container OpenOnFile (stringpath, FileMode mode, FileAccess access, FileShare share)
This overloaded version of OpenOnFile method will open a container at the given path with the mode, access and share set to the values provided
Exceptions
- InvnhdArgumentBxceptian -If the combination of the FileMode, FileAccess and FdeShare parameters is not
meaningful
public static Container OpenOnlln (Uri uri)
This overloaded version of OpenOnUn method will return a Container specified at the given im
This method calls the overload which accepts all the parameters with the following defaults -
FdeMode - FileMode Open
FileAccess - FileAccess J^ead
public static Container OpenOnUn (Uri un, FdeMode mode)
This overloaded version ofOpenOnUn method will return a Containei specified at the given un
m the specified file mode This method calls the overload which accepts all theparameters with
the following default ~
FileAccess - FdeAccess Jlead
public static Container OpenOnUn (Uri uri, FdeMode mode, FdeAccess access)
This overloaded version of OpenOnUn method will open a container at the given un with the mode and access set to the values provided The WebRequest/WebResponse mechanism wtll be used for obtaining the container The FileMode and FdeAccess parameters will be applied to the container that will be opened This method calls the OpenOnStream method with the correct content type. Exceptions
- InvalidArgumentExceptwn - If the combtnation of the FileMode, FileAccess andFUeShweparameters is not
meaningful.
public static Container OpenOnStream (Stream stream, string contentType)
This overloaded version of OpenOnStream method will return a Container on the stream
provided This method calls the overload which accepts all theparameters with the following
defaults -
FileMode - FileMode Open
FileAccess - FileAccess Read
public static Container OpenOnStream (Stream stream, string contentType, FdeMode i mode)
This overloaded vei sion of OpenOnStream method will return a Contamei on the stream
provided in the specified file mode This method calls the overload which accepts all the
pai ameters with the following defaults -
FileAccess - FileAccess JRead
public static Container OpenOnStream (Stream stream, string contentType, FdeMode mode, FileAccess access)
This overloaded version of OpenOnStream method will open a container on the stream provided with the mode and access set to the values provided The FdeMode and FileAccess parameters will be applied to the container that will be opened The contentType parameter is used to instantiate the appropnate sub class object
Exceptions
- InvalidArgumentException -If the combination of the FileMode, FileAccess and FdeShare parameters is not
meaningful ^
public Part AddPart (MMCFUn un, string contentType)
A Partfoi the given Un is added to the container This method will add a Part with an empty stream if no explicit call is made to read or write to the stream. This method calls the AddPartCore which will do the actual work related to the physical implementation.
Exceptions
- InvclidArgumentExceptton - If the Part corresponding to this Un already exists m the container
public Part GetPart (MMCFUri un)
A Part for the given Un is returned The un is relative to the root of the Container This method
calls the GetPartCore which actually fetches the part
Exceptions
-InvahdArgumentException-Ifthe Part corresponding to this Undoes not exist in the container
public virtual boot Exists (MMCFUri un)
Since it is possible to have relationships point to targets that still do not exist, this method
pi ovides a convenient way to find out if a Part actually exists m the underlying Container. This
un should be i elatwe to the root of the container
public void DeletePart (MMCFUn un)
This method will delete a container part from the current container Also all the relationships for
which this part was the SourcePart, will get deleted. This method will delete the underlying
stream and the object will be disposed Also if there aremultiple instances of this Part open, then
Dispose all the other open instances of this part This method will do the necessary cleanup to
enforce this behavior, however the actual deletion of the stream is specific to the underlying
physical implementation ai}d so invoke the DeletePartCore method which will delete the actual
stream The outstanding Part enumerators will be invalidated _j
public PartCoUectwn GetParts 0
This returns a collection of all the Parts withm the container Relatwnships are not returned
public void Flush 0
This method calls flush on the individual parts that were opened, thus enforcing that all the parts
and the relationships get flushed to the underlying container. Essentially this class will maintain
an array of all the Parts that it hands out and then will call Flush on all the Parts It then calls the
FlushCore 0 which will do the work specific to the container as a whole
public virtual void Dispose Q
All open Parts and Relationships are flushed to the underlying container Since this class maintains an airay of all the Parts handed out, this method will call Dispose 0 on all the Parts handed out If any other resources need to be cleaned up, then the subclasses should override this method to do the additional cleanup,
public void Close 0
Close method is the same as dispose so internally it makes a call to DisposeQ method
public Relationship AddRelationship (Un uri)
Th\s method adds a relationship between the Container and the Part specified by *he URI It returns a Relationship object, This change is flushed to the underlying container only after a call is made to Flush 0 method There can be multiple relationships between the same source and target All outstanding relationship enumerators will be invalidated
public void DeleteRelationship (Relationship relationship)
Tins method deletes the target relationship specified by the Relationship object This cliange is
flushed to the underlying contamei only after a call is made to Flush 0 method The delete
operation is done based on the "name" of the object and as such each object is uniquely identified.
All outstanding relationship enumerators will be invalidated,
Exceptions
- JnvahdArgumentExceptwn - If the source of the relationship is not tiw same as the current Part
public RelationshipCollection GetRelahonships 0
This returns a collection of all the target relationships from the Container, As the target
relationships for the container are located at a well know un, it is possible for us to provide a
default implementation that mill open the relationship Part and then read xmlfrom the stream
and create the collection object (Exceptions - If the XML that was read from the underlying
container is malformed)
protected abstract Part AddPartCore (MMCFUn un, string contentType)
This method is for the custom implementation for the underlying file format It will be called from
theAddPart method, This will actually create a part in the underlying container An empty part
should be created as a result of this call
protected abstract Part GetPartCore (MMCFUn uri)
This method is for the custom implementation for the underlying file format It w\U be called from
the OetPart method This methodfetehes the actual part from the undei lying container If apart
does not existit should leturn a *null° '
protected abstract void DeletePartCore (MMCFUn un)
This method is far the custom implementation for the underlying file format It should actually
delete the stream corresponding to this part Also if a part does not exist corresponding to a given
URI, if should not throw
protected abstract Part Q GetPartsCore Q
17ns method is for the custom implementation for the underlying file format It should return an
array of all the Parts in the container Smce the way to obtain all the parts in a container is
specific to the actual physical format this method is useful This is provided so that the actual
GetParts call just passes this array to the PartCollection and we can provide and enumerator
over that That way the PartCollection class can be a concrete class Also if there are no parts in
the container, the GetPartsCore should return an empty array
protected abstract void FlushCore 0
This method is for the custom implementation for the underlying file format. This method flushes all the contents to the disc
protected abstract void DisposeCore 0
This method is for the custom implementation for the underlying file format This method should
release the resources corresponding to the actual physical format
Part
A part is comprised of three pieces
• URI - relative to the root of the container
• ContentType -it is the mime type of the stream represented by this part
• Stream - the actual stream corresponding to this part
In addition, parts can be linked to other parts with Relationships The SourcePart in a relationship, owns the relationship (Table Removed)
constructors
protected Part (Container container, MMCFVn uri, string contentType)
Protected constructor for the base class Explicitly defining m this class, so that it is easier to
document and maintain this constructor The compiler would have added one anyways if it's not
specified Also this is the current contract between the abstract class and the subclasses
Properties
public MMCFVn TJn (get,}
This property returns the MMCFUri of the Part This is a read-only property
public string ContentType {get,}
This property returns the content type of the stream represented by the Part This is a read-only property public Container Container {get,}
This property returns the patent contamei of the Part This is a read-only property
Methods
public Stream GetStream Q
This method retur ns a stream corresponding to this part, It calls the overload which accepts all
the parameters with thefollowmg defaults ~
FileMode - Open
FileAccess - ReadWnte _____
public Stream GetStream (FileMode mode)
This method returns a stream corresponding to this part m the mode specified It calls the
ova load which accepts all the parameters with the following defaults -
FileAccess - ReadWnte
public Stream GetStream (FileMode mode, FileAccess access)
This method returns a stream corresponding to this part It calls the QetStreamCore method
which will return the actual stream. This method will do the housekeeping required to keep track
of all the open streams _ ___
public abstract Stream GetStreamCore (FileMode mode, FileAccess access) ■-
This method returns a stream corresponding to this part This method is for custom
implementation ___
public Relationship AddRelationship (Un urt)
This method adds a relationship between the Part at the URI specified and the current Part It returns a Relationship object This change is flushed to the underlying container only after a caR is made to Flush 0 method There can be multiple relationships between the same source and target All outstanding relationship enumerators will be mvahdated Exception*
- InvalidOperahonException -If the current Part is g relationship
public voidDeleteRelationship (Relationship relationship)
This method deletes the target relationship specified by the Relatwnship object This change is flushed to the underlying container only after a call is made to Flush Q method. The delete operation is done based on the "reference'' of the object and as such each object is uniquely identified All outstanding relationship enumerators will be invalidated i Exceptions
- InualidArgumentException - If the source of the relationship is not the same as the current Part
public RelationshipCollection GetRelationships Q
This returns a collection of all the target relationships of this Part As the target relationships for this Fart are located at a well know w i, it is possible for us to provide a default implementation that will open the relationship Part and then read xmlfrom the stream and create the collection object (Exceptions - If the XML that is read from the underlying container is malformed )
Relationship
This class is used to express a relationship between a source and a target part The only way to create a Relationship, is to call the Part AddRelationship (Un un) A relationship is owned by a source part and so if the source part is deleted all the relationships it owns are also deleted A target of the relationship need not be present (Table Removed)
i Constructors
internal Relationship (Uri source, Un target, string name)
Returns a Relationship object
Properties
public Part Source {get;}
Gets the Source part of the Relationship This is a read-only property This is set when the
Relationship is created.
public Un TargetUri {get,}
Gets the TargetUri of the Relationship This un should be treated as being relative to the source
un
public string Name {get;}
Gets the name corresponding to this Relationship
PartCoUection
This is a collection of parts m a container (Table Removed)
Constructors
internal PartCoUection (Dictionary Parf>partDictionary)
Creates a PartCoUection based on the generic dictionary of Part objects
Methods
public [Enumerator GetEnumerator 0
Member of the IEnumer able Interface It returns an enumerator over the parts collection
RelationshipCollection
This is a collection of relationships associated with a part in a container There can be more than one relationship between a given source and target part
(Table Removed)
Constructors
internal RelationshipCollechon (Relationship f] relationships)
Creates a RelationshipCollection based on the array of Relationship objects
Methods
public ^Enumerator GetEnumerator Q
MMCFUn
This class inherits from the URI class. The main function of this Un class is
to make sure that the URT specified starts with a "/" The motivations for this class
are
1, To make sure that the URIs used for each individual part start with, a "/" This makes sure that all the part names are relative to the root of the container
2 Since System Un class does not allow resolving two relative URIs , they need to be resolved in a different way and so it would be good to have this logic in one place
3 Enforce the fact that the Container is the authority Thus any relative references should not be resolved to a location outside of the container
(Table Removed)
Constructors
public MMCFUn (string un)
Creates an MMCFUn object from the un string provided Ensures that the Un is relative and starts with "/"
Exceptions - InvahdArgumentException ~ If the URI consists of a hostname and protocol, i e it is
an absolute URI ^_^
public MMCFUn (MMCFUn baseUn, string relativeUri)
Creates an MMCFUn object from the Un object provided and the relativeUn string We resolve
the T elative un with respect to the baseUn Ensures that the Un is relative and starts with T
Exceptions - InvahdArgumentException - If the URI consists of a hostname and protocol, le it is
an absolute URI _„
Code Sample Other API Details (Table Removed)
OpenOnFile, OpenOnUn and OpenOnStream Methods
(Table Removed)
These methods have a hard coded logic and the only physical container format these methods are aw are of is the Compound File implementation Since we own these classes there is some assumption about the subclass Constructors that are
called from these Static methods Also these static methods instantiate the correct
sub class object based on the file extension or the content type of tbe stream
currently
OpenOnStream Method and the implications of the specified Access for Container
When creating a Container on a stream, it is important to make sure that the FileAccess specified for the container is compatible with the stream that is provided. The following table lists the various possibilities and an example of how to deal with them
In the first row where the stream has more access and we want the container created to be more restricted, we wrap the incoming stream with a private stream called RestnctedStream, which has the appropriate CanRead and CanWnte values
In memory caching of Part and Relationship obiects
A Dictionary maintains all the parts accessed and if a part is asked for a second time, a reference to the part from the dictionary is returned This is more efficient and since the Part object is immutable this is done without any problem The same applies to the Relationship objects However, if the underlying container
were opened in a shared wnte mode and there was a second user adding or deleting parts to the underlying container, these changes may not get reflected m this cache
Conclusion
The above-described modular content framework and document format methods and systems provide a set of building blocks for composing, packaging, distributing, and rendering document-centered content These building blocks define a platform-independent framework for document formats^ that enable software and hardware systems to generate, exchange, and display documents reliably and consistently The illustrated and described reach package format provides a format for storing paginated or pre-pagrnated documents m a mannernn which contents of a reach package can be displayed or printed with full fidelity among devices and applications m a wide range of environments and across a wide range of scenarios Although the invention has been described m language-specific to structural features and/or methodological steps, it is to be understood that the invention defined in the appended claims is not necessarily limited to the specific features or steps described Rather, the specific features and steps are disclosed as preferred forms of implementing the claimed invention
CLAIMS
1. A method comprising
creating a package that defines a document, wherein the document includes a plurality of parts that make up the document and wherein each of the plurality of parts has an associated name, and
associating a relationship with at least one of the plurality of parts, wherein the relationship identifies connections between the associated part and at least one other part in the package, and wherein the associated relationship is stored m a relationship part having a name that is derived from the name of the associated part
2. The method of claim 1, further comprising storing information regarding at least one relationship in the package,
3. The method of claim 1, further comprising
identifying information regarding relationships associated with parts m the package, and
storing the identified information
4. The method of claim 1, wherein the relationship identifies the related part and a nature of the relationship between the associated part and the related part.
5. The method of claim 1, wherein the name of the relationship is a uniform resource identifier
6. The method of claim 1, further comprising discovering connections between parts m the package by analyzing relationships associated with the parts in the package
7. The method of claim 1, further composing caching information regarding the relationships
8. The method of claim 1, wherein the relationship is described using a schema that is independent of the schema used for the parts that the relationship connects
9. The method of claim 1, wherein the relationship is stored such that it does not alter the content of either of the associated parts
10. The method of claim 1, wherein the relationship is transmitted such that it does not alter the content of either of the associated parts
11. One or more computer-readable media having computer-readable instructions thereon which, when executed, implement the method of claim 1,
12. A computing system embodying the computer-readable media of claim 11.
13. A method comprising
identifying a package containing a plurality of parts, wherein the package defines a document,
identifying relationships associated with the plurality of parts, wherein each relationship defines a first related part, a second related part and a nature of the relationship between the first related part and the second related part, and
retrieving at least one part from the package based on information contained in the identified relationships
14. The method of claim 13, further comprising storing information regarding relationships associated with the plurality of parts.
15. The method of claim 13? further comprising retrieving relationship information associated with the package
16. The method of claim 13, further comprising discovering connections between parts in the package by analyzing the identified relationships
17. A method comprising
creating a package that defines a document, wherein the document includes a plurality of parts that make up the document and wherein each of the plurality of parts has an associated name, and
associating a list of related parts with each of the plurality of parts, wherein the list of related parts identifies any connections between the associated part and other parts in the package, and wherein the list of related parts has a name derived from the name of the associated part
18. The method of claim 17, further comprising storing the list of related parts in the package
19. The method of claim 17, further comprising storing the list of related parts separate from the package.
20. The method of claim 17, wherein the list of related parts identifies a plurality of parts associated with the part to which the list corresponds
21. The method of claim 17, further comprising discovering connections between parts in the package by analyzing the list of related parts
22. The method of claim 17, further comprising caching information stored in a part that identifies related parts in the list of related parts
23. The method of claim 17, wherein the list of related parts does not alter either the source part to which the related parts list applies or any of the related parts identified m the related parts list
24. One or more computer-readable media having computer-readable instructions thereon which, when executed, implement the method of claim 17
25. A computing system embodying the computer-readable media of claim 24
26. A schema comprising
at least one relationship element that identifies relationships between parts in
a package,
at least one attribute that identifies a target part in each relationship, and
at least one attribute that identifies a name, wherein the name identifies a
purpose of each relationship
27. The schema of claim 26, wherein an additional relationships element groups together any number of relationship elements
28. The schema of claim 26, wherein the relationship element does not alter any parts in the package
29. The schema of claim 26, wherein a plurality of relationships are associated
with the package
30. The schema of claim 26, wherein the attribute that identifies a target part includes a uniform resource identifier
31. The schema of claim 26, wherein the attribute that identifies a name uses a uniform resource identifier to uniquely define the purpose of the relationship
32. An application program interface embodied on one or more computer-
readable media, comprising
exposing a first method to create a package, wherein the package holds together a plurality of parts,
exposing a second method to create a relationship between the package and a particular part, and
exposing a third method to identify relationships between the plurality of parts
33. An application program interface as recited in claim 32, further comprising a fourth method to delete existing relationships
34. An application program interface as recited m claim 32, further comprising a fourth method to retrieve information regarding existing relationships
35. An application program interface as recited in claim 32, further comprising a property that identifies a source part associated with a particular relationship
36. An application program interface as recited m claim 32, further comprising a property that identifies a target uniform resource identifier associated with a particular relationship
37. An application program interface as recited in claim 32, further comprising a property that identifies a name associated with a particular relationship
38. An application program interface embodied on one or more computer-
readable media, comprising,
calling a first method to create a package, wherein the package contains a plurality of parts,
calling a second method to create a relationship between two parts in the package; and
calling a third method to identify relationships between another pair of parts in the package.
39. An application program interface as recited in claim 38, further comprising
defining a source part for each relationship
40. An application program interface as recited in claim 38, further comprising
defining a target uniform resource identifier for each relationship
41. An application program interface as recited in claim 38, further comprising
defining a name associated with each relationship,
| # | Name | Date |
|---|---|---|
| 1 | 1855-delnp-2005-form-18-(28-04-2008).pdf | 2008-04-28 |
| 1 | 1855-DELNP-2005_EXAMREPORT.pdf | 2016-06-30 |
| 2 | 1855-delnp-2005-abstract.pdf | 2011-08-21 |
| 2 | 1855-delnp-2005-correspondence others-(28-04-2008).pdf | 2008-04-28 |
| 3 | 1855-DELNP-2005-GPA-(01-06-2010).pdf | 2010-06-01 |
| 3 | 1855-delnp-2005-assignment.pdf | 2011-08-21 |
| 4 | 1855-DELNP-2005-Correspondence-Others-(01-06-2010).pdf | 2010-06-01 |
| 4 | 1855-delnp-2005-claims.pdf | 2011-08-21 |
| 5 | 1855-delnp-2005-Form-1-(06-12-2010).pdf | 2010-12-06 |
| 5 | 1855-delnp-2005-correspondence-others.pdf | 2011-08-21 |
| 6 | 1855-delnp-2005-description (complete).pdf | 2011-08-21 |
| 6 | 1855-delnp-2005-Correspondence-Others-(06-12-2010).pdf | 2010-12-06 |
| 7 | 1855-delnp-2005-pct-304.pdf | 2011-08-21 |
| 7 | 1855-delnp-2005-drawings.pdf | 2011-08-21 |
| 8 | 1855-delnp-2005-pct-202.pdf | 2011-08-21 |
| 8 | 1855-delnp-2005-form-1.pdf | 2011-08-21 |
| 9 | 1855-delnp-2005-form-18.pdf | 2011-08-21 |
| 9 | 1855-delnp-2005-pct-105.pdf | 2011-08-21 |
| 10 | 1855-delnp-2005-form-2.pdf | 2011-08-21 |
| 10 | 1855-delnp-2005-pct-102.pdf | 2011-08-21 |
| 11 | 1855-delnp-2005-form-3.pdf | 2011-08-21 |
| 11 | 1855-delnp-2005-pct-101.pdf | 2011-08-21 |
| 12 | 1855-delnp-2005-form-5.pdf | 2011-08-21 |
| 12 | 1855-delnp-2005-gpa.pdf | 2011-08-21 |
| 13 | 1855-delnp-2005-form-5.pdf | 2011-08-21 |
| 13 | 1855-delnp-2005-gpa.pdf | 2011-08-21 |
| 14 | 1855-delnp-2005-form-3.pdf | 2011-08-21 |
| 14 | 1855-delnp-2005-pct-101.pdf | 2011-08-21 |
| 15 | 1855-delnp-2005-form-2.pdf | 2011-08-21 |
| 15 | 1855-delnp-2005-pct-102.pdf | 2011-08-21 |
| 16 | 1855-delnp-2005-form-18.pdf | 2011-08-21 |
| 16 | 1855-delnp-2005-pct-105.pdf | 2011-08-21 |
| 17 | 1855-delnp-2005-pct-202.pdf | 2011-08-21 |
| 17 | 1855-delnp-2005-form-1.pdf | 2011-08-21 |
| 18 | 1855-delnp-2005-pct-304.pdf | 2011-08-21 |
| 18 | 1855-delnp-2005-drawings.pdf | 2011-08-21 |
| 19 | 1855-delnp-2005-description (complete).pdf | 2011-08-21 |
| 19 | 1855-delnp-2005-Correspondence-Others-(06-12-2010).pdf | 2010-12-06 |
| 20 | 1855-delnp-2005-Form-1-(06-12-2010).pdf | 2010-12-06 |
| 20 | 1855-delnp-2005-correspondence-others.pdf | 2011-08-21 |
| 21 | 1855-DELNP-2005-Correspondence-Others-(01-06-2010).pdf | 2010-06-01 |
| 21 | 1855-delnp-2005-claims.pdf | 2011-08-21 |
| 22 | 1855-DELNP-2005-GPA-(01-06-2010).pdf | 2010-06-01 |
| 22 | 1855-delnp-2005-assignment.pdf | 2011-08-21 |
| 23 | 1855-delnp-2005-correspondence others-(28-04-2008).pdf | 2008-04-28 |
| 23 | 1855-delnp-2005-abstract.pdf | 2011-08-21 |
| 24 | 1855-DELNP-2005_EXAMREPORT.pdf | 2016-06-30 |
| 24 | 1855-delnp-2005-form-18-(28-04-2008).pdf | 2008-04-28 |