<!--?xml version="1.0" encoding="UTF-8"?-->

<!-- A Document Type Definition for genealogy data (as produced by Gramps)

Copyright (c) 2001 Graham J. Williams

Time-stamp: <2002/01/22 15:41:37 Graham.Williams@csiro.au>

Freely Redistributable under the terms of the GNU General Public License.

Based on GEDCOM and conforming to the Gramps XML encoding.
Still under development and Gramps XML not complete.

Information on Gramps is available from http://

-->

<!--

DATABASE

	Defines an XML document which is a <database> consisting of a

	header	   Information about the "owner" of the database
	people
	families
	sources
	places
	objects
	bookmarks

-->

<!ELEMENT database (header, people?, families?, sources?, places?, objects?, 
                    bookmarks?)>

<!--	************************************************************

HEADER

	A <header> consists of <created> (information about this
	genealogical database) and <researcher> (information about the
	person who created this genealogical database)

-->

<!ELEMENT header (created, researcher?)>

<!ELEMENT created EMPTY>
<!ATTLIST created
  date     CDATA #REQUIRED
  version  CDATA #REQUIRED
  people   CDATA #REQUIRED
  families CDATA #REQUIRED>

<!ELEMENT researcher (resname, resaddr?, rescity?, resstate?,
                      rescountry?, respostal?, resphone?, resemail?)>
