using System; using System.Collections.Generic; using System.Xml.Serialization; namespace XSDVisualiser.Models { /// /// Root of the parsed XSD representation. /// [XmlRoot("SchemaModel")] public class SchemaModel { [XmlAttribute] public string? TargetNamespace { get; set; } [XmlArray("RootElements")] [XmlArrayItem("Element")] public List RootElements { get; set; } = new(); } /// /// 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 } /// /// Min/Max occurrences. /// public class Occurs { [XmlAttribute] public decimal Min { get; set; } = 1; /// /// If MaxIsUnbounded is true, Max is ignored. /// [XmlAttribute] public decimal Max { get; set; } = 1; [XmlAttribute] public bool MaxIsUnbounded { get; set; } } /// /// Attribute definition extracted from XSD. /// public class AttributeInfo { [XmlAttribute] public string? Name { get; set; } [XmlAttribute] public string? Namespace { get; set; } [XmlAttribute] public string? Use { get; set; } // optional | required | prohibited [XmlAttribute] public string? TypeName { get; set; } [XmlAttribute] public string? BuiltInType { get; set; } [XmlElement] public ConstraintSet? Constraints { get; set; } } /// /// SimpleType constraints (facets). /// public class ConstraintSet { [XmlAttribute] public string? BaseTypeName { get; set; } [XmlArray("Enumerations")] [XmlArrayItem("Value")] public List Enumerations { get; set; } = new(); [XmlArray("Patterns")] [XmlArrayItem("Regex")] public List Patterns { get; set; } = new(); [XmlElement] public NumericBounds? Numeric { get; set; } [XmlElement] public LengthBounds? Length { get; set; } } public class NumericBounds { [XmlAttribute] public string? MinInclusive { get; set; } [XmlAttribute] public string? MaxInclusive { get; set; } [XmlAttribute] public string? MinExclusive { get; set; } [XmlAttribute] public string? MaxExclusive { get; set; } } public class LengthBounds { [XmlAttribute] public int Length { get; set; } [XmlIgnore] public bool LengthSpecified { get; set; } [XmlAttribute] public int MinLength { get; set; } [XmlIgnore] public bool MinLengthSpecified { get; set; } [XmlAttribute] public int MaxLength { get; set; } [XmlIgnore] public bool MaxLengthSpecified { get; set; } } }