KR102111152B1 - 컴포넌트-기반 소프트웨어 시스템 및 개발 방법 - Google Patents

컴포넌트-기반 소프트웨어 시스템 및 개발 방법 Download PDF

Info

Publication number
KR102111152B1
KR102111152B1 KR1020187004507A KR20187004507A KR102111152B1 KR 102111152 B1 KR102111152 B1 KR 102111152B1 KR 1020187004507 A KR1020187004507 A KR 1020187004507A KR 20187004507 A KR20187004507 A KR 20187004507A KR 102111152 B1 KR102111152 B1 KR 102111152B1
Authority
KR
South Korea
Prior art keywords
key
input
data
name
cgdm
Prior art date
Application number
KR1020187004507A
Other languages
English (en)
Other versions
KR20180063043A (ko
Inventor
이 영
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 KR20180063043A publication Critical patent/KR20180063043A/ko
Application granted granted Critical
Publication of KR102111152B1 publication Critical patent/KR102111152B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/31Programming languages or programming paradigms
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • G06F8/36Software reuse
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/40Transformation of program code
    • G06F8/41Compilation
    • G06F8/43Checking; Contextual analysis
    • G06F8/433Dependency analysis; Data or control flow analysis

Landscapes

  • Engineering & Computer Science (AREA)
  • Software Systems (AREA)
  • General Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Computing Systems (AREA)
  • Stored Programmes (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Devices For Executing Special Programs (AREA)

Abstract

서비스를 수행하도록 컴퓨터 프로그램을 조립하는 방법이 개시되며, 이러한 방법은, 서비스의 입력/출력(I/O) 요건을 복수의 I/O 키-값 쌍들을 포함하는 각각의 데이터 메시지로 변환하는 것; 데이터 메시지를 입력 인수로서 수신하도록 프로그램의 부분 함수(PF)를 구성하는 것; 연산 함수(CF)의 인수들에 맵핑됨과 아울러 I/O 키-값 쌍들에 맵핑되는 키-쌍들을 포함하는 변수 매칭 구조(VMS) 세트(VMSS)를 발생시키는 것; 그리고 VMSS를 사용해 연산 함수(CF)를 호출하도록 PF를 구성하는 것을 포함하고, 여기서 CF는 서비스와 관련된 동작을 수행하도록 구성된다.

Description

컴포넌트-기반 소프트웨어 시스템 및 개발 방법
관련 출원에 대한 상호-참조
본 특허 출원은 2015년 7월 16일자로 출원된 미국 가특허 출원번호 제62/193,151호에 대해 우선권을 주장한다.
절차적 프로그래밍(procedural programming)은, 절차적 호출(procedural call)의 개념에 기반하여, 구조화된 프로그래밍(structured programming)으로부터 파생된 하나의 프로그래밍 패러다임(programming paradigm)이다. 루틴(routines), 서브루틴(subroutines), 또는 함수(functions)로서 또한 알려진 프로시저(procedures)는 수행될 일련의 연산 단계(computational step)들을 포함한다. 절차적 프로그래밍 언어의 예는 C, 포트란(Fortran), 및 파스칼(Pascal)을 포함한다.
객체-지향 프로그래밍(object-oriented programming)에서, 중점을 두고 있는 것은 프로그래밍 태스크(programming tasks)를 인터페이스(interfaces)를 사용해 동작(behaviors)(메소드(methods)) 및 데이터(멤버(members) 또는 속성(attributes))를 노출시키는 객체들로 세분화(breaking down)시키는 것이다. 절차적 프로그래밍은 데이터 구조에 관해 동작하기 위해 프로시저를 사용하지만, 객체-지향 프로그래밍은 이 두 가지를 함께 묶어버리고, 이에 따라 클래스(class)의 인스턴스(instance)인 "객체(object)"가 "자기 자신"의 데이터 구조에 관해 동작한다.
하지만, 비전문가(layperson)가 절차적 프로그래밍 또는 객체-지향 프로그래밍을 사용해 임의의 작동하는 컴퓨터 프로그램을 작성(write)하는 것은 어려울 수 있다.
조립 라인(assembly line)은 미-완성된 조립(semi-finished assembly)이 하나의 작업장(workstation)으로부터 또 하나의 다른 작업장으로 이동됨에 따라 상호교환가능한 부분들이 부가되는 제조 공정인데, 이러한 작업장에서 상호교환가능한 부분들은 최종 조립이 생성될 때까지 순차적으로 부가된다. 조립 라인의 사용으로 인해, 완성된 제품은 더 적은 노동력으로 더 빠르게 조립될 수 있다.
따라서, 소프트웨어가 조립 라인 방식으로 구축될 수 있도록 하는 컴포넌트(component) 또는 부분(part) 기반 메커니즘에 대한 필요성이 존재한다.
본 발명의 예시적 실시예에 따르면, 서비스(service)를 수행하도록 컴퓨터 코드(computer code)를 조립(assembling)하는 방법이 제공된다. 이러한 방법은, 서비스의 입력/출력(Input/Output, I/O) 요건을 복수의 I/O 키-값 쌍(I/O key-value pair)들을 포함하는 각각의 데이터 메시지(data message)로 변환(converting)하는 것; 데이터 메시지를 입력 인수(input argument)로서 수신하도록 프로그램의 부분 함수(Part Function, PF)를 구성하는 것; 연산 함수(Computation Function, CF)의 인수들에 맵핑(mapping)됨과 아울러 I/O 키-값 쌍들에 맵핑되는 키-쌍(key-pair)들을 포함하는 변수 매칭 구조(Variable Matching Structure, VMS) 세트(set)(Variable Matching Structure Set, VMSS)를 발생시키는 것; 그리고 VMSS를 사용해 연산 함수(CF)를 호출(call)하도록 PF를 구성하는 것을 포함하고, 여기서 CF는 서비스와 관련된 동작을 수행하도록 구성된다.
본 발명의 예시적 실시예에 따르면, 서비스를 수행하도록 구성된 컴퓨터 프로그램을 실행시키는 방법이 제공된다. 컴퓨터 프로그램은 복수의 입력/출력(I/O) 키-값 쌍들을 포함하는 데이터 메시지를 입력 인수로서 수신하도록 구성된 부분 함수(PF)를 포함한다. 본 방법은, 복수의 요소(element)들을 포함하는 데이터 구조를 데이터 메시지의 명칭을 사용해 검색(retrieving)하는 것(여기서, 각각의 요소는 명칭 및 변수 매칭 구조(VMS)를 포함함); 검색된 데이터 구조 내의 각각의 요소에 대해, 연산 함수(CF)를 검색하기 위해 요소의 명칭을 사용하는 것; 그리고 검색된 CF를 요소의 VMS 및 데이터 메시지를 사용해 호출하는 것을 포함한다.
본 발명의 예시적 실시예들은 첨부되는 도면들과 연계하여 다음의 설명으로부터 더 상세히 이해될 수 있는데, 도면에서,
도 1은 본 발명의 발명적 개념의 예시적 실시예에 따른 소프트웨어를 조립하는 방법을 보여주고;
도 2는 본 방법을 실행시키기 위해 사용될 수 있는 예시적인 컴퓨터 시스템을 나타내고;
도 3은 본 발명의 발명적 개념의 예시적 실시예에 따른 소프트웨어의 부분 함수를 구성하는 방법을 예시하고;
도 4는 본 발명의 발명적 개념의 예시적 실시예에 따른 소프트웨어의 부분 함수를 실행시키는 방법을 예시하고;
도 5는 본 발명의 발명적 개념의 예시적 실시예에 따른 소프트웨어를 조립하는 방법을 예시하고;
도 6a는 본 발명의 발명적 개념의 실시예들에서 사용될 수 있는 예시적인 데이터 메시지를 나타내고;
도 6b는 본 발명의 발명적 개념의 실시예들에서 사용될 수 있는 예시적인 변수 매칭 구조 세트를 나타내고;
도 6c는 예시적인 연산 함수들의 입력 및 출력 인수들의 예들을 나타내고;
도 7은 본 발명의 발명적 개념의 예시적인 실시예에 따른 조립된 소프트웨어의 부분 함수의 실행을 보여주는 흐름도를 예시하고;
도 8은 본 발명의 발명적 개념의 예시적인 실시예에 따른 사용자로 하여금 소프트웨어를 조립할 수 있게 하는 방법을 예시하고;
도 9는 본 발명의 발명적 개념의 예시적인 실시예에 따른 부분 함수를 실행시키는 방법을 예시하고; 그리고
도 10은 본 발명의 발명적 개념의 예시적인 실시예에 따른 데이터 메시지가 적용됨에 응답하여 실행되는 부분 함수들의 예시적인 시퀀스를 나타낸다.
첨부되는 도면들을 참조하여 본 발명의 발명적 개념이 더 상세히 설명될 것이고, 이러한 설명에서 본 개시내용의 예시적인 실시예들이 제시된다. 도면 전체에 걸쳐, 동일한 또는 유사한 컴포넌트들을 나타내기 위해 동일한 또는 유사한 참조 번호들이 사용된다. 하지만, 본 발명의 발명적 개념은 다양한 방식으로 구현될 수 있고, 따라서 본 명세서에서 개시되는 실시예들로 한정되는 것으로 해석돼서는 안 된다. 반면, 이러한 실시예들은 본 발명의 기술분야에서 숙련된 사람들에게 본 개시내용의 범위를 전달하도록 본 개시내용의 충분한 이해 및 완벽한 이해를 위해 제공된다.
컴포넌트-기반 소프트웨어 시스템 및 개발 방법이 본 명세서에서 설명된다. 후속되는 설명에서는, 본 발명의 더 완벽한 이해를 제공하기 위해서 다수의 특정 세부사항들이 제시된다. 하지만, 본 발명이 이러한 특정 세부사항들 없이 실시될 수 있음은 본 발명의 기술분야에서 숙련된 사람에게 명백할 것이다. 다른 사례들에서, 잘-알려진 특징들은 본 발명을 모호하게 하는 것을 피하기 위해 상세히 설명되지 않았다.
본 명세서에서 언급되는 컴퓨터 코드 장치(예를 들어, 방법, 클래스, 라이브러리)들은 데이터 저장 매체 상에 저장될 수 있다. 본 명세서에서 사용되는 바와 같은 용어 "데이터 저장 매체(data storage medium)"는, 콤팩트 디스크, 하드 디스크, 플로피 디스크, 테이프, 광-자기 디스크, PROM(EPROM, EEPROM, 플래시 EPROM, 등), DRAM, SRAM, 등과 같은 모든 컴퓨터-판독가능 매체들을 나타낸다.
도 1은 본 발명의 발명적 개념의 예시적인 실시예에 따른 소프트웨어를 조립하는 방법을 보여주는 하이-레벨 도면이다.
본 방법은 사용자로 하여금 연산 함수(CF)를 코딩(coding)할 수 있게 하는 것(S101)을 포함한다. 예를 들어, 텍스트 필드(text field)를 포함하는 CF 그래픽 사용자 인터페이스(CF Graphical User Interface)(예컨대, CF-GUI)가 사용자로 하여금 CF에 대한 코드를 입력할 수 있게 하는 컴퓨터 프로그램에 의해 제공될 수 있다. 예를 들어, CF-GUI는 사용자에 의해 선택될 때 프로그램에게 사용자가 현재 CF의 코딩을 완료했다고 알려주는 제1 버튼을 포함할 수 있다. 예를 들어, CF는 계산을 수행하도록 코딩될 수 있거나, 데이터베이스에 질의(query)하도록 코딩될 수 있거나, 또는 웹페이지 상에 그래픽 또는 텍스트를 제시하도록 코딩될 수 있다. 예를 들어, 계산은 질의에 의해 반환된 결과들에 관한 수학적 계산을 수행하는데 사용될 수 있다. 일 실시예에서, 각각의 CF는 사용자에 의해 고유한 명칭을 부여받고, 그리고 (본 명세서에서 CF 입력 파라미터들로서 지칭되는) 하나 이상의 입력 파라미터들을 수신하도록 코딩됨과 아울러 (본 명세서에서 CF 출력 파라미터로서 지칭되는) 출력 파라미터를 반환하도록 코딩된다. 예를 들어, CF 입력 및 출력 파라미터들은 정수(integers), 부동소수점(floats), 스트링(strings), 어레이(arrays), 포인터(pointers), 등일 수 있다.
그 다음에 본 방법은 사용자가 CF들을 코딩하는 것을 끝냈는지 여부를 결정하는 것(S102)을 포함한다. 예를 들어, 제1 버튼의 선택은 사용자가 또 하나의 다른 CF를 생성하려고 함을 표시할 수 있다. 예를 들어, CF-GUI는 사용자에 의해 선택될 때 프로그램에게 사용자가 CF들(50)을 생성하는 것을 끝냈다고 알려주는 제2 버튼을 포함할 수 있다. 완료된 CF들은 CF 데이터베이스(60)에 저장될 수 있고, 이에 따라 이들은 다른 코더(coder)들에게 이용가능하게 된다.
그 다음에 본 방법은 사용자로 하여금 부분 함수(PF)를 이용가능한 CF들 중 하나 또는 그 이상의 CF들을 사용해 코딩할 수 있게 하는 것(S103)을 포함한다. 예를 들어, 프로그램은 GUI 내에서 CF 데이터베이스(60)에 저장된 이용가능한 CF들의 선택가능한 목록(list)을 가진 제2 GUI(예컨대, PF-GUI)를 제시할 수 있고,
어떤 CF들이 선택되었는지를 보여줌과 아울러 PF 내에서 이들의 실행 순서를 보여주는 페인(pane)을 제시할 수 있다. 예를 들어, 사용자는 대응하는 PF에 대해 대응하는 CF의 인스턴스가 필요할 때마다 이용가능한 CF들 중 하나를 선택할 수 있고, 그리고 선택된 인스턴스를 사용자가 해당 CF 인스턴스가 실행되기를 원하는 순서에서 페인에 삽입할 수 있다.
그 다음에 본 방법은 프로그램이 사용자가 언제 모든 PF들을 생성하는 것을 끝냈는지를 결정하는 것(S104)을 포함한다. 예를 들어, PF-GUI는 사용자에 의해 선택될 때 사용자가 모든 PF들(70)을 생성하는 것을 끝냈다고 표시하는 그래픽 버튼을 포함할 수 있다. PF들(70)은 PF 데이터베이스(80)에 저장될 수 있고, 이에 따라 이들은 다른 코더들에게 이용가능하게 된다.
그 다음에 본 방법은 프로그램이 사용자로 하여금 PF 데이터베이스(80)에 저장된 이용가능한 PF들(70) 중 하나 또는 그 이상의 PF들을 사용해 소프트웨어를 생성할 수 있게 하는 것(S105)을 포함한다. 예를 들어, 컴퓨터 프로그램은 사용자로 하여금 연결 코드(connecting code)를 입력할 수 있도록 하는 텍스트 필드를 제시함과 아울러 이용가능한 PF들(70)의 선택가능한 목록을 제시하는 제3 GUI를 개시(launch)시키는데 사용될 수 있다. 예를 들어, 사용자는 목록으로부터 PF를 선택하여 대응하는 PF를 컴퓨터 프로그램의 연결 코드 내에서 특정 위치에 삽입할 수 있다. 일 실시예에서, 컴퓨터 프로그램은 해석기(interpreter)에 의해 해석되는 형식(form)을 가질 수 있다.
도 2는 도 1의 방법을 구현하기 위해 사용될 수 있는 예시적인 컴퓨터 시스템(1000)을 나타낸다. 도 2를 참조하면, 컴퓨터 시스템(1000)은, 예를 들어, 중앙 프로세싱 유닛(Central Processing Unit, CPU)(1001), 랜덤 액세스 메모리(Random Access Memory, RAM)(1004), 프린터 인터페이스(printer interface)(1010), 디스플레이 유닛(display unit)(1011), 로컬 영역 네트워크(160)(Local Area Network, LAN) 데이터 전송 제어기(data transmission controller)(1005), LAN 인터페이스(1006), 네트워크 제어기(1003), 내부 버스(internal bus)(1002), 및 하나 이상의 입력 장치들(1009), 예컨대, 키보드, 마우스 등을 포함할 수 있다. 도시된 바와 같이, 시스템(1000)은 링크(link)(1007)를 통해 데이터 저장 장치, 예를 들어, 하드 디스크(1008)에 연결될 수 있다. 앞서 설명된 GUI들은 디스플레이 유닛(1011) 상에 제시될 수 있다. 앞서-설명된 CF들(50), PF들(70), 프로그램, 및 조립된 소프트웨어는 메모리(1004) 및/또는 하드 디스크(1008)에 저장될 수 있다.
도 3은 PF를 코딩하기 위해 도 1의 단계(S103)를 구현하는데 사용될 수 있는 본 발명의 예시적 실시예에 따른 방법을 나타낸다. 도 3을 참조하면, 본 방법은 연산 목표 데이터 메시지(Computation Goal Data Message, CGDM)의 입력을 수신하도록 부분 함수를 구성하는 것(S301)을 포함한다.
예시적인 실시예에서, CGDM는 ⅰ) 입력 및 출력 부분들을 갖고, ⅱ) 명칭-값 형식(예컨대, 어떤 이후의 연산에서 변수에 할당될 모든 값들, 값들의 하위구조(substructure)들은 명칭을 가져야 함)을 가지며, 그리고 ⅲ) 그 구조는 어떤 구문 규칙들(syntax rules)(예컨대, HTML, XML, 또는 JSON)을 따른다. 두 개의 CGDM들은, 만약 ⅰ) 이들의 입력 및 출력 부분들이 모두 동일한 구조들을 갖는다면, 그리고 ⅱ) 구조들 내의 모든 명칭들이 동일하다면, 동일하다. CGDM은 PF의 인수로서 사용된다. 임의의 PF는 단지 하나의 인수만을 가질 수 있다. PF는 하나 또는 하나보다 많은 CGDM들을 프로세싱할 수 있다. 각각의 CGDM은 그 대응하는 VMSS를 갖는다. VMSS는 PF에게 CGDM의 연산 목표를 달성하는 방법을 지시한다.
모든 PF들은 동일한 인터페이스를 갖는다. 예를 들어, 각각의 부분 함수는 부분 함수의 인수 또는 호출 파라미터(invocation parameter)로서 지칭될 수 있는 CGDM으로 호출되도록 구성된다. CGDM은 입력 파라미터들 X(예컨대, Input: X), 그리고 출력 파라미터들 Y(예컨대, Output:Y)를 포함하고, 여기서 X 및 Y는 명칭(키)-값 형식을 갖는 임의의 데이터 구조일 수 있다. X 부분에서, 명칭들은 값들을 갖고, Y 부분의 값들은 부분 함수에 의해 채워질 공백(blank)이다. 두 개의 CGDM들은, 만약 이들의 입력 부분들과 출력 부분들이 모두 동일한 구조들을 갖는다면, 그리고 구조들 내의 모든 명칭(키)들이 동일하다면, 동일하다. 각각의 CGDM은 고유한 명칭을 갖는다. CGDM의 입력 부분 세트의 모든 명칭(키)들의 값들을 갖는 CGDM은 CGDM의 인스턴스로 지칭된다. PF는 값들이 채워진 CGDM의 출력 부분과 동일한 데이터 구조를 반환한다. PF는 임의의 CGDM을 인수로서 수용한다.
PF는 하나 또는 그 이상의 연산 함수(CF)들을 포함한다. 임의의 함수가 CF일 수 있다. PF는 임의의 CGDM을 인수로서 수용할 수 있는데, 왜냐하면 PF가 CF들을 어떻게 실행시킬 것인지는 단지 CGDM에 의해서만 결정되는 것이 아니라 변수 매칭 구조(VMS)로 지칭되는 데이터 구조에 의해서도 또한 결정되기 때문이다. PF는 CF 호출자(CF caller)를 통해 CF를 실행시킨다. CF 호출자는 CGDM, VMS 및 CF결과들 구조를 인수들로서 수용한다. 이것은 호출할 PF에 대해 균일한 인터페이스(uniform interface)를 제공한다. CF 호출자는, ⅰ) CGDM 및 VMS에 따라 호출 및 CF의 인수들을 준비하고, ⅱ) CGDM 및 VMS에 따라 CGDM의 출력 부분을 설정하고, 그리고 ⅲ) 이후의 CF 실행에 의한 가능한 사용을 위해 결과를 CF결과들(CFResults)에 저장한다.
본 발명의 일 실시예에서는, CF 함수들의 두 가지 타입들이 존재하는데, ⅰ) 완전한 CF(Complete CF) 및 ⅱ) 불완전한 CF(Partial CF)가 존재한다. 완전한 CF는 PF를 호출하지 않으며, 완벽히 충족된 인터페이스 요건을 갖는다. 불완전 CF는 PF를 호출하며, 부분적으로 충족된 인터페이스 요건을 갖는다. 인터페이스 요건이 얼마나 충족되는지는 어떤 PF가 호출되는지 그리고 PF가 무엇을 하도록 구성되는지에 따라 달라진다.
CF가 PF를 호출하는 경우, CF는 CGDM을 준비하고, 인수로서 CGDM을 호출된 PF에 전달한다. CGDM 내의 값들의 명명(naming)은 일관된 명명 규칙(Consistent Naming Rule)을 따를 수 있다. CF가 호출하는 PF들의 명칭들, 그리고 CF가 생성하는 CGDM들의 명칭들은 CF의 VMS들에서 특정될 수 있다.
VMSS들은 CF들을 연결하기 위한 제어를 제공하고, 불완전한 CF는 PF들을 연결하기 위한 제어를 제공한다. 소프트웨어는 주어진 설계에 따라 PF들 및 CF들을 연결하기 위해 VMS 및 VMSS를 조작(manipulating)함으로써 형성될 수 있다.
하나의 CGDM에 대해, 우리는 CGDM의 연산 목표를 달성하기 위한 (하나보다 많은 PF를 포함할 수 있는) 모든 PF들 및 CF들의 실행 시퀀스(execution sequence)를 CGDM의 연산 구조라고 지칭한다.
도 6a는 부분 함수에 인수로서 전달될 수 있는 CGDM의 예이다. 이러한 예에서, CGDM은 자바스크립트 객체 표기법(JavaScript Object Notation, JSON) 포맷(format)을 갖는다. CGDM은 하나 이상의 입력 키-값 쌍들 및 출력 키-값 쌍을 포함한다. CGDM은 입력 및 출력 키-값 쌍들을 추출하기 위해 분석기(parser) 또는 해석기에 의해 사용될 수 있는 식별자(identifier)들을 포함할 수 있다.
도 6a에서 보여지는 예에서, CGDM 내의 입력 파라미터 식별자는 'Input:'로 표기되어 있고, 그리고 출력 파라미터 식별자는 'Output:'로 표기되어 있다. 예를 들어, CGDM을 분석하는 분석기가 'Input:'의 식별자를 인식한 이후, 분석기는 다음에 있는 열린 중괄호(open brace) '{'와 닫힌 중괄호(closed brace) '}' 사이에 위치하는 다음 요소들이 키-값 입력 파라미터 쌍들이라고 추정(assume)할 수 있다. 예를 들어, CGDM을 분석하는 분석기가 'Output:'의 식별자를 인식한 이후, 분석기는 다음에 있는 열린 중괄호 '{'와 닫힌 중괄호 '}' 사이에 위치하는 다음 요소들이 키-값 출력 파라미터 쌍들이라고 추정할 수 있다. 예를 들어, 키-값 쌍들은 세미콜론(semicolon) ';'에 의해 분리될 수 있고, 주어진 키-값 쌍의 키와 값은 콜론(colon) ':'에 의해 분리될 수 있다.
도 6a는 입력 파라미터 키-값 쌍들을 표시하기 위해 표현 'Input:'의 사용을 보여주고, 출력 파라미터 키-값 쌍들을 표시하기 위해 표현 'Output:'의 사용을 보여주고, 키-값 쌍들의 시작을 표시하기 위해 표현 '{'의 사용을 보여주고, 키-값 쌍들의 끝을 표시하기 위해 표현 '}'의 사용을 보여주고, 그리고 분석기로 하여금 키와 값을 구분할 수 있게 하기 위해 표현 ':'의 사용을 보여주고 있지만, 본 발명은 이러한 것으로 한정되지 않는다. 예를 들어, 이러한 표현들은 구현자가 원하는 대로 다른 용어들 또는 심볼들로 변경될 수 있다.
다시 도 3을 참조하면, 본 방법은 사용자가 부분 함수로 하여금 연산 함수(CF)의 새로운 인스턴스를 호출하도록 하는 것을 원하는지 여부를 결정하는 것(S302)을 포함한다. 새로운 인스턴스가 의미하는 것은, 이것이 특정 CF가 삽입을 위해 요청된 것이 처음인 경우를 의미하거나, 또는 요청된 삽입이 CF(예컨대, CF2)의 인스턴스로 하여금 다른 CF(예컨대, CF1) 이후에 삽입되게 하는 것을 의미한다. 용이한 설명을 위해, 도 6b에서 보여지는 바와 같은 제1 연산 함수(CF1) 및 제2 연산 함수(CF2)만이 이용가능하다고 가정된다. 만약 사용자가 CF의 새로운 인스턴스를 요청했다면, 본 방법은 특정 CF를 식별시키기 위해 레이블(label)을 삽입한다(S303). 예를 들어, 사용자가 제1 연산 함수(CF1)가 사용될 것을 요청한 경우, 이러한 요청 때문에 본 방법은 제1 연산 함수(CF1)가 호출돼야 함을 식별시키기 위해 변수 매칭 구조 시퀀스(Variable Matching Structure Sequence, VMSS)에 'CF1'과 같은 레이블을 삽입한다. VMSS가 완성된 경우, VMSS는 쌍들의 시퀀스를 포함할 것이고, 여기서 각각의 쌍은 주어진 CF(예컨대, CF1)의 명칭 및 VMS를 포함한다(예를 들어, CF명칭(CFName), VMS). 예를 들어, 완성된 VMSS는 쌍들: {{CF1, VMS1}, ..., {CFN, VMSN}}을 포함할 수 있고, 여기서 N은 1 또는 1보다 크다. VMSS는 CGDM과 관련되고, 그리고 VMSS 내의 모든 VMS들은 CGDM의 모든 명칭(키)들의 값들을 완전히 채운다. 즉, VMSS는 CGDM에 대한 연산 목표를 완수(fulfill)한다. VMSS는 PF에게 CGDM에 대한 연산 목표를 달성하는 방법을 지시한다.
그 다음에, 본 방법은 사용자로 하여금 CF 인스턴스의 입력 파라미터들을 CGDM 내의 입력 파라미터들에 맵핑시킴과 아울러 CF 인스턴스의 출력 파라미터들을 CGDM 내의 출력 파라미터를 출력하도록 맵핑시키는 변수 매칭 구조(VMS)를 구성할 수 있게 하는 것(S304)을 포함한다. VMS는 PF에게 하나의 CF를 실행시키는 방법을 지시한다.
예를 들어, 도 6b는 복수의 키 쌍들을 갖도록 제1 CF1(611)에 대해 구성되는 제1 VMS(601)의 예를 보여주며, 여기서 각각의 키 쌍은 세미콜론 ";"에 의해 분리된다. 예를 들어, 제1 VMS(601)의 제1 키 쌍 'a:x'에서의 제1 키 'a'는 제1 CF1(611)의 제1 입력 파라미터 'a'에 대응하고, 그리고 제1 키 쌍 'a:x'에서의 제2 키 'x'는 도 6a에서 보여지는 CGDM(600)의 제2 입력 파라미터 'x:2'에 대응한다. 예를 들어, 제1 VMS(601)의 제2 키 쌍 'b:y'에서의 제1 키 'b'는 제1 CF1(611)의 제2 입력 파라미터 'b'에 대응하고, 그리고 제2 키 쌍 'b:y'에서의 제2 키 'y'는 도 6a에서 보여지는 CGDM(600)의 제3 입력 파라미터 'y:3'에 대응한다. 예를 들어, 제1 VMS(601)의 제3 키 쌍 'c:z'에서의 제1 키 'c'는 제1 CF1(611)의 출력 파라미터 'c'에 대응하고, 그리고 제3 키 쌍 'c:z'에서의 제2 키 'z'는 도 6a에서 보여지는 CGDM(600)의 출력 파라미터 'z:NULL'에 대응한다. 도 6c는 CF들에 대한 호출들의 예들을 나타낸다. CF의 인수가 복합 타입(composite type)인 경우에, 만약 CF의 인수가 CGDM의 입력 부분에서 동일한 복합 타입에 맵핑된다면, 그리고 인수의 명칭이 C이고 동일한 타입의 명칭(CGDM의 입력 부분의 하위-구조)이 D라고 가정한다면, 맵핑은 'C:D'로서 특정될 수 있다. 만약 CF의 인수가 CGDM의 입력 부분에서 동일한 복합 타입에 맵핑되지 않는다면, 그리고 그 멤버(member)들이 CGDM의 입력 부분에서 분포되어 있는 명칭들에 맵핑된다면, 복합 타입의 각각의 멤버에 대한 맵핑이 특정될 필요가 있고, 복합 타입이 T이고 CGDM의 입력 부분에서의 명칭들이 d1, d2, ...라고 가정한다면, 맵핑은 'C, T('member1:d1', 'member2:d2'...)'로서 특정될 수 있다. 만약 C가 어레이 타입(array type)이라면, 맵핑은 'C: Array[d1,d2,...]'로서 특정될 수 있다.
그 다음에 본 방법은 구성된 VMS를 부분 함수(CF)와 관련된 VMSS에 삽입한다(S305). VMS는 분석기가 식별된 CF와 VMS가 관련되어 있음을 인식할 수 있도록 삽입된다. 예를 들어, 도 6b에서 레이블 'CF1' 아래에서 보여지는 제1 VMS(601)는 PF에 대해 구성된 VMS의 예인데, 이것은 VMSS에 삽입되어 있으며 제1 연산 함수(CF1)와 관련되어 있는 VMS의 예이다. 그 다음에 본 방법은 사용자가 끝냈는지 여부를 결정하는 것(S305)을 포함한다. 예를 들어, GUI는 연산 함수(CF)들을 선택하기 위해 그리고 사용자들이 연산 함수(CF)들을 입력하는 것을 끝낸 것을 표시하기 위해 사용자에 의해 사용될 수 있다. 만약 사용자가 또 하나의 다른 연산 함수(CF)를 선택한다면, 또는 이전에 선택된 연산 함수(CF)의 또 하나의 다른 인스턴스를 선택한다면, 본 방법은 단계(S302)로 진행한다. 예를 들어, 만약 사용자가 동일한 CF(예컨대, 다시 CF1)의 또 하나의 다른 인스턴스를 입력하게 된다면 그리고 CF에게 CGDM의 다른 파라미터들을 발송(send)하게 된다면, 본 방법은 단계(S304)로 진행하게 된다. 예를 들어, 이것은 결과적으로, 제1 연산 함수(CF)를 식별시키는 동일한 레이블(예컨대, CF1)에 속해 있는 제2 VMS(602)의 삽입이 일어나게 할 수 있다. 하지만, 만약 사용자가 새로운 연산 함수(예컨대, CF2(612))를 선택한다면, 이것은 결과적으로, 도 6b에서 보여지는 바와 같이, 제2 레이블(예컨대, CF2) 및 제 3 VMS(603)의 삽입이 일어나게 할 수 있다.
CGDM의 입력으로부터 값들을 취하는 것을 제외하고, CF의 인수는 또한 하나 또는 그 이상의 이전에 실행된 CF들의 결과들로부터 값을 취할 수 있다. 예를 들어, PF가 제1 CF를 실행시킨 경우, PF는 CF를 실행시킨 결과를 데이터 구조(예컨대, CF결과들 구조)에 저장할 수 있거나 또는 PF 내부에 있는 목록에 저장할 수 있으며, 이에 따라 만약 PF가 동일한 제1 CF 또는 제2 CF를 재-실행(re-execute)시킨다면, 결과는 어느 CF에게나 이용가능하게 되어 대응하는 CF는 필요한 경우 결과에 관해 동작할 수 있게 된다. 도 7에서 보여지는 바와 같이, PF(701)가 PF 호출을 통해 호출되는 경우, PF(701)는 CF호출자 함수를 통해 CF를 실행시킨다. CF호출자 함수는 복수의 이용가능한 CF호출자 함수들을 저장하고 있는 외부 저장 영역(702)(예컨대, CF호출자 저장소)으로부터 로딩(loading)될 수 있다. CF호출자 함수는 CGDM, CF와 관련된 VMSS(703), 및 CF결과들 구조(704)를 입력으로서 취한다. VMSS(703)는 외부 저장 영역(705)(예컨대, VMSS 저장소)으로부터 로딩될 수 있다. CF호출자 함수는 다음과 같은 것을 수행할 수 있다: 1) CF의 인수들을 선언하고, 그리고 VMSS(703), CGDM, 및 CF결과들 구조(704) 내의 CF결과들을 사용해 각각의 인수를 초기화하는 것; 2) 인수들로 CF를 실행시키는 것; 그리고 3) 결과들을 CF결과들 구조(704)에 부가하고 VMSS(703)에 따라 CGDM의 출력(예컨대, CGDM.출력)을 설정한다. 일 실시예에서, 각각의 CF는 관련된 CF호출자 함수를 갖고, 그리고 각각의 CF는 동일한 인터페이스를 갖는다. VMSS 저장소는 PF가 호출될 때 이용되는 모든 CGDM에 대한 모든 VMSS를 포함한다. CF호출 저장소는 PF가 포함하는 모든 CF들과 관련된 CF호출자 함수들을 포함한다.
도 4는 본 발명의 예시적 실시예에 따른 수신된 CGDM에 대해 PF 호출을 실행시키기 위한 방법을 예시한다. 본 방법은, CF 결과들 구조(704)를 클리어(clearing)하는 것(S401); VMSS 저장소(705)로부터 대응하는 VMSS(703)를 검색하기 위해 CGDM의 명칭을 사용하는 것(S402); VMSS(703) 내의 각각의 요소에 대해, CF호출자 저장소(702)로부터 CF호출자 함수를 검색하고 검색된 CF호출자 함수를 요소의 VMS 부분, CGDM, 그리고 CF 결과들 구조(704)로 호출하기 위해서 요소의 명칭 부분을 사용하는 것(S403); (값들로 현재 채워진) CGDM의 출력의 사본(copy)을 만드는 것(S404); 그리고 사본을 반환하는 것(S405)을 포함한다.
CF는 다른 것들(PF들)을 호출할 수 있다. 이것을 하기 위한 방법은 CGDM을 생성하는 것 그리고 생성된 CGDM을 인수로서 호출에 전달하는 것이다. 만약 CF가 CF에 의해 연산된 CGDM 내의 값을 CF에 의해 생성된 CGDM으로 전달한다면, CF는 CF에 의해 연산된 CGDM 내에서와 동일한 명칭을 사용해야 한다. 만약 CF가 CF 결과들 구조(704) 내의 값을 CF에 의해 생성된 CGDM으로 전달한다면, CF는 CF 결과들 구조(704) 내에서와 동일한 명칭을 사용해야 한다. 이것은 명칭 일관 규칙(Name Consistent Rule)으로 지칭된다. CF가 또 하나의 다른 PF를 호출하기 위해 CGDM을 생성하는 경우 CF는 명칭 일관 규칙을 따라야 한다.
모든 PF들은 동일한 인터페이스를 갖기 때문에, 상이한 PF들을 호출하는 것은 단지 명칭들에 의해서만 차이가 난다. PF 명칭 인수들이 CF가 호출하는 모든 PF들에 대해서 CF에 대해 부가될 수 있고, 그 다음에 CF가 호출하는 PF들이 어떤 것인지가 CF의 VMS에서 특정될 수 있다. 또한 CF에 의해 생성된 CGDM들의 명칭들이 VMS에서 특정될 수 있다. 따라서, CF가 어떤 PF들을 호출하는지 그리고 CF가 어떤 CGDM 명칭들을 사용하는지는 CF의 개발 이후 결정될 수 있다.
일 실시예에서, 모든 데이터 저장 파라미터들은 명칭(키)-값 형식을 갖는다. 데이터 저장 포맷은 CGDM과는 다른 구문 규칙들을 가질 수 있다.
데이터 저장소들 및 CGDM들에서의 명칭들은 상이한 사용자들에 의해 생성될 수 있고 상이한 시간에 생성될 수 있으며, 따라서 일관되지 않을 수 있다. 명칭-값들의 세트는, 만약 세트 내의 동일한 명칭들이 명명된 값들에 대해 동일한 의미론적 의미(semantic meaning)를 기술하고, 세트 내의 상이한 명칭들이 명명된 값들에 대해 상이한 의미론적 의미를 기술한다면, 일관적이라고 지칭된다. 일관된 명칭-값들의 세트는 명칭 공간(Name Space, NS)을 형성한다. PF 및 이것의 CF들은 하나의 NS에서 동작할 필요가 있다. 만약 CGDM들 및 데이터 저장소들이 하나의 NS 내에 있지 않다면, 이들을 하나의 NS 내로 변환하기 위해 CGDM들에 변환이 적용될 수 있다. 하나의 CGDM에 대해, 우리는 언급하는 것은, CGDM의 연산 목표를 달성하기 위한 모든 PF들 및 CF들의 실행 시퀀스이다.
도 5는 본 발명의 예시적 실시예에 따른 소프트웨어 개발 프로세스를 예시한다. 본 프로세스는, 소프트웨어의 모든 입력 및 출력 요건들을 CGDM들 포맷으로 변환하는 것(S501); 변환으로부터 발생된 각각의 CGDM의 연산 구조를 설계하고, 마크업 규칙(markup rule)으로 CGDM을 마킹(marking)하고, 필요한 경우 새로운 마크업 규칙을 생성하고, 그리고 필요한 경우 속성 시트(Property Sheet)를 사용해 새로운 마크업 규칙으로 CGDM을 마킹하는 것(S502); 설계된 연산 구조들을 지원하도록 데이터 저장소를 설계하는 것(S503); 기존의 PF들 및/또는 CF들을 선택하는 것, 필요한 경우, 새로운 PF들 및/또는 CF들을 개발하는 것, 만약 새로운 마크업 규칙이 부가된다면, 관련된 CF들에 대한 새로운 CF호출자들을 개발하는 것(S504); 그리고 개발된 그리고/또는 선택된 PF들 및/또는 CF들을 연결하도록 VMS들 및 VMSS들을 생성하는 것(S505)을 포함한다.
일 실시예에서, 단계(S505)는 입력 부분의 값들 없이, 즉, CGDM의 명칭 인스턴스(Name Instance, NI)로 CGDM을 호출함으로써 구현된다. NI는 값들이 없는 입력 및 출력 부분들을 모두 갖고 있는 CGDM이다. 일 실시예에서, 다른 PF들을 호출하는 각각의 CF는 개발 모드(Developing Mode, DV) 프로세싱을 갖는다. DV에서, CG는 CF에 의해 연산된 CGDM의 NI를 취하고, CF에 의해 연산된 CGDM에 대해 CF가 생성한 모든 CGDM들의 NI들을 (예컨대, 파일(file)과 같은) 지속형 데이터 저장소에 출력한다. 출력된 NI들은 호출된 PF들의 CGDM들의 내용(contents)을 특정한다. 이에 따라 VMS들 및 VMSS들이 생성될 수 있다.
도 8은 본 발명의 발명적 개념의 예시적인 실시예에 따른 이용가능한 부분 함수(PF)들 중 하나 또는 그 이상을 사용해 소프트웨어를 발생시키는 방법을 예시한다. 본 방법은, 사용자로 하여금 이용가능한 PF들로부터 PF를 선택하도록 질의하는 것(S801); 사용자로 하여금 입력 명칭(키)-값 쌍들 및 출력 키-값 쌍을 입력하도록 질의하는 것(S802); 입력된 데이터에 근거하여 CGDM을 포맷하는 것(S803); 포맷된 CGDM를 갖는 PF 호출을 입력 인수로서 삽입하는 것(S804); 사용자가 PF 호출들을 행하는 것을 끝냈는지 여부를 결정하는 것(S805)을 포함한다. 만약 사용자가 끝내지 않았다면, 본 방법은 단계(S801)로 진행하여 사용자로 하여금 새로운 PF를 선택하도록 질의한다. 만약 사용자가 끝냈다면, 본 방법은 종료된다.
도 9는 본 발명의 예시적인 실시예에 따른 PF 호출을 포함하는 소프트웨어를 해석하는 방법을 예시한다. 본 방법은 주어진 PF 및 인수로서 PF 호출에 전달된 CGDM을 식별하기 위해 PF 호출을 분석하는 것(S901)을 포함한다. 그 다음에 본 방법은 식별된 PF와 관련된 VMSS를 로딩하고, 그리고 식별된 CGDM 내에서 입력 키-값 쌍들 및 출력 키-값 쌍들을 식별하는 것(S902)을 포함한다. 그 다음에 본 방법은 로딩된 VMSS의 다음 라인(line)을 분석하는 것(S903)을 포함한다. 그 다음에 본 방법은 분석된 라인이 CF 레이블을 포함하고 있는지 여부를 결정한다(S904). 예를 들어, 만약 다음 라인이 도 6b에 도시된 VMSS의 제1 라인이라면, 본 방법은 CF1의 CF 레이블을 식별했다고 결론을 내리게 된다. 만약 CF 레이블이 식별되었다고 결정된다면, 본 방법은 호출할 특정 CF를 결정된 CF 레이블로부터 식별하고, 그리고 VMSS의 다음 라인을 분석한다. 그 다음에 만약 본 방법이 다음 라인은 CF 레이블이 아님(즉, 다음 라인은 VMS에 대응함)이라고 결정한다면, 본 방법은 VMS의 현재 키 쌍의 제1 키를 식별된 CF의 선택된 I/O 파라미터에 매칭시키고, 그리고 현재 키 쌍의 제2 키를 CGDM의 선택된 I/O 키에 매칭시킨다(S906). 예를 들어, 만약 VMS(601)가 분석된다면, 그리고 분석된 현재 키 쌍이 'a:x'이고, 식별된 CF가 CF1(611)이라면, 본 방법은 현재 키 쌍 'a:x'의 제1 키 'a'를 CF1(611)의 입력 파라미터 'a'에 매칭시키고, 그리고 현재 키 쌍의 제2 키 'x'를 CGDM(600)의 입력 파라미터 x:2의 입력 키 'x'에 매칭시킨다. 그 다음에, 본 방법은 CF의 선택된 I/O 파라미터가 선택된 I/O 키의 값으로 전달되도록, 식별된 CF에 대한 호출을 포맷하는 것(S907)을 포함한다. 예를 들어, CFL1(611)의 입력 파라미터 'a'는 값 '2'로 전달되는데, 그 이유는 제1 키 'a'는 'x'에 매칭되고, x는 2로 설정되어 있기 때문이다(예컨대, 'x:2'). 그 다음에 본 방법은 VMS의 모든 키 쌍에 대해 이러한 매칭시키는 단계들을 반복한다. 본 방법은 VMS의 마지막 키 쌍을 분석했는지 여부를 결정하여 그것을 끝냈는지 여부를 결정한다(S908). 만약 본 방법이 끝내지 않았다면 본 방법은 단계(S906)로 진행함으로써 VMS의 다음 키 쌍으로 전진한다. 만약 본 발명이 끝냈다면, 본 방법은 단계(S902)로 진행하여 새로운 CF 레이블을 찾기 위해 또는 이전에 식별된 CF 레이블에 속해 있는 또 하나의 다른 VMS를 찾기 위해 VMSS의 다음 라인을 분석한다.
도 6a가 CGDM에 대해 JSON 포맷의 사용을 보여주고 있지만, 본 발명은 이러한 것으로 한정되지 않는다. 예를 들어, JSON 포맷은 하이퍼텍스트 마크업 언어(HyperText Markup Language, HTML) 포맷 또는 확장성 마크업 언어(Extensible Markup Language, XML) 포맷으로 대체될 수 있다. 우리는 마크업 규칙을 CGDM의 구문 규칙들을 사용해 CGDM의 내용을 확장시키기 위한 규칙으로서 정의하여, 알고리즘의 임의의 입력 인스턴스에 대해 이에 대응하는 확장된 내용이 존재하도록 하고, 아울러 입력 인스턴스 및 이것의 전체 데이터 특징들이 확장된 내용으로부터 도출될 수 있도록 한다. 마크업 규칙은 알고리즘과 관련된다.
본 발명의 일 실시예에서, 소프트웨어에 대한 입력 데이터 메시지들은 HTML 포맷을 갖고, CGDM은 JSON 포맷을 가지며, 그리고 데이터 저장소들은 관계형 데이터베이스(relational database)들인데, 이것은 웹 개발 환경을 가능하게 한다. 입력을 처리(handle)하는 부분 함수들은 웹 브라우저에서 실행되며 그리고 프런트엔드 부분 함수(frontend Part Function)들로서 지칭될 수 있다. 서버 측(server side)을 실행시키는 부분 함수들은 백엔드 부분 함수(Backend Part Function)들로서 지칭될 수 있다. 백엔드 부분 함수들은 데이터베이스에 연결될 수 있다.
HTML 입력을 프로세싱하는 하나의 PF는 선형 캐스케이드 입력(linear cascade input)들을 처리하는 것일 수 있다. 선형 캐스케이드 입력들의 예는 주(state)를 선택하고, 그 다음에 군(county)을 선택하고, 그 다음에 도시(city)를 선택하는 입력들이다. 입력들은 <select>들의 목록 및 현재 선택이고, 출력은 다음 옵션 어레이(option array)이다. 마크업 규칙은 목록을 표현하는 임의의 규칙일 수 있다. 마크업 규칙의 예는 제1 목록을 <select Cascade="cs1" cs1="1" mName="name1"...>로서 마킹하는 것, 제2 목록을 <select Cascade="cs1" cs1="2" mName ="name2"...>로서 마킹하는 것, 제3을 <select Cascade="cs1" cs1="3" mName ="name3"...>로서 마킹하는 것, 등이다. Cascade은 연산 명칭이고, Cascade="cs1"은 인스턴스 cs1을 선언하고, cs1='n'에서 n은 목록 내에서의 위치를 선언한다. PF는 <select> 요소들의 onSelect 이벤트(event)에 의해 트리거(trigger)된다. 동일한 onSelect 이벤트 처리기(event handler) cascadeHndler가 모든 <select>에 대해 설정된다. cascadeHndler는 이러한 타입의 입력 및 출력 요건들을 처리하는 부분 함수이다. 처리기의 알고리즘은 다음과 같다:
Cascade="instance_i"로부터 인스턴스 명칭을 획득함;
instance_i="n"으로부터 위치 번호를 획득함;
현재 <select>의 선택된 값 v 및 명칭 n1을 획득함
다음 <select>의 명칭 n2를 획득함
다음과 같은 형식의 데이터 메시지:
{{ "input":
{"n1" : v}
},
{ "output": {
[{"n2":0}]}
}}
를 백엔드 컴포넌트로 발송함
반환 결과를 다음 <select>로 설정함
하나의 HTML 데이터 메시지 내에서 임의의 길이를 갖는 임의 수의 캐스케이드 입력은 이러한 부분 함수에 의해 처리될 수 있다.
입력의 또 하나의 다른 경우는 스타 캐스케이드 입력(star cascade input)으로서 지칭되며, 여기서 일부 <select>들의 옵션들은, 이용가능한 크기 및 색상 옵션들이 어떤 옷감(cloths)이 선택되었는지에 근거하여 결정되는 경우와 같이, 하나의 <select>에 의해 결정된다. 센터 마크(center mark)에 대해서는 <select star="star1" star1="name list of all end select node">이다. 말단 노드(end node) <select>는 마킹될 필요가 없다. 센터 <select>의 선택이 끝난 경우, 다음과 같은 형식의 데이터 메시지:
{
{"input":
{"centerName" :"v"}
},
{ "output": {
[{"n1",""}],
[{"n2",""}],
...
}}
}
가 백엔드로 발송되는데, 여기서, n1 및 n2는 말단 노드들의 명칭이다. 반환된 값들이 어레이들이 아닌 단일 값인 경우 그리고 말단 노드들이 텍스트 또는 숫자 입력들인 경우, 이것은 고객의 명칭이 선택되고 그 주소가 자동으로 채워지는 것처럼, 자동으로 채워지게 된다.
입력 제안 처리(input suggestion handling)는 자동-채워짐(auto-fill)의 역 동작(reverse operation)이다. 예외적으로 현재 입력 값 및 어떤 다른 입력 값들은, 부서 및 지위 입력들이 종업원들의 명칭 입력 제안을 제한하는 것처럼, 현재 입력의 옵션들을 제한할 수 있다. 현재 입력 값이 텍스트인 경우, 제안된 값들에 관하여, 이것은 하나보다 많은 해석을 가질 수 있는데, 예를 들어, 이는 제안된 값들이 이러한 텍스트로 시작함 또는 텍스트를 포함함을 의미할 수 있다. 따라서 다음과 같은 값에 대해 추가 정보가 제공될 필요가 있고,
{
{"input": {
{"otherValues1": "v1"},
{"otherValues2": "v2"},
{"currentValue": {
{"value": "v3"},
{"type": "LIKE"}
}
}
...
},
{ "output": {
[{"n1",""}]
}
}
}, 여기서 n1은 현재 입력 요소의 명칭이다.
범위들 입력(ranges input)이 또한, 제1 요소 <input rangeInput="ri1" ri1="1" ...>, 제2 요소 <input rangeInput="ri1" ri1="2" ...> 또는 선택 입력들 대해 제1 요소 <select rangeInput="ri1" ri1="1" ...>, 제2 요소 <select rangeInput="ri1" ri1="2" ...>와 같은 마크업 규칙을 갖도록 구현될 수 있다. 알고리즘은 현재 입력을 수용하기 전에 그것이 다른 입력에 의한 설정된 제약을 만족시키는지 또는 하나의 입력이 다른 입력의 옵션들을 제한하는지를 점검하는 것이다. 입력 포맷 선택들로 인해, 날짜 범위 입력, 선택 범위 입력, 수치 값 범위 입력과 같은 몇 가지 상이한 타입의 범위 입력이 존재할 수 있다.
형식은 몇 가지 상이한 타입들의 입력 요소들(텍스트, 수치, 목록 옵션들, 범위 입력, 캐스케이드 입력 ...)을 포함한다. 형식 제출(form submit)의 동작은 모든 요소에 대한 (명칭, 값) 쌍을 수집하는 것이다. 형식 제출에 대한 마크업 규칙은 입력 요소의 각각의 타입에 대한 타입 심볼(type symbol)을 정의하고 있다. 상이한 타입은 명칭 값 액세스(name value access)가 상이한 방식들을 사용할 필요가 있음을 의미한다. 각각의 입력 요소의 적절한 타입에 대해 각각의 입력 요소가 마킹된다. 양식 제출을 위한 알고리즘은 다음과 같다:
각각의 타입에 대해 {
타입에 대한 모든 입력 요소를 획득함
타입의 각각의 입력 요소에 대해 {
명칭 및 값을 획득, 명칭 값을 JSON 포맷으로 포장(pack)함.
}
}
데이터 메시지를 부가(ADD) 또는 수정(MODIFY)으로서 마킹함
JSON 데이터 메시지를 백엔드 어드레스(backend address)로 발송함
형식 제출은 새로운 데이터의 부가(ADD)일 수 있거나 또는 오래된 데이터를 수정(MODIFY)할 수 있다. 수정을 위해, 데이터가 먼저 백엔드로부터 로딩되는데, 일부 추가 데이터, 키들 또는 참조 번호들과 함께 로딩된다. 그 다음에 데이터는 수정되고 백엔드로 발송된다. 추가 키 데이터는 쿠키들(cookies)과 같은 유사한 메커니즘에 의해 처리될 수 있다. 쿠키들의 하나의 구현은 특별한 태그(tag)들과 함께 HTML의 일부 감춰진 요소들을 사용하는 것이다. 새로운 데이터를 부가하기 위해, 이러한 추가 키 데이터는 사용되지 않는다. 따라서, 형식 제출을 위한 PF는 수정과 부가를 구분할 수 있다. 형식 PF는 정의된 타입들의 임의 수의 입력 요소들을 갖는 임의의 형식들의 형식 제출을 처리할 수 있다.
탐색 페이지(search page)는 탐색 조건(search condition)들로서 하나 또는 그 이상의 데이터 입력 요소들을 포함하고, 그리고 탐색 결과들을 디스플레이하기 위한 이차원 데이터 그리드(two dimensional data grid)를 포함한다. 데이터 그리드의 각각의 컬럼(column)은 명명될 수 있다. 데이터 탐색의 제출을 위해서, 백엔드로 발송된 JSON 데이터 메시지는 두 개의 부분들을 갖는데, 아래에서 보여지는 바와 같은 비어 있는 이차원 어레이 부분의 데이터 그리드 부분 및 탐색 조건 부분을 가지며,
{
{"input":{
{"name1": "value1"},
{"name2": {
{"Max": {"value": "v2", "EQUAL": "true"}},
{"Min": {"value": "v3", "EQUAL": "false"}}
} },
...
},
{"output": {
[[{name4:0}, {name5:0},...]
}}
}, 여기서 name2는 범위 값들 입력을 특정하고, EQUAL이 참(true)인 것은 <= 또는 >=을 의미하고, 거짓(false)인 것은 < 또는 >을 의미한다.
탐색 조건 부분은 명명될 수 있고, 타입들로 마킹될 수 있고, 부가(ADD)에 대한 형식과 동일한 방식으로 포장(pack up)될 수 있다.
백엔드의 일 실시예는 관계형 데이터베이스를 데이터 저장소들로서 선택하는 것이고, 데이터 메시지들 간에 수신되는 그리고 발송되는 데이터 메시지들은 JSON 포맷을 갖는다. 관계형 데이터베이스와 상호작용할 필요가 있는 PF들에 대해, 데이터베이스 스키마 명칭(database schema name)들이 사용될 필요가 있다. 데이터베이스 스키마 명칭들에 대응하는 데이터 메시지 내의 작업 명칭(working name)들에 대해서, 이들은 데이터베이스 스키마 명칭으로 변환된다. 테이블(table)의 컬럼 명칭은 형식 tableName.columnName을 갖는다. 단일 테이블에서의 삽입을 처리하는 PF는 다음과 같은 CGDM으로 구현될 수 있다:
{"input": {
{"column1":"table1.column1"},
{"column2":"table1.Column2" },
{"column3", "table1.Column3" },
...
} }
하나의 테이블 안으로의 삽입에 대해, 각각의 컬럼은 SQL 삽입 구문에 의해 동일하게 다루어지고 이에 따라 데이터의 하나의 타입이 존재한다. 이러한 삽입을 처리하는 CGDM은 다음과 같이 된다:
{ input: {
{"table1.column1", ""},
{ "table1.Column2", "" },
{ "table1.Column3", "" },
...
}}
마스터-디테일 테이블(master-detail table) 안으로의 삽입에 대해, CGDM은 다음과 같고,
{"input": {
{"Master": {
{ "table1.column1": ""},
{ "table1.Column2":""},
{ "table1.Column3": ""}
...
}}
{ "Detail": {
[{"table2.column1": ""},
{ "table2.Column2": "" },
{ "table2.Column3": "" },...] }}
}},
여기서 CGDM은 마스터 테이블에 대한 데이터를 포함하고, 그리고 디테일 테이블에 대한 데이터의 어레이를 포함한다.
하나의 테이블 안으로의 업데이트(update)를 처리하는 PF는 다음과 같은 CGDM을 갖는다:
{"input": {
"primarykey": {
{ "table1.column1": ""},
{ "table1.Column2": ""},
...
}
},
{"values": {
{ "table1.Column3": "" },
{ "table1.Column4": ""},
...
}}
}
마스터-디테일 테이블 안으로의 업데이트를 처리하는 PF는 다음과 같은 CGDM을 갖는다:
{"input":{{"m_Primarykey": {
{ "table1.column1": ""},
{ "table1.Column2": ""},
...
}
},
{"m_values": {
{ "table1.Column3": ""},
{ "table1.Column4": ""},
...
}
},
{"d_Primarykey": {
{ "table2.column1": ""},
{ "table2.Column2": ""}
...
}
},
{"d_values": {
{ "table2.column3": ""},
{ "table2.Column4": ""}
...
}
},
{"d_data": {
[{"table2.column1": ""},{ "table2.Column2": ""},...,
{ "table2.Column3": ""},{ "table2.Column3": ""}...]
}
}}
}
아래의 예들에 대해서, SQL 선택 구문은 다음과 같은 형식으로서 취해진다고 가정된다: Select [A: 출력 섹션(output section)] from [B: 테이블 섹션(table section)] where [C: 조건들 섹션(conditions section)] group by [D: 집합 섹션(aggregation section)] having [E: 집합 조건(aggregation condition)] order by [F: 정렬 섹션(order section)]. 이것의 입력 및 출력에 대한 데이터는 여섯 개의 섹션들로 나누어진다. 우리는 다음과 같이 가정한다: 섹션 A는 섹션 B에서 나타나는 테이블들의 컬럼들을 포함하거나, 또는 섹션 B에서 나타나는 테이블들의 컬럼에 관한 SQL 함수를 포함함; 섹션 B는 테이블들 및 연결 관계(join relation)들을 포함함; 섹션 C는 동일한 관계들에서 형식 컬럼=값 또는 컬럼>(=)값 또는 컬럼<(=)값, 컬럼 LIKE 값 SQLFunction(column)의 조건을 포함함; 섹션 D는 SQLFunction(column)의 컬럼을 포함함; 섹션 E는 SQLAggregateFunction(column) = 또는 <(=) 또는 >(=) 값들의 컬럼들을 포함함; 그리고 섹션 F는 컬럼들을 포함함.
섹션 B에서 필요로 하는 테이블들 및 이들의 연결 관계 정보는 데이터베이스의 스키마로부터 획득될 수 있지만, 연결 타입 정보는 애플리케이션으로부터 와야 한다. 이러한 선택 구문을 구현하는 PF의 CGDM 내에서의 두 개의 테이블들 간의 관계를 나타내기 위해 어레이 구조가 선택될 수 있다. 이러한 선택 구문의 CGDM은 다음과 같다:
{{"input":
{{"requirement": {
[{ "tableA.column8": "tableA.column8"},
{ "total1": { "tableB.column4":
{
"FUNC": "SUM"
}}
},
...]}
},
{"table": {
{[ "tableA", "tableB", "joinType", "tableA.column1= tableB.column2", "tableA.column3= tableB.column4", ...],
[ "tableC", "tableD", "joinType", "tableC.column1= tableD.column2", "tableC.column3= tableD.column4", ...],
...}}
},
{"condition": {
{ "tableA.column5": "v1"}, //default to tableA.column5=v1
{ "tableB.column1": {
"value": "v2", //default to SUM(tableB.column1)=v2
"FUNC": "SUM"
}
},
...}
},
{"groupby": [
"tableA.column6",
{ "tableB.column2": {
"FUNC": "DATE"
}
},
...]
},
{"having": {
{ "tableB.column3": {
"value": "v3",
"FUNC": "MAX"
}
},
...}
},
{"orderby": [
"tableA.column7",
...]
}
}},
{"output":
{"results":
[{ "tableA.column8": ''},
{ "total1": ''},
...]}
}}
입력.요건(input.requirement)은 SQL 선택의 섹션 A에 대응하고 있으며 SQL 선택의 출력을 특정한다. 이것은 어레이 포맷을 특정한다. {"tableA.column8": "tableA.column8"}은 tableA.column8의 값을 획득하는 것 및 명칭 "tableA.column8"으로 설정하는 것을 의미한다. 다음과 같은 쌍:
{ "total1": { "tableB.column4":
{
"FUNC": "SUM"
}}
}
은 합산(SUM) 함수 컬럼 tableB.column4를 적용하는 것 및 값을 명칭 "total1"에 적용하는 것을 의미한다.
백엔드 연산 태스크를 달성하기 위해 하나보다 많은 PF들을 사용하는 구현을 위해서 도 10에서 보여지는 바와 같이 판매 주문들(sales orders)의 선적(shipping)의 동작의 경우를 고려한다. 판매 주문은 (부분적 결재(payment) 또는 재고(inventory)의 제약으로 인해) 부분적으로 선적될 수 있다고 가정하고, 이에 따라 판매 주문은 두 번 이상 선적될 필요가 있을 수 있다. 들어오는 CGDM은 다음과 같다:
{ "Order_Shipment_Data" :
{"input": {
{"orderID", "value1"}
}},
{"output": {
{"order_info": {
{"orderCode":""}
{"salesmanName":""},
{"customerName":""}
}},
{"order_prod_info": {
[[{"productName":""}, {"productionDate":""},
{"Quantity":""}, {"shippedQuantity":""}, {"quantityLeft":""}]]
}}
}}
}
입력은 주문 아이디(order id)이고, 요구된 출력은 어떤 주문 정보, 주문 코드, 판매원 명칭 및 고객 명칭, 그리고 제품 정보와 제품 명칭과 제품 날짜와 주문량과 선적된 양과 선적될 남은 양의 목록을 포함한다.
도 10에서, CGDM은 데이터확장기(DataExpander) PF(10)에 의해 수신된다. 데이터확장기 PF(10)는 관계형 데이터세트(relational dataset)(12)에 연결된다. CGDM에 대한 작업 명칭 공간 맵핑(Working Name Space Mapping, WNSM)(100)은 다음과 같다:
{
{"orderID", "order.id"};
{ "orderCode", "order.code"}
{ "salesmanName", "employee.name" }
{"customerName", "customer.name"}
{"productName", "product.name"}
{"productionDate", "product.productionDate"}
{ "Quantity", "order.Quantity" }
}
맵핑 이후 CGDM은 다음과 같이 된다:
{ "Order_Shipment_Data" :
{"input":
{"order.id", "value1"}
},
{"output": {
{"order_info": {
{"order.code": ""}
{"employee.name": ""},
{"customer.name": ""}
}},
{"order_prod_info": {
[[{"product.name": ""}, {"product.productionDate": ""},
{"order.Quantity": ""},{"shippedQuantity": ""},{"quantityLeft": ""}]]
}}
}}
}
PF(10)는 두 개의 CF들(선택(Select) 및 포장자(Packer))을 갖는다. 선택 CF는 세 개의 인스턴스들(102, 104, 및 106)을 실행시킨다. 포장자 CF는 한 개의 인스턴스(108)를 실행시킨다. 선택은 관계형 데이터베이스에 대한 앞서의 예의 타입 SQL 선택을 행하고, 포장자 CF는 그것의 모든 입력들을 데이터 메시지(예컨대, CGDM)의 대응하는 입력 및 출력 부분들로 포장하며 데이터 메시지를 루프PF(LoopPF)(14)로 발송한다. PF(14)는 KeyMatchLoop로 지칭되는 하나의 CF를 갖는데, 이것은 어레이 A 및 어레이 B를 입력들로서 취하고 어레이 C를 출력하는 하나의 인스턴스를 실행시킨다. A, B 및 C에서의 각각의 요소는 키 부분 및 값 부분을 갖는다. 요소의 키는 명칭-값들의 시퀀스이다. 만약 두 개의 키들의 명칭 값 시퀀스의 길이가 동일하다면 그리고 시퀀스의 각각의 위치의 두 개의 명칭-값 쌍들에 대해 명칭들이 동일하다면 두 개의 키들은 동일한 타입이다. 만약 두 개의 키들이 동일한 타입을 가지고 대응하는 명칭들의 값들이 동등하다면 두 개의 키들은 동등하다. A 및 B는 동일한 타입의 키를 갖는다. KeyMatchLoop의 알고리즘은 다음과 같다:
A의 각각의 요소 a에 대해
a와 동일한 키 부분으로 요소 c를 생성함
만약 a.key==b.key인 B의 요소 b가 존재한다면 {
c의 값 부분이 연산 규칙1에 의해 a 및 b의 값 부분들로부터 연산됨
}
그렇지 않으면 {
c의 값 부분이 연산 규칙2에 의해 a 및 b의 값 부분들로부터 연산됨
}
c를 부가함
연산 규칙1 및 연산 규칙2는 계산기 PF(16)에 의해 행해진다. PF(16)는 3개의 연산들을 갖는데, Equal, Zero 및 Minus를 갖는다. PF(10)에 대한 Order_Shipment_Data의 CGDM은 다음과 같다:
{"Order_Shipment":
{"Select.order":
{
{ "input": {
{ "requirement": {
{"order.code": "order.code"}
{"salesman.name": "salesman.name"},
{"customer.name": "customer.name"}
}},
{ "condition" : {
{"order.id", "Order_Shipment_Data.input.'order.id'" }
}},
{ "table" : {
{["order", "salesman", "inner join", "order.salesmanID=salesman.id"],
["order", "customer", "inner join", "order.customerID=customer.id"]}
}}
}},
{ "output":
{ "result": "Order_Shipment_Data.output.order_info"}
}}
}},
{"Select.orderProduct":
{
{ "input": {
{ "requirement": {
[{"product.name": "product.name"},
{"production.date": "production.date"},
{"order_product.quantity": "order_product.quantity"}]
}},
{ "condition" : {
{"order_product.orderId",
Order_Shipment_Data.input.'order.id'" }
}},
{ "table" : {
["order_product", "product", "inner join",
"order_product.productId=production.id"]
}}
}},
{ "output": {
"result": ""}
}}
}}
{"Select.shipped":
{
{ "input": {
{ "requirement": {
{"product.name": "product.name"},
{"production.date":"production.date"},
{"shippedQuantity": {"shipment.Quantity":
{
"FUNC": "SUM"
}}
}
}},
{ "condition" : {
{"shipment.orderid", "Order_Shipment_Data.input.'order.id'" }
}},
{ "table" : {
["shipment", "product", "inner join",
"shipment.productID=product.id"]
}}
{ "aggregate" : {
["product.name", "product.productiondate"]
}}
}},
{ "output":
{ "result": ""}
}
}}
{"packer": {
{"input": {
{"In":
{
{"A": "Select.orderProduct.output.Result"},
{"B": "Select.shipped.output.Result"}
}},
{"Out": {{"C": "Order_Shipment_Data.output.order_prod_info"}}}
}},
{"output": {
{"result" : "Order_Shipment_Data.output.order_prod_info"}
}}
}}
}
데이터 메시지 Order_Shipment_Data의 출력 부분의 order_prod_info는 PF(10)가 PF(14)로 발송하는 데이터 메시지의 출력 부분을 발생시키기 위해 입력으로서 사용된다. PF(10)는 다음과 같은 데이터 메시지 Order_Shipment_Data_Full를 PF(14)로 발송한다:
{"Order_Shipment_Data_Full": {
{"input": {
{"A": [[{"product.name": "v1"}, {"product.productionDate": "v2"},
{"order_product.quantity": "v3"}]]},
{"B": [[{"product.Name": "v4"}, {"product.productionDate": "v5"},
{"shippedQuantity": "v6"}]]}
}},
{"output": {
{"C": [[{"product.Name": ""}, {"product.productionDate": ""},
{"order.Quantity": ""},{"shippedQuantity": ""},{"quantityLeft": ""}]]}
}}
}
}
PF(14)에 대한 데이터 메시지 Order_Shipment_Data_Full의 CGDM은 다음과 같다:
{"Loop":{
{"input": {
{"A":
["Order_Shipment_Data_full.Input.A",
"key":["product.name", "product.productionDate"]},
{"value":{{"shippedQuantity" } }]
},
{"B":
["Order_Shipment_Data_full.Input.B",
{"key":["product.name", "product.productionDate"]},
{"value":{{"order_product.quantity"} }]
},
{ "C":
["Order_Shipment_Data_full.output.C",
{"key":["product.name", "product.productionDate"]},
{"value":{{"order_product.quantity"}, {"shippedQuantity"}, {"quantityLeft"}}]
}
}},
{"output":
{ "result": "Order_Shipment_Data_full.output.C"}
}
}
}
PF(14)는 다음과 같은 두 개의 데이터 메시지들을 PF(16)로 발송한다:
{"Order_data": {
{"input": {
{"A":{"order_product.quantity": "v1"}}
}},
{"output": {
{"C":{{"order_product.Quantity": ""},{"shippedQuantity": ""},{"quantityLeft": ""}}}
}}
}
}
{"Order_Ship_data": {
{"input": {
{"A": {"order_product.quantity": "v1"}},
{"B": {"shippedQuantity": "v2"}}
}
{"output": {
{"C": {{"order_product.quantity": ""},{"shippedQuantity": ""},{"quantityLeft": ""}}}
}}
}
}
Order_Ship_data에 대한 CGDM은 다음과 같다:
{"Order_Ship_Data": {
{"Equal.quantity": {
{"input": {
"X":"A.order_product.quantity"
}},
{"output": {
"Y": "C.order_product.quantity" //Y=X
}}
}
},
{"Equal.quantityLeft": {
{"input": {
"X":"A.order_product.quantity"
}},
{"output": {
"Y":"C.quantityLeft"
}}
}
}
{"Zero": {
{"output": {
"X":"C.shippedQuantity" //X=0
}}
}
}
}}
Order_data에 대한 CGDM은 다음과 같다:
{"Order_Data": {
{"Equal.quantity": {
{"input": {
"X":"A.order_product.quantity"
}},
{"output": {
"Y": "C.order_product.quantity"
}}
}
},
{"Equal.shippedQuantity": {
{"input": {
"X":"B.shippedQuantity"
}},
{"output": {
"Y":"C.shippedQuantity"
}}
}
}
{"Minus": {
{"input": {
{"X":"A.order_product.quantity"},
{"Y":"B.shippedQuantity"}
}},
{"output": {
"Z":"C.quantityLeft" //Z=X-Y
}}
}
}
}}
데이터 메시지 Order_Shipment_Data의 출력 부분은 CF 인스턴스(106) 및 CF 인스턴스(108)의 출력 부분에 의해 형성된다. 그 다음에 이것은 들어오는 데이터 메시지 Order_Shipment_Data의 작업 명칭 공간으로 역으로 맵핑될 수 있고 Order_Shipment_Data의 발송자(sender)에게 발송될 수 있다.
본 발명의 예시적인 실시예는 마크업들 및 CGDM의 속성 시트를 사용한다. 이러한 실시예가 선형 캐스케이드에 관하여 아래에서 논의될 것이지만, 본 발명은 데이터의 임의의 특정 조직(organization)으로 한정되지 않는다. 선형 캐스케이드는 <select> 요소들의 목록이고, 제1 요소로부터 시작하여 마지막 요소를 제외하고 하나의 <select> 요소의 선택된 값은 목록 내의 다음 <select>의 옵션들을 결정한다.
선형 캐스케이드 입력들의 하나의 예는 국가(Country)-주(State)-도시(City) 입력들이고, 이것은 사용자로 하여금 국가의 옵션들로부터 국가를 선택할 수 있게 하고, 주의 옵션들을 결정하고, 사용자로 하여금 주의 옵션들로부터 주를 선택할 수 있게 하고, 그리고 도시의 옵션들을 결정한다. 브라우저 구현에서, 국가, 주 및 도시 각각은 <select> 요소에 의해 나타내어진다. 국가에 대한 이벤트 처리기(event handler)가 국가 <select> 요소에 부속(attach)되고, 주에 대한 이벤트 처리기가 주 <select> 요소에 부속된다. 예를 들어, "USA"와 같은 국가가 선택되는 경우, 국가의 이벤트 처리기가 호출되고, 이벤트 처리기는 "USA"의 값을 획득하고, {Country="USA" , State[]}의 메시지를 생성하고, "USA"에 대한 모든 주들을 획득하기 위해 메시지를 백엔드 프로세스로 발송하고, 그리고 값들을 State[]에 저장한다. 그 다음에 State[]의 값들은 주를 나타내는 <select>로 설정된다. 주 및 도시에 대한 이벤트 처리기도 유사하다.
본 발명의 실시예에서, 캐스케이드는 목록으로서 데이터 구조에 의해 나타내어지고, 여기서 목록의 각각의 요소는 다섯 개의 멤버들을 갖는데, 즉, ID, Next, SelectedValue, eventHandler 및 Options를 갖는다. ID는 요소의 명칭을 보유하고, Next는 목록의 다음 요소의 명칭의 값을 가지며, SelectedValue는 선택된 값들을 보유하고, eventHandler는 요소의 이벤트 처리기 함수를 보유하고, 그리고 Options는 값들의 세트를 보유한다. Options로부터 값을 선택하는 동작 그리고 SelectedValue를 설정하는 동작은 목록의 요소에 대해 행해질 수 있다. 동작이 행해지는 경우, 요소를 인수로서 전달함으로써 eventHandler 내의 함수가 호출된다.
알고리즘은 추상적(abstract)인데 그 이유는 ID들이 임의의 명칭들을 취할 수 있기 때문이다. 이들은 국가, 주, 도시, 또는 회사, 부서, 종업원 명칭, 또는 카테고리, 타입, 제품 명칭일 수 있다. 알고리즘은 일반화되는데 그 이유는 임의 수의 요소들이 허용되기 때문이다.
다음으로 목록 구조가 HTML에서 마킹된다. ID 및 Next를 제외하고, <select> 요소는 모든 다른 것들을 갖는다. CGDM의 우리의 정의에서, 각각의 값은 명칭을 가져야 하고, 따라서 CGDM에서는 단지 Next만이 필요하다. 우리는 HTML 태그의 모든 요소들에 ID 속성을 부가함으로써 값의 명칭이 구현된다고 가정한다.
캐스케이드에 대한 마크업 규칙이 각각의 <select> 요소에 대해 존재하고 Next 속성을 부가하고 그 값은 캐스케이드에서의 다음 <select>의 ID 값이다. 하나의 HTML 페이지에서의 하나보다 많은 캐스케이드가 허용된다.
일반적으로, 마크업 규칙은 CGDM의 구문 규칙들을 사용해 CGDM의 내용을 확장시키기 위한 규칙으로서 정의되어, 알고리즘의 임의의 입력 인스턴스에 대해 이에 대응하는 확장된 내용이 존재하도록 하고, 아울러 입력 인스턴스 및 이것의 전체 데이터 특징들이 확장된 내용으로부터 도출될 수 있도록 한다. 마크업 규칙은 알고리즘과 관련된다.
PF 함수는 상이한 캐스케이드에서도 모든 <select> 요소들에 대한 선택 이벤트의 이벤트-처리기일 수 있다. 이러한 예에서, 우리는 PF에게 명칭 cascadePF를 부여한다. cascadePF의 입력들은 이벤트를 발생시키는 <select> 요소 및 선택된 값이다. 전체 HTML의 문서 객체 모델(Document Object Model, DOM) 구조가 또한 cascadePF에게 액세스가능하다. PF의 CGDM은 입력 부분이 {{the selected <select> element}, {All <select> element of the cascade}}이고 출력 부분이 {{the next element of the selected <select> element}}인 CGDM = { {the selected <select> element}, DOM}으로서 고려될 수 있다.
모든 캐스케이드들, 심지어 상이한 HTML 페이지들에서의 모든 캐스케이드들도 동일한 cascadePF를 사용하기 때문에 그리고 또한 동일한 CGDM 명칭을 사용할 수 있기 때문에, cascadePF의 VMSS 저장소는 임의의 조회(lookup)에 대해 하나의 VMSS를 반환하도록 구성될 수 있다. cascadePF의 예시적인 CF 함수들은 다음과 같은 것이 있다: initRestElement(CurrentElementName name), 이것은 ID=name인 현재 요소에 대해 다음 요소로부터 끝까지 모두 요소에 대한 옵션들을 재설정(reset)함; Results r = getValuesFromBackend(Condition condition, Results r, BackendProc p, CGDMNamepCGDMName), 이것은 CGDM을 포장하고 백엔드 프로세스 p를 호출하고 그리고 명칭 pCGDMName으로 CGDM을 전달함; 그리고 setOptions(Results r), 이것은 ID=r.name의 <select>의 옵션들을 설정함. CGDM은 다음과 같은 포맷을 갖는다:
{pCGDMName: {
{Input: {Condition:{name:value}}}, {Output:{Results:{r:NULL}}
}
cascadePF가 모든 <select> 요소들에 대해 사용될 수 있기 때문에, PF가 수신하는 선택된 <select> 요소는 선택이 상이한 <select> 요소들에 관해 행해진 경우 상이하다. 따라서 직접적인 변수 맵핑(Variable Mapping, VM)이 가능하지 않다. 하지만, CF들의 인수들은 마크업들 및 CGDM으로부터 추론될 수 있다. 우리는 이것을 규칙 기반 VM(Rule Based VM, RBVM)이라 지칭한다.
백엔드에서, 우리는 handleDBSelection로 지칭되는 PF를 가질 수 있는데, 이것은 세트 SQL 선택 구현(set SQL select implementation)들을 포함한다. 일반적으로 <select>에 대한 옵션들의 값들은 SQL 선택을 실행시킴으로써 획득될 수 있다. 우리는 cascadeOptionsCGDM을 CGDM의 명칭으로서 할당하고, getValuesFromBackend는 handleDBSelection으로 전달된다.
RBVM을 사용하면, PF에 대한 VMSS는 다음과 같이 된다:
{initRestElement: RBVM}
{getValuesFromBackend: {{condition: RBVM }, {r : RBVM }, {p: handleDBSelection },{pCGDMName: cascadeOptionsCGDM }}}
{ setOptions: { {r: getValuesFromBackend.r}}
CF들의 호출자들은 다음과 같다:
initRestElementCaller(RBVM, CGDM, CFResults)
{
name = get the ID's value of the selected <select> element
initRestElement(name);
}
getValuesFromBackendCaller(RBVM, CGDM, CFResults)
{
(name, value) = get the ID's value and the selected value of the selected
<select> element
name = get the ID's value of the next element of the selected <select> element
r = getValuesFromBackend(value, name, handleDBSelection, cascadeOptionsCGDM);
add r to CFResults.
}
setOptionsCaller(RBVM, CGDM, CFResults)
{
r = get getValuesFromBackend.r from CFResults
setOptions(r);
}
RBVM의 이점은 새로운 캐스케이드가 부가되거나 캐스케이드의 길이가 확장되는 경우 코드의 규칙 프로세싱 부분이 변경되지 않는다는 것이다. 모든 캐스케이드들은 동일한 코드를 사용할 수 있는데, 그 이유는 우리가 선택한 알고리즘은 추상적이고 일반화되어 있기 때문이다.
CF호출자들의 구현은 마크업 규칙에 의해 영향을 받는다. CF의 새로운 CF호출자가 마크업 규칙에 대해 개발될 필요가 있다. 마크업 규칙으로 인해, CF는 하나보다 많은 CF호출자를 가질 수 있다.
마크업들은 CGDM의 값들의 명칭들을 교차 참조(cross reference)로서 사용해 동등한 또는 그 이상의 표현적 구문 규칙들을 갖는 개별 메시지에 관해 행해질 수 있다. 우리는 이러한 개별 마크업 메시지를 CGDM의 속성 시트(Property Sheet, PS)라고 지칭한다. 임의의 CGDM은 이에 부속되는 PS를 가질 수 있다. 개발시에 CGDM의 명칭 인스턴스(Name Instance, NI)는 알려져 있기 때문에, 이에 따라 PS는 개발시에 CGDM에 부속될 수 있다.
본 발명의 예시적 실시예들이 설명되었지만 본 발명이 이와 같이 개시되는 실시예들로 한정되지 않음을 이해해야 하며, 아울러 본 개시내용의 사상 및 범위 내에 포함되는 다양한 수정들 및 등가적 구성들을 포괄하도록 의도되어 있음을 이해해야 한다.

Claims (20)

  1. 판독 가능한 저장 매체와 연결되어 서비스를 제공하는 컴퍼넌트 기반 소프트웨어 시스템의 컴퓨터 프로그램(computer program)을 조립(assembling)하는 방법으로서, 상기 방법은,
    상기 서비스의 입력/출력(Input/Output, I/O) 요건을 복수의 I/O 키-값 쌍(I/O key-value pair)들을 포함하는 각각의 데이터 메시지(data message)로 변환(converting)하는 단계와;
    상기 데이터 메시지를 입력 인수(input argument)로서 수신하도록 상기 프로그램의 부분 함수(Part Function, PF)를 구성하는 단계와;
    연산 함수(Computation Function, CF)의 인수들에 맵핑(mapping)됨과 아울러 상기 I/O 키-값 쌍들에 맵핑되는 키-쌍(key-pair)들을 포함하는 변수 매칭 구조(Variable Matching Structure, VMS) 세트(set)(Variable Matching Structure Set, VMSS)를 발생시키는 단계와; 그리고
    상기 VMSS를 사용해 불완전한 연산 함수(CF)를 호출(call)하도록 상기 PF를 구성하는 단계를 포함하고
    상기 VMSS는 특정 연산 함수(CF)의 레이블, CF가 호출하여야 하는 PF의 명칭과 CF가 호출하여야 하는 연산 목표 데이터 메시지(Computation Global Data Message : CGDM)들의 명칭, CF의 인스턴스의 입력 파라미터와 CGDM의 인스턴스의 입력 파라미터 중 적어도 하나를 포함하며,
    상기 CF는 상기 서비스와 관련된 동작을 수행하도록 구성되는 것을 특징으로 하는 서비스를 수행하도록 컴퓨터 프로그램을 조립하는 방법.
  2. 제1항에 있어서,
    상기 VMSS는 상기 키-쌍들의 서브세트(subset)를 포함하는 VMS를 포함하고,
    상기 서브세트의 상기 키-쌍들 중에서 제1 키-쌍은, 상기 CF의 입력 인수에 맵핑되는 제1 키, 그리고 상기 I/O 키 값 쌍들 중에서 입력 키-값 쌍에 맵핑되는 제2 키를 포함하는 것을 특징으로 하는 서비스를 수행하도록 컴퓨터 프로그램을 조립하는 방법.
  3. 제2항에 있어서,
    상기 서브세트의 상기 키-쌍들 중에서 제2 키-쌍은, 상기 CF의 출력 인수에 맵핑되는 제3 키, 그리고 상기 I/O 키 값 쌍들 중에서 출력 키-값 쌍에 맵핑되는 제4 키를 포함하는 것을 특징으로 하는 서비스를 수행하도록 컴퓨터 프로그램을 조립하는 방법.
  4. 제1항에 있어서,
    상기 방법은 또한, 상기 VMSS를 상기 데이터 메시지의 명칭(name)에 의해 인덱싱가능한(indexable) 데이터 저장소(data storage)에 저장하는 단계를 포함하는 것을 특징으로 하는 서비스를 수행하도록 컴퓨터 프로그램을 조립하는 방법.
  5. 삭제
  6. 서비스를 수행하도록 구성된 컴퓨터 프로그램을 실행시키는 방법으로서, 상기 컴퓨터 프로그램은 복수의 입력/출력(I/O) 키-값 쌍들을 포함하는 데이터 메시지를 입력 인수로서 수신하도록 구성된 부분 함수(PF)를 포함하고, 상기 방법은,
    복수의 요소(element)들을 포함하는 데이터 구조를 상기 데이터 메시지의 명칭을 사용해 검색(retrieving)하는 단계와, 여기서 각각의 요소는 명칭 및 변수 매칭 구조(VMS)를 포함하고; 상기 VMS는 특정 연산 함수(CF)의 레이블, CF가 호출하여야 하는 PF의 명칭과 CF가 호출하여야 하는 연산 목표 데이터 메시지(Computation Global Data Message : CGDM)들의 명칭, CF의 인스턴스의 입력 파라미터와 CGDM의 인스턴스의 입력 파라미터 중 적어도 하나를 포함하며,
    상기 검색된 데이터 구조 내의 각각의 요소에 대해,
    연산 함수(CF)를 검색하기 위해 상기 요소의 상기 명칭을 사용하는 단계와; 그리고
    상기 검색된 CF를 상기 요소의 상기 VMS 및 상기 데이터 메시지를 사용해 호출하는 단계를 포함하는 것을 특징으로 하는 서비스를 수행하도록 구성된 컴퓨터 프로그램을 실행시키는 방법.
  7. 제6항에 있어서,
    상기 호출하는 단계는,
    상기 데이터 메시지로부터 입력 데이터를 결정하는 것과;
    상기 VMS로부터 상기 입력 데이터의 데이터 부분(data part)들에 상기 CF의 인수들을 맵핑시키는 것; 및
    상기 맵핑에 따라 상기 데이터 부분들로 상기 CF를 호출하는 것을 포함하는 것을 특징으로 하는 서비스를 수행하도록 구성된 컴퓨터 프로그램을 실행시키는 방법.
  8. 제6항에 있어서,
    상기 호출하는 단계는 또한, 상기 검색된 CF의 이전 호출(prior call)의 결과를 포함하는 상기 PF의 내부 데이터 구조에 저장된 데이터를 사용하는 것을 특징으로 하는 서비스를 수행하도록 구성된 컴퓨터 프로그램을 실행시키는 방법.
  9. 삭제
  10. 제6항에 있어서,
    상기 호출하는 단계는 제2 PF를 호출(invoke)하기 위해 상기 검색된 CF를 복수의 입력/출력(I/O) 키-값 쌍들을 포함하는 제2 데이터 메시지로 호출하는 것을 특징으로 하는 서비스를 수행하도록 구성된 컴퓨터 프로그램을 실행시키는 방법.
  11. 서비스를 수행하도록 프로그램을 조립하기 위한 컴퓨터 판독 가능 저장 매체(computer readable storage medium)에 저장된 컴퓨터 프로그램(computer program)으로서, 상기 컴퓨터 판독가능 저장 매체는 상기 컴퓨터 판독가능 저장 매체와 함께 구현되는 프로그램 명령들을 갖고 있으며, 상기 프로그램 명령들은,
    상기 서비스의 입력/출력(I/O) 요건을 복수의 I/O 키-값 쌍들을 포함하는 각각의 데이터 메시지로 변환하는 단계와;
    상기 데이터 메시지를 입력 인수로서 수신하도록 상기 프로그램의 부분 함수(PF)를 구성하는 단계와;
    연산 함수(CF)의 인수들에 맵핑됨과 아울러 상기 I/O 키-값 쌍들에 맵핑되는 키-쌍들을 포함하는 변수 매칭 구조(VMS) 세트(VMSS)를 발생시키는 단계와; 그리고
    상기 VMSS를 사용해 상기 연산 함수(CF)를 호출하도록 상기 PF를 구성하는 단계를 포함하는 방법을 수행하도록 컴퓨터에 의해 실행가능하고, 상기 VMSS는 CF의 레이블, CF가 호출하여야 하는 PF의 명칭과 CF가 호출하여야 하는 연산 목표 데이터 메시지(Computation Global Data Message : CGDM)들의 명칭, CF의 인스턴스의 입력 파라미터와 CGDM의 인스턴스의 입력 파라미터 중 적어도 하나를 포함하며,
    상기 CF는 상기 서비스와 관련된 동작을 수행하도록 구성되는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  12. 제11항에 있어서,
    상기 VMSS는 상기 키-쌍들의 서브세트를 포함하는 VMS를 포함하고,
    상기 서브세트의 상기 키-쌍들 중에서 제1 키-쌍은, 상기 CF의 입력 인수에 맵핑되는 제1 키, 그리고 상기 I/O 키 값 쌍들 중에서 입력 키-값 쌍에 맵핑되는 제2 키를 포함하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  13. 제12항에 있어서,
    상기 서브세트의 상기 키-쌍들 중에서 제2 키-쌍은, 상기 CF의 출력 인수에 맵핑되는 제3 키, 그리고 상기 I/O 키 값 쌍들 중에서 출력 키-값 쌍에 맵핑되는 제4 키를 포함하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  14. 제11항에 있어서,
    상기 컴퓨터 프로그램은 상기 VMSS를 상기 데이터 메시지의 명칭에 의해 인덱싱가능한 데이터 저장소에 저장하는 것을 포함하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  15. 삭제
  16. 서비스를 수행하도록 구성된 프로그램을 실행시키기 위한 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램으로서, 상기 컴퓨터 프로그램은 복수의 입력/출력(I/O) 키-값 쌍들을 포함하는 데이터 메시지를 입력 인수로서 수신하도록 구성된 부분 함수(PF)를 포함하고, 상기 컴퓨터 판독가능 저장 매체는 상기 컴퓨터 판독가능 저장 매체와 함께 구현되는 프로그램 명령들을 갖고 있으며, 상기 프로그램 명령들은,
    복수의 요소들을 포함하는 데이터 구조를 상기 데이터 메시지의 명칭을 사용해 검색하는 단계와, 여기서 각각의 요소는 명칭 및 변수 매칭 구조(VMS)를 포함하고; 상기 VMS는 특정 연산 함수(CF)의 레이블, CF가 호출하여야 하는 PF의 명칭과 CF가 호출하여야 하는 연산 목표 데이터 메시지(Computation Global Data Message : CGDM)들의 명칭, CF의 인스턴스의 입력 파라미터와 CGDM의 인스턴스의 입력 파라미터 중 적어도 하나를 포함하며,
    상기 검색된 데이터 구조 내의 각각의 요소에 대해,
    연산 함수(CF)를 검색하기 위해 상기 요소의 상기 명칭을 사용하는 단계와; 그리고
    상기 검색된 CF를 상기 요소의 상기 VMS 및 상기 데이터 메시지를 사용해 호출하는 단계를 포함하는 방법을 수행하도록 컴퓨터에 의해 실행가능한 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  17. 제16항에 있어서,
    상기 호출하는 단계는,
    상기 데이터 메시지로부터 입력 데이터를 결정하는 것과;
    상기 VMS로부터 상기 입력 데이터의 데이터 부분들에 상기 CF의 인수들을 맵핑시키는 것과; 그리고
    상기 맵핑에 따라 상기 데이터 부분들로 상기 CF를 호출하는 것을 포함하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  18. 제16항에 있어서,
    상기 호출하는 단계는 또한, 상기 검색된 CF의 이전 호출의 결과를 포함하는 상기 PF의 내부 데이터 구조에 저장된 데이터를 사용하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
  19. 삭제
  20. 제16항에 있어서,
    상기 호출하는 단계는 제2 PF를 호출하기 위해 상기 검색된 CF를 복수의 입력/출력(I/O) 키-값 쌍들을 포함하는 제2 데이터 메시지로 호출하는 것을 특징으로 하는 컴퓨터 판독 가능 저장 매체에 저장된 컴퓨터 프로그램.
KR1020187004507A 2015-07-16 2016-07-15 컴포넌트-기반 소프트웨어 시스템 및 개발 방법 KR102111152B1 (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US201562193151P 2015-07-16 2015-07-16
US62/193,151 2015-07-16
PCT/US2016/042402 WO2017011718A1 (en) 2015-07-16 2016-07-15 Component-based software system and development method

Publications (2)

Publication Number Publication Date
KR20180063043A KR20180063043A (ko) 2018-06-11
KR102111152B1 true KR102111152B1 (ko) 2020-06-09

Family

ID=57757721

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020187004507A KR102111152B1 (ko) 2015-07-16 2016-07-15 컴포넌트-기반 소프트웨어 시스템 및 개발 방법

Country Status (9)

Country Link
US (2) US10599401B2 (ko)
EP (1) EP3323043A4 (ko)
JP (2) JP2018521438A (ko)
KR (1) KR102111152B1 (ko)
CN (1) CN108139893B (ko)
AU (1) AU2016293538B2 (ko)
CA (1) CA2997533C (ko)
RU (2) RU2702508C1 (ko)
WO (1) WO2017011718A1 (ko)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2017011718A1 (en) * 2015-07-16 2017-01-19 Young Yi Component-based software system and development method
US10503497B2 (en) * 2018-01-30 2019-12-10 Microsoft Technology Licensing, Llc Techniques for utilizing an expression language in service configuration files

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060020689A1 (en) * 2004-07-23 2006-01-26 Manuel Roman Index-based parameter access and software for using the same
US20120047494A1 (en) * 2010-08-17 2012-02-23 Lsi Corporation Application programming interface (api) router implementation and method

Family Cites Families (19)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5471596A (en) * 1992-04-13 1995-11-28 Digital Equipment Corporation Computer memory device holding a data structure for implementation of function objects
US7614036B2 (en) * 2001-03-22 2009-11-03 Robert D Bjornson Method and system for dataflow creation and execution
US20060248504A1 (en) * 2002-04-08 2006-11-02 Hughes John M Systems and methods for software development
US7353501B2 (en) * 2002-11-18 2008-04-01 Microsoft Corporation Generic wrapper scheme
US7640497B1 (en) * 2003-12-22 2009-12-29 Apple Inc. Transforming a hierarchical data structure according to requirements specified in a transformation template
JP2005346408A (ja) * 2004-06-03 2005-12-15 Hitachi Ltd ワークフローシステム間のwebサービス連携方法
US8745252B2 (en) * 2005-09-21 2014-06-03 Sap Ag Headers protocol for use within a web services message processing runtime framework
GB0521792D0 (en) * 2005-10-26 2005-12-07 Ibm A method, apparatus and computer program for validating source code
US20070234318A1 (en) * 2006-04-04 2007-10-04 International Business Machines Corporation Method, system, and program product for generating source code for a function
EP2071452A1 (en) * 2007-12-07 2009-06-17 Alcatel Lucent Device and method for automatically building applications from specifications and from off-the-shelf components selected by semantic analysis
US8145593B2 (en) * 2008-12-11 2012-03-27 Microsoft Corporation Framework for web services exposing line of business applications
CN101593111B (zh) * 2009-05-31 2012-10-03 大连新中连软件集团有限公司 一种业务组件及基于业务组件的应用软件开发方法和系统
US8739157B2 (en) * 2010-08-26 2014-05-27 Adobe Systems Incorporated System and method for managing cloud deployment configuration of an application
US8689235B2 (en) * 2011-01-18 2014-04-01 Gbc Industries System and method for enabling interaction between a cloud application and a local application
US8850199B2 (en) * 2012-04-27 2014-09-30 Certicom Corp. Hashing prefix-free values in a signature scheme
CN103064787B (zh) * 2012-12-21 2015-06-10 清华大学 一种基于扩展接口自动机模型的嵌入式组件建模与测试方法
US20140196022A1 (en) * 2013-01-08 2014-07-10 Alexey Skutin Cloud Based Application Packaging
US9244857B2 (en) * 2013-10-31 2016-01-26 Oracle International Corporation Systems and methods for implementing low-latency lookup circuits using multiple hash functions
WO2017011718A1 (en) 2015-07-16 2017-01-19 Young Yi Component-based software system and development method

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20060020689A1 (en) * 2004-07-23 2006-01-26 Manuel Roman Index-based parameter access and software for using the same
US20120047494A1 (en) * 2010-08-17 2012-02-23 Lsi Corporation Application programming interface (api) router implementation and method

Also Published As

Publication number Publication date
CN108139893B (zh) 2021-08-06
CA2997533C (en) 2022-09-06
US20200257505A1 (en) 2020-08-13
CN108139893A (zh) 2018-06-08
RU2019130708A (ru) 2019-10-10
AU2016293538B2 (en) 2020-03-12
AU2016293538A1 (en) 2018-03-08
JP2018521438A (ja) 2018-08-02
EP3323043A1 (en) 2018-05-23
US11048481B2 (en) 2021-06-29
US10599401B2 (en) 2020-03-24
EP3323043A4 (en) 2019-03-27
RU2019130708A3 (ko) 2019-12-27
CA2997533A1 (en) 2017-01-19
RU2715803C2 (ru) 2020-03-03
JP2021009724A (ja) 2021-01-28
KR20180063043A (ko) 2018-06-11
WO2017011718A1 (en) 2017-01-19
RU2702508C1 (ru) 2019-10-08
US20180150284A1 (en) 2018-05-31

Similar Documents

Publication Publication Date Title
US12013873B2 (en) Interactive visual analysis of datasets using a specialized virtual machine
JP7166483B1 (ja) 続く分析に向けてデータを準備しキュレートするユーザインターフェース
US11615143B2 (en) System and method for querying a graph model
Shaw et al. Object-oriented queries: equivalence and optimization
US8140596B2 (en) System and method for the derivation and application of sub-iteration contexts in a transformation operation in a data integration system
EP3117342A1 (en) Framework for data extraction by examples
CN106407170A (zh) 数据报表快速生成方法及系统
KR20210041554A (ko) 데이터베이스 레코드들을 비교하고 선택적으로 병합하기 위한 시스템 및 방법
US20200320082A1 (en) Advanced multiprovider optimization
US11048481B2 (en) Component-based software system and development method
US9116960B2 (en) Calculation engine with optimized multi-part querying
US10713244B2 (en) Calculation engine optimizations for join operations utilizing automatic detection of forced constraints
Ren et al. Intelligent visualization system for big multi-source medical data based on data lake
Izquierdo et al. Integrating a geomechanical collaborative research portal with a data & knowledge retrieval platform
Benabbou et al. An algorithmic structuration of a type system for an orthogonal object/relational model
Harrison et al. Languages and programming interfaces
CA2398043C (en) Collection view expander
Coles LINQ to XML

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
AMND Amendment
X701 Decision to grant (after re-examination)