<?xml version="1.0"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">

<xsd:annotation>
<xsd:documentation xml:lang="fi">
Sukuohjelmisto 2004:n xml-muotoisia raportteja kuvaava XMLSchema
Copyright © 2004 Kaarle Kaila. Käyttö sallittu.
</xsd:documentation>

<xsd:documentation xml:lang="se">
XMLSchema som beskriver Släktprogrammet 2004 rapporternas xml-format
Copyright © 2004 Kaarle Kaila. Användning tillåtet.
</xsd:documentation>

<xsd:documentation xml:lang="en">
XMLSchema that describes the format of the XML reports of KK-Genealog
Copyright © 2004 Kaarle Kaila. Use allowed.
</xsd:documentation>

</xsd:annotation>

<xsd:element name="raport" type="raportType"/>

<xsd:complexType name="raportType">
  <xsd:sequence>
  <xsd:choice>
      <xsd:sequence minOccurs="0" maxOccurs="unbounded">
       <xsd:element name="section" type="sectionType"/>
       <xsd:element name="tables" type="tablesType"/>
      </xsd:sequence>
      <xsd:element name="tables" type="tablesType"/>
   </xsd:choice>    
    <xsd:element name="sources" minOccurs="0" type="sourcesType"/>
  </xsd:sequence>
  <xsd:attribute name="type" type="rapoTypeType" use="required"/> 
 </xsd:complexType>


<xsd:simpleType name="rapoTypeType">
 <xsd:restriction base="xsd:string">
  <xsd:pattern value="[ADELM]"/>
 </xsd:restriction>
</xsd:simpleType>

<xsd:complexType name="tablesType">
  <xsd:sequence>
   <xsd:element name="table"   type="tableType" minOccurs="0" maxOccurs="unbounded"/>
  </xsd:sequence>
 </xsd:complexType>


<xsd:complexType name="sourcesType"> 
 <xsd:sequence>
  <xsd:element name="source" type="sourceType" minOccurs="0" maxOccurs="unbounded"/>
 </xsd:sequence>
</xsd:complexType>


<xsd:complexType name="sourceType">
 <xsd:simpleContent>
  <xsd:extension base="xsd:string">
   <xsd:attribute name="id" type="xsd:positiveInteger" use="required"/>
  </xsd:extension>
 </xsd:simpleContent>
</xsd:complexType>



<xsd:complexType name="tableType">
 <xsd:sequence>
   <xsd:element name="section" type="sectionType" minOccurs="0" maxOccurs="unbounded"/>
 </xsd:sequence>
 <xsd:attribute name="number" use="required"/>
</xsd:complexType>

<xsd:complexType name="sectionType"> 
 <xsd:choice>
  <xsd:element name="person"   type="personType"   minOccurs="0" maxOccurs="unbounded"/>
  <xsd:element name="relation" type="relationType" minOccurs="0" maxOccurs="unbounded"/>
 </xsd:choice>
 
 <xsd:attribute name="type" type="sectionNameType" use="required"/>

 <xsd:attribute name="gen"  type="xsd:nonNegativeInteger" use="optional"/>
 <xsd:attribute name="text" type="xsd:string" use="optional"/>
</xsd:complexType>


<xsd:simpleType name="sectionNameType">
 <xsd:restriction base="xsd:NMTOKEN" >
  <xsd:enumeration value="MAIN"/>
  <xsd:enumeration value="CHIL"/>
  <xsd:enumeration value="PARE"/>
  <xsd:enumeration value="ORGA"/>
  <xsd:enumeration value="INDI"/>
  <xsd:enumeration value="SPOU"/>
 </xsd:restriction>
</xsd:simpleType>




<xsd:complexType name="personType">
 <xsd:sequence>
  <xsd:element name="name"     type="nameType"     minOccurs="0"  />
  <xsd:element name="notices"  type="noticesType"  minOccurs="0" />
  <xsd:element name="relation" type="relationType" minOccurs="0"  maxOccurs="unbounded"/>
 </xsd:sequence> 
 <xsd:attribute name="sex" type="sexType" use="required"/>
 <xsd:attribute name="table"  type="xsd:positiveInteger" use="optional"/>
 <xsd:attribute name="tables"  type="xsd:string" use="optional"/>
 <xsd:attribute name="source" type="xsd:positiveInteger" use="optional"/>
 <xsd:attribute name="unitid" type="unitIdType" use="optional"/>
 <xsd:attribute name="code" use="optional">  
  <xsd:simpleType>
   <xsd:restriction base="xsd:string">
    <xsd:enumeration value="1"/>
    <xsd:enumeration value="2"/>
    <xsd:enumeration value="3"/>
    <xsd:enumeration value="4"/>
   </xsd:restriction>
   </xsd:simpleType>
 </xsd:attribute>
</xsd:complexType>

