<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
  targetNamespace="http://pmuzik.github.io/gamecat/"
  xmlns="http://pmuzik.github.io/gamecat/"
  elementFormDefault="qualified">

<!-- Root element -->
  <xs:element name="game">
    <xs:complexType>
      <xs:sequence>
        <xs:element name="titles" type="titlesType"/>
        <xs:element name="developer" type="authorityStringType"/>
        <xs:element name="publisher" type="authorityStringType"/>
        <xs:element name="platform" type="xs:string"/>
        <xs:element name="genre" type="xs:string"/>
        <xs:element name="players" type="xs:string"/>
        <xs:element name="releases" type="releasesType"/>
        <xs:element name="credits" type="creditsType"/>
      </xs:sequence>
      <xs:attribute name="id" type="xs:ID" use="required"/>
    </xs:complexType>
  </xs:element>

<!-- Named type definitions -->
  <xs:complexType name="authorityStringType">
      <xs:simpleContent>
          <xs:extension base="xs:string">
              <xs:attribute name="authority-uri" type="xs:anyURI" use="optional"/>
              <xs:attribute name="authority-source" type="xs:string" use="optional"/>
              <xs:attribute name="authority-verified" type="xs:boolean" use="optional"/>
          </xs:extension>
      </xs:simpleContent>
  </xs:complexType>
  
  <xs:complexType name="titlesType">
      <xs:sequence>
          <xs:element name="title" maxOccurs="unbounded">
              <xs:complexType>
                  <xs:simpleContent>
                      <xs:extension base="xs:string">
                          <xs:attribute name="type" use="required">
                              <xs:simpleType>
                                  <xs:restriction base="xs:string">
                                      <xs:enumeration value="primary"/>
                                      <xs:enumeration value="localized"/>
                                      <xs:enumeration value="variant"/>
                                  </xs:restriction>
                              </xs:simpleType>
                          </xs:attribute>
                          <xs:attribute name="lang" type="xs:language" use="required"/>
                          <xs:attribute name="script" use="optional">
                              <xs:simpleType>
                                  <xs:restriction base="xs:string">
                                      <xs:enumeration value="Latn"/>
                                      <xs:enumeration value="Jpan"/>
                                      <xs:enumeration value="Cyrl"/>
                                      <xs:enumeration value="Hans"/>
                                      <xs:enumeration value="Hant"/>
                                      <xs:enumeration value="Kore"/>
                                  </xs:restriction>
                              </xs:simpleType>
                          </xs:attribute>
                      </xs:extension>
                  </xs:simpleContent>
              </xs:complexType>
          </xs:element>
      </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="releasesType">
      <xs:sequence>
          <xs:element name="release" maxOccurs="unbounded">
              <xs:complexType>
                  <xs:sequence>
                      <xs:element name="date" type="xs:date"/>
                      <xs:element name="region" type="xs:string"/>
                  </xs:sequence>
              </xs:complexType>
          </xs:element>
      </xs:sequence>
  </xs:complexType>
  
  <xs:complexType name="creditsType">
      <xs:sequence>
          <xs:element name="credit" maxOccurs="unbounded">
              <xs:complexType>
                  <xs:simpleContent>
                      <xs:extension base="authorityStringType">
                          <xs:attribute name="role" use="required">
                              <xs:simpleType>
                                  <xs:restriction base="xs:string">
                                      <xs:enumeration value="director"/>
                                      <xs:enumeration value="designer"/>
                                      <xs:enumeration value="composer"/>
                                      <xs:enumeration value="programmer"/>
                                      <xs:enumeration value="artist"/>
                                      <xs:enumeration value="writer"/>
                                      <xs:enumeration value="producer"/>
                                      <xs:enumeration value="planner"/>
                                  </xs:restriction>
                              </xs:simpleType>
                          </xs:attribute>
                      </xs:extension>
                  </xs:simpleContent>
              </xs:complexType>
          </xs:element>
      </xs:sequence>
  </xs:complexType>
  
</xs:schema>
