Система и способ взаимного преобразования программных объектов и документов на базе элементов структурированного языка

Изобретение относится к взаимному преобразованию документа (например, документа на языке XML) и программного объекта (например, объекта языка Java). Его использование позволяет эффективно реализовать создание структуры для такого преобразования с помощью стандартных инструментальных средств. В такой структуре используется обработчик, маскирующий метод получения свойств преобразования. За счет этого формируют код преобразования, имеющий общий вид для преобразования в обе стороны. Преобразователь преобразует документ на языке XML в программный объект при помощи анализатора 104. Для осуществления преобразования в другом направлении (из языка Java в язык XML) необходимо, чтобы элементы документа на языке XML были выстроены в определенном порядке с тем, чтобы обеспечить адекватность полученного документа 118 на языке XML. Для этого в настоящем изобретении создается документ-шаблон на языке XML с использованием, например, технологии JSP. Шаблоны, созданные на базе JSP, позволяют записывать теги документов в JSP с возможностью обратного вызова для получения значений элементов и атрибутов. Содержание может быть направлено в буфер или непосредственно в ответный поток сервлета. 4 н. и 18 з.п. ф-лы. 4 ил., 8 табл.

 

Область техники

Настоящее изобретение относится к взаимному преобразованию или отображению программных объектов и документов на базе элементов структурированного языка, в частности взаимному преобразованию различных программных объектов, таких как объекты языка Java™ и документы на языке XML (расширяемый язык разметки).

Предпосылки создания изобретения

Язык XML является сокращенной версией стандартного обобщенного языка разметки (SGML), которая разработана специально для создания страниц WWW. Он позволяет разработчикам создавать собственные специальные теги, обеспечивающие функциональные возможности, недоступные в языке HTML.

Например, язык XML поддерживает ссылки, указывающие на множество документов, в отличие от языка HTML, в котором каждая ссылка может указывать только на один адрес.

Поскольку язык XML является формой самоописания данных (которые в настоящей заявке также именуются элементами структурированного языка), он используется для кодирования мощных по содержанию моделей данных. Таким образом, язык XML может использоваться в качестве средства обмена данными между разнородными системами. На языке XML могут быть представлены или опубликованы данные множества различных систем: существующих программ на языке программирования КОБОЛ, баз данных, программ на языке программирования C++ и подобных им программ. При этом часто возникает экономическая задача, которая заключается в том, каким образом отобразить информацию, содержащуюся в документе на языке XML, в других форматах данных и наоборот. Например, после осуществления обмена информацией между организациями путем передачи документа на языке XML может потребоваться преобразовать такую информацию в объект языка Java, который может быть использован при создании базы данных или осуществлении запроса транзакции.

В патенте US 6125391, выданном 26 сентября 2000 года на имя Meltzer'a и др., описан пример инструментального средства преобразования данных из языка XML в язык Java. Для такого преобразования в названном патенте осуществляют анализ документа на языке XML и обнаруживают события. В частности, один анализатор осуществляет разбор документа на языке XML и создает в памяти древовидное представление, к которому может быть обращен запрос, а другой анализатор осуществляет разбор документа на языке XML и обнаруживает события, содержащие информацию о документе (например, событие начала документа, событие начала элемента с именем элемента, содержанием элемента, событие окончания элемента, событие окончания документа и т.д.).

Для преобразования из языка Java в язык XML в патенте Meltzer'a и др. описано генерирование кода, имеющего аксессоры для каждого элемента. Аксессор элемента имеет цикл, периодически повторяющийся для каждого символа. Цикл содержит оператор-переключатель, выполняющий определенное действие в зависимости от того, что представляет собой символ. Задачей такого действия является создание строкового буфера, содержащего фрагмент элемента документа на языке XML. Решение по патенту Meltzer'a и др. не обеспечивает создание вспомогательной инфраструктуры для работы с кодом, осуществляющим преобразование из языка Java в язык XML. Код, используемый в решении по патенту Meltzer'a и др., полностью генерируется и неудобен для редактирования пользователем.

Следовательно, существует потребность в создании структуры взаимного преобразования программных объектов и документов на базе элементов структурированного языка (например, языка XML), которая может быть эффективно реализована с использованием стандартных инструментальных средств.

Краткое изложение сущности изобретения

Изложенные выше недостатки известного уровня техники отсутствуют в способе и системе по настоящему изобретению, в котором предложена единая интегрированная среда для взаимного преобразования документов (например, документа на языке XML) и программных объектов (например, объекта языка Java). В данной интегрированной среде используется обработчик, маскирующий способ получения свойства для преобразования. В результате формируется код преобразования, имеющий общий вид для преобразования в обе стороны. Взаимное преобразование элементов языка XML и свойств объекта языка Java происходит в преобразователе. Преобразователь осуществляет преобразование документа на языке XML в программный объект с использованием анализатора (такого как анализатор стандарта DOM (объектная модель документов) или простой интерфейс прикладного программирования (API-интерфейс) для языка XML (стандарт SAX)).

Для осуществления преобразования в другом направлении (из языка Java в язык XML) необходимо, чтобы элементы документа на языке XML были выстроены в определенном порядке с тем, чтобы обеспечить достоверность полученного документа на языке XML. Для обеспечения такой достоверности в примерном варианте осуществления настоящего изобретения создается документ-шаблон на языке XML с использованием, например, JavaServer Pages™ (JSP). Шаблоны, созданные на базе JSP, позволяют записывать теги документов в JSP с возможностью осуществления обратных вызовов для получения значений элементов и атрибутов. JSP имеет средства поддержки редактирования, что позволяет эффективно осуществлять создание шаблонов. Кроме того, содержание (содержимое) может быть направлено в буфер или непосредственно в ответный поток сервлета.

Соответственно, объектом настоящего изобретения является реализуемый в компьютере способ преобразования структуры данных, представляющей программный объект, в элементы структурированного языка документа. Предлагаемый в изобретении способ заключается в том, что (а) генерируют шаблон указанного документа, (б) считывают свойства программного объекта, которые взаимосвязаны с элементами структурированного языка документа, (в) с использованием считанных свойств получают образованные элементами структурированного языка конструкции на основе взаимосвязи между этими свойствами и элементами структурированного языка и посредством кода преобразования, обеспечивающего как преобразование программного объекта в документ на основе элементов структурированного языка, так и преобразование в обратном направлении, и (г) полученными конструкциями заполняют шаблон документа.

При осуществлении вышеописанного способа на шаге (в) может осуществляться непосредственный обратный вызов программного объекта для получения свойств, отображающих конструкции, определяющие структуру и содержание документа. Кроме того, на шаге (в) может создаваться объектная модель, отображающая структуру и содержание документа, а для обработки повторяющихся элементов структурированного языка на шаге (в) может быть предусмотрено создание в документе-шаблоне цикла. Элементы структурированного языка предпочтительно представляют собой конструкции языка XML (расширяемый язык разметки).

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

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

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

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

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

Для поддержания состояния обработки предложенный способ может предусматривать обратный вызов интерфейса преобразования. Определение необходимости генерирования выбранных частей документа через компилированный шаблон можно осуществлять посредством вызова методов isOptionalElementPresent или isOptionalAttributePresent.

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

Определение количества циклов, выполняемых шаблоном на выбранных участках документа, можно осуществлять посредством вызова метода getElementRepetitions.

