- From: Thomas Passin <list1@t...>
- Date: Fri, 23 Dec 2016 18:48:43 -0500
But now you are thinking in procedural terms instead of in a declarative
way.
On 12/23/2016 3:53 PM, Costello, Roger L. wrote:
Hi Folks,
*Problem*: There are N nodes. Create an XML instance so that the nodes
form a ring (cyclic) topology.
Rick Jelliffe solved this problem very elegantly [1].
Here’s Rick’s solution: Arrange the nodes in document order:
<Nodes>
<Nodeid="N1">...</Node>
<Nodeid="N2">...</Node>
...
<Nodeid="Nn">...</Node>
</Nodes>
“How does that form a ring topology?” you ask. It doesn’t. Not yet. You
need to define an operator on the nodes and give the operator the
desired behavior (semantics). Allow me to explain.
To traverse from one <Node> element to the next, you _must_ perform an
operation. If you are moving from <Node> to <Node> using your eyes, then
the operator is “physically move your eyes downward (or upward).” If you
are moving from <Node> to <Node> using XPath, then the operator is
following-sibling (or preceding-sibling). Regardless of the technology,
some operator must be used to move from one <Node> element to the next.
Let’s generically denote that operator by /succ/. To achieve our ring
topology goal, then, we need to imbue the /succ/ operator with this
semantic:
The /succ/ of a <Node> is the next node in document order
except when <Node> is the last node, then the /succ/ is the
first node.
Now the nodes take on a ring topology, by way of the /succ/ operator.
Awesome! Thanks Rick!
**
*Lesson Learned*: XML has no semantics. When we define operators on the
XML and imbue specific behaviors on the operators, only then we may
_informally_ treat the XML as having semantics.
Comments?
/Roger
[1]
http://xml-dev.markmail.org/message/b3n774tmzqfe5k4d?q=Notable+declarative+expressions%3F+date:201612
[Date Prev]
| [Thread Prev]
| [Thread Next]
| [Date Next]
--
[Date Index]
| [Thread Index]
|