> ieml.org
> ieml star parser
Star to XML representing the Star syntactic structure

Enter a Star IEML Expression:   (or one of:   -dtd   -h   -v   -about   -releasenotes)
Source
IEML Syntax
IEML Syntax

IEML Syntax

Prof. Pierre Lévy, CRC, FRSC
University of Ottawa
www.ieml.org

Version 3.0 (14 February 2008)

Introduction

The Information Economy MetaLanguage (IEML) provides a communications platform that comprehends the classes of human transactions and the classes of things that are involved in human transactions, such as services, skills, authority, entities with skills and/or authority money, and so on: human affairs. IEML allows these classes to be uniquely identified and exploited as tools for describing and measuring societal phenomena.

Each class of human affairs is represented as a flow. A flow is a relationship between things that play three different roles: source, destination, and translator. In IEML, every human affair can be characterized as emanating from a specific location in IEML space, the source. Depending on the nature of the affair, the destination and translator roles may be played by locations in IEML space. The general term for what is flowing from a source to a destination is information. The location in IEML space that plays the translator role, if any, serves as the vehicle used to move information from source to destination.

Flows are themselves locations in IEML space, and flows generally consist of other flows. The only exception is that a role may be played by one of six primitives. All of IEML, with its power to specify locations in semantic subspace, is derived from these six primitives. The primitives comprise the first of IEML's six layers. The other five layers consist of flows: the flows at layer 2 consist of primitives, the flows at layer 3 consist of flows at layer 2, the flows at layer 4 consist of flows at layer 3, and so on.

The primary focus of this document is the STAR-IEML syntax, which is designed for compactness and usability in communications among IEML practitioners. There is also an XML-based IEML syntax. Like all XML vocabularies, the latter is directly useful in electronic computing applications.

How to read this document

Words that look like this are defined in the Glossary.

STAR-IEML expressions look like this.

When STAR-IEML syntax is used, but the usage is not intended to be a complete IEML expression, it looks like this (i.e., no leading star or trailing stars appear). However, when they appear in tables, even complete IEML expressions are shown without stars, in order to conserve space. All of the valid STAR-IEML expressions that appear in this document are links; click on any such expression to see its representation in XML.

When the symbol == appears between two complete or incomplete IEML expressions, it means that both expressions represent the same set.

Expressions in XML notation look like this.

Primitives and Primitive Categories

In IEML there are six primitives U:, A:, S:, B:, T: and the placeholder primitive E:. Each of them appears in its own primitive category, of which it is the only member. In addition, there are four other primitive categories, O:, M:, F: and I:, that are combinations of primitive categories.

Primitives and Primitive Categories
Descriptor
in the
English
language
Primitive Primitive
Category
Members of
This
Primitive
Category
This Primitive
Category
is a Member
of These
Primitive Categories
virtual U: U: U: U: O:
F: I:
actual A: A: A: A: O:
F: I:
sign S: S: S: S: M:
F: I:
being B: B: B: B: M:
F: I:
thing T: T: T: T: M:
F: I:
empty E: E:   I:
verbs   O: U: A: O: F:
I:
nouns   M: S: B:
T:
M: F:
I:
full   F: F: U:
A: O:
S: B:
T: M:
I:
information   I: I: E:
F: U:
A: O:
S: B:
T: M:
I:

In IEML, a category is either a set of primitives (a primitive category) or a set of flows (a generated category). A category may have many members, or only one member, or, in the case of "empty" categories, no members. The symbols for categories are the building blocks of IEML-STAR syntax.

Categories, Flows and Instances
categorye.g. a set of flows that includes the notion of price
flowe.g. the notion of price
instancee.g. a price of ten dollars

If a category has only one member, the distinction between it and its only member is blurred. For example, the primitive category S: is notated the same way as the only member of that category.

Every category is at a specific layer, and all of its members, if any, are at that same layer. Categories at layer 1 are called primitive categories. Primitive categories are specified by uppercase letters.

Information: I:

Everything that is expressible in IEML is represented by the primitive category I: (information). The trailing colon : is a layer mark indicating that the category is at layer 1. Layer 1 is called the primitive layer.

Verbishness: O:

The dialectic tension between what is virtual and what is actual helps to characterize human affairs as actions. Actions are expressed as IEML verbs. Verbs are flows whose sources are either virtuality or actuality. The primitive category O: (verb) is comprised of the primitive categories U: (virtual) and A: (actual).

Virtuality: U:

Whatever is not actual is virtual. The primitive category U: (virtual) has a single member. STAR-IEML does not distinguish between this category and its only member; U: is an elementary component of the STAR-IEML syntax.

Actuality: A:

Whatever is not virtual is actual. The primitive category A: (actual) has a single member. STAR-IEML does not distinguish between this category and its only member; A: is an elementary component of the STAR-IEML syntax.

Nounishness: M:

A tripolar dialectic is exploited by IEML to characterize human affairs as IEML nouns. The dialectic consists of things that represent other things (signs), things that understand signs (beings), and everything else (things). Nouns are flows whose sources are either signs, beings, or things. The primitive category M: (noun) is comprised of the primitive categories S: (sign), B: (being) and T: (thing).

Sign: S:

Whatever represents something is a sign. The primitive category S: (sign) has a single member. STAR-IEML does not distinguish between this category and its only member; S: is an elementary component of the STAR-IEML syntax.

Being: B:

Whatever understands signs (i.e., human beings and things that are like human beings, at least in that respect) is a being. The primitive category B: (being) has a single member. STAR-IEML does not distinguish between this category and its only member; B: is an elementary component of the STAR-IEML syntax.

