using System.Xml.Serialization; namespace XSDVisualiser.Core; /// /// Represents an element or complex content node in the schema. /// public class SchemaNode { [XmlAttribute] public string? Name { get; set; } [XmlAttribute] public string? Namespace { get; set; } [XmlAttribute] public string? TypeName { get; set; } [XmlAttribute] public string? BuiltInType { get; set; } [XmlAttribute] public bool IsNillable { get; set; } [XmlElement] public Occurs Cardinality { get; set; } = new(); [XmlElement] public ConstraintSet? Constraints { get; set; } [XmlArray("Attributes")] [XmlArrayItem("Attribute")] public List Attributes { get; set; } = new(); [XmlArray("Children")] [XmlArrayItem("Element")] public List Children { get; set; } = new(); [XmlAttribute] public string? ContentModel { get; set; } // sequence | choice | all | simple /// /// Human-readable documentation extracted from xsd:annotation/xsd:documentation. /// Prefer element-level documentation; falls back to type-level documentation. /// [XmlElement] public string? Documentation { get; set; } public override string ToString() { // Used by AutoCompleteBox to get text for filtering and matching // Prefer Name, then TypeName, and fall back to base implementation if (!string.IsNullOrEmpty(Name)) return Name!; if (!string.IsNullOrEmpty(TypeName)) return TypeName!; return base.ToString(); } }