In SGML, attributes may be of type entity or entities. Retrieving the data associated with an entity that is the value of an attribute is similar to retrieving the value of a regular entity, except that you must do so in an element
rule instead of an external text or data entity rule.
This has the following consequences:
is entity
(or is entities
) test.
is external
(or is internal
) test, and act accordingly.
"%pv"
and "%ev"
instead of "%pq"
and "%eq"
to access the PUBLIC and SYSTEM identifiers. For an internal entity, you can use the format item "%ev"
to access the replacement value of the attribute.
entity is in-library
test is not available, so you must use the test #library has key "%pv(attribute-name)"
instead.
declare catch entity-replacement-found element "foo" repeat over attributes as this-attribute do when attribute this-attribute is entity do when attribute this-attribute is external do when #library has key "%pv(baz)" do when file #library{"%pv(baz)"} exists output file #library{"%pv(baz)"} else repeat over #libpath do when file (#libpath || #library{"%pv(baz)"}) exists output file (#libpath || #library{"%pv(baz)"}) throw entity-replacement-found done again done else do when file "%ev(baz)" exists output file "%ev(baz)" throw entity-replacement-found done done output "" catch entity-replacement-found else ;it is an internal entity output "%ev(this-attribute)" ; output its replacement text done done again output "%c"