﻿<xs:schema xmlns="http://nemus.skogsstyrelsen.se/scheman/dataTypes/2"
           elementFormDefault="qualified"
           targetNamespace="http://nemus.skogsstyrelsen.se/scheman/dataTypes/2"
           xmlns:xs="http://www.w3.org/2001/XMLSchema">

  <!-- Value types -->
  <xs:simpleType name="guidType">
    <xs:restriction base="xs:token">
      <xs:pattern value="[A-Fa-f0-9]{8}-([A-Fa-f0-9]{4}-){3}[A-Fa-f0-9]{12}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="haType">
    <xs:restriction base="xs:decimal">
      <xs:fractionDigits value="1" />
			<xs:minInclusive value="0"/>
			<xs:maxInclusive value="10000"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="notEmptyString">
    <xs:restriction base="xs:string">
      <xs:minLength value="1"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="yearType">
    <xs:restriction base="xs:int">
      <xs:minInclusive value="2020" />
      <xs:maxExclusive value="2100" />
    </xs:restriction>
  </xs:simpleType>
	<xs:simpleType name="antalType">
		<xs:restriction base="xs:int">
			<xs:minInclusive value="0"/>
			<xs:maxInclusive value="10000"/>
		</xs:restriction>
	</xs:simpleType>
	<xs:simpleType name="notEmptyStringMax2000">
		<xs:restriction base="xs:string">
			<xs:minLength value="1"/>
			<xs:maxLength value="2000" />
		</xs:restriction>
	</xs:simpleType>

  <!-- Berorda types -->
  <xs:complexType name="berordaType">
    <xs:sequence>
      <xs:element name="fastighetsagare" type="fastighetsagareType" >
        <xs:annotation>
          <xs:documentation>
            Fastighetsägaren ska ha fullmakt att företräda alla fastighetsägare.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="ombud" type="ombudType" minOccurs="0" >
        <xs:annotation>
        <xs:documentation>
          Ombudet ska ha fullmakt att företräda fastighetsägaren.
        </xs:documentation>
        </xs:annotation>
      </xs:element>
      <xs:element name="fastighet" type="fastighetType" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>

  <!-- Person types -->
  <xs:complexType name="fastighetsagareType">
    <xs:sequence>
      <xs:choice>
        <xs:sequence>
          <xs:element name="personnummer" type="personIdType" />
          <xs:element name="fornamn" type="notEmptyString" minOccurs="0" />
          <xs:element name="efternamn" type="notEmptyString" minOccurs="0" />
        </xs:sequence>
        <xs:sequence>
          <xs:element name="fornamn" type="notEmptyString" />
          <xs:element name="efternamn" type="notEmptyString" />
        </xs:sequence>
        <xs:sequence>
          <xs:element name="organisationsnummer" type="organisationIdType" />
          <xs:element name="organisationsnamn" type="notEmptyString" minOccurs="0" />
        </xs:sequence>
        <xs:element name="organisationsnamn" type="notEmptyString" />
      </xs:choice>
      <xs:element name="epost" type="epostType" minOccurs="0" />
      <xs:element name="telefon" type="notEmptyString" minOccurs="0" />
    </xs:sequence>
  </xs:complexType>
  <xs:complexType name="ombudType">
    <xs:sequence>
      <xs:element name="epost" type="epostType"/>
      <xs:element name="telefon" type="notEmptyString" minOccurs="0" />
      <xs:element name="begransningAvFullmakt" type="notEmptyString" minOccurs="0" >
        <xs:annotation>
          <xs:documentation>
            Här anges på vilket sätt fullmakten är begränsad.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
		  <xs:element name="personnummer" type="personIdType" minOccurs="0" >
        <xs:annotation>
          <xs:documentation>
            Personnummer för ombud gäller endast Skogsstyrelsens egna planeringssystem Mina sidor och behöver inte finnas med som frivillig uppgift.
          </xs:documentation>
        </xs:annotation>
      </xs:element>
			<xs:element name="fornamn" type="notEmptyString" minOccurs="0" >
				<xs:annotation>
					<xs:documentation>
						Förnamn för ombud gäller endast Skogsstyrelsens egna planeringssystem Mina sidor och behöver inte finnas med som frivillig uppgift.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="efternamn" type="notEmptyString" minOccurs="0" >
				<xs:annotation>
					<xs:documentation>
						Efternamn för ombud gäller endast Skogsstyrelsens egna planeringssystem Mina sidor och behöver inte finnas med som frivillig uppgift.
					</xs:documentation>
				</xs:annotation>
			</xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:simpleType name="epostType">
    <xs:annotation>
      <xs:documentation>
        Endast bokstäverna a-z, tecknen ._%+- och siffror och är tillåtna. Mellan 5 och 255 tecken långt
      </xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:minLength value="5"/>
      <xs:maxLength value="255"/>
      <xs:pattern value="(?:[A-Za-z0-9!#$%&amp;&apos;*+/=?^_`{|}~-]+(?:\.[A-Za-z0-9!#$%&amp;&apos;*+/=?^_`{|}~-]+)*|&quot;(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21\x23-\x5b\x5d-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])*&quot;)@(?:(?:[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?\.)+[A-Za-z0-9](?:[A-Za-z0-9-]*[A-Za-z0-9])?|\[(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?|[A-Za-z0-9-]*[A-Za-z0-9]:(?:[\x01-\x08\x0b\x0c\x0e-\x1f\x21-\x5a\x53-\x7f]|\\[\x01-\x09\x0b\x0c\x0e-\x7f])+)\])"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="organisationIdType">
    <xs:annotation>
      <xs:documentation>Organisationsnummer</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:pattern value="(00|16|)[0-9]{10}" />
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="personIdType">
    <xs:annotation>
      <xs:documentation>Personnummer</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:pattern value="(19|20)[0-9]{10}|(302)[0-9]{7}" />
    </xs:restriction>
  </xs:simpleType>

  <!-- Fastighet types -->
  <xs:complexType name="fastighetType">
    <xs:choice>
      <xs:element name="registerenhetUuid" type="guidType" />
      <xs:sequence>
        <xs:element name="kommun" type="notEmptyString" />
        <xs:element name="trakt" type="notEmptyString" />
        <xs:element name="block" type="notEmptyString" />
        <xs:element name="enhet" type="xs:int" />
      </xs:sequence>
    </xs:choice>
  </xs:complexType>

  <!-- Wkt types -->
  <xs:simpleType name="wktPolygonType">
    <xs:annotation>
      <xs:documentation>Beskrivning av läge, form och storlek (inom GIS) m h a WKT-strängar.</xs:documentation>
      <xs:documentation>Endast POLYGON eller MULTIPOlYGON är tillåtet.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:pattern value="[Pp][Oo][Ll][Yy][Gg][Oo][Nn] ?\( ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+\) ?)* ?\) ?|[Mm][Uu][Ll][Tt][Ii][Pp][Oo][Ll][Yy][Gg][Oo][Nn] ?\( ?(\( ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+\) ?)* ?\)) ?(, ?(\( ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+\) ?)* ?\))* ?)*\)"/>
    </xs:restriction>
  </xs:simpleType>
  <xs:simpleType name="wktType">
    <xs:annotation>
      <xs:documentation>Beskrivning av läge, form och storlek (inom GIS) m h a WKT-strängar.</xs:documentation>
      <xs:documentation>Endast POLYGON, MULTIPOlYGON, POINT, MULTIPOINT, LINESTRING eller MULTILINESTRING är tillåtet.</xs:documentation>
    </xs:annotation>
    <xs:restriction base="xs:token">
      <xs:pattern value="[Pp][Oo][Ll][Yy][Gg][Oo][Nn] ?\( ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+\) ?)* ?\)|[Mm][Uu][Ll][Tt][Ii][Pp][Oo][Ll][Yy][Gg][Oo][Nn] ?\( ?(\( ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? ?\d+(\.\d+)? ?)+\) ?)* ?\)) ?(, ?(\( ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?(\d+(\.\d+)? +\d+(\.\d+)?) ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+\) ?)* ?\))* ?)*\)|[Pp][Oo][Ii][Nn][Tt] ?\( ?\d+(\.\d+)? +\d+(\.\d+)? ?\)|[Mm][Uu][Ll][Tt][Ii][Pp][Oo][Ii][Nn][Tt] ?\( ?\( ?\d+(\.\d+)? +\d+(\.\d+)? ?\) ?( ?, ?\( ?\d+(\.\d+)? +\d+(\.\d+)? ?\) ?)*\)|[Mm][Uu][Ll][Tt][Ii][Pp][Oo][Ii][Nn][Tt] ?\( ?\d+(\.\d+)? +\d+(\.\d+)?( ?, ?\d+(\.\d+)? +\d+(\.\d+)?)* ?\)|[Ll][Ii][Nn][Ee][Ss][Tt][Rr][Ii][Nn][Gg] ?\( ?\d+(\.\d+)? +\d+(\.\d+)?( ?, ?\d+(\.\d+)? +\d+(\.\d+)?)+ ?\)|[Mm][Uu][Ll][Tt][Ii][Ll][Ii][Nn][Ee][Ss][Tt][Rr][Ii][Nn][Gg] ?\( ?\( ?\d+(\.\d+)? +\d+(\.\d+)? ?(, ?\d+(\.\d+)? +\d+(\.\d+)? ?)+ ?\) ?(, ?\( ?\d+(\.\d+)? +\d+(\.\d+)? ?(, ?\d+(\.\d+)? +\d+(\.\d+)?)+ ?\) ?)*\)"/>
    </xs:restriction>
  </xs:simpleType>

  <!-- Bilaga types -->
  <xs:group name="bilagaGroup">
    <xs:sequence>
      <xs:element name="filformat" type="filformatType" />
      <xs:element name="beskrivning" type="notEmptyString" minOccurs="0" />
      <xs:element name="data" type="xs:base64Binary" />
    </xs:sequence>
  </xs:group>

  <xs:simpleType name="filformatType">
    <xs:restriction base="xs:string">
      <xs:enumeration value="pdf" />
    </xs:restriction>
  </xs:simpleType>

</xs:schema>