1.  Introduction

This document describes an extension to EPP for the purpose of validating
academic degree holders. It is intended for use with a registry that only
allows registrations on behalf of holders of certain degree types.


2.  Extension Elements

2.1.  Client Commands

   The <degree> element is used in the EPP <check> command to
   determine whether the degree holder is eligible to purchase the
   checked domains. If the degree cannot be validated, all domains will
   show as unavailable.

   The <degree> element is used in the EPP <create> command to
   indicate the degree holder whom the domain is being purchased for.

   The number of domains that can be purchased on behalf of a single
   degree holder is a matter of repository policy. If the limit for a
   single degree holder has been reached, <check> commands using that
   degree holder will show all domains as unavailable.

2.2.  Degree Name

   The <degree:degree> element provides the degree being verified.
   The degrees supported by the server is a matter of repository policy.

2.3.  Identifying Information

   The <degree:firstName>, <degree:middleName> and <degree:lastName>
   elements are used to provide the degree holder's name at the time of
   graduation. The middle name is optional.

   The <degree:birthDate> element is used to provide the degree holder's
   date of birth, for identification purposes.

2.4.  School Codes

   The <degree:schoolCode> element refers to a unique school id code.
   By default these refer to the 6 digit school codes from
   the US Department of Education, which are available at:
   https://ifap.ed.gov/ifap/fedSchoolCodeList.jsp

   The "registry" attribute may be used specify a different
   registry of school codes in accordance with repository policy.

2.5.  Additional Information

   The <degree:additionalInfo> element may be used to supply additional
   supporting info for validating the degree, such as a legal name change.
   The allowed contents of this field are determined by repository policy.


3.  Examples

3.1.  EPP <check> Command

   C: <?xml version="1.0" encoding="utf-8" standalone="no"?>
   C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
   C:   <command>
   C:     <check>
   C:       <domain:check
   C:         xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
   C:         <domain:name>example.com</domain:name>
   C:         <domain:name>example.net</domain:name>
   C:         <domain:name>example.org</domain:name>
   C:       </domain:check>
   C:     </check>
   C:     <extension>
   C:       <degree:degree
   C:         xmlns:degree="urn:google:params:xml:ns:degree-1.0">
   C:         <degree:degree>PHD</degree:degree>
   C:         <degree:firstName>John</degree:firstName>
   C:         <degree:lastName>Smith</degree:lastName>
   C:         <degree:birthDate>1970-01-01Z</degree:birthDate>
   C:         <degree:schoolCode>123456</degree:schoolCode>
   C:       </degree:degree>
   C:     </extension>
   C:     <clTRID>ABC-12345</clTRID>
   C:   </command>
   C: </epp>

3.2.  EPP <create> Command

   C: <?xml version="1.0" encoding="utf-8" standalone="no"?>
   C: <epp xmlns="urn:ietf:params:xml:ns:epp-1.0">
   C:   <command>
   C:     <create>
   C:       <domain:create
   C:         xmlns:domain="urn:ietf:params:xml:ns:domain-1.0">
   C:         <domain:name>example.com</domain:name>
   C:         <domain:period unit="y">2</domain:period>
   C:         <domain:ns>
   C:           <domain:hostObj>ns1.example.net</domain:hostObj>
   C:           <domain:hostObj>ns2.example.net</domain:hostObj>
   C:         </domain:ns>
   C:         <domain:registrant>jd1234</domain:registrant>
   C:         <domain:contact type="admin">sh8013</domain:contact>
   C:         <domain:contact type="tech">sh8013</domain:contact>
   C:         <domain:authInfo>
   C:           <domain:pw>2fooBAR</domain:pw>
   C:         </domain:authInfo>
   C:       </domain:create>
   C:     </create>
   C:     <extension>
   C:       <degree:degree
   C:         xmlns:degree="urn:google:params:xml:ns:degree-1.0">
   C:         <degree:degree>PHD</degree:degree>
   C:         <degree:firstName>John</degree:firstName>
   C:         <degree:lastName>Smith</degree:lastName>
   C:         <degree:birthDate>1970-01-01Z</degree:birthDate>
   C:         <degree:schoolCode>123456</degree:schoolCode>
   C:       </degree:degree>
   C:     </extension>
   C:     <clTRID>ABC-12345</clTRID>
   C:   </command>
   C: </epp>


4.  Formal Syntax

   An EPP object mapping is specified in XML Schema notation.  The
   formal syntax presented here is a complete schema representation of
   the object mapping suitable for automated validation of EPP XML
   instances.

   Copyright (c) 2016 Google Inc. All rights reserved.

   BEGIN

   <?xml version="1.0" encoding="utf-8"?>
   <schema
       xmlns="http://www.w3.org/2001/XMLSchema"
       xmlns:degree="urn:google:params:xml:ns:degree-1.0"
       targetNamespace="urn:google:params:xml:ns:degree-1.0"
       elementFormDefault="qualified">

     <annotation>
       <documentation>
         Extensible Provisioning Protocol v1.0
         Domain name extension schema for validating academic degrees.
       </documentation>
     </annotation>

     <!-- Child elements found in EPP commands. -->
     <element name="degree" type="degree:degree" />

     <!-- Child elements for all commands -->
     <complexType name="degree">
       <all>
         <element name="degree" type="token" />
         <element name="firstName" type="normalizedString" />
         <element name="middleName" type="normalizedString" minOccurs="0" />
         <element name="lastName" type="normalizedString" />
         <element name="birthDate" type="date" />
         <element name="schoolCode">
           <complexType>
             <simpleContent>
               <extension base="token">
                 <attribute name="registry" type="string" default="USDOE" />
               </extension>
             </simpleContent>
           </complexType>
         </element>
         <element name="additionalInfo" type="string" minOccurs="0" />
       </all>
     </complexType>

   </schema>

   END


5.  Security Considerations

   The mapping extensions described in this document do not provide any
   security services beyond those described by EPP [RFC5730], the EPP
   domain name mapping [RFC5731], and protocol layers used by EPP.  The
   security considerations described in these other specifications apply
   to this specification as well.