<xsd:simpleType name="sexType">
 <xsd:restriction base="xsd:string">
  <xsd:pattern value="[ABCDEMFU]"/>
 </xsd:restriction>
</xsd:simpleType>

<xsd:simpleType name="unitIdType">
 <xsd:restriction base="xsd:string">
  <xsd:pattern value="[I]\d+"/>
 </xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="nameType">
 <xsd:sequence>
  <xsd:element name="givenname" minOccurs="0" type="givenNameType"/>
  <xsd:element name="prefix"  minOccurs="0" type="xsd:string"/>
  <xsd:element name="surname" minOccurs="0" type="xsd:string"/>
  <xsd:element name="postfix" minOccurs="0" type="xsd:string"/>
 </xsd:sequence> 
</xsd:complexType>

<xsd:complexType name="givenNameType" mixed="true">
  <xsd:sequence>
   <xsd:element name="ul" type="xsd:string" minOccurs="0" maxOccurs="2"/>
  </xsd:sequence>
</xsd:complexType>


<xsd:complexType name="noticesType">
 <xsd:sequence>
  <xsd:element name="notice" type="noticeType" minOccurs="0" maxOccurs="unbounded" />
 </xsd:sequence>
</xsd:complexType>


<xsd:complexType name="noticeType" mixed="true">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
   <xsd:element name="date"  type="dateType"/>
   <xsd:element name="place" type="placeType"/>
   <xsd:element name="name"  type="nameType"/>
   <xsd:element name="para"  type="paraType"/>
   <xsd:element name="media" type="mediaType"/>
  </xsd:choice>
  <xsd:attribute name="tag" type="xsd:string" use="required"/>
  <xsd:attribute name="text" type="xsd:string" use="optional"/> 
  <xsd:attribute name="source" type="xsd:int" use="optional"/> 
</xsd:complexType>

<xsd:complexType name="placeType">
 <xsd:simpleContent>
  <xsd:extension base="xsd:string">
   <xsd:attribute name="name" type="xsd:string"/>
  </xsd:extension>
 </xsd:simpleContent>
</xsd:complexType>


<xsd:complexType name="paraType" mixed="true"> 
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
   <xsd:element name="person"  type="personType"/>
   <xsd:element name="event" type="eventType"/>   
   <xsd:element name="place" type="placeType"/>
 </xsd:choice>
 <xsd:attribute name="type" type="paraTypeType" />
</xsd:complexType>

<xsd:simpleType name="paraTypeType">
 <xsd:restriction base="xsd:string">
  <xsd:enumeration value="NEW"/>
  <xsd:enumeration value="HDR"/>
 </xsd:restriction>
</xsd:simpleType>

<!--   This may need to be checked -->
<xsd:complexType name="relationType" mixed="true">
  <xsd:choice minOccurs="0" maxOccurs="unbounded">
   <xsd:element name="person"  type="personType"/>
   <xsd:element name="event" type="eventType"/>   
  </xsd:choice>
  <xsd:attribute name="type" type="relationNameType" use="required"/>
  <xsd:attribute name="source" type="xsd:positiveInteger" use="optional"/>
  <xsd:attribute name="number" type="xsd:positiveInteger" use="optional"/>
  <xsd:attribute name="text"   type="xsd:string" use="optional"/>
</xsd:complexType>

<xsd:simpleType name="relationNameType">
 <xsd:restriction base="xsd:string">
  <xsd:enumeration value="PARE"/>
  <xsd:enumeration value="SPOU"/>
  <xsd:enumeration value="CHIL"/>
 </xsd:restriction>
</xsd:simpleType>


<xsd:complexType name="mediaType" mixed="true">
 <xsd:sequence>
  <xsd:element name="date" type="dateType" minOccurs="0" />
 </xsd:sequence>
 <xsd:attribute name="name"   type="xsd:string"          use="required"/>
 <xsd:attribute name="number" type="xsd:positiveInteger" use="optional"/>
</xsd:complexType>


<xsd:complexType name="eventType" >
<xsd:sequence>
 <xsd:element name="date" type="dateType" minOccurs="0"/>
</xsd:sequence>
 <xsd:attribute name="type" type="xsd:string" use="required"/>
 <xsd:attribute name="text"   type="xsd:string" use="optional"/> 
</xsd:complexType>

<xsd:complexType name="dateType">
 <xsd:simpleContent>
  <xsd:extension base="xsd:string">
   <xsd:attribute name="value" type="dateValueType" use="required"/>
  </xsd:extension>
 </xsd:simpleContent>
 </xsd:complexType>

<xsd:simpleType name="dateValueType">
 <xsd:restriction base="xsd:positiveInteger">
 <xsd:minInclusive value="100"/>
 <xsd:maxInclusive value="21000000"/>
 </xsd:restriction>
</xsd:simpleType>

</xsd:schema>
