Добрый день. Можно ли сделать следующее ну или что-то подобное...
У меня есть куча групп .xml-файлов и для каждой группы есть соответствующий .xsd-файл.
Мне нужно импортировать все эти файлы в обычные плоские таблицы в MSSQL Server. Понятно если есть «ветвление» в .xml-файле то грузим избыточные строки — каждый с каждым (декартово произведение).
Так вот собственно вопрос, если способ как-то динамически формировать из .xsd-файла структуру xml и в соответствующую плоскую таблицу и импортировать...
Сейчас делаю все руками, т.е. нахожу сначала все «ветвящиеся» ноды, потом рекурсивно обхожу их (декартово произведение) и ручками прописываю в коде название каждой ноды/атрибута...
Может есть более элегантный подход, а то описывать форматы всех видов/групп xml очень долго будет?
Здравствуйте, .alex, Вы писали:
A>Так вот собственно вопрос, если способ как-то динамически формировать из .xsd-файла структуру xml и в соответствующую плоскую таблицу и импортировать...
Можно засосать XML в кучу таблиц, а потом заджойнить в одну плоскую. Тогда декартово произведение ляжет на плечи MSSQL, а он умеет с ним справляться.
PS Мне кажется, в предыдущей теме был этот же вопрос, но другими словами.
Вопрос не совсем понятен. Обработай XSD и делай чего хочешь. XSD это же обычный XML документ с определённой структурой. Если у тебя их много, скорей всего и структура у них будет типовая.
Здравствуйте, Mihas, Вы писали:
M>Здравствуйте, .alex, Вы писали:
M>Можно засосать XML в кучу таблиц, а потом заджойнить в одну плоскую. Тогда декартово произведение ляжет на плечи MSSQL, а он умеет с ним справляться.
Да, наверно так будет правильнее, ибо в новых xml настолько много ветвлений, что произведение "каждый — с каждым" очень сильно "раздует" плоскую таблицу. Правильнее будет кусками джойнить и впоследствии искать только в нужных частях...
Буду безмерно благодарен за пример на любом языке, по загрузке xml'ок автоматом, который автоматом делит их на несколько табличек с ключами для связей... При том, что они не "однородны", т.е не все ветвящиеся ноды есть во всех xml... Т.е. для загрузки по-идеие нужно указать xsd, как "эталон"... (типа в нем прописаны все возможные варианты ветвящихся нодов)
M>PS Мне кажется, в предыдущей теме был этот же вопрос, но другими словами.
Да, задача та же, просто в предыдущем вопросе был только один тип xml, и в принципе я ее решил через "ручное" декартово произведение... а сейчас куча разных по форме xml'ок...
И еще один момент... Ведь можно в mssql server хранить xml как просто тип... А запросы писать по содержимому этого xml можно? Если да, то можно пример... Например select по какому нибудь полю xml и применить какую-нибудь агрегатную функцию к данным xml...
В общем случае не получиться. Элементы chioce не очень укладываются в плоскую таблицу.
A>Сейчас делаю все руками, т.е. нахожу сначала все «ветвящиеся» ноды, потом рекурсивно обхожу их (декартово произведение) и ручками прописываю в коде название каждой ноды/атрибута...
Вы бы образец привели для наглядности.
A>Может есть более элегантный подход, а то описывать форматы всех видов/групп xml очень долго будет?
Так автоматизируйте процесс любым перлом.