Скачать презентацию Sakai Course Management Service Ray Davis most slides Скачать презентацию Sakai Course Management Service Ray Davis most slides

282a15f08ad2d9ece23897ae83aeef0a.ppt

  • Количество слайдов: 47

Sakai Course Management Service Ray Davis (most slides by Josh Holtzman & Duffy Gillman) Sakai Course Management Service Ray Davis (most slides by Josh Holtzman & Duffy Gillman) University of California, Berkeley

Why CM API? We needed our LMS/CLE to associate • Courses, sections, departments with Why CM API? We needed our LMS/CLE to associate • Courses, sections, departments with sites • Courses, sections with groups • Instructors, students, TAs with permissions • Site data with registrar data

Who we? • • • MIT Stanford University of Arizona University of California, Berkeley Who we? • • • MIT Stanford University of Arizona University of California, Berkeley University of California, Davis A cast of dozens

CM Project Goals • Bring enrollment and course data into Sakai – Flexible enough CM Project Goals • Bring enrollment and course data into Sakai – Flexible enough to support many different course structures – Concrete enough to build tools and services upon • Solve course-site mismatch issue – Courses are not sites – Sites are not courses – More later… • Deliver new site admin tools…?

Why a new API? • IMS Enterprise? • OKI OSID? Why a new API? • IMS Enterprise? • OKI OSID?

Course Data • Three problems to solve – Definitions vary widely among institutions – Course Data • Three problems to solve – Definitions vary widely among institutions – Structures vary widely within institutions! – Business rules vary widely

Problem #1: Definitions vary widely among institutions Semester = Quarter = Term = Session Problem #1: Definitions vary widely among institutions Semester = Quarter = Term = Session Section = Class = Course Offering Our Solution: Use vague terms (with help from OKI OSID)

Problem #2: Structures vary widely within institutions Our Solution: (Hopefully) Flexible API Problem #2: Structures vary widely within institutions Our Solution: (Hopefully) Flexible API

Problem #3: Business rules vary widely Our Solution: Punt Problem #3: Business rules vary widely Our Solution: Punt

Added to Sakai • • Integration with Authz Integration with Section Management Integration with Added to Sakai • • Integration with Authz Integration with Section Management Integration with Site Management Integration with Roster

Automated Section Creation Automated Section Creation

Student enrollment data Student enrollment data

Site creation with CM Site creation with CM

Institutional Structures in the UI Institutional Structures in the UI

Don’t thank us yet • • Complex API Unfamiliar terminology Documentation lacking Sample implementations Don’t thank us yet • • Complex API Unfamiliar terminology Documentation lacking Sample implementations lacking Inconsistent OOTB authorizations Legacy code still hard to customize Didn’t replace Site admin tools

Decide integration strategy 1. Understand CM object model 2. Understand your institution’s model 3. Decide integration strategy 1. Understand CM object model 2. Understand your institution’s model 3. Understand what your users want out of an LMS / CME 4. See what data you can get from where

Use Case: Simple Course Use Case: Simple Course

Use Case: Large Lecture (multiple lectures and sections) Use Case: Large Lecture (multiple lectures and sections)

Institutional Decisions • • Sites managed by central admin? By instructors? Course Site & Institutional Decisions • • Sites managed by central admin? By instructors? Course Site & Section Creation – Automated, based on institutional structures • Requires either CM or some custom data feed – Manual (custom), as required by Instructors • • • Requires a CM implementation Requires a Section. Field. Manager implementation May require other customizations to Site Manage / Authz

Development approach 1. Decide mappings between institutional data & CM 2. Start from demo Development approach 1. Decide mappings between institutional data & CM 2. Start from demo DB or from scratch 3. WRITE INTEGRATION TESTS! 4. Configure the Group. Provider 1. How do institutional roles map to Sakai roles 2. How does enrollment status affect Sakai roles 3. Which Sakai roles take precedence over others 5. Implement Section. Field. Manager for Site Manage 6. Fork legacy code as needed : (

Group Provider • Exposes enterprise defined groups in Sakai – Map get. Group. Roles. Group Provider • Exposes enterprise defined groups in Sakai – Map get. Group. Roles. For. User(String user. Id); – Map get. User. Roles. For. Group(String id); – String preferred. Role(String one, String other); • Defines how to do compound group IDs – String pack. Id(String[] ids); – String[] unpack. Id(String id);

Group Provider (continued) • OOTB Implementation (in “providers”) maps hierarchical enterprise memberships to flat Group Provider (continued) • OOTB Implementation (in “providers”) maps hierarchical enterprise memberships to flat Sakai site & group memberships – Resolves roles in higher level structures – Resolves roles based on enrollment status – Resolves roles based on instructor status • You might not have to customize

CM impl. of the Group Provider (continued) CM impl. of the Group Provider (continued)

CM impl. of the Group Provider (continued) From https: //source. sakaiproject. org/svn/providers/branches/sakai_2 -4 -x/component/src/webapp/WEB CM impl. of the Group Provider (continued) From https: //source. sakaiproject. org/svn/providers/branches/sakai_2 -4 -x/component/src/webapp/WEB -INF/components. xml

Section Info integration • Instructors can switch between SIS and selfmanaged Sections • System Section Info integration • Instructors can switch between SIS and selfmanaged Sections • System Admins can choose among 4 configuration options – A) Exclusively manual. Sections are never automatically created for a site. – B) Manual by default. Sections are not automatically created for a site. – C) Automatic by default. Sections are automatically created for a site. – D) Exclusively automatic. Sections are always automatically created for a site.

