Skip to main content

ism_data/
lib.rs

1// SPDX-License-Identifier: MIT-0 OR Unlicense
2
3//! Metadata-only meta-crate for the ODNI public XML schema set.
4//!
5//! Carries no data files. Use this crate to:
6//!
7//! - Enumerate the ODNI packages shipped by this workspace ([`PACKAGES`]).
8//! - Look up which package declares a given XML namespace
9//!   ([`package_for_namespace`], [`relpath_for_namespace`]).
10//! - Detect which packages are reachable via crates.io vs. git-only
11//!   ([`is_published`], [`resolve_namespace_published`], [`PUBLISHED_PACKAGES`]).
12//!
13//! For actual schema files + integrity verification, depend on the
14//! per-package crates `ism-{pkg}` (e.g. `ism-ismcat`, `ism-ic-edh`).
15//! Each per-package crate exposes `data_root()`, `package_root()`,
16//! `verify_integrity()`, and a `MANIFEST_DIGEST` const.
17//!
18//! Not every per-package crate is on crates.io. The workspace ships 59 of
19//! them, but only the subset listed in `tools/published.toml` is published
20//! (and exposed via [`PUBLISHED_PACKAGES`]). Consumers running in environments
21//! that can only reach crates.io (e.g. mirrored builds) should call
22//! [`resolve_namespace_published`] instead of [`resolve_namespace`] to fail
23//! loudly when codegen targets a git-only package.
24//!
25//! # Example
26//!
27//! ```no_run
28//! // In a consumer's build.rs
29//! let (pkg, rel) = ism_data::resolve_namespace("urn:schema:guide:schema:ismcat")
30//!     .expect("ISMCAT namespace is part of the ODNI set");
31//! assert_eq!(pkg, "ISMCAT");
32//! assert_eq!(rel, "Schema/ISMCAT/SchemaGuideSchema.xsd");
33//! // Combine with the per-package crate's data_root():
34//! //   let path = ism_ismcat::data_root().join(pkg).join(rel);
35//! ```
36
37#![deny(missing_docs)]
38
39/// Resolve an XML namespace URI to `(package_name, relpath_within_data_root)`.
40///
41/// Returns `None` if the namespace is not part of the ODNI schema set
42/// (e.g. upstream W3C namespaces that aren't redistributed by ODNI, or
43/// a typo).
44///
45/// `relpath_within_data_root` does NOT include the package name prefix —
46/// combine with the per-package crate's `data_root()` joined with the
47/// package name (or `package_root()`) to produce a filesystem path:
48///
49/// ```no_run
50/// if let Some((pkg, rel)) = ism_data::resolve_namespace("urn:schema:guide:schema:ismcat") {
51///     // rel = "Schema/ISMCAT/SchemaGuideSchema.xsd"
52///     // path = ism_ismcat::package_root().join(rel)
53/// }
54/// ```
55pub fn resolve_namespace(uri: &str) -> Option<(&'static str, &'static str)> {
56    NAMESPACE_TO_PACKAGE
57        .binary_search_by_key(&uri, |&(ns, _, _)| ns)
58        .ok()
59        .map(|i| (NAMESPACE_TO_PACKAGE[i].1, NAMESPACE_TO_PACKAGE[i].2))
60}
61
62/// Return just the package name that declares `uri`, or `None`.
63pub fn package_for_namespace(uri: &str) -> Option<&'static str> {
64    resolve_namespace(uri).map(|(pkg, _)| pkg)
65}
66
67/// Return just the relpath (within the package's data root) for `uri`, or `None`.
68pub fn relpath_for_namespace(uri: &str) -> Option<&'static str> {
69    resolve_namespace(uri).map(|(_, rel)| rel)
70}
71
72/// Iterate over every `(namespace, package, relpath)` known to the workspace.
73pub fn known_namespaces() -> impl Iterator<Item = (&'static str, &'static str, &'static str)> {
74    NAMESPACE_TO_PACKAGE.iter().copied()
75}
76
77/// Return the cargo crate name for a given ODNI package.
78///
79/// e.g. `crate_name_for("ISMCAT") == "ism-ismcat"`,
80/// `crate_name_for("IC-Docbook") == "ism-ic-docbook"`.
81pub fn crate_name_for(package: &str) -> Option<String> {
82    if PACKAGES.contains(&package) {
83        Some(format!("ism-{}", package.to_ascii_lowercase()))
84    } else {
85        None
86    }
87}
88
89/// Returns `true` if `package` ships a per-package crate on crates.io.
90///
91/// Use this in build scripts that want to fail loudly when codegen targets a
92/// namespace whose package is git-only (and therefore not reachable from
93/// crates.io-mirrored environments). Driven by `tools/published.toml`.
94pub fn is_published(package: &str) -> bool {
95    PUBLISHED_PACKAGES.binary_search(&package).is_ok()
96}
97
98/// Like [`resolve_namespace`], but returns `None` when the namespace's
99/// package is not on crates.io. Use to constrain codegen to crates.io-
100/// reachable packages.
101///
102/// ```no_run
103/// // In a build.rs running in a crates.io-only environment:
104/// let (pkg, rel) = ism_data::resolve_namespace_published("urn:us:gov:ic:edh")
105///     .expect("IC-EDH is published to crates.io");
106/// // ...
107/// ```
108pub fn resolve_namespace_published(uri: &str) -> Option<(&'static str, &'static str)> {
109    let (pkg, rel) = resolve_namespace(uri)?;
110    is_published(pkg).then_some((pkg, rel))
111}
112
113/// Names of the ODNI packages shipped under `data/`.
114///
115/// Each name corresponds to a per-package crate `ism-{lowercased}`
116/// (e.g. `ISMCAT` -> `ism-ismcat`, `IC-Docbook` -> `ism-ic-docbook`).
117pub const PACKAGES: &[&str] = &[
118    "ADD-ERM",
119    "ARH",
120    "ATOM",
121    "AUDIT",
122    "AUTHCAT",
123    "BASE-TDF",
124    "BOE",
125    "BRK-SRCH",
126    "CDR-RA",
127    "CDSM",
128    "CDSM-TDF",
129    "CEM",
130    "CSR",
131    "DED",
132    "DELIVER",
133    "DHZM",
134    "DHZM-TDF",
135    "DHZMC-TDF",
136    "DOMEX",
137    "ERM",
138    "FAC",
139    "FSD",
140    "IC-Docbook",
141    "IC-EDH",
142    "IC-GENC",
143    "IC-ID",
144    "IC-SF",
145    "ICO-ACES",
146    "ICO-NTK",
147    "INTDIS",
148    "IRM",
149    "ISM-ACES",
150    "ISM-Rollup",
151    "ISMCAT",
152    "ITS-MS",
153    "ITS-OM",
154    "LIC",
155    "MAC",
156    "MANAGE",
157    "MIME",
158    "MN",
159    "MNT",
160    "NTK",
161    "NTK-ACES",
162    "OC-NTK-ACES",
163    "PM",
164    "PMA",
165    "QM",
166    "ROLE",
167    "RR-ID",
168    "RR-SM",
169    "RevRecall",
170    "UIAS",
171    "UIAS-APCS",
172    "USAgency",
173    "VIRT",
174    "WSS-HLG",
175    "WSS-SIGENC",
176    "Whitelist",
177];
178
179/// Names of ODNI packages currently published to crates.io as `ism-{lower}`
180/// crates, sorted for binary search. Subset of [`PACKAGES`].
181///
182/// An empty slice means *no per-package crates* are on crates.io yet — only
183/// the meta crate (`ism-data`) is — and consumers must use git dependencies
184/// for any per-package crate they need. Driven by `tools/published.toml`;
185/// regenerated by `tools/sync_published.py`. Do not edit by hand.
186// ----- BEGIN GENERATED: PUBLISHED_PACKAGES -----
187pub const PUBLISHED_PACKAGES: &[&str] = &[
188    "ISMCAT",
189];
190// ----- END GENERATED: PUBLISHED_PACKAGES -----
191
192/// Sorted (namespace, package, relpath under that package) triples.
193/// 235 entries.
194const NAMESPACE_TO_PACKAGE: &[(&str, &str, &str)] = &[
195    ("http://docbook.org/ns/docbook", "IC-Docbook", "XSL/IC-Docbook/docbook-xsl-1.79.2/slides/schema/xsd/docbook.xsd"),
196    ("http://docbook.org/ns/docbook-slides", "IC-Docbook", "XSL/IC-Docbook/docbook-xsl-1.79.2/slides/schema/xsd/slides.xsd"),
197    ("http://metadata.dod.mil/mdr/ns/DDMS/3.0/", "AUDIT", "CVE/Schema/DDMS/DDMS-GeospatialCoverage.xsd"),
198    ("http://www.opengis.net/gml/3.2", "AUDIT", "CVE/Schema/DDMS/DDMS-GML-Profile.xsd"),
199    ("http://www.w3.org/1999/xlink", "AUDIT", "Schema/XLINK/XLink.xsd"),
200    ("http://www.w3.org/2001/SMIL20/", "RR-SM", "Schema/w3/2001/SMIL20/smil20-4gml.xsd"),
201    ("http://www.w3.org/2001/SMIL20/Language", "RR-SM", "Schema/w3/2001/SMIL20/smil20-language-4gml.xsd"),
202    ("http://www.w3.org/XML/1998/namespace", "AUDIT", "Schema/W3C-XML/W3C-XML-Namespace.xsd"),
203    ("urn:CellexReport", "DOMEX", "Schema/DOMEX/CellexReport.xsd"),
204    ("urn:schema:guide:schema:cdsmanifest", "CDSM", "Schema/CDSM/SchemaGuideSchema.xsd"),
205    ("urn:schema:guide:schema:digitalhazmat", "DHZM", "Schema/DHZM/SchemaGuideSchema.xsd"),
206    ("urn:schema:guide:schema:irm", "IRM", "Schema/IRM/SchemaGuideSchema.xsd"),
207    ("urn:schema:guide:schema:ismcat", "ISMCAT", "Schema/ISMCAT/SchemaGuideSchema.xsd"),
208    ("urn:schema:guide:schema:its", "ITS-MS", "Schema/ITS-MS/SchemaGuideSchema.xsd"),
209    ("urn:schema:guide:schema:mac", "MAC", "Schema/MAC/SchemaGuideSchema.xsd"),
210    ("urn:schema:guide:schema:pma", "PMA", "Schema/PMA/SchemaGuideSchema.xsd"),
211    ("urn:schema:guide:schema:pubs", "MNT", "Schema/MNT/SchemaGuideSchema.xsd"),
212    ("urn:schema:guide:schema:rr", "RevRecall", "Schema/RevRecall/SchemaGuideSchema.xsd"),
213    ("urn:us:gov:ic:arh", "ARH", "Schema/ARH/IC-ARH.xsd"),
214    ("urn:us:gov:ic:audit", "AUDIT", "Schema/AUDIT/IC-AUDIT.xsd"),
215    ("urn:us:gov:ic:audit-cvenum", "AUDIT", "Schema/AUDIT/CVEGeneratedTypes.xsd"),
216    ("urn:us:gov:ic:authcat", "AUTHCAT", "Schema/AUTHCAT/AuthorityCategory.xsd"),
217    ("urn:us:gov:ic:boe", "BOE", "Schema/BOE/BOE.xsd"),
218    ("urn:us:gov:ic:cdsmanifest", "CDSM", "Schema/CDSM/CDSM-guard.xsd"),
219    ("urn:us:gov:ic:cem", "CEM", "Schema/CEM/CEM-XML.xsd"),
220    ("urn:us:gov:ic:common", "AUDIT", "Schema/IC-COMMON/IC-Common.xsd"),
221    ("urn:us:gov:ic:cve", "AUTHCAT", "CVE/CveSchema/CVEXml.xsd"),
222    ("urn:us:gov:ic:cve:v1", "AUDIT", "CVE/Schema/CVEXml.xsd"),
223    ("urn:us:gov:ic:cvenum:authcat:authcattype", "AUTHCAT", "Schema/AUTHCAT/CVEGenerated/CVEnumAuthCatType.xsd"),
224    ("urn:us:gov:ic:cvenum:boe:CVEnumBOEAuthorizationType", "BOE", "Schema/BOE/CVEGenerated/CVEnumBOEAuthorizationType.xsd"),
225    ("urn:us:gov:ic:cvenum:boe:CVEnumBOEInformationTechnologyType", "BOE", "Schema/BOE/CVEGenerated/CVEnumBOEInformationTechnologyType.xsd"),
226    ("urn:us:gov:ic:cvenum:boe:CVEnumBOESoftwareCategory", "BOE", "Schema/BOE/CVEGenerated/CVEnumBOESoftwareCategory.xsd"),
227    ("urn:us:gov:ic:cvenum:boe:CVEnumBOESystemOwnershipType", "BOE", "Schema/BOE/CVEGenerated/CVEnumBOESystemOwnershipType.xsd"),
228    ("urn:us:gov:ic:cvenum:boe:CVEnumBOESystemUserCategory", "BOE", "Schema/BOE/CVEGenerated/CVEnumBOESystemUserCategory.xsd"),
229    ("urn:us:gov:ic:cvenum:cemxml:citycategory", "CEM", "Schema/CEM/CVEGenerated/CVEnumCemCityCategory.xsd"),
230    ("urn:us:gov:ic:cvenum:cemxml:commdatatype", "CEM", "Schema/CEM/CVEGenerated/CVEnumCemCommDataType.xsd"),
231    ("urn:us:gov:ic:cvenum:cemxml:identifiertype", "CEM", "Schema/CEM/CVEGenerated/CVEnumCemIdentifierType.xsd"),
232    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityCombatOperations", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityCombatOperations.xsd"),
233    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityCommunications", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityCommunications.xsd"),
234    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityCriminalActivities", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityCriminalActivities.xsd"),
235    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityFinance", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityFinance.xsd"),
236    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityHostageOperations", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityHostageOperations.xsd"),
237    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityIndividual", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityIndividual.xsd"),
238    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityPersonnelManagement", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityPersonnelManagement.xsd"),
239    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityPlanningGeneral", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityPlanningGeneral.xsd"),
240    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityPropagandaProductionandDistribution", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityPropagandaProductionandDistribution.xsd"),
241    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityRecruitmentOperations", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityRecruitmentOperations.xsd"),
242    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityReligious", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityReligious.xsd"),
243    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityType.xsd"),
244    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityWeaponsCyber", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityWeaponsCyber.xsd"),
245    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityWeaponsImprovised", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityWeaponsImprovised.xsd"),
246    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityWeaponsManufactured", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityWeaponsManufactured.xsd"),
247    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXActivityWeaponsofMassDestruction", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXActivityWeaponsofMassDestruction.xsd"),
248    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAffiliationTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAffiliationTypeType.xsd"),
249    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyCIA", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyCIA.xsd"),
250    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyDHS", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyDHS.xsd"),
251    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyDIA", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyDIA.xsd"),
252    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyDOD", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyDOD.xsd"),
253    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyDOJ", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyDOJ.xsd"),
254    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyFBI", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyFBI.xsd"),
255    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyNSA", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyNSA.xsd"),
256    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyOtherUSG", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyOtherUSG.xsd"),
257    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyUSA", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyUSA.xsd"),
258    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyUSAF", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyUSAF.xsd"),
259    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyUSMC", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyUSMC.xsd"),
260    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXAgencyUSN", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXAgencyUSN.xsd"),
261    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXCitizenshipStatusType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXCitizenshipStatusType.xsd"),
262    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXCollectingUnitIDTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXCollectingUnitIDTypeType.xsd"),
263    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXDispositionType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXDispositionType.xsd"),
264    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXDocumentType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXDocumentType.xsd"),
265    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXEducationDegreeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXEducationDegreeType.xsd"),
266    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXEducationLevelType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXEducationLevelType.xsd"),
267    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXEntityMethodOfExtractionType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXEntityMethodOfExtractionType.xsd"),
268    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXEventTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXEventTypeType.xsd"),
269    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXFileType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXFileType.xsd"),
270    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXFinancialAccountTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXFinancialAccountTypeType.xsd"),
271    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXFinancialTransactionTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXFinancialTransactionTypeType.xsd"),
272    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXFisaType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXFisaType.xsd"),
273    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXFlightTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXFlightTypeType.xsd"),
274    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXHashDigestTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXHashDigestTypeType.xsd"),
275    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXImageSizeTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXImageSizeTypeType.xsd"),
276    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXLegalTitleType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXLegalTitleType.xsd"),
277    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXLicenseTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXLicenseTypeType.xsd"),
278    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXMediaType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXMediaType.xsd"),
279    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXMembershipIdentificationTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXMembershipIdentificationTypeType.xsd"),
280    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXMicroCollectionLocationDescriptorTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXMicroCollectionLocationDescriptorTypeType.xsd"),
281    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXNumberOfFilesTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXNumberOfFilesTypeType.xsd"),
282    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXOrganizationNameTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXOrganizationNameTypeType.xsd"),
283    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXOrganizationTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXOrganizationTypeType.xsd"),
284    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXPhysicalAttributeTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXPhysicalAttributeTypeType.xsd"),
285    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXRelationshipNatureType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXRelationshipNatureType.xsd"),
286    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXRelationshipTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXRelationshipTypeType.xsd"),
287    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXTitleTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXTitleTypeType.xsd"),
288    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXTranslationPriorityType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXTranslationPriorityType.xsd"),
289    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXTranslationStatusType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXTranslationStatusType.xsd"),
290    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXTranslationType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXTranslationType.xsd"),
291    ("urn:us:gov:ic:cvenum:domex:CVEnumDOMEXTravelTypeType", "DOMEX", "Schema/DOMEX/CVEGenerated/CVEnumDOMEXTravelTypeType.xsd"),
292    ("urn:us:gov:ic:cvenum:erm:holdCategory", "ERM", "Schema/ERM/CVEGenerated/CVEnumERMHoldCategory.xsd"),
293    ("urn:us:gov:ic:cvenum:fac:fineaccesscontroltype", "FAC", "Schema/FAC/CVEGenerated/CVEnumFineAccessControlType.xsd"),
294    ("urn:us:gov:ic:cvenum:genc:country", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGENCCountryCode.xsd"),
295    ("urn:us:gov:ic:cvenum:genc:country:33", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC3ed3.xsd"),
296    ("urn:us:gov:ic:cvenum:genc:country:331", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-1.xsd"),
297    ("urn:us:gov:ic:cvenum:genc:country:3310", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-10.xsd"),
298    ("urn:us:gov:ic:cvenum:genc:country:3311", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-11.xsd"),
299    ("urn:us:gov:ic:cvenum:genc:country:332", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-2.xsd"),
300    ("urn:us:gov:ic:cvenum:genc:country:333", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-3.xsd"),
301    ("urn:us:gov:ic:cvenum:genc:country:334", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-4.xsd"),
302    ("urn:us:gov:ic:cvenum:genc:country:335", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-5.xsd"),
303    ("urn:us:gov:ic:cvenum:genc:country:336", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-6.xsd"),
304    ("urn:us:gov:ic:cvenum:genc:country:337", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-7.xsd"),
305    ("urn:us:gov:ic:cvenum:genc:country:338", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-8.xsd"),
306    ("urn:us:gov:ic:cvenum:genc:country:339", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGeGENC33-9.xsd"),
307    ("urn:us:gov:ic:cvenum:genc:subdivision", "IC-GENC", "Schema/IC-GENC/CVEGenerated/CVEnumGENCSubDivisionCode.xsd"),
308    ("urn:us:gov:ic:cvenum:intdis:inteldiscipline", "INTDIS", "Schema/INTDIS/CVEGenerated/CVEnumIntelDiscipline.xsd"),
309    ("urn:us:gov:ic:cvenum:intdis:inteldiscipline:component", "INTDIS", "Schema/INTDIS/CVEGenerated/CVEnumIntelDisciplineComponent.xsd"),
310    ("urn:us:gov:ic:cvenum:intdis:inteldiscipline:component:technique", "INTDIS", "Schema/INTDIS/CVEGenerated/CVEnumIntelDisciplineComponentTechnique.xsd"),
311    ("urn:us:gov:ic:cvenum:irm:activity", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMActivity.xsd"),
312    ("urn:us:gov:ic:cvenum:irm:complies:usa", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMCompliesWithUSA.xsd"),
313    ("urn:us:gov:ic:cvenum:irm:coverage:iso3166:digraph", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMCoverageISO3166Digraph.xsd"),
314    ("urn:us:gov:ic:cvenum:irm:coverage:precedence", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMCoveragePrecedence.xsd"),
315    ("urn:us:gov:ic:cvenum:irm:executableindicator", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMExecutableIndicator.xsd"),
316    ("urn:us:gov:ic:cvenum:irm:iso639-2:trigraph", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMISO639-2Trigraph.xsd"),
317    ("urn:us:gov:ic:cvenum:irm:iso639-3:trigraph", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMISO639-3Trigraph.xsd"),
318    ("urn:us:gov:ic:cvenum:irm:iso639:digraph", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMISO639Digraph.xsd"),
319    ("urn:us:gov:ic:cvenum:irm:language:qualifier", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMCompoundLanguageQualifierType.xsd"),
320    ("urn:us:gov:ic:cvenum:irm:maliciouscodeindicator", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMMaliciousCodeIndicator.xsd"),
321    ("urn:us:gov:ic:cvenum:irm:positive:intel", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMPositiveIntel.xsd"),
322    ("urn:us:gov:ic:cvenum:irm:waterBody", "IRM", "Schema/IRM/CVEGenerated/CVEnumIRMWaterBody.xsd"),
323    ("urn:us:gov:ic:cvenum:ism:25x", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISM25X.xsd"),
324    ("urn:us:gov:ic:cvenum:ism:HighWaterNATO", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMHighWaterNATO.xsd"),
325    ("urn:us:gov:ic:cvenum:ism:atomicEnergyMarkings", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMAtomicEnergyMarkings.xsd"),
326    ("urn:us:gov:ic:cvenum:ism:attributes", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMAttributes.xsd"),
327    ("urn:us:gov:ic:cvenum:ism:classification:all", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMClassificationAll.xsd"),
328    ("urn:us:gov:ic:cvenum:ism:classification:us", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMClassificationUS.xsd"),
329    ("urn:us:gov:ic:cvenum:ism:complieswith", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMCompliesWith.xsd"),
330    ("urn:us:gov:ic:cvenum:ism:cuibasic", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMCUIBasic.xsd"),
331    ("urn:us:gov:ic:cvenum:ism:cuispecified", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMCUISpecified.xsd"),
332    ("urn:us:gov:ic:cvenum:ism:dissem", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMDissem.xsd"),
333    ("urn:us:gov:ic:cvenum:ism:dissem:commingled", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMDissemCommingled.xsd"),
334    ("urn:us:gov:ic:cvenum:ism:dissem:cui", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMDissemCui.xsd"),
335    ("urn:us:gov:ic:cvenum:ism:dissem:icrm", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMDissemIcrm.xsd"),
336    ("urn:us:gov:ic:cvenum:ism:elements", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMElements.xsd"),
337    ("urn:us:gov:ic:cvenum:ism:exemptfrom", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMExemptFrom.xsd"),
338    ("urn:us:gov:ic:cvenum:ism:fgiopen", "RR-SM", "Schema/ISM/CVEGenerated/CVEnumISMFGIOpen.xsd"),
339    ("urn:us:gov:ic:cvenum:ism:fgiprotected", "RR-SM", "Schema/ISM/CVEGenerated/CVEnumISMFGIProtected.xsd"),
340    ("urn:us:gov:ic:cvenum:ism:nonic", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMNonIC.xsd"),
341    ("urn:us:gov:ic:cvenum:ism:nonuscontrols", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMNonUSControls.xsd"),
342    ("urn:us:gov:ic:cvenum:ism:notice", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMNotice.xsd"),
343    ("urn:us:gov:ic:cvenum:ism:noticeprose", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMNoticeProse.xsd"),
344    ("urn:us:gov:ic:cvenum:ism:ownerproducer", "RR-SM", "Schema/ISM/CVEGenerated/CVEnumISMOwnerProducer.xsd"),
345    ("urn:us:gov:ic:cvenum:ism:pocType", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMPocType.xsd"),
346    ("urn:us:gov:ic:cvenum:ism:relto", "RR-SM", "Schema/ISM/CVEGenerated/CVEnumISMRelTo.xsd"),
347    ("urn:us:gov:ic:cvenum:ism:sar", "FAC", "Schema/FAC/CVEGenerated/CVEnumFACSARAuthorities.xsd"),
348    ("urn:us:gov:ic:cvenum:ism:scicontrols", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMSCIControls.xsd"),
349    ("urn:us:gov:ic:cvenum:ism:secondbannerline", "AUTHCAT", "CVE/CveSchema/ISM/CVEGenerated/CVEnumISMSecondBannerLine.xsd"),
350    ("urn:us:gov:ic:cvenum:ismcat:fgiopen", "ISMCAT", "Schema/ISMCAT/CVEGenerated/CVEnumISMCATFGIOpen.xsd"),
351    ("urn:us:gov:ic:cvenum:ismcat:fgiprotected", "ISMCAT", "Schema/ISMCAT/CVEGenerated/CVEnumISMCATFGIProtected.xsd"),
352    ("urn:us:gov:ic:cvenum:ismcat:ownerproducer", "ISMCAT", "Schema/ISMCAT/CVEGenerated/CVEnumISMCATOwnerProducer.xsd"),
353    ("urn:us:gov:ic:cvenum:ismcat:relto", "ISMCAT", "Schema/ISMCAT/CVEGenerated/CVEnumISMCATRelTo.xsd"),
354    ("urn:us:gov:ic:cvenum:ismcat:responsibleentity", "ISMCAT", "Schema/ISMCAT/CVEGenerated/CVEnumISMCATResponsibleEntity.xsd"),
355    ("urn:us:gov:ic:cvenum:ismcat:tetragraph", "ISMCAT", "Schema/ISMCAT/CVEGenerated/CVEnumISMCATTetragraph.xsd"),
356    ("urn:us:gov:ic:cvenum:itsms:fabric", "ITS-MS", "Schema/ITS-MS/CVEGenerated/CVEnumITSMSFabric.xsd"),
357    ("urn:us:gov:ic:cvenum:lic:license", "LIC", "Schema/LIC/CVEGenerated/CVEnumLicLicense.xsd"),
358    ("urn:us:gov:ic:cvenum:mac:collectionType", "MAC", "Schema/MAC/CVEGenerated/CVEnumMacCollectionType.xsd"),
359    ("urn:us:gov:ic:cvenum:mime:type", "MIME", "Schema/MIME/CVEGenerated/CVEnumMIMEIANAType.xsd"),
360    ("urn:us:gov:ic:cvenum:mn:issue", "MN", "Schema/MN/CVEGenerated/CVEnumMNIssue.xsd"),
361    ("urn:us:gov:ic:cvenum:mn:region", "MN", "Schema/MN/CVEGenerated/CVEnumMNRegion.xsd"),
362    ("urn:us:gov:ic:cvenum:ntk:accesspolicy", "NTK", "Schema/NTK/CVEGenerated/CVEnumNTKAccessPolicy.xsd"),
363    ("urn:us:gov:ic:cvenum:ntk:profiledes", "NTK", "Schema/NTK/CVEGenerated/CVEnumNTKProfileDes.xsd"),
364    ("urn:us:gov:ic:cvenum:pm:actor", "PM", "Schema/PM/CVEGenerated/CVEnumPMActor.xsd"),
365    ("urn:us:gov:ic:cvenum:pm:location", "PM", "Schema/PM/CVEGenerated/CVEnumPMLocation.xsd"),
366    ("urn:us:gov:ic:cvenum:pm:nonstateactors", "PM", "Schema/PM/CVEGenerated/CVEnumPMNonStateActors.xsd"),
367    ("urn:us:gov:ic:cvenum:pm:subject", "PM", "Schema/PM/CVEGenerated/CVEnumPMSubject.xsd"),
368    ("urn:us:gov:ic:cvenum:revrecall:action", "RevRecall", "Schema/RevRecall/CVEGenerated/CVEnumRevRecallAction.xsd"),
369    ("urn:us:gov:ic:cvenum:revrecall:type", "RevRecall", "Schema/RevRecall/CVEGenerated/CVEnumRevRecallType.xsd"),
370    ("urn:us:gov:ic:cvenum:role:c2sfunction", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLEC2SFunction.xsd"),
371    ("urn:us:gov:ic:cvenum:role:c2sscope", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLEC2SScope.xsd"),
372    ("urn:us:gov:ic:cvenum:role:enterprise:role", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLEEnterpriseRole.xsd"),
373    ("urn:us:gov:ic:cvenum:role:namespace", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLENamespace.xsd"),
374    ("urn:us:gov:ic:cvenum:role:nebula:namedrole", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLENebulaNamedRole.xsd"),
375    ("urn:us:gov:ic:cvenum:role:paasfunction", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLEPAASFunction.xsd"),
376    ("urn:us:gov:ic:cvenum:role:paasscope", "ROLE", "Schema/ROLE/CVEGenerated/CVEnumROLEPAASScope.xsd"),
377    ("urn:us:gov:ic:cvenum:tdf:hashalgorithm", "BASE-TDF", "Schema/BASE-TDF/CVEGenerated/CVEnumTDFHashAlgorithm.xsd"),
378    ("urn:us:gov:ic:cvenum:tdf:signaturealgorithm", "BASE-TDF", "Schema/BASE-TDF/CVEGenerated/CVEnumTDFSignatureAlgorithm.xsd"),
379    ("urn:us:gov:ic:cvenum:tdf:state", "BASE-TDF", "Schema/BASE-TDF/CVEGenerated/CVEnumTDFAppliesToState.xsd"),
380    ("urn:us:gov:ic:cvenum:uias:attribute", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASAttribute.xsd"),
381    ("urn:us:gov:ic:cvenum:uias:certificateauthority", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASCertificateAuthority.xsd"),
382    ("urn:us:gov:ic:cvenum:uias:clearance", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASClearance.xsd"),
383    ("urn:us:gov:ic:cvenum:uias:entitytype", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASEntityType.xsd"),
384    ("urn:us:gov:ic:cvenum:uias:handlingControls", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASHandlingControls.xsd"),
385    ("urn:us:gov:ic:cvenum:uias:lifecyclestatus", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASLifeCycleStatus.xsd"),
386    ("urn:us:gov:ic:cvenum:uias:nonpersonentitytype", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASNonPersonEntityType.xsd"),
387    ("urn:us:gov:ic:cvenum:uias:personentitytype", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASPersonEntityType.xsd"),
388    ("urn:us:gov:ic:cvenum:uias:schematype", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASSchemaType.xsd"),
389    ("urn:us:gov:ic:cvenum:uias:securitymarktype", "UIAS", "Schema/UIAS/CVEGenerated/CVEnumUIASSecurityMarkType.xsd"),
390    ("urn:us:gov:ic:cvenum:unece20:measure", "DED", "Schema/DED/CVEGenerated/CVEnumUNECE20UnitsOfMeasure.xsd"),
391    ("urn:us:gov:ic:cvenum:usagency:agencyacronym", "USAgency", "Schema/USAgency/CVEGenerated/CVEnumUSAgencyAcronym.xsd"),
392    ("urn:us:gov:ic:cvenum:usagency:auditRoutingOrganization", "USAgency", "Schema/USAgency/CVEGenerated/CVEnumAuditRoutingOrg.xsd"),
393    ("urn:us:gov:ic:cvenum:usagency:auditRoutingUnique", "USAgency", "Schema/USAgency/CVEGenerated/CVEnumAuditRoutingUnique.xsd"),
394    ("urn:us:gov:ic:cvenum:usagency:usgovagencyacronym", "USAgency", "Schema/USAgency/CVEGenerated/CVEnumUSGOVAgencyAcronym.xsd"),
395    ("urn:us:gov:ic:cvenum:virt:network", "VIRT", "Schema/VIRT/CVEGenerated/CVEnumVIRTNetworkName.xsd"),
396    ("urn:us:gov:ic:ded", "DED", "Schema/DED/DED.xsd"),
397    ("urn:us:gov:ic:digitalhazmat", "DHZM", "Schema/DHZM/DHZM-guard.xsd"),
398    ("urn:us:gov:ic:edh", "IC-EDH", "Schema/IC-EDH/IC-EDH.xsd"),
399    ("urn:us:gov:ic:erm", "ERM", "Schema/ERM/ERM_XML.xsd"),
400    ("urn:us:gov:ic:fineaccesscontrol", "FAC", "Schema/FAC/FineAccessControl.xsd"),
401    ("urn:us:gov:ic:icgenc", "IC-GENC", "Schema/IC-GENC/IC-GENC.xsd"),
402    ("urn:us:gov:ic:icms", "ITS-OM", "Schema/ITS-OM/ITS-OM.xsd"),
403    ("urn:us:gov:ic:id", "IC-ID", "Schema/IC-ID/IC-ID.xsd"),
404    ("urn:us:gov:ic:intdis", "INTDIS", "Schema/INTDIS/IntelDiscipline.xsd"),
405    ("urn:us:gov:ic:irm", "IRM", "Schema/IRM/IC-IRM.xsd"),
406    ("urn:us:gov:ic:ism", "AUTHCAT", "CVE/CveSchema/ISM/IC-ISM.xsd"),
407    ("urn:us:gov:ic:its", "ITS-MS", "Schema/ITS-MS/ITS-MS.xsd"),
408    ("urn:us:gov:ic:lic", "LIC", "Schema/LIC/LIC.xsd"),
409    ("urn:us:gov:ic:mac", "MAC", "Schema/MAC/MAC-XML.xsd"),
410    ("urn:us:gov:ic:mime", "MIME", "Schema/MIME/MIME.xsd"),
411    ("urn:us:gov:ic:mn", "MN", "Schema/MN/MN.xsd"),
412    ("urn:us:gov:ic:ntk", "NTK", "Schema/NTK/IC-NTK.xsd"),
413    ("urn:us:gov:ic:pm", "PM", "Schema/PM/PM.xsd"),
414    ("urn:us:gov:ic:pma", "PMA", "Schema/PMA/PMA-XML.xsd"),
415    ("urn:us:gov:ic:revrecall", "RevRecall", "Schema/RevRecall/RevRecall_XML.xsd"),
416    ("urn:us:gov:ic:role", "ROLE", "Schema/ROLE/ROLE.xsd"),
417    ("urn:us:gov:ic:rr", "RR-SM", "Schema/RR-SM/IC-RR-SM-REST.xsd"),
418    ("urn:us:gov:ic:sf", "IC-SF", "Schema/IC-SF/IC-SF.xsd"),
419    ("urn:us:gov:ic:sf:hashverification", "IC-SF", "Schema/IC-SF/HashVerification.xsd"),
420    ("urn:us:gov:ic:taxonomy:catt:tetragraph", "ISMCAT", "Schema/ISMCAT/Tetragraph.xsd"),
421    ("urn:us:gov:ic:taxonomy:mnt:issue", "MNT", "Schema/MNT/Issue.xsd"),
422    ("urn:us:gov:ic:taxonomy:mnt:region", "MNT", "Schema/MNT/Region.xsd"),
423    ("urn:us:gov:ic:tdf", "BASE-TDF", "Schema/BASE-TDF/BASE-TDF.xsd"),
424    ("urn:us:gov:ic:uias", "UIAS", "Schema/UIAS/UIAS.xsd"),
425    ("urn:us:gov:ic:uiassaml", "UIAS", "Schema/UIAS/UIAS_SAML.xsd"),
426    ("urn:us:gov:ic:usagency", "USAgency", "Schema/USAgency/USAgency.xsd"),
427    ("urn:us:gov:ic:virt", "VIRT", "Schema/VIRT/VIRT.xsd"),
428    ("urn:us:mil:ces:metadata:domex", "DOMEX", "Schema/DOMEX/DOMEX.xsd"),
429    ("urn:us:mil:ces:metadata:domex_identity", "DOMEX", "Schema/DOMEX/Identity.xsd"),
430];
431
432// --- tests ---
433
434#[cfg(test)]
435mod tests {
436    use super::*;
437
438    #[test]
439    fn packages_table_has_59_entries() {
440        assert_eq!(PACKAGES.len(), 59);
441    }
442
443    #[test]
444    fn namespace_table_is_sorted() {
445        for w in NAMESPACE_TO_PACKAGE.windows(2) {
446            assert!(
447                w[0].0 < w[1].0,
448                "namespace table not sorted: {} >= {}",
449                w[0].0,
450                w[1].0
451            );
452        }
453    }
454
455    #[test]
456    fn every_namespace_package_is_in_packages_list() {
457        for &(uri, pkg, _) in NAMESPACE_TO_PACKAGE {
458            assert!(
459                PACKAGES.contains(&pkg),
460                "namespace {uri} references unknown package {pkg}",
461            );
462        }
463    }
464
465    #[test]
466    fn resolve_known_namespace() {
467        let (pkg, rel) = resolve_namespace("urn:us:gov:ic:edh").unwrap();
468        assert_eq!(pkg, "IC-EDH");
469        assert_eq!(rel, "Schema/IC-EDH/IC-EDH.xsd");
470    }
471
472    #[test]
473    fn resolve_ismcat_guide_namespace() {
474        let (pkg, rel) = resolve_namespace("urn:schema:guide:schema:ismcat").unwrap();
475        assert_eq!(pkg, "ISMCAT");
476        assert_eq!(rel, "Schema/ISMCAT/SchemaGuideSchema.xsd");
477    }
478
479    #[test]
480    fn unknown_namespace_returns_none() {
481        assert!(resolve_namespace("urn:not-real:nope").is_none());
482    }
483
484    #[test]
485    fn ism_namespace_lives_in_authcat() {
486        // urn:us:gov:ic:ism is declared in AUTHCAT, not ISMCAT or RR-SM.
487        assert_eq!(package_for_namespace("urn:us:gov:ic:ism"), Some("AUTHCAT"));
488    }
489
490    #[test]
491    fn crate_name_kebab_lowercases_correctly() {
492        assert_eq!(crate_name_for("ISMCAT").as_deref(), Some("ism-ismcat"));
493        assert_eq!(
494            crate_name_for("IC-Docbook").as_deref(),
495            Some("ism-ic-docbook")
496        );
497        assert_eq!(crate_name_for("BASE-TDF").as_deref(), Some("ism-base-tdf"));
498        assert_eq!(crate_name_for("not-a-package"), None);
499    }
500
501    #[test]
502    fn published_packages_is_sorted() {
503        // Required for the binary_search in `is_published`.
504        for w in PUBLISHED_PACKAGES.windows(2) {
505            assert!(
506                w[0] < w[1],
507                "PUBLISHED_PACKAGES not sorted: {} >= {}",
508                w[0],
509                w[1]
510            );
511        }
512    }
513
514    #[test]
515    fn every_published_package_is_a_known_package() {
516        // Catches typos and stale entries after PACKAGES drift.
517        for &pkg in PUBLISHED_PACKAGES {
518            assert!(
519                PACKAGES.contains(&pkg),
520                "PUBLISHED_PACKAGES references unknown package {pkg}",
521            );
522        }
523    }
524
525    #[test]
526    fn is_published_rejects_unknown_packages() {
527        assert!(!is_published("not-a-package"));
528        assert!(!is_published(""));
529    }
530
531    #[test]
532    fn resolve_namespace_published_returns_none_for_unpublished() {
533        // Pick any known namespace; if its package isn't in PUBLISHED_PACKAGES,
534        // the helper must hide it. (When the published set is empty, every
535        // resolution is filtered out.)
536        if let Some((uri, pkg, _)) = NAMESPACE_TO_PACKAGE.first() {
537            if !is_published(pkg) {
538                assert!(resolve_namespace_published(uri).is_none());
539            }
540        }
541        assert!(resolve_namespace_published("urn:not-real:nope").is_none());
542    }
543
544    #[test]
545    fn resolve_namespace_published_agrees_with_resolve_when_published() {
546        for &(uri, pkg, rel) in NAMESPACE_TO_PACKAGE {
547            if is_published(pkg) {
548                assert_eq!(resolve_namespace_published(uri), Some((pkg, rel)));
549            }
550        }
551    }
552}