
<!DOCTYPE html
  PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
   <head>
      <title>Documentation for citationstyle - xml.xsd</title>
      <meta http-equiv="Content-Type" content="text/xml; charset=UTF-8"/>
      <style type="text/css">
/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* More-configurable styles */

/******** General ********/
         
/* Document body */
body {
   color: Black;
   background-color: White;
   font-family: Arial, sans-serif;
   font-size: 10pt;
}
                  
/* Horizontal rules */
hr {
   color: black;
}
/* Document title */
h1 {
   font-size: 18pt;
   letter-spacing: 2px;
   border-bottom: 1px #ccc solid;
   padding-top: 5px;
   padding-bottom: 5px;
}
/* Main section headers */
h2 {
   font-size: 14pt;
   letter-spacing: 1px;
}
/* Sub-section headers */
h3, h3 a, h3 span {
   font-size: 12pt;
   font-weight: bold;
   color: black;
}
/* Table displaying the properties of the schema components or the
   schema document itself */
table.properties th, table.properties th a {
   color: black;
   background-color: #F99; /* Pink */
}
table.properties td {
   background-color: #eee; /* Gray */
}

img{
 border: 0;
}         

/********* Documentation style *************/
p.documentation {
   color:black;
   font-style:italic;
         background-color: #EEEEFF;
         border: 1px solid #DDDDFF;
         padding-top: 1px;
         margin-right: 30px;
         margin-top: 1px;
}

         
/******** Table of Contents Section ********/

/* Controls for switching between printing and viewing modes */
div#printerControls {
   color: #963; /* Orange-brown */
}
/* Controls that can collapse or expand all XML Instance
   Representation and Schema Component Representation boxes */
div#globalControls {
   border: 2px solid #999;
}


/******** Schema Document Properties Section ********/

/* Table displaying the namespaces declared in the schema */
table.namespaces th {
   background-color: #ccc;
}
table.namespaces td {
   background-color: #eee;
}
/* Target namespace of the schema */
span.targetNS {
   color: #06C;
   font-weight: bold;
}


/******** Schema Components' Sections ********/

/* Name of schema component */
.name {
   color: #F93; /* Orange */
}

/* Hierarchy table */
table.hierarchy {
   border: 2px solid #999; /* Gray */
}

/* XML Instance Representation table */
div.sample div.contents {
   border: 1px dashed black;
}


/* Schema Component Representation table */
div.schemaComponent div.contents {
   border: 2px black solid;
}


/******** Glossary Section ********/

/* Glossary Terms */
.glossaryTerm {
   color: #036; /* Blue */
}


/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* Printer-version styles */

@media print {

/* Ensures that controls are hidden when printing */
div#printerControls {
   visibility: hidden;
}
div#globalControls {
   visibility: hidden;
}
#legend {
   display: none;
}
#legendTOC {
   display: none;
}
#glossary {
   display: none;
}
#glossaryTOC {
   display: none;
}

}

/* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ */
/* Base styles */

/******** General ********/

/* Unordered lists */
ul {
   margin-left: 1.5em;
   margin-bottom: 0em;
}
/* Tables */
table {
   margin-top: 10px;
   margin-bottom: 10px;
   margin-left: 2px;
   margin-right: 2px;
}
table th, table td {
   font-size: 10pt;
   vertical-align: top;
   padding-top: 3px;
   padding-bottom: 3px;
   padding-left: 10px;
   padding-right: 10px;
}
table th {
   font-weight: bold;
   text-align: left;
}
/* Table displaying the properties of the schema components or the
   schema document itself */
table.properties {
   width: 90%;
}
table.properties th {
   width: 30%;
}
/* Boxes that can make its content appear and disappear*/
div.box {
   margin: 1em;
}
   /* Box caption */
div.box span.caption {
   font-weight: bold;
}
   /* Button to open and close the box */
div.box input.control {
   width: 1.4em;
   height: 1.4em;
   text-align: center;
   vertical-align: middle;
   font-size: 11pt;
}
   /* Box contents */
div.box div.contents {
   margin-top: 3px;
}


/******** Table of Contents Section ********/

