Как стать автором
Обновить
11.62

XML *

Расширяемый язык разметки

Сначала показывать
Порог рейтинга
Уровень сложности

XML практически всегда применяется не по назначению

Время на прочтение 6 мин
Количество просмотров 52K

Язык XML был изобретен в 1996 году. Едва он успел появиться, как возможности его применения уже начали понимать неправильно, и для тех целей, к которым его пытались адаптировать, он был не лучшим выбором.

Не будет преувеличением сказать, что подавляющее большинство схем XML, которые мне доводилось видеть, представляли собой нецелесообразное или неправильное использование XML. Более того, такое применение XML свидетельствовало о фундаментальном непонимании того, чем прежде всего является XML.

XML — это язык разметки. Это не формат данных. В большинстве схем XML это разграничение явно не учитывали, путая XML с форматом данных, что в итоге означало ошибку в самом выборе XML, поскольку на самом деле нужен был именно формат данных.
Читать дальше →
Всего голосов 126: ↑98 и ↓28 +70
Комментарии 95

«Неуловимый» список установленных обновлений Windows

Время на прочтение 13 мин
Количество просмотров 53K
Вы когда-нибудь задумывались, с помощью чего формируется список установленных обновлений Windows? А через какое API его достать? Ответы на эти и другие возникающие вопросы я постараюсь дать в своём небольшом исследовании.


Подробности - под катом
Всего голосов 28: ↑28 и ↓0 +28
Комментарии 15

Конструирующий XPath? Алгоритмический XPath? Ничего, кроме XPath

Время на прочтение 5 мин
Количество просмотров 7K
Здравствуйте, уважаемые читатели. В этой публикации речь пойдет о немного нестандартных применениях такого хорошо известного формализма как XPath. Все знают, что он очень удобен для извлечения информации из XML- или HTML- или еще каких-нибудь *ML-документов (как простых текстовых, так и каких-нибудь виртуальных, которые являются верхним слоем представления какой-либо сложной информации), то есть для того, чтобы задавать этим документам какие-либо вопросы. Однако известно, что чем лучше сформулирован вопрос, тем большую часть ответа он уже содержит. Поэтому напрашивается простая мысль – а нельзя ли использовать записанные на XPath выражения как утверждающие, то есть достраивающие документ таким образом, чтобы это XPath-выражение было истинным? Думаю можно, и это первое, о чем здесь пойдет речь. И второе – если уж мы научимся путем прямого применения XPath создавать новые элементы в документе, то нельзя ли превратить XPath в простой алгоритмический язык программирования? В самом деле, обращаться к данным умеет, создавать данные умеет. Несложно представить, как на нем описать последовательность операторов и оператор ветвления, остается подумать о циклах в нем и о функциях. Это интересно, ну хотя бы, теоретически. И об этом тоже пойдет речь.
Читать дальше →
Всего голосов 21: ↑20 и ↓1 +19
Комментарии 19

Генератор бизнес писем в PDF по данным из XML

Время на прочтение 2 мин
Количество просмотров 3.9K
Очень часто в производстве возникает задача разослать несколько писем с вложением в формате pdf. Это могут быть не только счета или фактуры, но и извещения или приглашения, персональные сообщения об акциях и тому подобное. Конечно, еще со свадьбы в записной книжке завалялось сотня другая человек. Текст письма может быть как статическим, так и вариативным. И тут обегаешься по всему интернету с вопросом как это сделать…

Возьмем за основу письмо следующего содержания



Текст тела письма при рассылке не будет меняться, за исключением текста, выделенного курсивом, соответственно отправитель тоже будет один, а вот адресатов будет несколько

Подготовим базу адресатов в xml формате, я не буду пояснять что там значит заголовок, думаю, что опытный читатель разберется сам. Отмечу только, что формат легко меняется под ваши данные, которые набиваются по вашему индивидуальному шаблону

Итак, база получателей (оригинальные xml файлы размещены по ссылке в конце. Вы можете скачать их и изменить по собственному желанию)


Читать дальше →
Всего голосов 10: ↑8 и ↓2 +6
Комментарии 5

Истории

PHP: Как разобрать сложный XML-файл и не утонуть в собственном коде

Время на прочтение 8 мин
Количество просмотров 15K
Доброе время суток!

Сфера применения XML-формата достаточно обширна. Наряду с CSV, JSON и другими, XML — один из самых распространенных способов представить данные для обмена между различными сервисами, программами и сайтами. В качестве примера можно привести формат CommerceML для обмена товарами и заказами между 1С «Управление торговлей» и интернет-магазином.

