RU2287181C2 - System and method for mutual transformation of program objects and documents based on elements of structured language - Google Patents

System and method for mutual transformation of program objects and documents based on elements of structured language Download PDF

Info

Publication number
RU2287181C2
RU2287181C2 RU2003137567/09A RU2003137567A RU2287181C2 RU 2287181 C2 RU2287181 C2 RU 2287181C2 RU 2003137567/09 A RU2003137567/09 A RU 2003137567/09A RU 2003137567 A RU2003137567 A RU 2003137567A RU 2287181 C2 RU2287181 C2 RU 2287181C2
Authority
RU
Russia
Prior art keywords
document
elements
xml
language
template
Prior art date
Application number
RU2003137567/09A
Other languages
Russian (ru)
Other versions
RU2003137567A (en
Inventor
Михаэль БАЙЗИГЕЛЬ (US)
Михаэль БАЙЗИГЕЛЬ
Джон Х. ГРИН (CA)
Джон Х. ГРИН
Джей У. УОРФИЛД (US)
Джей У. УОРФИЛД
Original Assignee
Интернэшнл Бизнес Машинз Корпорейшн
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Интернэшнл Бизнес Машинз Корпорейшн filed Critical Интернэшнл Бизнес Машинз Корпорейшн
Publication of RU2003137567A publication Critical patent/RU2003137567A/en
Application granted granted Critical
Publication of RU2287181C2 publication Critical patent/RU2287181C2/en

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/103Formatting, i.e. changing of presentation of documents
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/151Transformation
    • G06F40/154Tree transformation for tree-structured or markup documents, e.g. XSLT, XSL-FO or stylesheets
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/205Parsing
    • G06F40/226Validation

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Software Systems (AREA)
  • Stored Programmes (AREA)
  • Devices For Executing Special Programs (AREA)
  • Document Processing Apparatus (AREA)

Abstract

FIELD: computer science, technology for mutual transformation of document (for example, XML document) and program object (for example, Java language object).
SUBSTANCE: in such structure, interpreter is used, masking method for producing transformation properties. Due to that, transformation code is generated, having general type for transformation in both directions. Transformer transforms XML document to program object by means of analyzer 104. To execute reverse transformation (from Java language to XML) it is required, that elements of XML document are positioned in certain order to provide for validity of produced XML document 118. For this purpose, in accordance to invention, template XML document is generated using, for example, JSP technology. Template, created using JSP, allows recording tags of documents in JSP with possible reverse call for values of elements and attributes. Content may be sent to buffer or directly to the output stream of servlet.
EFFECT: it is possible to efficiently realize creation of structure for such transformation by means of standard tools.
4 dwg, 8 tbl, 2 ex

Description

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

Настоящее изобретение относится к взаимному преобразованию или отображению программных объектов и документов на базе элементов структурированного языка, в частности взаимному преобразованию различных программных объектов, таких как объекты языка Java™ и документы на языке XML (расширяемый язык разметки).The present invention relates to the mutual conversion or display of program objects and documents based on elements of a structured language, in particular to the mutual conversion of various program objects, such as Java ™ objects and XML documents (extensible markup language).

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

Язык XML является сокращенной версией стандартного обобщенного языка разметки (SGML), которая разработана специально для создания страниц WWW. Он позволяет разработчикам создавать собственные специальные теги, обеспечивающие функциональные возможности, недоступные в языке HTML.XML is an abridged version of the standard generalized markup language (SGML), which is designed specifically for creating WWW pages. It allows developers to create their own custom tags that provide functionality not available in the HTML language.

Например, язык XML поддерживает ссылки, указывающие на множество документов, в отличие от языка HTML, в котором каждая ссылка может указывать только на один адрес.For example, the XML language supports links that point to many documents, unlike the HTML language, in which each link can point to only one address.

Поскольку язык XML является формой самоописания данных (которые в настоящей заявке также именуются элементами структурированного языка), он используется для кодирования мощных по содержанию моделей данных. Таким образом, язык XML может использоваться в качестве средства обмена данными между разнородными системами. На языке XML могут быть представлены или опубликованы данные множества различных систем: существующих программ на языке программирования КОБОЛ, баз данных, программ на языке программирования C++ и подобных им программ. При этом часто возникает экономическая задача, которая заключается в том, каким образом отобразить информацию, содержащуюся в документе на языке XML, в других форматах данных и наоборот. Например, после осуществления обмена информацией между организациями путем передачи документа на языке XML может потребоваться преобразовать такую информацию в объект языка Java, который может быть использован при создании базы данных или осуществлении запроса транзакции.Since the XML language is a form of self-description of data (which are also referred to in this application as elements of a structured language), it is used to encode data models that are powerful in content. Thus, the XML language can be used as a means of exchanging data between heterogeneous systems. In XML, the data of many different systems can be presented or published: existing programs in the COBOL programming language, databases, programs in the C ++ programming language and similar programs. This often leads to an economic problem, which is how to display the information contained in an XML document in other data formats and vice versa. For example, after exchanging information between organizations by transferring an XML document, it may be necessary to convert such information into a Java language object that can be used to create a database or implement a transaction request.

В патенте US 6125391, выданном 26 сентября 2000 года на имя Meltzer'a и др., описан пример инструментального средства преобразования данных из языка XML в язык Java. Для такого преобразования в названном патенте осуществляют анализ документа на языке XML и обнаруживают события. В частности, один анализатор осуществляет разбор документа на языке XML и создает в памяти древовидное представление, к которому может быть обращен запрос, а другой анализатор осуществляет разбор документа на языке XML и обнаруживает события, содержащие информацию о документе (например, событие начала документа, событие начала элемента с именем элемента, содержанием элемента, событие окончания элемента, событие окончания документа и т.д.).US Pat. No. 6,125,391, issued September 26, 2000 to Meltzer et al., Describes an example of a tool for converting data from XML to Java. For such a conversion, an XML document is analyzed in the said patent and events are detected. In particular, one analyzer parses an XML document and creates a tree view in memory that the query can be addressed to, and another analyzer parses an XML document and detects events containing information about the document (for example, the document start event, event element start with element name, element content, element end event, document end event, etc.).

Для преобразования из языка Java в язык XML в патенте Meltzer'a и др. описано генерирование кода, имеющего аксессоры для каждого элемента. Аксессор элемента имеет цикл, периодически повторяющийся для каждого символа. Цикл содержит оператор-переключатель, выполняющий определенное действие в зависимости от того, что представляет собой символ. Задачей такого действия является создание строкового буфера, содержащего фрагмент элемента документа на языке XML. Решение по патенту Meltzer'a и др. не обеспечивает создание вспомогательной инфраструктуры для работы с кодом, осуществляющим преобразование из языка Java в язык XML. Код, используемый в решении по патенту Meltzer'a и др., полностью генерируется и неудобен для редактирования пользователем.To convert from Java to XML, Meltzer et al. Describe the generation of code that has accessors for each element. An element accessor has a cycle that repeats periodically for each character. The loop contains a switch statement that performs a specific action depending on what the character is. The goal of this action is to create a string buffer containing a fragment of an XML document element. The solution according to the patent of Meltzer and others does not provide the creation of an auxiliary infrastructure for working with code that converts from Java to XML. The code used in the patent solution of Meltzer'a et al. Is fully generated and inconvenient for user editing.

Следовательно, существует потребность в создании структуры взаимного преобразования программных объектов и документов на базе элементов структурированного языка (например, языка XML), которая может быть эффективно реализована с использованием стандартных инструментальных средств.Therefore, there is a need to create a structure for the mutual transformation of program objects and documents based on elements of a structured language (for example, XML), which can be effectively implemented using standard tools.

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

Изложенные выше недостатки известного уровня техники отсутствуют в способе и системе по настоящему изобретению, в котором предложена единая интегрированная среда для взаимного преобразования документов (например, документа на языке XML) и программных объектов (например, объекта языка Java). В данной интегрированной среде используется обработчик, маскирующий способ получения свойства для преобразования. В результате формируется код преобразования, имеющий общий вид для преобразования в обе стороны. Взаимное преобразование элементов языка XML и свойств объекта языка Java происходит в преобразователе. Преобразователь осуществляет преобразование документа на языке XML в программный объект с использованием анализатора (такого как анализатор стандарта DOM (объектная модель документов) или простой интерфейс прикладного программирования (API-интерфейс) для языка XML (стандарт SAX)).The above disadvantages of the prior art are absent in the method and system of the present invention, which proposed a single integrated environment for the mutual conversion of documents (for example, an XML document) and program objects (for example, a Java language object). This integrated environment uses a handler that masks the way to obtain the property for conversion. As a result, a conversion code is generated having a general view for conversion in both directions. Mutual conversion of XML elements and properties of a Java object occurs in the converter. The converter converts an XML document into a program object using an analyzer (such as a DOM standard analyzer (document object model) or a simple application programming interface (API) for XML (SAX standard)).

Для осуществления преобразования в другом направлении (из языка Java в язык XML) необходимо, чтобы элементы документа на языке XML были выстроены в определенном порядке с тем, чтобы обеспечить достоверность полученного документа на языке XML. Для обеспечения такой достоверности в примерном варианте осуществления настоящего изобретения создается документ-шаблон на языке XML с использованием, например, JavaServer Pages™ (JSP). Шаблоны, созданные на базе JSP, позволяют записывать теги документов в JSP с возможностью осуществления обратных вызовов для получения значений элементов и атрибутов. JSP имеет средства поддержки редактирования, что позволяет эффективно осуществлять создание шаблонов. Кроме того, содержание (содержимое) может быть направлено в буфер или непосредственно в ответный поток сервлета.To perform the conversion in the other direction (from Java to XML), it is necessary that the elements of an XML document are arranged in a certain order in order to ensure the authenticity of the received XML document. To ensure this validity, in an exemplary embodiment of the present invention, an XML template document is created using, for example, JavaServer Pages ™ (JSP). Templates created on the basis of JSP allow you to write document tags in JSP with the ability to call back to get the values of elements and attributes. JSP has editing support tools that allow you to efficiently create templates. In addition, the content (s) can be sent to the buffer or directly to the servlet response stream.

Соответственно, объектом настоящего изобретения является реализуемый в компьютере способ преобразования структуры данных, представляющей программный объект, в элементы структурированного языка документа. Предлагаемый в изобретении способ заключается в том, что (а) генерируют шаблон указанного документа, (б) считывают свойства программного объекта, которые взаимосвязаны с элементами структурированного языка документа, (в) с использованием считанных свойств получают образованные элементами структурированного языка конструкции на основе взаимосвязи между этими свойствами и элементами структурированного языка и посредством кода преобразования, обеспечивающего как преобразование программного объекта в документ на основе элементов структурированного языка, так и преобразование в обратном направлении, и (г) полученными конструкциями заполняют шаблон документа.Accordingly, an object of the present invention is a computer-implemented method for converting a data structure representing a program object into elements of a structured language of a document. The method proposed in the invention consists in (a) generating a template for the specified document, (b) reading the properties of the program object that are interconnected with the elements of the structured language of the document, (c) using the read properties, they are formed by elements of the structured language of the design based on the relationship between by these properties and elements of a structured language and by means of a conversion code that provides both the conversion of a program object into a document based on string elements turirovannogo language and converting in reverse direction, and (g) filling the resulting construct a document template.

При осуществлении вышеописанного способа на шаге (в) может осуществляться непосредственный обратный вызов программного объекта для получения свойств, отображающих конструкции, определяющие структуру и содержание документа. Кроме того, на шаге (в) может создаваться объектная модель, отображающая структуру и содержание документа, а для обработки повторяющихся элементов структурированного языка на шаге (в) может быть предусмотрено создание в документе-шаблоне цикла. Элементы структурированного языка предпочтительно представляют собой конструкции языка XML (расширяемый язык разметки).When implementing the above method in step (c), a direct callback of the program object can be carried out to obtain properties that display structures that determine the structure and content of the document. In addition, at step (c), an object model can be created that displays the structure and content of the document, and for processing repeating elements of a structured language at step (c), a loop can be created in the document template. The elements of a structured language are preferably XML (Extensible Markup Language) constructs.

Объектом настоящего изобретения является также система для преобразования программного объекта, содержащего свойства, в документ, определяемый элементами структурированного языка, содержащая компьютер, имеющий процессор, соединенный посредством системной шины с памятью, в которой хранятся (а) шаблон документа, (б) интерфейс-обработчик, обеспечивающий отображение элементов структурированного языка документа на основе обратных вызовов, выполняемых шаблоном документа, (в) модуль преобразования, связанный с интерфейсом-обработчиком и преобразующий свойства программных объектов в элементы структурированного языка, распознаваемые документом, и (г) класс целевых выходных данных, связанный с модулем преобразования и служащий для записи элементов структурированного языка, сгенерированных модулем преобразования, в документ.The object of the present invention is also a system for converting a program object containing properties into a document defined by elements of a structured language, containing a computer having a processor connected via a system bus to a memory in which (a) a document template is stored, (b) a processor interface that provides the display of elements of a structured language of a document based on callbacks performed by a document template, (c) a conversion module associated with an interface-processor, etc. transforming the properties of program objects into elements of a structured language recognized by a document, and (d) the class of target output data associated with the conversion module and used to write elements of the structured language generated by the conversion module into a document.

В предлагаемой системе модуль преобразования может содержать интерфейс преобразования, осуществляющий преобразование свойств программного объекта в элементы структурированного языка и задающий выходной целевой поток документа, а также класс преобразования, обеспечивающий методы, используемые интерфейсом преобразования. В этом случае выходной целевой поток может быть определен как буфер или ответный поток сервлета.In the proposed system, the conversion module may contain a conversion interface that converts the properties of a program object into elements of a structured language and defines the target output stream of the document, as well as a conversion class that provides the methods used by the conversion interface. In this case, the output target stream can be defined as a buffer or servlet response stream.

Еще одним объектом изобретения является система для преобразования документа, содержащего элементы структурированного языка, в программный объект, содержащая компьютер, имеющий процессор, соединенный посредством системной шины с памятью, в которой хранятся (а) анализатор для обнаружения событий, отображающих особенности документа, (б) класс источника входных данных для чтения документа, (в) класс обработчика содержания, связанный с классом источника входных данных и реализующий буфер для событий, обнаруженных анализатором, и (г) модуль преобразования, связанный с классом данных обработчика содержания и преобразующий события, обнаруженные анализатором, в свойства программного объекта.Another object of the invention is a system for converting a document containing elements of a structured language into a program object containing a computer having a processor connected via a system bus to a memory that stores (a) an analyzer for detecting events that display features of the document, (b) the class of the input data source for reading the document, (c) the class of the content handler associated with the class of the input data source and implementing the buffer for events detected by the analyzer, and (d) the module reobrazovaniya associated with the data handler class content and transformative events detected by the analyzer to the properties of the program object.

В этой системе модуль преобразования может иметь интерфейс преобразования, осуществляющий преобразование событий документа в свойства объекта и задающий выходной целевой поток программного объекта, и класс, обеспечивающий методы, используемые интерфейсом преобразования.In this system, the conversion module may have a conversion interface that converts document events into object properties and defines the output target stream of the program object, and a class that provides the methods used by the conversion interface.

Наконец, объектом настоящего изобретения является способ преобразования программного объекта, имеющего свойства, в документ, представленный элементами структурированного языка, взаимосвязанными со свойствами программного объекта, причем указанный способ реализуется в компьютере, в памяти которого хранятся интерфейс преобразования и контейнер. Предлагаемый в изобретении способ заключается в том, что (а) активизируют интерфейс преобразования и передают программный объект в экземпляр активизированного интерфейса преобразования, (б) активизируют контейнер и с использованием экземпляра активизированного контейнера компилируют и исполняют шаблон документа, (в) записывают документ в заданный выходной поток с использованием компилированного шаблона документа.Finally, an object of the present invention is a method for converting a program object having properties into a document represented by elements of a structured language interconnected with properties of a program object, the method being implemented in a computer in whose memory the conversion interface and the container are stored. The method proposed in the invention consists in (a) activating the conversion interface and transferring the program object to the instance of the activated conversion interface, (b) activating the container and using the instance of the activated container, compile and execute the document template, (c) write the document at the specified output stream using a compiled document template.

Для поддержания состояния обработки предложенный способ может предусматривать обратный вызов интерфейса преобразования. Определение необходимости генерирования выбранных частей документа через компилированный шаблон можно осуществлять посредством вызова методов isOptionalElementPresent или isOptionalAttributePresent.To maintain the processing state, the proposed method may include a callback to the conversion interface. Determining whether to generate selected parts of a document through a compiled template can be done by calling the isOptionalElementPresent or isOptionalAttributePresent methods.

При генерировании внутри документа сложных типов информационных объектов, выбираемых из группы, состоящей из массива данных, рекурсии и сложного типа, содержащегося внутри другого сложного типа, состояние обработки может поддерживаться с использованием стека. В этом случае состояние стека поддерживают путем выполнения обратных вызовов интерфейса преобразования из компилированного шаблона для указания начала и конца сложных типов.When generating complex types of information objects inside a document that are selected from the group consisting of an array of data, recursion, and a complex type that is contained within another complex type, the processing state can be maintained using the stack. In this case, the state of the stack is maintained by performing callbacks to the transform interface from the compiled template to indicate the beginning and end of complex types.

Определение количества циклов, выполняемых шаблоном на выбранных участках документа, можно осуществлять посредством вызова метода getElementRepetitions.Determining the number of cycles performed by the template on selected parts of the document can be done by calling the getElementRepetitions method.

Во всех вариантах осуществления изобретения элементы структурированного языка могут представлять собой конструкции языка XML (расширяемый язык разметки). В этом случае для создания документа-шаблона может использоваться технология JavaServer Pages (JSP).In all embodiments of the invention, the elements of a structured language can be XML language constructs (extensible markup language). In this case, JavaServer Pages (JSP) technology can be used to create the master document.

Предлагаемые в изобретении способы могут быть реализованы в машинном программном продукте для преобразования структуры данных, представляющей программный объект, в элементы структурированного языка документа или для преобразования элементов структурированного языка документа в структуру данных, представляющую программный объект.The methods of the invention can be implemented in a computer program product for converting a data structure representing a program object into elements of a structured document language or for converting elements of a structured document language into a data structure representing a program object.

Другие особенности и признаки настоящего изобретения содержатся в приведенном ниже описании конкретных вариантов его осуществления со ссылкой на приложенные чертежи.Other features and features of the present invention are contained in the following description of specific embodiments with reference to the attached drawings.

Краткое описание чертежейBrief Description of the Drawings

Дополнительные признаки и преимущества настоящего изобретения раскрыты в подробном описании со ссылкой на приложенные чертежи, на которых:Additional features and advantages of the present invention are disclosed in the detailed description with reference to the attached drawings, in which:

на фиг.1 показана блок-схема вычислительной системы, которая может быть использована для реализации способа и устройства для осуществления изобретения,figure 1 shows a block diagram of a computing system that can be used to implement the method and device for implementing the invention,

на фиг.2 - блок-схема, иллюстрирующая структуру интегрированной среды для преобразования объектов языка XML в язык Java и наоборот,figure 2 is a block diagram illustrating the structure of an integrated environment for converting XML objects to Java and vice versa,

на фиг.3 - схема последовательности операций, иллюстрирующая способ преобразования документа на языке XML в программный объект с использованием интегрированной среды, показанной на фиг.2,figure 3 is a flowchart illustrating a method of converting an XML document into a software object using the integrated environment shown in figure 2,

на фиг.4 - схема последовательности операций, иллюстрирующая способ преобразования программного объекта в документ на языке XML с использованием интегрированной среды, показанной на фиг.2.figure 4 is a flowchart illustrating a method of converting a program object into a document in XML using the integrated environment shown in figure 2.

Подробное описание вариантов осуществления настоящего изобретенияDetailed Description of Embodiments of the Present Invention

На фиг.1 и в соответствующем ему описании показан пример применимой вычислительной среды, в которой может быть реализовано изобретение. Несмотря на то, что изобретение описано в общем контексте машиноисполняемых команд компьютерной программы, установленной на персональной ЭВМ, оно также может быть реализовано в сочетании с другими программными модулями.Figure 1 and its corresponding description shows an example of an applicable computing environment in which the invention may be implemented. Despite the fact that the invention is described in the general context of computer-executable instructions of a computer program installed on a personal computer, it can also be implemented in combination with other software modules.

В целом, программные модули содержат подпрограммы, программы, компоненты, структуры данных и аналогичные программы, выполняющие определенные задачи или реализующие определенные абстрактные типы данных. Кроме того, настоящее изобретение также может быть реализовано с использованием вычислительных систем, имеющих другие конфигурации, включая портативные устройства, многопроцессорные системы, микропроцессорную или программируемую бытовую электронику, мини-ЭВМ, универсальные ЭВМ и тому подобные устройства. Изобретение также может быть реализовано в распределенных вычислительных средах, в которых задачи выполняют удаленные процессоры, связанные сетью передачи данных.In general, program modules contain routines, programs, components, data structures, and similar programs that perform specific tasks or implement specific abstract data types. In addition, the present invention can also be implemented using computer systems having other configurations, including portable devices, multiprocessor systems, microprocessor or programmable consumer electronics, mini-computers, mainframes, and the like. The invention can also be implemented in distributed computing environments in which tasks are performed by remote processors connected by a data network.

Программные модули в распределенной вычислительной среде могут располагаться как в местных, так и удаленных запоминающих устройствах.Software modules in a distributed computing environment can reside in both local and remote memory storage devices.

Как показано на фиг.1, типовая система 10 включает обычную персональную ЭВМ 20, имеющую процессор 22, системную память 24 и системную шину 26, связывающую различные компоненты системы, в том числе системную память 24 с процессором 22. Системная шина 26 имеет шинные структуры нескольких типов, включая шину памяти или контроллер памяти, периферийную шину и локальную шину, в которых используется любая из множества обычных шинных архитектур (например, PCI (локальная шина соединения периферийных устройств), VESA (Ассоциация по стандартам в области видеоэлектроники), ISA (промышленная стандартная архитектура), EISA (расширенный промышленный стандарт шинной архитектуры) и т.д.).As shown in FIG. 1, an exemplary system 10 includes a conventional personal computer 20 having a processor 22, a system memory 24, and a system bus 26 linking various components of the system, including the system memory 24 to the processor 22. The system bus 26 has several bus structures types, including a memory bus or memory controller, a peripheral bus, and a local bus using any of a variety of common bus architectures (e.g. PCI (local bus for connecting peripheral devices), VESA (Video Electronics Standards Association tronics), ISA (industry standard architecture), EISA (advanced industry standard bus architecture), etc.).

Системная память 24 имеет постоянное запоминающее устройство (ПЗУ) 28 и запоминающее устройство с произвольной выборкой (ЗУПВ) 30. В ПЗУ 28 хранится базовая система 32 ввода-вывода (BIOS), содержащая основные подпрограммы, способствующие обмену информацией между элементами внутри ЭВМ 20, например, во время запуска. ЭВМ 20 также имеет накопитель 34 на жестких магнитных дисках - НЖМД, накопитель 36 на гибких магнитных дисках - НГМД (для считывания и записи на съемный диск 38) и запоминающее устройство (ЗУ) 40 на компакт-дисках (для чтения компакт-дисков 42 или чтения или записи на другие оптические носители данных). Запоминающие устройства 34, 36 и 40 соединены с системной шиной 26 при помощи интерфейсов 44, 46 и 48, соответственно.System memory 24 has read only memory (ROM) 28 and random access memory (RAM) 30. The ROM 28 stores the basic input / output system (BIOS) 32, which contains the main routines that facilitate the exchange of information between elements inside the computer 20, for example during startup. The computer 20 also has a drive 34 on hard magnetic disks — a hard disk drive, a drive 36 on floppy magnetic disks — a hard disk drive (for reading and writing to a removable disk 38) and a storage device (memory) 40 on compact disks (for reading CDs 42 or reading or writing to other optical storage media). The storage devices 34, 36 and 40 are connected to the system bus 26 via interfaces 44, 46 and 48, respectively.

Накопители 34, 36 и 40 и соответствующие машиночитаемые носители (38, 42) обеспечивают энергонезависимое хранение данных, структур данных и команд для ЭВМ 20. Носители данных, показанные на фиг.1, являются лишь примерами, а специалистам в данной области техники известно применение иных типов носителей, считываемых ЭВМ (например, магнитных кассет, карт флэш-памяти, цифровых видеодисков и т.д.).The drives 34, 36 and 40 and the corresponding computer-readable media (38, 42) provide non-volatile storage of data, data structures and instructions for the computer 20. The data carriers shown in figure 1 are only examples, and specialists in this field of technology know the use of other types of media readable by a computer (for example, magnetic cassettes, flash memory cards, digital video disks, etc.).

В накопителях 34, 36 и 40 и ЗУПВ 30 может храниться ряд программных модулей, включая операционную систему 50, одну или несколько прикладных программ 52, другие программные модули 54 и программные данные 56. Пользователь может вводить команды и информацию в ЭВМ 20 при помощи клавиатуры 58 и устройства 60 ввода (например, мыши, микрофона, джойстика, игровой сенсорной панели, спутниковой антенны, сканера и т.д.). Такие устройства (58 и 60) соединены с процессором 22 при помощи интерфейса 62 портов (например, последовательного порта, параллельного порта, игрового порта, универсальной последовательной шины (УПШ) и т.д.), который связан с шиной 26. С шиной 26 при помощи интерфейса 66 (например, видеоадаптера) также связан монитор 64 или устройство индикации иного типа.A number of program modules can be stored in drives 34, 36, and 40 and RAM 30, including the operating system 50, one or more application programs 52, other program modules 54, and program data 56. The user can enter commands and information into computer 20 using the keyboard 58 and input devices 60 (e.g., mouse, microphone, joystick, gaming touch pad, satellite dish, scanner, etc.). Such devices (58 and 60) are connected to the processor 22 via an interface 62 ports (for example, serial port, parallel port, game port, universal serial bus (USB), etc.), which is connected to bus 26. With bus 26 via interface 66 (for example, a video adapter), a monitor 64 or other type of display device is also connected.

ЭВМ 20 может работать в сетевой среде, в которой она логически связана с одним или несколькими удаленными ЭВМ, такими как удаленная ЭВМ 68. Удаленная ЭВМ 68 может являться сервером, маршрутизатором, равноправным устройством или иным обычным узлом сети и, как правило, имеет множество или все элементы, описанные применительно к ЭВМ 20, однако для упрощения показано лишь запоминающее устройство 70. Показанные на фиг.1 логические связи включают локальную сеть 72 и глобальную сеть 74. Такое сетевое окружение обычно используется в учреждениях, корпоративных сетях, интрасетях и сети Internet.The computer 20 may operate in a network environment in which it is logically connected to one or more remote computers, such as a remote computer 68. The remote computer 68 may be a server, router, peer device or other conventional network node and, as a rule, has many or all the elements described in relation to the computer 20, however, for simplicity, only the storage device 70 is shown. The logical connections shown in Fig. 1 include a local area network 72 and a global network 74. Such a network environment is usually used in institutions, corporate All networks, intranets, and the Internet.

При использовании в условиях локального сетевого окружения ЭВМ 20 соединена с локальной сетью 72 посредством сетевого интерфейса или адаптера 76. При использовании в условиях глобального сетевого окружения ЭВМ 20 обычно имеет модем 78 или иное средство для поддержания связи по глобальной сети 74, такой как Internet. Модем 54, который может быть встроенным или внешним, посредством интерфейса 62 портов соединен с шиной 26. В условиях сетевого окружения программные модули, показанные применительно к ЭВМ 20, или их части, могут храниться в удаленном запоминающем устройстве 70.When used in a local network environment, the computer 20 is connected to the local network 72 via a network interface or adapter 76. When used in a global network environment, the computer 20 typically has a modem 78 or other means for maintaining communication over a global network 74, such as the Internet. The modem 54, which may be internal or external, is connected to the bus 26 via an interface 62 ports. In a networked environment, program modules shown with respect to the computer 20, or parts thereof, can be stored in a remote storage device 70.

Способ по настоящему изобретению описан на примере преобразования, или отображения, документов XML в объекты Java, а также объектов Java в документы XML. Возможна поддержка и других форматов данных. Например, множество существующих бизнес-приложений написаны на языках КОБОЛ, С и ПЛ/1. Такие приложения состоят из программ, хранящихся в информационных системах предприятия, таких как CICS™ (программное обеспечение общего назначения для оперативной обработки транзакций) или IMS™ (информационно-управляющая система). Язык КОБОЛ используется для ввода и вывода структур программы на языке КОБОЛ. Необходимо осуществлять преобразование из языка XML в язык КОБОЛ и из языка КОБОЛ в язык XML. Настоящее изобретение может применяться для таких преобразований, при этом в случае преобразования из языка XML в объект Х обработчик преобразования (описанный далее) заполняет структуру языка КОБОЛ данными из документа на языке XML, а в случае преобразования объекта Х в язык XML обработчик преобразования (описанный далее) извлекает данные из структуры языка КОБОЛ и пользуется шаблоном для заполнения документа на языке XML.The method of the present invention is described by the example of converting, or displaying, XML documents into Java objects, as well as Java objects into XML documents. Support for other data formats is also possible. For example, many existing business applications are written in the COBOL, C, and PL / 1 languages. Such applications consist of programs stored in enterprise information systems, such as CICS ™ (general-purpose software for online transaction processing) or IMS ™ (information management system). The COBOL language is used to input and output program structures in the COBOL language. You need to convert from XML to COBOL and from COBOL to XML. The present invention can be applied to such transformations, in this case, in the case of conversion from XML to object X, the conversion handler (described later) fills the COBOL language structure with data from an XML document, and in case of conversion of object X to XML, the conversion processor (described below ) extracts data from the COBOL language structure and uses a template to populate an XML document.

В способах преобразования по настоящему изобретению используется следующий процесс высокого уровня: (а) лексический анализатор группирует символы в слова или лексемы, распознаваемые определенной системой (условная разметка); (б) синтаксический анализатор анализирует группы лексем с тем, чтобы распознать допустимые языковые конструкции; и (в) генератор кода использует набор допустимых языковых конструкций и генерирует исполняемые коды. Шаги (а)-(в) могут выполняться в комбинированной форме. Например, в случае преобразования документа XML в объект Java осуществляется анализ каждого символа документа на языке XML с тем, чтобы распознать допустимые лексемы на языке XML, такие как начальные теги (открывающие), свойства, конечные (закрывающие) теги и разделы (секции) "CDATA". Затем лексемы необходимо верифицировать, чтобы определить, образуют ли они допустимые конструкции на языке XML. При верификации на самом нижнем уровне определяют, все ли тегирование имеет совпадающие начальные и конечные теги, и структурированы ли свойства в начальном теге должным образом. Если имеется описание документа в формате DTD (определение типа документа) или XML-схема, то возможно обеспечить, чтобы конструкции на языке XML, обнаруженные в процессе анализа, были допустимыми с точки зрения форматов DTD или XML-схема, а также представляли собой правильно сформулированный язык XML. Наконец, данные, содержащиеся в документе на языке XML, используются для выполнения какого-либо полезного действия (т.е. его преобразования в объект языка Java).The following high-level process is used in the conversion methods of the present invention: (a) the lexical analyzer groups the characters into words or tokens recognized by a particular system (conditional markup); (b) the parser analyzes groups of tokens in order to recognize valid language constructs; and (c) the code generator uses a set of valid language constructs and generates executable codes. Steps (a) - (c) can be performed in combined form. For example, in the case of converting an XML document to a Java object, each character of the XML document is analyzed in order to recognize valid XML tokens, such as start tags (opening), properties, end tags (closing) and sections (sections) " CDATA. " Then the tokens must be verified to determine if they form valid XML constructs. Verification at the lowest level determines whether all tagging has matching start and end tags, and whether the properties in the start tag are structured properly. If there is a description of the document in the DTD format (definition of the type of document) or an XML schema, it is possible to ensure that the constructions in the XML language detected during the analysis are valid from the point of view of the DTD or XML schema formats, as well as being correctly formulated XML language. Finally, the data contained in the XML document is used to perform some useful action (that is, converting it into a Java language object).

Некоторые из названных выше задач могут быть по меньшей мере частично решены при помощи легко доступных анализаторов документов XML. Анализаторы документов XML осуществляют лексический и синтаксический анализ. Примерами стандартов анализа являются стандарт SAX и стандарт DOM, реализованные в API-интерфейсе (SAX - простой интерфейс прикладного программирования (API-интерфейс) для языка XML; DOM - объектная модель документов).Some of the above problems can be at least partially solved with the help of easily accessible XML document parsers. XML document parsers perform lexical and parsing. Examples of analysis standards are the SAX standard and the DOM standard implemented in the API (SAX is a simple application programming interface (API) for XML; DOM is an object model of documents).

SAX является стандартом на основе событий. Анализаторы документов XML, использующие стандарт SAX, генерируют события, соответствующие различным элементам, которые были обнаружены в подвергнутом анализу документе на языке XML. Стандарт DOM является простым интерфейсом прикладного программирования на основе объектного моделирования. Анализаторы документов XML на основе стандарта DOM создают в памяти групповую объектную модель, которая отображает содержание документа XML. По завершении анализа анализатором документа XML в памяти сохраняется древовидная структура объектов DOM, содержащая информацию о структуре и содержании документа XML.SAX is an event-based standard. XML document parsers using the SAX standard generate events corresponding to the various elements that were found in the parsed XML document. The DOM standard is a simple application programming interface based on object modeling. XML document parsers based on the DOM standard create a group object model in memory that displays the contents of an XML document. Upon completion of the analysis by the XML document analyzer, the tree structure of the DOM objects containing information about the structure and content of the XML document is stored in memory.

На фиг.2 схематически показана интегрированная среда 100 согласно одному из вариантов осуществления настоящего изобретения. Интегрированная среда 100 показана на примере интегрального компонента 102, такого как сервлет, который может быть осуществлен в системе 10, показанной на фиг.1. В состав интегрального компонента 102 входит анализатор 104, реализованный с использованием, например, интерфейсов DOM или SAX, который взаимодействует с модулем 106 преобразования документа XML в программный объект. Для ясности при описании вариантов осуществления настоящего изобретения в качестве примера анализатора 104 использован анализатор с интерфейсом SAX.2 schematically shows an integrated environment 100 according to one embodiment of the present invention. The integrated environment 100 is shown as an example of an integrated component 102, such as a servlet, that can be implemented in the system 10 shown in FIG. 1. Integral component 102 includes an analyzer 104 implemented using, for example, DOM or SAX interfaces, which interacts with module 106 for converting an XML document into a program object. For clarity, when describing embodiments of the present invention, an analyzer with a SAX interface is used as an example of analyzer 104.

Модуль 106 преобразования документа XML в программный объект принимает входной документ 108 на языке XML и генерирует выходной объект 110 на языке Java. Интегральный компонент 102 также имеет модуль документа-шаблона 112 на языке XML (например, на базе технологии JSP - JavaServer Pages™), который связан с модулем 114 преобразования программного объекта в документ XML. Модуль 114 преобразования программного объекта в документ XML принимает входной объект 116 на языке Java и генерирует выходной документ 118 на языке XML.Module 106 converting an XML document into a program object receives an input document 108 in XML and generates an output object 110 in Java. The integrated component 102 also has an XML template document module 112 (for example, based on JSP technology - JavaServer Pages ™), which is associated with a module 114 for converting a program object into an XML document. Module 114 converting the program object into an XML document receives an input object 116 in the Java language and generates an output document 118 in the XML language.

Преобразование документа XML в программный объектConvert an XML document to a program object

Как показано на фиг.2, модуль 106 преобразования документа XML в программный объект имеет следующие компоненты:As shown in FIG. 2, the module 106 for converting an XML document into a program object has the following components:

(а) класс 106-1 источника входных данных (XML2xInputSource) для реализации входного документа 108 на языке XML;(a) class 106-1 of the input data source (XML2xInputSource) for implementing the input document 108 in XML;

(б) класс 106-2 обработчика буферизованного содержания (XML2xBufferedContentHandler) для реализации буфера событий стандарта SAX, генерированного анализатором 104;(b) Buffered Content Handler class 106-2 (XML2xBufferedContentHandler) for implementing the SAX standard event buffer generated by the analyzer 104;

(в) интерфейс 106-4 (XML2xMapping) преобразования для осуществления преобразования и определения входных и выходных целевых потоков; и(c) a conversion interface 106-4 (XML2xMapping) for transforming and defining input and output target streams; and

(г) класс 106-3 преобразования (XML2xMappingImpl), обеспечивающий методы преобразования входного документа 108 на языке XML в выходной объект 110 на языке Java.(d) a conversion class 106-3 (XML2xMappingImpl) that provides methods for converting an input document 108 in XML to an output object 110 in Java.

Ниже подробно описаны различные интерфейсы и классы. Применительно к языку Java термины "класс" и "интерфейс" имеют особое значение. Класс языка Java (абстрактный, внутренний или окончательный) представляет собой совокупность компонентов данных и методов, характеризующих конкретный объект, а интерфейс Java используется для придания определенной функциональности реализующему их классу (т.е. интерфейсы определяют функции классов). Интерфейсы также служат для создания постоянных величин, используемых классами, реализующими интерфейс. Интерфейсы содержат постоянные параметры и описания методов, однако реализация методов зависит от классов, реализующих интерфейс. Один класс может реализовать любое число интерфейсов.The various interfaces and classes are described in detail below. For the Java language, the terms “class” and “interface” have special meanings. A Java language class (abstract, internal, or final) is a collection of data components and methods that characterize a particular object, and the Java interface is used to give certain functionality to the class that implements them (i.e., the interfaces define the functions of the classes). Interfaces also serve to create constant values used by classes that implement the interface. Interfaces contain constant parameters and descriptions of methods, however, the implementation of methods depends on the classes that implement the interface. One class can implement any number of interfaces.

В таблице M106-1 приведены основные функции (т.е., не исчерпывающий перечень функций) класса 106-1 источника входных данных (XML2xInputSource).Table M106-1 lists the main functions (i.e., not an exhaustive list of functions) of class 106-1 of the input data source (XML2xInputSource).

Класс XML2xInputSource используется для того, чтобы обеспечить возможность чтения документа XML из байтового потока, потока символов или обработчика XML2xBufferedContentHandler 106-2.The XML2xInputSource class is used to provide the ability to read an XML document from a byte stream, character stream, or XML2xBufferedContentHandler 106-2.

Таблица M106-1Table M106-1 ФункцияFunction ОписаниеDescription available()available () Возврат числа байтов, которое может быть считано из входного потока без объединения в блокиReturns the number of bytes that can be read from the input stream without blocking getBufferedHandler()getBufferedHandler () Получение буферизованного обработчика событий стандарта SAXGetting a buffered SAX event handler getByteStream()getByteStream () Возврат байтового потокаByte stream return getCharacterStream()getCharacterStream () Возврат считывателя потока символовReturning a character stream reader read()read () Считывание очередного байта данных из данного входного потокаRead the next byte of data from this input stream skip()skip () Пропуск байтов из данного входного потокаBytes skipped from this input stream

В таблице M106-2 приведены основные функции (т.е. не исчерпывающий перечень функций) класса 106-2 обработчика буферизованного содержания (XML2xBufferedContentHandler). Класс M106-2 обработчика также включает обработчик содержания для буферизации событий стандарта SAX, поступающих из анализатора 104. Это позволяет воспроизводить события. Примером ситуации, в которой данная функция полезна, является случай, когда для различных частей документа XML используются различные обработчики преобразования. Примером реализации является упрощенный протокол доступа к объекту (SOAP).Table M106-2 lists the main functions (i.e., not an exhaustive list of functions) of class 106-2 of the buffered content handler (XML2xBufferedContentHandler). The handler class M106-2 also includes a content handler for buffering SAX events coming from analyzer 104. This allows events to be played back. An example of a situation in which this function is useful is when different transformation handlers are used for different parts of an XML document. An example implementation is a simplified object access protocol (SOAP).

Таблица M106-2Table M106-2 ФункцияFunction ОписаниеDescription Characters (char[] ch, int start, int length);Characters (char [] ch, int start, int length); Комментарий к методу, в котором ch - это символы документа 108 на языке XML; start - начальная позиция в массиве; length - число символов для считывания из массиваCommentary on the method in which ch are the characters of an XML document 108; start - the initial position in the array; length - the number of characters to read from the array parse()parse () Исполнение событий стандарта SAX в буфереBuffer SAX Events Execution

SOAP является упрощенным протоколом обмена информацией в децентрализованной, распределенной среде. Он является протоколом на базе языка XML и состоит из трех частей: (1) конверта, образующего среду для описания содержания сообщения и способа его обработки; (2) набора правил кодирования для представления экземпляров, связанных с конкретным применением типов данных; и (3) условных обозначений для отображения удаленных вызовов и ответов на вызовы процедур. Сообщение SOAP является документом на языке XML, состоящим из обязательного конверта SOAP, необязательного заголовка SOAP и обязательного тела SOAP. В данном случае для обработки конверта и тела могут использоваться различные обработчики преобразования.SOAP is a simplified protocol for exchanging information in a decentralized, distributed environment. It is an XML-based protocol and consists of three parts: (1) an envelope that forms an environment for describing the contents of the message and how it is processed; (2) a set of coding rules for representing instances associated with a particular application of data types; and (3) conventions for displaying remote calls and answering procedure calls. A SOAP message is an XML document that consists of a mandatory SOAP envelope, an optional SOAP header, and a mandatory SOAP body. In this case, different conversion handlers can be used to process the envelope and body.

В таблице M106-3 приведены основные функции (т.е. неисчерпывающие) интерфейса преобразования 106-4 (XML2xMapping). Интерфейс XML2xMapping осуществляет преобразование и определяет конфигурацию входного потока.Table M106-3 lists the main functions (i.e., non-exhaustive) of the 106-4 transformation interface (XML2xMapping). The XML2xMapping interface performs the conversion and defines the configuration of the input stream.

Таблица M106-3Table M106-3 ФункцияFunction ОписаниеDescription Execute()Execute () Осуществление преобразования для создания формата входного документа 108 на языке XML. Полный пример функции execute() приведен ниже.Performing a conversion to create an XML input document format 108. A complete example of the execute () function is given below. SetInputStream()SetInputStream () Определение входного потока, т.е. источника входного документа 108 на языке XML, который подлежит преобразованию.Definition of input stream, i.e. the source of the input document 108 in XML, which is subject to conversion.

В таблице M106-4 приведены основные функции (т.е. неисчерпывающий перечень функций) класса преобразования 106-3 (XML2xMappingImpl). Как указано выше при описании определений понятий "класс" и "интерфейс", класс XML2xMappingImpl не используют непосредственно, а выделяют в нем подклассы с добавлением содержания к соответствующим методам в зависимости от определений типа документа для входного документа 108 на языке XML, преобразованного из выходного объекта 110 на языке Java, в который осуществляется преобразование.Table M106-4 lists the main functions (i.e., a non-exhaustive list of functions) of the transformation class 106-3 (XML2xMappingImpl). As indicated above in the description of the definitions of the concepts of “class” and “interface”, the XML2xMappingImpl class is not used directly, but subclasses are allocated in it with the addition of content to the corresponding methods depending on the definitions of the document type for the input document 108 in XML, converted from the output object 110 in the Java language to which the conversion is performed.

Таблица M106-4Table M106-4 ФункцияFunction ОписаниеDescription EndElement()EndElement () Получение уведомления о конце элемента. Анализатор 104 активизирует данный метод в конце каждого элемента входного документа 108 на языке XML. Для каждого события endElement() существует соответствующее событие startElement(), даже если элемент является пустым.Receive notification of the end of an item. The analyzer 104 activates this method at the end of each element of the input document 108 in XML. For each endElement () event, there is a corresponding startElement () event, even if the element is empty. Execute()Execute () Осуществление преобразования для создания формата входного документа 108 на языке XML.Performing a conversion to create an XML input document format 108. SetDocumentLocator()SetDocumentLocator () Получение объекта для обнаружения источника событий документа стандарта SAX.Getting an object to detect the event source of a SAX standard document. SetInputStream()SetInputStream () Определение входного потока. Определение источника входного документа 108 на языке XML, который подлежит преобразованию.Definition of input stream. The definition of the source of the input document 108 in XML, which is subject to conversion. StartElement()StartElement () Получение уведомления о начале элемента. Анализатор 104 вызывает данный метод в начале каждого элемента входного документа 108 на языке XML. Для каждого события startElement() существует соответствующее событие endElement(), даже если элемент является пустым. Вся информация о содержании элемента передается до события окончания соответствующего элемента (endElement()).Receive notification of the start of an item. The analyzer 104 calls this method at the beginning of each element of the input document 108 in XML. For each startElement () event, there is a corresponding endElement () event, even if the element is empty. All information about the content of the element is transmitted until the end event of the corresponding element (endElement ()).

На фиг.3 показан способ 300 преобразования документа 108 на языке XML в программный объект 110 (например, объект Java Bean), в котором:FIG. 3 shows a method 300 for converting an XML document 108 into a software object 110 (eg, a Java Bean), in which:

(а) получают экземпляр интерфейса 106-4 преобразования (XML2xMapping) для осуществления на шаге 302 преобразования документа XML в объект X;(a) receive an instance of the conversion interface 106-4 (XML2xMapping) for implementing, in step 302, the conversion of the XML document to an object X;

(б) на шаге 304 активизируют интерфейс 106-4 преобразования и на шаге 306 вводят входной документ 108 на языке XML;(b) in step 304, the conversion interface 106-4 is activated, and in step 306, an XML input document 108 is input;

(в) на шаге 308 интерфейс 106-4 преобразования получает экземпляр анализатора событий (например, анализатора 104) и на шаге 310 регистрирует интерфейс 106-4 преобразования в качестве обработчика содержания (например, класса 106-2 обработчика буферизованного содержания);(c) in step 308, the conversion interface 106-4 receives an instance of an event analyzer (e.g., analyzer 104) and, in step 310, registers the conversion interface 106-4 as a content handler (e.g., class 106-2 of a buffered content handler);

(г) на шаге 312 активизируют анализатор 104 в отношении документа 108 на языке XML (т.е. анализатор начинает разбор документа);(d) at step 312, the parser 104 is activated with respect to the XML document 108 (i.e., the parser starts parsing the document);

(д) на шаге 314 при выполнении шага (г) в интерфейс 106-4 преобразования поступают обратные вызовы, вызывая различные методы (например, startDocument (начало документа), startElement (начало элемента), символы, endElement (конец элемента), endDocument (конец документа) и т.д.);(e) in step 314, in step (d), the callback interface arrives at the conversion interface 106-4, calling various methods (e.g., startDocument (start of the document), startElement (start of the element), characters, endElement (end of the element), endDocument ( end of document) etc.);

(е) на шаге 316 при выполнении методов startDocument и/или startElement интерфейс 106-4 преобразования создает программный объект 110; и(e) in step 316, when the startDocument and / or startElement methods are executed, the transform interface 106-4 creates a program object 110; and

(ж) на шаге 318 при выполнении метода endElement интерфейс 106-4 преобразования помещает элемент в программный объект 110.(g) in step 318, when the endElement method is executed, the transform interface 106-4 places the element in the program object 110.

Описанный выше API-интерфейс SAX имеет множество известных из уровня техники спецификаций. Задачей настоящего изобретения является создание класса, реализующего интерфейс-обработчик содержания, представляющий собой интерфейс, построенный на механизме обратных вызовов и используемый анализаторами документов XML для уведомления программы о событиях SAX по мере их обнаружения в документе XML. Этот интерфейс используется с классом 106-2 обработчика буферизованного содержания (XML2xBufferedContentHandler) и классом 106-1 источника входных данных (XML2xInputSource). Применительно к интерфейсу-обработчику содержания API-интерфейс SAX также может быть реализован в виде интерфейса класса стандартного обработчика (DefaultHandler). Ниже в примере I "преобразование документа XML в пользовательский объект JAVA" подробно описано применение стандартного обработчика для генерирования пользовательского объекта Java Bean из пользовательского документа на языке XML.The SAX API described above has many well-known specifications. An object of the present invention is to provide a class that implements a content handler interface, which is an interface built on a callback mechanism and used by XML document parsers to notify a program of SAX events as they are detected in an XML document. This interface is used with the buffered content handler class 106-2 (XML2xBufferedContentHandler) and the input source class 106-1 (XML2xInputSource). In relation to the content handler interface, the SAX API can also be implemented as an interface of the standard handler class (DefaultHandler). Example I “Converting an XML Document to a JAVA User Object” below describes in detail the use of a standard handler to generate a custom Java Bean from a user XML document.

Пример 1Example 1

Преобразование документа XML в пользовательский объект JAVAConvert an XML document to a custom JAVA object

В примере 1 использованы следующие компоненты (описанные ниже):In example 1, the following components were used (described below):

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

(Б) XML2CustomerMapping.java: класс 106-2 обработчика, в который анализатор 104 направляет обратные вызовы. Содержит команды по конструированию пользовательского объекта и определению его параметров;(B) XML2CustomerMapping.java: handler class 106-2 to which parser 104 routes callbacks. Contains commands for constructing a custom object and determining its parameters;

(B) executive.java: программа класса 106-3/интерфейса 106-4 преобразования, используемая для осуществления преобразования из языка XML в язык Java и из языка Java в язык XML (Пример II ниже);(B) executive.java: class 106-3 / conversion interface program 106-4 used to convert from XML to Java and from Java to XML (Example II below);

(Г) customer.java: вывод пользовательского объекта 110 на языке Java Bean; и(D) customer.java: output of a user object 110 in the Java Bean language; and

(Д) CustomerSymbols.java: содержит целочисленные константы и схему хеширования. Схема хеширования служит для преобразования имен тегов в целочисленные константы, используемые в XML2CustomerMapping.java.(E) CustomerSymbols.java: contains integer constants and a hash scheme. The hash scheme is used to convert tag names to integer constants used in XML2CustomerMapping.java.

А. Ниже приведен входной документ на языке XML (customer.xml).A. The following is an XML input document (customer.xml).

// START customer.xml// START customer.xml

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

<customer><customer>

<FirstName>Jane</FirstName><FirstName> Jane </FirstName>

<LastName>Doe</LastName><LastName> Doe </LastName>

<CustId>xyz.123</CustId><CustId> xyz.123 </CustId>

</customer></customer>

// END customer.xml// END customer.xml

Б. Ниже с некоторыми сокращениями для краткости приведена программа (XML2CustomerMapping.java), служащая для конструирования пользовательского объекта и задания его параметров (т.е., обработчик, в который анализатор событий направляет обратные вызовы).B. The program (XML2CustomerMapping.java), which is used to construct a user-defined object and set its parameters (i.e., a handler to which the event analyzer sends callbacks), is given below for brevity.

// START XML2CustomerMapping.java// START XML2CustomerMapping.java

public class XML2CustomerMapping extendspublic class XML2CustomerMapping extends

corn.xxx.xml2xmapping.XML2xMappingImpl {corn.xxx.xml2xmapping.XML2xMappingImpl {

private StringBuffer fieldCurrentQualifiedElementName=private StringBuffer fieldCurrentQualifiedElementName =

new StringBuffer("");new StringBuffer ("");

private Customer fieldCustomer;private Customer fieldCustomer;

private Stack elementStack;private stack elementStack;

* XMLCustomerInfo2RecordCustomerInfoMapper constructor comment.* XMLCustomerInfo2RecordCustomerInfoMapper constructor comment.

public XML2CustomerMapping() {public XML2CustomerMapping () {

super();super ();

elementStack=new Stack();elementStack = new Stack ();

}}

* characters method comment.* characters method comment.

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

switch (this.fieldCurrentElementSymbol) {switch (this.fieldCurrentElementSymbol) {

case CustomerSymbols.CUSTOMER_FIRSTNAME:case CustomerSymbols.CUSTOMER_FIRSTNAME:

case CustomerSymbols.CUSTOMER_LASTNAME:case CustomerSymbols.CUSTOMER_LASTNAME:

case CustomerSymbols.CUSTOMER_ID:case CustomerSymbols.CUSTOMER_ID:

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

break;break;

}}

}}

* endElement method comment.* endElement method comment.

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

String symbolName;String symbolName;

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

else symbolName=namespaceURI + "_" + localName;else symbolName = namespaceURI + "_" + localName;

this.fieldCurrentElementSymbol=CustomerSymbols.getSymbol(symbolName);this.fieldCurrentElementSymbol = CustomerSymbols.getSymbol (symbolName);

// Get the value// Get the value

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

switch (this.fieldCurrentElementSymbol) {switch (this.fieldCurrentElementSymbol) {

case CustomerSymbols.CUSTOMER_FIRSTNAME: {case CustomerSymbols.CUSTOMER_FIRSTNAME: {

this.fieldCustomer.setFirstName(value);this.fieldCustomer.setFirstName (value);

break;break;

}}

case CustomerSymbols.CUSTOMER_LASTNAME: {case CustomerSymbols.CUSTOMER_LASTNAME: {

this.fieldCustomer.setLastName(value);this.fieldCustomer.setLastName (value);

break;break;

}}

case CustomerSymbols.CUSTOMER_ID: {case CustomerSymbols.CUSTOMER_ID: {

this.fieldCustomer.setId(value);this.fieldCustomer.setId (value);

break;break;

}}

}}

this.fieldCurrentElementSymbol=0;this.fieldCurrentElementSymbol = 0;

}}

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

