public HeD.Engine.Model.Library Read(HeD.Engine.Model.LibraryRef libraryRef) { DoMessage("Loading library document..."); var libraryDocument = XDocument.Load(libraryRef.Path, LoadOptions.SetLineInfo); DoMessage("Verifying artifact schema..."); var schemaSet = new XmlSchemaSet(); foreach (var schemaLocation in ELMLibrarySettings.Default.SchemaLocation.Split(';', ',', ' ')) { schemaSet.Add(null, schemaLocation); } libraryDocument.Validate(schemaSet, onValidationEvent, true); if (libraryDocument.Root.GetSchemaInfo().Validity != XmlSchemaValidity.Valid) { throw new InvalidOperationException("Library does not conform to the schema."); } var result = new HeD.Engine.Model.Library(); // TODO: Read library nodes... result.Name = libraryRef.Name; //result.Version; var ns = libraryDocument.Root.GetDefaultNamespace(); // Pull models var dataModelsElement = libraryDocument.Root.Element(ns + "usings"); if (dataModelsElement != null) { result.Models = ReadModels(ns, dataModelsElement.Elements(ns + "def")).ToList(); } else { result.Models = new List <HeD.Engine.Model.ModelRef>(); } // Pull libraries var librariesElement = libraryDocument.Root.Element(ns + "includes"); if (librariesElement != null) { result.Libraries = ReadLibraries(ns, librariesElement.Elements(ns + "def")).ToList(); } else { result.Libraries = new List <HeD.Engine.Model.LibraryRef>(); } // TODO: Codesystems result.CodeSystems = new List <HeD.Engine.Model.CodeSystemDef>(); // Pull Valuesets var valuesetsElement = libraryDocument.Root.Element(ns + "valueSets"); if (valuesetsElement != null) { result.ValueSets = ReadValueSets(ns, valuesetsElement.Elements(ns + "def")).ToList(); } else { result.ValueSets = new List <HeD.Engine.Model.ValueSetDef>(); } // Pull parameters var parametersElement = libraryDocument.Root.Element(ns + "parameters"); if (parametersElement != null) { result.Parameters = ReadParameters(ns, parametersElement.Elements(ns + "def")).ToList(); } else { result.Parameters = new List <HeD.Engine.Model.ParameterDef>(); } // Pull expression defs var statementsElement = libraryDocument.Root.Element(ns + "statements"); if (statementsElement != null) { // TODO: FunctionDefs result.Expressions = ReadExpressionDefs(ns, statementsElement.Elements(ns + "def")).ToList(); } else { result.Expressions = new List <HeD.Engine.Model.ExpressionDef>(); } return(result); }
public HeD.Engine.Model.Library Read(HeD.Engine.Model.LibraryRef libraryRef) { DoMessage("Loading library document..."); var libraryDocument = XDocument.Load(libraryRef.Path, LoadOptions.SetLineInfo); DoMessage("Verifying artifact schema..."); var schemaSet = new XmlSchemaSet(); foreach (var schemaLocation in ELMLibrarySettings.Default.SchemaLocation.Split(';', ',', ' ')) { schemaSet.Add(null, schemaLocation); } libraryDocument.Validate(schemaSet, onValidationEvent, true); if (libraryDocument.Root.GetSchemaInfo().Validity != XmlSchemaValidity.Valid) { throw new InvalidOperationException("Library does not conform to the schema."); } var result = new HeD.Engine.Model.Library(); // TODO: Read library nodes... result.Name = libraryRef.Name; //result.Version; var ns = libraryDocument.Root.GetDefaultNamespace(); // Pull models var dataModelsElement = libraryDocument.Root.Element(ns + "usings"); if (dataModelsElement != null) { result.Models = ReadModels(ns, dataModelsElement.Elements(ns + "def")).ToList(); } else { result.Models = new List<HeD.Engine.Model.ModelRef>(); } // Pull libraries var librariesElement = libraryDocument.Root.Element(ns + "includes"); if (librariesElement != null) { result.Libraries = ReadLibraries(ns, librariesElement.Elements(ns + "def")).ToList(); } else { result.Libraries = new List<HeD.Engine.Model.LibraryRef>(); } // Pull Codesystems var codesystemsElement = libraryDocument.Root.Element(ns + "codeSystems"); if (codesystemsElement != null) { result.CodeSystems = ReadCodeSystems(ns, codesystemsElement.Elements(ns + "def")).ToList(); } else { result.CodeSystems = new List<HeD.Engine.Model.CodeSystemDef>(); } // Pull Valuesets var valuesetsElement = libraryDocument.Root.Element(ns + "valueSets"); if (valuesetsElement != null) { result.ValueSets = ReadValueSets(ns, valuesetsElement.Elements(ns + "def")).ToList(); } else { result.ValueSets = new List<HeD.Engine.Model.ValueSetDef>(); } // Pull parameters var parametersElement = libraryDocument.Root.Element(ns + "parameters"); if (parametersElement != null) { result.Parameters = ReadParameters(ns, parametersElement.Elements(ns + "def")).ToList(); } else { result.Parameters = new List<HeD.Engine.Model.ParameterDef>(); } // Pull expression defs var statementsElement = libraryDocument.Root.Element(ns + "statements"); if (statementsElement != null) { // TODO: FunctionDefs result.Expressions = ReadExpressionDefs(ns, statementsElement.Elements(ns + "def")).ToList(); } else { result.Expressions = new List<HeD.Engine.Model.ExpressionDef>(); } return result; }