<?xml version="1.0" encoding="UTF-8"?>

<!--
- initial release (same as FCMA 2013B)
ET2014A (23.05.2014): extended Geo (Geometry as wkt or linestring)
-->
<xs:schema
	xmlns:xs="http://www.w3.org/2001/XMLSchema"
	xmlns="http://meta.et4.de/ET2014A_HYPER"
	targetNamespace="http://meta.et4.de/ET2014A_HYPER"
	elementFormDefault="qualified"
	xmlns:params="urn:params" params:package="de.hubermedia.vET2014A_HYPER">

	<xs:element name="result" type="Result" />

	<xs:complexType name="Result">
		<xs:sequence>
			<xs:element name="status" type="SimpleStatusType" minOccurs="1" maxOccurs="1" params:tag="5">
				<xs:annotation>
					<xs:documentation>status of the result, possible values: OK, INVALID_LICENSE, INVALID_EXPERIENCE, INVALID_REQUEST, SERVER_ERROR</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="message" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="6">
				<xs:annotation>
					<xs:documentation>errormessages or warnings</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="count" type="xs:nonNegativeInteger" minOccurs="1" maxOccurs="1" params:tag="3">
				<xs:annotation>
					<xs:documentation>count of items in the current result</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="overallcount" type="xs:nonNegativeInteger" minOccurs="1" maxOccurs="1" params:tag="2">
				<xs:annotation>
					<xs:documentation>count of all available items (e.g. for paging, with "limit" and "offset" parameters)</xs:documentation>
				</xs:annotation>
			</xs:element>
			<xs:element name="channels" type="Channels" minOccurs="1" maxOccurs="1" params:tag="4" />
			<xs:element name="items" type="Items" minOccurs="1" maxOccurs="1" params:tag="1" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Channels" params:isList="true">
		<xs:sequence>
			<xs:element name="channel" type="Channel" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Channel">
		<xs:sequence>
			<xs:element name="title" type="xs:string" minOccurs="1" maxOccurs="1" params:tag="2" />
			<xs:element name="description" type="xs:string" minOccurs="1" maxOccurs="1" params:tag="3" />
			<xs:element name="link" type="xs:anyURI" minOccurs="1" maxOccurs="1" params:tag="4" />
			<xs:element name="copyright" type="xs:string" minOccurs="1" maxOccurs="1" params:tag="5" />
		</xs:sequence>
		<xs:attribute name="id" type="xs:integer" use="required" params:tag="1" />
	</xs:complexType>

	<xs:complexType name="Items" params:isList="true" params:flush="10000">
		<xs:sequence>
			<xs:element name="item" type="Item" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Item">
		<xs:sequence>
			<xs:element name="global_id" type="xs:string" minOccurs="1" maxOccurs="1" params:tag="80" /><!--??-->
			<xs:element name="type" type="SimpleMetaType" minOccurs="1" maxOccurs="1" params:tag="208" />
			<xs:element name="title" type="xs:string" minOccurs="1" maxOccurs="1" params:tag="87" />
			<xs:element name="street" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="20" />
			<xs:element name="housenumber" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="207" />
			<xs:element name="zip" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="21" />
			<xs:element name="city" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="22" />	
			<xs:element name="highlight" type="xs:boolean" minOccurs="0" maxOccurs="1" params:tag="33" />			
			<xs:element name="categories" type="Categories" minOccurs="1" maxOccurs="1" params:tag="10" />
			<xs:element name="attributes" type="Attributes" minOccurs="0" maxOccurs="1" params:tag="210" />
			<xs:element name="ratings" type="Ratings" minOccurs="0" maxOccurs="1" params:tag="50" />
			<xs:element name="hyperObjects" type="HyperObjects" minOccurs="0" maxOccurs="1" params:tag="219" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Categories" params:isList="true">
		<xs:sequence>
			<xs:element name="category" type="xs:string" minOccurs="1" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="HyperObjects" params:isList="true">
		<xs:sequence>
			<xs:element name="hyperObject" type="HyperObject" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="HyperObject">
		<xs:sequence>
			<xs:element name="source" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="2" />
			<xs:element name="url" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="3" />
			<xs:element name="isBookable" type="xs:boolean" minOccurs="0" maxOccurs="1" params:tag="4" />
			<xs:element name="attributes" type="Attributes" minOccurs="0" maxOccurs="1" params:tag="5" />
			<xs:element name="numbers" type="Numbers" minOccurs="0" maxOccurs="1" params:tag="6" />
			<xs:element name="hyperSubObjects" type="HyperSubObjects" minOccurs="0" maxOccurs="1" params:tag="7" />
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="HyperSubObjects" params:isList="true">
		<xs:sequence>
			<xs:element name="hyperSubObject" type="HyperSubObject" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>	
	
	<xs:complexType name="HyperSubObject">
		<xs:sequence>
			<xs:element name="title" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="2" />
			<xs:element name="type" type="xs:string" minOccurs="0" maxOccurs="1" params:tag="3" />
			<xs:element name="changed" type="xs:dateTime" minOccurs="0" maxOccurs="1" params:tag="4" />
			<xs:element name="texts" type="Texts" minOccurs="0" maxOccurs="1" params:tag="5" />
			<xs:element name="attributes" type="Attributes" minOccurs="0" maxOccurs="1" params:tag="6" />
			<xs:element name="media_objects" type="MediaObjects" minOccurs="0" maxOccurs="1" params:tag="7" />
			<xs:element name="keywords" type="Keywords" minOccurs="0" maxOccurs="1" params:tag="8" />
			<xs:element name="numbers" type="Numbers" minOccurs="0" maxOccurs="1" params:tag="9" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Texts" params:isList="true">
		<xs:sequence>
			<xs:element name="text" type="Text" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Text">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="rel" type="SimpleTextRel" use="required" params:tag="2" />
				<xs:attribute name="type" type="SimpleMimeType" use="optional" params:tag="3" />
				<xs:attribute name="author" type="xs:string" use="optional" params:tag="4" />
				<xs:attribute name="source" type="xs:string" use="optional" params:tag="5" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="MediaObjects" params:isList="true">
		<xs:sequence>
			<xs:element name="media_object" type="MediaObject" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="MediaObject">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="rel" type="SimpleMediaObjectRel" use="required" params:tag="2" />
				<xs:attribute name="url" type="xs:anyURI" use="required" params:tag="3" />
				<xs:attribute name="type" type="SimpleMimeType" use="optional" params:tag="4" />
				<xs:attribute name="author" type="xs:string" use="optional" params:tag="5" />
				<xs:attribute name="source" type="xs:string" use="optional" params:tag="6" />
				<xs:attribute name="latitude" type="xs:double" use="optional" params:tag="7" />
				<xs:attribute name="longitude" type="xs:double" use="optional" params:tag="8" />
				<xs:attribute name="theme" type="xs:string" use="optional" params:tag="9" />
				<xs:attribute name="ratio" type="SimpleMediaObjectRatio" use="optional" params:tag="10" />
				<xs:attribute name="prio" type="xs:integer" use="optional" params:tag="11" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="Keywords" params:isList="true">
		<xs:sequence>
			<xs:element name="keyword" type="xs:string" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Numbers" params:isList="true">
		<xs:sequence>
			<xs:element name="number" type="Number" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Number">
		<xs:simpleContent>
			<xs:extension base="xs:double">
				<xs:attribute name="type" type="xs:string" use="required" params:tag="2" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="Attributes" params:isList="true">
		<xs:sequence>
			<xs:element name="attribute" type="Attribute" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Attribute">
		<xs:simpleContent>
			<xs:extension base="xs:string">
				<xs:attribute name="key" type="xs:string" use="required" params:tag="2" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>

	<xs:complexType name="Ratings" params:isList="true">
		<xs:sequence>
			<xs:element name="rating" type="Rating" minOccurs="0" maxOccurs="unbounded" />
		</xs:sequence>
	</xs:complexType>

	<xs:complexType name="Rating">
		<xs:simpleContent>
			<xs:extension base="SimpleRatingValue">
				<xs:attribute name="type" type="xs:string" use="required" params:tag="2" />
			</xs:extension>
		</xs:simpleContent>
	</xs:complexType>
	
	<!-- Simple Types -->

	<xs:simpleType name="SimpleMimeType">
		<xs:restriction base="xs:string">
			<!-- http://www.iana.org/assignments/media-types -->
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="SimpleRatingValue">
		<xs:restriction base="xs:double">
			<xs:minInclusive value="0" />
			<xs:maxInclusive value="100" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="SimpleMediaObjectRel">
		<xs:restriction base="xs:string">
			<xs:enumeration value="default" />
			<xs:enumeration value="gallery" />
			<xs:enumeration value="download" />
			<xs:enumeration value="video" />
			<xs:enumeration value="audio" />
			<xs:enumeration value="qrcode" />
			<xs:enumeration value="booking" />
			<xs:enumeration value="socialmedia" />
			<xs:enumeration value="rating" />
			<xs:enumeration value="barrierfree" />
			<xs:enumeration value="print" />

			<xs:enumeration value="summer" />
			<xs:enumeration value="winter" />
			<xs:enumeration value="mobile" />
			<xs:enumeration value="pages" />
			<xs:enumeration value="homepage" />

			<xs:enumeration value="other" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="SimpleMediaObjectRatio">
		<xs:restriction base="xs:string">
			<xs:enumeration value="" />
			<xs:enumeration value="3:2" />
			<xs:enumeration value="4:3" />
			<xs:enumeration value="16:9" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="SimpleTextRel">
		<xs:restriction base="xs:string">
			<!-- New Text Types: Not filled with MD Content -->
			<xs:enumeration value="teaser" />
			<xs:enumeration value="destination" />
			<xs:enumeration value="date" />
			<xs:enumeration value="dayoff" />
			<xs:enumeration value="directions" />
			<xs:enumeration value="barrierfree" />

			<!-- MD Content API Text Types -->
			<xs:enumeration value="long" />
			<xs:enumeration value="short" />
			<xs:enumeration value="highlight" />
			<xs:enumeration value="insidertip" />
			<xs:enumeration value="openinghours" />
			<xs:enumeration value="equipment" />
			<xs:enumeration value="roominfo" />
			<xs:enumeration value="pricerange" />
			<xs:enumeration value="classification" />
			<xs:enumeration value="convention" />
			<xs:enumeration value="games" />
			<xs:enumeration value="styles" />
			<xs:enumeration value="meals" />
			<xs:enumeration value="mealsavail" />
			<xs:enumeration value="paymentinfo" />
			<xs:enumeration value="clubinfo" />
			<xs:enumeration value="guestinfo" />
			<xs:enumeration value="cinemainfo" />
			<xs:enumeration value="program" />
			<xs:enumeration value="parking" />
			<xs:enumeration value="rentalcar" />
			<xs:enumeration value="schedule" />

			<!--  Hotel.DE API Text Types -->
			<!-- equipment, destination, directions, additional -->
			<xs:enumeration value="additional" />

			<!-- NEW ET2014A -->
			<xs:enumeration value="details" />
			<xs:enumeration value="kitchen" />
		</xs:restriction>
	</xs:simpleType>

	<xs:simpleType name="SimpleMetaType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="Hotel" />
			<xs:enumeration value="Event" />
			<xs:enumeration value="Gastro" />
			<xs:enumeration value="Tour" />
			<xs:enumeration value="POI" />
			<xs:enumeration value="City" />
			<xs:enumeration value="Area" />
			<xs:enumeration value="Package" />
			<xs:enumeration value="Article" />
		</xs:restriction>
	</xs:simpleType>
	
	<xs:simpleType name="SimpleStatusType">
		<xs:restriction base="xs:string">
			<xs:enumeration value="OK" />
			<xs:enumeration value="INVALID_LICENSE" />
			<xs:enumeration value="INVALID_EXPERIENCE" />
			<xs:enumeration value="INVALID_REQUEST" />
			<xs:enumeration value="SERVER_ERROR" />
		</xs:restriction>
	</xs:simpleType>

</xs:schema>