Во всех вариантах осуществления изобретения элементы структурированного языка могут представлять собой конструкции языка XML (расширяемый язык разметки). В этом случае для создания документа-шаблона может использоваться технология JavaServer Pages (JSP).

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

Другие особенности и признаки настоящего изобретения содержатся в приведенном ниже описании конкретных вариантов его осуществления со ссылкой на приложенные чертежи.

Краткое описание чертежей

Дополнительные признаки и преимущества настоящего изобретения раскрыты в подробном описании со ссылкой на приложенные чертежи, на которых:

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

на фиг.2 - блок-схема, иллюстрирующая структуру интегрированной среды для преобразования объектов языка XML в язык Java и наоборот,

на фиг.3 - схема последовательности операций, иллюстрирующая способ преобразования документа на языке XML в программный объект с использованием интегрированной среды, показанной на фиг.2,

на фиг.4 - схема последовательности операций, иллюстрирующая способ преобразования программного объекта в документ на языке XML с использованием интегрированной среды, показанной на фиг.2.

Подробное описание вариантов осуществления настоящего изобретения

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

В целом, программные модули содержат подпрограммы, программы, компоненты, структуры данных и аналогичные программы, выполняющие определенные задачи или реализующие определенные абстрактные типы данных. Кроме того, настоящее изобретение также может быть реализовано с использованием вычислительных систем, имеющих другие конфигурации, включая портативные устройства, многопроцессорные системы, микропроцессорную или программируемую бытовую электронику, мини-ЭВМ, универсальные ЭВМ и тому подобные устройства. Изобретение также может быть реализовано в распределенных вычислительных средах, в которых задачи выполняют удаленные процессоры, связанные сетью передачи данных.

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

Как показано на фиг.1, типовая система 10 включает обычную персональную ЭВМ 20, имеющую процессор 22, системную память 24 и системную шину 26, связывающую различные компоненты системы, в том числе системную память 24 с процессором 22. Системная шина 26 имеет шинные структуры нескольких типов, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, в которых используется любая из множества обычных шинных архитектур (например, PCI (локальная шина соединения периферийных устройств), VESA (Ассоциация по стандартам в области видеоэлектроники), ISA (промышленная стандартная архитектура), EISA (расширенный промышленный стандарт шинной архитектуры) и т.д.).

Системная память 24 имеет постоянное запоминающее устройство (ПЗУ) 28 и запоминающее устройство с произвольной выборкой (ЗУПВ) 30. В ПЗУ 28 хранится базовая система 32 ввода-вывода (BIOS), содержащая основные подпрограммы, способствующие обмену информацией между элементами внутри ЭВМ 20, например, во время запуска. ЭВМ 20 также имеет накопитель 34 на жестких магнитных дисках - НЖМД, накопитель 36 на гибких магнитных дисках - НГМД (для считывания и записи на съемный диск 38) и запоминающее устройство (ЗУ) 40 на компакт-дисках (для чтения компакт-дисков 42 или чтения или записи на другие оптические носители данных). Запоминающие устройства 34, 36 и 40 соединены с системной шиной 26 при помощи интерфейсов 44, 46 и 48, соответственно.

Накопители 34, 36 и 40 и соответствующие машиночитаемые носители (38, 42) обеспечивают энергонезависимое хранение данных, структур данных и команд для ЭВМ 20. Носители данных, показанные на фиг.1, являются лишь примерами, а специалистам в данной области техники известно применение иных типов носителей, считываемых ЭВМ (например, магнитных кассет, карт флэш-памяти, цифровых видеодисков и т.д.).

В накопителях 34, 36 и 40 и ЗУПВ 30 может храниться ряд программных модулей, включая операционную систему 50, одну или несколько прикладных программ 52, другие программные модули 54 и программные данные 56. Пользователь может вводить команды и информацию в ЭВМ 20 при помощи клавиатуры 58 и устройства 60 ввода (например, мыши, микрофона, джойстика, игровой сенсорной панели, спутниковой антенны, сканера и т.д.). Такие устройства (58 и 60) соединены с процессором 22 при помощи интерфейса 62 портов (например, последовательного порта, параллельного порта, игрового порта, универсальной последовательной шины (УПШ) и т.д.), который связан с шиной 26. С шиной 26 при помощи интерфейса 66 (например, видеоадаптера) также связан монитор 64 или устройство индикации иного типа.

ЭВМ 20 может работать в сетевой среде, в которой она логически связана с одним или несколькими удаленными ЭВМ, такими как удаленная ЭВМ 68. Удаленная ЭВМ 68 может являться сервером, маршрутизатором, равноправным устройством или иным обычным узлом сети и, как правило, имеет множество или все элементы, описанные применительно к ЭВМ 20, однако для упрощения показано лишь запоминающее устройство 70. Показанные на фиг.1 логические связи включают локальную сеть 72 и глобальную сеть 74. Такое сетевое окружение обычно используется в учреждениях, корпоративных сетях, интрасетях и сети Internet.

При использовании в условиях локального сетевого окружения ЭВМ 20 соединена с локальной сетью 72 посредством сетевого интерфейса или адаптера 76. При использовании в условиях глобального сетевого окружения ЭВМ 20 обычно имеет модем 78 или иное средство для поддержания связи по глобальной сети 74, такой как Internet. Модем 54, который может быть встроенным или внешним, посредством интерфейса 62 портов соединен с шиной 26. В условиях сетевого окружения программные модули, показанные применительно к ЭВМ 20, или их части, могут храниться в удаленном запоминающем устройстве 70.

Способ по настоящему изобретению описан на примере преобразования, или отображения, документов XML в объекты Java, а также объектов Java в документы XML. Возможна поддержка и других форматов данных. Например, множество существующих бизнес-приложений написаны на языках КОБОЛ, С и ПЛ/1. Такие приложения состоят из программ, хранящихся в информационных системах предприятия, таких как CICS™ (программное обеспечение общего назначения для оперативной обработки транзакций) или IMS™ (информационно-управляющая система). Язык КОБОЛ используется для ввода и вывода структур программы на языке КОБОЛ. Необходимо осуществлять преобразование из языка XML в язык КОБОЛ и из языка КОБОЛ в язык XML. Настоящее изобретение может применяться для таких преобразований, при этом в случае преобразования из языка XML в объект Х обработчик преобразования (описанный далее) заполняет структуру языка КОБОЛ данными из документа на языке XML, а в случае преобразования объекта Х в язык XML обработчик преобразования (описанный далее) извлекает данные из структуры языка КОБОЛ и пользуется шаблоном для заполнения документа на языке XML.

В способах преобразования по настоящему изобретению используется следующий процесс высокого уровня: (а) лексический анализатор группирует символы в слова или лексемы, распознаваемые определенной системой (условная разметка); (б) синтаксический анализатор анализирует группы лексем с тем, чтобы распознать допустимые языковые конструкции; и (в) генератор кода использует набор допустимых языковых конструкций и генерирует исполняемые коды. Шаги (а)-(в) могут выполняться в комбинированной форме. Например, в случае преобразования документа XML в объект Java осуществляется анализ каждого символа документа на языке XML с тем, чтобы распознать допустимые лексемы на языке XML, такие как начальные теги (открывающие), свойства, конечные (закрывающие) теги и разделы (секции) "CDATA". Затем лексемы необходимо верифицировать, чтобы определить, образуют ли они допустимые конструкции на языке XML. При верификации на самом нижнем уровне определяют, все ли тегирование имеет совпадающие начальные и конечные теги, и структурированы ли свойства в начальном теге должным образом. Если имеется описание документа в формате DTD (определение типа документа) или XML-схема, то возможно обеспечить, чтобы конструкции на языке XML, обнаруженные в процессе анализа, были допустимыми с точки зрения форматов DTD или XML-схема, а также представляли собой правильно сформулированный язык XML. Наконец, данные, содержащиеся в документе на языке XML, используются для выполнения какого-либо полезного действия (т.е. его преобразования в объект языка Java).

