pub const XML_XSD: &[u8] = include_bytes!("../assets/xml.xsd");
pub const XLINK_XSD: &[u8] = include_bytes!("../assets/xlink.xsd");
pub const XML_NAMESPACE: &str = "http://www.w3.org/XML/1998/namespace";
pub const XLINK_NAMESPACE: &str = "http://www.w3.org/1999/xlink";
pub fn get_embedded_schema(namespace: &str) -> Option<&'static [u8]> {
match namespace {
XML_NAMESPACE => Some(XML_XSD),
XLINK_NAMESPACE => Some(XLINK_XSD),
_ => None,
}
}
pub fn has_embedded_schema(namespace: &str) -> bool {
matches!(namespace, XML_NAMESPACE | XLINK_NAMESPACE)
}
#[cfg(test)]
mod tests {
use super::*;
#[test]
fn test_xml_xsd_embedded() {
let content = XML_XSD;
assert!(!content.is_empty());
let xml_str = std::str::from_utf8(content).expect("xml.xsd should be valid UTF-8");
assert!(xml_str.contains("targetNamespace=\"http://www.w3.org/XML/1998/namespace\""));
}
#[test]
fn test_xlink_xsd_embedded() {
let content = XLINK_XSD;
assert!(!content.is_empty());
let xml_str = std::str::from_utf8(content).expect("xlink.xsd should be valid UTF-8");
assert!(xml_str.contains("targetNamespace=\"http://www.w3.org/1999/xlink\""));
}
#[test]
fn test_get_embedded_schema() {
assert!(get_embedded_schema(XML_NAMESPACE).is_some());
assert!(get_embedded_schema(XLINK_NAMESPACE).is_some());
assert!(get_embedded_schema("http://example.com/unknown").is_none());
}
#[test]
fn test_has_embedded_schema() {
assert!(has_embedded_schema(XML_NAMESPACE));
assert!(has_embedded_schema(XLINK_NAMESPACE));
assert!(!has_embedded_schema("http://example.com/unknown"));
}
}