Section. Field. Manager • Simple provider that translates from user input to Section EIDs Section. Field. Manager • Simple provider that translates from user input to Section EIDs in Site Manage

Course Management API • Seeks a common abstraction for course data across institutions • Course Management API • Seeks a common abstraction for course data across institutions • Essential data: Enrollment in institutionally recognized units • Design Abstraction – Avoiding model lock-in before enough community input is gathered – Intentionally anemic model

Course Management API (continued) • Parts – Two service interfaces • Read-only • Writable Course Management API (continued) • Parts – Two service interfaces • Read-only • Writable – Business objects • Anemic model by design – Factoring “for the wire” – Cross-service dependencies – Simplification of persistence layer caching/session management

Course Management Service Business Objects Course Management Service Business Objects

Academic. Session Read-only properties: Eid Provides a time-based context for Course. Offerings within a Academic. Session Read-only properties: Eid Provides a time-based context for Course. Offerings within a Canonical. Course. This will generally reflect semesters or terms (e. g. Fall and Spring), but may be used to represent any time-based ordering of Course. Offerings Title Description Start. Date End. Date Used for time-based ordering and determining which course data is current

Canonical. Course Read-only properties: Eid Title Description Reflects a curriculum or academic program that Canonical. Course Read-only properties: Eid Title Description Reflects a curriculum or academic program that is offered repeatedly.

Course. Offering Read-only properties: Represents an instance of a Canonical. Course offered during an Course. Offering Read-only properties: Represents an instance of a Canonical. Course offered during an Academic. Session. Eid Title Description Academic. Session Start. Date End. Date Enables Course. Offerings to have unique schedule. * *Roadmap plans to abstract dates into Schedule object where Academic. Session and Course. Offering would each have a Schedule.

Course. Set Read-only properties: Model a related group of Canonical. Course or Course. Offering Course. Set Read-only properties: Model a related group of Canonical. Course or Course. Offering objects. Used in API to group child course objects. [hierarchy] Eid Title Description Category Parent Institution-specific metadata for filtering/searching

Enrollment Read-only properties: User. Id Enrollment. Status Credits Grading. Scheme Represents the enrollment of Enrollment Read-only properties: User. Id Enrollment. Status Credits Grading. Scheme Represents the enrollment of a single student in a single Course. Offering or Section.

Membership Relates a user to a particular role within a course data unit. Read-only Membership Relates a user to a particular role within a course data unit. Read-only properties: User. Id Role e. g. Department Admin (Course. Set), T. A. (Course. Offering), lecturer (Course. Offering), Default Instructor (Canonical. Course)

Enrollment. Set Read-only properties: Eid Contains Enrollments for a particular Section or Course. Offering Enrollment. Set Read-only properties: Eid Contains Enrollments for a particular Section or Course. Offering and metadata about enrollment in general. Separated from Section as some institutions have Sections that do not carry credit themselves. Title Description Institution-specific metadata (e. g. lab, lecture, …) Category Default. Enrollment. Credits Official. Instructors Some registrars provide this data in aggregate; this applies to all contained enrollments.

Section Read-only properties: Eid Title Description Category Parent Enrollment. Set Represents a cohort or Section Read-only properties: Eid Title Description Category Parent Enrollment. Set Represents a cohort or group within a Course. Offering. There may be multiple Sections related to a Course. Offering. Sections may also contain other Sections as subsections.

Service Management Interfaces • Contain semantic ‘glue’ of the APIs • Two interfaces – Service Management Interfaces • Contain semantic ‘glue’ of the APIs • Two interfaces – Course. Management. Service (read-only) – Course. Management. Administration (writeable)