Поэтому практически всем, кто занимается созданием веб-сервисов, время от времени приходится сталкиваться с необходимостью разбора XML-документов. В своем посте я предлагаю один из методов, как это сделать по возможности наглядно и прозрачно, используя XMLReader.
Читать дальше →
Всего голосов 26: ↑22 и ↓4 +18
Комментарии 30

Как написать вредное API

Время на прочтение 5 мин
Количество просмотров 6.6K

Пишите код так, как будто сопровождать его будет склонный к насилию психопат, который знает, где вы живёте.


Всем привет!


Я работаю тимлидом команды Integration Development в сервисе онлайн-бронирования отелей Ostrovok.ru и сегодня хотел бы поделиться своим опытом работы с различными API.



Как разработчик системы, работающей с внешними поставщиками, я часто встречаюсь с различными API – чаще всего это SOAP/REST или что-то на них похожее. Однако от работы со многими из них остается впечатление, что их писали, не руководствуясь ни техническими правилами, ни здравым смыслом – как будто бы по книге “Вредные советы” Григория Остера. В данной статье я постараюсь описать такие случаи в стиле “вредных советов” и рассмотрю примеры, связанные с XML. Комментарии и обсуждение приветствуются.

Читать дальше →
Всего голосов 20: ↑18 и ↓2 +16
Комментарии 8

Искусство парсинга или DOM своими руками

Время на прочтение 14 мин
Количество просмотров 15K
Привет, Хабр! Недавно я задался идеей создать простой язык разметки наподобие markdown, который отлично подходил бы для моих задач, а именно — быстрого написания лекций с форматированием и возможностью вставки математических формул «на лету», с применением одной лишь клавиатуры. Чтобы перевести текст, написанный в таком формате, в более понятную форму, например, документ LibreOffice Writer, нужен синтаксический анализатор, проще говоря — парсер. Поскольку я привык делать велосипеды, то направился в поисковые системы с запросами «parser example», «html to DOM», «how to parse html» и др. К моему разочарованию, на всех найденных ресурсах либо приводились элементарные примеры типа калькулятора Страуструпа с рекурсивным спуском, либо использовались готовые решения, такие как flex, bison, llvm и yacc. Библиотек, предназначенных для парсинга строго определённых языков, нашлось ещё больше (gumbo, jsoup, rapidjson, инструменты Qt и др.) Ни то, ни другое не входило в мои планы по написанию парсера своей разметки на C++ с использованием лишь стандартной библиотеки, поэтому моим источником знаний об искусстве парсинга вместо электронных ресурсов стали методички технических институтов. О том, как взять текст и построить из него AST (абстрактное синтаксическое дерево), о некоторых подводных камнях, на которые я натыкался в процессе, о возможных ошибках я сегодня и расскажу.

Сразу оговорюсь, — если ваша цель — свой скриптовый язык или что ещё сложнее, этой статьи будет недостаточно для его реализации. В идеале нужно на отлично знать теорию автоматов и дискретные структуры. Но в качестве отправной точки можно пока ограничиться и моим опытом, которым я щедро поделюсь под катом. Это не совсем то, что я задумывал изначально, зато идеально подходит для примера. Парсить мы будем HTML, как простой и всем знакомый язык.
Читать дальше →
Всего голосов 22: ↑15 и ↓7 +8
Комментарии 17

Мой адрес не дом и не улица, мой адрес – Советский Союз?

Время на прочтение 13 мин
Количество просмотров 4K
microBIGDATA или ФИАС в кармане


Питер Брейгель Младший, Уплата налога, 1640 год

Прошлый заход на бреющем по объектам зашел. Продолжим разведку боем. Сегодня поговорим о тяжелом. Пусть ещё не о BIG DATA, но работать уже неудобно – достаточно большие объёмы данных. Не каждому влезет в оперативную память целиком, а некоторым не влезет даже на диск (не места мало, а хламу много). Имя нашему подопечному БД ФИАС — база данных федеральной адресной информационной системы. Архив в 5,5 ГБ. И это сжатый в архив XML. После распаковки будут полные 53 ГБ (для распаковки запасайте 110 ГБ). И как начнёшь его парсить да конвертить, то и 110 ГБ будет мало. О потребном размере ОЗУ тоже будет.
Читать дальше →
Всего голосов 12: ↑10 и ↓2 +8
Комментарии 7

Jaxb (XJC) генерация классов из XML Schema (XSD) с описаниями классов и полей в виде аннотаций. XJC плагин

Время на прочтение 5 мин
Количество просмотров 35K

