Skip to end of metadata
Go to start of metadata

Previous Version

This is a previous version of the Ed-Fi ODS / API. Visit the Ed-Fi Tech Docs home page for a link to the current version, or the Ed-Fi Technology Version Index for links to all versions. 

In this example the extensions needed by the organization are for a student transcript, and is a continuation of the How-To articles described in the Ed-Fi Data Standard v2.0 documentation, XML Schema - Extensions Framework Guide.

The steps can be summarized as:

Step 1. Author Ed-Fi Core Schema Extensions

Create an extension to the Ed-Fi Core Schema, called EXTENSION-Ed-Fi-Core.xsd, and place it in the C:\Ed-Fi-ODS-Implementation\Extensions\Schemas folder. 

More information about how the Ed-Fi Core schema extensions are created can be found in the following series of How-To articles in the Ed-Fi Data Standard v2.0 documentation :

The resulting XML Schema file is shown below. It is important to note that core schema extension file must be able to resolve the reference to the Ed-Fi Core Schema file.

EXTENSION-Ed-Fi-Core.xsd
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://ed-fi.org/0200" xmlns:ann="http://ed-fi.org/annotation" xmlns:altova="http://www.altova.com/xml-schema-extensions" targetNamespace="http://ed-fi.org/0200" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="..\..\..\Ed-Fi-ODS\Application\EdFi.Ods.CodeGen\App_Packages\Ed-Fi\Schema\Ed-Fi-Core.xsd"/>
    <xs:annotation><xs:documentation>===== Ed-Fi 2.0 Extensions =====</xs:documentation></xs:annotation>
    <xs:annotation><xs:documentation>===== Domain Entities =====</xs:documentation></xs:annotation>
    <xs:complexType name="EXTENSION-PostSecondaryOrganization">
		<xs:annotation><xs:appinfo><ann:TypeGroup>Domain Entity</ann:TypeGroup></xs:appinfo></xs:annotation>
        <xs:sequence>
            <xs:element name="NameOfInstitution" type="NameOfInstitution"/>
            <xs:element name="InstitutionLevel" type="EXTENSION-InstitutionLevelType"/>
            <xs:element name="InstitutionControl" type="EXTENSION-InstitutionControlType"/>
            <xs:element name="AcceptanceIndicator" type="xs:boolean"/>
        </xs:sequence>
    </xs:complexType>
    <xs:complexType name="EXTENSION-StudentAcademicRecordExtension">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Domain Entity</ann:TypeGroup></xs:appinfo></xs:annotation>
	   <xs:complexContent>
            <xs:extension base="EXTENSION-StudentAcademicRecordRestriction">
                <xs:sequence>
                    <xs:element name="ClassRanking" type="EXTENSION-ClassRankingExtension"/>
                    <xs:element name="SubmissionCertification" type="EXTENSION-SubmissionCertificationType"/>
                    <xs:element name="PostSecondaryOrganizationReference" type="EXTENSION-PostSecondaryOrganizationReferenceType"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="EXTENSION-StudentAcademicRecordRestriction">
	   <xs:annotation><xs:appinfo><ann:TypeGroup>Domain Entity</ann:TypeGroup></xs:appinfo></xs:annotation>
        <xs:complexContent>
            <xs:restriction base="StudentAcademicRecord">
                <xs:sequence>
                    <xs:element name="CumulativeEarnedCredits" type="Credits" minOccurs="0"/>
                    <xs:element name="CumulativeAttemptedCredits" type="Credits" minOccurs="0"/>
                    <xs:element name="CumulativeGradePointsEarned" type="GPA" minOccurs="0"/>
                    <xs:element name="CumulativeGradePointAverage" type="GPA" minOccurs="0"/>
                    <xs:element name="GradeValueQualifier" type="GradeValueQualifier" minOccurs="0"/>
                    <xs:element name="AcademicHonor" type="AcademicHonor" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="Recognition" type="Recognition" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="ProjectedGraduationDate" type="xs:date" minOccurs="0"/>
                    <xs:element name="SessionEarnedCredits" type="Credits" minOccurs="0"/>
                    <xs:element name="SessionAttemptedCredits" type="Credits" minOccurs="0"/>
                    <xs:element name="SessionGradePointsEarned" type="GPA" minOccurs="0"/>
                    <xs:element name="SessionGradePointAverage" type="GPA" minOccurs="0"/>
                    <xs:element name="Diploma" type="Diploma" minOccurs="0" maxOccurs="unbounded"/>
                    <xs:element name="StudentReference" type="StudentReferenceType"/>
                    <xs:element name="EducationOrganizationReference" type="EducationOrganizationReferenceType"/>
                    <xs:element name="SchoolYear" type="SchoolYearType"/>
                    <xs:element name="Term" type="TermDescriptorReferenceType"/>
                    <xs:element name="ReportCardReference" type="ReportCardReferenceType" minOccurs="0" maxOccurs="unbounded"/>
                </xs:sequence>
            </xs:restriction>
        </xs:complexContent>
    </xs:complexType>
    <xs:annotation><xs:documentation>===== Extended Reference =====</xs:documentation></xs:annotation>
    <xs:complexType name="EXTENSION-PostSecondaryOrganizationReferenceType">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Extended Reference</ann:TypeGroup></xs:appinfo></xs:annotation>
        <xs:complexContent>
            <xs:extension base="ReferenceType">
	           <xs:sequence>
	               <xs:element name="PostSecondaryOrganizationIdentity" type="EXTENSION-PostSecondaryOrganizationIdentityType" minOccurs="0"/>
	           </xs:sequence>
	       </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:complexType name="EXTENSION-PostSecondaryOrganizationIdentityType">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Identity</ann:TypeGroup></xs:appinfo></xs:annotation>
        <xs:sequence>
			<xs:element name="NameOfInstitution" type="NameOfInstitution"/>
	   </xs:sequence>
    </xs:complexType>
    <xs:annotation><xs:documentation>===== Common =====</xs:documentation></xs:annotation>
    <xs:complexType name="EXTENSION-ClassRankingExtension">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Common</ann:TypeGroup></xs:appinfo></xs:annotation>
		<xs:complexContent>
            <xs:extension base="ClassRanking">
                <xs:sequence>
                    <xs:element name="SpecialEducationGraduationStatus" type="EXTENSION-SpecialEducationGraduationStatusType"/>
                </xs:sequence>
            </xs:extension>
        </xs:complexContent>
    </xs:complexType>
    <xs:annotation><xs:documentation>===== Enumeration =====</xs:documentation></xs:annotation>
    <xs:simpleType name="EXTENSION-InstitutionControlType">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Enumeration</ann:TypeGroup></xs:appinfo></xs:annotation>
		   <xs:restriction base="xs:token">
            <xs:enumeration value="Public"/>
            <xs:enumeration value="PrivateNonProfit"/>
            <xs:enumeration value="PrivateForProfit"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="EXTENSION-InstitutionLevelType">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Enumeration</ann:TypeGroup></xs:appinfo></xs:annotation>
		   <xs:restriction base="xs:token">
            <xs:enumeration value="Four Year"/>
            <xs:enumeration value="Two To Four Year"/>
            <xs:enumeration value="Less Than Two Year"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="EXTENSION-SpecialEducationGraduationStatusType">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Enumeration</ann:TypeGroup></xs:appinfo></xs:annotation>
	   <xs:restriction base="xs:token">
            <xs:enumeration value="Completion of IEP and Reached Age 22"/>
            <xs:enumeration value="Completion of IEP and Access to Services, Employment, or Education"/>
            <xs:enumeration value="Completion of IEP and Demonstrated Self-Help Skills"/>
        </xs:restriction>
    </xs:simpleType>
    <xs:simpleType name="EXTENSION-SubmissionCertificationType">
        <xs:annotation><xs:appinfo><ann:TypeGroup>Enumeration</ann:TypeGroup></xs:appinfo></xs:annotation>
        <xs:restriction base="xs:token">
            <xs:enumeration value="Official"/>
            <xs:enumeration value="Unofficial"/>
        </xs:restriction>
    </xs:simpleType>
