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]