Repository: RockefellerArchiveCenter/DACSspace

Issue:
Add a RAC-specific schema
**Is your feature request related to a problem? Please describe.**
The DACS single-level required schema will fail for RAC resources because we do not have rights statements documented within archivesspace resource records, so the `metadata rights declarations` field in the resource JSON will always be blank.

**Describe the solution you'd like**
Add a RAC-specific schema that uses all of the DACS single-level required elements except for Rights Statements for Archival Description (`metadata rights declarations`)

**Additional context**
We should consider adding other local RAC-required notes: 
- Administrative/Biographical History Element
- Arrangement
- Conditions Governing Use
- Immediate Source of Acquisition


Discussion:

Patch:
diff --git a/fixtures/rac/invalid/missing_acqinfo.json b/fixtures/rac/invalid/missing_acqinfo.json
new file mode 100644
index 0000000..c3c3c28
--- /dev/null
+++ b/fixtures/rac/invalid/missing_acqinfo.json
@@ -0,0 +1,187 @@
+{
+    "lock_version": 26,
+    "title": "Rockefeller Foundation records",
+    "publish": true,
+    "restrictions": false,
+    "ead_id": "FA1619.xml",
+    "finding_aid_title": "A Guide to the Rockefeller Foundation records",
+    "finding_aid_filing_title": "Rockefeller Foundation records",
+    "created_by": "battalb",
+    "last_modified_by": "battalb",
+    "create_time": "2019-11-08T19:42:22Z",
+    "system_mtime": "2022-03-28T15:36:19Z",
+    "user_mtime": "2022-03-28T15:36:19Z",
+    "suppressed": false,
+    "is_slug_auto": false,
+    "id_0": "FA1619",
+    "level": "collection",
+    "finding_aid_language": "eng",
+    "finding_aid_script": "Latn",
+    "jsonmodel_type": "resource",
+    "external_ids": [],
+    "subjects": [],
+    "linked_events": [],
+    "extents": [
+        {
+            "lock_version": 0,
+            "number": "5408.47",
+            "container_summary": "Including paper records, digital media, and 1764 microfilm reels of open records.",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "portion": "whole",
+            "extent_type": "Cubic Feet",
+            "jsonmodel_type": "extent"
+        }
+    ],
+    "lang_materials": [
+        {
+            "lock_version": 0,
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "jsonmodel_type": "lang_material",
+            "notes": [],
+            "language_and_script": {
+                "lock_version": 0,
+                "created_by": "battalb",
+                "last_modified_by": "battalb",
+                "create_time": "2022-03-28T15:36:19Z",
+                "system_mtime": "2022-03-28T15:36:19Z",
+                "user_mtime": "2022-03-28T15:36:19Z",
+                "language": "eng",
+                "jsonmodel_type": "language_and_script"
+            }
+        }
+    ],
+    "dates": [
+        {
+            "lock_version": 0,
+            "expression": "1910-2001",
+            "begin": "1910",
+            "end": "2001",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "inclusive",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        },
+        {
+            "lock_version": 0,
+            "expression": "1924-1990",
+            "begin": "1924",
+            "end": "1990",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "bulk",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        }
+    ],
+    "external_documents": [],
+    "rights_statements": [],
+    "linked_agents": [
+        {
+            "role": "creator",
+            "relator": "aut",
+            "terms": [],
+            "ref": "/agents/corporate_entities/4884"
+        }
+    ],
+    "revision_statements": [],
+    "instances": [],
+    "deaccessions": [],
+    "related_accessions": [],
+    "classifications": [],
+    "notes": [
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "ac727babb59922bc7ee3d9d634e5147d",
+            "type": "accessrestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Records more than 20 years old are open for research with select materials restricted as noted. Brittle or damaged items are available at the discretion of RAC. Researchers interested in accessing digital media (floppy disks, CDs, DVDs, etc.) or audiovisual material (audio cassettes, VHS, etc.) in this collection must use an access surrogate. The original items may not be accessed because of preservation concerns. To request an access surrogate be made, or if you are unsure if there is an access surrogate, please contact an RAC archivist.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "f76c1d115e0ccf1785f0de273b06b00b",
+            "type": "bioghist",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The Rockefeller Foundation was established by act of the New York State Legislature approved by the Governor on May 14, 1913, \"to promote the well-being of mankind throughout the world.\" Between 1913 and 1928 the China Medical Board, the International Health Board, and the Division of Medical Education functioned as divisions of the Foundation, concentrating on the administration of programs in public health and medical education. A Division of Studies was created in 1923 to handle projects outside the medical field. These early years were experimental as the new foundation studied the methods of philanthropy and explored its relationships with other Rockefeller boards.\n\nAlthough the Rockefeller Foundation is the largest and best known philanthropy founded by the Rockefeller family, it was neither the first nor the last to be established. The Rockefeller Institute for Medical Research (1901), the General Education Board (1902), the Rockefeller Sanitary Commission for the Eradication of Hookworm Disease (1909), and the Bureau of Social Hygiene (1911) all existed earlier. When the Foundation was created, the Sanitary Commission was disbanded. After the establishment of the Foundation, the Laura Spelman Rockefeller Memorial (1918) and the International Education Board (1923) were created.\n\nThe Rockefeller boards and their programs were reconsidered and reorganized in 1927-1928 in order to avoid overlapping programs. The International Health Board of the Foundation was disbanded and an International Health Division was organized. The China Medical Board, Inc., was established as a separately incorporated institution, and the China Medical Board of the Foundation ceased to exist. The Division of Studies was dropped and the Division of Medical Education was phased out. The Laura Spelman Rockefeller Memorial was combined with the Foundation and the Spelman Fund of New York was chartered to continue activities of the LSRM that were not absorbed by the Foundation. The International Education Board was disbanded.\n\nAs a result of this reorganization, the Foundation adopted a program which included public health work (administered by the IHD), the advancement of knowledge in the medical and natural sciences (in part taken over from the IEB), the social sciences (formerly the field of the LSRM), and the humanities and arts (shared with the GEB). The Rockefeller Institute and the Bureau of Social Hygiene were not affected by the reorganization. The program adopted by the Foundation at this time remained basically the same for the next twenty years.\n\nAs its files accumulated, the Foundation maintained a card index recording the names of institutional and individual grantees and correspondents. A microfilm copy of this index is available at the Archive Center.\n\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "e2ce2f82d88a4c744ac548e992b2c2ca",
+            "type": "arrangement",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Arrangement is original based on a file structure created by the records management staff of the Rockefeller Foundation.\n\nThe main body of the Rockefeller Foundation records is organized into 21 record groups by file type. The record groups that contain high volumes of material are further subdivided into sub groups. These sub groups are then arranged in series (primarily by country/geographic area), and subseries (primarily alphabetically, with each assigned letter signifying a subject/program). \nIn addition to this record group structure, the RF records also consist of several special collections.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "8bec032d11d1b9991dcd241d8f3ef836",
+            "type": "scopecontent",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The collection comprehensively documents the philanthropic activities of the Rockefeller Foundation through available records in the areas of projects (grants), fellowships, general correspondence, administration, program and policy, board minutes and officers' actions, China Medical Board records, the International Health Board/Division (IHB/IHD), the activities of a variety of the Foundation's field offices, as well as officers' diaries, oral histories, and associated photographs and audiovisual materials.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a0",
+            "type": "userestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation has title, copyright, and literary rights in the collection, in so far as it holds them. Rockefeller Archive Center has authority to grant permission to cite and publish archival material from the collection.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        }
+    ],
+    "metadata_rights_declarations": [],
+    "uri": "/repositories/2/resources/13058",
+    "repository": {
+        "ref": "/repositories/2"
+    },
+    "tree": {
+        "ref": "/repositories/2/resources/13058/tree"
+    }
+}
diff --git a/fixtures/rac/invalid/missing_arrangement.json b/fixtures/rac/invalid/missing_arrangement.json
new file mode 100644
index 0000000..641a37c
--- /dev/null
+++ b/fixtures/rac/invalid/missing_arrangement.json
@@ -0,0 +1,190 @@
+{
+    "lock_version": 26,
+    "title": "Rockefeller Foundation records",
+    "publish": true,
+    "restrictions": false,
+    "ead_id": "FA1619.xml",
+    "finding_aid_title": "A Guide to the Rockefeller Foundation records",
+    "finding_aid_filing_title": "Rockefeller Foundation records",
+    "created_by": "battalb",
+    "last_modified_by": "battalb",
+    "create_time": "2019-11-08T19:42:22Z",
+    "system_mtime": "2022-03-28T15:36:19Z",
+    "user_mtime": "2022-03-28T15:36:19Z",
+    "suppressed": false,
+    "is_slug_auto": false,
+    "id_0": "FA1619",
+    "level": "collection",
+    "finding_aid_language": "eng",
+    "finding_aid_script": "Latn",
+    "jsonmodel_type": "resource",
+    "external_ids": [],
+    "subjects": [],
+    "linked_events": [],
+    "extents": [
+        {
+            "lock_version": 0,
+            "number": "5408.47",
+            "container_summary": "Including paper records, digital media, and 1764 microfilm reels of open records.",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "portion": "whole",
+            "extent_type": "Cubic Feet",
+            "jsonmodel_type": "extent"
+        }
+    ],
+    "lang_materials": [
+        {
+            "lock_version": 0,
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "jsonmodel_type": "lang_material",
+            "notes": [],
+            "language_and_script": {
+                "lock_version": 0,
+                "created_by": "battalb",
+                "last_modified_by": "battalb",
+                "create_time": "2022-03-28T15:36:19Z",
+                "system_mtime": "2022-03-28T15:36:19Z",
+                "user_mtime": "2022-03-28T15:36:19Z",
+                "language": "eng",
+                "jsonmodel_type": "language_and_script"
+            }
+        }
+    ],
+    "dates": [
+        {
+            "lock_version": 0,
+            "expression": "1910-2001",
+            "begin": "1910",
+            "end": "2001",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "inclusive",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        },
+        {
+            "lock_version": 0,
+            "expression": "1924-1990",
+            "begin": "1924",
+            "end": "1990",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "bulk",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        }
+    ],
+    "external_documents": [],
+    "rights_statements": [],
+    "linked_agents": [
+        {
+            "role": "creator",
+            "relator": "aut",
+            "terms": [],
+            "ref": "/agents/corporate_entities/4884"
+        }
+    ],
+    "revision_statements": [],
+    "instances": [],
+    "deaccessions": [],
+    "related_accessions": [],
+    "classifications": [],
+    "notes": [
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "ac727babb59922bc7ee3d9d634e5147d",
+            "type": "accessrestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Records more than 20 years old are open for research with select materials restricted as noted. Brittle or damaged items are available at the discretion of RAC. Researchers interested in accessing digital media (floppy disks, CDs, DVDs, etc.) or audiovisual material (audio cassettes, VHS, etc.) in this collection must use an access surrogate. The original items may not be accessed because of preservation concerns. To request an access surrogate be made, or if you are unsure if there is an access surrogate, please contact an RAC archivist.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "f76c1d115e0ccf1785f0de273b06b00b",
+            "type": "bioghist",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The Rockefeller Foundation was established by act of the New York State Legislature approved by the Governor on May 14, 1913, \"to promote the well-being of mankind throughout the world.\" Between 1913 and 1928 the China Medical Board, the International Health Board, and the Division of Medical Education functioned as divisions of the Foundation, concentrating on the administration of programs in public health and medical education. A Division of Studies was created in 1923 to handle projects outside the medical field. These early years were experimental as the new foundation studied the methods of philanthropy and explored its relationships with other Rockefeller boards.\n\nAlthough the Rockefeller Foundation is the largest and best known philanthropy founded by the Rockefeller family, it was neither the first nor the last to be established. The Rockefeller Institute for Medical Research (1901), the General Education Board (1902), the Rockefeller Sanitary Commission for the Eradication of Hookworm Disease (1909), and the Bureau of Social Hygiene (1911) all existed earlier. When the Foundation was created, the Sanitary Commission was disbanded. After the establishment of the Foundation, the Laura Spelman Rockefeller Memorial (1918) and the International Education Board (1923) were created.\n\nThe Rockefeller boards and their programs were reconsidered and reorganized in 1927-1928 in order to avoid overlapping programs. The International Health Board of the Foundation was disbanded and an International Health Division was organized. The China Medical Board, Inc., was established as a separately incorporated institution, and the China Medical Board of the Foundation ceased to exist. The Division of Studies was dropped and the Division of Medical Education was phased out. The Laura Spelman Rockefeller Memorial was combined with the Foundation and the Spelman Fund of New York was chartered to continue activities of the LSRM that were not absorbed by the Foundation. The International Education Board was disbanded.\n\nAs a result of this reorganization, the Foundation adopted a program which included public health work (administered by the IHD), the advancement of knowledge in the medical and natural sciences (in part taken over from the IEB), the social sciences (formerly the field of the LSRM), and the humanities and arts (shared with the GEB). The Rockefeller Institute and the Bureau of Social Hygiene were not affected by the reorganization. The program adopted by the Foundation at this time remained basically the same for the next twenty years.\n\nAs its files accumulated, the Foundation maintained a card index recording the names of institutional and individual grantees and correspondents. A microfilm copy of this index is available at the Archive Center.\n\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "8bec032d11d1b9991dcd241d8f3ef836",
+            "type": "scopecontent",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The collection comprehensively documents the philanthropic activities of the Rockefeller Foundation through available records in the areas of projects (grants), fellowships, general correspondence, administration, program and policy, board minutes and officers' actions, China Medical Board records, the International Health Board/Division (IHB/IHD), the activities of a variety of the Foundation's field offices, as well as officers' diaries, oral histories, and associated photographs and audiovisual materials.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a0",
+            "type": "userestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation has title, copyright, and literary rights in the collection, in so far as it holds them. Rockefeller Archive Center has authority to grant permission to cite and publish archival material from the collection.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a1",
+            "type": "acqinfo",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        }
+    ],
+    "metadata_rights_declarations": [],
+    "uri": "/repositories/2/resources/13058",
+    "repository": {
+        "ref": "/repositories/2"
+    },
+    "tree": {
+        "ref": "/repositories/2/resources/13058/tree"
+    }
+}
diff --git a/fixtures/rac/invalid/missing_bioghist.json b/fixtures/rac/invalid/missing_bioghist.json
new file mode 100644
index 0000000..9c11aa6
--- /dev/null
+++ b/fixtures/rac/invalid/missing_bioghist.json
@@ -0,0 +1,190 @@
+{
+    "lock_version": 26,
+    "title": "Rockefeller Foundation records",
+    "publish": true,
+    "restrictions": false,
+    "ead_id": "FA1619.xml",
+    "finding_aid_title": "A Guide to the Rockefeller Foundation records",
+    "finding_aid_filing_title": "Rockefeller Foundation records",
+    "created_by": "battalb",
+    "last_modified_by": "battalb",
+    "create_time": "2019-11-08T19:42:22Z",
+    "system_mtime": "2022-03-28T15:36:19Z",
+    "user_mtime": "2022-03-28T15:36:19Z",
+    "suppressed": false,
+    "is_slug_auto": false,
+    "id_0": "FA1619",
+    "level": "collection",
+    "finding_aid_language": "eng",
+    "finding_aid_script": "Latn",
+    "jsonmodel_type": "resource",
+    "external_ids": [],
+    "subjects": [],
+    "linked_events": [],
+    "extents": [
+        {
+            "lock_version": 0,
+            "number": "5408.47",
+            "container_summary": "Including paper records, digital media, and 1764 microfilm reels of open records.",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "portion": "whole",
+            "extent_type": "Cubic Feet",
+            "jsonmodel_type": "extent"
+        }
+    ],
+    "lang_materials": [
+        {
+            "lock_version": 0,
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "jsonmodel_type": "lang_material",
+            "notes": [],
+            "language_and_script": {
+                "lock_version": 0,
+                "created_by": "battalb",
+                "last_modified_by": "battalb",
+                "create_time": "2022-03-28T15:36:19Z",
+                "system_mtime": "2022-03-28T15:36:19Z",
+                "user_mtime": "2022-03-28T15:36:19Z",
+                "language": "eng",
+                "jsonmodel_type": "language_and_script"
+            }
+        }
+    ],
+    "dates": [
+        {
+            "lock_version": 0,
+            "expression": "1910-2001",
+            "begin": "1910",
+            "end": "2001",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "inclusive",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        },
+        {
+            "lock_version": 0,
+            "expression": "1924-1990",
+            "begin": "1924",
+            "end": "1990",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "bulk",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        }
+    ],
+    "external_documents": [],
+    "rights_statements": [],
+    "linked_agents": [
+        {
+            "role": "creator",
+            "relator": "aut",
+            "terms": [],
+            "ref": "/agents/corporate_entities/4884"
+        }
+    ],
+    "revision_statements": [],
+    "instances": [],
+    "deaccessions": [],
+    "related_accessions": [],
+    "classifications": [],
+    "notes": [
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "ac727babb59922bc7ee3d9d634e5147d",
+            "type": "accessrestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Records more than 20 years old are open for research with select materials restricted as noted. Brittle or damaged items are available at the discretion of RAC. Researchers interested in accessing digital media (floppy disks, CDs, DVDs, etc.) or audiovisual material (audio cassettes, VHS, etc.) in this collection must use an access surrogate. The original items may not be accessed because of preservation concerns. To request an access surrogate be made, or if you are unsure if there is an access surrogate, please contact an RAC archivist.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "e2ce2f82d88a4c744ac548e992b2c2ca",
+            "type": "arrangement",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Arrangement is original based on a file structure created by the records management staff of the Rockefeller Foundation.\n\nThe main body of the Rockefeller Foundation records is organized into 21 record groups by file type. The record groups that contain high volumes of material are further subdivided into sub groups. These sub groups are then arranged in series (primarily by country/geographic area), and subseries (primarily alphabetically, with each assigned letter signifying a subject/program). \nIn addition to this record group structure, the RF records also consist of several special collections.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "8bec032d11d1b9991dcd241d8f3ef836",
+            "type": "scopecontent",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The collection comprehensively documents the philanthropic activities of the Rockefeller Foundation through available records in the areas of projects (grants), fellowships, general correspondence, administration, program and policy, board minutes and officers' actions, China Medical Board records, the International Health Board/Division (IHB/IHD), the activities of a variety of the Foundation's field offices, as well as officers' diaries, oral histories, and associated photographs and audiovisual materials.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a0",
+            "type": "userestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation has title, copyright, and literary rights in the collection, in so far as it holds them. Rockefeller Archive Center has authority to grant permission to cite and publish archival material from the collection.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a1",
+            "type": "acqinfo",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        }
+    ],
+    "metadata_rights_declarations": [],
+    "uri": "/repositories/2/resources/13058",
+    "repository": {
+        "ref": "/repositories/2"
+    },
+    "tree": {
+        "ref": "/repositories/2/resources/13058/tree"
+    }
+}
diff --git a/fixtures/rac/invalid/missing_userestrict.json b/fixtures/rac/invalid/missing_userestrict.json
new file mode 100644
index 0000000..4af572e
--- /dev/null
+++ b/fixtures/rac/invalid/missing_userestrict.json
@@ -0,0 +1,187 @@
+{
+    "lock_version": 26,
+    "title": "Rockefeller Foundation records",
+    "publish": true,
+    "restrictions": false,
+    "ead_id": "FA1619.xml",
+    "finding_aid_title": "A Guide to the Rockefeller Foundation records",
+    "finding_aid_filing_title": "Rockefeller Foundation records",
+    "created_by": "battalb",
+    "last_modified_by": "battalb",
+    "create_time": "2019-11-08T19:42:22Z",
+    "system_mtime": "2022-03-28T15:36:19Z",
+    "user_mtime": "2022-03-28T15:36:19Z",
+    "suppressed": false,
+    "is_slug_auto": false,
+    "id_0": "FA1619",
+    "level": "collection",
+    "finding_aid_language": "eng",
+    "finding_aid_script": "Latn",
+    "jsonmodel_type": "resource",
+    "external_ids": [],
+    "subjects": [],
+    "linked_events": [],
+    "extents": [
+        {
+            "lock_version": 0,
+            "number": "5408.47",
+            "container_summary": "Including paper records, digital media, and 1764 microfilm reels of open records.",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "portion": "whole",
+            "extent_type": "Cubic Feet",
+            "jsonmodel_type": "extent"
+        }
+    ],
+    "lang_materials": [
+        {
+            "lock_version": 0,
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "jsonmodel_type": "lang_material",
+            "notes": [],
+            "language_and_script": {
+                "lock_version": 0,
+                "created_by": "battalb",
+                "last_modified_by": "battalb",
+                "create_time": "2022-03-28T15:36:19Z",
+                "system_mtime": "2022-03-28T15:36:19Z",
+                "user_mtime": "2022-03-28T15:36:19Z",
+                "language": "eng",
+                "jsonmodel_type": "language_and_script"
+            }
+        }
+    ],
+    "dates": [
+        {
+            "lock_version": 0,
+            "expression": "1910-2001",
+            "begin": "1910",
+            "end": "2001",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "inclusive",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        },
+        {
+            "lock_version": 0,
+            "expression": "1924-1990",
+            "begin": "1924",
+            "end": "1990",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "bulk",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        }
+    ],
+    "external_documents": [],
+    "rights_statements": [],
+    "linked_agents": [
+        {
+            "role": "creator",
+            "relator": "aut",
+            "terms": [],
+            "ref": "/agents/corporate_entities/4884"
+        }
+    ],
+    "revision_statements": [],
+    "instances": [],
+    "deaccessions": [],
+    "related_accessions": [],
+    "classifications": [],
+    "notes": [
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "ac727babb59922bc7ee3d9d634e5147d",
+            "type": "accessrestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Records more than 20 years old are open for research with select materials restricted as noted. Brittle or damaged items are available at the discretion of RAC. Researchers interested in accessing digital media (floppy disks, CDs, DVDs, etc.) or audiovisual material (audio cassettes, VHS, etc.) in this collection must use an access surrogate. The original items may not be accessed because of preservation concerns. To request an access surrogate be made, or if you are unsure if there is an access surrogate, please contact an RAC archivist.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "f76c1d115e0ccf1785f0de273b06b00b",
+            "type": "bioghist",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The Rockefeller Foundation was established by act of the New York State Legislature approved by the Governor on May 14, 1913, \"to promote the well-being of mankind throughout the world.\" Between 1913 and 1928 the China Medical Board, the International Health Board, and the Division of Medical Education functioned as divisions of the Foundation, concentrating on the administration of programs in public health and medical education. A Division of Studies was created in 1923 to handle projects outside the medical field. These early years were experimental as the new foundation studied the methods of philanthropy and explored its relationships with other Rockefeller boards.\n\nAlthough the Rockefeller Foundation is the largest and best known philanthropy founded by the Rockefeller family, it was neither the first nor the last to be established. The Rockefeller Institute for Medical Research (1901), the General Education Board (1902), the Rockefeller Sanitary Commission for the Eradication of Hookworm Disease (1909), and the Bureau of Social Hygiene (1911) all existed earlier. When the Foundation was created, the Sanitary Commission was disbanded. After the establishment of the Foundation, the Laura Spelman Rockefeller Memorial (1918) and the International Education Board (1923) were created.\n\nThe Rockefeller boards and their programs were reconsidered and reorganized in 1927-1928 in order to avoid overlapping programs. The International Health Board of the Foundation was disbanded and an International Health Division was organized. The China Medical Board, Inc., was established as a separately incorporated institution, and the China Medical Board of the Foundation ceased to exist. The Division of Studies was dropped and the Division of Medical Education was phased out. The Laura Spelman Rockefeller Memorial was combined with the Foundation and the Spelman Fund of New York was chartered to continue activities of the LSRM that were not absorbed by the Foundation. The International Education Board was disbanded.\n\nAs a result of this reorganization, the Foundation adopted a program which included public health work (administered by the IHD), the advancement of knowledge in the medical and natural sciences (in part taken over from the IEB), the social sciences (formerly the field of the LSRM), and the humanities and arts (shared with the GEB). The Rockefeller Institute and the Bureau of Social Hygiene were not affected by the reorganization. The program adopted by the Foundation at this time remained basically the same for the next twenty years.\n\nAs its files accumulated, the Foundation maintained a card index recording the names of institutional and individual grantees and correspondents. A microfilm copy of this index is available at the Archive Center.\n\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "e2ce2f82d88a4c744ac548e992b2c2ca",
+            "type": "arrangement",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Arrangement is original based on a file structure created by the records management staff of the Rockefeller Foundation.\n\nThe main body of the Rockefeller Foundation records is organized into 21 record groups by file type. The record groups that contain high volumes of material are further subdivided into sub groups. These sub groups are then arranged in series (primarily by country/geographic area), and subseries (primarily alphabetically, with each assigned letter signifying a subject/program). \nIn addition to this record group structure, the RF records also consist of several special collections.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "8bec032d11d1b9991dcd241d8f3ef836",
+            "type": "scopecontent",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The collection comprehensively documents the philanthropic activities of the Rockefeller Foundation through available records in the areas of projects (grants), fellowships, general correspondence, administration, program and policy, board minutes and officers' actions, China Medical Board records, the International Health Board/Division (IHB/IHD), the activities of a variety of the Foundation's field offices, as well as officers' diaries, oral histories, and associated photographs and audiovisual materials.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a1",
+            "type": "acqinfo",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        }
+    ],
+    "metadata_rights_declarations": [],
+    "uri": "/repositories/2/resources/13058",
+    "repository": {
+        "ref": "/repositories/2"
+    },
+    "tree": {
+        "ref": "/repositories/2/resources/13058/tree"
+    }
+}
diff --git a/fixtures/rac/valid/valid_resource.json b/fixtures/rac/valid/valid_resource.json
new file mode 100644
index 0000000..cd19c11
--- /dev/null
+++ b/fixtures/rac/valid/valid_resource.json
@@ -0,0 +1,203 @@
+{
+    "lock_version": 26,
+    "title": "Rockefeller Foundation records",
+    "publish": true,
+    "restrictions": false,
+    "ead_id": "FA1619.xml",
+    "finding_aid_title": "A Guide to the Rockefeller Foundation records",
+    "finding_aid_filing_title": "Rockefeller Foundation records",
+    "created_by": "battalb",
+    "last_modified_by": "battalb",
+    "create_time": "2019-11-08T19:42:22Z",
+    "system_mtime": "2022-03-28T15:36:19Z",
+    "user_mtime": "2022-03-28T15:36:19Z",
+    "suppressed": false,
+    "is_slug_auto": false,
+    "id_0": "FA1619",
+    "level": "collection",
+    "finding_aid_language": "eng",
+    "finding_aid_script": "Latn",
+    "jsonmodel_type": "resource",
+    "external_ids": [],
+    "subjects": [],
+    "linked_events": [],
+    "extents": [
+        {
+            "lock_version": 0,
+            "number": "5408.47",
+            "container_summary": "Including paper records, digital media, and 1764 microfilm reels of open records.",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "portion": "whole",
+            "extent_type": "Cubic Feet",
+            "jsonmodel_type": "extent"
+        }
+    ],
+    "lang_materials": [
+        {
+            "lock_version": 0,
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "jsonmodel_type": "lang_material",
+            "notes": [],
+            "language_and_script": {
+                "lock_version": 0,
+                "created_by": "battalb",
+                "last_modified_by": "battalb",
+                "create_time": "2022-03-28T15:36:19Z",
+                "system_mtime": "2022-03-28T15:36:19Z",
+                "user_mtime": "2022-03-28T15:36:19Z",
+                "language": "eng",
+                "jsonmodel_type": "language_and_script"
+            }
+        }
+    ],
+    "dates": [
+        {
+            "lock_version": 0,
+            "expression": "1910-2001",
+            "begin": "1910",
+            "end": "2001",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "inclusive",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        },
+        {
+            "lock_version": 0,
+            "expression": "1924-1990",
+            "begin": "1924",
+            "end": "1990",
+            "created_by": "battalb",
+            "last_modified_by": "battalb",
+            "create_time": "2022-03-28T15:36:19Z",
+            "system_mtime": "2022-03-28T15:36:19Z",
+            "user_mtime": "2022-03-28T15:36:19Z",
+            "date_type": "bulk",
+            "label": "creation",
+            "jsonmodel_type": "date"
+        }
+    ],
+    "external_documents": [],
+    "rights_statements": [],
+    "linked_agents": [
+        {
+            "role": "creator",
+            "relator": "aut",
+            "terms": [],
+            "ref": "/agents/corporate_entities/4884"
+        }
+    ],
+    "revision_statements": [],
+    "instances": [],
+    "deaccessions": [],
+    "related_accessions": [],
+    "classifications": [],
+    "notes": [
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "ac727babb59922bc7ee3d9d634e5147d",
+            "type": "accessrestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Records more than 20 years old are open for research with select materials restricted as noted. Brittle or damaged items are available at the discretion of RAC. Researchers interested in accessing digital media (floppy disks, CDs, DVDs, etc.) or audiovisual material (audio cassettes, VHS, etc.) in this collection must use an access surrogate. The original items may not be accessed because of preservation concerns. To request an access surrogate be made, or if you are unsure if there is an access surrogate, please contact an RAC archivist.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "f76c1d115e0ccf1785f0de273b06b00b",
+            "type": "bioghist",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The Rockefeller Foundation was established by act of the New York State Legislature approved by the Governor on May 14, 1913, \"to promote the well-being of mankind throughout the world.\" Between 1913 and 1928 the China Medical Board, the International Health Board, and the Division of Medical Education functioned as divisions of the Foundation, concentrating on the administration of programs in public health and medical education. A Division of Studies was created in 1923 to handle projects outside the medical field. These early years were experimental as the new foundation studied the methods of philanthropy and explored its relationships with other Rockefeller boards.\n\nAlthough the Rockefeller Foundation is the largest and best known philanthropy founded by the Rockefeller family, it was neither the first nor the last to be established. The Rockefeller Institute for Medical Research (1901), the General Education Board (1902), the Rockefeller Sanitary Commission for the Eradication of Hookworm Disease (1909), and the Bureau of Social Hygiene (1911) all existed earlier. When the Foundation was created, the Sanitary Commission was disbanded. After the establishment of the Foundation, the Laura Spelman Rockefeller Memorial (1918) and the International Education Board (1923) were created.\n\nThe Rockefeller boards and their programs were reconsidered and reorganized in 1927-1928 in order to avoid overlapping programs. The International Health Board of the Foundation was disbanded and an International Health Division was organized. The China Medical Board, Inc., was established as a separately incorporated institution, and the China Medical Board of the Foundation ceased to exist. The Division of Studies was dropped and the Division of Medical Education was phased out. The Laura Spelman Rockefeller Memorial was combined with the Foundation and the Spelman Fund of New York was chartered to continue activities of the LSRM that were not absorbed by the Foundation. The International Education Board was disbanded.\n\nAs a result of this reorganization, the Foundation adopted a program which included public health work (administered by the IHD), the advancement of knowledge in the medical and natural sciences (in part taken over from the IEB), the social sciences (formerly the field of the LSRM), and the humanities and arts (shared with the GEB). The Rockefeller Institute and the Bureau of Social Hygiene were not affected by the reorganization. The program adopted by the Foundation at this time remained basically the same for the next twenty years.\n\nAs its files accumulated, the Foundation maintained a card index recording the names of institutional and individual grantees and correspondents. A microfilm copy of this index is available at the Archive Center.\n\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "e2ce2f82d88a4c744ac548e992b2c2ca",
+            "type": "arrangement",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Arrangement is original based on a file structure created by the records management staff of the Rockefeller Foundation.\n\nThe main body of the Rockefeller Foundation records is organized into 21 record groups by file type. The record groups that contain high volumes of material are further subdivided into sub groups. These sub groups are then arranged in series (primarily by country/geographic area), and subseries (primarily alphabetically, with each assigned letter signifying a subject/program). \nIn addition to this record group structure, the RF records also consist of several special collections.\n",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "8bec032d11d1b9991dcd241d8f3ef836",
+            "type": "scopecontent",
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "The collection comprehensively documents the philanthropic activities of the Rockefeller Foundation through available records in the areas of projects (grants), fellowships, general correspondence, administration, program and policy, board minutes and officers' actions, China Medical Board records, the International Health Board/Division (IHB/IHD), the activities of a variety of the Foundation's field offices, as well as officers' diaries, oral histories, and associated photographs and audiovisual materials.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a0",
+            "type": "userestrict",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation has title, copyright, and literary rights in the collection, in so far as it holds them. Rockefeller Archive Center has authority to grant permission to cite and publish archival material from the collection.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        },
+        {
+            "jsonmodel_type": "note_multipart",
+            "persistent_id": "52e95d864bebffc53f3becd501c192a1",
+            "type": "acqinfo",
+            "rights_restriction": {
+                "local_access_restriction_type": []
+            },
+            "subnotes": [
+                {
+                    "jsonmodel_type": "note_text",
+                    "content": "Rockefeller Foundation.",
+                    "publish": true
+                }
+            ],
+            "publish": true
+        }
+    ],
+    "metadata_rights_declarations": [],
+    "uri": "/repositories/2/resources/13058",
+    "repository": {
+        "ref": "/repositories/2"
+    },
+    "tree": {
+        "ref": "/repositories/2/resources/13058/tree"
+    }
+}
diff --git a/fixtures/invalid/invalid_resource.json b/fixtures/single_level_required/invalid/invalid_resource.json
similarity index 100%
rename from fixtures/invalid/invalid_resource.json
rename to fixtures/single_level_required/invalid/invalid_resource.json
diff --git a/fixtures/invalid/no_accessrestrict.json b/fixtures/single_level_required/invalid/no_accessrestrict.json
similarity index 100%
rename from fixtures/invalid/no_accessrestrict.json
rename to fixtures/single_level_required/invalid/no_accessrestrict.json
diff --git a/fixtures/invalid/no_metadata_rights.json b/fixtures/single_level_required/invalid/no_metadata_rights.json
similarity index 100%
rename from fixtures/invalid/no_metadata_rights.json
rename to fixtures/single_level_required/invalid/no_metadata_rights.json
diff --git a/fixtures/invalid/userestrict_only.json b/fixtures/single_level_required/invalid/userestrict_only.json
similarity index 100%
rename from fixtures/invalid/userestrict_only.json
rename to fixtures/single_level_required/invalid/userestrict_only.json
diff --git a/fixtures/valid/valid_resource.json b/fixtures/single_level_required/valid/valid_resource.json
similarity index 100%
rename from fixtures/valid/valid_resource.json
rename to fixtures/single_level_required/valid/valid_resource.json
diff --git a/schemas/rac.json b/schemas/rac.json
new file mode 100644
index 0000000..ebf970e
--- /dev/null
+++ b/schemas/rac.json
@@ -0,0 +1,127 @@
+{
+    "$schema": "https://json-schema.org/2020-12/schema#",
+    "$id": "rac.json",
+    "type": "object",
+    "title": "DACSspace Rockefeller Archive Center Schema",
+    "required": [
+        "id_0",
+        "title",
+        "dates",
+        "extents",
+        "linked_agents",
+        "lang_materials"
+    ],
+    "properties": {
+        "id_0": {
+            "type": "string"
+        },
+        "title": {
+            "type": "string"
+        },
+        "dates": {
+            "type": "array",
+            "minItems": 1
+        },
+        "extents": {
+            "type": "array",
+            "minItems": 1
+        },
+        "linked_agents": {
+            "type": "array",
+            "minItems": 1
+        },
+        "notes": {
+            "type": "array",
+            "allOf": [
+              {
+                "contains": {
+                  "type": "object",
+                  "required": [
+                    "type"
+                  ],
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "const": "scopecontent"
+                    }
+                  }
+                }
+              },
+              {
+                "contains": {
+                  "type": "object",
+                  "required": [
+                    "type"
+                  ],
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "const": "accessrestrict"
+                    }
+                  }
+                }
+              },
+              {
+                "contains": {
+                  "type": "object",
+                  "required": [
+                    "type"
+                  ],
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "const": "bioghist"
+                    }
+                  }
+                }
+              },
+              {
+                "contains": {
+                  "type": "object",
+                  "required": [
+                    "type"
+                  ],
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "const": "arrangement"
+                    }
+                  }
+                }
+              },
+              {
+                "contains": {
+                  "type": "object",
+                  "required": [
+                    "type"
+                  ],
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "const": "userestrict"
+                    }
+                  }
+                }
+              },
+              {
+                "contains": {
+                  "type": "object",
+                  "required": [
+                    "type"
+                  ],
+                  "properties": {
+                    "type": {
+                      "type": "string",
+                      "const": "acqinfo"
+                    }
+                  }
+                }
+              }
+            ]
+        },
+        "lang_materials": {
+            "type": "array",
+            "minItems": 1
+        }
+    }
+}


