
<!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 - citationstyle.xsd - Attribute Group Formatting.Attributes</title>
      <meta http-equiv="Content-Type" content="text/xml; charset=iso-8859-1"/>
      <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>
      <h3>Attribute Group: <a name="h269456772" class="name">Formatting.Attributes</a>
      </h3>
      <h4>
         <a href="citationstyle.xsd.html" class="details">[Table of contents]</a>
      </h4>
      <table class="properties">
         <tr>
            <th>Name</th>
            <td>Formatting.Attributes</td>
         </tr>
         <tr>
            <th>Used by (from the same schema document)</th>
            <td>Model Group <b>
                  <a href="citationstyle.xsd.html_h772885410.html">CitationLayout.author-year</a>
               </b>, Complex Type <b>
                  <a href="citationstyle.xsd.html_h-1610236233.html">CitationEntry.author-year</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h431871842.html">CitationEntry.citekey</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-592336243.html">point</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h1541809262.html">multiple-authors</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-870282775.html">creator</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h1067263336.html">Names</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h484162804.html">names-short</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h1281486422.html">Role</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h1073049720.html">Title</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h1471841855.html">conference</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-573667567.html">date</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h167238398.html">container</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h-1127582633.html">Series</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-106980930.html">availability</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h1383053455.html">physicalLocation</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h-1482680433.html">URL</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h1060919203.html">Genre</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h-1299774123.html">Medium</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-1208419895.html">origin</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h674231257.html">day</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h1066758304.html">Month</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-573038688.html">year</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-501998901.html">part-details</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h2025599097.html">publisher</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-592433660.html">place</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-1010683459.html">volume</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-573600545.html">file</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-598671914.html">issue</a>
               </b>, Model Group <b>
                  <a href="citationstyle.xsd.html_h1444896384.html">SeriesNumber</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-592755519.html">pages</a>
               </b>, Element <b>
                  <a href="citationstyle.xsd.html_h-594172994.html">notes</a>
               </b>
            </td>
         </tr>
      </table>
      <div class="sample box">
         <div>
            <input type="button" id="h269456772_xibox_button" class="control"
                   onclick="switchState('h269456772_xibox'); return false;"
                   style="display: none"/> 
            <span class="caption">XML Instance Representation</span>
         </div>
         <div id="h269456772_xibox" class="contents">
            <span style="margin-left: 0em"> font-family="<span class="type">anySimpleType</span> 
               <span class="occurs">[0..1]</span>"</span>
            <br/>
            <span style="margin-left: 0em"> font-style="<span class="constraint">
                  <span class="type">
                     <a href="citationstyle.xsd.html#ns_xs" title="Find out namespace of 'xs' prefix">xs</a>:token</span> (<em>value</em> comes from list: {'italic'|'small caps'|'normal'})</span> 
               <span class="occurs">[0..1]</span>"</span>
            <br/>
            <span style="margin-left: 0em"> font-weight="<span class="constraint">
                  <span class="type">
                     <a href="citationstyle.xsd.html#ns_xs" title="Find out namespace of 'xs' prefix">xs</a>:token</span> (<em>value</em> comes from list: {'normal'|'bold'|'light'})</span> 
               <span class="occurs">[0..1]</span>"</span>
         </div>
         <script type="text/javascript">
<!--
          setState('h269456772_xibox', true);
// -->
</script>
      </div>
      <div class="sample box">
         <div>
            <input type="button" id="h269456772_diagram_button" class="control"
                   onclick="switchState('h269456772_diagram'); return false;"
                   style="display: none"/> 
            <span class="caption">Diagram</span>
         </div>
         <div id="h269456772_diagram" class="contents">
            <img usemap="#h1628541650" src="schemaDiagrams/h1628541650.png"/>
            <!--
            Map ref: file:/test/rng//schemaDiagrams/h1628541650.map--><map name="h1628541650">
</map>
         </div>
         <script type="text/javascript">
<!--
          setState('h269456772_diagram', true);
// -->
</script>
      </div>
      <div class="schemaComponent box">
         <div>
            <input type="button" id="h269456772_scbox_button" class="control"
                   onclick="switchState('h269456772_scbox'); return false;"
                   style="display: none"/> 
            <span class="caption">Schema Component Representation</span>
         </div>
         <div id="h269456772_scbox" class="contents">
            <div style="margin-left: 0em">&lt;<span class="scTag">xs:attributeGroup</span> 
               <span class="scTag">name</span>="<span class="scContent">Formatting.Attributes</span>"&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:attribute</span> 
                  <span class="scTag">name</span>="<span class="scContent">font-family</span>"/&gt;</div>
               <div style="margin-left: 1.5em">&lt;<span class="scTag">xs:attribute</span> 
                  <span class="scTag">name</span>="<span class="scContent">font-style</span>"&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:simpleType</span>&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:restriction</span> 
                        <span class="scTag">base</span>="<span class="scContent">
                           <span class="type">
                              <a href="citationstyle.xsd.html#ns_xs" title="Find out namespace of 'xs' prefix">xs</a>:token</span>
                        </span>"&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:enumeration</span> 
                           <span class="scTag">value</span>="<span class="scContent">italic</span>"/&gt;</div>
                        <div style="margin-left: 1.5em">&lt;<span class="scTag">xs:enumeration</span> 
                           <span class="scTag">value</span>="<span class="scContent">small caps</span>"/&gt;</div>
                        <div style="margin-left: 1.5em">&lt;<span class="scTag">xs:enumeration</span> 
                           <span class="scTag">value</span>="<span class="scContent">normal</span>"/&gt;</div>&lt;/<span class="scTag">xs:restriction</span>&gt;</div>&lt;/<span class="scTag">xs:simpleType</span>&gt;</div>&lt;/<span class="scTag">xs:attribute</span>&gt;</div>
               <div style="margin-left: 1.5em">&lt;<span class="scTag">xs:attribute</span> 
                  <span class="scTag">name</span>="<span class="scContent">font-weight</span>"&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:simpleType</span>&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:restriction</span> 
                        <span class="scTag">base</span>="<span class="scContent">
                           <span class="type">
                              <a href="citationstyle.xsd.html#ns_xs" title="Find out namespace of 'xs' prefix">xs</a>:token</span>
                        </span>"&gt;<div style="margin-left: 1.5em">&lt;<span class="scTag">xs:enumeration</span> 
                           <span class="scTag">value</span>="<span class="scContent">normal</span>"/&gt;</div>
                        <div style="margin-left: 1.5em">&lt;<span class="scTag">xs:enumeration</span> 
                           <span class="scTag">value</span>="<span class="scContent">bold</span>"/&gt;</div>
                        <div style="margin-left: 1.5em">&lt;<span class="scTag">xs:enumeration</span> 
                           <span class="scTag">value</span>="<span class="scContent">light</span>"/&gt;</div>&lt;/<span class="scTag">xs:restriction</span>&gt;</div>&lt;/<span class="scTag">xs:simpleType</span>&gt;</div>&lt;/<span class="scTag">xs:attribute</span>&gt;</div>&lt;/<span class="scTag">xs:attributeGroup</span>&gt;</div>
         </div>
         <script type="text/javascript">
<!--
          setState('h269456772_scbox', false);
// -->
</script>
      </div>
      <hr/>
      <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>