/* Controls for switching between printing and viewing modes */
div#printerControls {
   white-space: nowrap;
   font-weight: bold;
   padding: 5px;
   margin: 5px;
}
/* Controls that can collapse or expand all XML Instance
   Representation and Schema Component Representation boxes */
div#globalControls {
   padding: 10px;
   margin: 5px;
}


/******** Schema Document Properties Section ********/

/* Table displaying the namespaces declared in the schema */
table.namespaces th {
}
table.namespaces td {
}
/* Target namespace of the schema */
span.targetNS {
}


/******** Schema Components' Sections ********/

/* Name of schema component */
.name {
}

/* Hierarchy table */
table.hierarchy {
   width: 90%;
}
table.hierarchy th {
   font-weight: normal;
   font-style: italic;
   width: 20%;
}
table.hierarchy th, table.hierarchy td {
   padding: 5px;
}

/* XML Instance Representation table */
div.sample {
   width: 90%;
}
div.sample div.contents {
   padding: 5px;
   font-family: Courier New, sans-serif;
   font-size: 10pt;
}
   /* Normal elements and attributes */
div.sample div.contents, div.sample div.contents a {
   color: black;
}
   /* Group Headers */
div.sample div.contents .group, div.sample div.contents .group a {
   color: #999; /* Light gray */
}
   /* Type Information */
div.sample div.contents .type, div.sample div.contents .type a {
   color: #999; /* Light gray */
}
   /* Occurrence Information */
div.sample div.contents .occurs, div.sample div.contents .occurs a {
   color: #999; /* Light gray */
}
   /* Fixed values */
div.sample div.contents .fixed {
   color: #063; /* Green */
   font-weight: bold;
}
   /* Simple type constraints */
div.sample div.contents .constraint, div.sample div.contents .constraint a {
   color: #999; /* Light gray */
}
   /* Elements and attributes inherited from base type */
div.sample div.contents .inherited, div.sample div.contents .inherited a {
   color: #666; /* Dark gray */
}
   /* Elements and attributes added to or changed from base type */
div.sample div.contents .newFields {
   font-weight: bold;
}
   /* Other type of information */
div.sample div.contents .other, div.sample div.contents .other a {
   color: #369; /* Blue */
   font-style: italic;
}
   /* Link to open up window displaying documentation */
div.sample div.contents a.documentation {
   text-decoration: none;
   padding-left: 3px;
   padding-right: 3px;
   padding-top: 0px;
   padding-bottom: 0px;
   font-weight: bold;
   font-size: 11pt;
   background-color: #FFD;
   color: #069;
}
   /* Invert colors when hovering over link to open up window 
      displaying documentation */
div.sample div.contents a.documentation:hover {
   color: #FFD;
   background-color: #069;
}

/* Schema Component Representation table */
div.schemaComponent {
   width: 90%;
}
div.schemaComponent div.contents {
   font-family: Courier New, sans-serif;
   font-size: 10pt;
   padding: 5px;
}
   /* Syntax characters */
div.schemaComponent div.contents {
   color: #00f; /* blue */
}
   /* Element and attribute tags */
div.schemaComponent div.contents .scTag {
   color: #933; /* maroon */
}
   /* Element and attribute content */
div.schemaComponent div.contents .scContent, div.schemaComponent div.contents .scContent a {
   color: black;
   font-weight: bold;
}
   /* Comments */
div.schemaComponent div.contents .comment {
   color: #999; /* Light gray */
}

/******** Legend Section ********/

div#legend table, div#legend div {
   margin-bottom: 3px;
}
div#legend div.hint {
   color: #999; /* Light gray */
   width: 90%;
   margin-left: 1em;
   margin-bottom: 2em;
}


/******** Glossary Section ********/

/* Glossary Terms */
.glossaryTerm {
   font-weight: bold;
}

/********* Details *************/
.detailsToc {
  color: #666; /* Light gray */
}

.details {
  color: #666; /* Light gray */
  text-decoration:none;
}

/******** Footer ********/

.footer {
   font-size: 8pt;
}
</style>
      <script type="text/javascript">
<!--
          
         
/**
 * Counter of documentation windows
 * Used to give each window a unique name
 */
var windowCount = 0;
         