Некоторые из названных выше задач могут быть по меньшей мере частично решены при помощи легко доступных анализаторов документов XML. Анализаторы документов XML осуществляют лексический и синтаксический анализ. Примерами стандартов анализа являются стандарт SAX и стандарт DOM, реализованные в API-интерфейсе (SAX - простой интерфейс прикладного программирования (API-интерфейс) для языка XML; DOM - объектная модель документов).

SAX является стандартом на основе событий. Анализаторы документов XML, использующие стандарт SAX, генерируют события, соответствующие различным элементам, которые были обнаружены в подвергнутом анализу документе на языке XML. Стандарт DOM является простым интерфейсом прикладного программирования на основе объектного моделирования. Анализаторы документов XML на основе стандарта DOM создают в памяти групповую объектную модель, которая отображает содержание документа XML. По завершении анализа анализатором документа XML в памяти сохраняется древовидная структура объектов DOM, содержащая информацию о структуре и содержании документа XML.

На фиг.2 схематически показана интегрированная среда 100 согласно одному из вариантов осуществления настоящего изобретения. Интегрированная среда 100 показана на примере интегрального компонента 102, такого как сервлет, который может быть осуществлен в системе 10, показанной на фиг.1. В состав интегрального компонента 102 входит анализатор 104, реализованный с использованием, например, интерфейсов DOM или SAX, который взаимодействует с модулем 106 преобразования документа XML в программный объект. Для ясности при описании вариантов осуществления настоящего изобретения в качестве примера анализатора 104 использован анализатор с интерфейсом SAX.

Модуль 106 преобразования документа XML в программный объект принимает входной документ 108 на языке XML и генерирует выходной объект 110 на языке Java. Интегральный компонент 102 также имеет модуль документа-шаблона 112 на языке XML (например, на базе технологии JSP - JavaServer Pages™), который связан с модулем 114 преобразования программного объекта в документ XML. Модуль 114 преобразования программного объекта в документ XML принимает входной объект 116 на языке Java и генерирует выходной документ 118 на языке XML.

Преобразование документа XML в программный объект

Как показано на фиг.2, модуль 106 преобразования документа XML в программный объект имеет следующие компоненты:

(а) класс 106-1 источника входных данных (XML2xInputSource) для реализации входного документа 108 на языке XML;

(б) класс 106-2 обработчика буферизованного содержания (XML2xBufferedContentHandler) для реализации буфера событий стандарта SAX, генерированного анализатором 104;

(в) интерфейс 106-4 (XML2xMapping) преобразования для осуществления преобразования и определения входных и выходных целевых потоков; и

(г) класс 106-3 преобразования (XML2xMappingImpl), обеспечивающий методы преобразования входного документа 108 на языке XML в выходной объект 110 на языке Java.

Ниже подробно описаны различные интерфейсы и классы. Применительно к языку Java термины "класс" и "интерфейс" имеют особое значение. Класс языка Java (абстрактный, внутренний или окончательный) представляет собой совокупность компонентов данных и методов, характеризующих конкретный объект, а интерфейс Java используется для придания определенной функциональности реализующему их классу (т.е. интерфейсы определяют функции классов). Интерфейсы также служат для создания постоянных величин, используемых классами, реализующими интерфейс. Интерфейсы содержат постоянные параметры и описания методов, однако реализация методов зависит от классов, реализующих интерфейс. Один класс может реализовать любое число интерфейсов.

В таблице M106-1 приведены основные функции (т.е., не исчерпывающий перечень функций) класса 106-1 источника входных данных (XML2xInputSource).

Класс XML2xInputSource используется для того, чтобы обеспечить возможность чтения документа XML из байтового потока, потока символов или обработчика XML2xBufferedContentHandler 106-2.

Таблица M106-1
ФункцияОписание
available()Возврат числа байтов, которое может быть считано из входного потока без объединения в блоки
getBufferedHandler()Получение буферизованного обработчика событий стандарта SAX
getByteStream()Возврат байтового потока
getCharacterStream()Возврат считывателя потока символов
read()Считывание очередного байта данных из данного входного потока
skip()Пропуск байтов из данного входного потока

В таблице M106-2 приведены основные функции (т.е. не исчерпывающий перечень функций) класса 106-2 обработчика буферизованного содержания (XML2xBufferedContentHandler). Класс M106-2 обработчика также включает обработчик содержания для буферизации событий стандарта SAX, поступающих из анализатора 104. Это позволяет воспроизводить события. Примером ситуации, в которой данная функция полезна, является случай, когда для различных частей документа XML используются различные обработчики преобразования. Примером реализации является упрощенный протокол доступа к объекту (SOAP).

Таблица M106-2
ФункцияОписание
Characters (char[] ch, int start, int length);Комментарий к методу, в котором ch - это символы документа 108 на языке XML; start - начальная позиция в массиве; length - число символов для считывания из массива
parse()Исполнение событий стандарта SAX в буфере

SOAP является упрощенным протоколом обмена информацией в децентрализованной, распределенной среде. Он является протоколом на базе языка XML и состоит из трех частей: (1) конверта, образующего среду для описания содержания сообщения и способа его обработки; (2) набора правил кодирования для представления экземпляров, связанных с конкретным применением типов данных; и (3) условных обозначений для отображения удаленных вызовов и ответов на вызовы процедур. Сообщение SOAP является документом на языке XML, состоящим из обязательного конверта SOAP, необязательного заголовка SOAP и обязательного тела SOAP. В данном случае для обработки конверта и тела могут использоваться различные обработчики преобразования.

В таблице M106-3 приведены основные функции (т.е. неисчерпывающие) интерфейса преобразования 106-4 (XML2xMapping). Интерфейс XML2xMapping осуществляет преобразование и определяет конфигурацию входного потока.

Таблица M106-3
ФункцияОписание
Execute()Осуществление преобразования для создания формата входного документа 108 на языке XML. Полный пример функции execute() приведен ниже.
SetInputStream()Определение входного потока, т.е. источника входного документа 108 на языке XML, который подлежит преобразованию.

В таблице M106-4 приведены основные функции (т.е. неисчерпывающий перечень функций) класса преобразования 106-3 (XML2xMappingImpl). Как указано выше при описании определений понятий "класс" и "интерфейс", класс XML2xMappingImpl не используют непосредственно, а выделяют в нем подклассы с добавлением содержания к соответствующим методам в зависимости от определений типа документа для входного документа 108 на языке XML, преобразованного из выходного объекта 110 на языке Java, в который осуществляется преобразование.

Таблица M106-4
ФункцияОписание
EndElement()Получение уведомления о конце элемента. Анализатор 104 активизирует данный метод в конце каждого элемента входного документа 108 на языке XML. Для каждого события endElement() существует соответствующее событие startElement(), даже если элемент является пустым.
Execute()Осуществление преобразования для создания формата входного документа 108 на языке XML.
SetDocumentLocator()Получение объекта для обнаружения источника событий документа стандарта SAX.
SetInputStream()Определение входного потока. Определение источника входного документа 108 на языке XML, который подлежит преобразованию.
StartElement()Получение уведомления о начале элемента. Анализатор 104 вызывает данный метод в начале каждого элемента входного документа 108 на языке XML. Для каждого события startElement() существует соответствующее событие endElement(), даже если элемент является пустым. Вся информация о содержании элемента передается до события окончания соответствующего элемента (endElement()).