Thing: T:

A thing is whatever is neither a sign nor a being. The primitive category T: (thing) has a single member. STAR-IEML does not distinguish between this category and its only member; T: is an elementary component of the STAR-IEML syntax.

Emptiness: E:

The primitive category E: (empty) has no members; it is the absence of any of the elementary components U:, A:, S:, B:, or T:. It serves the same purpose in STAR-IEML as does the zero in the representation of numbers; it is a syntactic placeholder.

Fullness: F:

The primitive category F: (full) is comprised of all five of the elementary components: U:, A:, S:, B:, and T:.

I: (revisited)

Alert readers may now wonder, what is the difference between F: and I:? The difference is that, unlike F:, I: also includes the possibility of emptiness (E:).

Not all semantics can be distinguished using only the distinctions provided by the dialectic poles virtual, actual, sign, being, and thing. In these cases, the symmetries, oppositions and inclusion structures provided by the IEML syntax may be used to map an intended semantic structure. In any case, the structures of IEML sets should map as closely as possible the structures of the corresponding semantic domains.

Flows, Layers, and Generative Set Operations

Flows and roles (source, destination, and translator):

Human affairs can be characterized by their transferences of information. Each transference has an emitter. It may have a receiver, and the conveyance itself may also be significant. In IEML, classes of human affairs are identified as flows. Sets of flows are expressed as IEML categories. Every category is expressed as an ordered list of three components. The first component plays the source (emitter) role. The second component plays the destination (receiver) role. The third component plays the translator (conveyance) role.

Any role may be unplayed. When a role is unplayed, the role is empty. The following example specifies a layer 2 flow in which the destination and translator roles are unplayed:

However, a category may be an empty set; in this case the category is either an expressed in STAR-IEML as the empty primitive category or as an empty generated category. An empty category is a category in which all the roles are unplayed (empty).

In any given flow, all of the role players are at the same layer. The flow itself is at the layer of its role players plus one. For example, all of the role players of a flow at layer 2 are at layer 1.

Layer 1 role players are primitive categories. All other role players (role players at layers 2-5) are generated categories. Since there is no layer 7, layer 6 categories are never role players. Layers 1 through 5 are generating layers, while layers 2 through 6 are generated layers. Therefore, layers 2 through 5 are both generating and generated.

A role player may be a set. For example, if a role player is O:, then in fact the role is played by the set comprised of U: and A:. There is a process of cartesian multiplication at work in the expression of generated categories. This process is illustrated in the following examples:

In the example above, the source role is played by O:, while the destination and translator roles are unplayed. Because the source is actually a set of 2 primitive categories, and because of the cartesian multiplication implicit in the STAR-IEML syntax, the category is a set of two flows: U:E:E:. and A:E:E:.. The following example is slightly more complex:

The above example specifies a category which is a set of four flows: U:U:E:., U:A:E:., A:U:E:. and A:A:E:..

Every generated category specifies a generative set operation in which each of the three roles, together with its role player, if any, is a generative operand.

Layers

IEML is structured in six layers. The foundational layer is called the primitive layer; it consists of the primitive categories discussed in the preceding section. The remaining five layers consist of categories (generated categories) of flows, with each succeeding layer's flows being constructed from the categories in the layer beneath it (the "layer n -1").

Each of the six layers has a special punctuation mark called a layer mark. In STAR-IEML, expressions of primitive categories and generated categories always end with a layer mark that specifies its layer.

Layer Names and Layer Marks
LayerLayer
Name
Flows at this
layer consist of
generative operands
at layer
Layer Mark
1primitive(no flows at this layer):
2event1.
3relation2-
4idea3'
5phrase4,
6seme5_

The flows and categories at each generated layer (i.e., each of the layers 2 to 6) are called the same name as the name of the layer. For example, a flow or category of flows at layer 2 (the event layer) is called an event, while a flow or category at layer 3 is called a relation, and so on.

In the following example, there are four layer marks. Each of the three colons terminates the expression of a primitive (layer 1) category; the colon is the layer mark of the primitive layer. The final dot terminates the expression of an event (layer 2) category in which the three preceding primitive category expressions respectively specify the source, destination, and translator roles.

In any STAR-IEML expression, the rightmost layer mark specifies the layer of the category that is being expressed. Any preceding layer marks terminate its generative operands, or the generative operands of its generative operands, etc. The following example specifies a category at the relation layer; its generative operands are event categories whose generative operands are primitives.

Each of the six layers can be considered a semantic space consisting of a finite number of distinct points.

The Semantic Spaces at each Layer
layer
number
layer
name
order of
magnitude of
the number of
points in the
semantic space
at this layer
1primitive6
2event 216
3relation 106
4idea 1018
5phrase 1054
6seme 10162

At each of the layers 2 to 6, each of the points consists of 1, 2, or 3 points at the layer n - 1. The points at layer n - 1 are the role players at layer n.

Trailing E:s can be implicit

In STAR-IEML, if a translator role is unplayed at any level, the expression of the category can be terminated by a layer mark without specifying a placeholder for it. For example, the following three STAR-IEML expressions are equivalent:

Similarly, if both the destination and translator roles are unplayed, the expression can end immediately after the source role player is specified. The following three STAR-IEML expressions are equivalent:

In all such cases, the trailing empty category expressions are implicit.

Special characters for layer 2 (lowercase letters)