/**
 * Opens up a window displaying the documentation
 * of a schema component in the XML Instance
 * Representation table.
 * 
 * @param compDesc      Description of schema component 
 * @param compName      Name of schema component 
 * @param docTextArray Array containing the paragraphs 
 *                           of the new document
 */
function viewDocumentation(compDesc, compName, docTextArray) {
  var width = 400;
  var height = 200;
  var locX = 100;
  var locY = 200;

  /* Generate content */
  var actualText = "<html>";
  actualText += "<head><title>";
  actualText += compDesc;
  if (compName != '') {
     actualText += ": " + compName;
  }
  actualText += "</title></head>";
  actualText += "<body bgcolor=\"#FFFFEE\">";
  // Title
  actualText += "<p style=\"font-family: Arial, sans-serif; font-size: 12pt; font-weight: bold; letter-spacing:1px;\">";
  actualText += compDesc;
  if (compName != '') {
     actualText += ": <span style=\"color:#006699\">" + compName + "</span>";
  }
  actualText += "</p>";
  // Documentation
  var idx;
  for (idx = 0; idx < docTextArray.length; idx++) {
     actualText += "<p style=\"font-family: Arial, sans-serif; font-size: 10pt;\">" + docTextArray[idx] + "</p>";
  }
  // Link to close window
  actualText += "<a href=\"javascript:void(0)\" onclick=\"window.close();\" style=\"font-family: Arial, sans-serif; font-size: 8pt;\">Close</a>";
  actualText += "</body></html>";

  /* Display window */
  windowCount++;
  var docWindow = window.open("", "documentation"+windowCount, "toolbar=no,location=no,status=no,menubar=no,scrollbars=yes,resizable,alwaysRaised,dependent,titlebar=no,width="+width+",height="+height+",screenX="+locX+",left="+locX+",screenY="+locY+",top="+locY);
  docWindow.document.write(actualText);
}         
      
// -->
</script>
   </head>
   <body>
      <h1>
         <a name="top">Documentation for citationstyle</a>
      </h1>
      <h2>Table of Contents</h2>
      <ul>
         <li>
            <a href="#SchemaProperties">Schema Document Properties</a>
         </li>
         <li>
                           Global Declarations
                        <ul>
               <li>
                  <a href="xml.xsd.html_h-1961631311.html">Attribute: <strong>lang</strong>
                  </a>
               </li>
            </ul>
         </li>
      </ul>
      <ul id="legendTOC" style="margin-top: 0em">
         <li>
            <a href="#Legend">Legend</a>
         </li>
      </ul>
      <ul id="glossaryTOC" style="margin-top: 0em">
         <li>
            <a href="#Glossary">Glossary</a>
         </li>
      </ul>
      <h4>Master schema documentation file: 
            <a href="citationstyle.xsd.html">citationstyle.xsd.html</a>
      </h4>
      <div style="text-align: right; clear: both;">
         <a href="#top">top</a>
      </div>
      <hr/>
      <h2>
         <a name="SchemaProperties">Schema Document Properties</a>
      </h2>
      <table class="properties">
         <tr>
            <th>
               <a title="Look up 'Target Namespace' in glossary"
                  href="xml.xsd.html#term_TargetNS">Target Namespace</a>
            </th>
            <td>
               <span class="targetNS">http://www.w3.org/XML/1998/namespace</span>
            </td>
         </tr>
         <tr>
            <th>Element and Attribute Namespaces</th>
            <td>
               <ul>
                  <li>Global element and attribute declarations belong to this schema's target namespace.</li>
                  <li>By default, local element declarations belong to this schema's target namespace.</li>
                  <li>By default, local attribute declarations have no namespace.</li>
               </ul>
            </td>
         </tr>
         <tr>
            <th>Schema Composition</th>
            <td>
               <ul>
                  <li>This schema imports schema(s) from the following namespace(s):<ul>
                        <li>
                           <em>http://purl.org/NET/xbiblio/csl</em> (at <a title="Jump to schema documentation for 'citationstyle.xsd'."
                              href="citationstyle.xsd.html">citationstyle.xsd</a>)</li>
                     </ul>
                  </li>
               </ul>
            </td>
         </tr>
      </table>
      <h3>Declared Namespaces</h3>
      <table class="namespaces">
         <tr>
            <th>Prefix</th>
            <th>Namespace</th>
         </tr>
         <tr>
            <td>
               <a name="ns_cs">cs</a>
            </td>
            <td>http://purl.org/NET/xbiblio/csl</td>
         </tr>
         <tr>
            <td>
               <a name="ns_xml">xml</a>
            </td>
            <td>
               <span class="targetNS">http://www.w3.org/XML/1998/namespace</span>
            </td>
         </tr>
         <tr>
            <td>
               <a name="ns_xs">xs</a>
            </td>
            <td>http://www.w3.org/2001/XMLSchema</td>
         </tr>
      </table>
      <div class="schemaComponent box">
         <div>
            <input type="button" id="schema_scbox_button" class="control"
                   onclick="switchState('schema_scbox'); return false;"
                   style="display: none"/> 
            <span class="caption">Schema Component Representation</span>
         </div>
         <div id="schema_scbox" class="contents">
            <div style="margin-left: 0em">&lt;<span class="scTag">xs:schema</span> 
               <span class="scTag">elementFormDefault</span>="<span class="scContent">qualified</span>" <span class="scTag">targetNamespace</span>="<span class="scContent">http://www.w3.org/XML/1998/namespace</span>"&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:import</span> 
                  <span class="scTag">namespace</span>="<span class="scContent">http://purl.org/NET/xbiblio/csl</span>" <span class="scTag">schemaLocation</span>="<span class="scContent">citationstyle.xsd</span>"/&gt;</div>
               <div class="scContent" style="margin-left: 1.5em">...</div>&lt;/<span class="scTag">xs:schema</span>&gt;</div>
         </div>
         <script type="text/javascript">
