XSchema: Section 5.2

Ron Bourret rbourret at dvs1.informatik.tu-darmstadt.de
Wed Sep 23 01:06:51 BST 1998


This is (except for the XSchema in XSchema appendix), the FINAL section of the 
XSchema specification.  It suggests various uses for XSchema documents and 
points at some directions we might go in the future.  Except for the section on 
validation, it is non-normative and therefore might fit better in an appendix or 
separate document.

This is where we get to talk about reusing schema information and building Java 
classes from XSchema documents and so on, so have at it.

An HTML version will be available in a day or two.  Please send comments to the 
list or directly to me (rbourret at dvs1.informatik.tu-darmstadt.de).

-- Ron Bourret


5.2 Suggested Uses of XSchema Documents (Non-Normative except as noted)

The following sections suggest possible uses of XSchema documents. Except for 
Section 5.2.3, "Validation", they are not binding on XSchema processors or 
documents.

5.2.1 Parsed Entities in XSchema Documents

Parsed general entities are used in XSchema documents for the same reasons they 
are used in XML documents: to distribute documents across multiple files, to 
enable multiple character encodings, to act as text substitution macros, and so 
on. They can also be used in a manner similar to parameter entities in a DTD. 
For example, suppose the DTD contains the following declaration:

<!ENTITY latinattribute "<AttDef Name='Latin' Type='CData' Required='No'/>" >

This can be used in the content of the XSchema document to add the Latin  
attribute to an element:

<ElementDecl Name="Species">
   ...additionalElementInformation...
   <AttGroup>
      &latinattribute;
   </AttGroup>
</ElementDecl>

Because parameter entities are used only in the DTD, they offer no special 
advantages to XSchema documents.

5.2.2 DTD Replacement

As was noted in Section 5.1, an XSchema document can define a class of XML 
documents. In this respect, it fulfills the logical functions of a DTD. That is, 
an XSchema processor can validate an XML document against an XSchema document 
and an XSchema-aware XML parser can retrieve information about the XML document, 
such as default attribute values and the system and public identifiers of 
notations and unparsed general entities.

5.2.3 Validation (Normative)

An XSchema processor can validate an XML document against an XSchema document. 
Because XSchema does not support parsed entity declarations, this validation is 
slightly less comprehensive than that defined in [XML]. XSchema processors that 
perform validation must enforce all Validity Constraints in [XML] except:

Proper Declaration/PE Nesting
Standalone Document Declaration
Proper Group/PE Nesting
Entity Declared

When enforcing the Root Element Type constraint, the XSchema processor first 
checks if there is a DOCTYPE statement in the XML document. If so, it uses the 
root element type declared there. If not, it searches the XSchema document for 
element declarations in which the Root attribute has a value of Recommended. The 
root element of the XML document must be one of these elements. If no element 
declarations have a Root attribute with a value of Recommended, the validation 
fails.

An XSchema processor that validates an XML document is not required to parse 
that document.

5.2.4 Schema Repository

XSchema documents are not required to define a particular class of XML 
documents. For example, an XSchema document might consist of nothing but  
attribute definitions. In this manner, an XSchema document can function as a 
repository for schema definitions, which can then be reused by other XSchema 
documents.  Note that while an XSchema document that defines a class of XML 
documents can always act as a repository, the converse is not always true.

5.2.5 Reusing Element Declarations with Entities or Processing Instructions

Element declarations in one XSchema document can be reused by referring to them 
in a Ref element in second XSchema document. For example, suppose an XSchema 
repository defines a FullName element:

<ElementDecl Name="FullName">
   <Model>
      <Seq>
         <Ref Element="LastName"/>
         <Ref Element="FirstName"/>
         <Ref Element="MiddleName" Frequency="ZeroOrMore"/>
      </Seq>
   </Model>
</ElementDecl>

The XSchema document that describes Letter documents might include FullName by 
reference, where the first instance is the author of the letter and the second 
instance is the recipient:

<ElementDecl Name="Letter">
   <Model>
      <Seq>
         <Ref Element="FullName"/>
         <Ref Element="FullName"/>
         <Ref Element="Paragraph" Frequency="OneOrMore"/>
      </Seq>
   </Model>
</ElementDecl>

