The
Content Selection
feature provides a mechanism with which publishers can define alternate renditions of content fragments, and a mechanism for defining conditional expressions that allows runtime selection of these renditions.
One core use-case for this feature is to vary the information set of output documents, based on criteria such as output content type, or target consumer group. As examples,
In the Z39.98 Authoring and Interchange context, this feature may also be used to provide
feature fallbacks
. While a publisher would normally be in a situation where the feature support in used processing agents is known, this is not always the case, especially in a content interchange scenario. Not knowing whether a processing chain has full support for a certain feature, a publisher may choose to use the
Content Selection
feature to provide a fallback for that feature.
The
Content Selection
feature employs a conditional switch mechanism, represented by 1-n
when
elements appearing as children to the parent
select
element. There is an always-present default choice within the switch, represented by the
otherwise
element.
This feature is maintained by the ANSI/NISO Z39.98 advisory committee under the auspices of NISO.
The keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in this section are to be interpreted as described in RFC2119.
This resource directory represents version
1.0
of the Content Selection feature:
This release may not be the most recently published (current) version of the Content Selection feature. The current version should always be obtained from the static URI: http://www.daisy.org/z3998/2012/auth/features/select/current/
This feature must be identified as
select
in Z39.98-AI document feature declarations.
The canonical identity URI is:
http://www.daisy.org/z3998/2012/auth/features/select/1.0/
This version of the feature is compliant with the Z39.98-2012 Specification.
The normative
RelaxNG schema for version
1.0
of the Content Selection feature is
z3998-feature-select.rng.
Note - this feature schema does not represent an entire document model; it is intended for inclusion in host profiles.
This feature makes the following components available for inclusion in host profiles:
sel:select
(Phrase variant)
sel:select
(Block variant)
sel:selid
For the purposes of this feature, a content segment is an
XML
fragment, appearing within a
when
or
otherwise
element. When a processing agent
evaluates a parent
select
element, the result is that
one of the descendant content segments is selected for inclusion in the resulting document. (See further in
processing agent Behavior Requirements below.)
Note that the
when
and
otherwise
elements are allowed to be empty, i.e. provide content fragments that when selected contribute nothing to the resulting document.
An expression used at runtime to test whether a content fragment should be selected or not. The expression appears as the value of the
expr
attribute on the
when
element.
A conditional expression is syntactically a combination of one or more functions, and zero or more operators. The result of the evaluation of a conditional expression must always be a boolean.
The syntax of a conditional expression is normatively defined in EBNF Definition of the Conditional Expression.
A function is the core component of a conditional expression. The return value of a function must always be boolean. A function can take zero or more arguments.
A function
must not take another function as an argument, with the exception of the
not()
function, which
always takes another function as its argument.
The literal reference to a function always uses a prefix. This prefix defines which function set the function belongs to.
The method with which function arguments are bound to system variables at runtime is application specific.
The operators
and
and
or
are used when referencing more than one function in a conditional expression. These operators have the following meaning:
and
:
the return value of a conditional expression is true if, and only if, all functions in the expression evaluate to true.
or
:
the return value of a conditional expression is true if, and only if, at least one of the functions in the expression evaluates to true.
The
and
and
or
operators must not occur simultaneously in the same conditional expression. There is no limitation on the number of functions to be connected through logical operators.
This feature also defines the function
not()
, with one, and only one, argument, which must be another function. The purpose of this function is to return the value false if the argument function evaluates to true, and vice versa. Note that, contrary to all other functions, the
not()
function must not be prefixed.
A Function Set is a collection of 1-n functions. The set is defined by a canonical URI, where human-readable prose is available defining the name and nature of each function included in the set.
When a function is used in a conditional expression, is uses a name prefix as a token for that URI.
The Content Selection feature provides a set of predefined function sets.
The namespace of all members of the Content Selection feature element set is
http://www.daisy.org/ns/z3998/authoring/features/select/
.
The
otherwise
element must not contain descendants in the
http://www.daisy.org/ns/z3998/authoring/features/select/
namespace.
The prefix of each function set that is used in a document instance must be declared in the document instance head using
meta
elements with the
prefix
property of the
Resource Directory Vocabulary.
The declared prefix must resolve to a URI which must contain a human-readable document where the processing behavior of included functions are defined. This URI serves as the canonical identifier of the function set.
In the example below, a
target
prefix is bound to the URI
http://www.daisy.org/z3998/2012/auth/features/select/functionSets/#targetFunctionSet
:
<head xmlns:res="http://www.daisy.org/z3998/2012/vocab/resourcedirectory/#"> <meta about="http://www.daisy.org/z3998/2012/auth/features/select/functionSets/#targetFunctionSet" property="res:prefix" content="target" /> </head>
Function set prefixes, such as
target
in the example above, are static throughout the document scope; they must not be redeclared locally.
Several prefixes for the same function set URI must not be declared within the document scope.
With the exception of the
not()
function, which is unique in that it takes no prefix, all functions in Conditional Expressions must be literally referenced using prefixes, and these prefixes must be bound to a URI using the mechanism defined above.
Conditional Expression := function, (operator, function)* function := ('not','(' .*')') | (qname, ('()' | '(' .*')')) operator := 'and' | 'or' qname := prefix ':' localname prefix := ncname localname := ncname ncname := [A-Za-z][A-Za-z0-9_]*
This section defines processing agent behaviors that extend the default behaviors defined in Processing agent conformance definition.
If a processing agent supports this feature, it must comply to the following:
select
element
While traversing the document tree, each encountered
select
element is replaced by the content of exactly one of its
when
or
otherwise
element descendants.
The process of selecting a
when
or
otherwise
element descendant is as follows:
For each encountered
select
element in the given XML (sub)tree, evaluate the conditional expressions of each
when
child, starting with the first
when
child in document order:
when
or
otherwise
element).
Processing agents must issue a warning when encountering unrecognized or unsupported functions or parameters.
when
element results in
true
, select the content of the current
when
element. If the selected content contains
select
element descendants, apply these steps on the selected content recursively, then return.
when
element results in
false
, continue processing the next sibling in document order (which is a
when
or
otherwise
element).
when
element conditional expressions evaluate to true, select the content of the
otherwise
child, and return.
If a processing agent recognizes but does not support this feature, it must employ one of the following behaviors:
Upon encountering a document instance with this feature enabled, the processing agent issues a notification, and then aborts the processing.
While traversing the document tree, the processing agent selects the content of the
otherwise
child element of each encountered
select
element. The resulting document is identical to a processing pass in
Feature supported mode where zero
when
element conditional expressions evaluate to true.
The
abort
behavior is the default; the
fallback
behavior must only be employed when the processing agent is explicitly instructed to do so by the client.
Processing agents that employ the
fallback
behavior should issue a notification.
If a processing agent does not recognize this feature, it must, as dictated in Processing agent conformance definition, abort processing and issue an error message.
The component definitions provided below follow the conventions used in Core Modules.
Provides a mechanism for defining alternate renditions of content fragments, and a mechanism for defining conditional expressions that allow runtime selection of these renditions.
Two variants of the
select
element are available: one for use in a
Block context and a second for use in a
Phrase context.
Name | Default attribute model | Default content model | Default usage context |
---|---|---|---|
select
|
xml:id?,
xml:base?
|
sel:when+,
sel:otherwise
|
Phrase.class
|
select
|
xml:id?,
xml:base?
|
sel:when+,
sel:otherwise
|
Block.class
|
when
|
xml:id?,
expr
|
(text |
Text.class |
Phrase.class)+
|
sel:select
|
when
|
xml:id?,
expr
|
Block.class+
|
sel:select
|
otherwise
|
xml:id?
|
(text |
Text.class |
Phrase.class)+
|
sel:select
|
otherwise
|
xml:id?
|
Block.class+
|
sel:select
|
Name | Default values | Default usage context |
---|---|---|
expr
|
ConditionalExpression
|
sel:when
and
sel:when
|
selid
|
NCName
|
global attribute
|
Name | Definition | Content |
---|---|---|
ConditionalExpression
|
A conditional expression, as defined in Conditional Expression |
Container for content selection declarations in a Phrase context.
Local name |
select
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Default usage context |
Phrase.class
|
Default attribute model |
xml:id?,
xml:base?
|
Content model |
sel:when+,
sel:otherwise
|
Content model alterability | This content model is fixed, and must not be altered when activating this module. |
Optionality | This element must not be omitted when activating this module. |
Container for content selection declarations in a Block context.
Local name |
select
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Default usage context |
Block.class
|
Default attribute model |
xml:id?,
xml:base?
|
Content model |
sel:when+,
sel:otherwise
|
Content model alterability | This content model is fixed, and must not be altered when activating this module. |
Optionality | This element must not be omitted when activating this module. |
Container for a content fragment, associated with a selection condition.
Local name |
when
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Usage context |
sel:select
|
Usage context alterability | This usage context is fixed, and must not be altered when activating this module. |
Default attribute model |
xml:id?,
expr
|
Default content model |
(text |
Text.class |
Phrase.class)+
|
Optionality | This element must not be omitted when activating this module. |
Container for a content fragment, associated with a selection condition.
Local name |
when
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Usage context |
sel:select
|
Usage context alterability | This usage context is fixed, and must not be altered when activating this module. |
Default attribute model |
xml:id?,
expr
|
Default content model |
Block.class+
|
Optionality | This element must not be omitted when activating this module. |
Container for a content fragment to be selected if none of the preceding
sel:when
conditions evaluated to true.
Local name |
otherwise
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Usage context |
sel:select
|
Usage context alterability | This usage context is fixed, and must not be altered when activating this module. |
Default attribute model |
xml:id?
|
Default content model |
(text |
Text.class |
Phrase.class)+
|
Optionality | This element must not be omitted when activating this module. |
The following model restrictions apply to this element:
The
sel:otherwise
element must not have
sel:select
descendants.
Container for a content fragment to be selected if none of the preceding
sel:when
conditions evaluated to true.
Local name |
otherwise
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Usage context |
sel:select
|
Usage context alterability | This usage context is fixed, and must not be altered when activating this module. |
Default attribute model |
xml:id?
|
Default content model |
Block.class+
|
Optionality | This element must not be omitted when activating this module. |
The
expr
attribute contains a conditional expression.
Refer to the Content Selection Feature for information on syntax and function set association.
Local name |
expr
|
---|---|
Namespace | None |
Default usage context |
sel:when
and
sel:when
|
Value(s) |
ConditionalExpression
|
Value alterability | The defined value(s) or datatype(s) are fixed, and must not be altered when activating this module. |
Optionality | This attribute may be omitted when activating this module. |
The
selid
attribute provides a mechanism for including ID values on elements that are repeated in more than one
select
condition.
The
selid
allows a single NCNAME as its value.
When processing a
select
, all
selid
attributes in the resulting output condition must be converted to
xml:id
attributes.
Local name |
selid
|
---|---|
Namespace |
http://www.daisy.org/ns/z3998/authoring/features/select/
|
Default usage context |
global attribute
|
Value(s) |
NCName
|
Value alterability | The defined value(s) or datatype(s) are fixed, and must not be altered when activating this module. |
Optionality | This attribute must not be omitted when activating this module. |
Schema | Language |
---|---|
z3998-feature-select.rng | RelaxNG |
Activation of this module depends on the global-classes and Core modules also being activated.
Refer to the Z39.98-AI community portal for information on available software tools.
The below list represents the modules at the time of version 1.0 of this feature.
The occurrence of the keywords "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD", "SHOULD NOT", "RECOMMENDED", "MAY", and "OPTIONAL" in documentation fields embedded in these modules are to be interpreted as described in RFC2119.