Думаю многие Java-разработчики которые хоть раз сталкивались с Web-сервисами, использовали генерацию Java DTO классов по описанию XML Schema (XSD). Jaxb с этим справляется на ура, не важно как его использовать, через xjc или wsimport вызов из командной строки, maven или gradle плагины.


Так быстро и просто сгенерировать классы из XSD схемы. Но вот одна проблема — практически полностью пропадают описания, имевшиеся в исходной схеме!


Практически, потому что Javadoc описание будет только у самого класса, в фиксированном формате (где не разделить описание и фрагмент XML без регулярок скажем), описание полей (филдов) отсутствуют полностью. А если вам они, как мне, нужны ещё и во время выполнения (runtime) — тут совсем беда.


Именно с этим, пришлось побороться, как ни странно, задача заняла много времени, и в результате я написал плагин, который и хотел бы представить в надежде что он может кому-то сэкономить несколько часов в будущем.

Читать дальше →
Всего голосов 14: ↑13 и ↓1 +12
Комментарии 5

XAML Behaviors для WPF теперь Open Source

Время на прочтение 2 мин
Количество просмотров 11K
Рады сообщить, что совсем недавно XAML Behaviors для WPF стал Open Source.

В прошлом году мы открыли исходный код XAML Behaviors для UWP, который имел большой успех, и пакет Behaviors NuGet был загружен более 500 000 раз. XAML Behaviors для WPF теперь поставляется в виде пакета NuGet — Microsoft.Xaml.Behaviors.Wpf. Подробнее под катом!

Читать дальше →
Всего голосов 16: ↑15 и ↓1 +14
Комментарии 2

Создание адаптивных изображений

Время на прочтение 53 мин
Количество просмотров 13K
В Интернете найдется немало статей, посвященных адаптивным логотипам. Наиболее популярным примером является сайт Responsive Logos, который показывает различные варианты известных логотипов для разных размеров экрана. Когда я впервые увидел это, я подумал, что это не более, чем просто ловкий трюк. В конце концов, это просто div для спрайта большого изображения в качестве фона. Так было до того момента, пока я не услышал доклад на Smashing Conference от MikeRiethmuller под названием «За пределами медиазапросов». Кроме того, я настоятельно рекомендую прочитать его же статью «Большой потенциал SVG».



Я узнал две вещи, которые меня потрясли:

  1. При использовании SVG вы можете отказаться от атрибута viewBox и установить новую систему координат на вложенных элементах SVG путем применения нового viewBox. (Да, я знаю. Это звучит странно. Ниже я объясню все более подробно).
  2. Когда вы используете медиазапросы внутри SVG-файлов, а затем вставляете изображение через тег img или в качестве фонового изображения CSS, медиазапросы привязаны к ширине изображения. Практически такое же поведение, как и при использовании контейнерных запросов.
Читать дальше →
Всего голосов 17: ↑17 и ↓0 +17
Комментарии 3

Документирование форматов информационного обмена — легко и просто

Время на прочтение 12 мин
Количество просмотров 9.6K

1. Вступление


В далеком 2001 году, консорциум W3C выработал рекомендации языка определения схем XML (XSD), объединив наиболее популярные языки описания схем в один стандарт. Основная цель, которая при этом преследовалась – получение платформо-независимого стандарта, который могут использовать все участники информационного обмена. Обуздав хаос, XML стал самым привлекательным форматом информационного обмена. В наши дни XML формат в информационных технологиях используется очень широко, выйдя далеко за рамки простого обмена данных.

Следствием популярности и широты использования XML становятся как увеличение объемов, так и усложнение структуры передаваемых в XML данных. Свою немалую лепту в этот процесс внес и более молодой и простой формат JSON, который «отобрал» у XML все информационные потоки с более-менее простой структурой форматов сообщений. На сегодня мы имеем то, что XSD схемы, описывающие структуру данных XML сообщений, стали большими и сложными. Читать большие и сложные схемы в текстовом виде стало очень тяжело, поэтому возникает необходимость как в специальном ПО, так и в актуальной документации, которая описывает форматы XML сообщений.
В этой статье я расскажу о том, как решалась проблема документирования форматов XML сообщений, используемых для информационного обмена…


Читать дальше →
Всего голосов 7: ↑7 и ↓0 +7
Комментарии 10

Protobuffers — это неправильно

Время на прочтение 10 мин
Количество просмотров 55K
Значительную часть своей профессиональной жизни я выступаю против использования Protocol Buffers. Они явно написаны любителями, невероятно узкоспециализированы, страдают от множества подводных камней, сложно компилируются и решают проблему, которой на самом деле нет ни у кого, кроме Google. Если бы эти проблемы протобуферов остались в карантине абстракций сериализации, то мои претензии на этом и закончились бы. Но, к сожалению, плохой дизайн Protobuffers настолько навязчив, что эти проблемы могут просочиться и в ваш код.

