From 885e634ee13e5eba73a6f02ea5186f0887ae65dd Mon Sep 17 00:00:00 2001 From: Keith Hazelton Date: Thu, 9 Apr 2020 19:55:10 -0500 Subject: [PATCH] xps upload --- README.adoc | 36 ++ attributes/attributeClasses.adoc | 63 +++ data/person1.json | 13 + data/person2.json | 21 + issues.adoc | 4 + references.adoc | 21 + schema/bannerSoMattributes.adoc | 109 ++++ schema/bannerSoMattributes.json | 94 ++++ schema/bannerSoMattributes.yaml | 76 +++ schema/bannerSoMjsonSchema.json | 768 ++++++++++++++++++++++++++++ schema/bannerSoMschema.adoc | 159 ++++++ schema/card.schema.json | 99 ++++ schema/card.schema.yml | 71 +++ schema/foo.json | 1 + schema/gaborMinimalPersonSchema.yml | 111 ++++ schema/minimalRegistryPerson.json | 83 +++ schema/tools.adoc | 5 + 17 files changed, 1734 insertions(+) create mode 100644 README.adoc create mode 100644 attributes/attributeClasses.adoc create mode 100644 data/person1.json create mode 100644 data/person2.json create mode 100644 issues.adoc create mode 100644 references.adoc create mode 100644 schema/bannerSoMattributes.adoc create mode 100644 schema/bannerSoMattributes.json create mode 100644 schema/bannerSoMattributes.yaml create mode 100644 schema/bannerSoMjsonSchema.json create mode 100644 schema/bannerSoMschema.adoc create mode 100644 schema/card.schema.json create mode 100644 schema/card.schema.yml create mode 100644 schema/foo.json create mode 100644 schema/gaborMinimalPersonSchema.yml create mode 100644 schema/minimalRegistryPerson.json create mode 100644 schema/tools.adoc diff --git a/README.adoc b/README.adoc new file mode 100644 index 0000000..d421ca6 --- /dev/null +++ b/README.adoc @@ -0,0 +1,36 @@ += Internet2 Trust and Identity Schema + +:Email: hazelton@internet2.edu +:Date: 2020-04-08 +:Revision: 04 +:SelfLink: https://github.internet2.edu/TIER/schema +:Editor: Keith Hazelton +:Email: hazelton@internet2.edu + +[NOTE] +==== +Revision: {Revision} + +{Date} + +Self-link: {SelfLink} + +Editor: {Editor}, {Email} +==== + +==== Person Schema + +Draft Minimal Registry Person Schema from InCommon Trusted Access Platform link:schema/minimalRegistryPerson.json[(json)] + +SOR-Registry Core Person Schema link:https://spaces.at.internet2.edu/display/cifer/SOR-Registry+Core+Schema+Specification[(wiki)] + + +==== Colorado School of Mines Banner-derived Person Schema and examples + +Example Banner Person Data Example in SPML link:schema/bannerSoMschema.adoc[(adoc)] + +Example Banner Person Data Example simplified link:schema/bannerSoMattributes.adoc[(adoc)] + +Example Banner Person Data Example in yaml link:schema/bannerSoMattributes.yaml[(yaml)] + +Example Banner Person Data Example in json link:schema/bannerSoMattributes.json[(json)] + +Derived JSON Schema for Banner Person Instances link:schema/bannerSoMjsonSchema.json[(json)] + +==== References link:references.adoc[(adoc)] + +==== Issues link:issues.adoc[(adoc)] + + diff --git a/attributes/attributeClasses.adoc b/attributes/attributeClasses.adoc new file mode 100644 index 0000000..b707b50 --- /dev/null +++ b/attributes/attributeClasses.adoc @@ -0,0 +1,63 @@ +Attribute Classes + +AccessibilityProfile + +Account + +Address + +Affiliation + +Age + +Anniversary + +Application + +Assurance + +BirthPlace + +Birthdate + +Certification + +Citizenship + +Clearance + +Contact + +Country + +Course + +DN + +Date + +DeathDate + +Description + +Email + +EmailMetadata + +Entitlement + +Ethnicity + +Format + +Gender + +Group + +HostName + +Identifier + +Jurisdiction + +Language + +Link + +Locale + +Location + +Manager + +Name + +Note + +Operational + +Organization + +Password + +Phone + +Photo + +PhysicalCharacteristic + +Pointer + +Position + +Preference + +Presence + +Privacy + +Profile + +Relationship + +Residency + +Role + +Salutation + +Search + +StateOrProvince + +StatusMessage + +SuperiorNode + +Tag + +Timezone + +URL + +VitalEvent + diff --git a/data/person1.json b/data/person1.json new file mode 100644 index 0000000..c412598 --- /dev/null +++ b/data/person1.json @@ -0,0 +1,13 @@ +{ +"name": { + "lastName": "Johnson", + "firstName": "Joe" + }, +"birthDate": "1965-08-10", +"username": "jjohnson", +"institutionalId": "34-765554", +"email": { + "emailAddress": "jjohnson@goo.edu", + "emailType": "primary" + } +} diff --git a/data/person2.json b/data/person2.json new file mode 100644 index 0000000..f995680 --- /dev/null +++ b/data/person2.json @@ -0,0 +1,21 @@ +{ +"name": { + "lastName": "Jansen", + "firstName": "Jo" + }, +"birthDate": "1955-12-10", +"username": "jjansen", +"institutionalId": "34-546877", +"identifier": [ + {"id": "357A225", + "source": "SIS" + }, + { + "id": "jansen121", + "source": "HR" + } ], +"email": { + "emailAddress": "jjansen@goo.edu", + "emailType": "primary" + } +} diff --git a/issues.adoc b/issues.adoc new file mode 100644 index 0000000..99c0831 --- /dev/null +++ b/issues.adoc @@ -0,0 +1,4 @@ +Current Issues +-------------- +- Create db schema to carry Banner person instances +- Choose approach for ConnID connector that inputs person JSON and provisions to LDAP diff --git a/references.adoc b/references.adoc new file mode 100644 index 0000000..0a31284 --- /dev/null +++ b/references.adoc @@ -0,0 +1,21 @@ +References +==== +This Repository +===== +* link:README.adoc[] +* link:attributes/attributeClasses.adoc[Attribute Classes that can be used to categorize individual attributes] + +External Links +===== +* https://json-schema.org/[Latest JSON Schema Specification link] +* https://spacetelescope.github.io/understanding-json-schema/UnderstandingJSONSchema.pdf[Understanding JSON Schema]; Good intro but somewhat dated: Refers to Draft 4, current is Draft 7 +* Phil Sturgeon’s https://philsturgeon.uk/api/2018/04/13/openapi-and-json-schema-divergence-solved/[two-part article] on +the convergence between http://json-schema.org/[JSON Schema] and https://www.openapis.org/[OAI 3] +* A little https://github.com/wework/json-schema-to-openapi-schema[NodeJS package] to convert JSON Schema to OpenAPI Schema Objects +* https://blog.readme.io/an-example-filled-guide-to-swagger-3-2/[A Visual Guide to What's New in OAI 3.0]; A good starting point +* https://editor.swagger.io/[Swagger Editor] +* https://app.swaggerhub.com/home[SWAGGERhub]: A good place to work collaboratively on schema; take the rendered server-side javacript and remove the Swagger branding +* Community-maintained https://github.com/OpenAPITools/openapi-generator/releases/tag/v3.0.0[Codegen packages] for OAI 3 API specifications; On Twitter as https://twitter.com/oas_generator[] +* link:schema/card.schema.json[] +* link:schema/card.schema.yml[] +* link:schema/gaborMinimalPersonSchema.yml[] + diff --git a/schema/bannerSoMattributes.adoc b/schema/bannerSoMattributes.adoc new file mode 100644 index 0000000..aaf2146 --- /dev/null +++ b/schema/bannerSoMattributes.adoc @@ -0,0 +1,109 @@ +=== bannerSoMattributes.adoc + +- - - +_2020-04-08 10:10 attribute list + +FROM bannerSchema.adoc + +body + +addRequest + + executionMode: ? + requestID: ? + returnData: ? + targetID: ? + + psoID + ID: ALPHA + targetID: ? + containerID/ + + containerID + ID: ? + targetID: ? + containerID/ + +data: + +UDCIdentity +UDCIdentifier: E286607965E09B09BC1183030991013099 + +PersonIdentity + PUBLISHER_NAME: Banner + action: UPDATE + + PersonName + FormattedName: given family + GivenName + FamilyName + Affix type:formOfAddress: Mr. + Affix type:qualification: Sr. + + Gender: Mmmm + + Birthdate + BirthDay: 1 + BirthMonth: 1 + BirthYear: 1997 + +PersonIdentity/ + +InstitutionalRoles + + institutionalrole + role: UGRAD + context: INTCOMP + institutionalrole/ + + institutionalrole + role: INTACCEPT + context: INTCOMP + institutionalrole/ + +Institutional Roles/ + +Extension + + Attribute + name: CWID + value: 1075463499 + + Attribute + name: PIDM + value: 44396499 + + Attribute + name: PIDM + value: 44396499 + + Attribute + name: APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO + value: CC|2015-07-28 14:32:49|202080|UG|1 + + Attribute + name: GOBTPAC_USER + value: GLEE + + Attribute + name: GOBTPAC_USER + value: GLEE + +Extension/ + +UDCIdentity/ + +data/ + +capabilityData + capabilityURI: ? + mustUnderstand: ? + +addRequest/ + +body/ + + + +- - - +_2020-04-08 10:10 references and links_ diff --git a/schema/bannerSoMattributes.json b/schema/bannerSoMattributes.json new file mode 100644 index 0000000..3c6e280 --- /dev/null +++ b/schema/bannerSoMattributes.json @@ -0,0 +1,94 @@ +{ + "addRequest": { + "executionMode": "x", + "requestID": "x", + "returnData": "x", + "targetID": "x", + "psoID": { + "ID": "ALPHA", + "targetID": "x", + "psoContainerID": null + }, + "containerID": { + "ID": "x", + "targetID": "x" + }, + "data": { + "UDCIdentity": { + "UDCIdentifier": "E286607965E09B09BC1183030991013099" + }, + "PersonIdentity": { + "PUBLISHER_NAME": "Banner", + "action": "UPDATE", + "PersonName": { + "FormattedName": "given family", + "GivenName": "x", + "FamilyName": "x", + "Affix typeFormOfAddress": "Mr.", + "Affix typeQualification": "Sr." + }, + "Gender": "M", + "Birthdate": { + "BirthDay": 1, + "BirthMonth": 1, + "BirthYear": 1997 + } + }, + "InstitutionalRoles": [ + { + "institutionalrole": { + "role": "UGRAD", + "context": "INTCOMP" + } + }, + { + "institutionalrole": null, + "role": "INTACCEPT", + "context": "INTCOMP" + } + ], + "Extension": [ + { + "Attribute": { + "name": "CWID", + "value": 1075463499 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499 + } + }, + { + "Attribute": { + "name": "APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO", + "value": "CC|2015-07-28 14:32:49|202080|UG|1" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + } + ] + }, + "capabilityData": { + "capabilityURI": "x", + "mustUnderstand": "x" + } + } +} diff --git a/schema/bannerSoMattributes.yaml b/schema/bannerSoMattributes.yaml new file mode 100644 index 0000000..afcc2cf --- /dev/null +++ b/schema/bannerSoMattributes.yaml @@ -0,0 +1,76 @@ +addRequest: + executionMode: x + requestID: x + returnData: x + targetID: x + + psoID: + ID: ALPHA + targetID: x + psoContainerID: NULL + + containerID: + ID: x + targetID: x + + data: + + UDCIdentity: + UDCIdentifier: E286607965E09B09BC1183030991013099 + + PersonIdentity: + PUBLISHER_NAME: Banner + action: UPDATE + + PersonName: + FormattedName: given family + GivenName: x + FamilyName: x + Affix typeFormOfAddress: Mr. + Affix typeQualification: Sr. + + Gender: M + + Birthdate: + BirthDay: 1 + BirthMonth: 1 + BirthYear: 1997 + + InstitutionalRoles: + + - institutionalrole: + role: UGRAD + context: INTCOMP + - institutionalrole: + role: INTACCEPT + context: INTCOMP + + Extension: + + - Attribute: + name: CWID + value: 1075463499 + + - Attribute: + name: PIDM + value: 44396499 + + - Attribute: + name: PIDM + value: 44396499 + + - Attribute: + name: APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO + value: CC|2015-07-28 14:32:49|202080|UG|1 + + - Attribute: + name: GOBTPAC_USER + value: GLEE + + - Attribute: + name: GOBTPAC_USER + value: GLEE + + capabilityData: + capabilityURI: x + mustUnderstand: x diff --git a/schema/bannerSoMjsonSchema.json b/schema/bannerSoMjsonSchema.json new file mode 100644 index 0000000..52f6719 --- /dev/null +++ b/schema/bannerSoMjsonSchema.json @@ -0,0 +1,768 @@ +{ + "$schema": "http://json-schema.org/draft-07/schema", + "$id": "http://id.internet2.edu/bannerSoM.json", + "type": "object", + "title": "Banner Person Schema", + "description": "This provides a JSON Schema 07 version of the implicit Banner Person Schema.", + "required": [ + "addRequest" + ], + "properties": { + "addRequest": { + "$id": "#/properties/addRequest", + "type": "object", + "title": "The Addrequest Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "psoID": { + "psoContainerID": null, + "ID": "ALPHA", + "targetID": "x" + }, + "containerID": { + "targetID": "x", + "ID": "x" + }, + "data": { + "InstitutionalRoles": [ + { + "institutionalrole": { + "context": "INTCOMP", + "role": "UGRAD" + } + }, + { + "institutionalrole": null, + "context": "INTCOMP", + "role": "INTACCEPT" + } + ], + "Extension": [ + { + "Attribute": { + "name": "CWID", + "value": 1075463499.0 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499.0 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499.0 + } + }, + { + "Attribute": { + "name": "APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO", + "value": "CC|2015-07-28 14:32:49|202080|UG|1" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + } + ], + "PersonIdentity": { + "Gender": "M", + "PUBLISHER_NAME": "Banner", + "action": "UPDATE", + "PersonName": { + "FormattedName": "given family", + "Affix typeFormOfAddress": "Mr.", + "Affix typeQualification": "Sr.", + "FamilyName": "x", + "GivenName": "x" + }, + "Birthdate": { + "BirthDay": 1.0, + "BirthMonth": 1.0, + "BirthYear": 1997.0 + } + }, + "UDCIdentity": { + "UDCIdentifier": "E286607965E09B09BC1183030991013099" + } + }, + "targetID": "x", + "executionMode": "x", + "requestID": "x", + "capabilityData": { + "capabilityURI": "x", + "mustUnderstand": "x" + }, + "returnData": "x" + } + ], + "required": [ + "executionMode", + "requestID", + "returnData", + "targetID", + "psoID", + "containerID", + "data", + "capabilityData" + ], + "properties": { + "executionMode": { + "$id": "#/properties/addRequest/properties/executionMode", + "type": "string", + "title": "The Executionmode Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "requestID": { + "$id": "#/properties/addRequest/properties/requestID", + "type": "string", + "title": "The Requestid Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "returnData": { + "$id": "#/properties/addRequest/properties/returnData", + "type": "string", + "title": "The Returndata Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "targetID": { + "$id": "#/properties/addRequest/properties/targetID", + "type": "string", + "title": "The Targetid Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "psoID": { + "$id": "#/properties/addRequest/properties/psoID", + "type": "object", + "title": "The Psoid Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "ID": "ALPHA", + "targetID": "x", + "psoContainerID": null + } + ], + "required": [ + "ID", + "targetID", + "psoContainerID" + ], + "properties": { + "ID": { + "$id": "#/properties/addRequest/properties/psoID/properties/ID", + "type": "string", + "title": "The Id Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "ALPHA" + ] + }, + "targetID": { + "$id": "#/properties/addRequest/properties/psoID/properties/targetID", + "type": "string", + "title": "The Targetid Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "psoContainerID": { + "$id": "#/properties/addRequest/properties/psoID/properties/psoContainerID", + "title": "The Psocontainerid Schema", + "description": "An explanation about the purpose of this instance.", + "default": null, + "examples": [ + null + ] + } + } + }, + "containerID": { + "$id": "#/properties/addRequest/properties/containerID", + "type": "object", + "title": "The Containerid Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "ID": "x", + "targetID": "x" + } + ], + "required": [ + "ID", + "targetID" + ], + "properties": { + "ID": { + "$id": "#/properties/addRequest/properties/containerID/properties/ID", + "type": "string", + "title": "The Id Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "targetID": { + "$id": "#/properties/addRequest/properties/containerID/properties/targetID", + "type": "string", + "title": "The Targetid Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + } + } + }, + "data": { + "$id": "#/properties/addRequest/properties/data", + "type": "object", + "title": "The Data Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "InstitutionalRoles": [ + { + "institutionalrole": { + "context": "INTCOMP", + "role": "UGRAD" + } + }, + { + "institutionalrole": null, + "context": "INTCOMP", + "role": "INTACCEPT" + } + ], + "Extension": [ + { + "Attribute": { + "name": "CWID", + "value": 1075463499.0 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499.0 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499.0 + } + }, + { + "Attribute": { + "name": "APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO", + "value": "CC|2015-07-28 14:32:49|202080|UG|1" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + } + ], + "PersonIdentity": { + "Birthdate": { + "BirthYear": 1997.0, + "BirthDay": 1.0, + "BirthMonth": 1.0 + }, + "Gender": "M", + "PUBLISHER_NAME": "Banner", + "action": "UPDATE", + "PersonName": { + "GivenName": "x", + "FormattedName": "given family", + "Affix typeFormOfAddress": "Mr.", + "Affix typeQualification": "Sr.", + "FamilyName": "x" + } + }, + "UDCIdentity": { + "UDCIdentifier": "E286607965E09B09BC1183030991013099" + } + } + ], + "required": [ + "UDCIdentity", + "PersonIdentity", + "InstitutionalRoles", + "Extension" + ], + "properties": { + "UDCIdentity": { + "$id": "#/properties/addRequest/properties/data/properties/UDCIdentity", + "type": "object", + "title": "The Udcidentity Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "UDCIdentifier": "E286607965E09B09BC1183030991013099" + } + ], + "required": [ + "UDCIdentifier" + ], + "properties": { + "UDCIdentifier": { + "$id": "#/properties/addRequest/properties/data/properties/UDCIdentity/properties/UDCIdentifier", + "type": "string", + "title": "The Udcidentifier Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "E286607965E09B09BC1183030991013099" + ] + } + } + }, + "PersonIdentity": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity", + "type": "object", + "title": "The Personidentity Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "Birthdate": { + "BirthDay": 1.0, + "BirthMonth": 1.0, + "BirthYear": 1997.0 + }, + "Gender": "M", + "PUBLISHER_NAME": "Banner", + "action": "UPDATE", + "PersonName": { + "Affix typeQualification": "Sr.", + "FamilyName": "x", + "GivenName": "x", + "FormattedName": "given family", + "Affix typeFormOfAddress": "Mr." + } + } + ], + "required": [ + "PUBLISHER_NAME", + "action", + "PersonName", + "Gender", + "Birthdate" + ], + "properties": { + "PUBLISHER_NAME": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PUBLISHER_NAME", + "type": "string", + "title": "The Publisher_name Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "Banner" + ] + }, + "action": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/action", + "type": "string", + "title": "The Action Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "UPDATE" + ] + }, + "PersonName": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PersonName", + "type": "object", + "title": "The Personname Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "GivenName": "x", + "FormattedName": "given family", + "Affix typeFormOfAddress": "Mr.", + "Affix typeQualification": "Sr.", + "FamilyName": "x" + } + ], + "required": [ + "FormattedName", + "GivenName", + "FamilyName", + "Affix typeFormOfAddress", + "Affix typeQualification" + ], + "properties": { + "FormattedName": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PersonName/properties/FormattedName", + "type": "string", + "title": "The Formattedname Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "given family" + ] + }, + "GivenName": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PersonName/properties/GivenName", + "type": "string", + "title": "The Givenname Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "FamilyName": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PersonName/properties/FamilyName", + "type": "string", + "title": "The Familyname Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "Affix typeFormOfAddress": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PersonName/properties/Affix typeFormOfAddress", + "type": "string", + "title": "The Affix typeformofaddress Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "Mr." + ] + }, + "Affix typeQualification": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/PersonName/properties/Affix typeQualification", + "type": "string", + "title": "The Affix typequalification Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "Sr." + ] + } + } + }, + "Gender": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/Gender", + "type": "string", + "title": "The Gender Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "M" + ] + }, + "Birthdate": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/Birthdate", + "type": "object", + "title": "The Birthdate Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "BirthDay": 1.0, + "BirthMonth": 1.0, + "BirthYear": 1997.0 + } + ], + "required": [ + "BirthDay", + "BirthMonth", + "BirthYear" + ], + "properties": { + "BirthDay": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/Birthdate/properties/BirthDay", + "type": "integer", + "title": "The Birthday Schema", + "description": "An explanation about the purpose of this instance.", + "default": 0, + "examples": [ + 1 + ] + }, + "BirthMonth": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/Birthdate/properties/BirthMonth", + "type": "integer", + "title": "The Birthmonth Schema", + "description": "An explanation about the purpose of this instance.", + "default": 0, + "examples": [ + 1 + ] + }, + "BirthYear": { + "$id": "#/properties/addRequest/properties/data/properties/PersonIdentity/properties/Birthdate/properties/BirthYear", + "type": "integer", + "title": "The Birthyear Schema", + "description": "An explanation about the purpose of this instance.", + "default": 0, + "examples": [ + 1997 + ] + } + } + } + } + }, + "InstitutionalRoles": { + "$id": "#/properties/addRequest/properties/data/properties/InstitutionalRoles", + "type": "array", + "title": "The Institutionalroles Schema", + "description": "An explanation about the purpose of this instance.", + "default": [], + "items": { + "$id": "#/properties/addRequest/properties/data/properties/InstitutionalRoles/items", + "type": "object", + "title": "The Items Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "institutionalrole": { + "context": "INTCOMP", + "role": "UGRAD" + } + }, + { + "institutionalrole": null, + "context": "INTCOMP", + "role": "INTACCEPT" + } + ], + "required": [ + "institutionalrole" + ], + "properties": { + "institutionalrole": { + "$id": "#/properties/addRequest/properties/data/properties/InstitutionalRoles/items/properties/institutionalrole", + "type": "object", + "title": "The Institutionalrole Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "context": "INTCOMP", + "role": "UGRAD" + } + ], + "required": [ + "role", + "context" + ], + "properties": { + "role": { + "$id": "#/properties/addRequest/properties/data/properties/InstitutionalRoles/items/properties/institutionalrole/properties/role", + "type": "string", + "title": "The Role Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "UGRAD" + ] + }, + "context": { + "$id": "#/properties/addRequest/properties/data/properties/InstitutionalRoles/items/properties/institutionalrole/properties/context", + "type": "string", + "title": "The Context Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "INTCOMP" + ] + } + } + } + } + } + }, + "Extension": { + "$id": "#/properties/addRequest/properties/data/properties/Extension", + "type": "array", + "title": "The Extension Schema", + "description": "An explanation about the purpose of this instance.", + "default": [], + "items": { + "$id": "#/properties/addRequest/properties/data/properties/Extension/items", + "type": "object", + "title": "The Items Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "Attribute": { + "name": "CWID", + "value": 1075463499.0 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499.0 + } + }, + { + "Attribute": { + "name": "PIDM", + "value": 44396499.0 + } + }, + { + "Attribute": { + "name": "APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO", + "value": "CC|2015-07-28 14:32:49|202080|UG|1" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + }, + { + "Attribute": { + "name": "GOBTPAC_USER", + "value": "GLEE" + } + } + ], + "required": [ + "Attribute" + ], + "properties": { + "Attribute": { + "$id": "#/properties/addRequest/properties/data/properties/Extension/items/properties/Attribute", + "type": "object", + "title": "The Attribute Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "name": "CWID", + "value": 1075463499.0 + } + ], + "required": [ + "name", + "value" + ], + "properties": { + "name": { + "$id": "#/properties/addRequest/properties/data/properties/Extension/items/properties/Attribute/properties/name", + "type": "string", + "title": "The Name Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "CWID" + ] + }, + "value": { + "$id": "#/properties/addRequest/properties/data/properties/Extension/items/properties/Attribute/properties/value", + "type": "integer", + "title": "The Value Schema", + "description": "An explanation about the purpose of this instance.", + "default": 0, + "examples": [ + 1075463499 + ] + } + } + } + } + } + } + } + }, + "capabilityData": { + "$id": "#/properties/addRequest/properties/capabilityData", + "type": "object", + "title": "The Capabilitydata Schema", + "description": "An explanation about the purpose of this instance.", + "default": {}, + "examples": [ + { + "mustUnderstand": "x", + "capabilityURI": "x" + } + ], + "required": [ + "capabilityURI", + "mustUnderstand" + ], + "properties": { + "capabilityURI": { + "$id": "#/properties/addRequest/properties/capabilityData/properties/capabilityURI", + "type": "string", + "title": "The Capabilityuri Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + }, + "mustUnderstand": { + "$id": "#/properties/addRequest/properties/capabilityData/properties/mustUnderstand", + "type": "string", + "title": "The Mustunderstand Schema", + "description": "An explanation about the purpose of this instance.", + "default": "", + "examples": [ + "x" + ] + } + } + } + } + } + } +} diff --git a/schema/bannerSoMschema.adoc b/schema/bannerSoMschema.adoc new file mode 100644 index 0000000..5f5a490 --- /dev/null +++ b/schema/bannerSoMschema.adoc @@ -0,0 +1,159 @@ +=== bannerSoMschema.adoc + +From Matt Brookover on slack, March 31 + +This is Banner SPML for an accepted student + +``` + + + + + + + + + + + + + + + + +E286607965E09B09BC1183030991013099 + + + +Alpha Trainee +Alpha +Trainee +Mr. +Sr. + + +M + +1 +1 +1997 + + + + +UGRAD +INTCOMP + + +INTACCEPT +INTCOMP + + + + + + +CWID +1075463499 + + +PIDM +44396499 + + +APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO +CC|2015-07-28 14:32:49|202080|UG|1 + +GOBTPAC_USER +GLEE + + + + + + + + + + + + +``` + +This is a student that was accepted, signaled their intent to enroll and registered an account: + +``` + + + + + + + + + + + + + +E286607965E09B09BC1183030991013099 + + +Alpha Trainee +Alpha +Trainee +Mr. +Sr. + +M + +1 +1 +1997 + + + + +UGRAD +INTCOMP + + +STUDENT +INTCOMP + + + + +CWID +1075463499 + + +PIDM +44396499 + + +APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO +IE|2015-07-28 14:33:39|202080|UG|1 + + +APDC_CODE||'|'||APDC_DATE||'|'||TERM_CODE_ENTRY||'|'||LEVL_CODE||'|'||APPL_NO +CC|2015-07-28 14:32:49|202080|UG|1 + + +EXT_ID +alphatrainee + + +GOBTPAC_USER +GLEE + + + + + + + + + + +``` diff --git a/schema/card.schema.json b/schema/card.schema.json new file mode 100644 index 0000000..7740a8b --- /dev/null +++ b/schema/card.schema.json @@ -0,0 +1,99 @@ +{ + "$id": "https://example.com/address.schema.json", + "$schema": "http://json-schema.org/draft-07/schema#", + "description": "A representation of a person, company, organization, or place", + "type": "object", + "required": [ "familyName", "givenName" ], + "properties": { + "fn": { + "description": "Formatted Name", + "type": "string" + }, + "familyName": { + "type": "string" + }, + "givenName": { + "type": "string" + }, + "additionalName": { + "type": "array", + "items": { + "type": "string" + } + }, + "honorificPrefix": { + "type": "array", + "items": { + "type": "string" + } + }, + "honorificSuffix": { + "type": "array", + "items": { + "type": "string" + } + }, + "nickname": { + "type": "string" + }, + "url": { + "type": "string" + }, + "email": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "tel": { + "type": "object", + "properties": { + "type": { + "type": "string" + }, + "value": { + "type": "string" + } + } + }, + "adr": { "$ref": "http://example.com/address.schema.json" }, + "geo": { "$ref": "http://example.com/geographical-location.schema.json" }, + "tz": { + "type": "string" + }, + "photo": { + "type": "string" + }, + "logo": { + "type": "string" + }, + "sound": { + "type": "string" + }, + "bday": { + "type": "string" + }, + "title": { + "type": "string" + }, + "role": { + "type": "string" + }, + "org": { + "type": "object", + "properties": { + "organizationName": { + "type": "string" + }, + "organizationUnit": { + "type": "string" + } + } + } + } +} diff --git a/schema/card.schema.yml b/schema/card.schema.yml new file mode 100644 index 0000000..0f5c31a --- /dev/null +++ b/schema/card.schema.yml @@ -0,0 +1,71 @@ +--- +"$id": https://example.com/address.schema.json +"$schema": http://json-schema.org/draft-07/schema# +description: A representation of a person, company, organization, or place +type: object +required: +- familyName +- givenName +properties: + fn: + description: Formatted Name + type: string + familyName: + type: string + givenName: + type: string + additionalName: + type: array + items: + type: string + honorificPrefix: + type: array + items: + type: string + honorificSuffix: + type: array + items: + type: string + nickname: + type: string + url: + type: string + email: + type: object + properties: + type: + type: string + value: + type: string + tel: + type: object + properties: + type: + type: string + value: + type: string + adr: + "$ref": http://example.com/address.schema.json + geo: + "$ref": http://example.com/geographical-location.schema.json + tz: + type: string + photo: + type: string + logo: + type: string + sound: + type: string + bday: + type: string + title: + type: string + role: + type: string + org: + type: object + properties: + organizationName: + type: string + organizationUnit: + type: string diff --git a/schema/foo.json b/schema/foo.json new file mode 100644 index 0000000..e3a74cf --- /dev/null +++ b/schema/foo.json @@ -0,0 +1 @@ +foo.json placeholder for JSON Schema specs for T&I resources diff --git a/schema/gaborMinimalPersonSchema.yml b/schema/gaborMinimalPersonSchema.yml new file mode 100644 index 0000000..9fd4bf2 --- /dev/null +++ b/schema/gaborMinimalPersonSchema.yml @@ -0,0 +1,111 @@ +--- +"$schema": http://json-schema.org/draft-07/schema# +definitions: {} +id: "http://id.internet2.edu/schemas/minPerson/v1" +properties: + beginTimestamp: + id: "/properties/beginTimestamp" + type: string + emails: + id: "/properties/emails" + items: + id: "/properties/emails/items" + properties: + value: + id: "/properties/emails/items/properties/value" + type: string + type: + id: "/properties/emails/items/properties/type" + type: string + type: object + type: array + phoneNumbers: + id: "/properties/phoneNumbers" + items: + id: "/properties/phoneNumbers/items" + properties: + value: + id: "/properties/phoneNumbers/items/properties/value" + type: string + primary: + id: "/properties/phoneNumbers/items/properties/primary" + type: boolean + type: + id: "/properties/phoneNumbers/items/properties/type" + type: string + type: object + type: array + dateCreated: + id: "/properties/dateCreated" + type: string + dateInactivated: + id: "/properties/dateInactivated" + type: string + endTimestamp: + id: "/properties/endTimestamp" + type: string + entityObjectId: + id: "/properties/entityObjectId" + type: string + entityType: + id: "/properties/entityType" + type: string + friendlyName: + description: A common name the entity, suitable for display purposes. + id: "/properties/friendlyName" + type: string + identifiers: + id: "/properties/identifiers" + items: + id: "/properties/identifiers/items" + properties: + userName: + description: A handle by which the person is known in + contexts of gaining access to services. + id: "/properties/identifiers/items/properties/userName" + type: string + type: object + type: array + names: + id: "/properties/names" + items: + id: "/properties/names/items" + properties: + givenName: + id: "/properties/names/items/properties/givenName" + type: string + formatted: + id: "/properties/names/items/properties/formatted" + type: string + familyName: + id: "/properties/names/items/properties/familyName" + type: string + middleName: + id: "/properties/names/items/properties/middleName" + type: string + honorificPrefix: + id: "/properties/names/items/properties/honorificPrefix" + type: string + honorificSuffix: + id: "/properties/names/items/properties/honorificSuffix" + type: string + type: + id: "/properties/names/items/properties/type" + type: string + type: object + type: array + protect: + id: "/properties/protect" + type: boolean + status: + description: This is used to track the lifecycle of an entity + through a series of states. + id: "/properties/status" + title: Status of entry + type: string + updatingEntityId: + id: "/properties/updatingEntityId" + type: string + updatingSOR: + id: "/properties/updatingSOR" + type: string diff --git a/schema/minimalRegistryPerson.json b/schema/minimalRegistryPerson.json new file mode 100644 index 0000000..42fdc58 --- /dev/null +++ b/schema/minimalRegistryPerson.json @@ -0,0 +1,83 @@ +{"title": "Minimal Registry Person Schema from Internet2 T&I", +"$schema": "http://json-schema.org/draft-07/schema#", +"description": "Minimal Registry Person Schema from Internet2 T&I", +"type": "object", + +"properties": { + + "name": { + "type": "object", + "properties": { + "familyName": {"type": "string"}, + "givenName": {"type": "string"}, + "middleName": {"type": "string"}, + "nameType": {"type": "string"} + } + }, + + "logonId": { + "type": "string", + "description": "same as identifier/network in Core Attribute Specification. Mapped to target system ID, (__NAME__, in ConnID)" + }, + + "iamId": { + "type": "string", + "description": "same as identifier/enterprise in Core Attribute Specification; created on inbound mapping(?)" + }, + + "priorId": { + "type": "array", + "items": { + "type": "string" + } + }, + + "sorId": { + "type": "array", + "items": { + "type": "object", + "properties": { + "source": {"type": "string"}, + "id": {"type": "string"} + } + } + }, + + "subjId": { + "type": "string", + "description": "Preferred personal pronoun" + }, + + "dateOfBirth": { + "type": "string", + "description": "Date of birth, string representtion of dateOfBirth in Core Attribute Specification" + }, + + "email": { + "type": "array", + "items": { + "type": "object", + "properties": { + "emailAddress": {"type": "string"}, + "emailType": {"type": "string"} } + } + }, + + "phone": { + "type": "array", + "description": "same as telephoneNumber in Core Attribute Specification", + "items": { + "type": "object", + "properties": { + "phoneNumber": {"type": "string"}, + "phoneType": {"type": "string"} + } + } + }, + + "personalPronoun": { + "type": "string", + "description": "Preferred personal pronoun"} + + } + } diff --git a/schema/tools.adoc b/schema/tools.adoc new file mode 100644 index 0000000..5c970c1 --- /dev/null +++ b/schema/tools.adoc @@ -0,0 +1,5 @@ +Schema Tools +============ + +- https://www.npmjs.com/package/ajv-cli[ajv-cli]: npm-installable CLI tool to validate JSON Schema specifications +- https://www.jsonschemavalidator.net[Online JSON Schema validator]