Shouldn't XML be expressive enough to model E-R constructs directly?

Rick Jelliffe <[email protected]>
Newsgroups gmane.text.xml.devel
Message-ID <CADUdYQWTaxgPGqqw6SE0Kz20jCv3Db9o9f8_PNOZ+RPMhxWN9w@mail.gmail.com>
I am not sure if the following makes sense. For the gist, skip to the
Conjecture paras.  (Please don't be distracted by details when I say
something that is not quite right in the numbered sections: they are
examples not assertions.)

1. *Typed nodes, untyped endpoints, untyped edges*.
SGML's ESIS  (Element Structure InformationSet, akin to SAX) was a list
reported events ("information") from parsing a document. So we can view it
as nodes where each node has two unlabelled edges, except the first and
last which have one only.

   - There are 3 types of node: data (characters), tag, declaration.
   - There are five types of tag: start-document, end-document, internal
   entity reference, external entity reference, start-tag, end-tag,
   processing-instruction.
      - These may have various properties: e.g., for a start-tag, generic
      identifier and attributes
      - There are six types of declaration: doctype, entity, element,
   attlist, notation).
      - These may have various properties: name, value, etc. e.g. For an
      internal entity, a name, and text.


   - The tag types are partially ordered: declarations must come before all
   element tags, attributes "tags" must come immediately after an
   element-start tag.

2. *Typed nodes, typed endpoints, untyped edges*
The* XPath 1 Data Model* has six types of nodes: document, element, text,
attribute, comment, processing-instruction, notation.

   - Element, attribute and processing-instructions are labeled: the
   element name, attribute name, and processing-instruction target.
      - There is one document node with an edge to one element node.  An
      attribute node is a name-value pair with a property to indicate
if the node
      is an ID.
   - There are edges are unlabelled, untyped but their endpoints have
   labels called the "axis": child/parent, preceding/following,
   attribute/parent, namespace/parent.
      - An element node has only one parent end-point, one preceding
      endpoint and one following endpoint. All edges have an element at one or
      both ends.
      - Child/parent edges have an ordering property. (This might be
      considered a label.)
   - The network is a tree, routed at the document node.

3. *Untyped nodes, typed edges, untyped endpoints*
This a kind of view that a text editor might have (ignoring markup
declarations) allowing top-down navigation into various files.  It is a
tree of anonymous nodes and named set of resources/files/objects called
entities.

   - An entity is a text entity or non-text entity.
   - Nodes are anonymous and untyped
   - Each node is itself a sequence of text ranges in text entities and an
      ordering property
      - Each node therefore represents a text run in contents of an
      element, with entity references dereferenced but not merged, rather than
      the element itself.
      - There are five types of edges: data, element, attribute, comment,
   processing instruction, ID/REF
      - Element, attribute, processing instruction and ID/IDREF edges have
      names.
      - Edges are directed from, to.
      - Edges may also have text ranges (e.g. for the tags, if their
      location is useful to the application)
      - Apart from the root node, all nodes have one element edge connected
      by the "to" endpoint.
      - Except for elements, each node connects to only one edge.
      - Element, data, attribute, comment and processing-instruction edges
      form an ordered, directed tree.
      - ID/IDREF edges are named by the IDREF value. Consequently, the
      "from" endpoint with a node with an particular attribute edge
connecting to
      a node with a value containing that identifer (i.e. an IDREF or IDREFs
      attribute), as does the "to" endpoint (ie., an ID attribute)
      - The document is therefore a directed, possibly cyclic rooted graph,
   where the nodes are themselves trees of possibly overlapping ranges of text
   in entities.

4. *Attribute-labelled nodes with attribute-labelled edges.*

An example is Chen's *Entity-Relationship Model: *it has three types of
nodes: entity, relationship and attribute.

   - Nodes are labelled: the entity name, relationship name, attribute name.
   - Edges have no type or label, but their end-points have a cardinality
   property: for end-points of edges involving attributes, this may not be
   greater than 1.
   - All nodes have at least one edge. A node cannot have an edge to the
   same type of node, and an attribute node only has one edge (i.e., there are
   "entity attributes" and "relationship attributes".)
   - One attribute connected to an entity can be the "primary key".
   - The network is a graph. Edges and nodes do not have any ordering
   property.


*Conjecture*: *XML cannot represent #4*

XML's strength is that it can be viewed as node-labelled or edge-labelled
networks in all sorts of ways.

However, while we can have attributes that attach to nodes or that attach
to edges, there is no way in XML itself to attach attributes to both nodes
and edges. Which is what the E-R model wants.  You have to go outside XML
to some higher layer that may give a view of the document with some
attributes coming in on nodes (or edges) associated with edges (or nodes.)
This impacts every part of the XML ecosystem,  which also needs to somehow
convey this out-of-band non-schema information, where it exists.

For example, in a start-tag `< buttons type="wooden" xml:lang="de">...`
the @type is an attribute of buttons, but the @xml:lang is an attribute of
the element's contents which are in German. In E-R terms, one should be an
entity attribute and the other a relationship attribute. (Please don't
quibble about this example, please focus on what I am trying to
communicate, not on the details of what @xml:lang applies to in its
specification, etc: I know what some of you are like :-) )

So what people often do, to get "pure" modeling, is like `< buttons
type="wooden">< data xml:lang="de">...` to get an attachment. But this does
not in fact let you know which attributes belong to edges and which to
nodes, it just creates another edge and node.  You need to go outside.

How could this be resolved? My preference would be a specialized =
delimiter, like =@, in an upgrade to XML for attributes that apply to the
contents (attributes on the node if edges are normally used, and vice
versa.)

But in XML 1.n, it could be done by some naming convention, for example, a
namespace prefix starting with "data_" on any attribute that should attach
to the contents between the tags, not the tag itself.  `< buttons
type="wooden" xml:lang=@"de">...`


Regards
Rick
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.