Узкая специализация и разработка любителями

Остановитесь. Закройте свой почтовый клиент, где уже написали мне полписьма о том, что «в Google работают лучшие в мире инженеры», что «их разработки по определению не могут быть созданы любителями». Не хочу этого слышать.

Давай просто не будем обсуждать эту тему. Полное раскрытие: мне доводилось работать в Google. Это было первое (но, к сожалению, не последнее) место, где я когда-либо использовал Protobuffers. Все проблемы, о которых я хочу поговорить, существуют в кодовой базе Google; это не просто «неправильное использование протобуферов» и тому подобная ерунда.
Читать дальше →
Всего голосов 33: ↑28 и ↓5 +23
Комментарии 32

Ближайшие события

Московский туристический хакатон
Дата 23 марта – 7 апреля
Место
Москва Онлайн
Геймтон «DatsEdenSpace» от DatsTeam
Дата 5 – 6 апреля
Время 17:00 – 20:00
Место
Онлайн
PG Bootcamp 2024
Дата 16 апреля
Время 09:30 – 21:00
Место
Минск Онлайн
EvaConf 2024
Дата 16 апреля
Время 11:00 – 16:00
Место
Москва Онлайн

История одного API: как мы превратили Франкенштейна в красавчика

Время на прочтение 5 мин
Количество просмотров 9.4K
Что нужно, чтобы построить экосистему небанковских сервисов, да и вообще любую подобную экосистему? Мастер-система хранения и обработки данных, а также API. В этом посте мы разберем две версии созданного нами API — первую и удачную — и подробно остановимся на том, в чем их важные отличия друг от друга.


Читать дальше →
Всего голосов 35: ↑28 и ↓7 +21
Комментарии 8

PowerShell и Group Policy Preferences, когда счет принтеров на сотни

Время на прочтение 22 мин
Количество просмотров 11K


Много копий сломано вокруг управления сетевыми принтерами на пользовательских компьютерах. В основном администраторы разбились на два лагеря: подключение логон-скриптами (bat/vbs) и управление через GPP. У обоих подходов есть свои плюсы: скрипты быстрее обрабатываются, а GPP гибче и применяется чаще, чем пользователи перезагружают компьютеры. Но когда принтеров больше сотни и разбросаны они в нескольких десятках офисов и городов, сложности будут в обоих случаях.

Нужно не только подключить правильный набор принтеров каждому пользователю, с учетом его текущего местонахождения, но и ни про один не забыть. А если иногда перемещаются не только пользователи, но и сами принтеры…

В общем, мы с коллегами для себя выбрали GPP, в первую очередь для того, чтобы кто-то кроме ведущих администраторов мог разобраться в действующем конфиге, просто посмотрев отчет GPMC. Однако, кто скажет, что его штатный интерфейс удобен для управления 100+ устройствами — пусть первый бросит в меня камень. Кроме того, при вводе в эксплуатацию очередной партии нужно проделать много рутины по настройке сетевого сканирования и добавлению на сервер печати.

А всё, что делается больше одного раза, можно автоматизировать!

Что мы сегодня будем делать?

  • вести учет всех сетевых принтеров;
  • автоматизировать добавление принтеров в GPP (PS/XML);
  • автоматизировать добавление принтеров на принт-сервер, причем на кластерный (BAT/VBS)!

Итак, начнем.
Читать дальше →
Всего голосов 14: ↑14 и ↓0 +14
Комментарии 21

Как я генерил XML-статформу для таможни и про объединение ФТС с налоговой

Время на прочтение 9 мин
Количество просмотров 9.7K
Все началось, когда пришло оно. Загадочное письмо с Владимирской(?!) таможни. Внутри обнаружилось требование предоставить статистические данные по торговле с Беларусью и Казахстаном аж за весь прошлый год. И ссылка на указ государев, как и полагается.
«Ибо теперича ежели со странами таможенного союза торг ведешь — изволь ответ держать. Кому, куда, чего позапродал. Все без утайки пиши и особливо номер ГТД не забудь. Око государево — не глаз дремотный. Системы электронные псами железными за вами, нерадивыми, ныне следить поставлены, потому не хитри. Срок положенный помни.»



Забегали бухгалтера, засуетились манагеры. Об указе век они не слыхали, не было им такой печали. Оказалось надо было еще год назад зарегистрироваться на сайте ФТС и ежемесячно передавать данные о всех торговых операциях со странами ЕАЭС (иначе административный штраф до 50 тысяч рублей за каждую форму. См. N 510-ФЗ от 28.12.2016).
Читать дальше →
Всего голосов 5: ↑4 и ↓1 +3
Комментарии 4

