Sharing Content Models

<?xml version="1.0"?>
<grammar xmlns="http://relaxng.org/ns/structure/1.0">

  <start>
  
    <element name="SONG">
      <element name="TITLE">
        <text/>
      </element>
      
      <oneOrMore>
        <element name="COMPOSER">
          <ref name="personContent"/>
        </element>
      </oneOrMore>
      
      <zeroOrMore>
        <element name="PRODUCER">
          <ref name="personContent"/>
        </element>
      </zeroOrMore>
      
      <optional>
        <element name="PUBLISHER">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="LENGTH">
          <text/>
        </element>
      </optional>
      <optional>
        <element name="YEAR">
          <text/>
        </element>
      </optional>
      <oneOrMore>
        <element name="ARTIST">
          <text/>
        </element>
      </oneOrMore>
    </element>
    
  </start>

  <define name="personContent">
    <element name="NAME">
      <element name="GIVEN">
        <text/>
      </element>
      <element name="FAMILY">
        <text/>
      </element>
    </element>
  </define>

</grammar>

start =
  element SONG {
    element TITLE     { text },
    element COMPOSER  { personContent }+,
    element PRODUCER  { personContent }*,
    element PUBLISHER { text }?,
    element LENGTH    { text }?,
    element YEAR      { text }?,
    element ARTIST    { text }+
  }
personContent =
  element NAME {
    element GIVEN  { text },
    element FAMILY { text }
  }

Previous | Next | Top | Cafe con Leche

Copyright 2005-2007 Elliotte Rusty Harold
elharo@metalab.unc.edu
Last Modified October 25, 2004