<!--
          setState('schema_scbox', false);
// -->
</script>
      </div>
      <div style="text-align: right; clear: both;">
         <a href="#top">top</a>
      </div>
      <hr/>
      <div id="legend">
         <h2>
            <a name="Legend">Legend</a>
         </h2>
         <div style="float: left; width: 15em;">
            <h3 style="margin-bottom: 0px;">Complex Type:</h3>
            <div class="hint" style="margin-left: 0em;">Schema Component Type</div>
         </div>
         <div style="float: left; width: 15em;">
            <h3 style="margin-bottom: 0px;">
               <span class="name">AusAddress</span>
            </h3>
            <div class="hint" style="margin-left: 0em;">Schema Component Name</div>
         </div>
         <table class="hierarchy" style="clear : both">
            <tr>
               <th>Super-types:</th>
               <td>
                  <span class="type" style="color: #0000FF; text-decoration:underline;">Address</span> &lt; <span class="current">AusAddress</span> (by extension)</td>
            </tr>
            <tr>
               <th>Sub-types:</th>
               <td>
                  <ul>
                     <li>
                        <span class="type" style="color: #0000FF; text-decoration:underline;">QLDAddress</span> (by restriction)</li>
                  </ul>
               </td>
            </tr>
         </table>
         <div class="hint">If this schema component is a type definition, its type hierarchy is shown in a gray-bordered box.</div>
         <table class="properties">
            <tr>
               <th>Name</th>
               <td>AusAddress</td>
            </tr>
            <tr>
               <th>
                  <a title="Look up 'Abstract' in glossary" href="xml.xsd.html#term_Abstract">Abstract</a>
               </th>
               <td>no</td>
            </tr>
         </table>
         <div class="hint">The table above displays the properties of this schema component.</div>
         <div class="sample box">
            <div>
               <span class="caption">XML Instance Representation</span>
            </div>
            <div class="contents">
               <span style="margin-left: 0em">&lt;...</span>
               <span class="newFields">
                  <span> country="<span class="fixed">Australia</span>"</span>
               </span>&gt; <br/>
               <span style="margin-left: 1.5em" class="inherited">&lt;unitNo&gt; <span class="type">string</span> &lt;/unitNo&gt; <span class="occurs">[0..1]</span>
               </span>
               <br/>
               <span style="margin-left: 1.5em" class="inherited">&lt;houseNo&gt; <span class="type">string</span> &lt;/houseNo&gt; <span class="occurs">[1]</span>
               </span>
               <br/>
               <span style="margin-left: 1.5em" class="inherited">&lt;street&gt; <span class="type">string</span> &lt;/street&gt; <span class="occurs">[1]</span>
               </span>
               <br/>
               <span class="group" style="margin-left: 1.5em">Start <a title="Look up 'Choice' in glossary" href="#term_Choice">Choice</a>
                  <span class="occurs">[1]</span>
               </span>
               <br/>
               <span style="margin-left: 3em" class="inherited">&lt;city&gt; <span class="type">string</span> &lt;/city&gt; <span class="occurs">[1]</span>
               </span>
               <br/>
               <span style="margin-left: 3em" class="inherited">&lt;town&gt; <span class="type">string</span> &lt;/town&gt; <span class="occurs">[1]</span>
               </span>
               <br/>
               <span class="group" style="margin-left: 1.5em">End Choice</span>
               <br/>
               <span class="newFields">
                  <span style="margin-left: 1.5em">&lt;state&gt; <span class="type" style="text-decoration:underline;">AusStates</span> &lt;/state&gt; <span class="occurs">[1]</span>
                  </span>
                  <br/>
                  <span style="margin-left: 1.5em">&lt;postcode&gt; <span class="constraint">string &lt;&lt;<em>pattern</em> = [1-9][0-9]{3}&gt;&gt;</span> &lt;/postcode&gt; <span class="occurs">[1]</span>
                     <a href="javascript:void(0)" title="View Documentation" class="documentation"
                        onclick="docArray = new Array('Post code must be a four-digit number.'); viewDocumentation('Element', 'postcode', docArray);">?</a>
                  </span>
                  <br/>
               </span>
               <span style="margin-left: 0em">&lt;/...&gt;</span>
               <br/>
            </div>
         </div>
         <div class="hint">
            <p>The XML Instance Representation table above shows the schema component's content as an XML instance.</p>
            <ul>
               <li>The minimum and maximum occurrence of elements and attributes are provided in square brackets, e.g. [0..1].</li>
               <li>Model group information are shown in gray, e.g. Start Choice ... End Choice.</li>
               <li>For type derivations, the elements and attributes that have been added to or changed from the base type's content are shown in <span style="font-weight: bold">bold</span>.</li>
               <li>If an element/attribute has a fixed value, the fixed value is shown in green, e.g. country="Australia".</li>
               <li>Otherwise, the type of the element/attribute is displayed.
               <ul>
                     <li>If the element/attribute's type is in the schema, a link is provided to it.</li>
                     <li>For local simple type definitions, the constraints are displayed in angle brackets, e.g. &lt;&lt;<em>pattern</em> = [1-9][0-9]{3}&gt;&gt;.</li>
                  </ul>
               </li>
               <li>If a local element/attribute has documentation, it will be displayed in a window that pops up when the question mark inside the attribute or next to the element is clicked, e.g. &lt;postcode&gt;.</li>
            </ul>
         </div>
         <div class="schemaComponent box">
            <div>
               <span class="caption">Schema Component Representation</span>
            </div>
            <div class="contents">
               <span style="margin-left: 0em">&lt;<span class="scTag">complexType</span>
                  <span class="scTag">name</span>="<span class="scContent">AusAddress</span>"&gt;</span>
               <br/>
               <span style="margin-left: 1.5em">&lt;<span class="scTag">complexContent</span>&gt;</span>
               <br/>
               <span style="margin-left: 3em">&lt;<span class="scTag">extension</span>
                  <span class="scTag">base</span>="<span class="scContent">
                     <span class="type" style="text-decoration:underline;">Address</span>
                  </span>"&gt;</span>
               <br/>
               <span style="margin-left: 4.5em">&lt;<span class="scTag">sequence</span>&gt;</span>
               <br/>
               <span style="margin-left: 6em">&lt;<span class="scTag">element</span>
                  <span class="scTag">name</span>="<span class="scContent">state</span>" <span class="scTag">type</span>="<span class="scContent">
                     <span class="type" style="text-decoration:underline;">AusStates</span>
                  </span>"/&gt;</span>
               <br/>
               <span style="margin-left: 6em">&lt;<span class="scTag">element</span>
                  <span class="scTag">name</span>="<span class="scContent">postcode</span>"&gt;</span>
               <br/>
               <span style="margin-left: 7.5em">&lt;<span class="scTag">simpleType</span>&gt;</span>
               <br/>
               <span style="margin-left: 9em">&lt;<span class="scTag">restriction</span>
                  <span class="scTag">base</span>="<span class="scContent">
                     <span class="type">string</span>
                  </span>"&gt;</span>
               <br/>
               <span style="margin-left: 10.5em">&lt;<span class="scTag">pattern</span>
                  <span class="scTag">value</span>="<span class="scContent">[1-9][0-9]{3}</span>"/&gt;</span>
               <br/>
               <span style="margin-left: 9em">&lt;/<span class="scTag">restriction</span>&gt;</span>
               <br/>
               <span style="margin-left: 7.5em">&lt;/<span class="scTag">simpleType</span>&gt;</span>
               <br/>
               <span style="margin-left: 6em">&lt;/<span class="scTag">element</span>&gt;</span>
               <br/>
               <span style="margin-left: 4.5em">&lt;/<span class="scTag">sequence</span>&gt;</span>
               <br/>
               <span style="margin-left: 4.5em">&lt;<span class="scTag">attribute</span>
                  <span class="scTag">name</span>="<span class="scContent">country</span>" <span class="scTag">type</span>="<span class="scContent">
                     <span class="type">string</span>
                  </span>" <span class="scTag">fixed</span>="<span class="scContent">Australia</span>"/&gt;</span>
               <br/>
               <span style="margin-left: 3em">&lt;/<span class="scTag">extension</span>&gt;</span>
               <br/>
               <span style="margin-left: 1.5em">&lt;/<span class="scTag">complexContent</span>&gt;</span>
               <br/>
               <span style="margin-left: 0em">&lt;/<span class="scTag">complexType</span>&gt;</span>
               <br/>
            </div>
         </div>
         <div class="hint">The Schema Component Representation table above displays the underlying XML representation of the schema component. (Annotations are not shown.)</div>
         <div style="text-align: right; clear: both;">
            <a href="#top">top</a>
         </div>
         <hr/>
      </div>
      <div id="glossary">
         <h2>
            <a name="Glossary">Glossary</a>
         </h2>
         <p>
            <span class="glossaryTerm">
               <a name="term_Abstract">Abstract</a> 
            </span>(Applies to complex type definitions and element declarations). An abstract element or complex type cannot used to validate an element instance. If there is a reference to an abstract element, only element declarations that can substitute the abstract element can be used to validate the instance. For references to abstract type definitions, only derived types can be used.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_All">All Model Group</a> 
            </span>Child elements can be provided <em>in any order</em> in instances. See: <a title="http://www.w3.org/TR/xmlschema-1/#element-all"
               href="http://www.w3.org/TR/xmlschema-1/#element-all">http://www.w3.org/TR/xmlschema-1/#element-all</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_Choice">Choice Model Group</a> 
            </span>
            <em>Only one</em> from the list of child elements and model groups can be provided in instances. See: <a title="http://www.w3.org/TR/xmlschema-1/#element-choice"
               href="http://www.w3.org/TR/xmlschema-1/#element-choice">http://www.w3.org/TR/xmlschema-1/#element-choice</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_CollapseWS">Collapse Whitespace Policy</a> 
            </span>Replace tab, line feed, and carriage return characters with space character (Unicode character 32). Then, collapse contiguous sequences of space characters into single space character, and remove leading and trailing space characters.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_ElemBlock">Disallowed Substitutions</a> 
            </span>(Applies to element declarations). If <em>substitution</em> is specified, then <a title="Look up 'substitution group' in glossary"
               href="xml.xsd.html#term_SubGroup">substitution group</a> members cannot be used in place of the given element declaration to validate element instances. If <em>derivation methods</em>, e.g. extension, restriction, are specified, then the given element declaration will not validate element instances that have types derived from the element declaration's type using the specified derivation methods. Normally, element instances can override their declaration's type by specifying an <code>xsi:type</code> attribute.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_Key">Key Constraint</a> 
            </span>Like <a title="Look up 'Uniqueness Constraint' in glossary"
               href="xml.xsd.html#term_Unique">Uniqueness Constraint</a>, but additionally requires that the specified value(s) must be provided. See: <a title="http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions"
               href="http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions">http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_KeyRef">Key Reference Constraint</a> 
            </span>Ensures that the specified value(s) must match value(s) from a <a title="Look up 'Key Constraint' in glossary" href="xml.xsd.html#term_Key">Key Constraint</a> or <a title="Look up 'Uniqueness Constraint' in glossary"
               href="xml.xsd.html#term_Unique">Uniqueness Constraint</a>. See: <a title="http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions"
               href="http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions">http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_ModelGroup">Model Group</a> 
            </span>Groups together element content, specifying the order in which the element content can occur and the number of times the group of element content may be repeated. See: <a title="http://www.w3.org/TR/xmlschema-1/#Model_Groups"
               href="http://www.w3.org/TR/xmlschema-1/#Model_Groups">http://www.w3.org/TR/xmlschema-1/#Model_Groups</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_Nillable">Nillable</a> 
            </span>(Applies to element declarations). If an element declaration is nillable, instances can use the <code>xsi:nil</code> attribute. The <code>xsi:nil</code> attribute is the boolean attribute, <em>nil</em>, from the <em>http://www.w3.org/2001/XMLSchema-instance</em> namespace. If an element instance has an <code>xsi:nil</code> attribute set to true, it can be left empty, even though its element declaration may have required content.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_Notation">Notation</a> 
            </span>A notation is used to identify the format of a piece of data. Values of elements and attributes that are of type, NOTATION, must come from the names of declared notations. See: <a title="http://www.w3.org/TR/xmlschema-1/#cNotation_Declarations"
               href="http://www.w3.org/TR/xmlschema-1/#cNotation_Declarations">http://www.w3.org/TR/xmlschema-1/#cNotation_Declarations</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_PreserveWS">Preserve Whitespace Policy</a> 
            </span>Preserve whitespaces exactly as they appear in instances.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_TypeFinal">Prohibited Derivations</a> 
            </span>(Applies to type definitions). Derivation methods that cannot be used to create sub-types from a given type definition.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_TypeBlock">Prohibited Substitutions</a> 
            </span>(Applies to complex type definitions). Prevents sub-types that have been derived using the specified derivation methods from validating element instances in place of the given type definition.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_ReplaceWS">Replace Whitespace Policy</a> 
            </span>Replace tab, line feed, and carriage return characters with space character (Unicode character 32).</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_Sequence">Sequence Model Group</a> 
            </span>Child elements and model groups must be provided <em>in the specified order</em> in instances. See: <a title="http://www.w3.org/TR/xmlschema-1/#element-sequence"
               href="http://www.w3.org/TR/xmlschema-1/#element-sequence">http://www.w3.org/TR/xmlschema-1/#element-sequence</a>.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_SubGroup">Substitution Group</a> 
            </span>Elements that are <em>members</em> of a substitution group can be used wherever the <em>head</em> element of the substitution group is referenced.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_ElemFinal">Substitution Group Exclusions</a> 
            </span>(Applies to element declarations). Prohibits element declarations from nominating themselves as being able to substitute a given element declaration, if they have types that are derived from the original element's type using the specified derivation methods.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_TargetNS">Target Namespace</a> 
            </span>The target namespace identifies the namespace that components in this schema belongs to. If no target namespace is provided, then the schema components do not belong to any namespace.</p>
         <p>
            <span class="glossaryTerm">
               <a name="term_Unique">Uniqueness Constraint</a> 
            </span>Ensures uniqueness of an element/attribute value, or a combination of values, within a specified scope. See: <a title="http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions"
               href="http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions">http://www.w3.org/TR/xmlschema-1/#cIdentity-constraint_Definitions</a>.</p>
         <div style="text-align: right; clear: both;">
            <a href="#top">top</a>
         </div>
         <hr/>
      </div>
      <p class="footer">Generated by <a href="http://www.oxygenxml.com">&lt;oXygen/&gt; XML Editor</a> using a modified version of <a href="http://titanium.dstc.edu.au/xml/xs3p">xs3p</a> that adds schema diagrams and chunking support. Last modified: <script type="text/javascript">
<!--
          document.write(document.lastModified);
// -->
</script>
      </p>
   </body>
</html>