return this.fieldCustomer;return this.fieldCustomer;

}}

* startElement method comment.* startElement method comment.

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

String symbolName;String symbolName;

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

else symbolName=namespaceURI + "_" + localName;else symbolName = namespaceURI + "_" + localName;

this.fieldCurrentElementSymbol=CustomerSymbols.getSymbol(symbolName);this.fieldCurrentElementSymbol = CustomerSymbols.getSymbol (symbolName);

elementStack.push(new StringBuffer());elementStack.push (new StringBuffer ());

switch (this.fieldCurrentElementSymbol) {switch (this.fieldCurrentElementSymbol) {

case CustomerSymbols.CUSTOMER: {case CustomerSymbols.CUSTOMER: {

this.fieldCustomer=new Customer();this.fieldCustomer = new Customer ();

break;break;

}}

}}

}}

}}

// END XML2CustomerMapping.java// END XML2CustomerMapping.java

В. Ниже с некоторыми сокращениями для краткости приведена программа (execute.java) преобразования из языка XML в язык Java (и из языка Java в язык XML, как это подробно описано ниже в примере II).C. For brevity, the following is a program (execute.java) for converting from XML to Java (and from Java to XML, as described in more detail below in Example II) for brevity.

// START execute.java// START execute.java

package com.xxx.xml2xmapping.sample.customer;package com.xxx.xml2xmapping.sample.customer;

