- From: Felix Sasaki <fsasaki@w3.org>
- Date: Wed, 06 Jul 2005 14:39:54 +0900
- To: public-i18n-geo@w3.org
- Cc: "Richard Ishida" <ishida@w3.org>
Hi Richard, hi all,
This is a summary of the issue "NCRs and schema languages", which has some
overlap with the FAW "entities and NCRs". It describes ways of
encapsulating NRCs, and entities are ONE possibility. Which way is useful
and possible, depends on the schema language. This summary might become an
input to the FAQ about entites and NCRs, if Richard and others think it is
useful.
Cheers, Felix.
The following discussion on entities for numeric character references
(NCRs) and other, alternative ways of encapsulating numeric character
references concentrates on four schema languages: XML DTDs, XML Schema,
RELAX NG and Schematron.
All schema languages allow to use entities for NCRs in XML documents. They
differ with respect to the declaration of entities. As for XML DTDs,
entities can be defined A) in the declaration subset of the XML document,
or B) in the external DTD ("NCR" is used as a placeholder for a numeric
character reference):
A)
<!DOCTYPE mydoc [
<!ENTITY mychar "NCR">
]>
or
B)
<!DOCTYPE mydoc SYSTEM "mydtd.dtd">
"mydtd.dtd" contains The entitiy declaration <!ENTITY mychar "NCR">.
XML Schema, RELAX NG and Schematron allow to declare entities like A).
They do not allow to declare entities like B), i.e. as part of the
external schema. Strictly speaking, entity declaration and expansion are
out of scope for XML Schema, RELAX NG and Schematron. All these schema
languages rely on an XML processor which expands the entities before the
validation against the schema starts. Non-validating XML processors are
required to check only the document and no external declarations. Hence,
it depends on the implementation of the XML processor, whether external
entity declarations can be resolved or not.
XML Schema provides a different solution to encapsulate numeric character
references: The numeric character reference can be defined as a default
value for an element:
<xsd:element name="mychar" type="xsd:token" fixed="NCR"/>
In an XML document, the element then can be used like this
<mydoc> ... <mychar/>...</mydoc>
RELAX NG and XML DTDs do not allow to define default values for element
content. Also, Schematron does not support this solution. But XML DTDs,
XML Schema and RELAX NG allow to declare default values for attributes.
Hence, for XML DTDs the following alternative way of attaching a name to a
numeric character reference is possible:
<!ELEMENT mychar EMPTY>
<!ATTLIST mychar ncr NMTOKEN "..." #FIXED>
or in RELAX NG:
<element name="mychar">
<attribute name="ncr" a:defaultValue="NCR"/>
<empty/>
</element>
or in XML Schema:
<xsd:attribute name="mychar" type="xsd:token" fixed="NCR"/>
As for XML DTDs, there seems to be no real need to choose this method,
since they allow to declare entities in the external DTD.
The following table summarizes the ways of declaring entities and
alternative methods to encapsulate numeric character references in
different schema languages.
Declaration Subset External Subset Element default
value Attribute default value
XML DTDs + + - +
XML Schema + xml parser dep. + +
RELAX NG + xml parser dep. - +
Schematron + xml parser dep. - -
Received on Wednesday, 6 July 2005 05:39:58 UTC