<!ELEMENT packages ( pkgmetadata* )>

<!-- Metadata for a category -->
<!ELEMENT catmetadata ( (longdescription)* )>
<!ATTLIST catmetadata pkgname CDATA "">

<!-- Metadata for a package -->
<!ELEMENT pkgmetadata ( (herd|maintainer|natural-name|longdescription|use|upstream)* )>
<!ATTLIST pkgmetadata pkgname CDATA "">

  <!-- One tag for each herd this package is assigned to. -->
  <!ELEMENT herd (#PCDATA)>

  <!-- One tag for each maintainer of a package, multiple allowed-->
  <!ELEMENT maintainer ( email, (description| name)* )>

  <!-- Natural name for package, example: LibreOffice (for app-office/libreoffice) -->
  <!ELEMENT natural-name (#PCDATA) >

  <!-- A long description of the package in freetext-->
  <!ELEMENT longdescription (#PCDATA|pkg|cat)* >

  <!-- The changelog of the package-->
  <!-- Please note that #PCDATA is mentioned only for the upstream changelog
    element, where the content is a URL. This is due to limitations of the DTD -->
  <!ELEMENT changelog (#PCDATA|change)* >
    <!-- The changelog contains various "changes"-->
    <!ELEMENT change (date,(developer|version|description|file|contributor|bug)*) >
      <!ELEMENT date (#PCDATA) >
        <!-- The date of the change, in "YYYY-MM-DD" format -->
      <!ELEMENT developer (name?,email) >
        <!-- The developer that made the change. The email is required, name
	   is optional-->
      <!ELEMENT version (#PCDATA) >
        <!--version of the packages involved (one tag per version)-->
      <!ELEMENT file (#PCDATA) ><!-- one tag per file touched -->
      <!ELEMENT contributor (name?,email?) >
        <!-- A reference to a user that helped in causing this change. 
          There should at least be a name or email address included. 
          Email is preferred -->
      <!ELEMENT bug (#PCDATA) >
        <!-- bug-id of a bug fixed by this change, multiple allowed. The 
          format of this is a number or alias for a bug. NOT including a 
          # character -->

  <!-- description of what this USE flag does for this package -->
  <!ELEMENT use (flag)* >
    <!ELEMENT flag (#PCDATA|pkg|cat)* >
      <!-- name attribute holds the name of the USE flag -->
      <!ATTLIST flag name CDATA #REQUIRED >

  <!-- upstream metadata information (maintainers, upstream docs,..) -->
  <!ELEMENT upstream (maintainer|changelog|doc|bugs-to|remote-id)* >
    <!-- Due to the limitation of DTD this will also allow a status
      attribute for the package maintainer element. Please note that
      the usage of the status attribute is nevertheless _only_ allowed
      in the upstream maintainer element. -->
    <!ATTLIST maintainer status (active|inactive|unknown) "unknown" >
    <!-- URL where the location of the upstream documentation can be found -->
    <!ELEMENT doc (#PCDATA)>
      <!ATTLIST doc lang CDATA "C" >
    <!-- location where to report bugs
      (may also be an email address prefixed with mailto:) -->
    <!ELEMENT bugs-to (#PCDATA)>
    <!-- specify a type of package identification tracker -->
    <!ELEMENT remote-id (#PCDATA)>
      <!ATTLIST remote-id type (bitbucket|cpan|cpan-module|cran|ctan|freshmeat|github|gitorious|google-code|launchpad|pear|pecl|pypi|rubyforge|rubygems|sourceforge|sourceforge-jp|vim) #REQUIRED>

  <!-- category/package information for cross-linking in descriptions
    and useflag descriptions -->
  <!ELEMENT pkg (#PCDATA) >
  <!ELEMENT cat (#PCDATA) >
          
<!-- Common attributes -->

<!-- the lang attribute, specifies the language of this tag. This is 
  only useful for descriptions of various kinds. If a tag with this 
  attribute is included there must be a description in the default 
  language "C" or "en", which is equivalent -->
  <!ATTLIST description lang CDATA "C" >
  <!ATTLIST longdescription lang CDATA "C" >
  <!ATTLIST use lang CDATA "C" >

<!-- The restrict attribute, this attribute specifies restrictions on 
  the applicability of tags on versions. The format of this attribute is 
  equal to the format of DEPEND lines in ebuilds. There is one special 
  value though: restrict="*". A tag that specifies this only applies if 
  there are no other tags that apply.
  
  For required tags, there must be either an unrestricted version, or a 
  version that is default restricted. -->
  <!ATTLIST herd restrict CDATA #IMPLIED >
  <!ATTLIST maintainer restrict CDATA #IMPLIED >
  <!ATTLIST longdescription restrict CDATA #IMPLIED >
  <!ATTLIST flag restrict CDATA #IMPLIED >



<!-- standard parts -->
<!ELEMENT email (#PCDATA) ><!-- an email address -->
<!ELEMENT name (#PCDATA) ><!-- the name of a person (maintainer, contributor)-->
<!ELEMENT description (#PCDATA) ><!-- A description of a maintainer or change-->