import Java.io.*;import Java.io. *;

import org.xml.sax.*;import org.xml.sax. *;

public class Execute {public class Execute {

* Execute constructor comment.* Execute constructor comment.

public Execute() {public Execute () {

super();super ();

}}

* Starts the application.* Starts the application.

* @param args an array of command-line arguments* @param args an array of command-line arguments

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

int numlterations=1;int numlterations = 1;

XML2CustomerMapping inMapping=new XML2CustomerMapping();XML2CustomerMapping inMapping = new XML2CustomerMapping ();

Customer2XMLMapping outEventBasedMapping=newCustomer2XMLMapping outEventBasedMapping = new

Customer2XMLMapping();Customer2XMLMapping ();

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

Customer2XMLMapping outEventBasedMapping=newCustomer2XMLMapping outEventBasedMapping = new

Customer2XMLMapping();Customer2XMLMapping ();

// read in the customer.xml file// read in the customer.xml file

ByteArrayInputStream inStream=null;ByteArrayInputStream inStream = null;

try {try {

FileInputStream fileInputStream=newFileInputStream fileInputStream = new

FileInputStream("customer.xml");FileInputStream ("customer.xml");

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

fileInputStream.read(bytes, 0,fileInputStream.read (bytes, 0,

fileInputStream.available());fileInputStream.available ());

inStream=new ByteArrayInputStream(bytes);inStream = new ByteArrayInputStream (bytes);

} catch (Exception e) {} catch (Exception e) {

e.printStackTrace();e.printStackTrace ();

}}

ByteArrayOutputStream outStream=new ByteArrayOutputStream();ByteArrayOutputStream outStream = new ByteArrayOutputStream ();

try {try {

long ts=System.currentTimeMillis();long ts = System.currentTimeMillis ();

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

// inbound mapping// inbound mapping

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

inMapping.setInputStream(inStream);inMapping.setInputStream (inStream);

inMapping.execute();inMapping.execute ();

// some execution, here a connector would be called// some execution, here a connector would be called

// get the customer object and print its contents// get the customer object and print its contents

Customer aCustomer=inMapping.getCustomer();Customer aCustomer = inMapping.getCustomer ();

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

+aCustomer.getFirstName());+ aCustomer.getFirstName ());

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

"+aCustomer.getLastName());"+ aCustomer.getLastName ());

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

// Change the values on the customer object// Change the values on the customer object

aCustomer.setFirstName("James");aCustomer.setFirstName ("James");

aCustomer.setLastName("Bond");aCustomer.setLastName ("Bond");

aCustomer.setId("007");aCustomer.setId ("007");

// outbound mapping// outbound mapping

// map from Java to XML// map from Java to XML

outEventBasedMapping.setCustomer(aCustomer);outEventBasedMapping.setCustomer (aCustomer);

// outEventBasedMapping.setOutputStream(outStream);// outEventBasedMapping.setOutputStream (outStream);

outEventBasedMapping.setOutputStream(System.out);outEventBasedMapping.setOutputStream (System.out);

outEventBasedMapping.execute();outEventBasedMapping.execute ();

}}

