static void Main(string[] args)
        {
            // download and unzip http://docs.oasis-open.org/ubl/os-UBL-2.1/UBL-2.1.zip
            string ublBasePath = "C:/Users/johan/Documents/ubl/UBL-2.1/xsd";

            XmlNameTable nt        = new NameTable();
            XmlSchemaSet schemaSet = new XmlSchemaSet(nt);

            schemaSet.ValidationEventHandler += MaindocSchemaSet_ValidationEventHandler;
            schemaSet.AddFilesFromDirectory(ublBasePath, MaindocSchemaSet_ValidationEventHandler);
            Console.WriteLine("Files not parsed:");
            schemaSet.GetFilesNotLoaded(ublBasePath).ForEach(Console.WriteLine);

            Console.WriteLine("Compiling ...");
            schemaSet.Compile();

            // show namespaces and prefix
            // schemaSet.GetNamespacePrefixes().ToList().ForEach(ns => Console.WriteLine($"{ns.Name}\t {ns.Namespace}"));

            var commonProps = schemaSet.MaindocCommonElements();

            foreach (var item in commonProps)
            {
                Console.WriteLine(item.QualifiedName.Name);
            }

            schemaSet.MaindocCommonElements();

            using (var writer = File.CreateText("result.txt"))
            {
                int len = schemaSet.Schemas().Cast <XmlSchema>().First().SourceUri.IndexOf("/xsd/") + 5;
                foreach (XmlSchema schema in schemaSet.Schemas())
                {
                    string s = $"{schema.SourceUri.Remove(0, len)}\t {schema.TargetNamespace}";
                    writer.WriteLine(s);
                }
                writer.WriteLine(Environment.NewLine + "Common properties:");
                foreach (var p in commonProps)
                {
                    writer.WriteLine(p.QualifiedName.Name);
                }
            }
        }