There are 63 (216) single-event categories in IEML. In STAR-IEML, 25 of them can be represented by a specific lowercase letter, or by two lowercase letters. In the table below, one of these 25 categories is shown in each cell. In each cell, the first line shows the shortest way to notate the event in STAR-IEML -- one of the 25 lowercase-letter codes. Below that is the descriptor in the English language. At the bottom of each cell, the event is notated in terms of its primitive role players.

Lowercase event symbols in IEML
         
wo.
generate
possible

U:U:.
wa.
operate
 

U:A:.
y.
know
 

U:S:.
o.
want
 

U:B:.
e.
be able
 

U:T:.
wu.
perceive
 

A:U:.
we.
reconstitute
 

A:A:.
u.
express
 

A:S:.
a.
commit
 

A:B:.
i.
do
 

A:T:.
j.
signifier
mutation

S:U:.
g.
document
mutation

S:A:.
s.
thought
 

S:S:.
b.
language
 

S:B:.
t.
memory
 

S:T:.
h.
meaning
mutation

B:U:.
c.
personal
mutation

B:A:.
k.
society
 

B:S:.
m.
affect
 

B:B:.
n.
world
 

B:T:.
p.
referent
mutation

T:U:.
x.
material
mutation

T:A:.
d.
truth
 

T:S:.
f.
life
 

T:B:.
l.
space
 

T:T:.

Non-generative Set Operations

In STAR-IEML, there are two kinds of operations that result in sets of primitives or flows: generative set operations (see above) and non-generative set operations. The latter kind includes union, intersection and difference operations. Non-generative set operators are infix operators, i.e., they appear between their two operands. The two operands are sets, i.e., they are primitive or generated categories, or they are sets which result from other non-generative set operations.

Non-generative set operations must be surrounded by the group operator ( ). Within any group, all of the operands must be at the same layer.

Operators

Union

STAR-IEML's union operator is |. The result of a union operation is the set whose members are all of the members in the sets that are its operands.

The player of the source role in the above event category is the union of U: and M:. Since M: is itself the set (S:|B:|T:), the set of events in the category is (U:.|S:.|B:.|T:.).

Intersection

STAR-IEML's intersection operator is &. The result of an intersection operation is the set whose members appear in both of the sets that are its operands.

The player of the source role in the above event category is the intersection of U: and M:. Since M: is itself the set (S:|B:|T:), and since U: is not a member of that set, the result is the empty set. (At the primitive layer, this set is notated E:; at the event layer, it is notated E:..)

Difference

STAR-IEML's difference operator is ^. The result of a difference operation is the set whose members appear in only one of the sets that are its operands.

The player of the source role in the above event category is the difference between U: and M:. Since M: is itself the set (S:|B:|T:), and since U: is not a member of that set, the result is (U:.|S:.|B:.|T:.).

Order of Operations

Default Order of Operations

When a sequence of non-generative set operations is notated, e.g. (U:.|S:.|B:.|T:.), the order of operations is left to right. For example, in the foregoing incomplete STAR-IEML expression, the first operation is (U:.|S:.), the second operation is

(result_of_first_operation |  B:.)

and the third operation is

(result_of_second_operation |  T:.).

Controlling the Order of Operations: the Group Operator

If an order of operations other than left-to-right is desired, the group operator ( ) may be used to give precedence to the operations specified within a group over the operations specified outside it.

In the following example, the two expressions are identical except that in the second expression, a group operator changes the order of operations in such a way as to yield a different result:

(1)   (U:^M:|O:).
(2)   (U:^(M:|O:)).

In (1), the first (leftmost) operation, (U:^M:), yields (U:|S:|B:|T:) (remember: M: == (S:|B:|T:)). The second operation, ((U:|S:|B:|T:)|O:), yields (U:|S:|B:|T:|A:) (remember: O: == (U:|A:)).

In (2), the first (innermost) operation, (M:|O:), yields (S:|B:|T:|U:|A:). The second operation, (U:^(S:|B:|T:|U:|A:)), yields (S:|B:|T:|A:).

Group operators can be nested inside one another. The number of levels of nesting is unlimited.

Diagonal Generative Set Operations

A diagonal generative set operation is a cartesian multiplication whose resulting set does not include any members in which two or more of the role players are not identical. The diagonal operator is { }.

In order to explain diagonal generative set operations, we must first review the default cartesian multiplication process. In the STAR-IEML expression M:M:., the category M: plays both the source and destination roles. The results of the default (i.e., non-diagonal) cartesian multiplication process can be rendered in the form of a table, as follows:

The flows in the
category M:M:.
S:S:. S:B:. S:T:.
B:S:. B:B:. B:T:.
T:S:. T:B:. T:T:.

If instead a diagonal generative set operation is specified, all of the flows in which two or more of the role players are not identical are removed from the resulting set. In the case of the above example, there are only three flows in the result: the three flows whose sources and destinations are the same. The role players whose operands must match in order to produce a member in the resulting set are wrapped in { } characters.

The flows in the
category {M:}{M:}.
S:S:.    
  B:B:.  
    T:T:.

The above table illustrates the reason why the { } operator indicates a so-called "diagonal" generative set operation: where the two or more operands are identical sets, the result is the same subset as would normally appear on the diagonal of a table. However, the same procedure can be applied to non-identical operands.

Diagonal Operands with Parameter Identifiers

For cases where multiple diagonal generative set operations appear in an IEML expression, STAR-IEML provides a way to allow specific operands to refer to each other, using matching identifying decimal numbers. These identifying numbers, called parameter identifiers, appear immediately before the closing diagonal operator }.

