Data Projection Model

White paper: The Data Projection Model

The Perspector Notation

Every process can be expressed as a binary relation between two operands, the "x-operand" and the "y-operand". The relation itself is represented by an operator "o".
< x | o | y >  represents a process, and is called a "perspector". The operands x and y are unique within a global name space, and the operator has its own name space. If two perspectors have the same x, o and y, there is only one perspector.

Perspectors can be combined: each perspector in turn can serve as an operand within another perspector. The perspectors can be expressed in other notations, such as XML, RDF, or Topic Maps.
A query language is also available for finding information among a set of perspectors. The way the queries are formulated is what defines and distinguishes perspectives.


<?xml version="1.0" encoding="UTF-8"?>
<grammar ns="" xmlns="" datatypeLibrary="">
<element name="perspectors">
<element name="p">
<attribute name="id">

<data type="NCName"/>
<element name="x">
<element name="o">

<element name="y">


RELAX-NG Compact Notation

default namespace = ""
start =
element perspectors {
element p {
attribute id { xsd:NCName },
element x { text },
element o { text },
element y { text }

XML Instance and XML Schema

Below is an instance of an XML document representing two perspectors: p1 = < 2 | + | 3 >     and    p2= < p1 | is_a | perspector >. This example also shows how a perspector can be embedded into another perspector. The XML document instance is followed by three equivalent declarations for the document structure: one expressed as a document type definition (DTD), one as a Relax-NG grammar, one as a Relax-NG Compact Notation, one as an XML Schema.

XML Instance


<p id="p1">


<p id="p2">



XML Schema

<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="" elementFormDefault="qualified">
<xs:element name="perspectors">

<xs:element maxOccurs="unbounded" ref="p"/>
<xs:element name="p">

<xs:element ref="x"/>
<xs:element ref="o"/>
<xs:element ref="y"/>
<xs:attribute name="id" use="required" type="xs:NCName"/>

<xs:element name="x" type="xs:string"/>
<xs:element name="o" type="xs:string"/>
<xs:element name="y" type="xs:string"/>