Course. Management. Service Set get. Child. Course. Sets(String parent. Eid); List get. Current. Academic. Course. Management. Service Set get. Child. Course. Sets(String parent. Eid); List get. Current. Academic. Sessions(); Set get. Course. Sets(); Academic. Session get. Academic. Session(String eid); Set get. Course. Set. Memberships(String eid); Course. Offering get. Course. Offering(String eid); Canonical. Course get. Canonical. Course(String eid); Set get. Equivalent. Course. Offerings(String course. Offering. Eid); Set get. Equivalent. Canonical. Courses(String canonical. Course. Eid); Set get. Course. Offering. Memberships(String course. Offering. Eid); Set get. Canonical. Courses(String course. Set. Eid; Set get. Course. Offerings(String course. Set. Eid); List get. Academic. Sessions(); Set find. Course. Offerings(String course. Set. Eid, String academic. Session. Eid);

Course. Management. Service (continued) Set find. Currently. Enrolled. Enrollment. Sets(String user. Id); Set find. Course. Management. Service (continued) Set find. Currently. Enrolled. Enrollment. Sets(String user. Id); Set find. Currently. Instructing. Enrollment. Sets (String user. Id); Set find. Instructing. Sections(String user. Id, String academic. Session. Eid); Set find. Current. Sections. With. Member(String user. Id);

Course. Management. Service (continued) List find. Course. Sets(String category); Enrollment. Set get. Enrollment. Set(String Course. Management. Service (continued) List find. Course. Sets(String category); Enrollment. Set get. Enrollment. Set(String eid); boolean is. Empty(String course. Set. Eid); Set get. Enrollment. Sets(String course. Offering. Eid); Section get. Section(String eid); Set get. Sections(String course. Offering. Eid); Set get. Enrollments(String enrollment. Set. Eid); Set get. Child. Sections(String parent. Section. Eid); Set get. Instructors. Of. Record. Ids(String enrollment. Set. Eid); Set get. Section. Memberships(String section. Eid); boolean is. Enrolled(String user. Id, Set enrollment. Set. Eids); String get. Section. Role(String section. Eid, String user. Id); boolean is. Enrolled(String user. Id, String eid); Enrollment find. Enrollment(String user. Id, String eid);

Course. Management. Administration boolean remove. Course. Offering. From. Course. S et(String cs. Eid, String Course. Management. Administration boolean remove. Course. Offering. From. Course. S et(String cs. Eid, String co. Eid); void create. Enrollment. Set(String eid, String title, String description, String category, …); void update. Enrollment. Set(Enrollment. Set enrollment. Set); void add. Or. Update. Enrollment(String user. Id, String enrollment. Set. Eid, String enrollment. Status, String credits, String grading. Scheme); boolean remove. Enrollment(String user. Id, String enrollment. Set. Eid); public void create. Section(String eid, String title, String description, String category, String parent. Section. Eid, String …); public void update. Section(Section section); void add. Or. Update. Course. Set. Membership(String user. Id, String role, String course. Set. Eid); boolean remove. Course. Set. Membership(String user. Id, String course. Set. Eid); void add. Or. Update. Course. Offering. Membership (String user. Id, String role, String course. Offering. Eid);

Course. Management. Administration (continued) public boolean remove. Course. Offering. Membership(String user. Id, String course. Course. Management. Administration (continued) public boolean remove. Course. Offering. Membership(String user. Id, String course. Offering. Eid); void create. Course. Set(String eid, String title, String description, String category, String parent. Course. Set. Eid); public void add. Or. Update. Section. Membership(String user. Id, String role, String section. Eid); void update. Course. Set(Course. Set course. Set); public boolean remove. Section. Membership(String user. Id, String section. Eid); void create. Canonical. Course(String eid, String title, String description); void update. Canonical. Course(Canonical. Course canonical. Course); void create. Academic. Session(String eid, String title, String description, Date start. Date, Date end. Date); void add. Canonical. Course. To. Course. Set(String course. Set. Eid, void update. Academic. Session(Academic. Session academic. Session); String canonical. Course. Eid); boolean remove. Canonical. Course. From. Course. Set(Str ing course. Set. Eid, String canonical. Course. Eid);

Course. Management. Administration (continued) void set. Equivalent. Canonical. Courses(Set canonical. Courses); boolean remove. Equivalency(Course. Course. Management. Administration (continued) void set. Equivalent. Canonical. Courses(Set canonical. Courses); boolean remove. Equivalency(Course. Offering course. Offering); boolean remove. Equivalency(Canonical. Course canonical. Course); void add. Course. Offering. To. Course. Set(String course. Set. Eid, String course. Offering. Eid); void create. Course. Offering(String eid, String title, String description, String academic. Session. Eid, String canonical. Course. Eid, Date start. Date, Date end. Date); void update. Course. Offering(Course. Offering course. Offering); void set. Equivalent. Course. Offerings(Set course. Offerings);

Course Management Implementation • Sakai 2. 4 comes with a Hibernate-based reference implementation • Course Management Implementation • Sakai 2. 4 comes with a Hibernate-based reference implementation • Institutions may: – Use the RI, populating the hibernate tables with the Course. Management. Administration API – Use the RI, customizing the hibernate mappings to your custom DB schema – Write a custom implementation of the CM API

CM Implementations • UC Berkeley – Spring JDBC against Oracle Views from SIS • CM Implementations • UC Berkeley – Spring JDBC against Oracle Views from SIS • Stanford – RI, loading tables via XML feeds from SIS • UC Davis – RI against Oracle views from SIS • Others, see http: //confluence. sakaiproject. org/confluence/x/Apc

Resources • Production Working Group http: //bugs. sakaiproject. org/confluence/display/PROD/Production+Work+Group • Old CM Project home Resources • Production Working Group http: //bugs. sakaiproject. org/confluence/display/PROD/Production+Work+Group • Old CM Project home http: //bugs. sakaiproject. org/confluence/display/CM/Home • UC Davis sample https: //source. sakaiproject. org/contrib/ucd/cm-ucd-impl • UC Berkeley sample https: //source. sakaiproject. org/contrib/ucb-integration-samples • Stanford description http: //bugs. sakaiproject. org/confluence/display/~caseyd/Stanford_Integration