In the above example, all four of the diagonal operands must match in each member of the set that results from the generative set operation being specified. The above example yields:

The above example yields:

When diagonal operands have no parameter identifiers, they treated as though they refer to each other. In other words, the lack of a parameter identifier is itself a unique parameter identifier. For example,

{M:}{M:}.{M:2}{M:2}.-

is equivalent to

{M:1}{M:1}.{M:2}{M:2}.-

Undetermined Subset Operations

Sometimes, it is necessary to specify a broader category than the one which is actually intended, and to indicate that what is actually intended is a subset of that category. STAR-IEML's undetermined subset operator, < >, is useful for this purpose.

It is desirable to be able to address undetermined subset operations from outside a given IEML expression, in order to say, for example, that a particular undetermined subset should be considered a particular subset for some purpose. In order to facilitate such addressing, undetermined subsets may have unique identifying decimal numbers, called parameter identifiers. These appear immediately before the closing undetermined subset operator >.

In the above example, the first undetermined subset is <O:1>. Its parameter identifier is 1. Since O: is the set (U:|A:), the undetermined subset may be any one of the following:

Note: E: is not a possibility because E: is not an element of O:. (O: is itself a subset of F: that excludes E:.)

The second undetermined subset in the above example is <F:2>. It may be any combination of U:, A:, S:, B:, and T:.

Annotations

Whitespace

Whitespace characters, i.e. spaces, tabs, carriage returns and/or linefeeds can be inserted in any numbers and in any combinations, anywhere in a STAR-IEML expression. This feature can be used in combination with comments (see below) to present IEML expressions with explanatory materials without compromising their parsability.

Instantiators

Instantiators are used to specify particular instances of the classes of human affairs that are being specified as IEML categories. In STAR-IEML, every instantiator begins with the instantiator start delimiter ([) and ends with the instantiator end delimiter (]). The syntax and conventions that govern the text that appears between the two brackets is not constrained by STAR-IEML, except that the instantiator end delimiter (]) cannot appear in an instantiator.

When a category has one or more instantiators, they must appear after the layer mark for the last role player at layer n - 1, and before the layer mark for that category, along with any comments associated with that category.

Within an instantiator, whitespace is significant and all whitespace characters must be preserved by STAR-IEML parsers.

Examples of instantiators
Category Category
Descriptor
Instance
Indication
(non-IEML)
Category
with
Instantiator
Interpretation
b.o.-
u.u.-'
language en b.o.-u.u.-[en]' the English language
b.o.-
u.u.-'
language sp b.o.-u.u.-[sp]' the Spanish language
d.i.-
k.i.-
t.u.-'
price 10$ d.i.-k.i.-t.u.-
[10$]'
a price of 10 dollars
t.o.-
n.o.-
s.u.-'
date 1956-07-02 t.o.-n.o.-s.u.-
[1956-07-02]'
the 2nd of
July, 1956
t.u.-
t.u.-'
number 2450864356 t.u.-t.u.-
[2450864356]'
the number 2450864356
t.u.-
n.u.-'
proper name Lawrence
Zorpegson
t.u.-n.u.-
[Lawrence
Zorpegson]'
the name
Lawrence
Zorpegson
d.i.-
l.i.-'
t.u.-'
l.o.-
j.j.-',
terrestrial
coordinates
23.5 S, 47 W d.i.-l.i.-'t.u.-'
l.o.-j.j.-'
[23.5 S, 47 W],
the geographic location
23.5 S, 47 W

Comments

Comments are used to associate arbitrary texts with specific categories that appear in IEML expressions. In STAR-IEML, every comment begins with the comment start delimiter (/$) and ends with the comment end delimiter ($/). The syntax and conventions that govern the text that appears between the two brackets is not constrained by STAR-IEML, except that the comment end delimiter ($/) cannot appear in a comment.

Within a comment, whitespace is significant and all whitespace characters must be preserved by STAR-IEML parsers.

When a category has one or more comments, they must appear after the layer mark for the last role player at layer n - 1, and before the layer mark for that category, along with any instantiators associated with that category.

One application of comments is to allow discussions of particular categories within IEML expressions, as shown in the following example:

In the above example, both comments are associated with the relation that begins the expression: M:M:.O:M:.-. Both comments appear before the terminating layer mark of this relation (-).

Multiple and Mixed Comments and Instantiators

Any number of instantiators, comments, or both can be associated with the expression of any category in IEML. STAR-IEML parsers should preserve both them and the order in which they are encountered, but they need not preserve any whitespace that appears outside any comment or instantiator.

Abbreviated expressions

Every generated category consists of three roles (source, destination and translator) and its expression is terminated by a layer mark. Each of its role players, too, has a terminating layer mark, and if the role players are themselves generated categories (i.e., unless they are primitive categories), their role players, too, have terminating layer marks. Even primitive categories, which have no role players, are terminated by layer marks, so there is always a terminating layer mark, regardless of which layer it indicates.

Review: Trailing E:s can be implicit

As already seen above, STAR-IEML expressions can indicate any trailing E:s of a given category implicitly, simply by terminating the category with the category's layer mark at the point where the remaining roles are played by empty categories. This permits the expression of categories whose translator and destination roles are unplayed to be abbreviated significantly, and this kind of abbreviation has been used in this document extensively.

XML Element Types for Empty Categories

In the XML-based IEML notation, an XML element type is provided for the empty category at each layer. Instances of the element types for empty generated categories can be used in place of the subtrees of elements that would otherwise be required; they are the "XML way" of abbreviating the expression of empty categories. The table below gives the element type name (the XML "tag") used for empty categories at each layer.