</xs:schema>

Step 2. Author a Custom Interchange Schema

Create an custom interchange file, called EXTENSION-Interchange-HSGeneratedStudentTranscript.xsd, and place it in the C:\Ed-Fi-ODS-Implementation\Extensions\Schemas folder. More information about how this file is created can be found in How To: Extend the Ed-Fi XML Schema (Part 5) 

The resulting custom interchange schema file is found below. It is important to note that the schemaLocation should be a valid reference the schema file that contains the extension definition (i.e., the EXTENSION-Ed-Fi-Core.xsd file created in the previous step).

EXTENSION-Interchange-HSGeneratedStudentTranscript.xsd
<?xml version="1.0" encoding="UTF-8"?>
<!-- (c)2015 Ed-Fi Alliance, LLC. All Rights Reserved. -->
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://ed-fi.org/0200" targetNamespace="http://ed-fi.org/0200" elementFormDefault="qualified" attributeFormDefault="unqualified">
    <xs:include schemaLocation="EXTENSION-Ed-Fi-Core.xsd"/>
    <xs:annotation>
        <xs:documentation>===== High School Generated Student Transcript Exchange Model  =====</xs:documentation>
    </xs:annotation>
    <xs:element name="InterchangeHSGeneratedStudentTranscript">
        <xs:annotation>
            <xs:documentation>This "concrete" exchange standard is to load a student transcript generated by a high school for a postsecondary institution, contining the following information:
Student identification and contact information
Standard NCLB demographics, omitting any details on disabilities.
K-12 enrollment history indicating the various schools attended
Academic record showing semester and final grades and credits earned for each secondary course taken
Scores for the yearly state standardized tests (summary scores only)
Yearly and final credits earned and grade point average (GPA)
Graduation plan and date graduated
The student transcript interchange should indicate whether it is an official or unofficial submission
Postsecondary Institution(s) that the student is attending
</xs:documentation>
        </xs:annotation>
        <xs:complexType>
            <xs:choice maxOccurs="unbounded">
                <xs:element name="Student" type="Student"/>
                <xs:element name="StudentSchoolAssociation" type="StudentSchoolAssociation"/>
                <xs:element name="StudentAcademicRecord" type="EXTENSION-StudentAcademicRecordExtension"/>
                <xs:element name="CourseTranscript" type="CourseTranscript"/>
                <xs:element name="ReportCard" type="ReportCard"/>
                <xs:element name="Grade" type="Grade"/>
                <xs:element name="StudentSectionAssociation" type="StudentSectionAssociation"/>
                <xs:element name="Section" type="Section"/>
                <xs:element name="CourseOffering" type="CourseOffering"/>
                <xs:element name="Course" type="Course"/>
                <xs:element name="StudentAssessment" type="StudentAssessment"/>
                <xs:element name="School" type="School"/>
                <xs:element name="PostSecondaryOrganization" type="EXTENSION-PostSecondaryOrganization"/>
            </xs:choice>
        </xs:complexType>
    </xs:element>
</xs:schema>

Step 3. Author Database Schema Extensions

Create an extension SQL script called 0001-Extensions.sql and place it in the C:\Ed-Fi-ODS-Implementation\Database\Structure\EdFi folder. This script defines the database schema for the extension.

0001-Extensions.sql
IF NOT EXISTS (SELECT 1 FROM sys.schemas WHERE name = 'extension')
BEGIN
    EXEC('CREATE SCHEMA [extension] AUTHORIZATION dbo')
