<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ydf="http://olp.yahooapis.jp/ydf/1.0"
    targetNamespace="http://olp.yahooapis.jp/ydf/1.0" elementFormDefault="qualified">
    <xs:annotation>
        <xs:appinfo>YDF 1.0</xs:appinfo>
        <xs:documentation>
        <![CDATA[
            YOLP Data Format Schema Document version 1.0
            Copyright (c) Yahoo Japan Corporation. All Rights Reserved.

            詳細はYahoo!デベロッパーネットワークのYDFリファレンスを参照
            http://developer.yahoo.co.jp/webapi/map/openlocalplatform/v1/ydf/
        ]]>
        </xs:documentation>
    </xs:annotation>

    <xs:element name="YDF">
        <xs:complexType>
            <xs:choice minOccurs="1" maxOccurs="unbounded">
                <xs:element name="ResultInfo" type="ydf:ResultType"></xs:element>
                <xs:element name="Feature" type="ydf:FeatureType"></xs:element>
                <xs:element name="Dictionary" type="ydf:DictionaryType"></xs:element>
            </xs:choice>
            <xs:attribute name="firstResultPosition" type="xs:int"></xs:attribute>
            <xs:attribute name="totalResultsAvailable" type="xs:int"></xs:attribute>
            <xs:attribute name="totalResultsReturned" type="xs:int"></xs:attribute>
        </xs:complexType>
    </xs:element>

    <xs:complexType name="ResultType">
        <xs:sequence minOccurs="0" maxOccurs="1">
            <xs:element name="Count" type="xs:unsignedLong" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Total" type="xs:unsignedLong" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Start" type="xs:unsignedLong" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Latency" type="xs:decimal" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Status" type="xs:unsignedLong" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Description" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Copyright" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="FeatureType">
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:element name="Id" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Name" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Category" type="xs:string" minOccurs="0" maxOccurs="unbounded"></xs:element>
            <xs:element name="Description" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Geometry" type="ydf:GeometryType" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Property" type="ydf:PropertyType" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Style" type="ydf:StyleType" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="RouteInfo" type="ydf:RouteType" minOccurs="0" maxOccurs="unbounded"></xs:element>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="GeometryType">
        <xs:sequence>
        	<xs:element name="Id" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="Target" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="Type" minOccurs="1" maxOccurs="1">
        		<xs:simpleType>
        			<xs:restriction base="xs:string">
        				<xs:enumeration value="point"></xs:enumeration>
        				<xs:enumeration value="linestring"></xs:enumeration>
        				<xs:enumeration value="polygon"></xs:enumeration>
        				<xs:enumeration value="circle"></xs:enumeration>
        				<xs:enumeration value="ellipse"></xs:enumeration>
        				<xs:enumeration value="multigeometry"></xs:enumeration>
        			</xs:restriction>
        		</xs:simpleType>
        	</xs:element>
        	<xs:element name="Coordinates" type="ydf:CoordinatesType" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="BoundingBox" type="ydf:CoordinatesType" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="Compress" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="CompressType" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="Datum" minOccurs="0" maxOccurs="1">
        		<xs:simpleType>
        			<xs:restriction base="xs:string">
        				<xs:enumeration value="wgs"></xs:enumeration>
        				<xs:enumeration value="tky"></xs:enumeration>
        			</xs:restriction>
        		</xs:simpleType>
        	</xs:element>
        	<xs:element name="Exterior" type="ydf:PolygonType" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="Interior" type="ydf:PolygonType" minOccurs="0" maxOccurs="1"></xs:element>
        	<xs:element name="Radius" minOccurs="0" maxOccurs="1">
        		<xs:simpleType>
        			<xs:restriction base="xs:string">
        				<xs:pattern value="\d+\.?\d*,?(\d+\.?\d*)?"></xs:pattern>
        			</xs:restriction>
        		</xs:simpleType>
        	</xs:element>
        	<xs:element name="Geometry" type="ydf:GeometryType" minOccurs="0" maxOccurs="unbounded"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PropertyType">
         <xs:annotation>
            <xs:documentation>
        	<![CDATA[
            	任意の要素を「<名>値</名>」形式で指定可能。
				値は階層構造になっていても可。
                例) <Property>
                        <Address>東京都港区赤坂9丁目</Address>
                        <Tel>000-1234-5678</Tel>
                    </Property>
        	]]>
            </xs:documentation>
        </xs:annotation>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
            <xs:any minOccurs="0" maxOccurs="unbounded" processContents="lax" namespace="##any"></xs:any>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="DictionaryType">
         <xs:annotation>
            <xs:documentation>
        	<![CDATA[
            	任意の要素を階層構造で指定可能だが、
				参照元から指定するId要素は必須。
                例) <Dictionary>
                        <Style>
                            <Id>pin</Id>
                            <Type>icon</Type>
                            <Image>http://localhost/hoge.png</Image>
                        </Style>
                    </Dictionary>
        	]]>
            </xs:documentation>
        </xs:annotation>
        <xs:choice>
            <xs:any namespace="##any" minOccurs="0" maxOccurs="unbounded" processContents="lax"></xs:any>
        </xs:choice>
    </xs:complexType>

    <xs:complexType name="StyleType">
        <xs:sequence>
            <xs:element name="Id" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Target" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Type" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="icon"></xs:enumeration>
                        <xs:enumeration value="line"></xs:enumeration>
                        <xs:enumeration value="fill"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Image" type="xs:string" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Size" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="\d+,?(\d+)?"></xs:pattern>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Anchor" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="\d+,\d+"></xs:pattern>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Opacity" type="xs:decimal" minOccurs="0" maxOccurs="1"></xs:element>
            <xs:element name="Color" minOccurs="0" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:pattern value="[0-9a-fA-F]{6}"></xs:pattern>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="StartLine" minOccurs="0" maxOccurs="1" type="ydf:LineEndType"></xs:element>
            <xs:element name="EndLine" minOccurs="0" maxOccurs="1" type="ydf:LineEndType"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="CoordinatesType">
        <xs:annotation>
            <xs:documentation>
        	<![CDATA[
                座標は、世界測地系(WGS84)の十進度形式で、
                経度,緯度の順番でコンマ区切りで指定する。
                スペース区切で複数指定可。
			]]>
            </xs:documentation>
        </xs:annotation>
        <xs:restriction base="xs:string">
            <xs:pattern value="(-?\d+\.?\d*,-?\d+\.?\d*\s?)+"></xs:pattern>
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="RouteType">
        <xs:sequence>
            <xs:element name="Edge" type="ydf:EdgeType" minOccurs="1" maxOccurs="unbounded"></xs:element>
            <xs:element name="Property" type="ydf:PropertyType" minOccurs="0" maxOccurs="1"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="EdgeType">
        <xs:sequence>
            <xs:element name="Id" type="xs:string" minOccurs="1" maxOccurs="1"></xs:element>
            <xs:element name="Vertex" type="ydf:VertexType" minOccurs="0" maxOccurs="2"></xs:element>
            <xs:element name="Property" type="ydf:PropertyType" minOccurs="0" maxOccurs="1"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="VertexType">
        <xs:sequence>
            <xs:element name="Type" minOccurs="1" maxOccurs="1">
                <xs:simpleType>
                    <xs:restriction base="xs:string">
                        <xs:enumeration value="Start"></xs:enumeration>
                        <xs:enumeration value="End"></xs:enumeration>
                    </xs:restriction>
                </xs:simpleType>
            </xs:element>
            <xs:element name="Property" type="ydf:PropertyType" minOccurs="0" maxOccurs="1"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:complexType name="PolygonType">
        <xs:sequence>
            <xs:element name="Coordinates" type="ydf:CoordinatesType" minOccurs="1" maxOccurs="1"></xs:element>
        </xs:sequence>
    </xs:complexType>

    <xs:simpleType name="LineEndType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="arrow"></xs:enumeration>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

