<?xml version="1.0" encoding="iso-8859-1"?>
<?dsd URI="http://www.brics.dk/DSD/dsd.dsd"?>

<!--this document is available at http://www.brics.dk/DSD/examples/article.dsd-->

<DSD IDRef="article" DSDVersion="1.0">
    
  <Title> A DSD description of the ArticleML syntax </Title>
  <Version> 0.3 </Version>
  <Author> Anders Møller </Author>
 
  <Doc>
    This example DSD is used in the XML tutorial; see http://www.brics.dk/~amoeller/XML
    Note: the DSD is incomplete (and would benefit from some more Doc description elements)
    Exercise to the reader: fill out the incomplete parts such that the DSD captures all
    reasonable syntax requirements of ArticleML :-)
    This example covers much of the DSD language, however it does not
    illustrate redefinitions or default definitions.
  </Doc>

  <?include URI="http://www.brics.dk/DSD/library/standard_datatypes.dsd"?>
  <?include URI="http://www.brics.dk/DSD/library/standard_constraints.dsd"?>

  <ElementDef ID="article">
    <AttributeDecl Name="postscript"><StringType IDRef="URI"/></AttributeDecl>
    <AttributeDecl Name="pdf"><StringType IDRef="URI"/></AttributeDecl>
    <Sequence>
      <Element IDRef="article-title"/>
      <OneOrMore><Element IDRef="authors"/></OneOrMore>
      <Optional><Element IDRef="abstract"/></Optional>
      <OneOrMore><Element IDRef="section"/></OneOrMore>
      <Optional><Element IDRef="references"/></Optional>
      <Optional><Element IDRef="vitae"/></Optional>
    </Sequence>
  </ElementDef>

  <ElementDef ID="article-title" Name="title">
    <StringType/>
  </ElementDef>

  <ElementDef ID="authors">
    <Sequence>
      <Element Name="names"><Content IDRef="simpletext"/></Element>
      <Optional><Element Name="affiliation"><Content IDRef="simpletext"/></Element></Optional>
      <Optional><Element IDRef="link"/></Optional>
    </Sequence>
  </ElementDef>

  <ElementDef ID="abstract">
    <OneOrMore>
      <Element IDRef="paragraph"/>
    </OneOrMore>
  </ElementDef>

  <ElementDef ID="section">
    <AttributeDecl Name="id" IDType="ID" Optional="yes"/>
    <Element IDRef="section-title"/> <!--title element may be anywhere-->
    <Sequence>
      <ZeroOrMore><Element IDRef="paragraph"/></ZeroOrMore>
      <ZeroOrMore><Element IDRef="subsection"/></ZeroOrMore>
    </Sequence>
  </ElementDef>

  <ElementDef ID="section-title" Name="title"> <!--less restrictive than article-title-->
    <Content IDRef="simpletext"/>
  </ElementDef>

  <ElementDef ID="subsection">
    <AttributeDecl Name="id" IDType="ID" Optional="yes"/>
    <Element IDRef="section-title"/>
    <ZeroOrMore><Element IDRef="paragraph"/></ZeroOrMore>
  </ElementDef>

  <ElementDef ID="references">
    <ZeroOrMore>
      <Element IDRef="reference-item"/>
    </ZeroOrMore>
  </ElementDef>

  <ElementDef ID="reference-item" Name="item">
    <AttributeDecl Name="id" IDType="ID"/>
    <Element Name="authors"><Content IDRef="simpletext"/></Element>
    <Element Name="title"><Content IDRef="simpletext"/></Element>
    <Optional><Element Name="publisher"><Content IDRef="simpletext"/></Element></Optional>
    <Optional><Element Name="note"><Content IDRef="paragraph-content"/></Element></Optional>
    <Optional><Element Name="month"><StringType/></Element></Optional>
    <Optional><Element Name="year"><StringType/></Element></Optional>
  </ElementDef>

  <ElementDef ID="vitae">
    <Constraint IDRef="anything"/> <!-- INCOMPLETE -->
  </ElementDef>

  <ElementDef ID="link">
    <AttributeDecl Name="href" Optional="yes"><StringType IDRef="URI"/></AttributeDecl>
    <Content IDRef="simpletext"/>
  </ElementDef>

  <ContentDef ID="simpletext">
    <ZeroOrMore>
      <Content IDRef="simpletext-part"/>
    </ZeroOrMore>
  </ContentDef>

  <ContentDef ID="simpletext-part">
      <Union>
        <StringType/>
        <Element IDRef="amp"/>
        <Element IDRef="nbsp"/>
        <!-- INCOMPLETE -->
      </Union>
  </ContentDef>

  <ContentDef ID="paragraph-content">
    <ZeroOrMore>
      <Union>
        <Content IDRef="simpletext-part"/>
        <Element IDRef="cite"/>
        <Element IDRef="ref"/>
        <Element IDRef="link"/>
	<Element IDRef="tt"/>
	<Element IDRef="it"/>
	<Element IDRef="bf"/>
        <Element IDRef="br"/>
        <Element IDRef="itemize"/>
        <Element IDRef="oneline"/>
        <Element IDRef="example"/>
        <!-- INCOMPLETE -->
      </Union>
    </ZeroOrMore>
  </ContentDef>

  <ElementDef ID="paragraph" Name="p">
    <Content IDRef="paragraph-content"/>
  </ElementDef>

  <ElementDef ID="amp"/>

  <ElementDef ID="nbsp"/>

  <ElementDef ID="percent"/>

  <ElementDef ID="br"/>

  <ElementDef ID="tt">
    <Content IDRef="paragraph-content"/>
  </ElementDef>

  <ElementDef ID="it">
    <Content IDRef="paragraph-content"/>
  </ElementDef>

  <ElementDef ID="bf"> 
    <Content IDRef="paragraph-content"/>
  </ElementDef>

  <ElementDef ID="itemize">
    <Constraint IDRef="anything"/> <!-- INCOMPLETE -->
  </ElementDef>

  <ElementDef ID="oneline">
    <Constraint IDRef="anything"/> <!-- INCOMPLETE -->
  </ElementDef>

  <ElementDef ID="example">
    <Constraint IDRef="anything"/> <!-- INCOMPLETE -->
  </ElementDef>

  <ElementDef ID="cite">
    <AttributeDecl Name="article" IDType="IDRef">
      <PointsTo><Context><Element IDRef="reference-item"/></Context></PointsTo>
    </AttributeDecl>
  </ElementDef>

  <ElementDef ID="ref">
    <AttributeDecl Name="section" IDType="IDRef" Optional="yes">
      <!-- INCOMPLETE, use PointsTo -->
    </AttributeDecl>
    <AttributeDecl Name="subsection" IDType="IDRef" Optional="yes">
      <!-- INCOMPLETE, use PointsTo -->
    </AttributeDecl>
    <OneOf><Attribute Name="section"/><Attribute Name="subsection"/></OneOf>
  </ElementDef>

</DSD>