long te=System.currentTimeMillis();long te = System.currentTimeMillis ();

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

} catch (Exception e) {} catch (Exception e) {

e.printStackTrace();e.printStackTrace ();

}}

}}

}}

//END execute.java// END execute.java

Г. Ниже описана пользовательская программа Java Bean (customer.java). Java Bean является многократно используемым компонентом, присоединенным к известной из уровня техники структуре стандартной конструкции. Bean является объектом класса, видимым или невидимым во время выполнения программы.D. The Java Bean user program (customer.java) is described below. The Java Bean is a reusable component attached to the standard structure of the prior art. A bean is a class object, visible or invisible at run time.

//START customer.java// START customer.java

package com.xxx.xml2xmapping. sample.customer;package com.xxx.xml2xmapping. sample.customer;

public class Customer {public class Customer {

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

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

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

* Customer constructor comment.* Customer constructor comment.

public Customer() {public Customer () {

super();super ();

}}

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

* @return The firstName property value.* @return The firstName property value.

* @see #setFirstName* @see #setFirstName

public Java.lang.String getFirstName() {public Java.lang.String getFirstName () {

return fieldFirstName;return fieldFirstName;

}}

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

* @return The id property value.* @return The id property value.

* @see #setId* @see #setId

public Java.lang.String getId() {public Java.lang.String getId () {

return fieldId;return fieldId;

}}

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

* @return The lastName property value.* @return The lastName property value.

* @see #setLastName* @see #setLastName

public java.lang.String getLastName() {public java.lang.String getLastName () {

return fieldLastName;return fieldLastName;

}}

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

* @param firstName The new value for the property.* @param firstName The new value for the property.

* @see #getFirstName* @see #getFirstName

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

fieldFirstName=firstName;fieldFirstName = firstName;

}}

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

