<?xml version="1.0"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
        xmlns="https://medlineplus.gov/download/ghr-summaries-20250602.xsd"
        xmlns:html="http://www.w3.org/1999/xhtml"
        targetNamespace="https://medlineplus.gov/download/ghr-summaries-20250602.xsd"
        elementFormDefault="qualified"
        attributeFormDefault="unqualified" >

  <xs:import 
      namespace="http://www.w3.org/1999/xhtml"
      schemaLocation="https://www.w3.org/2002/08/xhtml/xhtml1-strict.xsd"/>

  <xs:complexType name="ghr-page">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="ghr-page" type="ghr-page"/>

  <xs:complexType name="gene-symbol">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="gene-symbol" type="gene-symbol"/>

  <xs:complexType name="name">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="name" type="name"/>

  <xs:group name="mitochondrial-dna-name">
    <xs:sequence>
      <xs:element name="name" fixed="mitochondrial DNA"/>
    </xs:sequence>
  </xs:group>

  <xs:simpleType name="chromosome-name">
    <xs:restriction base="xs:string">
      <xs:pattern value="1[0-9]?|2[0-3]?|[3-9]|X|Y"/>
    </xs:restriction>
  </xs:simpleType>

  <xs:complexType name="synonym">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="synonym" type="synonym"/>

  <xs:complexType name="synonym-list">
    <xs:sequence>
      <xs:element ref="synonym" minOccurs="1" maxOccurs="50"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="synonym-list" type="synonym-list"/>

  <xs:complexType name="html-blocks">
    <xs:sequence>
      <xs:element ref="html:p" minOccurs="1" maxOccurs="50"/>
    </xs:sequence>
  </xs:complexType>

  <xs:complexType name="text-role">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>
  
  <xs:element name="text-role" type="text-role"/>
  
  <xs:complexType name="text">
    <xs:sequence>
      <xs:element ref="text-role"/>
      <xs:element name="html">
        <xs:complexType>
          <xs:sequence>
            <xs:element ref="html:p" minOccurs="1" maxOccurs="50"/>
          </xs:sequence>
        </xs:complexType>
      </xs:element>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="text" type="text"/>

  <xs:complexType name="text-list">
    <xs:sequence>
      <xs:element ref="text" minOccurs="1" maxOccurs="50"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="text-list" type="text-list"/>

  <xs:complexType name="related-health-condition">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="ghr-page"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="related-health-condition" type="related-health-condition"/>

  <xs:complexType name="related-health-condition-list">
    <xs:sequence>
      <xs:element ref="related-health-condition" minOccurs="1" maxOccurs="50"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="related-health-condition-list" type="related-health-condition-list"/>

  <xs:complexType name="db">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="db" type="db"/>

  <xs:complexType name="key">
    <xs:simpleContent>
      <xs:extension base="xs:string"></xs:extension>
    </xs:simpleContent>
  </xs:complexType>

  <xs:element name="key" type="key"/>

  <xs:complexType name="db-key">
    <xs:sequence>
      <xs:element ref="db"/>
      <xs:element ref="key"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="db-key" type="db-key"/>

  <xs:complexType name="db-key-list">
    <xs:sequence>
      <xs:element ref="db-key" minOccurs="1" maxOccurs="1000"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="db-key-list" type="db-key-list"/>

  <xs:simpleType name="reviewed">
    <xs:restriction base="xs:gYearMonth">
      <xs:minInclusive value="2003-01"/>
      <xs:pattern value="[0-9]{4}-[0-9]{2}"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:element name="reviewed" type="reviewed"/>

  <xs:simpleType name="published">
    <xs:restriction base="xs:date">
      <xs:minInclusive value="2003-01-01"/>
      <xs:pattern value="[0-9]{4}-[0-9]{2}-[0-9]{2}"/>
    </xs:restriction>
  </xs:simpleType>
  
  <xs:element name="published" type="published"/>

  <xs:complexType name="gene-summary">
    <xs:sequence>
      <xs:element ref="gene-symbol"/>
      <xs:element ref="name"/>
      <xs:element ref="ghr-page"/>
      <xs:element ref="text-list" minOccurs="0"/>
      <xs:element ref="related-health-condition-list" minOccurs="0"/>
      <xs:element ref="synonym-list" minOccurs="0"/>
      <xs:element ref="db-key-list"/>
      <xs:element ref="reviewed" minOccurs="0"/>
      <xs:element ref="published"/>      
    </xs:sequence>
    <xs:attribute name="id" type="xs:integer"/>
  </xs:complexType>

  <xs:element name="gene-summary" type="gene-summary"/>
  <xs:complexType name="related-gene">
    <xs:sequence>
      <xs:element ref="gene-symbol"/>
      <xs:element ref="ghr-page"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:integer"/>
  </xs:complexType>

  <xs:element name="related-gene" type="related-gene"/>


  <xs:complexType name="related-chromosome">
    <xs:sequence>
      <xs:element name="name" type="chromosome-name"/>
      <xs:element ref="ghr-page"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="related-chromosome" type="related-chromosome"/>


  <xs:complexType name="related-mitochondrial-dna">
    <xs:sequence>
      <xs:group ref="mitochondrial-dna-name"/>
      <xs:element ref="ghr-page"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="related-mitochondrial-dna" type="related-mitochondrial-dna"/>

  <xs:complexType name="related-gene-list">
    <xs:sequence>
      <xs:choice minOccurs="0" maxOccurs="500">
        <xs:element ref="related-health-condition"/>
        <xs:element ref="related-gene"/>
        <xs:element ref="related-chromosome"/>
        <xs:element ref="related-mitochondrial-dna"/>
      </xs:choice>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="related-gene-list" type="related-gene-list"/>

  <xs:complexType name="inheritance-pattern">
    <xs:sequence>
      <xs:element name="code" type="xs:string"/>
      <xs:element name="memo" type="xs:string" minOccurs="0"/>
    </xs:sequence>
  </xs:complexType>

  <xs:element name="inheritance-pattern" type="inheritance-pattern"/>


  <xs:complexType name="inheritance-pattern-list">
    <xs:sequence>
      <xs:element ref="inheritance-pattern" maxOccurs="50"/>
    </xs:sequence>
  </xs:complexType>
  
  <xs:element name="inheritance-pattern-list" type="inheritance-pattern-list"/>
  
  <xs:complexType name="health-condition-summary">
    <xs:sequence>
      <xs:element ref="name"/>
      <xs:element ref="ghr-page"/>
      <xs:element ref="text-list"/>
      <xs:element ref="inheritance-pattern-list"/>
      <xs:element ref="related-gene-list" minOccurs="0"/>
      <xs:element ref="synonym-list" minOccurs="0"/>
      <xs:element ref="db-key-list" minOccurs="0"/>
      <xs:element ref="reviewed"/>
      <xs:element ref="published"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:integer"/>
  </xs:complexType>

  <xs:element name="health-condition-summary" type="health-condition-summary"/>

  <xs:complexType name="chromosome-summary">
    <xs:sequence>
      <xs:element name="name" type="chromosome-name"/>
      <xs:element ref="ghr-page"/>
      <xs:element ref="text-list"/>
      <xs:element ref="related-health-condition-list" minOccurs="0"/>
      <xs:element ref="db-key-list" minOccurs="0"/>
      <xs:element ref="reviewed"/>
      <xs:element ref="published"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:integer"/>
  </xs:complexType>

  <xs:element name="chromosome-summary" type="chromosome-summary"/>

  <xs:complexType name="mtdna-summary">
    <xs:sequence>
      <xs:group ref="mitochondrial-dna-name"/>
      <xs:element ref="ghr-page"/>
      <xs:element ref="text-list"/>
      <xs:element ref="related-health-condition-list" minOccurs="0"/>
      <xs:element ref="db-key-list" minOccurs="0"/>
      <xs:element ref="reviewed"/>
      <xs:element ref="published"/>
    </xs:sequence>
    <xs:attribute name="id" type="xs:integer"/>
  </xs:complexType>

  <xs:element name="mtdna-summary" type="mtdna-summary"/>

  <!-- Xerces disallows maxOccurs gt 5000. Therefore use 'unbounded'. -->
  <xs:element name="summaries">
    <xs:complexType>
      <xs:sequence>
        <xs:choice minOccurs="0" maxOccurs="unbounded">
          <xs:element ref="health-condition-summary"/>
          <xs:element ref="gene-summary"/>
          <xs:element ref="chromosome-summary"/>
          <xs:element ref="mtdna-summary"/>
        </xs:choice>
      </xs:sequence>
    </xs:complexType>
  </xs:element>
</xs:schema>
