Data Versus Text
In Chapter 6, I provided a detailed description of
the text
pattern and its behavior within
interleave
patterns. There’s
another pattern that also describes and attaches datatypes to text
nodes. Even though this pattern will become more useful with the
introduction of the datatype libraries in Chapter 8, it’s worth examining its
core features right now to be sure you’ve touched on
most of the definitions related to nodes.
The data
pattern accepts a
type
attribute (as for the
value
pattern) and checks that the value is valid
per this type. Since our two built-in types accept any value, the
data
pattern with built-in types is almost
equivalent to a text
pattern. However, the
data
pattern doesn’t mean, like
the text
pattern, “zero or
more text nodes” but instead “one
text node.” The data
pattern has
been designed to represent data. It’s forbidden in
mixed-content models because the authors of the RELAX NG
specification considered mixing data and elements poor practice.
This restriction applies to all
patterns that match a single text
node (data
, value
, and
list
) that can never be associated with patterns
matching sibling elements (elements that can add the same parent
element in the same instance document). In practice, this means you
can’t use a data
pattern to
describe content models such as:
<price><currency>USD</currency>20</price>
or:
<price>20<currency>Euro</currency></price>
These content models were considered poor practice by the authors of the RELAX NG specification. ...
Get RELAX NG now with the O’Reilly learning platform.
O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.