* @param id The new value for the property.* @param id The new value for the property.

* @see #getId* @see #getId

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

fieldId=id;fieldId = id;

}}

/**/ **

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

* @param lastName The new value for the property.* @param lastName The new value for the property.

* @see #getLastName* @see #getLastName

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

fieldLastName=lastName;fieldLastName = lastName;

}}

}}

//END customer.java// END customer.java

Как следует из примера I, преобразование документа XML в объект Java является эффективным, поскольку анализатор 104 осуществляет обработку событий применительно ко всем начальным тегам, тегам элементов и конечным тегам, за счет чего улучшается отслеживание событий.As follows from Example I, converting an XML document to a Java object is effective because the parser 104 handles events for all start tags, element tags, and end tags, thereby improving event tracking.

В другом примере рассмотрен случай распространения однопользовательского документа на языке XML на массив пользователей. Для генерирования массива пользовательских программ Java beans выполняют следующие шаги:In another example, the case of distributing a single-user XML document to an array of users is considered. To generate an array of custom Java beans programs, follow these steps:

(i) используют startElement применительно к пользователям для создания вектора;(i) use startElement for users to create a vector;

(ii) создают в startElement пользовательский объект применительно к каждому пользователю; и(ii) create a user object in startElement for each user; and

(iii) используют события startElement, getElement, endElement применительно к FirstName, LastName и CustID для заполнения пользовательского объекта, endElement применительно к пользователю - для ввода пользовательского объекта в вектор, а endElement применительно к пользователям - для создания массива пользователей на основе вектора и его ввода в соответствующий объект Java.(iii) use the startElement, getElement, endElement events for FirstName, LastName and CustID to populate the user object, endElement for the user to enter the user object into the vector, and endElement for users to create the user array based on the vector and enter it into the corresponding Java object.

Анализатор 104 поддерживает стек для рекурсивных структур языка XML (т.е. элементов языка XML, отображающих список списков). Объект создается для каждого startElement. Стек может использоваться для поддержания требуемого состояния. После создания дочернего элемента он может быть введен в соответствующий материнский объект.Analyzer 104 maintains a stack for recursive structures of the XML language (i.e., XML language elements displaying a list of lists). An object is created for each startElement. The stack can be used to maintain the required state. After creating a child element, it can be inserted into the corresponding parent object.

Преобразование программного объекта в документ XML;Convert a program object to an XML document;

Как показано на фиг.2, модуль 114 преобразования программного объекта в документ XML имеет следующие компоненты:As shown in figure 2, the module 114 converting a program object into an XML document has the following components:

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

(б) интерфейс преобразования 114-2 (X2XMLMapping) для осуществления преобразования и задания выходных параметров целевого потока;(b) the conversion interface 114-2 (X2XMLMapping) for performing the conversion and setting the output parameters of the target stream;

(в) класс 114-3 преобразования (X2XMLMappingImpl), обеспечивающий методы для преобразования входного объекта 116 на языке Java в выходной документ 118 на языке XML; и(c) a conversion class 114-3 (X2XMLMappingImpl) providing methods for converting an input object 116 in Java to an output document 118 in XML; and

(г) выходной целевой класс 114-4 (X2XMLOutputTarget) для реализации выходного документа 118 на языке XML.(d) the output target class 114-4 (X2XMLOutputTarget) to implement the output document 118 in XML.

В таблице M114-1 приведены основные функции (т.е. не исчерпывающий перечень функций) интерфейса-обработчика 114-1 (X2XMLHandler). Модуль преобразования 114 реализует функции интерфейса 114-1 и регистрирует экземпляр с использованием JSP-контейнера. Документ-шаблон 112 обращается к модулю преобразования для обратного вызова основных, связанных с документом событий, таких как начало и окончание элементов, и получения значений элементов.Table M114-1 lists the main functions (i.e., not an exhaustive list of functions) of the handler interface 114-1 (X2XMLHandler). Conversion module 114 implements the functions of interface 114-1 and registers the instance using the JSP container. The template document 112 refers to the conversion module to call back the main document-related events, such as the start and end of the elements, and obtain the values of the elements.

Таблица M114-1Table M114-1 ФункцияFunction ОписаниеDescription GetElementValue()GetElementValue () Возврат значения элемента. Используется при работе с простыми типами, не ограниченными начальными и конечными тегами элемента.Returns the value of an item. It is used when working with simple types that are not limited to the start and end tags of an element. EndElement()EndElement () Получение уведомления о конце элемента. Используется для поддержания состояния при работе со сложным типом.Receive notification of the end of an item. It is used to maintain state when working with a complex type. GetElementAttribute()GetElementAttribute () Возврат установленного значения атрибута. Используется при работе со сложным типом, ограниченным начальным и конечным тегами элемента.Returns the set attribute value. It is used when working with a complex type, limited by the start and end tags of the element. GetElementRepetitions()GetElementRepetitions () Используется для повторяющегося элемента, возвращает число повторений.Used for repeating element, returns the number of repetitions. IsOptionalAtributePresent()IsOptionalAtributePresent () Подтверждение истинности в случае присутствия факультативного атрибута, в противном случае подтверждает ложность. Используется в шаблоне (JSP) 112 документа на языке XML для управления генерированием имени и значения факультативного атрибута в документе 118 на языке XML. Используется при работе со сложным типом, ограниченным начальным и конечным тегами элемента.Confirmation of truth in the presence of an optional attribute, otherwise confirms falsehood. Used in an XML document template (JSP) 112 to control the generation of the name and value of an optional attribute in an XML document 118. It is used when working with a complex type, limited by the start and end tags of the element. StartElement()StartElement () Получение уведомления о начале элемента. Используется для поддержания состояния при работе со сложными типами.Receive notification of the start of an item. Used to maintain state when working with complex types.

В целом, контейнер представляет собой сущность, обеспечивающую управление жизненным циклом, безопасность, развертывание и оперативное обслуживание компонентов. Существует множество типов контейнеров (Web, JSP, сервлет, апплет и т.д.), предоставляющих зависимые от компонентов услуги. Контейнер-сервлет является контейнером, предоставляющим сетевые услуги для передачи запросов и ответов, запросов декодирования и запросов форматов. JSP-контейнер является контейнером, предоставляющим услуги, аналогичные услугам сервлета и машины, интерпретирующей и обрабатывающей JSP-страницы в сервлет.In general, a container is an entity that provides lifecycle management, security, deployment, and operational maintenance of components. There are many types of containers (Web, JSP, servlet, applet, etc.) that provide component-dependent services. A servlet container is a container that provides network services for sending requests and responses, decoding requests, and format requests. A JSP container is a container that provides services similar to those of a servlet and a machine that interprets and processes JSP pages in a servlet.

Интерфейс-обработчик X2XMLHandler 114-1 создает зеркальное (но не идентичное) отображение событий, анализируемых анализатором 104. По существу, структура, создаваемая анализатором 104, зеркально отображается на пути от X2XML.The X2XMLHandler 114-1 handler interface creates a mirror (but not identical) representation of the events analyzed by the analyzer 104. In essence, the structure created by the analyzer 104 is mirrored on the way from X2XML.

Если анализатор 104 реализован с использованием интерфейса SAX, события поступают в обработчик 106-2 (т.е. по существу механизм обратного вызова), который осуществляет их обработку. В данном примере обработчик 106-2 используется для заполнения класса Java.If the analyzer 104 is implemented using the SAX interface, events are sent to a handler 106-2 (i.e., essentially a callback mechanism) that processes them. In this example, handler 106-2 is used to populate the Java class.

После активизации шаблона 112 он осуществляет обратный вызов, адресуемый интерфейсу-обработчику X2XMLHandler 114-1. Интерфейс-обработчик X2XMLHandler 114-1 осуществляет обработку обратного вызова, получая запрошенные данные и поддерживая состояние анализа.After invoking template 112, it makes a callback addressed to the X2XMLHandler 114-1 handler interface. The X2XMLHandler 114-1 handler interface handles callback processing, receiving the requested data and maintaining the analysis state.

Несмотря на то, что интерфейс-обработчик 114-1 аналогичен модулю 106 преобразования документа XML в программный объект с точки зрения выполняемых им функций, между ними существуют определенные различия. Имя элемента генерируется или кодируется вручную, а не берется из схемы, поддерживающей пространство имен. Имя элемента может быть уникальным для каждого элемента. Таким образом, для выполнения методов startElement и endElement необходим лишь параметр имени.Despite the fact that the handler interface 114-1 is similar to the module 106 for converting an XML document into a program object in terms of its functions, there are certain differences between them. The element name is generated or encoded manually, and is not taken from a schema that supports a namespace. An item name may be unique for each item. Thus, to execute the startElement and endElement methods, only the name parameter is needed.

При осуществлении модулем 106 преобразования документа XML в программный объект класс 106-1 источника входных данных (т.е. XMLReader) возвращает имя элемента в виде строки. В классе 106-3/интерфейсе 106-4 преобразования имя элемента объединяют с уникальным числом. Данное число используется оператором выбора для управления обработкой элементов. В модуле 114 преобразования программного объекта в документ XML происходит оптимизация обработки и улучшается поддержка кодирования, для чего имя элемента описывается в виде целочисленной константы. Таким образом, при обратных вызовах данных методов вместо строк используются целочисленные константы.When module 106 converts an XML document into a program object, class 106-1 of an input data source (i.e., XMLReader) returns the element name as a string. In class 106-3 / conversion interface 106-4, the element name is combined with a unique number. This number is used by the selection operator to control the processing of elements. In the module 114 for converting a program object into an XML document, processing is optimized and coding support is improved, for which the element name is described as an integer constant. Thus, when calling these methods back, integer constants are used instead of strings.

Порядок следования событий в интерфейсе-обработчике 114-1 зеркально отражает порядок следования информации в самом объекте 116.The sequence of events in the processor interface 114-1 mirrors the sequence of information in the object 116 itself.

В документе-шаблоне 112 на языке XML (записанном с использованием технологии JavaServer Pages) применен описанный ниже стиль кодирования. Технология JSP дает возможность отделять пользовательский интерфейс от генерирования содержания, что позволяет целиком изменять макет страницы, не меняя лежащего в ее основе динамического информационного содержимого. Технология JavaServer Pages является расширенным вариантом технологии Java Servlet, хорошо известной специалистам в данной области техники.An XML document template (written using JavaServer Pages technology) uses the coding style described below. JSP technology makes it possible to separate the user interface from the generation of content, which allows you to completely change the layout of the page without changing the underlying dynamic information content. JavaServer Pages technology is an advanced version of Java Servlet technology, well known to those skilled in the art.

Пример стиля кодирования документа-шаблона 112 на языке XML, записанного с использованием технологии JSP.An example of the coding style of an XML document document 112 recorded using JSP technology.

Обратные вызовы кодируются применительно к начальным и конечным тегам документа 118 и сложным типам. Это позволяет обработчику 114-1 поддерживать состояние. Начальные и конечные теги документа-шаблона 112 на языке XML, записанного с использованием технологии JSP, также кодируют непосредственно, чтобы направлять их в целевой выходной поток. При работе с простыми типами кодирование обратных вызовов не требуется, однако начальные и конечные теги необходимо кодировать, чтобы направлять их в целевой выходной поток.Callbacks are encoded with respect to the start and end tags of document 118 and complex types. This allows handler 114-1 to maintain state. The start and end tags of the XML document template 112 recorded using JSP technology are also encoded directly to direct them to the target output stream. When working with simple types, callback encoding is not required, but the start and end tags must be encoded to direct them to the target output stream.

