<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
	<xsd:annotation>
		<xsd:documentation xml:lang="en">
			Epiphany Web Browser extension metadata schema.
			Copyright (c) 2004 Adam Hooper
		</xsd:documentation>
	</xsd:annotation>

	<xsd:element name="extension-list" type="ExtensionListType"/>

	<xsd:complexType name="ExtensionListType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				List of extensions. Each extension has its set
				of metadata.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="extension"
				     type="ExtensionType"
				     minOccurs="1"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="ExtensionType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				Metadata about an extension.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="filename"
				     type="ExtensionFilenameType"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="name"
				     type="xsd:string"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="description"
				     type="xsd:string"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="version"
				     type="ExtensionVersionType"
				     minOccurs="1" maxOccurs="1"/>
<!--
			<xsd:element name="min-epiphany-version"
				     type="EpiphanyVersionType"
				     maxOccurs="1"/>
			<xsd:element name="max-epiphany-version"
				     type="EpiphanyVersionType"
				     maxOccurs="1"/>
			<xsd:element name="min-mozilla-version"
				     type="MozillaVersionType"
				     maxOccurs="1"/>
			<xsd:element name="max-mozilla-version"
				     type="MozillaVersionType"
				     maxOccurs="1"/>
-->
			<xsd:element name="author" type="AuthorType"/>
			<xsd:element name="url" type="xsd:anyURI"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="ExtensionFilenameType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				The &quot;core&quot; of the extension's
				filename. For example, use &quot;gestures&quot;
				for an extension with a shared object name of
				&quot;libgesturesextension.so&quot;.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[a-zA-Z0-9_-]+"/>
		</xsd:restriction>
	</xsd:simpleType>

	<xsd:simpleType name="ExtensionVersionType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				The version of the extension's API. For most
				extensions, this number will remain at
				&quot;1&quot; indefinitely. The only reason to
				increase it would be if any GObject classess
				within the extension change parents.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:positiveInteger"/>
	</xsd:simpleType>

<!--
	<xsd:complexType name="EpiphanyVersionType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				An Epiphany version (major.minor.micro).
				Extensions may function properly across a range
				of Epiphany versions, as long as the relevant
				parts of the Epiphany API have not changed.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="major"
				     type="xsd:positiveInteger"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="minor"
				     type="xsd:positiveInteger"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="micro"
				     type="xsd:positiveInteger"
				     minOccurs="1" maxOccurs="1"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:complexType name="MozillaVersionType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				A Mozilla version (major, minor, type, micro).
				Extensions my function properly across a range
				of Mozilla versions, as long as the relevant
				parts of the Mozilla API have not changed.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="major"
				     type="xsd:positiveInteger"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="minor"
				     type="xsd:positiveInteger"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="type"
				     type="MozillaVersionTypeType"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="micro"
				     type="xsd:positiveInteger"
				     minOccurs="1" maxOccurs="1"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="MozillaVersionTypeType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				The &quot;type&quot; of a Mozilla version. 1
				means Alpha, 2 means Beta, 3 means RC and 4
				means release.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:positiveInteger">
			<xsd:minInclusive value="1"/>
			<xsd:maxInclusive value="4"/>
		</xsd:restriction>
	</xsd:simpleType>
-->

	<xsd:complexType name="AuthorType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				An extension author -- a name and (optionally)
				an email address.
			</xsd:documentation>
		</xsd:annotation>
		<xsd:sequence>
			<xsd:element name="name"
				     type="xsd:normalizedString"
				     minOccurs="1" maxOccurs="1"/>
			<xsd:element name="email"
				     type="EmailType"
				     maxOccurs="1"/>
		</xsd:sequence>
	</xsd:complexType>

	<xsd:simpleType name="EmailType">
		<xsd:annotation>
			<xsd:documentation xml:lang="en">
				An email address
			</xsd:documentation>
		</xsd:annotation>
		<xsd:restriction base="xsd:string">
			<xsd:pattern value="[\.a-zA-Z0-9_-]+@([a-zA-Z0-9_-])+(([a-zA-Z0-9_-])*\.([a-zA-Z0-9_-])+)+"/>
		</xsd:restriction>
	</xsd:simpleType>
</xsd:schema>