На фиг.3 показан способ 300 преобразования документа 108 на языке XML в программный объект 110 (например, объект Java Bean), в котором:

(а) получают экземпляр интерфейса 106-4 преобразования (XML2xMapping) для осуществления на шаге 302 преобразования документа XML в объект X;

(б) на шаге 304 активизируют интерфейс 106-4 преобразования и на шаге 306 вводят входной документ 108 на языке XML;

(в) на шаге 308 интерфейс 106-4 преобразования получает экземпляр анализатора событий (например, анализатора 104) и на шаге 310 регистрирует интерфейс 106-4 преобразования в качестве обработчика содержания (например, класса 106-2 обработчика буферизованного содержания);

(г) на шаге 312 активизируют анализатор 104 в отношении документа 108 на языке XML (т.е. анализатор начинает разбор документа);

(д) на шаге 314 при выполнении шага (г) в интерфейс 106-4 преобразования поступают обратные вызовы, вызывая различные методы (например, startDocument (начало документа), startElement (начало элемента), символы, endElement (конец элемента), endDocument (конец документа) и т.д.);

(е) на шаге 316 при выполнении методов startDocument и/или startElement интерфейс 106-4 преобразования создает программный объект 110; и

(ж) на шаге 318 при выполнении метода endElement интерфейс 106-4 преобразования помещает элемент в программный объект 110.

Описанный выше API-интерфейс SAX имеет множество известных из уровня техники спецификаций. Задачей настоящего изобретения является создание класса, реализующего интерфейс-обработчик содержания, представляющий собой интерфейс, построенный на механизме обратных вызовов и используемый анализаторами документов XML для уведомления программы о событиях SAX по мере их обнаружения в документе XML. Этот интерфейс используется с классом 106-2 обработчика буферизованного содержания (XML2xBufferedContentHandler) и классом 106-1 источника входных данных (XML2xInputSource). Применительно к интерфейсу-обработчику содержания API-интерфейс SAX также может быть реализован в виде интерфейса класса стандартного обработчика (DefaultHandler). Ниже в примере I "преобразование документа XML в пользовательский объект JAVA" подробно описано применение стандартного обработчика для генерирования пользовательского объекта Java Bean из пользовательского документа на языке XML.

Пример 1

Преобразование документа XML в пользовательский объект JAVA

В примере 1 использованы следующие компоненты (описанные ниже):

(A) customer.xml: образец входного документа 108 на языке XML;

(Б) XML2CustomerMapping.java: класс 106-2 обработчика, в который анализатор 104 направляет обратные вызовы. Содержит команды по конструированию пользовательского объекта и определению его параметров;

(B) executive.java: программа класса 106-3/интерфейса 106-4 преобразования, используемая для осуществления преобразования из языка XML в язык Java и из языка Java в язык XML (Пример II ниже);

(Г) customer.java: вывод пользовательского объекта 110 на языке Java Bean; и

(Д) CustomerSymbols.java: содержит целочисленные константы и схему хеширования. Схема хеширования служит для преобразования имен тегов в целочисленные константы, используемые в XML2CustomerMapping.java.

А. Ниже приведен входной документ на языке XML (customer.xml).

// START customer.xml

<?xml version="1.O"?>

<customer>

<FirstName>Jane</FirstName>

<LastName>Doe</LastName>

<CustId>xyz.123</CustId>

</customer>

// END customer.xml

Б. Ниже с некоторыми сокращениями для краткости приведена программа (XML2CustomerMapping.java), служащая для конструирования пользовательского объекта и задания его параметров (т.е., обработчик, в который анализатор событий направляет обратные вызовы).

// START XML2CustomerMapping.java

public class XML2CustomerMapping extends

corn.xxx.xml2xmapping.XML2xMappingImpl {

private StringBuffer fieldCurrentQualifiedElementName=

new StringBuffer("");

private Customer fieldCustomer;

private Stack elementStack;

* XMLCustomerInfo2RecordCustomerInfoMapper constructor comment.

public XML2CustomerMapping() {

super();

elementStack=new Stack();

}

* characters method comment.

public void characters(char[] ch, int start, int length) throws org.xrnl.sax.SAXException {

switch (this.fieldCurrentElementSymbol) {

case CustomerSymbols.CUSTOMER_FIRSTNAME:

case CustomerSymbols.CUSTOMER_LASTNAME:

case CustomerSymbols.CUSTOMER_ID:

((StringBuffer)elementStack.lastElement()).append(ch,start,length);

break;

}

}

* endElement method comment.

public void endElement(String namespaceURI, String localName, String rawName) throws org.xrnl.sax.SAXException {

String symbolName;

if(namespaceURI.equals("")) symbolName=rawName;

else symbolName=namespaceURI + "_" + localName;

this.fieldCurrentElementSymbol=CustomerSymbols.getSymbol(symbolName);

// Get the value

String value=, ((StringBuffer)elementStack.pop()).toString();

switch (this.fieldCurrentElementSymbol) {

case CustomerSymbols.CUSTOMER_FIRSTNAME: {

this.fieldCustomer.setFirstName(value);

break;

}

case CustomerSymbols.CUSTOMER_LASTNAME: {

this.fieldCustomer.setLastName(value);

break;

}

case CustomerSymbols.CUSTOMER_ID: {

this.fieldCustomer.setId(value);

break;

}

}

this.fieldCurrentElementSymbol=0;

}

* @return com.xxx.connector.mapping.xml.test.Customer public Customer getCustomer() {

return this.fieldCustomer;

}

* startElement method comment.

public void startElement(String namespaceURI, String localName, String rawName, org.xml.sax.Attributes atts) throws org.xrnl.sax.SAXException {

String symbolName;

if (namespaceURI.equals(""))symbolName=rawName;

else symbolName=namespaceURI + "_" + localName;

this.fieldCurrentElementSymbol=CustomerSymbols.getSymbol(symbolName);

elementStack.push(new StringBuffer());

switch (this.fieldCurrentElementSymbol) {

case CustomerSymbols.CUSTOMER: {

this.fieldCustomer=new Customer();

break;

}

}

}

}

// END XML2CustomerMapping.java

В. Ниже с некоторыми сокращениями для краткости приведена программа (execute.java) преобразования из языка XML в язык Java (и из языка Java в язык XML, как это подробно описано ниже в примере II).

// START execute.java

package com.xxx.xml2xmapping.sample.customer;

import Java.io.*;

import org.xml.sax.*;