Если элемент сложного или простого типа является факультативным, в условном выражении внутри шаблона 112 используется функция isOptionalElementPresent(), управляющая генерированием факультативного элемента.If an element of a complex or simple type is optional, the conditional expression inside template 112 uses the isOptionalElementPresent () function that controls the generation of the optional element.

Если атрибут является факультативным, то для сложного типа используется метод isOptionalAttributePresent(int attributeName), а для простого типа - метод isOptionalAttributePresent (int elementName, int attributeName). Если элемент относится к повторяющемуся простому типу, определяют, содержит ли он факультативный атрибут, используя для этого метод isOptionalAttributePresent(int index, int elementName, int attributeName).If the attribute is optional, the isOptionalAttributePresent (int attributeName) method is used for a complex type, and the isOptionalAttributePresent (int elementName, int attributeName) method is used for a simple type. If the element is of a repeating simple type, it is determined whether it contains an optional attribute using the isOptionalAttributePresent (int index, int elementName, int attributeName) method for this.

В отношении повторяющихся элементов используют метод getElementRepetitions, служащий для возврата числа повторяющихся элементов. Это делается для создания в шаблоне 112 цикла для обработки каждого элемента. Для простых типов шаблон 112 должен содержать начальные и конечные теги и вызывать метод getElementValue(int index, int elementName) для получения значения элемента. Поскольку для сложных типов необходимо поддерживать состояние, шаблон 112 должен вызывать методы startElement(int index, int elementName) и endElement(int index, int elementName).For repeating elements, use the getElementRepetitions method, which returns the number of repeating elements. This is done to create a loop in template 112 to process each element. For simple types, template 112 must contain start and end tags and call the getElementValue (int index, int elementName) method to get the value of the element. Since complex types must be stateful, pattern 112 must call the startElement (int index, int elementName) and endElement (int index, int elementName) methods.

В таблице 114-2 приведены основные функции (т.е. не исчерпывающий перечень функций) интерфейса преобразования 114-2 (X2XMLMapping). Интерфейс преобразования 114-2 выполняет функцию преобразования (объекта Java в документ XML) и задает целевой выходной поток. Интерфейс преобразования 114-2 расширяет функции интерфейса-обработчика 114-1, который обеспечивает методы обратного вызова шаблона 112, необходимые для генерирования выходного документа 118 на языке XML.Table 114-2 lists the main functions (i.e., not an exhaustive list of functions) of the conversion interface 114-2 (X2XMLMapping). The conversion interface 114-2 performs the conversion function (of a Java object into an XML document) and sets the target output stream. The conversion interface 114-2 extends the functions of the handler interface 114-1, which provides the callback methods for the template 112 necessary to generate XML output 118.

Таблица M114-2Table M114-2 ФункцияFunction ОписаниеDescription Execute()Execute () Осуществление преобразования, в результате которого создается выходной документ 118 на языке XML.The implementation of the conversion, which creates the output document 118 in XML. setOutputStream()setOutputStream () Определение выходного потока, в который будет генерирован выходной документ 118 на языке XML.The definition of the output stream into which the output XML document 118 will be generated.

В таблице 114-3 приведены основные функции (т.е. не исчерпывающий перечень функций) класса 114-3 преобразования (X2XMLMappingImpl). Класс 114-3 преобразования обеспечивает методы преобразования входного объекта 116 на языке Java в выходной документ 118 на языке XML. Как указано выше, при описании определений класса и интерфейса, X2XMLMappingImpl класс 114-3 не используют непосредственно, а выделяют в нем подклассы с использованием содержания, добавленного к соответствующим методам в зависимости от определений типа выходного документа 118 на языке XML, преобразование в который осуществляется, и входного объекта 116 на языке Java, преобразование из которого осуществляется.Table 114-3 lists the main functions (i.e., not an exhaustive list of functions) of conversion class 114-3 (X2XMLMappingImpl). Conversion class 114-3 provides methods for converting an input object 116 in Java to an output document 118 in XML. As described above, when describing class and interface definitions, X2XMLMappingImpl class 114-3 is not used directly, but subclasses are allocated in it using content added to the appropriate methods depending on the definitions of the type of XML output document 118, the conversion to which is performed, and an input object 116 in the Java language, the conversion from which is carried out.

Таблица M114-3Table M114-3 ФункцияFunction ОписаниеDescription Execute()Execute () Осуществление преобразования с целью создания выходного документа 118 на языкеImplementation of the conversion to create an output document 118 in the language XML.XML SetOutputStream()SetOutputStream () Определение выходного потока, в который будет генерирован выходной документ 118 на языке XML.The definition of the output stream into which the output XML document 118 will be generated.

В таблице M114-4 приведены основные функции (т.е. неисчерпывающий перечень функций) выходного целевого класса 114-4 (X2XMLOutput Target).Table M114-4 lists the main functions (i.e., a non-exhaustive list of functions) of the output target class 114-4 (X2XMLOutput Target).

X2XMLOutput Target класс 114-4 позволяет записывать документ 118 на языке XML в поток байтов или символов. Класс 114-4 обеспечивает оптимизацию, в частности, позволяющую позиционировать поток байтов в выходной поток сервлета. Таким образом, документ 118 на языке XML не подвергают буферизации перед контрольным считыванием.The X2XMLOutput Target class 114-4 allows you to write an XML document 118 into a stream of bytes or characters. Class 114-4 provides optimizations, in particular that allow the byte stream to be positioned in the servlet output stream. Thus, the XML document 118 is not buffered before the check read.

Таблица M114-4Table M114-4 ФункцияFunction ОписаниеDescription Close()Close () Закрытие выходного потока и высвобождение всех ресурсов системы, связанных с потоком.Closing the output stream and freeing up all system resources associated with the stream. Flush()Flush () Очистка выходного потока и контрольное считывание всех буферизованных выходных байтов.Flushing the output stream and reading out all buffered output bytes. Write()Write () Запись байтов из заданного массива байтов в выходной поток.Writing bytes from a given byte array to the output stream.

Таким образом, X2XMLMappingImpl класс 114-3 реализует функции X2XMLMapping интерфейса 114-2. X2XMLMapping интерфейс 114-2 расширяет функции X2XMLHandler интерфейса 114-1. Таким образом, X2XMLMappingImpl класс 114-3 реализует функции, заложенные в X2XMLHandler интерфейсе 114-1.Thus, the X2XMLMappingImpl class 114-3 implements the X2XMLMapping functions of the 114-2 interface. X2XMLMapping interface 114-2 extends the functions of X2XMLHandler interface 114-1. Thus, the X2XMLMappingImpl class 114-3 implements the functions embedded in the X2XMLHandler interface 114-1.

На фиг.4 проиллюстрирован способ 400 преобразования программного объекта 116 (например, Java Bean) в документ 118 на языке XML, при осуществлении которого:FIG. 4 illustrates a method 400 for converting a program object 116 (eg, Java Bean) into an XML document 118, the implementation of which:

(а) на шаге 402 получают экземпляр интерфейса 114-2 преобразования (например, X2XMLMapping) для осуществления преобразования из входного объекта Х 116 в выходной документ 118 на языке XML;(a) in step 402, an instance of a conversion interface 114-2 is obtained (e.g., X2XMLMapping) for converting from an input object X 116 to an output document 118 in XML;

(б) на шаге 404 задают программный объект 116 и выходной поток для документа 118 на языке XML в интерфейсе преобразования 114-3;(b) in step 404, a program object 116 and an output stream for an XML document 118 are defined in the conversion interface 114-3;

(в) на шаге 406 активизируют интерфейс преобразования 114-2;(c) in step 406, the conversion interface 114-2 is activated;

(г) на шаге 408 создают JSP-контейнер;(d) in step 408, a JSP container is created;

(д) на шаге 410 интерфейс преобразования 114-2 активизирует JSP-контейнер, используя документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), для создания документа 118 на языке XML;(e) in step 410, the conversion interface 114-2 activates the JSP container using an XML document template 112 recorded using JSP technology (JSP-XML template) to create an XML document 118;

(е) на шаге 412 JSP-контейнер компилирует и реализует документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML);(e) in step 412, the JSP container compiles and implements the XML document template 112 recorded using the JSP technology (JSP-XML template);

(ж) на шаге 414 компилированный документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), начинает запись документа 118 на языке XML в заданный (на шаге 404) выходной поток;(g) in step 414, the compiled XML document template 112 recorded using the JSP technology (JSP-XML template) starts writing the XML document 118 to the output stream (in step 404);

(з) на шаге 416, если это применимо к тегам элементов/данных атрибутов и начальным/конечным тегам, компилированный документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), осуществляет обратный вызов интерфейса преобразования 114-2 с целью поддержания состояния обработки и ввода данных в выходной документ 118 на языке XML (данные извлекают из программного объекта 116);(h) in step 416, if applicable to attribute element / data tags and start / end tags, the compiled XML document template 112, written using JSP technology (JSP-XML template), calls the conversion interface 114- 2 in order to maintain a state of processing and inputting data into an XML output document 118 (data is extracted from program object 116);

(и) на шаге 418 компилированный документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), может факультативно вызвать метод isOptionalElementPresent или метод isOptionalAtributePresent с тем, чтобы определить необходимость генерирования некоторых частей документа на языке XML;(i) in step 418, a compiled XML document template 112 written using JSP technology (JSP-XML template) can optionally call the isOptionalElementPresent method or isOptionalAtributePresent method to determine if some parts of the XML document need to be generated;

(к) на шаге 420 документ-шаблон 112 на языке XML, записанный с использованием технологии JSP (шаблон JSP-XML), осуществляет обратный вызов метода getElementRepetitions для определения количества циклов при генерировании определенных частей документа на языке XML; и(k) in step 420, an XML document document 112 recorded using JSP technology (JSP-XML template) calls the getElementRepetitions method to determine the number of cycles when generating certain parts of an XML document; and

(л) на шаге 422 состояние обработки поддерживают с использованием стека; это эффективно при генерировании сложных типов внутри документа на языке XML, в котором образуется массив, происходит рекурсия или в одном сложном типе содержится другой сложный тип.(k) in step 422, the processing state is maintained using the stack; this is effective when generating complex types inside an XML document in which an array is formed, recursion occurs, or one complex type contains another complex type.

В преобразовании объекта Java в документ XML используется документ-шаблон 112 на языке XML, который кодируется с использованием аналогичных стандартов, заданных анализатором 104, осуществляющим обработку событий (по меньшей мере для сложных объектов). Например, для сложных типов необходимо кодировать начальные и конечные теги (что не требуется для элементов простых типов). Ниже в примере II "преобразование пользовательского объекта JAVA в документ XML" подробно описано генерирование выходного документа на языке XML из входного пользовательского объекта языка Java.When transforming a Java object into an XML document, an XML template document 112 is used, which is encoded using similar standards defined by the analyzer 104 that processes events (at least for complex objects). For example, for complex types, it is necessary to encode start and end tags (which is not required for elements of simple types). Example II below, “Converting a JAVA User Object to an XML Document”, describes in detail the generation of an XML output document from an input Java user object.

Пример IIExample II

Преобразование пользовательского объекта JAVA в документ XMLConvert a custom JAVA object to an XML document

В примере II использованы следующие компоненты (описанные ниже):In example II, the following components were used (described below):

(A) Customer2XMLMapping.java: класс 114-1 обработчика, который JSP-шаблон 112 вызывает для получения значений из входного пользовательского объекта 116 языка Java и заполнения выходного документа 118 на языке XML;(A) Customer2XMLMapping.java: handler class 114-1 that the JSP template 112 calls to retrieve values from the input user object 116 of the Java language and populate the output document 118 in XML;

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

(B) customerSymbols.java: содержит константы и схему хеширования. Схема хеширования служит для преобразования имен тегов в целочисленные константы. JSP-шаблон 112 использует целочисленные константы; и(B) customerSymbols.java: contains constants and a hash scheme. The hash scheme is used to convert tag names to integer constants. JSP pattern 112 uses integer constants; and

(Г) execute.java: программа класса 114-2/интерфейса 114-3 преобразования, используемая для осуществления преобразования из языка Java в язык XML и из языка XML в язык Java (аналогично пункту В из примера I выше).(D) execute.java: a class 114-2 / conversion interface program 114-3 program used to convert from Java to XML and from XML to Java (similar to step B of Example I above).

А. Ниже с некоторыми сокращениями для краткости приведена программа (Customer2XMLMapping.java), служащая для создания документа на языке XML из входного объекта языка Java.A. Below, with some abbreviations, for brevity, the program (Customer2XMLMapping.java) is used to create an XML document from an input object of the Java language.

//START Customer2XMLMapping.java// START Customer2XMLMapping.java

package corn.xxx.xml2xmapping.sample.customer;package corn.xxx.xml2xmapping.sample.customer;

import java.util.*;import java.util. *;

import com.ibm.xml2xmapping.util. *;import com.ibm.xml2xmapping.util. *;

public class Customer2XMLMapping extendspublic class Customer2XMLMapping extends

