Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

A data domain (domain) can cross-reference another in its definition creating a relationship between two or more domains. In the following diagram, the student domain makes a cross-reference to the country domain:

When a student MDR data records is POSTed, the request body would include a reference to a specific country master   data record:

Code Block
{
	"studentID": "XYZ-123",
	"name": "Juana Masa",
	"homeCountry": "/mdrs/country:v1/MEX",
	"birthday": "946684800"
}


When the student MDR data record is referenced (i.e. GET)  the response will insert the appropriate country information:

...

The cross-reference can be to an entire master entire  data record (e.g. all of the properties for Mexico in the MDRdata record):

    "homeCountry": "/mdrs/country:v1/MEX",

Or for a specific property in the master the  data record (e.g. just the country name):

    "homeCountry": "/mdrs/country:v1/MEX/name",

Defining a Cross-Reference in the modelSchema

To reference another domain, include the cross-reference property definitions "type": "uri",   "uriType": "xref"  and "xrefLocation". The xrefLocation is the  MDR the  path to another  MDR another  data record or a property of the another MDRdata record.  

Code Block
languagejs
{
	"modelSchema": {
		"properties": {
			"<property1>": {
				"type": "uri",
				"uriType": "xref",
				"xrefLocation": "<path (or UUID) of a domain or domain property>",
				""
				...other item1 properties....
			},
			"<property2>": {
				 ... 
			}
		}
	}
}

xrefLocation

When defining a reference, the  domain path to the reference is used.  When POSTing data for the reference the MDR path is used. Some examples will help clarify:

Reference an

...

Entire  Data Record

When POSTing the reference, the xrefLocation entry in the model schema for referencing a complete MDR data record would be:

   "xrefLocation": "/domains/{domain-name}[:v<version>]"

...

When POSTing the data for the reference use the displayName of the desired MDR data record e.g.:

Code Block
"homeCountry": "/mdrs/country:v1/MEX"

Reference a Property in

...

Data Record

When POSTing the reference, the xrefLocation entry in the model schema for referencing a property of a MDR data record would be:

    "xrefLocation": "/domains/{domain-name}[:version][/property]"
e.g.
Code Block
"homeCountry": {
	"type": "uri",
	"uriType": "xref",
	"xrefLocation": "/domains/country:v1/name"
}

An Example

The following demonstrates in more detail the example where properties from an existing country domain is to be referenced by a new domain called students.  Assume the country domain contains many properties including the country name and the address for the immigration office. The student domain will reference the countries domain twice:

  1. In a property called homeCountry 
  2. A property called immigrationAddress

GET the address Property in the countries Model Schema

GET /domains/versions/<country-version-uuid>/properties
Code Block
languagejs
[
	{
			.
			.
		"propertyName": "immigrationAddress",
		"propertyType": "node",
				.
			.
	},
	{
			.
			.
		"propertyName": "name",
		"propertyType": "string"
			.
			.
	}
]

Create a New students Domain and Add the Cross-Reference To the First Version's Model Schema

POST /domains/versions/<students-domain-uuid>

...

Again, the students domain could just reference the country MDR data record once which would cause the entire country MDR data record to be inserted.

How to Establish Circular Cross-References

Consider the situation where a state domain needs to reference to country and country needs a reference back to multiple state MDRs data records.

This creates a "chicken-or-the-egg" problem since the schema for one will exist before the other. To remedy one of the domains can be updated after both are created. For example:

...