<?xml version="1.0" encoding="UTF-8" ?>
<!--
    NamesforLife Citation XML Schema

    Copyright (c) 2024, The Regents of the University of California, through
    Lawrence Berkeley National Laboratory (subject to receipt of any required
    approvals from the U.S. Dept. of Energy). All rights reserved.

    CLOCKSS system has permission to ingest, preserve, and serve this Archival Unit.
    LOCKSS system has permission to collect, preserve, and serve this Archival Unit.

    This content is licensed under a Creative Commons Attribution 3.0 International license.
    https://creativecommons.org/licenses/by/3.0/
-->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:n4lc="http://www.namesforlife.com/citation" xmlns="http://namesforlife.com/ns/citation" targetNamespace="http://namesforlife.com/ns/citation" elementFormDefault="qualified">

    <!-- Abstracted from main schema to facilitate switching between citation models. -->
    <xs:complexType name="citationType">
        <xs:sequence>
            <xs:element name="authors" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:sequence>
                        <xs:element name="person-name" type="personNameType" minOccurs="0" maxOccurs="unbounded" />
                    </xs:sequence>
                </xs:complexType>
            </xs:element>
            <xs:element name="article-title" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="year" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="volume" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="fpage" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="lpage" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="source" minOccurs="0" maxOccurs="1">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="id" type="xs:integer" />
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
            <xs:element name="abbrev" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="issn" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="essn" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="pub-id" minOccurs="0" maxOccurs="unbounded">
                <xs:complexType>
                    <xs:simpleContent>
                        <xs:extension base="xs:string">
                            <xs:attribute name="pub-id-type" type="pubIdTypeEnumType" use="required" />
                        </xs:extension>
                    </xs:simpleContent>
                </xs:complexType>
            </xs:element>
        </xs:sequence>
        <xs:attribute name="model" use="optional" />
        <xs:attribute name="citation-type" type="citationTypeEnumType" use="required" />
    </xs:complexType>

    <xs:simpleType name="citationTypeEnumType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="journal" />
        </xs:restriction>
    </xs:simpleType>

    <xs:simpleType name="pubIdTypeEnumType">
        <xs:restriction base="xs:string">
            <xs:enumeration value="pmid" />
            <xs:enumeration value="doi" />
        </xs:restriction>
    </xs:simpleType>

    <xs:complexType name="personNameType">
        <xs:sequence>
            <xs:element name="surname" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="given-names" type="xs:string" minOccurs="0" maxOccurs="1" />
            <xs:element name="suffix" type="xs:string" minOccurs="0" maxOccurs="1" />
        </xs:sequence>
    </xs:complexType>

</xs:schema>