Test patch:
diff --git a/tests/test_validator.py b/tests/test_validator.py
index 133f832..0e07b89 100644
--- a/tests/test_validator.py
+++ b/tests/test_validator.py
@@ -7,9 +7,6 @@ from jsonschema.exceptions import SchemaError
 
 from dacsspace.validator import Validator
 
-INVALID_FIXTURE_DIRECTORY = Path("fixtures", "invalid")
-VALID_FIXTURE_DIRECTORY = Path("fixtures", "valid")
-
 
 class TestValidator(unittest.TestCase):
     def test_schema(self):
@@ -39,36 +36,36 @@ class TestValidator(unittest.TestCase):
         # cleanup
         os.remove(test_schema_filepath)
 
-    def test_validator(self):
-        valid_fixtures = [
-            f for f in VALID_FIXTURE_DIRECTORY.iterdir() if (
-                f.is_file() and str(
-                    f.name).endswith("json"))]
-        for valid in valid_fixtures:
-            with open(valid, 'r') as v:
-                valid_json = json.load(v)
-                result = Validator(
-                    'single_level_required',
-                    None).validate_data(valid_json)
-            self.assertTrue(isinstance(result, dict))
-            self.assertEqual(result["valid"], True)
-        invalid_fixtures = [
-            f for f in INVALID_FIXTURE_DIRECTORY.iterdir() if (
+    def validate_files(self, fixture_dir, schema, valid):
+        """Validates files.
+
+        Args:
+            fixture_dir (pathlib.Path): a filepath for a directory containing
+                                        fixtures to be validated.
+            schema (str): a schema to validate against.
+            valid (boolean): the expected outcome of the validation process.
+        """
+        fixtures = [
+            f for f in fixture_dir.iterdir() if (
                 f.is_file() and str(
-                    f.name).endswith("json"))]
-        for invalid in invalid_fixtures:
-            with open(invalid, 'r') as i:
-                invalid_json = json.load(i)
-                result = Validator(
-                    'single_level_required',
-                    None).validate_data(invalid_json)
+                    f.name).endswith('json'))]
+        for fixture in fixtures:
+            with open(fixture, 'r') as v:
+                data = json.load(v)
+                result = Validator(schema, None).validate_data(data)
             self.assertTrue(isinstance(result, dict))
-            self.assertEqual(result["valid"], False)
-        for valid in valid_fixtures:
-            with open(valid, 'r') as v:
-                valid_json = json.load(v)
-                result = Validator(
-                    'single_level_required',
-                    None).validate_data(valid_json)
-            self.assertTrue(isinstance(result, dict))
-            self.assertEqual(result["valid"], True)
+            self.assertEqual(result["valid"], valid, result)
+
+    def test_single_level_required_schema(self):
+        """Asserts that the single_level_required schema validates fixtures as expected."""
+        self.validate_files(Path("fixtures", "single_level_required", "valid"),
+                            'single_level_required',
+                            True)
+        self.validate_files(Path("fixtures", "single_level_required", "invalid"),
+                            'single_level_required',
+                            False)
+
+    def test_rac_schema(self):
+        """Asserts that the RAC schema validates fixtures as expected."""
+        self.validate_files(Path("fixtures", "rac", "valid"), 'rac', True)
+        self.validate_files(Path("fixtures", "rac", "invalid"), 'rac', False)