Although
xs:annotation
is certainly
the most flexible way to embed any information within a schema, W3C
XML Schema defines a second opening in its vocabulary that may be
used either as an alternative or in conjunction with annotations. All
the W3C XML Schema
elements (except
xs:documentation
and
xs:appinfo
) accept any attribute that has a
namespace other than the W3C XML Schema namespace (unprefixed
attributes are forbidden). Such attributes may be used to document a
schema:
<xs:element name="author" type="author" doc:doc="This element describes the author of a book." xmlns:doc="http://dyomedea.com/ns/doc"/>
This approach is also used by SAF adornments, whose simple form can be embedded in attributes:
<xs:element name="author" type="author" sql:table="TBL_AUTHOR" xmlns:sql="http://www.extensibility.com/saf/spec/safsample/sql-map.saf" />
The huge opening given to attributes is especially interesting with attribute-only vocabularies such as XLink, and simple XLinks can be directly embedded into W3C XML Schema. The following example links the definition of our author element directly to a XSLT template:
<xs:element name="author" type="author" xlink:arcrole="http://www.w3.org/1999/xhtml" xlink:role="http://www.w3.org/1999/XSL/Transform" xlink:title="Author template" xlink:href="library.xslt#author" xmlns:xlink="http://www.w3.org/1999/xlink"/>
Unfortunately, because of the exception for
xs:appinfo
and
xs:documentation
, which do not accept foreign
attributes, metadata cannot be added through attributes in these
elements, so the following example is invalid:
<xs:element name="author" type="author"> <xs:annotation> <xs:appinfo xlink:arcrole="http://www.w3.org/1999/XSL/Transform" xlink:role="http://www.w3.org/1999/XSL/Transform" xlink:title="Author template" xlink:href="library.xslt#author" xmlns:xlink="http://www.w3.org/1999/xlink"> <div class="resource"> <h4> XSLT Transformation </h4> <p> This <a href="library.xslt#author"> template </a> displays the description of an author. </p> </div> </xs:appinfo> <xs:appinfo title="CSS Stylesheet" role="http://www.isi.edu/in-notes/iana/assignments/media-types/text/css" href="author.css"> <div class="resource"> <h4> CSS Stylesheet </h4> <p> A <a href="author.css"> CSS stylesheet </a> defining the styles which may be used to display an author. </p> </div> </xs:appinfo> </xs:annotation> </xs:element>
Of course, the usual limitations of attributes apply here: attributes are less extensible than elements and they cannot include structured content.