XML Element Types for Empty Categories
Layer
Number
Layer
Name
Abbreviated
STAR-IEML
Expression
Name of XML
element type
1 primitive E: <E>
2 event E:. <emptyEvent>
3 relation E:.- <emptyRelation>
4 idea E:.-' <emptyIdea>
5 phrase E:.-', <emptyPhrase>
6 seme E:.-',_ <emptySeme>

Trailing I:s can be implicit, too

The number of members in the set of flows expressed as a category can be maximized by specifying that each of its role players is a category that itself includes all of the categories that are possible at its layer. Such a maximized category is called a complete category.

As already noted above, STAR-IEML's notation of the complete category at the primitive layer (the "complete primitive category") is I:; all possibilities are included in I:, including the possibility of emptiness. At the event layer, the complete category is I:I:.. At the relation layer, the complete category is I:I:.I:I:.-. At the idea layer, the complete category is:

I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'

At the phrase layer, the complete category is:

I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-',

At the seme layer, the complete category is:

I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-',
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-',
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-'
 I:I:.I:I:.-I:I:.I:I:.-I:I:.I:I:.-',_

The completion operator

STAR-IEML provides a way to abbreviate the expression of categories whose trailing roles (either destination and translator, or just translator) are played by complete categories. The technique is very similar to using a layer mark to make trailing E:s implicit (see above), but instead of using a layer mark at the point where the remaining roles are played by empty categories, the completion operator (~, also called the tilde operator) is used instead. This means that the remaining roles are implicitly played by complete categories. In each of the three pairs of examples shown below, the expression on the left is abbreviated, and the equivalent expression on the right is not abbreviated. The first member of each pair uses an ordinary layer mark in the same position that the second member of each pair uses the completion operator.

XML Element Types for Complete Categories

In the XML-based IEML notation, an XML element type is provided for the complete category at each layer. Instances of the element types for complete generated categories can be used in place of the subtrees of elements that would otherwise be required; they are the "XML way" of abbreviating the expression of complete categories. The table below gives the element type name (the XML "tag") used for complete categories at each layer.

XML Element Types for Complete Categories
Layer
Number
Layer
Name
Abbreviated
STAR-IEML
Expression
Name of XML
element type
1 primitive I: <I>
2 event I~. <completeEvent>
3 relation I~~- <completeRelation>
4 idea I~~~' <completeIdea>
5 phrase I~~~~, <completePhrase>
6 seme I~~~~~_ <completeSeme>

Duplicating Role Players with !

The role player duplication operator !, also called the bang operator, provides a way to specify that the category that plays the source role also plays the destination and translator roles.

The bang operator, when used, replaces the layer mark for the player of the source role.

Appendixes

Glossary of IEML terms

bang operator
See role player duplication operator.
category
Either a primitive category or a generated category.
complete category
Either the primitive category I: or a generated category whose role players are complete categories. There are six complete categories, one for each layer, and each of them has the maximum possible number of flows as its members for that layer.
completion operator
~, also called the "tilde operator". It is used instead of a layer mark to indicate that any remaining unspecified role players are complete categories.
destination
A specific location in an IEML semantic space to which information is considered to flow. The second of the three roles of which generated categories consist. The other two roles are "source" and "translator".
diagonal generative operation
A generative set operation that is modified by two or more generative operators. The result is a subset of the set that would have resulted from an unmodified generative set operation, that subset being the members in which the members of the role players that were surrounded by generative operators are the same.
diagonal operator
{ }. These braces surround the role player category expressions whose members must be the same as the members of one or more other role player categories in the same expressions, in order for cartesian multiplication to produce a member in the result set.
difference
A non-generative set operation whose result is the set comprised of the members which are found in only one of the sets which are its two operands.
empty
An empty set is one that has no members. An empty role player is one that is unplayed.
empty category
A category that has no members.
event
A flow or category at layer 2.
flow
One member of a generated category.
generated category
A set of flows specified by a single IEML expression, the members of which are all at a single specific layer.
generated layer
Any of the layers 2 to 6, inclusive.
generating layer
Any of the layers 1 to 5, inclusive.
generative operand
An operand in a generative set operation. It is always either a source role, a destination role, or a translator role, in combination with its role player, if any.
generative set operation
The cartesian multiplication of the sets that play the source, destination, and translator roles in a category.
group operator
( ). These indicate precedence of set operations and are useful for non-generative set operations. The innermost ones are done first.
idea
A flow or category at layer 4.
information
That which flows in a flow.
instance
A particular human affair. The class to which it belongs is an IEML flow.
intersection
A non-generative set operation whose result is the set comprised of the members which are found in both of the sets which are its two operands.
layer
One of the six semantic spaces defined by IEML: primitive (layer 1), event (layer 2), relation (layer 3), idea (layer 4), phrase (layer 5) and seme (layer 6).
layer mark
One of the six different punctuation marks that terminate STAR-IEML expressions of categories at each of the six layers: : (primitive), . (event), - (relation), ' (idea), , (phrase) and _ (seme), or one of the two special operators that can replace any of them, the tilde (~) or bang (!) operators.
non-generative set operation
Either a union, a difference or an intersection operation.
noun
A flow or category whose source at the primitive layer is a member of the primitive category M:, i.e. either S:, B: or T:.
parameter identifier
A decimal number used to label a diagonal operand or an undetermined subset.
phrase
A flow or category at layer 5.
primitive
An elementary component at layer 1: U: A: S: B: or T:
primitive category
A set of primitives that has a STAR-IEML name; either U:, A:, S:, B:, T:, E:, F:, I:, O: or M:.
relation
A flow or category at layer 3.
role
One of the three functions (source, destination or translator) assumed by categories in generative operations.
role player
A category that assumes one of the three functions (source, destination or translator) in generative operations.
role player duplication operator
! This character is used instead of a layer mark, after a source category expression to indicate that the destination and translator are copies of the source category expression. Synonym: Bang operator.
semantic space
A metaphorical space in which distinct meanings have unique locations. IEML defines six of them, one for each layer.
seme
A flow or category at layer 6.
source
A specific location in an IEML semantic space from which information is considered to emanate. The first of the three roles of which generated categories consist. The other two roles are "destination" and "translator".
STAR-IEML syntax
The syntax for IEML expressions that is the primary focus of this document.
tilde operator
See completion operator.
translator
A specific location in an IEML semantic space that serves as the vehicle for carrying information. The third of the three roles of which generated categories consist. The other two roles are "source" and "destination".
undetermined subset operator
< >. These angle brackets surround set expressions when they are supersets of the set which is actually intended and the exact membership of the intended set has not been determined.
union
A non-generative set operation whose result is the set comprised of the members which are found in either of the sets which are its two operands.
verb
A flow or category whose source at the primitive layer is a member of the primitive category O:, i.e., either U: or A:.
XML-based IEML syntax
An alternate notation for IEML based on XML. It conforms to the XML Document Type Definition below.