<!ELEMENT resname    (#PCDATA)>
<!ELEMENT resaddr    (#PCDATA)>
<!ELEMENT rescity    (#PCDATA)>
<!ELEMENT resstate   (#PCDATA)>
<!ELEMENT rescountry (#PCDATA)>
<!ELEMENT respostal  (#PCDATA)>
<!ELEMENT resphone   (#PCDATA)>
<!ELEMENT resemail   (#PCDATA)>

<!--	************************************************************

PEOPLE

	The UID is a place holder for PAF UID's that are imported. PAF
	generates a unique ID for each person which is useful for
	merges. It is not used by Gramps otherwise.

-->

<!ELEMENT people (person)*>
<!ATTLIST people default CDATA #IMPLIED>

<!--

PERSON

	gender	Either M or F.
	name	
	aka	Also known as. Alternative names from marriage,
		adoption, legal name change, etc

	nick	The nick name - a name the person is sometimes known by.

-->

<!ELEMENT person (gender, name?, aka*, nick?, pos?, uid?, event*,
                  objref*, url*, childof*, address*, parentin*,
                  sourceref?, attribute*, note?)>
<!ATTLIST person id ID #REQUIRED>

<!--

GENDER has values of M or F.

-->

<!ELEMENT gender  (#PCDATA)>

<!-- 

NAME and AKA

	first	Given names
	last	Surname
	suffix
	title	E.g., Sargent Major

-->

<!ELEMENT name    (first?, last?,suffix?,title?)>
<!ATTLIST name    conf CDATA #IMPLIED
                  priv CDATA #IMPLIED>

<!ELEMENT aka     (first?, last?,suffix?,note?)>
<!ATTLIST aka     conf CDATA #IMPLIED
                  priv CDATA #IMPLIED>

<!ELEMENT first   (#PCDATA)>
<!ELEMENT last    (#PCDATA)>
<!ELEMENT suffix  (#PCDATA)>
<!ELEMENT title   (#PCDATA)>

<!ELEMENT nick    (#PCDATA)>
<!ELEMENT uid     (#PCDATA)>

<!ELEMENT pos EMPTY>
<!ATTLIST pos x CDATA #REQUIRED
              y CDATA #REQUIRED>

<!ELEMENT childof EMPTY>
<!ATTLIST childof
  ref   IDREF  #REQUIRED
  mrel  (Birth|Adopted|Stepchild|Other|Unknown) #IMPLIED
  frel  (Birth|Adopted|Stepchild|Other|Unknown) #IMPLIED>

<!ELEMENT parentin EMPTY>
<!ATTLIST parentin
  ref    IDREF #REQUIRED>

<!ELEMENT address (dateval?,street?,city?,state?,country?,postal?,
                   note?,sourceref?)>
<!ATTLIST address conf CDATA #IMPLIED
                  priv CDATA #IMPLIED>

<!ELEMENT street  (#PCDATA)>
<!ELEMENT city    (#PCDATA)>
<!ELEMENT country (#PCDATA)>
<!ELEMENT postal  (#PCDATA)>
<!ELEMENT state   (#PCDATA)>

<!--	************************************************************

FAMILY

	An element to record information about a family.

-->

<!ELEMENT families (family)*>

<!ELEMENT family (father?,mother?,event*,objref*,child*,attribute*,note?)>
<!ATTLIST family
  id        ID    #REQUIRED
  type      (Married|Unmarried|Partners|Other|Unkown) #IMPLIED>

<!ELEMENT father EMPTY>
<!ATTLIST father ref IDREF #REQUIRED>

<!ELEMENT mother EMPTY>
<!ATTLIST mother ref IDREF #REQUIRED>

<!ELEMENT child EMPTY>
<!ATTLIST child ref IDREF #REQUIRED>

<!--	************************************************************

SOURCES

-->

<!ELEMENT sources (source)*>
<!ELEMENT source (sauthor?,spubinfo?,scallno?)>
<!ATTLIST source id ID #REQUIRED>
<!ELEMENT sauthor  (#PCDATA)>
<!ELEMENT spubinfo (#PCDATA)>
<!ELEMENT scallno  (#PCDATA)>

<!--	************************************************************

PLACES

-->

<!ELEMENT places (placeobj)*>

<!ELEMENT placeobj (coord?,location*,objref*,url*,note?)>
<!ATTLIST placeobj id ID #REQUIRED title CDATA #IMPLIED>

<!ELEMENT coord EMPTY>
<!ATTLIST coord long CDATA #REQUIRED lat CDATA #REQUIRED>

<!ELEMENT location EMPTY>
<!ATTLIST location
    city        CDATA #IMPLIED
    county      CDATA #IMPLIED
    state       CDATA #IMPLIED
    country     CDATA #IMPLIED
    parish      CDATA #IMPLIED
>


<!ELEMENT objects (object)*>

<!ELEMENT object (attribute)*>
<!ATTLIST object
    id 		ID 	#REQUIRED
    src		CDATA	#IMPLIED
    mime	CDATA	#IMPLIED
    description	CDATA	#IMPLIED>



<!--	************************************************************

BOOKMARKS

-->

<!ELEMENT bookmarks (bookmark)*>
<!ELEMENT bookmark EMPTY>
<!ATTLIST bookmark ref IDREF #REQUIRED>

<!--	************************************************************

SHARED ELEMENTS

-->

<!ELEMENT attribute  (note?,sourceref?)>
<!ATTLIST attribute  conf 	CDATA 	#IMPLIED
                     priv 	CDATA 	#IMPLIED
                     type	CDATA	#IMPLIED
                     value	CDATA	#IMPLIED
>

<!--ELEMENT attr_type  (#PCDATA)>
<!ELEMENT attr_value (#PCDATA)-->


<!--

EVENT

  We can enumerate all possibilities for an event and then this will
  not conform to Gramps as Gramps allows any type of events (i.e., a
  user can define their own type of event) . By allowing anything
  (CDATA) we no longer have automatic checking and in emacs no more
  automatic selection of event types.

  So decide to use the enumerated list for now unless there is a storm
  of protest.

	Alternative Birth	Another possible birth date
	Degree			Awarding of a degree
	Education		Some step in the education process
	Graduation		Graduation (often same as degree)

-->

<!ELEMENT event (dateval?,place?,description?,sourceref?,note?)>
<!ATTLIST event type
   (Annulment|Birth|Death|Christening|Baptism|Engagement|Marriage|
   Occupation|Education|Degree|Immi|Burial|Cremation)
   #REQUIRED>

<!ELEMENT dateval EMPTY>
<!ATTLIST dateval
    val  CDATA #REQUIRED
    type CDATA #IMPLIED>

<!--ELEMENT date        (#PCDATA) replaced by dateval-->
<!ELEMENT description (#PCDATA)>

<!ELEMENT note (#PCDATA)>

<!ELEMENT url EMPTY>
<!ATTLIST url href CDATA #REQUIRED
              conf CDATA #IMPLIED
              priv (0|1) #IMPLIED
              description CDATA #IMPLIED>

<!ELEMENT place EMPTY>
<!ATTLIST place ref IDREF #REQUIRED>

<!ELEMENT sourceref (spage?,scomments?,stext?,sdate?)>
<!ATTLIST sourceref ref IDREF #REQUIRED>

<!ELEMENT spage     (#PCDATA)>
<!ELEMENT scomments (#PCDATA)>
<!ELEMENT sdate     (#PCDATA)>
<!ELEMENT stext     (#PCDATA)>

<!ELEMENT objref (attribute)*>
<!ATTLIST objref
    ref		IDREF	#REQUIRED
>

<!ELEMENT img EMPTY>
<!ATTLIST img
  src     CDATA #REQUIRED
  description CDATA #IMPLIED
  display CDATA #IMPLIED>