The referenced declaration can be resolved in one of two ways. First, the second 
XSchema document can include the first, either by cutting and pasting or through 
an external parsed general entity. For example:

<!DOCTYPE XSchema [
   <!ENTITY nameRepository SYSTEM "names.xsc">
]>
<XSchema>
   &nameRepository;
   ... other declarations ...
</XSchema>

Second, a Letter (instance) document that can included processing instructions 
that point to both XSchema documents. For example:

<!DOCTYPE Letter>
<?xschema xschema="names.xsc" ?>
<?xschema xschema="letter.xsc" ?>
<Letter>
   ...
</Letter>

Note that including an XSchema processing instruction in letter.xsc that points 
to names.xsc will not have the intended effect. Rather than including the 
names.xsc, this processing instruction states that letter.xsc (an XSchema 
document) conforms to the elements declared names.xsc. This is unlikely to be 
true.

5.2.6 Reusing Schema Definitions through XLinks

In the future, it should be possible to reuse schema definitions in an XSchema 
document through XLinks. Although the exact manner in which this works cannot be 
determined until the XLink and XPointer specifications are complete, the example 
from section 5.2.5 might be performed as follows:

<ElementDecl Name="Letter">
   <Model>
      <Seq>
         <Ref Element="FullName"/>
         <Ref Element="FullName"/>
         <Ref Element="Paragraph" Frequency="OneOrMore"/>
      </Seq>
   </Model>
</ElementDecl>

<ElementDecl xml:link="simple"
             href="names.xsc#id(FullName)"
             inline="true"
             show="replace"/>

The second ElementDecl element points to, and is replaced by, the ElementDecl 
element for the FullName element in names.xsc. This eliminates the need to 
include the names.xsc through cut-and-paste, an entity, or a processing 
instruction.

XSchema has been designed with such linking in mind. It is partially because of 
this that the container elements AttGroup, Enumeration, and Model exist and can 
be directly or indirectly nested inside themselves. For example, a new AttGroup 
might be constructed by nesting multiple AttGroup elements inside it, each of 
which contains an XLink to an AttGroup in a different XSchema document.

5.2.7 Authoring

XSchema documents support authoring tools (editors) by providing human-readable 
documentation and a template for legal document structures.

A typical editing session using an XSchema-aware editor might proceed as  
follows:

1) The editor displays a list of available XSchema documents. The user chooses 
an XSchema document to use as a template.

2) The editor reads the chosen document and displays a list of elements for 
which the Root attribute has a value of Recommended. The user chooses a starting 
element.

3) The editor prompts the user for element content and attributes based on the 
information in the XSchema document. When the user requests help about a  
particular structure, the editor retrieves it from the corresponding Doc  
element.

4) When the user is done, the editor saves the new document. At the start of 
this document, the editor inserts a DOCTYPE statement declaring the root element 
type and an XSchema processing instruction declaring the template XSchema 
document.

An editor could also support schema building and modification. For example, it 
might allow the user to construct a new XSchema document from elements in 
existing XSchema documents or add new elements to existing XSchema documents.

5.2.8 General Schema Information

Because XSchema documents can contain information about a class of documents, 
they can be used by tools that work with (as opposed to on) these documents. For 
example, a database tool might read an XSchema document and construct a database 
schema or a programming tool might read an XSchema document and create Java 
classes for each element.  XSchema documents can also be used as starting points 
for search engines, which can use them to construct query-by-example interfaces.

5.2.9 Custom Uses

The More element in XSchema provides a way for users to customize their XSchema 
documents. For example, subelements of the More element might be used to assign 
the data type (integer, date, string, etc.) of PCData elements or associate Java 
classes with elements.

Note: There are a number of existing proposals for data types in XML and it is 
hoped that the W3C (and therefore XSchema) will adopt one of these in the 
future. For example, see [DCD].

xml-dev: A list for W3C XML Developers. To post, mailto:xml-dev at ic.ac.uk
Archived as: http://www.lists.ic.ac.uk/hypermail/xml-dev/
To (un)subscribe, mailto:majordomo at ic.ac.uk the following message;
(un)subscribe xml-dev
To subscribe to the digests, mailto:majordomo at ic.ac.uk the following message;
subscribe xml-dev-digest
List coordinator, Henry Rzepa (mailto:rzepa at ic.ac.uk)




More information about the Xml-dev mailing list