Конечно, это сложно из-за подстановочных знаков, групп замещения, типов, полученных из расширения, групп моделей и подобных деталей. Я бы рекомендовал использовать API, предлагаемый процессором схемы, а не пытаться анализировать исходные документы XSD напрямую. Например, одним из подходов было бы создание файла SCM из схемы с использованием Saxon. Затем вы можете найти в файле SCM все объявления определенного имени элемента, найти их типы, а из типов вы можете найти список разрешенных имен дочерних элементов. Возможно, вы захотите сделать это, сначала преобразовав файл SCM в свою собственную структуру данных, соответствующую вашим конкретным потребностям: как вы предполагаете, это может быть простой список пар имен родительский / дочерний элемент (плюс пары имен элемент / атрибут, возможно, ?).