public class Execute {

* Execute constructor comment.

public Execute() {

super();

}

* Starts the application.

* @param args an array of command-line arguments

public static void main(Java.lang.String[] args) {

int numlterations=1;

XML2CustomerMapping inMapping=new XML2CustomerMapping();

Customer2XMLMapping outEventBasedMapping=new

Customer2XMLMapping();

// Create the XML2 Customer handler and the Customer2XML handler XML2CustomerMapping in Mapping=new XML2CustomerMapping();

Customer2XMLMapping outEventBasedMapping=new

Customer2XMLMapping();

// read in the customer.xml file

ByteArrayInputStream inStream=null;

try {

FileInputStream fileInputStream=new

FileInputStream("customer.xml");

byte[] bytes=new byte[fileInputStream.available()];

fileInputStream.read(bytes, 0,

fileInputStream.available());

inStream=new ByteArrayInputStream(bytes);

} catch (Exception e) {

e.printStackTrace();

}

ByteArrayOutputStream outStream=new ByteArrayOutputStream();

try {

long ts=System.currentTimeMillis();

for (int i=0; i<numIterations; i++) {

// inbound mapping

// map from XML document to customer Java Bean inStream. reset();

inMapping.setInputStream(inStream);

inMapping.execute();

// some execution, here a connector would be called

// get the customer object and print its contents

Customer aCustomer=inMapping.getCustomer();

System.out.println("First name from XML document is

+aCustomer.getFirstName());

System.out.println("Last name from XML document is

"+aCustomer.getLastName());

System, out. println("Customer id from XML document is "+aCustomer.getId());

// Change the values on the customer object

aCustomer.setFirstName("James");

aCustomer.setLastName("Bond");

aCustomer.setId("007");

// outbound mapping

// map from Java to XML

outEventBasedMapping.setCustomer(aCustomer);

// outEventBasedMapping.setOutputStream(outStream);

outEventBasedMapping.setOutputStream(System.out);

outEventBasedMapping.execute();

}

long te=System.currentTimeMillis();

System.out.println("Average time"+(te-ts)/numlterations+"ms.");

} catch (Exception e) {

e.printStackTrace();

}

}

}

//END execute.java

Г. Ниже описана пользовательская программа Java Bean (customer.java). Java Bean является многократно используемым компонентом, присоединенным к известной из уровня техники структуре стандартной конструкции. Bean является объектом класса, видимым или невидимым во время выполнения программы.

//START customer.java

package com.xxx.xml2xmapping. sample.customer;

public class Customer {

private Java.lang.String fieldFirstName=new String();

private Java.lang.String fieldLastName=new String();

private Java.lang.String fieldid=new String ();

* Customer constructor comment.

public Customer() {

super();

}

* Gets the firstName property (java.lang.String) value.

* @return The firstName property value.

* @see #setFirstName

public Java.lang.String getFirstName() {

return fieldFirstName;

}

* Gets the id property (Java.lang.String) value.

* @return The id property value.

* @see #setId

public Java.lang.String getId() {

return fieldId;

}

* Gets the lastName property (Java.lang.String) value.

* @return The lastName property value.

* @see #setLastName

public java.lang.String getLastName() {

return fieldLastName;

}

* Sets the firstName property (Java.lang.String) value.

* @param firstName The new value for the property.

* @see #getFirstName

public void setFirstName(java.lang.String firstName) {

fieldFirstName=firstName;

}

* Sets the id property (Java.lang.String) value.

* @param id The new value for the property.

* @see #getId

public void setId(Java.lang.String id) {

fieldId=id;

}

/**

* Sets the lastName property (Java.lang.String) value.

* @param lastName The new value for the property.

* @see #getLastName

public void setLastName(Java.lang.String lastName) {

fieldLastName=lastName;

}

}

//END customer.java

Как следует из примера I, преобразование документа XML в объект Java является эффективным, поскольку анализатор 104 осуществляет обработку событий применительно ко всем начальным тегам, тегам элементов и конечным тегам, за счет чего улучшается отслеживание событий.

В другом примере рассмотрен случай распространения однопользовательского документа на языке XML на массив пользователей. Для генерирования массива пользовательских программ Java beans выполняют следующие шаги:

(i) используют startElement применительно к пользователям для создания вектора;

(ii) создают в startElement пользовательский объект применительно к каждому пользователю; и

(iii) используют события startElement, getElement, endElement применительно к FirstName, LastName и CustID для заполнения пользовательского объекта, endElement применительно к пользователю - для ввода пользовательского объекта в вектор, а endElement применительно к пользователям - для создания массива пользователей на основе вектора и его ввода в соответствующий объект Java.

Анализатор 104 поддерживает стек для рекурсивных структур языка XML (т.е. элементов языка XML, отображающих список списков). Объект создается для каждого startElement. Стек может использоваться для поддержания требуемого состояния. После создания дочернего элемента он может быть введен в соответствующий материнский объект.

Преобразование программного объекта в документ XML;

Как показано на фиг.2, модуль 114 преобразования программного объекта в документ XML имеет следующие компоненты:

(а) интерфейс-обработчик 114-1 (X2XMLHandler) для управления анализом событий;

(б) интерфейс преобразования 114-2 (X2XMLMapping) для осуществления преобразования и задания выходных параметров целевого потока;

(в) класс 114-3 преобразования (X2XMLMappingImpl), обеспечивающий методы для преобразования входного объекта 116 на языке Java в выходной документ 118 на языке XML; и

(г) выходной целевой класс 114-4 (X2XMLOutputTarget) для реализации выходного документа 118 на языке XML.

В таблице M114-1 приведены основные функции (т.е. не исчерпывающий перечень функций) интерфейса-обработчика 114-1 (X2XMLHandler). Модуль преобразования 114 реализует функции интерфейса 114-1 и регистрирует экземпляр с использованием JSP-контейнера. Документ-шаблон 112 обращается к модулю преобразования для обратного вызова основных, связанных с документом событий, таких как начало и окончание элементов, и получения значений элементов.

Таблица M114-1
ФункцияОписание
GetElementValue()Возврат значения элемента. Используется при работе с простыми типами, не ограниченными начальными и конечными тегами элемента.
EndElement()Получение уведомления о конце элемента. Используется для поддержания состояния при работе со сложным типом.
GetElementAttribute()Возврат установленного значения атрибута. Используется при работе со сложным типом, ограниченным начальным и конечным тегами элемента.
GetElementRepetitions()Используется для повторяющегося элемента, возвращает число повторений.
IsOptionalAtributePresent()Подтверждение истинности в случае присутствия факультативного атрибута, в противном случае подтверждает ложность. Используется в шаблоне (JSP) 112 документа на языке XML для управления генерированием имени и значения факультативного атрибута в документе 118 на языке XML. Используется при работе со сложным типом, ограниченным начальным и конечным тегами элемента.
StartElement()Получение уведомления о начале элемента. Используется для поддержания состояния при работе со сложными типами.

В целом, контейнер представляет собой сущность, обеспечивающую управление жизненным циклом, безопасность, развертывание и оперативное обслуживание компонентов. Существует множество типов контейнеров (Web, JSP, сервлет, апплет и т.д.), предоставляющих зависимые от компонентов услуги. Контейнер-сервлет является контейнером, предоставляющим сетевые услуги для передачи запросов и ответов, запросов декодирования и запросов форматов. JSP-контейнер является контейнером, предоставляющим услуги, аналогичные услугам сервлета и машины, интерпретирующей и обрабатывающей JSP-страницы в сервлет.

Интерфейс-обработчик X2XMLHandler 114-1 создает зеркальное (но не идентичное) отображение событий, анализируемых анализатором 104. По существу, структура, создаваемая анализатором 104, зеркально отображается на пути от X2XML.

Если анализатор 104 реализован с использованием интерфейса SAX, события поступают в обработчик 106-2 (т.е. по существу механизм обратного вызова), который осуществляет их обработку. В данном примере обработчик 106-2 используется для заполнения класса Java.

После активизации шаблона 112 он осуществляет обратный вызов, адресуемый интерфейсу-обработчику X2XMLHandler 114-1. Интерфейс-обработчик X2XMLHandler 114-1 осуществляет обработку обратного вызова, получая запрошенные данные и поддерживая состояние анализа.

Несмотря на то, что интерфейс-обработчик 114-1 аналогичен модулю 106 преобразования документа XML в программный объект с точки зрения выполняемых им функций, между ними существуют определенные различия. Имя элемента генерируется или кодируется вручную, а не берется из схемы, поддерживающей пространство имен. Имя элемента может быть уникальным для каждого элемента. Таким образом, для выполнения методов startElement и endElement необходим лишь параметр имени.

При осуществлении модулем 106 преобразования документа XML в программный объект класс 106-1 источника входных данных (т.е. XMLReader) возвращает имя элемента в виде строки. В классе 106-3/интерфейсе 106-4 преобразования имя элемента объединяют с уникальным числом. Данное число используется оператором выбора для управления обработкой элементов. В модуле 114 преобразования программного объекта в документ XML происходит оптимизация обработки и улучшается поддержка кодирования, для чего имя элемента описывается в виде целочисленной константы. Таким образом, при обратных вызовах данных методов вместо строк используются целочисленные константы.

Порядок следования событий в интерфейсе-обработчике 114-1 зеркально отражает порядок следования информации в самом объекте 116.

В документе-шаблоне 112 на языке XML (записанном с использованием технологии JavaServer Pages) применен описанный ниже стиль кодирования. Технология JSP дает возможность отделять пользовательский интерфейс от генерирования содержания, что позволяет целиком изменять макет страницы, не меняя лежащего в ее основе динамического информационного содержимого. Технология JavaServer Pages является расширенным вариантом технологии Java Servlet, хорошо известной специалистам в данной области техники.

Пример стиля кодирования документа-шаблона 112 на языке XML, записанного с использованием технологии JSP.

Обратные вызовы кодируются применительно к начальным и конечным тегам документа 118 и сложным типам. Это позволяет обработчику 114-1 поддерживать состояние. Начальные и конечные теги документа-шаблона 112 на языке XML, записанного с использованием технологии JSP, также кодируют непосредственно, чтобы направлять их в целевой выходной поток. При работе с простыми типами кодирование обратных вызовов не требуется, однако начальные и конечные теги необходимо кодировать, чтобы направлять их в целевой выходной поток.

Если элемент сложного или простого типа является факультативным, в условном выражении внутри шаблона 112 используется функция isOptionalElementPresent(), управляющая генерированием факультативного элемента.

Если атрибут является факультативным, то для сложного типа используется метод isOptionalAttributePresent(int attributeName), а для простого типа - метод isOptionalAttributePresent (int elementName, int attributeName). Если элемент относится к повторяющемуся простому типу, определяют, содержит ли он факультативный атрибут, используя для этого метод isOptionalAttributePresent(int index, int elementName, int attributeName).

В отношении повторяющихся элементов используют метод getElementRepetitions, служащий для возврата числа повторяющихся элементов. Это делается для создания в шаблоне 112 цикла для обработки каждого элемента. Для простых типов шаблон 112 должен содержать начальные и конечные теги и вызывать метод getElementValue(int index, int elementName) для получения значения элемента. Поскольку для сложных типов необходимо поддерживать состояние, шаблон 112 должен вызывать методы startElement(int index, int elementName) и endElement(int index, int elementName).

В таблице 114-2 приведены основные функции (т.е. не исчерпывающий перечень функций) интерфейса преобразования 114-2 (X2XMLMapping). Интерфейс преобразования 114-2 выполняет функцию преобразования (объекта Java в документ XML) и задает целевой выходной поток. Интерфейс преобразования 114-2 расширяет функции интерфейса-обработчика 114-1, который обеспечивает методы обратного вызова шаблона 112, необходимые для генерирования выходного документа 118 на языке XML.

Таблица M114-2
ФункцияОписание
Execute()Осуществление преобразования, в результате которого создается выходной документ 118 на языке XML.
setOutputStream()Определение выходного потока, в который будет генерирован выходной документ 118 на языке XML.

В таблице 114-3 приведены основные функции (т.е. не исчерпывающий перечень функций) класса 114-3 преобразования (X2XMLMappingImpl). Класс 114-3 преобразования обеспечивает методы преобразования входного объекта 116 на языке Java в выходной документ 118 на языке XML. Как указано выше, при описании определений класса и интерфейса, X2XMLMappingImpl класс 114-3 не используют непосредственно, а выделяют в нем подклассы с использованием содержания, добавленного к соответствующим методам в зависимости от определений типа выходного документа 118 на языке XML, преобразование в который осуществляется, и входного объекта 116 на языке Java, преобразование из которого осуществляется.

Таблица M114-3
ФункцияОписание
Execute()Осуществление преобразования с целью создания выходного документа 118 на языке
XML.
SetOutputStream()Определение выходного потока, в который будет генерирован выходной документ 118 на языке XML.

В таблице M114-4 приведены основные функции (т.е. неисчерпывающий перечень функций) выходного целевого класса 114-4 (X2XMLOutput Target).

X2XMLOutput Target класс 114-4 позволяет записывать документ 118 на языке XML в поток байтов или символов. Класс 114-4 обеспечивает оптимизацию, в частности, позволяющую позиционировать поток байтов в выходной поток сервлета. Таким образом, документ 118 на языке XML не подвергают буферизации перед контрольным считыванием.

Таблица M114-4
ФункцияОписание
Close()Закрытие выходного потока и высвобождение всех ресурсов системы, связанных с потоком.
Flush()Очистка выходного потока и контрольное считывание всех буферизованных выходных байтов.
Write()Запись байтов из заданного массива байтов в выходной поток.

Таким образом, X2XMLMappingImpl класс 114-3 реализует функции X2XMLMapping интерфейса 114-2. X2XMLMapping интерфейс 114-2 расширяет функции X2XMLHandler интерфейса 114-1. Таким образом, X2XMLMappingImpl класс 114-3 реализует функции, заложенные в X2XMLHandler интерфейсе 114-1.

На фиг.4 проиллюстрирован способ 400 преобразования программного объекта 116 (например, Java Bean) в документ 118 на языке XML, при осуществлении которого:

(а) на шаге 402 получают экземпляр интерфейса 114-2 преобразования (например, X2XMLMapping) для осуществления преобразования из входного объекта Х 116 в выходной документ 118 на языке XML;

(б) на шаге 404 задают программный объект 116 и выходной поток для документа 118 на языке XML в интерфейсе преобразования 114-3;

(в) на шаге 406 активизируют интерфейс преобразования 114-2;

(г) на шаге 408 создают JSP-контейнер;

(д) на шаге 410 интерфейс преобразования 114-2 активизирует JSP-контейнер, используя документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), для создания документа 118 на языке XML;

(е) на шаге 412 JSP-контейнер компилирует и реализует документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML);

(ж) на шаге 414 компилированный документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), начинает запись документа 118 на языке XML в заданный (на шаге 404) выходной поток;

(з) на шаге 416, если это применимо к тегам элементов/данных атрибутов и начальным/конечным тегам, компилированный документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), осуществляет обратный вызов интерфейса преобразования 114-2 с целью поддержания состояния обработки и ввода данных в выходной документ 118 на языке XML (данные извлекают из программного объекта 116);

(и) на шаге 418 компилированный документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), может факультативно вызвать метод isOptionalElementPresent или метод isOptionalAtributePresent с тем, чтобы определить необходимость генерирования некоторых частей документа на языке XML;

(к) на шаге 420 документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), осуществляет обратный вызов метода getElementRepetitions для определения количества циклов при генерировании определенных частей документа на языке XML; и

(л) на шаге 422 состояние обработки поддерживают с использованием стека; это эффективно при генерировании сложных типов внутри документа на языке XML, в котором образуется массив, происходит рекурсия или в одном сложном типе содержится другой сложный тип.

В преобразовании объекта Java в документ XML используется документ-шаблон 112 на языке XML, который кодируется с использованием аналогичных стандартов, заданных анализатором 104, осуществляющим обработку событий (по меньшей мере для сложных объектов). Например, для сложных типов необходимо кодировать начальные и конечные теги (что не требуется для элементов простых типов). Ниже в примере II "преобразование пользовательского объекта JAVA в документ XML" подробно описано генерирование выходного документа на языке XML из входного пользовательского объекта языка Java.

Пример II

Преобразование пользовательского объекта JAVA в документ XML

В примере II использованы следующие компоненты (описанные ниже):

(A) Customer2XMLMapping.java: класс 114-1 обработчика, который JSP-шаблон 112 вызывает для получения значений из входного пользовательского объекта 116 языка Java и заполнения выходного документа 118 на языке XML;

(Б) customer.jsp: JSP-шаблон 112, используемый для генерирования выходного документа 118 на языке XML;

(B) customerSymbols.java: содержит константы и схему хеширования. Схема хеширования служит для преобразования имен тегов в целочисленные константы. JSP-шаблон 112 использует целочисленные константы; и

(Г) execute.java: программа класса 114-2/интерфейса 114-3 преобразования, используемая для осуществления преобразования из языка Java в язык XML и из языка XML в язык Java (аналогично пункту В из примера I выше).

А. Ниже с некоторыми сокращениями для краткости приведена программа (Customer2XMLMapping.java), служащая для создания документа на языке XML из входного объекта языка Java.

//START Customer2XMLMapping.java

package corn.xxx.xml2xmapping.sample.customer;

import java.util.*;

import com.ibm.xml2xmapping.util. *;

public class Customer2XMLMapping extends

com.xxx.xml2xmapping.X2XMLMappingImpl {

private Customer fieldCustomer;

/**

* Customer2XMLMapping constructor comment.

*/

public Customer2XMLMapping() {

super();

fieldPageName="customer.jsp";

}

/**

* getElementRepetitions method comment.

*/

public int getElementRepetitions(int name) {

switch (name) {

} return 0;

}

/**

* getElementValue method comment.

*/

public String getElementValue(int name) {

switch (name) {

case CustomerSymbols.CUSTOMER_FIRSTNAME: {

return this.fieldCustomer.getFirstName();

}

case CustomerSymbols.CUSTOMER_LASTNAME: {

return this.fieldCustomer.getLastName();

} case CustomerSymbols.CUSTOMER_ID: {

return this.fieldCustomer.getId();

}

}

return "";

}

* getElementValue method comment.

public String getElementValue(int index, int name) {

switch (name) {

}

return "";

}

* @param aCustomer

corn.xxx.xml2xmapping.sample.customer.Customer

public void setCustomer(Customer aCustomer) {

this.fieldCustomer=aCustomer;

}

}

//END Customer2XMLmapping.java

Б. Ниже с некоторыми сокращениями для краткости описан документ-шаблон (Customer.jsp), используемый в технологии JSP для модуля 112.

//START Customer.jsp

<%@ page import="com.ibm.xml2xmapping.*" %>

<%@ page

import="com.ibm.xml2xmapping. sample.customer.CustomerSymbols"

%>

<%X2XMLHandler handler=

(X2XMLHandler)request.getAttribute("com.ibm.xml2xmapping.X2XMLHandler");

handler.setWriter(out);%>

<?xml version="1.0"?>

<customer>

<FirstName><%=handler.getElementValue(CustomerSymbols.CUSTOMER_FI RSTNAME) %></FirstName>

<LastName><%=handler.getElementValue(CustomerSymbols.CUSTOMER_LA STNAME) %></LastName>

<CustId><%=handler.getElementValue(CustomerSymbols.CUSTOMER_ID)%></CustId>

</customer>

//END Customer.jsp

В. Ниже с некоторыми сокращениями для краткости приведена программа (Customersymbols.java) схемы хеширования и констант, используемых в документе-шаблоне customer.jsp.

//START Customersymbols.java

package corn.xxx.xml2xmapping.sample.customer;

import java.util.HashMap;

public class CustomerSymbols {

public static final int CUSTOMER=1;

public static final int CUSTOMER_FIRSTNAME=2;

public static final int CUSTOMER_LASTNAME=3;

public static final int CUSTOMER_ID=4;

private static CustomerSymbols fieldlnstance;

private HashMap fieldName2SymbolDictionary;

private static Object anObject=new Object();

* CustomerInfoElementSymbols constructor comment.

private CustomerSymbols() {

super();

this.fieldName2SymbolDictionary=new HashMap();

this.fieldName2SymbolDictionary.put("customer", new

Integer(CustomerSymbols.CUSTOMER));

this.fieldName2SymbolDictionary.put("FirstName", new

Integer(CustomerSymbols.CUSTOMER_FIRSTNAME));

this.fieldName2SymbolDictionary.put("LastName", new

Integer(CustomerSymbols.CUSTOMER_LASTNAME));

this.fieldName2SymbolDictionary.put("CustId", new

Integer(CustomerSymbols.CUSTOMER_ID));

}

* @return int

* @param elementName java.lang.String

public static int getSymbol(String elementName) {

if (CustomerSymbols. fieldlnstance==null) {

synchronized (anObject) {

if (CustomerSymbols. fieldlnstance=null) {

CustomerSymbols.fieldlnstance=new

CustomerSymbols();

}

}

}

return

((Integer)CustomerSymbols.fieldInstance.fieldName2SymbolDictionar y.get(elementName)).intValue();

}

}

//END Customersymbols.Java

Ниже приведен образец измененного документа-шаблона customer.jsp для генерирования документа на языке XML при наличии массива пользователей, как это описано в примере I:

for(int i=0;

i<handler.getElementRepetitions (CustomerSymbols.CUSTOMERS); i++)

{

<%handler.startElement(i,CustomerSymboIs.CUSTOMER);%><customer>

<FirstName>

<%=handler.getElementValue (CustomerSymbols.CUSTOMER_FIRSTNAME) %></FirstName>

<LastName>

<%=handler.getElement Value (CustomerSymbols.CUSTOMER_LASTNAME) %></LastName>

<CustId><%=handler.getElementValue (CustomerSymbols.CUSTOMER_ ID)%></CustId>

</customer>

<%=handler.endElement (i,CustomerSymbols.CUSTOMER);%><%}%>

Обработчик 114-1 определяет размер массива (т.е. количество выполняемых циклов) и возвращается к методу getElementRepetitions. При вызове из документа-шаблона customer.jsp метода startElement с использованием индекса и имени обработчик 114-1 создает ссылку на данный конкретный пользовательский объект массива.

Для обработки рекурсии обработчик 114-1 использует стек. По мере рекурсии объекта обработчик 114-1 проталкивает запись в стек, используя функцию startElement, и выталкивает данные из стека, используя функцию endElement. Рабочим объектом является объект, расположенный на вершине стека.

Если объект является факультативным (опциональным), используются методы isOptionalElement() или isOptionalAtribute() с тем, чтобы определить, существует ли объект. В процесс обработки документа-шаблона customer.jsp вносят коррективы с целью ввести условный оператор, использующий возвращаемое булево выражение для одного из методов isOptionalxxx. В целом преимущества примерного варианта осуществления настоящего изобретения заключаются в следующем:

(а) создание единой интегрированной среды для преобразования документа XML в объект Java и объекта Java в документ XML, в которой используется обработчик, маскирующий способ получения того или иного свойства для преобразования или отображения;

(б) использование легко доступных инструментальных средств (например, SAX-анализатора, JSP) для реализации способов преобразования (XML/Java) по настоящему изобретению; и

(в) обеспечение интерфейсов и классов (в среде языка Java), упрощающих структуру процесса преобразования по настоящему изобретению и делающих процесс преобразования сходным в обоих направлениях.

1. Способ преобразования структуры данных, представляющей программный объект, в элементы структурированного языка документа, реализуемый в компьютере и заключающийся в том, что:

(а) генерируют шаблон указанного документа;

(б) считывают свойства программного объекта, которые взаимосвязаны с элементами структурированного языка документа;

(в) с использованием считанных свойств получают образованные элементами структурированного языка конструкции на основе взаимосвязи между этими свойствами и элементами структурированного языка и посредством кода преобразования, обеспечивающего как преобразование программного объекта в документ на основе элементов структурированного языка, так и преобразование в обратном направлении; и

(г) полученными конструкциями заполняют шаблон документа.

2. Способ по п.1, в котором на шаге (в) осуществляют непосредственный обратный вызов программного объекта для получения свойств, отображающих конструкции, образующие структуру и содержание документа.

3. Способ по п.1, в котором на шаге (в) создают объектную модель, отображающую структуру и содержание документа.

4. Способ по п.1, в котором элементы структурированного языка представляют собой конструкции языка XML (расширяемый язык разметки).

5. Способ по п.1, в котором на шаге (в) создают цикл в шаблоне документа для обработки повторяющихся элементов структурированного языка.

6. Система (10) преобразования программного объекта (116), содержащего свойства, в документ (118), образованный элементами структурированного языка, содержащая компьютер (20), имеющий процессор (22), соединенный посредством системной шины (26) с памятью (24), в которой хранятся:

(а) шаблон (112) документа;

(б) интерфейс-обработчик (114-1), осуществляющий отображение элементов структурированного языка документа (118) на основе обратных вызовов, выполняемых шаблоном (112) документа;

(в) модуль (114-2, 114-3) преобразования, связанный с интерфейсом-обработчиком (114-1) и преобразующий свойства программных объектов (116) в элементы структурированного языка, распознаваемые документом (118); и

(г) класс (114-4) целевых выходных данных, связанный с модулем (114-2, 114-3) преобразования и служащий для записи элементов структурированного языка, сгенерированных модулем (114-2, 114-3) преобразования, в документ (118).

7. Система по п.6, в которой модуль преобразования имеет интерфейс (114-2) преобразования, осуществляющий преобразование свойств программного объекта в элементы структурированного языка и задающий выходной целевой поток документа (118), и класс (114-3) преобразования, обеспечивающий методы, используемые интерфейсом (114-2) преобразования.

8. Система по п.7, в которой выходной целевой поток представляет собой буфер.

9. Система по п.7, в которой выходной целевой поток представляет собой ответный поток сервлета.

10. Система по п.6, в которой элементы структурированного языка представляют собой конструкции языка XML (расширяемый язык разметки).

11. Система по п.10, в которой шаблон документа создают с использованием технологии JavaServer Pages (JSP).

12. Система (10) преобразования документа (108), содержащего элементы структурированного языка, в программный объект (110), содержащая компьютер (20), имеющий процессор (22), соединенный посредством системной шины (26) с памятью (24), в которой хранятся:

(а) анализатор (104) для обнаружения событий, отображающих особенности документа (108);

(б) класс (106-1) источника входных данных для чтения документа (108);

(в) класс (106-2) обработчика содержания, связанный с классом (106-1) источника входных данных и реализующий буфер для событий, обнаруженных анализатором (104); и

(г) модуль (106-3, 106-4) преобразования, связанный с классом (106-2) данных обработчика содержания и преобразующий события, обнаруженные анализатором (104), в свойства программного объекта (110).

13. Система по п.12, в которой модуль преобразования имеет интерфейс (106-4) преобразования, осуществляющий преобразование событий документа в свойства объекта и задающий выходной целевой поток программного объекта (110), и класс (106-3), обеспечивающий методы, используемые интерфейсом (106-4) преобразования.

14. Система по п.13, в которой элементы структурированного языка представляют собой конструкции языка XML (расширяемая спецификация языка).

15. Способ преобразования программного объекта, имеющего свойства, в документ, представленный элементами структурированного языка, взаимосвязанными со свойствами программного объекта, причем указанный способ реализуется в компьютере, в памяти которого хранятся интерфейс преобразования и контейнер, и заключается в том, что:

(а) активизируют интерфейс преобразования и передают программный объект в экземпляр активизированного интерфейса преобразования;

(б) активизируют контейнер и с использованием экземпляра активизированного контейнера компилируют и исполняют шаблон документа; и

(в) записывают документ в заданный выходной поток с использованием компилированного шаблона документа.

16. Способ по п.15, в котором для поддержания состояния обработки осуществляют обратный вызов, адресованный интерфейсу преобразования.

17. Способ по п.15, в котором для определения необходимости генерирования выбранных частей документа через компилированный шаблон вызывают метод isOptionalElementPresent.

18. Способ по п.15, в котором для определения необходимости генерирования выбранных частей документа через компилированный шаблон вызывают метод isOptionalAttributePresent.

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

20. Способ по п.19, в котором состояние стека поддерживают путем выполнения из компилированного шаблона обратных вызовов, адресованных интерфейсу преобразования, для указания начала и конца элементов сложных типов.

21. Способ по п.15, в котором для определения количества циклов, выполняемых шаблоном на выбранных участках документа, вызывают метод getElementRepetitions.

22. Способ по п.15, в котором элементы структурированного языка представляют собой конструкции языка XML (расширяемая спецификация языка), а для создания шаблона используют технологию JavaServer Pages (JSP).



 

Похожие патенты:

Изобретение относится к системам классификации текстовых сообщений. .

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

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

Изобретение относится к распознаванию образов из графического изображения, и в частности к распознаванию текста на изображении документа в электронном виде

Изобретение относится к техническим средствам информатики и вычислительной техники и может быть использовано для решения задач по составлению словарей, справочников, а также по созданию баз данных

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

Изобретение относится к техническим средствам информатики и вычислительной техники и может быть использовано для решения задач автоматизированного сравнения и анализа на основе преобразования неструктурированного потока входных данных в объектную форму

Изобретение относится к способам выбора шрифта, которые используют документы языка разметки для задания одного или нескольких критериев выбора

Изобретение относится к способам проверки правильности документа расширяемого языка разметки (XML) и выдачи сообщения о нарушениях схемы в режиме реального времени

Изобретение относится к способу создания XML-документов в Web-браузере

Изобретение относится к способу формирования и/или обработки описания потока данных, в частности, описания потока данных, основанного на языке XML (расширяемый язык разметки)
Наверх