<?xml version="1.0"?>
<!--
 * Copyright (C) 2005-2010 Alfresco Software Limited.
 *
 * This file is part of Alfresco
 *
 * Alfresco is free software: you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * Alfresco is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU Lesser General Public License for more details.
 *
 * You should have received a copy of the GNU Lesser General Public License
 * along with Alfresco. If not, see <http://www.gnu.org/licenses/>.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:pr="http://www.alfresco.org/alfresco/product"
           targetNamespace="http://www.alfresco.org/alfresco/product"
           elementFormDefault="qualified">

  <!-- Simple types -->
  <xs:simpleType name="NonEmptyNormalizedStringType">
    <xs:restriction base="xs:normalizedString">
      <xs:minLength value="1" />
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="SKUType">
    <xs:restriction base="pr:NonEmptyNormalizedStringType">
      <xs:maxLength value="32" />
    </xs:restriction>
  </xs:simpleType>


  <!-- Complex types -->
  <xs:complexType abstract="true" name="CommonPropertiesType">
    <xs:sequence>
      <xs:element name="Title"       type="pr:NonEmptyNormalizedStringType" nillable="false" minOccurs="1" maxOccurs="1" />
      <xs:element name="Summary"     type="pr:NonEmptyNormalizedStringType" nillable="false" minOccurs="0" maxOccurs="1" />
      <xs:element name="Keyword"     type="pr:NonEmptyNormalizedStringType" nillable="false" minOccurs="0" maxOccurs="unbounded" />
      <xs:element name="PublishDate" type="xs:date"                         nillable="false" minOccurs="0" maxOccurs="1" />
      <xs:element name="ExpiryDate"  type="xs:date"                         nillable="false" minOccurs="0" maxOccurs="1" />
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="ProductType">
    <xs:complexContent>
      <xs:extension base="pr:CommonPropertiesType">
        <xs:sequence>                      
          <xs:element name="SKU"            type="pr:SKUType" nillable="false" minOccurs="1" maxOccurs="1" />
          <xs:element name="Body"           type="xs:string"  nillable="false" minOccurs="1" maxOccurs="1" />
          <xs:element name="SmallThumbnail" type="xs:anyURI"  nillable="false" minOccurs="0" maxOccurs="1" />
          <xs:element name="LargeThumbnail" type="xs:anyURI"  nillable="false" minOccurs="0" maxOccurs="1" />
          <xs:element name="Image"          type="xs:anyURI"  nillable="false" minOccurs="0" maxOccurs="unbounded" />
        </xs:sequence>
      </xs:extension>
    </xs:complexContent>
  </xs:complexType>


  <!-- Root Element -->
  <xs:element name="Product" type="pr:ProductType">
    <xs:unique name="UniqueKeyword">
      <xs:selector xpath="pr:Keyword" />
      <xs:field    xpath="." />
    </xs:unique>
  </xs:element>

</xs:schema>
