DDML (xmlFormat, appeared 1999)
Stands for: Document Definition Markup Language
Origin: http://www.xml.org/xml-dev/
Country: Various


Document Definition Markup Language (DDML) is an XML schema language proposed in 1999 by various contributors from the xml-dev electronic mailing list. It was published only as a W3C Note, not a Recommendation, and never found favor with developers. DDML began as XSchema, a reformulation of XML DTDs as full XML documents, so that elements and attributes, rather than declarations, could be used to describe a schema. As development continued, the name was changed to DDML, reflecting a shift away from the goal of replicating all DTD functionality, in order to concentrate on providing a robust framework for describing basic element/attribute hierarchy. DDML offered no datatypes or functionality beyond what DTDs already provided, so there was not much advantage to using DDML instead of DTDs. DDML did, however, inform the development of the next generation of XML-based schema languages, including the more successful XML Schema and RELAX NG.


<?xml version="1.0"?>

<!DOCTYPE "DocumentDef">

<DocumentDef FileExtension="ddm" prefix="">

  <ElementDecl Name="DocumentDef" Root="Recommended">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
        <Choice Frequency="ZeroOrMore">
          <Ref Element="ElementDecl"/>
          <Ref Element="Model"/>
          <Ref Element="AttDef"/>
          <Ref Element="AttGroup"/>
          <Ref Element="Notation"/>
          <Ref Element="UnparsedEntity"/>
          <Ref Element="Enumeration"/>
          <Ref Element="DocumentDef"/>
        </Choice>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="xmlns" Required="Yes" AttValue="http://www.purl.org/NET/ddml/v1"/>
      <AttDef Name="DDML" prefix="xmlns" Required="Yes" AttValue="http://www.purl.org/NET/ddml/v1"/>
      <AttDef Name="ns"/>
      <AttDef Name="ElementNS"/>
      <AttDef Name="prefix" Type="Nmtoken"/>
      <AttDef Name="Version" Required="Yes" AttValue="1.0"/>
      <AttDef Name="MimeType" AttValue="application/xml"/>
      <AttDef Name="FileExtension" AttValue="xml"/>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="ElementDecl">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
        <Ref Element="Model"/>
        <Ref Element="AttGroup" Frequency="Optional"/>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="Name" Type="Nmtoken" Required="Yes"/>
      <AttDef Name="ns"/>
      <AttDef Name="prefix" Type="Nmtoken"/>
      <AttDef Name="id" Type="ID"/>
      <AttDef Name="Root" Type="Enumerated" AttValue="Possible">
        <Enumeration>
          <EnumerationValue Value="Recommended"/>
          <EnumerationValue Value="Possible"/>
          <EnumerationValue Value="Unlikely"/>
        </Enumeration>
      </AttDef>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Model">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
        <Choice>
          <Ref Element="Ref"/>
          <Ref Element="Choice"/>
          <Ref Element="Seq"/>
          <Ref Element="Empty"/>
          <Ref Element="Any"/>
          <Ref Element="PCData"/>
          <Ref Element="Mixed"/>
        </Choice>
      </Seq>    
    </Model>
    <AttGroup>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Empty">
    <Model>
      <Empty/>
    </Model>
    <AttGroup>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Any">
    <Model>
      <Empty/>
    </Model>
    <AttGroup>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="PCData">
    <Model>
      <Empty/>
    </Model>
    <AttGroup>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Ref">
    <Model>
      <Empty/>
    </Model>
    <AttGroup>
      <AttDef Name="Element" Type="Nmtoken" Required="Yes"/>
      <AttDef Name="ElementNS"/>
      <AttDef Name="id" Type="ID"/>
      <AttDef Name="Frequency" Type="Enumerated" AttValue="Required">
        <Enumeration>
          <EnumerationValue Value="Required"/>
          <EnumerationValue Value="Optional"/>
          <EnumerationValue Value="ZeroOrMore"/>
          <EnumerationValue Value="OneOrMore"/>
        </Enumeration>
      </AttDef>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Mixed">
    <Model>
      <Ref Element="Ref" Frequency="OneOrMore"/>
    </Model>
    <AttGroup>
      <AttDef Name="ElementNS"/>
      <AttDef Name="id" Type="ID"/>
      <AttDef Name="Frequency" Type="Enumerated" Required="Yes" AttValue="ZeroOrMore">
        <Enumeration>
          <EnumerationValue Value="ZeroOrMore"/>
        </Enumeration>
      </AttDef>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Choice">
    <Model>
      <Seq>
        <Choice>
          <Ref Element="Seq"/>
          <Ref Element="Ref"/>
          <Ref Element="Model"/>
        </Choice>
        <Choice Frequency="OneOrMore">
          <Ref Element="Seq"/>
          <Ref Element="Ref"/>
          <Ref Element="Model"/>
        </Choice>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="ElementNS"/>
      <AttDef Name="id" Type="ID"/>
      <AttDef Name="Frequency" Type="Enumerated" AttValue="Required">
        <Enumeration>
          <EnumerationValue Value="Required"/>
          <EnumerationValue Value="Optional"/>
          <EnumerationValue Value="ZeroOrMore"/>
          <EnumerationValue Value="OneOrMore"/>
        </Enumeration>
      </AttDef>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Seq">
    <Model>
      <Seq>
        <Choice>
          <Ref Element="Choice"/>
          <Ref Element="Ref"/>
          <Ref Element="Model"/>
        </Choice>
        <Choice Frequency="OneOrMore">
          <Ref Element="Choice"/>
          <Ref Element="Ref"/>
          <Ref Element="Model"/>
        </Choice>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="ElementNS"/>
      <AttDef Name="id" Type="ID"/>
      <AttDef Name="Frequency" Type="Enumerated" AttValue="Required">
        <Enumeration>
          <EnumerationValue Value="Required"/>
          <EnumerationValue Value="Optional"/>
          <EnumerationValue Value="ZeroOrMore"/>
          <EnumerationValue Value="OneOrMore"/>
        </Enumeration>
      </AttDef>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="AttGroup">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
        <Choice Frequency="ZeroOrMore">
           <Ref Element="AttDef"/>
           <Ref Element="AttGroup"/>
        </Choice>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="ns"/>
      <AttDef Name="prefix" Type="Nmtoken"/>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="AttDef">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
        <Ref Element="Enumeration" Frequency="Optional"/>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="Name" Type="Nmtoken" Required="Yes"/>
      <AttDef Name="ns"/>
      <AttDef Name="prefix" Type="Nmtoken"/>
      <AttDef Name="Type" Type="Enumerated" AttValue="CData">
        <Enumeration>
          <EnumerationValue Value="CData"/>
          <EnumerationValue Value="ID"/>
          <EnumerationValue Value="IDRef"/>
          <EnumerationValue Value="IDRefs"/>
          <EnumerationValue Value="Entity"/>
          <EnumerationValue Value="Entities"/>
          <EnumerationValue Value="Nmtoken"/>
          <EnumerationValue Value="Nmtokens"/>
          <EnumerationValue Value="Notation"/>
          <EnumerationValue Value="Enumerated"/>
        </Enumeration>
      </AttDef>
      <AttDef Name="Required" Type="Enumeration" AttValue="No">
        <Enumeration>
          <EnumerationValue Value="Yes"/>
          <EnumerationValue Value="No"/>
        </Enumeration>
      </AttDef>
      <AttDef Name="AttValue"/>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Enumeration">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequen cy="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
        <Ref Element="EnumerationValue" Frequency="OneOrMore"/>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="EnumerationValue">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="Value" Required="Yes"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Notation">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="Name" Type="Nmtoken" Required="Yes"/>
      <AttDef Name="PubidLiteral"/>
      <AttDef Name="SystemLiteral"/>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="UnparsedEntity">
    <Model>
      <Seq>
        <Ref Element="Doc" Frequency="Optional"/>
        <Ref Element="More" Frequency="Optional"/>
      </Seq>
    </Model>
    <AttGroup>
      <AttDef Name="Name" Type="Nmtoken" Required="Yes"/>
      <AttDef Name="SystemLiteral" Required="Yes"/>
      <AttDef Name="PubidLiteral"/>
      <AttDef Name="Notation" Type="Nmtoken" Required="Yes"/>
      <AttDef Name="id" Type="ID"/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="Doc" prefix="DDML">
    <Model>
       <!-- The struct model from IBTWSH goes here.
            Defining IBTWSH in DDML is left as an
            exercise to the reader.            ;       -->
    </Model>
    <AttGroup>
      <AttDef Name="xmlns" Required="Yes" AttValue=""/>
    </AttGroup>
  </ElementDecl>

  <ElementDecl Name="More" prefix="DDML">
    <Model>
      <Any/>
    </Model>
    <AttGroup>
      <AttDef Name="xmlns" AttValue=""/>
    </AttGroup>
  </ElementDecl>

</DocumentDef>