<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:epx="https://opensvn.csie.org/epoman/EPX" targetNamespace="https://opensvn.csie.org/epoman/EPX" elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:element name="epx">
		<xs:complexType>
			<xs:sequence>
				<xs:element name="portfolio" type="epx:portfolioType" minOccurs="1" maxOccurs="1"/>
			</xs:sequence>
			<xs:attribute name="version" type="xs:string" use="required"/>
		</xs:complexType>
		<xs:unique name="uniquePortfolioTitle">
			<xs:selector xpath="epx:portfolio"/>
			<xs:field xpath="@name"/>
		</xs:unique>
	</xs:element>
	<xs:complexType name="portfolioType">
		<xs:sequence>
			<xs:element name="information" type="epx:informationType"/>
			<xs:element name="categories">
				
				<xs:complexType>
					<xs:sequence >
						<xs:element name="category" type="epx:categoryType" minOccurs="0" maxOccurs="unbounded">
							<xs:unique name="uniqueItemRefsub">
								<xs:selector xpath="epx:itemref"/>
								<xs:field xpath="@id"/>
							</xs:unique>
							
						</xs:element>
					</xs:sequence>
				</xs:complexType>
				<!--xs:unique name="uniqueItemRefcat">
								<xs:selector xpath="epx:category/epx:itemref"/>
								<xs:field xpath="@id"/>
							</xs:unique-->
				<xs:unique name="uniqueCategoryTitle">
					<xs:selector xpath="epx:category/epx:title"/>
					<xs:field xpath="."/>
				</xs:unique>
			</xs:element>
			<xs:element name="items">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="item" type="epx:itemType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
				<xs:key name="itemID">
					<xs:selector xpath="epx:item"/>
					<xs:field xpath="@id"/>
				</xs:key>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="name" type="xs:string" use="required"/>
		<xs:attribute name="created" type="xs:dateTime" use="required"/>
	</xs:complexType>
	<xs:complexType name="informationType">
		<xs:sequence>
			<xs:element name="username" type="xs:string"/>
			<xs:element name="forename" type="xs:string"/>
			<xs:element name="surename" type="xs:string"/>
			<xs:element name="description" type="xs:string"/>
			<xs:element name="contacts">
				<xs:complexType>
					<xs:sequence>
						<xs:element name="contact" type="epx:contactType" minOccurs="0" maxOccurs="unbounded"/>
					</xs:sequence>
				</xs:complexType>
			</xs:element>
		</xs:sequence>
		<xs:attribute name="lastedited" type="xs:dateTime" use="required"/>
	</xs:complexType>
	<xs:complexType name="contactType">
		<xs:sequence>
			<xs:element name="text" type="xs:string" />
		</xs:sequence>
		<xs:attribute name="type" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="categoryType">
		<xs:sequence>
			<xs:element name="title" type="xs:string"/>
			<xs:element name="itemref" minOccurs="0" maxOccurs="unbounded">
			
				<xs:complexType>
					<xs:attribute name="id" type="xs:IDREF"/>
				</xs:complexType>
				<xs:keyref refer="epx:itemID" name="IDkey">
					<xs:selector xpath="epx:itemref"/>
					<xs:field xpath="@id"/>
				</xs:keyref>
			</xs:element>
			<xs:element name="subcategory" type="epx:categoryType" minOccurs="0" maxOccurs="unbounded">
				<xs:unique name="uniqueItemRef1">
					<xs:selector xpath="epx:itemref"/>
					<xs:field xpath="@id"/>
				</xs:unique>
			</xs:element>
		</xs:sequence>
	</xs:complexType>
	
	<xs:complexType name="itemType" abstract="true">
		<xs:sequence minOccurs="0" maxOccurs="unbounded">
			<xs:element name="item" type="epx:itemType">
			
			</xs:element>
		</xs:sequence>
		<xs:attribute name="id" type="xs:ID" use="required"/>
		<xs:attribute name="editable" type="xs:boolean" use="required"/>
		<xs:attribute name="visible" type="xs:boolean" use="required"/>
		<xs:attribute name="created" type="xs:dateTime" use="required"/>
		<xs:attribute name="lastedited" type="xs:dateTime" use="required"/>
	</xs:complexType>
</xs:schema>