XML DTD

The listing below was made from the output of:

starparser.py -dtdOnly


<!-- XML-based IEML Syntax Document Type Definition (DTD)
     version 1.51 2007-12-14 -->
<!--
The following %setET; and %setAtrs; parameter entities have been
expanded everywhere they were formerly invoked, in order to
comply with the XML restriction that parameter entities
are not processed when occurring in the internal subset.
-->
<!--

<!ENTITY % setET " I | F | E | M | O | U | A | S | B | T | wo |
wa | wu | we | y | o | e | u | a | i | j | g | h | c | p | x | s
| b | t | k | m | n | d | f | l | emptyEvent | emptyRelation |
emptyIdea | emptyPhrase | emptySeme | completeEvent |
completeRelation | completeIdea | completePhrase | completeSeme
| group | union | intersection | difference | genOp |
undeterminedSubsetOf | diagonal " >

-->

<!--
<!ENTITY % setAtrs "
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase | seme
            ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
">-->

<!--
    commentsAndInstantiators : Any comments and/or instantiators
                  associated with this set.  These are
                  associated with the set that appears at the
                  level that is indicated by the following layer
                  mark.  For example: in *M:$comment$.** the
                  comment is associated with the set of events
                  terminated by the dot.  Similarly, in
                  *M:[instantiator].** the instantiator is
                  associated with the set of events terminated
                  by the dot.  A commentsAndInstantiators
                  attribute can have as its value any number of
                  instantiators and comments, in the order in
                  which they appeared (or should appear) in the
                  star expression.  This is why their delimiters
                  are preserved.

          layer : The layer of all of the members of the set.

           role : The role that this set plays in the containing
                  category expression (layer n+1).

       fillWith : "I" to fill with I (the completion operator
                  was used).

                  "E" to fill with E (the layer mark truncated
                  the expression of a generative operation
                  immediately after the source or destination.

                  "S" to copy source to destination (and
                  translator, too, if the layer number > 3) (the
                  role player duplication operator was used).

          first : A decimal number representing the number of
                  characters in the entire IEML expression that
                  appear before the first character of the IEML
                  construct represented by this particular XML
                  element.  If the IEML expression begins with
                  this construct, the value of the "first"
                  attribute is 0.

           last : A decimal number representing the number of
                  characters in the entire IEML expression that
                  appear before the last character of the IEML
                  construct represented by this particular XML
                  element.

-->

<!-- A whole IEML expression.  The document element type. -->
<!-- IEML stands for Information Economy Meta Language. -->

<!ELEMENT ieml ( ( I | F | E | M | O | U | A | S | B | T | wo |
                   wa | wu | we | y | o | e | u | a | i | j | g
                   | h | c | p | x | s | b | t | k | m | n | d |
                   f | l | emptyEvent | emptyRelation |
                   emptyIdea | emptyPhrase | emptySeme |
                   completeEvent | completeRelation |
                   completeIdea | completePhrase | completeSeme
                   | group | union | intersection | difference |
                   genOp | undeterminedSubsetOf | diagonal ),

                 ( ( I | F | E | M | O | U | A | S | B | T | wo
                     | wa | wu | we | y | o | e | u | a | i | j
                     | g | h | c | p | x | s | b | t | k | m | n
                     | d | f | l | emptyEvent | emptyRelation |
                     emptyIdea | emptyPhrase | emptySeme |
                     completeEvent | completeRelation |
                     completeIdea | completePhrase |
                     completeSeme | group | union | intersection
                     | difference | genOp | undeterminedSubsetOf
                     | diagonal ),

                   ( I | F | E | M | O | U | A | S | B | T | wo
                     | wa | wu | we | y | o | e | u | a | i | j
                     | g | h | c | p | x | s | b | t | k | m | n
                     | d | f | l | emptyEvent | emptyRelation |
                     emptyIdea | emptyPhrase | emptySeme |
                     completeEvent | completeRelation |
                     completeIdea | completePhrase |
                     completeSeme | group | union | intersection
                     | difference | genOp | undeterminedSubsetOf
                     | diagonal )?)? )>

<!ATTLIST ieml
    expressionString CDATA #IMPLIED
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Information" primitive category -->
<!ELEMENT I EMPTY>
<!ATTLIST I
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Full" primitive category -->
<!ELEMENT F EMPTY>
<!ATTLIST F
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Empty" (placeholder) primitive category. -->
<!ELEMENT E EMPTY>
<!ATTLIST E
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Nouns" primitive category -->
<!ELEMENT M EMPTY>
<!ATTLIST M
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Verbs" primitive category -->
<!ELEMENT O EMPTY>
<!ATTLIST O
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Virtual" primitive category -->
<!ELEMENT U EMPTY>
<!ATTLIST U
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Actual" primitive category -->
<!ELEMENT A EMPTY>
<!ATTLIST A
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Sign" primitive category -->
<!ELEMENT S EMPTY>
<!ATTLIST S
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Being" primitive category -->
<!ELEMENT B EMPTY>
<!ATTLIST B
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "Thing" primitive category -->
<!ELEMENT T EMPTY>
<!ATTLIST T
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>


<!-- The "wo" event category -->
<!ELEMENT wo EMPTY>
<!ATTLIST wo
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "wa" event category -->
<!ELEMENT wa EMPTY>
<!ATTLIST wa
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "wu" event category -->
<!ELEMENT wu EMPTY>
<!ATTLIST wu
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "we" event category -->
<!ELEMENT we EMPTY>
<!ATTLIST we
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "y" event category -->
<!ELEMENT y EMPTY>
<!ATTLIST y
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "o" event category -->
<!ELEMENT o EMPTY>
<!ATTLIST o
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "e" event category -->
<!ELEMENT e EMPTY>
<!ATTLIST e
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "u" event category -->
<!ELEMENT u EMPTY>
<!ATTLIST u
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "a" event category -->
<!ELEMENT a EMPTY>
<!ATTLIST a
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "i" event category -->
<!ELEMENT i EMPTY>
<!ATTLIST i
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "j" event category -->
<!ELEMENT j EMPTY>
<!ATTLIST j
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "g" event category -->
<!ELEMENT g EMPTY>
<!ATTLIST g
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "h" event category -->
<!ELEMENT h EMPTY>
<!ATTLIST h
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "c" event category -->
<!ELEMENT c EMPTY>
<!ATTLIST c
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "p" event category -->
<!ELEMENT p EMPTY>
<!ATTLIST p
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "x" event category -->
<!ELEMENT x EMPTY>
<!ATTLIST x
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "s" event category -->
<!ELEMENT s EMPTY>
<!ATTLIST s
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "b" event category -->
<!ELEMENT b EMPTY>
<!ATTLIST b
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "t" event category -->
<!ELEMENT t EMPTY>
<!ATTLIST t
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "k" event category -->
<!ELEMENT k EMPTY>
<!ATTLIST k
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED

>

<!-- The "m" event category -->
<!ELEMENT m EMPTY>
<!ATTLIST m
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "n" event category -->
<!ELEMENT n EMPTY>
<!ATTLIST n
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "d" event category -->
<!ELEMENT d EMPTY>
<!ATTLIST d
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "f" event category -->
<!ELEMENT f EMPTY>
<!ATTLIST f
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "l" event category -->
<!ELEMENT l EMPTY>
<!ATTLIST l
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "emptyEvent" placeholder category. -->
<!ELEMENT emptyEvent EMPTY>
<!ATTLIST emptyEvent
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "emptyRelation" placeholder category. -->
<!ELEMENT emptyRelation EMPTY>
<!ATTLIST emptyRelation
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "emptyIdea" placeholder category. -->
<!ELEMENT emptyIdea EMPTY>
<!ATTLIST emptyIdea
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "emptyPhrase" placeholder category. -->
<!ELEMENT emptyPhrase EMPTY>
<!ATTLIST emptyPhrase
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "emptySeme" placeholder category. -->
<!ELEMENT emptySeme EMPTY>
<!ATTLIST emptySeme
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED

>


<!-- The "completeEvent" (all possibilities) category. -->
<!ELEMENT completeEvent EMPTY>
<!ATTLIST completeEvent
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "completeRelation" (all possibilities) category. -->
<!ELEMENT completeRelation EMPTY>
<!ATTLIST completeRelation
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "completeIdea" (all possibilities) category. -->
<!ELEMENT completeIdea EMPTY>
<!ATTLIST completeIdea
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "completePhrase" (all possibilities) category. -->
<!ELEMENT completePhrase EMPTY>
<!ATTLIST completePhrase
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- The "completeSeme" (all possibilities) category. -->
<!ELEMENT completeSeme EMPTY>
<!ATTLIST completeSeme
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- Container for a non-generative set operation, expressed
     as a parenthesis in STAR-IEML. -->
<!ELEMENT group ( I | F | E | M | O | U | A | S | B | T | wo |
                  wa | wu | we | y | o | e | u | a | i | j | g |
                  h | c | p | x | s | b | t | k | m | n | d | f
                  | l | emptyEvent | emptyRelation | emptyIdea |
                  emptyPhrase | emptySeme | completeEvent |
                  completeRelation | completeIdea |
                  completePhrase | completeSeme | group | union
                  | intersection | difference | genOp |
                  undeterminedSubsetOf | diagonal )>

<!ATTLIST group
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>


<!-- "union" non-generative set operation. -->
<!ELEMENT union ( ( setOp | union | difference |
                    intersection),
                  ( setOp | union | difference |
                    intersection))>
<!ATTLIST union
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- "intersection" non-generative set operation. -->
<!ELEMENT intersection ( ( setOp | union | difference |
                           intersection),
                         ( setOp | union | difference |
                           intersection))>
<!ATTLIST intersection
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- "difference" non-generative set operation. -->
<!ELEMENT difference ( ( setOp | union | difference |
                         intersection),
                       ( setOp | union | difference |
                         intersection))>
<!ATTLIST difference
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED

>

<!-- an operand in a non-generative set operation -->
<!ELEMENT setOp ( I | F | E | M | O | U | A | S | B | T | wo |
                  wa | wu | we | y | o | e | u | a | i | j | g
                  | h | c | p | x | s | b | t | k | m | n | d
                  | f | l | emptyEvent | emptyRelation |
                  emptyIdea | emptyPhrase | emptySeme |
                  completeEvent | completeRelation |
                  completeIdea | completePhrase | completeSeme
                  | group | union | intersection | difference
                  | genOp | undeterminedSubsetOf | diagonal )>

<!ATTLIST setOp
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>

<!-- an operand in a generative set operation -->
<!ELEMENT genOp ( ( I | F | E | M | O | U | A | S | B | T | wo |
                    wa | wu | we | y | o | e | u | a | i | j | g
                    | h | c | p | x | s | b | t | k | m | n | d
                    | f | l | emptyEvent | emptyRelation |
                    emptyIdea | emptyPhrase | emptySeme |
                    completeEvent | completeRelation |
                    completeIdea | completePhrase | completeSeme
                    | group | union | intersection | difference
                    | genOp | undeterminedSubsetOf | diagonal ),

                 ( ( I | F | E | M | O | U | A | S | B | T | wo
                     | wa | wu | we | y | o | e | u | a | i | j
                     | g | h | c | p | x | s | b | t | k | m | n
                     | d | f | l | emptyEvent | emptyRelation |
                     emptyIdea | emptyPhrase | emptySeme |
                     completeEvent | completeRelation |
                     completeIdea | completePhrase |
                     completeSeme | group | union | intersection
                     | difference | genOp | undeterminedSubsetOf
                     | diagonal ),

                 ( I | F | E | M | O | U | A | S | B | T | wo |
                   wa | wu | we | y | o | e | u | a | i | j | g
                   | h | c | p | x | s | b | t | k | m | n | d |
                   f | l | emptyEvent | emptyRelation |
                   emptyIdea | emptyPhrase | emptySeme |
                   completeEvent | completeRelation |
                   completeIdea | completePhrase | completeSeme
                   | group | union | intersection | difference |
                   genOp | undeterminedSubsetOf | diagonal )?)?
                   )>

<!ATTLIST genOp
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>


<!-- Container for an expression of a set that is known to be a
     superset of the intended set.  In STAR-IEML, the superset
     appears within curly braces {}.  -->
<!ELEMENT undeterminedSubsetOf ( I | F | E | M | O | U | A | S |
                                 B | T | wo | wa | wu | we | y |
                                 o | e | u | a | i | j | g | h |
                                 c | p | x | s | b | t | k | m |
                                 n | d | f | l | emptyEvent |
                                 emptyRelation | emptyIdea |
                                 emptyPhrase | emptySeme |
                                 completeEvent |
                                 completeRelation | completeIdea
                                 | completePhrase | completeSeme
                                 | group | union | intersection
                                 | difference | genOp |
                                 undeterminedSubsetOf | diagonal
                                 )>

<!ATTLIST undeterminedSubsetOf
    parameterIdentifier CDATA #IMPLIED  
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>
<!-- 

    parameterIdentifier : If present, this is the identifying
                          number of the undetermined subset in
                          the expression.
             E.g.: For <I:29>, this is "29".
                   For <I>, there is no "parameterIdentifier" 
                   attribute.
-->

<!-- Container for an expression of a generative operand that is
     intended to be the set which is the intersection of the set
     expressed by the operand and the set(s) which is/are
     expressed by at least one other generative operand at the
     same layer in the same IEML expression.  In STAR-IEML, the
     operand appears within angle brackets <>.  -->
<!ELEMENT diagonal ( I | F | E | M | O | U | A | S | B | T | wo
                     | wa | wu | we | y | o | e | u | a | i | j
                     | g | h | c | p | x | s | b | t | k | m | n
                     | d | f | l | emptyEvent | emptyRelation |
                     emptyIdea | emptyPhrase | emptySeme |
                     completeEvent | completeRelation |
                     completeIdea | completePhrase |
                     completeSeme | group | union | intersection
                     | difference | genOp | undeterminedSubsetOf
                     | diagonal )>

<!ATTLIST diagonal
    parameterIdentifier CDATA #IMPLIED  
    commentsAndInstantiators CDATA #IMPLIED
    layer ( primitive | event | relation | idea | phrase 
            | seme ) #IMPLIED
    role ( source | destination | translator) #IMPLIED
    fillWith ( I | E | S ) #IMPLIED
    first CDATA #REQUIRED
    last CDATA #REQUIRED
>
<!-- 
    parameterIdentifier : If present, this is the identifying
                          number of the diagonal operand (of a
                          generative set operation) in the
                          expression.
             E.g.: For {I:29}, this is "29".
                   For {I:}, there is no "parameterIdentifier" 
                   attribute.
-->