<?xml version="1.0" encoding="UTF-8"?>
<!--
  CvasYouAre CV format v1.0 (cv-data.xml, attached to every PDF generated by CvasYouAre).
  Public URL: https://www.cvasyouare.com/cv/schema/v1
  Keep in sync with CvXmlSerializationService (WebApp and TemplateRenderService) and
  TemplateRenderService/cv-schema.xsd.

  Rules that match what CvasYouAre exports and imports:
  - children of every element may appear in any order (xs:all);
  - empty text is allowed for optional values, including dates;
  - dates are yyyy-MM-dd, ExportDate is an ISO 8601 date-time.
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:cv="https://www.cvasyouare.com/cv/schema/v1"
           targetNamespace="https://www.cvasyouare.com/cv/schema/v1"
           elementFormDefault="qualified">

  <!-- Root element -->
  <xs:element name="CvDocument">
    <xs:complexType>
      <xs:all>
        <xs:element name="Metadata" type="cv:MetadataType"/>
        <xs:element name="PersonalData" type="cv:PersonalDataType"/>
        <xs:element name="Summary" type="cv:SummaryType" minOccurs="0"/>
        <xs:element name="WorkExperienceList" type="cv:WorkExperienceListType" minOccurs="0"/>
        <xs:element name="EducationList" type="cv:EducationListType" minOccurs="0"/>
        <xs:element name="LanguageList" type="cv:LanguageListType" minOccurs="0"/>
        <xs:element name="SkillList" type="cv:SkillListType" minOccurs="0"/>
        <xs:element name="CertificationList" type="cv:CertificationListType" minOccurs="0"/>
        <xs:element name="PublicationList" type="cv:PublicationListType" minOccurs="0"/>
        <xs:element name="ReferenceList" type="cv:ReferenceListType" minOccurs="0"/>
      </xs:all>
      <xs:attribute name="version" type="xs:string" use="required"/>
    </xs:complexType>
  </xs:element>

  <!-- A yyyy-MM-dd date or an empty value -->
  <xs:simpleType name="EmptyType">
    <xs:restriction base="xs:string">
      <xs:length value="0"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:simpleType name="OptionalDateType">
    <xs:union memberTypes="xs:date cv:EmptyType"/>
  </xs:simpleType>

  <!-- CV language as shown on CvasYouAre: English, Italian, French, Spanish or German
       (free text, so CVs created before the list was fixed stay valid) -->
  <xs:simpleType name="CvLanguageType">
    <xs:restriction base="xs:string"/>
  </xs:simpleType>

  <!-- Metadata Type -->
  <xs:complexType name="MetadataType">
    <xs:all>
      <xs:element name="Id" type="xs:string"/>
      <xs:element name="Language" type="cv:CvLanguageType" minOccurs="0"/>
      <xs:element name="ExportDate" type="xs:dateTime"/>
      <xs:element name="ExportedBy" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Personal Data Type -->
  <xs:complexType name="PersonalDataType">
    <xs:all>
      <xs:element name="Name" type="xs:string" minOccurs="0"/>
      <xs:element name="Surname" type="xs:string" minOccurs="0"/>
      <xs:element name="Email" type="xs:string" minOccurs="0"/>
      <xs:element name="Phone" type="xs:string" minOccurs="0"/>
      <xs:element name="Mobile" type="xs:string" minOccurs="0"/>
      <xs:element name="Address" type="xs:string" minOccurs="0"/>
      <xs:element name="Nation" type="xs:string" minOccurs="0"/>
      <xs:element name="BornDate" type="cv:OptionalDateType" minOccurs="0"/>
      <xs:element name="Sex" type="xs:string" minOccurs="0"/>
      <xs:element name="Web" type="xs:string" minOccurs="0"/>
      <xs:element name="DriveLicense" type="xs:string" minOccurs="0"/>
      <xs:element name="ProfileImage" type="cv:ProfileImageType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Profile photo: base64 image data (a data: URI is accepted too) -->
  <xs:complexType name="ProfileImageType">
    <xs:simpleContent>
      <xs:extension base="xs:string">
        <xs:attribute name="encoding" type="xs:string" fixed="base64"/>
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <!-- Summary Type -->
  <xs:complexType name="SummaryType">
    <xs:all>
      <xs:element name="Title" type="xs:string" minOccurs="0"/>
      <xs:element name="Description" type="xs:string" minOccurs="0"/>
      <xs:element name="Notes" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Work Experience List Type -->
  <xs:complexType name="WorkExperienceListType">
    <xs:sequence>
      <xs:element name="WorkExperience" type="cv:WorkExperienceType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Work Experience Type -->
  <xs:complexType name="WorkExperienceType">
    <xs:all>
      <xs:element name="Position" type="xs:string"/>
      <xs:element name="Employer" type="xs:string"/>
      <xs:element name="AreaOfWork" type="xs:string" minOccurs="0"/>
      <xs:element name="Comment" type="xs:string" minOccurs="0"/>
      <xs:element name="DateFrom" type="xs:date"/>
      <xs:element name="DateTo" type="cv:OptionalDateType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Education List Type -->
  <xs:complexType name="EducationListType">
    <xs:sequence>
      <xs:element name="Education" type="cv:EducationType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Education Type -->
  <xs:complexType name="EducationType">
    <xs:all>
      <xs:element name="Institute" type="xs:string"/>
      <xs:element name="Qualification" type="xs:string"/>
      <xs:element name="Grade" type="xs:string" minOccurs="0"/>
      <xs:element name="DateFrom" type="xs:date"/>
      <xs:element name="DateTo" type="cv:OptionalDateType" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Language List Type -->
  <xs:complexType name="LanguageListType">
    <xs:sequence>
      <xs:element name="Language" type="cv:LanguageType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Language Type: levels use the CEFR scale (A1, A2, B1, B2, C1, C2) -->
  <xs:complexType name="LanguageType">
    <xs:all>
      <xs:element name="LanguageName" type="xs:string"/>
      <xs:element name="Read" type="xs:string" minOccurs="0"/>
      <xs:element name="Write" type="xs:string" minOccurs="0"/>
      <xs:element name="Listen" type="xs:string" minOccurs="0"/>
      <xs:element name="Conversation" type="xs:string" minOccurs="0"/>
      <xs:element name="Interaction" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Skill List Type -->
  <xs:complexType name="SkillListType">
    <xs:sequence>
      <xs:element name="Skill" type="cv:SkillType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Skill Type -->
  <xs:complexType name="SkillType">
    <xs:all>
      <xs:element name="Type" type="xs:string"/>
      <xs:element name="Description" type="xs:string"/>
    </xs:all>
  </xs:complexType>

  <!-- Certification List Type -->
  <xs:complexType name="CertificationListType">
    <xs:sequence>
      <xs:element name="Certification" type="cv:CertificationType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Certification Type -->
  <xs:complexType name="CertificationType">
    <xs:all>
      <xs:element name="CertificationName" type="xs:string"/>
      <xs:element name="Company" type="xs:string" minOccurs="0"/>
      <xs:element name="Logo" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Publication List Type -->
  <xs:complexType name="PublicationListType">
    <xs:sequence>
      <xs:element name="Publication" type="cv:PublicationType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Publication Type -->
  <xs:complexType name="PublicationType">
    <xs:all>
      <xs:element name="Type" type="xs:string" minOccurs="0"/>
      <xs:element name="Title" type="xs:string"/>
      <xs:element name="Publisher" type="xs:string" minOccurs="0"/>
      <xs:element name="Year" type="xs:string" minOccurs="0"/>
      <xs:element name="Collaboration" type="xs:string" minOccurs="0"/>
      <xs:element name="Isbn" type="xs:string" minOccurs="0"/>
      <xs:element name="Language" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

  <!-- Reference List Type -->
  <xs:complexType name="ReferenceListType">
    <xs:sequence>
      <xs:element name="Reference" type="cv:ReferenceType" minOccurs="0" maxOccurs="unbounded"/>
    </xs:sequence>
  </xs:complexType>

  <!-- Reference Type -->
  <xs:complexType name="ReferenceType">
    <xs:all>
      <xs:element name="ReferentName" type="xs:string" minOccurs="0"/>
      <xs:element name="ReferentSurname" type="xs:string" minOccurs="0"/>
      <xs:element name="ReferentRole" type="xs:string" minOccurs="0"/>
      <xs:element name="ReferentCompany" type="xs:string" minOccurs="0"/>
      <xs:element name="ReferentEmail" type="xs:string" minOccurs="0"/>
      <xs:element name="ReferentPhone" type="xs:string" minOccurs="0"/>
      <xs:element name="ReferenceDescription" type="xs:string" minOccurs="0"/>
      <xs:element name="LinkDescription" type="xs:string" minOccurs="0"/>
    </xs:all>
  </xs:complexType>

</xs:schema>