com.xxx.xml2xmapping.X2XMLMappingImpl {com.xxx.xml2xmapping.X2XMLMappingImpl {

private Customer fieldCustomer;private Customer fieldCustomer;

/**/ **

* Customer2XMLMapping constructor comment.* Customer2XMLMapping constructor comment.

*/* /

public Customer2XMLMapping() {public Customer2XMLMapping () {

super();super ();

fieldPageName="customer.jsp";fieldPageName = "customer.jsp";

}}

/**/ **

* getElementRepetitions method comment.* getElementRepetitions method comment.

*/* /

public int getElementRepetitions(int name) {public int getElementRepetitions (int name) {

switch (name) {switch (name) {

} return 0;} return 0;

}}

/**/ **

* getElementValue method comment.* getElementValue method comment.

*/* /

public String getElementValue(int name) {public String getElementValue (int name) {

switch (name) {switch (name) {

case CustomerSymbols.CUSTOMER_FIRSTNAME: {case CustomerSymbols.CUSTOMER_FIRSTNAME: {

return this.fieldCustomer.getFirstName();return this.fieldCustomer.getFirstName ();

}}

case CustomerSymbols.CUSTOMER_LASTNAME: {case CustomerSymbols.CUSTOMER_LASTNAME: {

return this.fieldCustomer.getLastName();return this.fieldCustomer.getLastName ();

} case CustomerSymbols.CUSTOMER_ID: {} case CustomerSymbols.CUSTOMER_ID: {

return this.fieldCustomer.getId();return this.fieldCustomer.getId ();

}}

}}

return "";return "";

}}

* getElementValue method comment.* getElementValue method comment.

public String getElementValue(int index, int name) {public String getElementValue (int index, int name) {

switch (name) {switch (name) {

}}

return "";return "";

}}

* @param aCustomer* @param aCustomer

corn.xxx.xml2xmapping.sample.customer.Customercorn.xxx.xml2xmapping.sample.customer.Customer

public void setCustomer(Customer aCustomer) {public void setCustomer (Customer aCustomer) {

this.fieldCustomer=aCustomer;this.fieldCustomer = aCustomer;

}}

}}

//END Customer2XMLmapping.java// END Customer2XMLmapping.java

Б. Ниже с некоторыми сокращениями для краткости описан документ-шаблон (Customer.jsp), используемый в технологии JSP для модуля 112.B. Below, for brevity, a template document (Customer.jsp) used in JSP technology for module 112 is described below.

//START Customer.jsp// START Customer.jsp

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

<%@ page<% @ page

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

%>%>

<%X2XMLHandler handler=<% X2XMLHandler handler =

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

handler.setWriter(out);%>handler.setWriter (out);%>

<?xml version="1.0"?><? xml version = "1.0"?>

<customer><customer>

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

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

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

</customer></customer>

//END Customer.jsp// END Customer.jsp

В. Ниже с некоторыми сокращениями для краткости приведена программа (Customersymbols.java) схемы хеширования и констант, используемых в документе-шаблоне customer.jsp.C. Below, for brevity, the program (Customersymbols.java) of the hash schemes and constants used in the customer.jsp template document is given below.

//START Customersymbols.java// START Customersymbols.java

package corn.xxx.xml2xmapping.sample.customer;package corn.xxx.xml2xmapping.sample.customer;

import java.util.HashMap;import java.util.HashMap;

public class CustomerSymbols {public class CustomerSymbols {

public static final int CUSTOMER=1;public static final int CUSTOMER = 1;

public static final int CUSTOMER_FIRSTNAME=2;public static final int CUSTOMER_FIRSTNAME = 2;

public static final int CUSTOMER_LASTNAME=3;public static final int CUSTOMER_LASTNAME = 3;

public static final int CUSTOMER_ID=4;public static final int CUSTOMER_ID = 4;

private static CustomerSymbols fieldlnstance;private static CustomerSymbols fieldlnstance;

private HashMap fieldName2SymbolDictionary;private HashMap fieldName2SymbolDictionary;

private static Object anObject=new Object();private static Object anObject = new Object ();

* CustomerInfoElementSymbols constructor comment.* CustomerInfoElementSymbols constructor comment.

private CustomerSymbols() {private CustomerSymbols () {

super();super ();

this.fieldName2SymbolDictionary=new HashMap();this.fieldName2SymbolDictionary = new HashMap ();

this.fieldName2SymbolDictionary.put("customer", newthis.fieldName2SymbolDictionary.put ("customer", new

Integer(CustomerSymbols.CUSTOMER));Integer (CustomerSymbols.CUSTOMER));

this.fieldName2SymbolDictionary.put("FirstName", newthis.fieldName2SymbolDictionary.put ("FirstName", new

Integer(CustomerSymbols.CUSTOMER_FIRSTNAME));Integer (CustomerSymbols.CUSTOMER_FIRSTNAME));

this.fieldName2SymbolDictionary.put("LastName", newthis.fieldName2SymbolDictionary.put ("LastName", new

Integer(CustomerSymbols.CUSTOMER_LASTNAME));Integer (CustomerSymbols.CUSTOMER_LASTNAME));

this.fieldName2SymbolDictionary.put("CustId", newthis.fieldName2SymbolDictionary.put ("CustId", new

Integer(CustomerSymbols.CUSTOMER_ID));Integer (CustomerSymbols.CUSTOMER_ID));

}}

* @return int* @return int

* @param elementName java.lang.String* @param elementName java.lang.String

public static int getSymbol(String elementName) {public static int getSymbol (String elementName) {

if (CustomerSymbols. fieldlnstance==null) {if (CustomerSymbols. fieldlnstance == null) {

synchronized (anObject) {synchronized (anObject) {

if (CustomerSymbols. fieldlnstance=null) {if (CustomerSymbols. fieldlnstance = null) {

CustomerSymbols.fieldlnstance=newCustomerSymbols.fieldlnstance = new

CustomerSymbols();CustomerSymbols ();

}}

}}

}}

returnreturn

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

}}

}}

//END Customersymbols.Java// END Customersymbols.Java

Ниже приведен образец измененного документа-шаблона customer.jsp для генерирования документа на языке XML при наличии массива пользователей, как это описано в примере I:The following is a sample of a modified template document customer.jsp for generating an XML document with an array of users, as described in Example I:

for(int i=0;for (int i = 0;

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

{{

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

<FirstName><FirstName>

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

<LastName><LastName>

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

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

</customer></customer>

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

Обработчик 114-1 определяет размер массива (т.е. количество выполняемых циклов) и возвращается к методу getElementRepetitions. При вызове из документа-шаблона customer.jsp метода startElement с использованием индекса и имени обработчик 114-1 создает ссылку на данный конкретный пользовательский объект массива.Handler 114-1 determines the size of the array (i.e., the number of loops executed) and returns to the getElementRepetitions method. When the startElement method is called from the template document customer.jsp using the index and name, handler 114-1 creates a link to this particular user-defined array object.

Для обработки рекурсии обработчик 114-1 использует стек. По мере рекурсии объекта обработчик 114-1 проталкивает запись в стек, используя функцию startElement, и выталкивает данные из стека, используя функцию endElement. Рабочим объектом является объект, расположенный на вершине стека.Handler 114-1 uses the stack to handle recursion. As the object recurses, handler 114-1 pushes the write onto the stack using the startElement function, and pushes the data from the stack using the endElement function. A work item is an item located at the top of the stack.

Если объект является факультативным (опциональным), используются методы isOptionalElement() или isOptionalAtribute() с тем, чтобы определить, существует ли объект. В процесс обработки документа-шаблона customer.jsp вносят коррективы с целью ввести условный оператор, использующий возвращаемое булево выражение для одного из методов isOptionalxxx. В целом преимущества примерного варианта осуществления настоящего изобретения заключаются в следующем:If the object is optional (optional), the isOptionalElement () or isOptionalAtribute () methods are used to determine if the object exists. Adjustments are made to the process of processing the template document customer.jsp in order to introduce a conditional statement that uses the return Boolean expression for one of the isOptionalxxx methods. In general, the advantages of an exemplary embodiment of the present invention are as follows:

(а) создание единой интегрированной среды для преобразования документа XML в объект Java и объекта Java в документ XML, в которой используется обработчик, маскирующий способ получения того или иного свойства для преобразования или отображения;(a) creating a single integrated environment for converting an XML document into a Java object and a Java object into an XML document, which uses a handler that masks the way to obtain a property for conversion or display;

(б) использование легко доступных инструментальных средств (например, SAX-анализатора, JSP) для реализации способов преобразования (XML/Java) по настоящему изобретению; и(b) the use of easily accessible tools (e.g., SAX parser, JSP) to implement the conversion methods (XML / Java) of the present invention; and

(в) обеспечение интерфейсов и классов (в среде языка Java), упрощающих структуру процесса преобразования по настоящему изобретению и делающих процесс преобразования сходным в обоих направлениях.(c) providing interfaces and classes (in the Java language environment) that simplify the structure of the transformation process of the present invention and make the transformation process similar in both directions.

Claims (22)

1. Способ преобразования структуры данных, представляющей программный объект, в элементы структурированного языка документа, реализуемый в компьютере и заключающийся в том, что:1. A method of converting a data structure representing a program object into elements of a structured language of a document implemented in a computer and consisting in the fact that: (а) генерируют шаблон указанного документа;(a) generate a template of the specified document; (б) считывают свойства программного объекта, которые взаимосвязаны с элементами структурированного языка документа;(b) read the properties of the program object, which are interconnected with the elements of the structured language of the document; (в) с использованием считанных свойств получают образованные элементами структурированного языка конструкции на основе взаимосвязи между этими свойствами и элементами структурированного языка и посредством кода преобразования, обеспечивающего как преобразование программного объекта в документ на основе элементов структурированного языка, так и преобразование в обратном направлении; и(c) using the read properties, the constructs formed by the elements of the structured language are obtained on the basis of the relationship between these properties and the elements of the structured language and through a conversion code that provides both the conversion of a program object into a document based on elements of a structured language and conversion in the opposite direction; and (г) полученными конструкциями заполняют шаблон документа.(d) the resulting designs fill in the document template. 2. Способ по п.1, в котором на шаге (в) осуществляют непосредственный обратный вызов программного объекта для получения свойств, отображающих конструкции, образующие структуру и содержание документа.2. The method according to claim 1, wherein in step (c), a direct callback of the program object is performed to obtain properties that display structures that form the structure and content of the document. 3. Способ по п.1, в котором на шаге (в) создают объектную модель, отображающую структуру и содержание документа.3. The method according to claim 1, in which at step (c) create an object model that displays the structure and content of the document. 4. Способ по п.1, в котором элементы структурированного языка представляют собой конструкции языка XML (расширяемый язык разметки).4. The method according to claim 1, in which the elements of a structured language are constructions of the XML language (extensible markup language). 5. Способ по п.1, в котором на шаге (в) создают цикл в шаблоне документа для обработки повторяющихся элементов структурированного языка.5. The method according to claim 1, in which, in step (c), a cycle is created in the document template for processing repeating elements of a structured language. 6. Система (10) преобразования программного объекта (116), содержащего свойства, в документ (118), образованный элементами структурированного языка, содержащая компьютер (20), имеющий процессор (22), соединенный посредством системной шины (26) с памятью (24), в которой хранятся:6. System (10) for converting a program object (116) containing properties into a document (118) formed by elements of a structured language containing a computer (20) having a processor (22) connected via a system bus (26) to memory (24) ) in which are stored: (а) шаблон (112) документа;(a) a template (112) of a document; (б) интерфейс-обработчик (114-1), осуществляющий отображение элементов структурированного языка документа (118) на основе обратных вызовов, выполняемых шаблоном (112) документа;(b) a processor interface (114-1) that displays the elements of a structured document language (118) based on callbacks performed by the document template (112); (в) модуль (114-2, 114-3) преобразования, связанный с интерфейсом-обработчиком (114-1) и преобразующий свойства программных объектов (116) в элементы структурированного языка, распознаваемые документом (118); и(c) a conversion module (114-2, 114-3) associated with a handler interface (114-1) and converting the properties of program objects (116) into elements of a structured language recognized by a document (118); and (г) класс (114-4) целевых выходных данных, связанный с модулем (114-2, 114-3) преобразования и служащий для записи элементов структурированного языка, сгенерированных модулем (114-2, 114-3) преобразования, в документ (118).(d) the target output class (114-4) associated with the conversion module (114-2, 114-3) and used to write the structured language elements generated by the conversion module (114-2, 114-3) into a document ( 118). 7. Система по п.6, в которой модуль преобразования имеет интерфейс (114-2) преобразования, осуществляющий преобразование свойств программного объекта в элементы структурированного языка и задающий выходной целевой поток документа (118), и класс (114-3) преобразования, обеспечивающий методы, используемые интерфейсом (114-2) преобразования.7. The system according to claim 6, in which the conversion module has a conversion interface (114-2) that converts the properties of a program object into elements of a structured language and defines an output target document stream (118), and a conversion class (114-3) that provides methods used by the conversion interface (114-2). 8. Система по п.7, в которой выходной целевой поток представляет собой буфер.8. The system of claim 7, wherein the output target stream is a buffer. 9. Система по п.7, в которой выходной целевой поток представляет собой ответный поток сервлета.9. The system of claim 7, wherein the output target stream is a servlet response stream. 10. Система по п.6, в которой элементы структурированного языка представляют собой конструкции языка XML (расширяемый язык разметки).10. The system according to claim 6, in which the elements of a structured language are constructions of the XML language (extensible markup language). 11. Система по п.10, в которой шаблон документа создают с использованием технологии JavaServer Pages (JSP).11. The system of claim 10, in which the document template is created using JavaServer Pages (JSP) technology. 12. Система (10) преобразования документа (108), содержащего элементы структурированного языка, в программный объект (110), содержащая компьютер (20), имеющий процессор (22), соединенный посредством системной шины (26) с памятью (24), в которой хранятся:12. System (10) for converting a document (108) containing elements of a structured language into a program object (110) containing a computer (20) having a processor (22) connected via a system bus (26) to memory (24) into which are stored: (а) анализатор (104) для обнаружения событий, отображающих особенности документа (108);(a) an analyzer (104) for detecting events displaying features of a document (108); (б) класс (106-1) источника входных данных для чтения документа (108);(b) a class (106-1) of an input data source for reading a document (108); (в) класс (106-2) обработчика содержания, связанный с классом (106-1) источника входных данных и реализующий буфер для событий, обнаруженных анализатором (104); и(c) the class (106-2) of the content handler associated with the class (106-1) of the input data source and implementing a buffer for events detected by the analyzer (104); and (г) модуль (106-3, 106-4) преобразования, связанный с классом (106-2) данных обработчика содержания и преобразующий события, обнаруженные анализатором (104), в свойства программного объекта (110).(d) a conversion module (106-3, 106-4) associated with the content processor data class (106-2) and converting events detected by the analyzer (104) into properties of a program object (110). 13. Система по п.12, в которой модуль преобразования имеет интерфейс (106-4) преобразования, осуществляющий преобразование событий документа в свойства объекта и задающий выходной целевой поток программного объекта (110), и класс (106-3), обеспечивающий методы, используемые интерфейсом (106-4) преобразования.13. The system according to item 12, in which the conversion module has a conversion interface (106-4) that converts document events into object properties and defines an output target stream of a program object (110), and a class (106-3) that provides methods, conversions used by the interface (106-4). 14. Система по п.13, в которой элементы структурированного языка представляют собой конструкции языка XML (расширяемая спецификация языка).14. The system of claim 13, wherein the elements of the structured language are XML language constructs (extensible language specification). 15. Способ преобразования программного объекта, имеющего свойства, в документ, представленный элементами структурированного языка, взаимосвязанными со свойствами программного объекта, причем указанный способ реализуется в компьютере, в памяти которого хранятся интерфейс преобразования и контейнер, и заключается в том, что:15. A method of converting a program object having properties into a document represented by elements of a structured language interconnected with properties of the program object, the method being implemented in a computer in whose memory the conversion interface and the container are stored, and that: (а) активизируют интерфейс преобразования и передают программный объект в экземпляр активизированного интерфейса преобразования;(a) activating the transform interface and passing the program object to the instance of the activated transform interface; (б) активизируют контейнер и с использованием экземпляра активизированного контейнера компилируют и исполняют шаблон документа; и(b) activating the container and using a copy of the activated container, compile and execute the document template; and (в) записывают документ в заданный выходной поток с использованием компилированного шаблона документа.(c) writing a document to a predetermined output stream using a compiled document template. 16. Способ по п.15, в котором для поддержания состояния обработки осуществляют обратный вызов, адресованный интерфейсу преобразования.16. The method according to clause 15, in which to maintain the processing state carry out a callback addressed to the conversion interface. 17. Способ по п.15, в котором для определения необходимости генерирования выбранных частей документа через компилированный шаблон вызывают метод isOptionalElementPresent.17. The method according to clause 15, in which the isOptionalElementPresent method is called to determine whether it is necessary to generate selected parts of the document through a compiled template. 18. Способ по п.15, в котором для определения необходимости генерирования выбранных частей документа через компилированный шаблон вызывают метод isOptionalAttributePresent.18. The method according to clause 15, in which the isOptionalAttributePresent method is called to determine whether it is necessary to generate selected parts of the document through a compiled template. 19. Способ по п.15, в котором при генерировании внутри документа сложных типов, выбираемых из группы, состоящей из массива данных, рекурсии и сложного типа, содержащегося внутри другого сложного типа, состояние обработки поддерживают с использованием стека.19. The method according to clause 15, in which when generating complex types inside a document selected from the group consisting of an array of data, recursion and a complex type contained within another complex type, the processing state is maintained using the stack. 20. Способ по п.19, в котором состояние стека поддерживают путем выполнения из компилированного шаблона обратных вызовов, адресованных интерфейсу преобразования, для указания начала и конца элементов сложных типов.20. The method according to claim 19, in which the state of the stack is maintained by executing callbacks addressed to the conversion interface from the compiled template to indicate the beginning and end of elements of complex types. 21. Способ по п.15, в котором для определения количества циклов, выполняемых шаблоном на выбранных участках документа, вызывают метод getElementRepetitions.21. The method according to clause 15, in which the getElementRepetitions method is called to determine the number of cycles performed by the template on selected sections of the document. 22. Способ по п.15, в котором элементы структурированного языка представляют собой конструкции языка XML (расширяемая спецификация языка), а для создания шаблона используют технологию JavaServer Pages (JSP).22. The method according to clause 15, in which the elements of a structured language are constructions of the XML language (extensible language specification), and to create a template using JavaServer Pages (JSP) technology.
RU2003137567/09A 2001-06-07 2001-12-28 System and method for mutual transformation of program objects and documents based on elements of structured language RU2287181C2 (en)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
CA2,349,905 2001-06-07
CA002349905A CA2349905A1 (en) 2001-06-07 2001-06-07 System and method of mapping between software objects and structured language element based documents

Publications (2)

Publication Number Publication Date
RU2003137567A RU2003137567A (en) 2005-05-27
RU2287181C2 true RU2287181C2 (en) 2006-11-10

Family

ID=4169222

Family Applications (1)

Application Number Title Priority Date Filing Date
RU2003137567/09A RU2287181C2 (en) 2001-06-07 2001-12-28 System and method for mutual transformation of program objects and documents based on elements of structured language

Country Status (11)

Country Link
EP (1) EP1399841A1 (en)
JP (1) JP2004530225A (en)
KR (1) KR100583517B1 (en)
CN (1) CN1313953C (en)
CA (1) CA2349905A1 (en)
CZ (1) CZ20033330A3 (en)
HU (1) HUP0400135A2 (en)
PL (1) PL367225A1 (en)
RU (1) RU2287181C2 (en)
TW (1) TW573278B (en)
WO (1) WO2002101579A1 (en)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2479016C2 (en) * 2007-10-11 2013-04-10 Майкрософт Корпорейшн General model editing system
RU2520344C2 (en) * 2008-10-15 2014-06-20 Майкрософт Корпорейшн Caching runtime generated code
RU2527201C1 (en) * 2013-01-24 2014-08-27 Общество с ограниченной ответственностью "Системное моделирование и анализ" Data conversion method, data conversion device and data conversion system
RU2571512C2 (en) * 2009-03-04 2015-12-20 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Content conversion on computer

Families Citing this family (36)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2003091419A (en) * 2001-09-19 2003-03-28 Just Syst Corp Information processor and its program
US7861250B2 (en) 2003-04-25 2010-12-28 Microsoft Corporation Runtime polymorphism
US7194485B2 (en) 2003-11-21 2007-03-20 International Business Machines Corporation Mapping XML schema components to qualified java components
US7418456B2 (en) 2004-01-16 2008-08-26 International Business Machines Corporation Method for defining a metadata schema to facilitate passing data between an extensible markup language document and a hierarchical database
US7212410B2 (en) 2004-01-16 2007-05-01 Finisar Corporation Actuator for small form-factor pluggable transceiver
US7290012B2 (en) 2004-01-16 2007-10-30 International Business Machines Corporation Apparatus, system, and method for passing data between an extensible markup language document and a hierarchical database
US7120864B2 (en) 2004-01-27 2006-10-10 International Business Machines Corporation Eliminating superfluous namespace declarations and undeclaring default namespaces in XML serialization processing
CN1306400C (en) * 2004-05-20 2007-03-21 北京大学 Binary system software member and its manufacturing method
CN100336023C (en) * 2004-08-24 2007-09-05 英业达股份有限公司 Method for realizing software call through keyword associated mechanism
KR100653610B1 (en) 2004-09-15 2006-12-04 (주)웹플러스 On-line flash editing system with reinforced function of editing navigation bar
US7694284B2 (en) * 2004-11-30 2010-04-06 International Business Machines Corporation Shareable, bidirectional mechanism for conversion between object model and XML
US20060123345A1 (en) * 2004-12-06 2006-06-08 International Business Machines Corporation Platform-independent markup language-based gui format
US7904417B2 (en) 2006-02-27 2011-03-08 Microsoft Corporation Recursive metadata templating
KR100836736B1 (en) * 2006-09-27 2008-06-10 한국전자통신연구원 Apparatus for Parser Framework using Markup Language and Method thereof
US8578350B2 (en) * 2006-11-30 2013-11-05 Ncr Corporation System and method for interpreting a specification language file to implement a business system
US8381093B2 (en) 2006-12-06 2013-02-19 Microsoft Corporation Editing web pages via a web browser
CN101355560B (en) * 2008-09-12 2011-12-14 深圳市联软科技有限公司 Method and system for transmitting data
JP5249092B2 (en) * 2009-03-09 2013-07-31 Necシステムテクノロジー株式会社 Information processing apparatus, multidimensional array expansion processing method, and program
US20100235806A1 (en) * 2009-03-13 2010-09-16 Microsoft Corporation Rich Web Site Authoring And Design
US10089119B2 (en) 2009-12-18 2018-10-02 Microsoft Technology Licensing, Llc API namespace virtualization
CN101826113A (en) * 2010-05-14 2010-09-08 珠海世纪鼎利通信科技股份有限公司 High-efficiency and unified method for storing wireless measurement data
US8776094B2 (en) 2011-08-11 2014-07-08 Microsoft Corporation Runtime system
US8695021B2 (en) 2011-08-31 2014-04-08 Microsoft Corporation Projecting native application programming interfaces of an operating system into other programming languages
KR101535703B1 (en) 2012-09-28 2015-07-09 삼성에스디에스 주식회사 Apparatus and method for converting Value Object
US9075618B2 (en) * 2012-11-02 2015-07-07 Microsoft Technology Licensing, Llc Cross-platform data visualizations using common descriptions
KR102095703B1 (en) * 2013-06-20 2020-04-01 에스케이플래닛 주식회사 An apparatus, method and recording medium for Markup parsing
US10635504B2 (en) 2014-10-16 2020-04-28 Microsoft Technology Licensing, Llc API versioning independent of product releases
CN104636265B (en) * 2015-01-21 2016-04-27 广东电网有限责任公司电力科学研究院 A kind of access method of efficient memory model tissue of CIMXML document
CN106407679B (en) * 2016-09-13 2019-03-26 上海市徐汇区中心医院 Mobile interchange cross-platform cross equipment remote diagnosis system
KR102255806B1 (en) * 2017-07-03 2021-05-26 (주)더리스 Integrated management method and system of online shopping mall based on API
CN108519964B (en) * 2018-03-09 2022-03-04 中国工程物理研究院计算机应用研究所 Method for converting XML Schema document into Java code
CN110795169B (en) * 2018-08-02 2022-11-11 武汉斗鱼网络科技有限公司 Method and related device for acquiring data
CN110795168B (en) * 2018-08-02 2022-11-11 武汉斗鱼网络科技有限公司 Method for acquiring data and related device
CN113505269B (en) * 2021-07-02 2024-03-29 卡斯柯信号(成都)有限公司 Binary file detection method and device based on XML
CN113742008B (en) * 2021-09-13 2024-04-02 挂号网(杭州)科技有限公司 Interface calling method and device, electronic equipment and storage medium
JP7315253B2 (en) * 2021-09-29 2023-07-26 株式会社スカイディスク System, server and method

Family Cites Families (6)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5926189A (en) * 1996-03-29 1999-07-20 Apple Computer, Inc. Method and apparatus for typographic glyph construction including a glyph server
US6343265B1 (en) * 1998-07-28 2002-01-29 International Business Machines Corporation System and method for mapping a design model to a common repository with context preservation
US6226675B1 (en) * 1998-10-16 2001-05-01 Commerce One, Inc. Participant server which process documents for commerce in trading partner networks
US6125391A (en) * 1998-10-16 2000-09-26 Commerce One, Inc. Market makers using documents for commerce in trading partner networks
AU778101B2 (en) * 1999-06-14 2004-11-18 Integral Development Corporation System and method for conducting web-based financial transactions in capital markets
US6327628B1 (en) * 2000-05-19 2001-12-04 Epicentric, Inc. Portal server that provides a customizable user Interface for access to computer networks

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
RU2479016C2 (en) * 2007-10-11 2013-04-10 Майкрософт Корпорейшн General model editing system
RU2520344C2 (en) * 2008-10-15 2014-06-20 Майкрософт Корпорейшн Caching runtime generated code
US9250938B2 (en) 2008-10-15 2016-02-02 Microsoft Technology Licensing, Llc Caching runtime generated code
RU2571512C2 (en) * 2009-03-04 2015-12-20 МАЙКРОСОФТ ТЕКНОЛОДЖИ ЛАЙСЕНСИНГ, ЭлЭлСи Content conversion on computer
RU2527201C1 (en) * 2013-01-24 2014-08-27 Общество с ограниченной ответственностью "Системное моделирование и анализ" Data conversion method, data conversion device and data conversion system

Also Published As

Publication number Publication date
EP1399841A1 (en) 2004-03-24
PL367225A1 (en) 2005-02-21
HUP0400135A2 (en) 2004-08-30
CN1313953C (en) 2007-05-02
CZ20033330A3 (en) 2004-03-17
KR20040007545A (en) 2004-01-24
CA2349905A1 (en) 2002-12-07
TW573278B (en) 2004-01-21
RU2003137567A (en) 2005-05-27
JP2004530225A (en) 2004-09-30
WO2002101579A1 (en) 2002-12-19
CN1513145A (en) 2004-07-14
KR100583517B1 (en) 2006-05-24

Similar Documents

Publication Publication Date Title
RU2287181C2 (en) System and method for mutual transformation of program objects and documents based on elements of structured language
US20040168124A1 (en) System and method of mapping between software objects &amp; structured language element-based documents
US8126901B2 (en) Method and apparatus for generating a dynamic web page
US6981212B1 (en) Extensible markup language (XML) server pages having custom document object model (DOM) tags
US7233956B2 (en) Method and apparatus for data migration between databases
US20040034830A1 (en) XML streaming transformer
US20020143816A1 (en) Method and system for using a generalized execution engine to transform a document written in a markup-based declarative template language into specified output formats
US20070028164A1 (en) Computer readable storage medium and document processing method
Fisher et al. The next 700 data description languages
Meijer et al. Haskell server pages-functional programming and the battle for the middle tier
US7890855B2 (en) Method and computer system for separating and processing layout information and data of a document
US20050234924A1 (en) Automated patching of code for schema derived classes
US8650536B2 (en) Modular server architecture
Simeoni et al. Language bindings to XML
Fan et al. Composable XML integration grammars
KR20020017669A (en) XML-based application providing system and XML-based application recorded in computer-readable media
Leung Professional XML Development with Apache Tools: Xerces, Xalan, FOP, Cocoon, Axis, Xindice
Gapeyev et al. Statically typed document transformation: An Xtatic experience
Kirchner et al. Xemantics: a rewriting calculus-based semantics of XSLT
Trancón y Widemann et al. Automatic construction of XML-based tools seen as meta-programming
Yafi et al. Syntax Recovery for Uniface as a Domain Specific Language
Sarang Pro Apache XML
Marinos et al. Towards an XML-based user interface for electronic health record
Badros et al. The Extensible Templating Language: An XML-based Restricted Markup-Generating Laguage.
Rasmussen et al. A case for new MPI Fortran bindings

Legal Events

Date Code Title Description
MM4A The patent is invalid due to non-payment of fees

Effective date: 20081229