END
GO
-- ********************************************************************************
--    InstitutionControlType
-- ********************************************************************************
CREATE TABLE extension.InstitutionControlType(
	InstitutionControlTypeId int IDENTITY(1,1) NOT NULL,
	CodeValue nvarchar(50) NOT NULL,
	[Description] nvarchar(1024) NOT NULL,
	ShortDescription nvarchar(450) NOT NULL,
	Id uniqueidentifier NOT NULL,
	LastModifiedDate datetime NOT NULL,
	CreateDate datetime NOT NULL,
	CONSTRAINT PK_InstitutionControlType PRIMARY KEY CLUSTERED (InstitutionControlTypeId ASC)
)  
ALTER TABLE extension.InstitutionControlType ADD CONSTRAINT [InstitutionControlType_DF_Id]  DEFAULT (newid()) FOR [Id]
ALTER TABLE extension.InstitutionControlType ADD CONSTRAINT [InstitutionControlType_DF_LastModifiedDate]  DEFAULT (getdate()) FOR [LastModifiedDate]
ALTER TABLE extension.InstitutionControlType ADD CONSTRAINT [InstitutionControlType_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO
-- ********************************************************************************
--    InstitutionLevelType
-- ********************************************************************************
CREATE TABLE extension.InstitutionLevelType(
	InstitutionLevelTypeId int IDENTITY(1,1) NOT NULL,
	CodeValue nvarchar(50) NOT NULL,
	[Description] nvarchar(1024) NOT NULL,
	ShortDescription nvarchar(450) NOT NULL,
	Id uniqueidentifier NOT NULL,
	LastModifiedDate datetime NOT NULL,
	CreateDate datetime NOT NULL,
	CONSTRAINT PK_InstitutionLevelType PRIMARY KEY CLUSTERED (InstitutionLevelTypeId ASC)
)  
ALTER TABLE extension.InstitutionLevelType ADD CONSTRAINT [InstitutionLevelType_DF_Id]  DEFAULT (newid()) FOR [Id]
ALTER TABLE extension.InstitutionLevelType ADD CONSTRAINT [InstitutionLevelType_DF_LastModifiedDate]  DEFAULT (getdate()) FOR [LastModifiedDate]
ALTER TABLE extension.InstitutionLevelType ADD CONSTRAINT [InstitutionLevelType_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO
-- ********************************************************************************
--    SpecialEducationGraduationStatusType
-- ********************************************************************************
CREATE TABLE extension.SpecialEducationGraduationStatusType(
	SpecialEducationGraduationStatusTypeId int IDENTITY(1,1) NOT NULL,
	CodeValue nvarchar(50) NOT NULL,
	[Description] nvarchar(1024) NOT NULL,
	ShortDescription nvarchar(450) NOT NULL,
	Id uniqueidentifier NOT NULL,
	LastModifiedDate datetime NOT NULL,
	CreateDate datetime NOT NULL,
	CONSTRAINT PK_SpecialEducationGraduationStatusType PRIMARY KEY CLUSTERED (SpecialEducationGraduationStatusTypeId ASC)
)  
ALTER TABLE extension.SpecialEducationGraduationStatusType ADD CONSTRAINT [SpecialEducationGraduationStatusType_DF_Id]  DEFAULT (newid()) FOR [Id]
ALTER TABLE extension.SpecialEducationGraduationStatusType ADD CONSTRAINT [SpecialEducationGraduationStatusType_DF_LastModifiedDate]  DEFAULT (getdate()) FOR [LastModifiedDate]
ALTER TABLE extension.SpecialEducationGraduationStatusType ADD CONSTRAINT [SpecialEducationGraduationStatusType_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO
-- ********************************************************************************
--    SubmissionCertificationType
-- ********************************************************************************
CREATE TABLE extension.SubmissionCertificationType(
	SubmissionCertificationTypeId int IDENTITY(1,1) NOT NULL,
	CodeValue nvarchar(50) NOT NULL,
	[Description] nvarchar(1024) NOT NULL,
	ShortDescription nvarchar(450) NOT NULL,
	Id uniqueidentifier NOT NULL,
	LastModifiedDate datetime NOT NULL,
	CreateDate datetime NOT NULL,
	CONSTRAINT PK_SubmissionCertificationType PRIMARY KEY CLUSTERED (SubmissionCertificationTypeId ASC)
)  
ALTER TABLE extension.SubmissionCertificationType ADD CONSTRAINT [SubmissionCertificationType_DF_Id]  DEFAULT (newid()) FOR [Id]
ALTER TABLE extension.SubmissionCertificationType ADD CONSTRAINT [SubmissionCertificationType_DF_LastModifiedDate]  DEFAULT (getdate()) FOR [LastModifiedDate]
ALTER TABLE extension.SubmissionCertificationType ADD CONSTRAINT [SubmissionCertificationType_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO
-- ********************************************************************************
--    PostSecondaryOrganization
-- ********************************************************************************
CREATE TABLE extension.PostSecondaryOrganization(
    [NameOfInstitution]           nvarchar(75)     NOT NULL,
	[InstitutionLevelTypeId]      int              NOT NULL,
	[InstitutionControlTypeId]    int              NOT NULL,
    [AcceptanceIndicator]      bit              NOT NULL,
	[Id]                          uniqueidentifier NOT NULL,
	[LastModifiedDate]            datetime         NOT NULL,
	[CreateDate]                  datetime         NOT NULL,
	CONSTRAINT PK_PostSecondaryOrganization PRIMARY KEY CLUSTERED (NameOfInstitution ASC)
)  
ALTER TABLE extension.PostSecondaryOrganization ADD CONSTRAINT [PostSecondaryOrganization_DF_Id]  DEFAULT (newid()) FOR [Id]
ALTER TABLE extension.PostSecondaryOrganization ADD CONSTRAINT [PostSecondaryOrganization_DF_LastModifiedDate]  DEFAULT (getdate()) FOR [LastModifiedDate]
ALTER TABLE extension.PostSecondaryOrganization ADD CONSTRAINT [PostSecondaryOrganization_CreateDate]  DEFAULT (getdate()) FOR [CreateDate]
GO
ALTER TABLE [extension].[PostSecondaryOrganization] ADD CONSTRAINT [FK_PostSecondaryOrganization_InstitutionLevelTypeId] FOREIGN KEY([InstitutionLevelTypeId])
REFERENCES [extension].[InstitutionLevelType] ([InstitutionLevelTypeId])
GO
ALTER TABLE [extension].[PostSecondaryOrganization] ADD CONSTRAINT [FK_PostSecondaryOrganization_InstitutionControlTypeId] FOREIGN KEY([InstitutionControlTypeId])
REFERENCES [extension].[InstitutionControlType] ([InstitutionControlTypeId])
GO

-- ********************************************************************************
--    StudentAcademicRecordExtension
-- ********************************************************************************
CREATE TABLE [extension].[StudentAcademicRecordExtension](
    [StudentUSI]                           int                 NOT NULL,
    [EducationOrganizationId]              int                 NOT NULL,
    [SchoolYear]                           smallint            NOT NULL,
    [TermDescriptorId]                     int                 NOT NULL,
    [NameOfInstitution]                    nvarchar(75)        NOT NULL,
    [SubmissionCertificationTypeId]        int                 NOT NULL,
    CONSTRAINT [PK_StudentAcademicRecordExtension] PRIMARY KEY CLUSTERED ([StudentUSI], [EducationOrganizationId], [SchoolYear], [TermDescriptorId])
)
GO
ALTER TABLE [extension].[StudentAcademicRecordExtension] ADD CONSTRAINT [FK_StudentAcademicRecordExtension_NameOfInstitution] FOREIGN KEY([NameOfInstitution])
REFERENCES [extension].[PostSecondaryOrganization] ([NameOfInstitution])
GO
ALTER TABLE [extension].[StudentAcademicRecordExtension] ADD CONSTRAINT [FK_StudentAcademicRecordExtension_SubmissionCertificationTypeId] FOREIGN KEY([SubmissionCertificationTypeId])
REFERENCES [extension].[SubmissionCertificationType] ([SubmissionCertificationTypeId])
GO
ALTER TABLE [extension].[StudentAcademicRecordExtension] ADD CONSTRAINT [FK_StudentAcademicRecordExtension_StudentAcademicRecord] 
    FOREIGN KEY ([StudentUSI], [EducationOrganizationId], [SchoolYear], [TermDescriptorId])
    REFERENCES [edfi].[StudentAcademicRecord]([StudentUSI], [EducationOrganizationId], [SchoolYear], [TermDescriptorId])
go

-- ********************************************************************************
--    StudentAcademicRecordClassRankingExtension
-- ********************************************************************************
CREATE TABLE [extension].[StudentAcademicRecordClassRankingExtension](
    [StudentUSI]                              int         NOT NULL,
    [SchoolYear]                              smallint    NOT NULL,
    [TermDescriptorId]                        int         NOT NULL,
    [EducationOrganizationId]                 int         NOT NULL,
	[SpecialEducationGraduationStatusTypeId]  int         NOT NULL,
    [CreateDate]               datetime    CONSTRAINT [StudentAcademicRecordClassRanking_DF_CreateDate] DEFAULT (getdate()) NOT NULL,
    CONSTRAINT [PK_StudentAcademicRecordClassRankingExtension] PRIMARY KEY CLUSTERED ([StudentUSI], [SchoolYear], [TermDescriptorId], [EducationOrganizationId])
)
GO
ALTER TABLE [extension].[StudentAcademicRecordClassRankingExtension] ADD CONSTRAINT [FK_StudentAcademicRecordClassRankingExtension_StudentAcademicRecordExtension] 
    FOREIGN KEY ([StudentUSI], [EducationOrganizationId], [SchoolYear], [TermDescriptorId])
    REFERENCES [extension].[StudentAcademicRecordExtension]([StudentUSI], [EducationOrganizationId], [SchoolYear], [TermDescriptorId])
go
ALTER TABLE [extension].[StudentAcademicRecordClassRankingExtension] ADD CONSTRAINT [FK_StudentAcademicRecordClassRankingExtension_SpecialEducationGraduationStatusTypeId] FOREIGN KEY([SpecialEducationGraduationStatusTypeId])
REFERENCES [extension].[SpecialEducationGraduationStatusType] ([SpecialEducationGraduationStatusTypeId])
GO

Step 4. Author API Metadata Extensions

Create an extension API metadata file called DomainMetadata-Extension.xml and place it in the C:\Ed-Fi-ODS-Implementation\Extensions\Metadata folder. This file will define the new types and domain entities, and ensure the code generation process will process the entity.

DomainMetadata-Extension.xml
<?xml version="1.0" encoding="utf-8" ?>
<AggregateExtensions>
 <Aggregate root="InstitutionControlType"><Entity table="InstitutionControlType" schema="extension" />
 </Aggregate>
 <Aggregate root="InstitutionLevelType">
 <Entity table="InstitutionLevelType" schema="extension" />
 </Aggregate>
 <Aggregate root="SpecialEducationGraduationStatusType">
 <Entity table="SpecialEducationGraduationStatusType" schema="extension" />
 </Aggregate>
 <Aggregate root="SubmissionCertificationType">
 <Entity table="SubmissionCertificationType" schema="extension" />
 </Aggregate>
 <Aggregate root="PostSecondaryOrganization">
 <Entity table="PostSecondaryOrganization" schema="extension" />
 </Aggregate>
</AggregateExtensions>

Step 5. Author Interchange Order Metadata Extensions

Create an extension API metadata file called InterchangeOrderMetadata-Extension.xml and place it in the C:\Ed-Fi-ODS-Implementation\Extensions\Metadata folder. This file defines the position of the new custom interchange in the load order, ensuring that the interchange loads correctly.

InterchangeOrderMetadata-Extension.xml
<?xml version="1.0" encoding="utf-8"?>
<!-- 
  Order of the Interchange elements and the Element elements is important. 
  This metadata will list all aggregate types that are part of the interchange. 
  This extension metadata will replace the core metadata and contain all interchanges and elements for the implementation.
-->
<Interchanges>
  <Interchange name="Descriptors" order="1">
    <Element name="GradeLevelDescriptor"/>
    <Element name="AcademicSubjectDescriptor"/>
  </Interchange>
  <Interchange name="Standards" order="2">
    <Element name="LearningStandard"/>
    <Element name="LearningObjective"/>
  </Interchange>
  
  <Interchange name="EducationOrganization" order="3">
    <Element name="StateEducationAgency"/>
    <Element name="EducationServiceCenter"/>
    <Element name="LocalEducationAgency"/>
    <Element name="School"/>
    <Element name="EducationOrganizationNetwork"/>
    <Element name="AccountabilityRating"/>
    <Element name="Location"/>
    <Element name="ClassPeriod"/>
    <Element name="Course"/>
    <Element name="Program"/>
    <Element name="FeederSchoolAssociation"/>
    <Element name="EducationOrganizationPeerAssociation"/>
    <Element name="EducationOrganizationNetworkAssociation"/>
  </Interchange>
  <Interchange name="EducationOrgCalendar" order="4">
    <Element name="CalendarDate"/>
    <Element name="GradingPeriod"/>
    <Element name="AcademicWeek"/>
    <Element name="Session"/>
  </Interchange>
  <Interchange name="MasterSchedule" order="5">
    <Element name="CourseOffering"/>
  </Interchange>
  <Interchange name="StaffAssociation" order="6">
    <Element name="Staff"/>
  </Interchange>
  <Interchange name="Student" order="7">
    <Element name="Student"/>
  </Interchange>
  
  <Interchange name="Parent" order="8">
    <Element name="Parent"/>
  </Interchange>
  
  <Interchange name="AssessmentMetadata" order="9">
    <Element name="AssessmentFamily"/>
    <Element name="Assessment"/>
    <Element name="AssessmentItem"/>
    <Element name="ObjectiveAssessment"/>
  </Interchange>
  <Interchange name="StudentCohort" order="10">
    <Element name="Cohort"/>
    <Element name="StudentCohortAssociation"/>
    <Element name="StaffCohortAssociation"/>
  </Interchange>
  <Interchange name="StudentAssessment" order="11">
    <Element name="StudentAssessment"/>
  </Interchange>
  <Interchange name="StudentIntervention" order="12">
    <Element name="Intervention"/>
    <Element name="StudentInterventionAssociation"/>
    <Element name="EducationContent"/>
    <Element name="InterventionPrescription"/>
    <Element name="InterventionStudy"/>
  </Interchange>
  <Interchange name="StudentTranscript" order="13">
    <Element name="StudentAcademicRecord"/>
    <Element name="CourseTranscript"/>
  </Interchange>
  <Interchange name="StudentProgram" order="14">
    <Element name="StudentProgramAssociation"/>
    <Element name="RestraintEvent"/>
    <Element name="StudentSpecialEducationProgramAssociation"/>
  </Interchange>
  <Interchange name="StudentEnrollment" order="15">
    <Element name="GraduationPlan"/>
  </Interchange>
  <Interchange name="StudentDiscipline" order="16">
    <Element name="DisciplineIncident"/>
    <Element name="StudentDisciplineIncidentAssociation"/>
    <Element name="DisciplineAction"/>
  </Interchange>
  <Interchange name="PostSecondaryEvent" order="17">
    <Element name="PostSecondaryEvent"/>
  </Interchange>
  <Interchange name="StudentAttendance" order="18">
  </Interchange>
  <Interchange name="StudentGrade" order="19">
    <Element name="Grade"/>
    <Element name="ReportCard"/>
    <Element name="CompetencyObjective"/>
    <Element name="LearningObjective"/>
    <Element name="StudentCompetencyObjective"/>
  </Interchange>
  <Interchange name="StudentGradebook" order="20">
    <Element name="GradebookEntry"/>
  </Interchange>
  
  <Interchange name="Finance" order="21">
    <Element name="Account"/>
    <Element name="Budget"/>
    <Element name="ContractedStaff"/>
    <Element name="Budget"/>
    <Element name="Actual"/>
    <Element name="Payroll"/>
  </Interchange>
  <Interchange name="HSGeneratedStudentTranscript" order="22">
	<Element name="Student"/>
	<Element name="StudentSchoolAssociation"/>
	<Element name="StudentAcademicRecord"/>
	<Element name="CourseTranscript"/>
	<Element name="ReportCard"/>
	<Element name="Grade"/>
	<Element name="StudentSectionAssociation"/>
	<Element name="Section"/>
	<Element name="CourseOffering"/>
	<Element name="Course"/>
	<Element name="StudentAssessment"/>
	<Element name="School"/>
    <Element name="PostSecondaryOrganization"/>	
  </Interchange>
</Interchanges>

Step 6. Run Code Generation and Verify Changes

Re-run the code generation steps outlined in the Getting Started Guide (i.e., from a PowerShell prompt run Initialize-PowershellForDevelopment.ps script, followed by the initdev command). Then run the application and view the Ed-Fi ODS / API using Swagger. The following new API resource should be visible:

 

 

 

Downloads

The following link is a ZIP archive containing source files for this extensibility sample.

Student Transcript Source Files