Парсинг 0.5Tb xml за несколько часов. Поиск организаций в открытых данных реестра субъектов МСП ФНС

Время на прочтение 9 мин
Количество просмотров 13K
По роду деятельности (автоматизация процессов и разработка архитектуры информационных систем) часто приходится сталкиваться с необходимостью написать скрипт и получить результат «здесь и сейчас» для неожиданно «прилетевшей» задачи в ситуации, когда нет возможности оперативно привлечь внешних разработчиков.

Решению одной из таких задач будет посвящен обзор. В какой-то момент появилась необходимость проанализировать на основе открытых данных “Единого реестра субъектов малого и среднего предпринимательства” Федеральной налоговой службы (далее Реестр МСП) динамику по месяцам количества организаций определенного вида деятельности, а именно, сельхозпредприятий. Подходы, которые использовались при ее решении, надеюсь будут полезны тем, кто ищет варианты обработки больших структурированных массивов данных XML, но распространенные средства обработки такие как SelectFromXML, он-лайн XML обработчики по каким-то причинам не подходят. Либо ограничен функционал, либо возникают проблемы при работе с кириллической кодировкой, либо не обеспечивается необходимая производительность, либо ограничены ресурсы «железа». Программисты и профессионалы надеюсь не буду слишком строги к стилю кодирования и выбору способов реализации, а критика и советы в комментариях приветствуются.

Итак задача:
Читать дальше →
Всего голосов 26: ↑20 и ↓6 +14
Комментарии 21

Информационная архитектура и технология DITA. По мотивам лекции в Яндексе

Время на прочтение 21 мин
Количество просмотров 14K
Darwin Information Typing Architecture (DITA) — XML-технология для автоматизации процессов, связанных с технической документацией. За время существования DITA накопилось большое количество разнообразных возможностей, подходов к организации контента, а также конкретных механизмов их реализации. Запутаться в них немудрено, и это часто приводит к появлению непонятных, неэффективных и просто неудобных решений по автоматизации документирования. Директор по проектам компании «Философт» Михаил Острогорский раскладывает всё по полочкам.


Предисловие


Предлагаемая статья написана по мотивам небольшого доклада, сделанного автором на одном из «Гипербатонов», которые время от времени бывают в Яндексе. Не то что бы я был слишком недоволен собой как оратором, но в этом случае публиковать дословную расшифровку устной речи — не лучшая идея, на мой взгляд.
Всего голосов 27: ↑27 и ↓0 +27
Комментарии 0

SQL Server JSON

Время на прочтение 26 мин
Количество просмотров 37K


Когда много лет подряд Microsoft лихорадит из одной крайности в другую, то понемногу начинаешь привыкать к этому и все новое ждешь с неким скепсисом. Со временем это чувство становится только сильнее и подсознательно ничего хорошего уже не ожидаешь.

Но иногда все получается в точности да наоборот. Microsoft вываливает из коробки идеально работающий функционал, который рвет все устоявшиеся жизненные стереотипы. Ты ждешь от новой функционала очередных граблей, но, с каждой минутой, все больше понимаешь, что именно этого тебе не хватало все эти годы.

Такое пафосное вступление имеет определенные на то основания, поскольку долгое время на Microsoft Connect поддержка работы с JSON на SQL Server была одной из самых востребованных фич. Шли годы и неожиданно данный функционал реализовали вместе с релизом SQL Server 2016. Забегая вперед скажу, что вышло очень даже хорошо, но Microsoft не остановилась на этом и в SQL Server 2017 существенно улучшили производительность и без того быстрого JSON парсера.
Подробнее
Всего голосов 47: ↑43 и ↓4 +39
Комментарии 15

Злой XML с двумя кодировками

Время на прочтение 4 мин
Количество просмотров 28K
WAFы видят вместо документа белый шум!
00000000 3C3F 786D 6C20 7665 7273 696F 6E3D 2231 <?xml version="1
00000010 2E30 2220 656E 636F 6469 6E67 3D22 5554 .0" encoding="UT
00000020 462D 3136 4245 2200 3F00 3E00 3C00 6100 F-16BE".?.>.<.a.
00000030 3E00 3100 3300 3300 3700 3C00 2F00 6100 >.1.3.3.7.<./.a.
00000040 3E >
В статье — небольшой рассказ про кодировки в XML и про обход WAFов с их помощью.
Читать дальше →
Всего голосов 18: ↑18 и ↓0 +18
Комментарии 5

Вклад авторов