KR20050011745A - 추론 서비스 제공 시스템 및 방법 - Google Patents

추론 서비스 제공 시스템 및 방법 Download PDF

Info

Publication number
KR20050011745A
KR20050011745A KR10-2004-7016422A KR20047016422A KR20050011745A KR 20050011745 A KR20050011745 A KR 20050011745A KR 20047016422 A KR20047016422 A KR 20047016422A KR 20050011745 A KR20050011745 A KR 20050011745A
Authority
KR
South Korea
Prior art keywords
rule
rules
inference
value
field
Prior art date
Application number
KR10-2004-7016422A
Other languages
English (en)
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 KR20050011745A publication Critical patent/KR20050011745A/ko

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F17/00Digital computing or data processing equipment or methods, specially adapted for specific functions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/02Knowledge representation; Symbolic representation
    • G06N5/022Knowledge engineering; Knowledge acquisition
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06NCOMPUTING ARRANGEMENTS BASED ON SPECIFIC COMPUTATIONAL MODELS
    • G06N5/00Computing arrangements using knowledge-based models
    • G06N5/04Inference or reasoning models
    • G06N5/046Forward inferencing; Production systems

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • General Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Software Systems (AREA)
  • Data Mining & Analysis (AREA)
  • Mathematical Physics (AREA)
  • Evolutionary Computation (AREA)
  • Computing Systems (AREA)
  • Computational Linguistics (AREA)
  • Artificial Intelligence (AREA)
  • Databases & Information Systems (AREA)
  • Devices For Executing Special Programs (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Stored Programmes (AREA)
  • Management, Administration, Business Operations System, And Electronic Commerce (AREA)
  • Computer And Data Communications (AREA)

Abstract

추론 서비스를 제공하는 방법은 지정된 도메인에 대한 복수의 규칙을 수신하는 단계를 포함한다. 본 방법은 또한 규칙들과 관련된 사전 조건 및 규칙들과 관련된 사후 조건을 식별하는 단계를 포함한다. 사전 조건은 규칙들을 실행하는 데 사용되는 입력을 나타내며, 사후 조건은 규칙들의 실행으로부터의 출력을 나타낸다. 본 방법은 사전 조건에 대응하는 입력값을 수신하는 단계를 더 포함한다. 게다가, 본 방법은 출력값을 생성하기 위해 입력값을 사용하여 규칙들 중 적어도 일부분을 실행하는 단계를 포함한다. 출력값은 사후 조건에 대응한다.

Description

추론 서비스 제공 시스템 및 방법{SYSTEM AND METHOD FOR PROVIDING INFERENCING SERVICES}
전문가 시스템은 종종 의료 또는 법무 분야 등의 특정 분야에서의 문제를 해결하는 데 사용된다. 예를 들어, 전문가 시스템은 환자의 증상을 식별하는 정보를 수신하고, 그 증상을 분석하며, 그 환자에 대한 가능한 진단을 식별할 수 있다. 일반적인 전문가 시스템은 전문가 시스템에 의해 사용되는 논리를 구현하는 규칙 베이스(rulebase), 즉 일련의 규칙을 포함한다. 일반적인 전문가 시스템은 또한 추론 엔진을 포함한다. 추론 엔진은 일반적으로 환자가 겪고 있는 증상 등의 일련의 입력을 분석하기 위해 규칙을 실행한다. 규칙을 실행할 때, 추론 엔진은 일반적으로 값들을 일련의 출력값에 할당하려고 시도한다. 출력값은 추론 엔진의 결론을 나타낸다.
본 발명은 일반적으로 전문가 시스템 분야에 관한 것이며, 보다 상세하게는 추론 서비스를 제공하는 시스템 및 방법에 관한 것이다.
도 1은 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 예시적인 시스템을 나타낸 예시적인 블록도.
도 2는 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 다른 예시적인 시스템을 나타낸 예시적인 블록도.
도 3은 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 또다른 예시적인 시스템을 나타낸 예시적인 블록도.
도 4는 본 발명의 일 실시예에 따른 예시적인 규칙 베이스 아키텍처를 나타낸 예시적인 블록도.
도 5a 및 도 5b는 본 발명의 일 실시예에 따른 예시적인 규칙 베이스 빌더를 나타낸 예시적인 블록도.
도 6a, 도 6b, 도 6c-1 및 도 6c-2는 본 발명의 일 실시예에 따른 예시적인 추론 엔진을 나타낸 예시적인 블록도.
도 7은 본 발명의 일 실시예에 따른 예시적인 코어 애플리케이션을 나타낸 예시적인 블록도.
도 8은 본 발명의 일 실시예에 따른 예시적인 인터페이스를 나타낸 예시적인 블록도.
도 9a 및 도 9b는 본 발명의 일 실시예에 따른 예시적인 유형의 규칙을 나타낸 예시적인 블록도.
도 10은 본 발명의 일 실시예에 따른 규칙 베이스를 공유하기 위한 예시적인 메모리 구성을 나타낸 예시적인 블록도.
도 11a 내지 도 11d는 본 발명의 일 실시예에 따른 통합된 규칙 베이스로 병합되는 예시적인 규칙 베이스 컴포넌트들을 나타낸 예시적인 블록도.
도 12는 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 예시적인 방법을 나타낸 예시적인 흐름도.
도 13은 본 발명의 일 실시예에 따른 규칙 베이스를 구축하는 예시적인 방법을 나타낸 예시적인 흐름도.
도 14는 본 발명의 일 실시예에 따른 규칙 베이스 컴포넌트들을 병합하는 예시적인 방법을 나타낸 예시적인 흐름도.
본 발명은 추론 서비스를 제공하는 시스템 및 방법을 제공한다. 구체적으로 말하면, 추론 엔진은 애플리케이션 프로그램 인터페이스(API) 등의 유연성있는 인터페이스와 연계하여 사용될 수 있다. 사용자 또는 애플리케이션은 식별된 규칙 베이스를 사용하여 추론 동작을 수행하기 위해 인터페이스 엔진을 호출할 수 있다. 규칙 베이스는 XML(확장가능 마크업 언어)을 사용하여 정의될 수 있다. 추론 엔진은 이어서 식별된 규칙 베이스 내의 지정된 도메인에 대한 규칙들을 실행하고 추론의 결과를 호출측 사용자 또는 애플리케이션으로 반환할 수 있다.
일 실시예에서, 추론 서비스를 제공하는 방법은 지정된 도메인에 대한 복수의 규칙을 수신하는 단계를 포함한다. 본 방법은 또한 규칙들과 관련된 적어도 하나의 사전 조건(precondition) 및 규칙들과 관련된 적어도 하나의 사후 조건(postcondition)을 식별하는 단계를 포함한다. 각각의 사전 조건은 규칙들을 실행하는 데 사용되는 입력을 나타내고, 각각의 사후 조건은 규칙의 실행으로부터의 출력을 나타낸다. 본 방법은 또한 사전 조건에 대응하는 입력값을 수신하는 단계를 더 포함한다. 게다가, 본 방법은 출력값을 생성하기 위해 입력값을 사용하여 규칙들의 적어도 일부분을 실행하는 단계를 포함한다. 출력값은 사후 조건에 대응한다.
다른 실시예에서, 추론 서비스를 제공하는 방법은 지정된 도메인에 대한 복수의 제1 규칙을 수신하는 단계를 포함하며, 이 규칙은 제1 규칙 베이스의 적어도 일부분을 포함한다. 본 방법은 또한 제1 규칙들을 메모리에 로드하는 단계를 포함한다. 본 방법은 보조 규칙 베이스로부터의 제2 도메인을 메모리에 로드하는 단계를 더 포함한다. 게다가, 본 방법은 제2 도메인 내의 규칙에 우선하여 제1 규칙을 서브추론(sub-inference)하는 단계를 포함한다.
또다른 실시예에서, 추론 서비스를 제공하는 방법은 지정된 도메인에 대한 복수의 규칙 중 적어도 일부분을 실행하는 단계를 포함한다. 규칙들 중 적어도 하나는 표현식(expression)을 포함한다. 본 방법은 또한 규칙 내의 표현식을 분석하는 데 필요한 필드가 미지의 값을 갖는 경우 규칙들 중 하나를 보류(pending)시키는 단계와 결정 트리 규칙이 보류되도록 만든 표현식과 관련된 이항 서술문(binary statement)을 식별하는 단계를 포함한다. 본 방법은 규칙이 보류되도록 만든 필드에 기지의 값을 할당하는 단계 및 그 규칙을 보류 해제(unpending)시키는 단계를 더 포함한다. 게다가, 본 방법은 식별된 이항 서술문에서 규칙의 실행을 재시작하는 단계를 포함한다.
본 발명의 보다 완전한 이해를 위해, 첨부 도면과 연계하여 기술된 이하의설명을 참조한다.
도 1은 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 예시적인 시스템(100)을 나타내는 예시적인 블록도이다. 예시된 실시예에서, 시스템(100)은 서버(102), 데이터베이스(104), 네트워크(106), 및 하나 이상의 클라이언트(108)를 포함한다.
동작의 한 측면에서, 서버(102)는 규칙 베이스 빌더(110) 및 추론 엔진(112)을 포함할 수 있다. 규칙 베이스 빌더(rulebase builder)(110)는 하나 이상의 규칙 베이스(114)의 생성 및 수정을 지원한다. 규칙 베이스(114)는 추론 동작을 수행하기 위해 추론 엔진(112)에 의해 사용되는 논리를 구현하는 규칙(116)을 포함한다. 예를 들어, 규칙 베이스(114)는 환자의 증상을 어떻게 분석하고 그 환자에 대한 가능한 진단을 어떻게 식별하는지를 정의할 수 있다. 추론 엔진(112)은 시스템(100)에서 추론 동작을 수행할 수 있다. 예를 들어, 추론 엔진(112)은 하나 이상의 입력값을 수신하고, 규칙 베이스(114)를 사용하여 입력값을 분석하며, 하나 이상의 출력값을 생성할 수 있다. 이어서, 출력값은 환자의 진단을 사용자가 이용가능하도록 만드는 것 등에 의해 여러가지 목적으로 사용될 수 있다.
예시된 실시예에서, 서버(102)는 네트워크(106)에 연결되어 있다. 본 명세서에서, 용어 "연결"이란 2개 이상의 컴포넌트가 서로 물리적 접촉을 하고 있는지 여부에 상관없이 이들 컴포넌트 사이의 임의의 직접적 또는 간접적 통신을 말한다. 또한, 용어 "통신"이란 물리적으로 별개인 컴포넌트들 사이 또는 단일 물리적 유닛 내의 컴포넌트들 사이의 통신을 말할 수 있다. 서버(102)는 시스템(100)에서 규칙베이스(114)의 생성 및 사용과 관련된 하나 이상의 함수를 수행한다. 예를 들어, 서버(102)는 규칙 베이스(114)를 생성, 수정 및 삭제할 수 있다. 서버(102)는 또한 추론 동작을 수행하기 위해 규칙 베이스(114)를 사용할 수 있다. 서버(102)는 규칙 베이스 구축 및 추론 함수를 수행하는 동작을 하는 임의의 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 포함할 수 있다.
데이터베이스(104)는 서버(102)에 연결되어 있다. 데이터베이스(104)는 서버(102)에 의해 사용되는 정보를 저장하고 그의 검색을 용이하게 해준다. 예를 들어, 데이터베이스(104)는 규칙 베이스 빌더(110)에 의해 생성되고 추론 엔진(112)에 의해 사용되는 하나 이상의 규칙 베이스(114)를 저장할 수 있다. 데이터베이스(104)는 정보를 저장하고 그의 검색을 용이하게 해주는 동작을 하는 임의의 하드웨어, 소프트웨어, 펌웨어 또는 이들의 조합을 포함할 수 있다. 또한, 데이터베이스(104)는 정보를 저장하고 그의 검색을 용이하게 하기 위해 각종의 데이터 구조, 구성, 및 편집 중 임의의 것을 사용할 수 있다.
네트워크(106)는 서버(102) 및 클라이언트(108)에 연결되어 있다. 네트워크(106)는 시스템(100)의 컴포넌트들 사이의 통신을 용이하게 해준다. 네트워크(106)는 네트워크 주소 사이에서 예를 들어 인터넷 프로토콜(IP) 패킷, 프레임 릴레이 프레임, 비동기 전송 모드(ATM) 셀, 또는 다른 적당한 정보를 전달할 수 있다. 네트워크(106)는 하나 이상의 근거리 통신망(LAN), 도시지역 통신망(MAN), 원거리 통신망(WAN), 인터넷 등의 글로벌 네트워크의 전부 또는 그의 일부분, 또는 하나 이상의 장소에 있는 임의의 다른 통신 시스템 또는 시스템들을 포함할 수 있다.
클라이언트(108)는 네트워크(106)에 연결되어 있다. 클라이언트(108)는 시스템(100)에서 각종의 함수 중 임의의 것을 수행할 수 있다. 예를 들어, 클라이언트(108)는 서버(102) 내의 규칙 베이스 빌더(110) 및 추론 엔진(112)의 기능을 호출할 수 있는 클라이언트 애플리케이션(122)을 포함할 수 있다. 특정의 예로서, 클라이언트 애플리케이션(122)은 추론 엔진(112)으로 하여금 클라이언트 애플리케이션(122)에 의해 식별된 규칙 베이스(114)를 사용하여 추론 동작을 수행하도록 할 수 있다. 클라이언트(108)는 또한 단말기를 나타낼 수 있으며, 이 단말기를 통해 프로그래머 또는 다른 사용자는 규칙 베이스 빌더(110)를 사용하여 여러가지 규칙 베이스(114)를 생성, 수정, 또는 삭제할 수 있다. 클라이언트(108)는 서버(102)와 통신하는 동작을 하는 임의의 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 포함할 수 있다.
예시된 예에서, 서버(102)는 프로세서(124) 및 메모리(126)를 포함한다. 프로세서(124)는 서버(102)의 동작을 수행하기 위해 명령어를 실행하고 데이터를 처리한다. 도 1이 서버(102) 내에 단일 프로세서(124)를 도시하고 있지만, 특정의 필요에 따라 다수의 프로세서(124)가 사용될 수 있다. 메모리(126)는 서버(102)의 함수를 수행하기 위해 프로세서(124)에 의해 사용되는 정보를 저장하고 그의 검색을 용이하게 해준다. 메모리(126)는 예를 들어 프로세서(124)에 의해 수행될 명령어 및 프로세서(124)에 의해 사용되는 데이터를 저장할 수 있다. 메모리(126)는 정보를 저장하고 그의 검색을 용이하게 하는 동작을 하는 임의의 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 포함할 수 있다.
예시된 실시예에서, 서버(102)는 규칙 베이스 빌더(110), 추론 엔진(112) 및 툴(128)을 포함한다. 특정의 실시예에서, 규칙 베이스 빌더(110) 또는 추론 엔진(112)이 클라이언트 애플리케이션(122)에 의해 호출될 때, 서버(102)는 규칙 베이스 빌더 인스턴스 또는 추론 엔진 인스턴스를 생성한다. 서버(102)에 의해 인스턴스화된 인스턴스는 이어서 클라이언트 애플리케이션(122)에 서비스를 제공하는 데 사용될 수 있다. 제2 클라이언트 애플리케이션(122)이 규칙 베이스 빌더(110) 또는 추론 엔진(112)을 호출하려고 시도하는 경우, 제2 클라이언트 애플리케이션(122)에 대해 별도의 인스턴스가 생성될 수 있다. 이와 마찬가지로, 제1 클라이언트 애플리케이션(122)이 다수의 쓰레드를 사용하고 각각의 쓰레드를 통해 규칙 베이스 빌더(110) 또는 추론 엔진(112)을 호출하는 경우, 별도의 인스턴스들이 각각의 쓰레드에 대해 인스턴스화될 수 있다. 이것에 의해 서버(102)는 규칙 베이스 구축 및 추론 기능을 다수의 클라이언트(108)에 또한 다수의 쓰레드를 통해 동시에 제공할 수 있다. 다른 실시예들에서, 서버(102)는 각각의 클라이언트 애플리케이션(122) 또는 쓰레드에 대해 인스턴스를 생성할 필요가 없다. 게다가, 이하의 설명에서, 규칙 베이스 빌더(110) 및 추론 엔진(112)은 특정의 함수를 수행하는 것으로 기술될 수 있다. 이 설명은 특정의 함수가 규칙 베이스 빌더 인스턴스 또는 추론 엔진 인스턴스에 의해 수행되는 상황을 포함한다.
규칙 베이스 빌더(110)는 시스템(100)에서 규칙 베이스(114)의 생성, 수정 및 삭제를 용이하게 해준다. 규칙 베이스(114)는 시스템(100)에서 추론 함수를 수행하기 위해 추론 엔진(112)에 의해 사용되는 하나 이상의 규칙(116)을 정의한다. 예를 들어, 규칙 베이스(114)는 정보를 저장하는 데이터 객체 및 이 데이터 객체 내의 정보에 작용하는 메소드 및 규칙을 지정하는 논리 객체를 정의할 수 있다. 특정의 예로서, 데이터 객체는 환자 증상을 저장할 수 있는 반면, 논리 객체는 그 증상을 분석하고 또 진단을 계산하려고 시도한다. 예시적인 규칙이 이하에 기술되는 도 9a 및 도 9b에 도시되어 있다.
규칙 베이스(114)는 임의의 포맷을 사용하여 정의된 다수의 규칙(116)을 포함할 수 있다. 일 실시예에서, 규칙 베이스(114)는 XML(확장가능 마크업 언어)을 사용하여 정의된 규칙(116)을 포함한다. 특정의 실시예에서, 규칙 베이스(114)는 이하에 기술되는 규칙 정의 언어(Rule Definition Language, RDL)을 사용하여 정의된 규칙(116)을 포함한다. 또한, 규칙 베이스(114)는 다수의 섹션 또는 부분으로 분할될 수 있다. 예를 들어, 규칙 베이스(114)는 서로 다른 섹션으로 분할될 수 있으며, 이 경우 한 섹션은 데이터 객체를 정의하고 다른 섹션은 그 데이터 객체에 작용하는 논리 객체를 정의한다. 다른 예로서, 규칙 베이스(114)는 다수의 규칙 세트(130)로부터 형성될 수 있으며, 이 경우 각각의 규칙 세트(130)는 공통된 문제와 관련되어 있는 하나 이상의 규칙(116)을 포함한다. 규칙 베이스(114)는 또한 다수의 규칙 세트(130)를 포함할 수 있는 다수의 도메인(131)으로부터 형성될 수 있다. 예시적인 규칙 베이스 아키텍처가 이하에 기술되는 도 4에 도시되어 있다.
규칙 베이스 빌더(110)는 여러가지 규칙 베이스 컴포넌트를 통합된 규칙 베이스(114)로 병합함으로써 시스템(100)에서 규칙 베이스(114)의 생성을 지원한다.예를 들어, 규칙 베이스 빌더(110)는 일련의 규칙(116), 규칙 세트(130), 및 규칙 베이스(114)를 단일 규칙 베이스(114)로 결합할 수 있다. 규칙 베이스 빌더(110)는 또한 규칙(116) 사이의 일관성 및 완전성을 보장하도록 돕기 위해 그 결과 얻어지는 통합된 규칙 베이스(114)를 파싱할 수 있다. 특정의 예로서, 서로 다른 개발팀이 서로 다른 규칙(116), 규칙 베이스(114), 또는 규칙 세트(130)를 개별적으로 생성할 수 있으며, 규칙 베이스 빌더(110)는 여러가지 컴포넌트를 단일 규칙 베이스(114)로 병합할 수 있다. 다른 예로서, 한 개발팀이 일련의 데이터 객체를 생성할 수 있는 반면, 다른 개발팀이 그 데이터 객체를 처리하는 일련의 논리 객체를 생성할 수 있다. 규칙 베이스 빌더(110)는 이어서 데이터 객체 및 논리 객체를 규칙 베이스(114)로 병합할 수 있다.
통합된 규칙 베이스(114)로 병합되는 여러가지 규칙 베이스 컴포넌트는 몇가지 형태로 존재할 수 있다. 예를 들어, 병합되는 규칙 베이스(114)는 컴파일되지 않은 소스 규칙 베이스(114) 또는 컴파일된 바이너리 규칙 베이스(114)로서 존재할 수 있다. 바이너리 규칙 베이스(114)의 사용에 의해 써드파티 벤더는 마케팅되어 고객들에 판매될 수 있는 바이너리 규칙 베이스(114)를 생성할 수 있다. 규칙 베이스(114)가 바이너리 형태이기 때문에, 규칙 베이스(114)의 실제의 내용은 훨씬 더 보호될 수 있다. 바이너리 규칙 베이스(114)를 획득하는 고객은 이를 다른 규칙 베이스(114)와 간단히 병합할 수 있다. 고객은 바이너리 규칙 베이스(114)를 형성하는 실제의 규칙(116)에 액세스할 필요가 없다.
규칙 베이스 빌더(110)는 또한 여러가지 규칙 베이스 컴포넌트를 표준 포맷으로 변환한다. 예를 들어, 시스템(100)에서의 규칙 베이스(114)는 XML로 된 규칙 정의 언어 등의 디폴트 또는 표준 포맷을 가질 수 있다. 규칙 베이스 빌더(110)가 서로 다른 포맷을 갖는 컴포넌트를 사용하여 통합된 규칙 베이스(114)를 생성하도록 클라이언트 애플리케이션(122)이 요청하는 경우, 규칙 베이스 빌더(110)는 그 컴포넌트를 변환하여 표준 포맷으로 재포맷할 수 있다. 규칙 베이스 빌더(110)는 이어서 재포맷된 컴포넌트를 사용하여 통합된 규칙 베이스(114)를 생성할 수 있다. 이것에 의해 사용자는 규칙 베이스 빌더(110) 및 추론 엔진(112)에 의해 사용되는 표준 포맷 이외의 포맷으로 규칙 베이스(114)를 구축할 수 있다.
규칙 베이스 빌더(110)는 또한 바이너리 규칙 베이스(114)를 생성하기 위해 소스 규칙 베이스(114)를 컴파일할 수 있다. 예로서, 규칙 베이스 빌더(110)는 규칙 정의 언어에 부합하는 XML 문서로 정의된 소스 규칙 베이스(114)를 컴파일할 수 있다. 컴파일의 결과로서, 규칙 베이스 빌더(110)는 바이너리 버전의 규칙 베이스(114)를 생성하고, 추론 엔진(112)은 이를 사용하여 추론 동작을 수행할 수 있다. 규칙 베이스(114)를 컴파일하는 것은 추론 엔진(112)의 동작 효율성을 증가시키는 데 도움이 될 수 있으며, 또한 규칙 베이스(114)의 프라이버시를 보호하고 그를 둘러싸는 보안을 향상시키는 데 도움이 될 수 있다. 정보가 어떻게 규칙 정의 언어에 의해 정의되는 통합된 규칙 베이스(114)로 병합될 수 있는지에 대한 설명은 이하에 기술되어 있다.
규칙 베이스 빌더(110)는 규칙 베이스(114)를 생성하고 유지하는 동작을 하는 임의의 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 포함할 수 있다.예를 들어, 규칙 베이스 빌더(110)는 프로세서(124)에 의해 실행되는 하나 이상의 소프트웨어 루틴을 포함할 수 있다. 규칙 베이스 빌더의 예시적인 실시예가 이하에 기술되는 도 5a 및 도 5b에 도시되어 있다.
추론 엔진(112)은 서버(102)의 추론 기능을 구현한다. 예를 들어, 추론 엔진(112)은 하나 이상의 규칙 베이스(114)에 액세스하고 사용될 규칙(116)을 식별할 수 있다. 추론 엔진(112)은 또한 클라이언트 애플리케이션(122)으로부터 입력값을 수신하고 그 입력을 사용하여 규칙(116)을 실행할 수 있다. 본 명세서에서, 용어 "실행한다"는 규칙(116)에서의 동작이 수행되어야만 하는지 여부를 결정하기 위해 최소한 추론 엔진(112)이 규칙(116)의 적어도 일부분을 검사하는 것을 말한다. 추론 엔진(112)은 이어서 추론 동작의 결과를 클라이언트 애플리케이션(122)으로 반환할 수 있다.
일 실시예에서, 추론 엔진(112)에 의해 사용되는 규칙(116)은 속성 또는 필드를 포함하거나 다른 방식으로 이를 참조할 수 있다. 기지의 값 또는 정의된 값을 갖는 필드는 "기지의 상태"에 있는 "기지의 필드"라고 말할 수 있는 반면, 미지의 값 또는 미정의된 값을 갖는 필드는 "미지의 상태"에 있는 "미지의 필드"라고 말할 수 있다. 추론 동안, 추론 엔진(112)은 규칙(116)을 사용하여 기지의 값을 미지의 필드에 할당하려고 시도한다.
동작의 일 측면에서, 추론 엔진(112)은 규칙 베이스(114) 내의 규칙(116)을 검사하고, 그 규칙(116)을 기동(fire), 불이행(fail), 또는 보류(pend)할 수 있다. 추론 엔진(112)이 규칙(116) 내의 전제를 검사하고 그 전제가 참임을 발견하여 그규칙(116)에 지정된 동작을 수행할 때, 추론 엔진(112)은 규칙(116)을 "기동"한다. 추론 엔진(112)은 그 자신이 규칙(116) 내의 전제를 검사하고 그 전제가 거짓임을 발견하여 그 규칙(116)에 지정된 동작을 수행하지 않을 때 규칙(116)을 "불이행"한다. 추론 엔진(112)이 규칙(116) 내의 전제를 검사하고 그 전제가 참이나 거짓으로서 분석될 수 없는 것으로 결정할 때, 추론 엔진(112)은 규칙(116)을 "보류"한다. 이것은 전제가 미지의 값을 갖는 필드를 포함할 때 일어날 수 있다. 추론 엔진(112)은 나중에 필드가 기지의 값으로 할당된 이후에 보류 중인 규칙(116)을 기동 또는 불이행하려고 시도할 수 있다.
추론 엔진(112)은 규칙 베이스(114) 내의 규칙(116)을 실행하기 위해 하나 또는 다수의 전략을 사용할 수 있다. 일 실시예에서, 추론 엔진(112)은 규칙 베이스(114) 내의 규칙(116)의 정방향 추론(forward-chaining) 및 역방향 추론(backward-chaining)을 지원한다. 일반적으로, 정방향 추론은 추론 엔진(112)이 기지의 상태에 놓여 있는 규칙 베이스(114) 내의 미지의 필드의 수를 최대화하려고 시도하는 것을 포함한다. 정방향 추론에서, 추론 엔진(112)은 규칙(116)을 기동하고 어느 필드가 그 기동의 결과로서 기지의 상태로 분석되는지를 결정한다. 추론 엔진(112)은 이어서 임의의 보류 중인 규칙(116)을 재방문하고 그 보류 중인 규칙(116)이 이제 기동되거나 불이행될 수 있는지를 결정한다. 추론 엔진(112)은 그 자신이 더 이상 규칙(116)을 기동 또는 불이행하거나 임의의 보류 중인 규칙(116)을 실행할 수 없을 때까지 이 프로세스를 계속한다.
역방향 추론은 일반적으로 추론 엔진(112)이 어떤 사전 조건이 특정의 결과를 보장하는지 또는 식별된 필드를 분석하는지를 결정하는 것 등의 1차 목표를 해결하려고 시도하는 것을 포함한다. 추론 엔진(112)은 처음에 식별된 목표를 해결할 가능성이 있을 수 있는 규칙(116)을 방문한다. 규칙(116)이 미지의 필드 때문에 보류되어 있는 경우, 추론 엔진(112)은 미지의 필드를 2차 목표의 리스트에 부가한다. 추론 엔진(112)은 이어서 1차 또는 2차 목표 중 어느 것을 해결할 가능성이 있을 수 있는 규칙(116)을 방문한다. 추론 엔진(112)은 1차 목표가 해결되거나 실행할 수 있는 규칙(116)이 더 이상 없을 때까지 이 프로세스를 계속한다.
추론 동작을 수행함에 있어서, 추론 엔진(112)은 규칙 베이스(114) 내의 규칙(116)을 실행한다. 일 실시예에서, 규칙(116)이 실행되는 순서는 적어도 부분적으로 규칙(116)과 관련된 우선순위에 의존한다. 전술한 바와 같이, 규칙(116)은 규칙 세트(130) 내에 존재할 수 있으며, 규칙 세트(130)는 도메인(131) 내에 존재할 수 있다. 클라이언트 애플리케이션(122)이 추론 동안 사용될 도메인(131)을 식별할 때, 추론 엔진(112)은 그 도메인(131)에 포함된 무조건부 규칙 세트(130)를 메모리에 로드한다. 추론 엔진(112)은 이어서 도메인(131) 내에 포함된 규칙(116)이 그의 우선순위에 따라 순서가 정해지도록 보장한다. 그 후에, 추론 엔진(112)은 그 우선순위에 따라 규칙(116)을 실행한다.
일 실시예에서, 추론 엔진(112)은 추론 동작을 수행할 때 단조 추론(monotonic reasoning)을 실시한다. 단조 추론은 추론 엔진(112)이 필드값으로 인해 규칙을 기동 또는 불이행한 경우, 그 필드의 값이 차후의 추론 동안 변경되어서는 안되고 그렇지 않으면 추론 무결성이 손상될 수 있는 것으로 가정하는 데, 그이유는 결과가 상충되는 규칙의 동작을 반영할 수 있기 때문이다. 추론 엔진(112)은 필드의 값이 언제 규칙 전제에 의해 테스트되는지를 검출할 수 있다. 그 필드의 값이 차후에 변경되면, 추론 엔진은 이것을 단조 추론 위반으로 취급하여 사용자에게 이러한 위반을 경고할 수 있다.
필드는 "처음값 필드"(first-valued field)라고 할 수 있는데, 그 이유는 그 필드의 값이 초기값으로 할당된 이후에 변경될 수 없기 때문이다. 다른 필드는 여러번 변경될 수 있는 값을 갖는 "최종값 필드"라고 불릴 수 있다. 최종값 필드의 사용은 예를 들어 규칙 베이스(114)에서 카운터가 필요할 때 유용할 수 있다. 특정의 예로서, 규칙 베이스(114)는 일군의 규칙 세트(130)를 포함할 수 있으며, 각각의 규칙 세트(130)는 납세자가 어떤 세금 공제를 주장할 수 있는지 여부를 결정할 수 있다. 규칙 베이스(114)는 또한 납세자가 주장할 수 있는 공제의 회수를 추적하는 카운터를 포함할 수 있다. 추론 엔진(112)이 각각의 규칙 세트(130)를 실행할 때, 납세자가 공제 자격 요건을 갖춘 경우 카운터가 증가될 수 있다. 이 예에서, 카운터의 유용한 값은 규칙 세트(130) 모두가 실행될 때까지 모르며, 추론 엔진(112)은 카운터를 여러번 증가시킬 수 있다.
처음값 필드와 최종값 필드 간의 구별은 추론 동안 규칙(116)이 실행되는 순서에 영향을 줄 수 있다. 예를 들어, 많은 수의 규칙(116)은 최종값 필드의 값을 변경할 수 있다. 최종값 필드의 값을 변경할 수 있는 규칙(116) 모두가 실행될 때까지, 추론 엔진(112)은 전제에서 최종값 필드를 사용하는 규칙(116)을 기동 또는 불이행할 수 없을 수 있다. 세금 예로 돌아와서, 추론 엔진(112)은 공제의 회수를처리하는 모든 규칙 세트(130)가 실행될 때까지 납세자가 지불해야 하는 세금을 계산하는 임의의 규칙(116)을 강제로 보류시킬 수 있다.
추론 엔진(112)은 또한 보조 규칙(116), 규칙 베이스(114), 및 규칙 세트(130)의 사용을 지원할 수 있다. 보조 규칙 베이스(114)는 추론 동안 1차 규칙 베이스(114) 이외에 사용될 수 있는 규칙 베이스를 나타낸다. 예를 들어, 보험 회사는 그의 본사에 의해 설정된 1차 규칙 베이스(114)를 가질 수 있으며, 각각의 지사는 지역 정책을 정의하는 보조 규칙 베이스(114)를 가질 수 있다. 보조 규칙 베이스(114)를 사용하기 위해, 추론 엔진(112)은 1차 규칙 베이스(114)를 수신하여 이를 메모리에 로드할 수 있다. 1차 규칙 베이스(114) 내의 규칙은 이어서 보조 규칙 베이스 및 서브추론으로부터의 도메인을 그 도메인 내의 규칙보다 우선하여 로드할 수 있다. 일 실시예에서, 1차 규칙 베이스(114)와 보조 규칙 베이스(114) 사이의 통신은 보조 규칙 베이스의 사전 조건 및 사후 조건을 통해 행해질 수 있다. 특정의 실시예에서, 보조 규칙 베이스(114)는 1차 규칙 베이스(114) 내의 임의의 객체를 직접 참조할 수 없으며, 이는 1차 규칙 베이스(114)를 가능한 "악당"(rogue) 보조 규칙 베이스(114)로부터 분리시키는 데 도움이 될 수 있다. 보조 규칙 베이스(114)는 또한 1차 규칙 베이스(114)와는 다른 추론 엔진 인스턴스와 관련될 수 있다. 이 예에서, 1차 규칙 베이스(114)는 보조 규칙 베이스(114)를 구동하는 "애플리케이션"으로서 동작할 수 있다. 보조 규칙 베이스(114)의 관점에서 볼 때, 1차 규칙 베이스(114)는 애플리케이션과 구별할 수 없다. 1차 규칙 베이스(114)는 하나 또는 다수의 보조 규칙 베이스(114)를 로드할 수 있으며, 각각의 보조 규칙 베이스(114)는 이어서 하나 또는 다수의 부가의 보조 규칙 베이스(114)를 로드할 수 있다.
추론 엔진(112)은 또한 직렬화된 추론(serialized inferencing) 및 서브추론을 지원할 수 있다. 직렬화된 추론에서, 추론 엔진(112)은 제1 도메인(131)을 사용하여 추론 동작을 수행하고 일련의 출력값을 생성한다. 추론 엔진(112)은 이어서 그 출력값을 제2 도메인(131)에 대한 입력값으로서 사용하고, 추론 엔진(112)은 제2 도메인(131)을 사용하여 추론 동작을 수행한다. 이것은 예를 들어 제1 도메인(131)이 납세자가 받을 자격이 있는 공제의 회수를 계산하고 제2 도메인(131)이 이 공제 회수에 기초하여 납세자가 지불해야 할 세금을 계산할 때 유용할 수 있다. 서브추론에서, 추론 엔진(112)은 제1 도메인(131)을 사용하여 추론 동작을 수행하고, 제1 도메인(131) 내의 규칙(116) 중 하나가 제2 도메인(131)을 사용하여 추론을 호출할 수 있다. 그 규칙(116)이 기동될 때, 추론 엔진(112)은 제2 도메인(131)을 로드하고 이 제2 도메인(131)을 사용하여 추론 동작을 수행한다. 추론 엔진(112)이 제2 도메인(131)을 사용하여 추론을 완료하면, 추론 엔진(112)은 제1 도메인(131)을 사용하는 것으로 되돌아올 수 있다. 제2 도메인(131) 내의 규칙(116)의 실행은 제1 도메인 내의 규칙(116)을 보류 해제할 수 있으며, 제1 도메인(131)으로 되돌아갈 때 추론 엔진(112)은 이 제1 도메인(131) 내의 규칙을 실행한다.
추론 엔진(112)은 하나 이상의 추론 동작을 수행하기 위한 임의의 하드웨어, 소프트웨어, 펌웨어, 또는 이들의 조합을 포함할 수 있다. 추론 엔진(112)은 예를 들어 프로세서(124)에 의해 실행되는 하나 이상의 소프트웨어 루틴을 포함할 수 있다. 추론 엔진(112)의 예시적인 실시예가 이하에 기술되는 도 6a 내지 도 6c에 도시되어 있다.
클라이언트 애플리케이션(122)과 규칙 베이스 빌더(110) 사이의 통신을 용이하게 하기 위해, 규칙 베이스 빌더(110)는 애플리케이션 프로그램 인터페이스(API)(118)를 포함하거나 다른 방식으로 그와 관련되어 있을 수 있다. 이와 마찬가지로, 추론 엔진(112)은 API(120)를 포함하거나 다른 방식으로 그와 관련되어 있을 수 있다. API(118, 120)에 의해 클라이언트 애플리케이션(122)은 규칙 베이스 빌더(110) 및 추론 엔진(112)의 함수들을 호출할 수 있게 된다. 예를 들어, 클라이언트 애플리케이션(122)은 규칙 베이스(114)의 식별자를 API(118)를 통해 규칙 베이스 빌더(110)에 제공함으로써, 2개의 규칙 베이스(114)를 병합하도록 규칙 베이스 빌더(110)에 지시할 수 있다. 유사한 방식으로, 클라이언트 애플리케이션(122)은 규칙 베이스(114)의 식별자 및 입력값을 API(120)를 통해 추론 엔진(112)에 제공함으로써 추론 엔진(112)의 추론 함수를 호출할 수 있다.
특정의 실시예에서, 규칙 베이스 빌더(110)는 상태 비보전형(stateless) API(118), 상태 보전형(stateful) API(118), 또는 둘다와 관련되어 있을 수 있다. 이와 마찬가지로, 추론 엔진(112)은 상태 비보전형 API(120), 상태 보전형 API(120), 또는 둘다와 관련되어 있을 수 있다. 상태 보전형 API(118, 120)는 서버(102)와 통신하는 클라이언트 애플리케이션(122)을 포함하는 세션 지향 상태 정보를 보유할 수 있다. 상태 정보는 예를 들어 클라이언트 애플리케이션(122)이 동작하고 있는 클라이언트(108)와 서버(102) 사이에서 행해지는 세션의 현재의 상태를 나타낼 수 있다. 상태 비보전형 API(118, 120)는 서버(102)와 통신하는 클라이언트 애플리케이션(122)을 포함하는 세션 지향 상태 정보를 보유하지 않을 수 있다.
상태 비보전형 API(118, 120)는 규칙 베이스 빌더(110) 또는 추론 엔진(112)을 네트워크(106)를 통해 원격 서비스로서 호출하는 데 사용될 수 있다. 상태 보전형 API(118, 120)에 의해 서버(102)는 서버(102)에 액세스하는 클라이언트 애플리케이션(122)에 부가의 기능을 제공할 수 있다. 예를 들어, 상태 보전형 API(118, 120)의 사용에 의해 서버(102)는 "콜백"(callback)을 제공할 수 있다. 콜백 동안, 규칙 베이스 빌더(110) 또는 추론 엔진(112)은 규칙 베이스 구축 또는 추론 동안에 클라이언트 애플리케이션(122)에 부가의 정보를 요청하거나 그에 정보를 제공한다. 이것에 의해 예를 들어 서버(102)는 필드값에 변동이 일어날 때 클라이언트 애플리케이션(122)에 통지할 수 있게 된다.
또한, 콜백에 의해 서버(102)는 서버(102)가 사전 조건값 또는 다른 값을 초기화하기 위해 호출할 수 있는 메소드를 정의할 수 있다. 예를 들어, 서버(102)는 클라이언트 애플리케이션(122)이 특정의 필드에 대한 기지의 값을 제공할 것을 요청할 수 있으며, 이는 "마지막 기회 처리"(last chance processing) 동안 일어날 수 있다. 추론 동안에, 추론 엔진(112)은 추론을 완료하지 못할 수 있는 데, 그 이유는 필드가 분석될 수 없는 미지의 값을 가지고 있기 때문이다. 그러한 일이 있을 때, 추론 엔진(112)은 클라이언트 애플리케이션(122)에 미지의 필드에 대한 값을 제공하도록 요구할 수 있다. 클라이언트 애플리케이션(122)이 그 값을 제공하는 경우, 추론 엔진(112)은 추론 동작을 계속하거나 완료할 수 있다. 다른 실시예에서, 규칙 베이스(114)는 마지막 기회 처리 동안에 사용하기 위한 마지막 기회 값(last chance value)을 제공할 수 있다. 이 실시예에서, 추론 엔진(112)이 추론 동안에 필드의 값을 분석할 수 없을 때, 추론 엔진(112)은 필드에 대한 마지막 기회 값을 사용한다. 추론 엔진(112)이 클라이언트 애플리케이션(122)에 제1 값을 요청하고 클라이언트 애플리케이션(122)이 제1 값을 제공하지 못할 때에 규칙 베이스(114)로부터의 제2 값을 사용하는 경우 등과 같은 때에 이들 방법들의 조합도 사용될 수 있다.
툴(128)은 시스템(100)에서의 규칙 베이스(114)의 개발 및 유지를 보조한다. 예를 들어, 규칙 편집기(132)는 사용자가 규칙(116)을 생성하는 것을 도와준다. 규칙 편집기(132)는 사용자가 규칙(116)을 생성 및 편집할 수 있게 해준다. 특정의 예로서, 규칙 편집기(132)는 사용자가 규칙(116)을 포함하는 XML 문서를 생성하고, 규칙(116)을 포함하는 기존의 XML 문서를 편집하며, 규칙(116)을 포함하는 XML 문서를 삭제할 수 있도록 해준다.
툴(128)은 또한 하나 이상의 변환기(133)를 포함할 수 있다. 변환기(133)는 규칙(116)을 한 포맷에서 다른 포맷으로 변환한다. 예를 들어, 변환기(133)는 자연어를 사용하여 정의된 규칙(116)을 수신하고 그 규칙(116)을 XML 포맷으로 변환할 수 있다. 이것에 의해 사용자는 보다 간단한 표기법 또는 문법을 사용하여 규칙(116)을 입력할 수 있다. 일 실시예에서, 변환기(133)는 Infix를 XML로 변환하는 자바 코딩된 유틸리티 애플리케이션을 포함할 수 있다. 그래픽 편집기 또는 드롭다운 메카니즘 등의 다른 변환기(133)가 사용될 수 있다.
툴(128)은 하나 이상의 분석기(134)를 더 포함할 수 있다. 분석기(134)는 바이너리 또는 소스 규칙 베이스(114)를 검사하고 데이터 객체와 규칙(116) 사이의 관계를 식별한다. 예를 들어, 사용자는 특정의 데이터 객체를 식별할 수 있고, 분석기(134)는 데이터 객체로부터 값을 판독하거나 값을 그 데이터 객체에 기록하는 임의의 규칙(116)을 식별할 수 있다.
툴(128)은 또한 하나 이상의 디버거(136)를 포함할 수 있다. 디버거(136)는 추론 동안에 규칙(116)의 실행을 모니터링한다. 예를 들어, 디버거(136)는 추론 엔진(112)에 제공된 입력값, 추론 동안에 기동된 규칙(116), 규칙(116)이 기동되는 순서, 및 각 규칙(116)이 기동된 이유를 식별할 수 있다. 이 정보는 이어서 행해진 추론 동작을 분석하는 데 사용될 수 있다. 이것은 규칙 베이스(114)가 적절한 결과를 제공하지 않는 경우에 유용할 수 있으며, 사용자는 규칙 베이스(114)가 예상대로 동작하지 않은 이유를 확인하고자 한다.
게다가, 툴(128)은 하나 이상의 테스터(138)를 포함할 수 있다. 테스터(138)는 사용자가 규칙 베이스(114), 규칙 세트(130), 또는 일련의 규칙(116)이 의도한 대로 동작하도록 보장하는 것을 도와준다. 예를 들어, 테스터(138)는 규칙 베이스(114), 일련의 입력값, 및 일련의 예상된 출력값을 식별하는 정보를 수신할 수 있다. 테스터(138)는 이어서 식별된 규칙 베이스(114) 및 입력값을 사용하여 추론 엔진(112)을 호출하고 추론 엔진(112)으로부터 계산된 출력값을 수신하며, 계산된 출력값이 예상된 출력값과 일치하는지를 결정한다. 특정의 실시예에서, 테스터(138)는 식별된 규칙 베이스(114)를 테스트하기 위해 다수의 입력값 세트 및 대응하는 출력값을 포함하는 라이브러리에 액세스할 수 있다.
각각의 툴(128)은 시스템(100)에서 하나 이상의 기능을 수행하는 동작을 하는 임의의 하드웨어, 소프트웨어, 펌웨어, 및 이들의 조합을 포함할 수 있다. 또한, 각각의 툴(128)은 API(118, 120)를 사용하여 규칙 베이스 빌더(110) 또는 추론 엔진(112) 내의 함수들을 호출할 수 있다.
일 실시예에서, 규칙 베이스(114)는 그 자신의 데이터 객체를 정의할 수 있으며, 규칙 베이스(114)는 규칙 베이스(114) 내에 내포된 논리에 의존하는 애플리케이션에 독립적으로 개발되어 사용될 수 있다. 예를 들어, 특수 클라이언트 애플리케이션(122)은 한 그룹의 사용자에 의해 개발될 수 있는 반면, 다른 그룹의 사용자는 클라이언트 애플리케이션(122)에 의해 사용될 규칙 베이스(114)를 개발한다. 특정의 예로서, 규칙 베이스(114) 또는 규칙 베이스(114) 내의 도메인(131)은 사전 조건, 즉 입력값, 그리고 사후 조건, 즉 출력값을 정의할 수 있다. 규칙 베이스(114)를 개발하는 사용자는 사전 조건 및 사후 조건을 식별할 수 있으며, 클라이언트 애플리케이션(122)을 개발하는 사용자는 단순히 클라이언트 애플리케이션(122)이 적절한 사전 조건을 추론 엔진(112)으로 전달하고 추론 엔진(112)으로부터 적절한 사후 조건을 수신하게 설계되도록 할 수 있다. 또한, 규칙 베이스(114)가 규칙 베이스(114)를 사용하여 추론을 기동시키는 클라이언트 애플리케이션(122)과 별도로 그 자신의 데이터 객체를 정의할 수 있기 때문에, 다수의 클라이언트 애플리케이션(122)는 규칙 베이스(114)를 공유할 수 있다. 한 클라이언트 애플리케이션(122)의 추론이 다른 클라이언트 애플리케이션(122)의 추론과 부분적으로 또는 완전히 중복되는 경우에도, 이들 클라이언트 애플리케이션(122)은 동일한 규칙 베이스(114)를 사용하여 추론을 기동시킬 수 있다.
도 1이 추론 서비스를 제공하는 예시적인 시스템(100)을 도시하고 있지만, 시스템(100)에 여러가지 변동이 행해질 수 있다. 예를 들어, 도 1은 서버(102)의 한 예시적인 기능부를 나타내고 있다. 서버(102)의 여러가지 컴포넌트가 결합 또는 생략될 수 있으며, 부가의 컴포넌트가 특정의 필요에 따라 부가될 수 있다. 특정의 예로서, 규칙 베이스 빌더(110) 또는 추론 엔진(112)은 서버(102)로부터 생략될 수 있거나, 규칙 베이스 빌더(110) 및 추론 엔진(112)이 별도의 플랫폼 상에 존재할 수 있다. 또한, 데이터베이스(104)는 시스템(100)에서 필요에 따라 임의의 다른 정보를 저장할 수 있으며, 데이터베이스(104) 및 메모리(126)는 서버(102)에 의해 액세스가능한 임의의 장소 또는 장소들에 존재할 수 있다. 게다가, 서버(102)는 다른 또는 부가의 툴(128)을 지원할 수 있으며, 규칙 베이스(114)는 데이터베이스(104)와 다른 장소에 존재할 수 있다. 게다가, 추론 엔진(112)은 규칙(116)의 정방향 추론 또는 역방향 추론을 지원할 수 있으며, 시스템(100)에서 규칙 베이스 빌더(110) 및 추론 엔진(112)에 대한 다른 인터페이스가 사용될 수 있다.
도 2는 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 다른 예시적인 시스템(200)을 나타낸 예시적인 블록도이다. 예시된 실시예에서, 시스템(200)은 서버(202), 데이터베이스(204), 네트워크(206), 및 하나 이상의 클라이언트(208)를 포함한다.
서버(202), 데이터베이스(204), 네트워크(206), 및 클라이언트(208)는 도 1의 서버(102), 데이터베이스(104), 네트워크(106), 및 클라이언트(108)와 동일하거나 그와 유사할 수 있다. 이 실시예에서, 규칙 베이스 빌더(210) 및 추론 엔진(212)은 서버 애플리케이션(250)의 일부분을 형성한다. 서버 애플리케이션(250)은 네트워크(206)를 통해 클라이언트 애플리케이션(222)에 의해 호출될 수 있는 애플리케이션을 나타낸다. 서버 애플리케이션(250)은 예를 들어 의료 또는 법무 분야와 관련된 애플리케이션 등의 전문가 애플리케이션을 나타낼 수 있다.
동작의 일 측면에서, 서버 애플리케이션(250)은 클라이언트 애플리케이션(222)으로부터 규칙 베이스(214)를 구축하거나 추론 동작을 수행하라는 요청을 수신할 수 있다. 서버 애플리케이션(250)은 규칙 베이스 빌더(210) 또는 추론 엔진(212)의 인스턴스를 생성하고 그 인스턴스가 적당한 동작을 수행할 수 있게 할 수 있다.
예시된 실시예에서, 서버 애플리케이션(250)은 서버 API(252)를 포함한다. 서버 API(252)는 클라이언트 애플리케이션(222)이 서버 애플리케이션(250)의 함수들을 호출할 수 있게 해준다. 예를 들어, 클라이언트 애플리케이션(222)은 규칙 베이스 빌더 인스턴스를 생성하는 서버 애플리케이션(250)의 함수를 호출할 수 있으며, 클라이언트 애플리케이션(222)은 다수의 소스 규칙 베이스(214)를 식별할 수 있다. 서버 애플리케이션(250)은 서버 API(252)를 통해 수신된 정보를 규칙 베이스 빌더 인스턴스로 전달하고 그 규칙 베이스 빌더 인스턴스가 식별된 규칙 베이스(214)를 합병하고 편집할 수 있게 해줄 수 있다. 서버 API(252)는 상태 보전형 인터페이스, 상태 비보전형 인터페이스, 또는 다른 인터페이스나 인터페이스들의 조합을 나타낼 수 있다.
특정의 실시예에서, 서버 애플리케이션(250)은 자바 애플리케이션, J2EE 서블릿, 엔터프라이즈 자바 빈즈(EJB) 애플리케이션, 자바 서버 페이지(JSP) 애플리케이션, 또는 다른 적당한 애플리케이션을 나타낸다. 이 실시예에서, API(218, 220)는 서버 애플리케이션(250)에 의해 로컬 서비스로서 호출될 수 있는 상태 보전형 인터페이스를 포함할 수 있다. 게다가, 서버 애플리케이션(250)은 API(252)를 통해 클라이언트 애플리케이션(222)에 의해 원격 서비스로서 호출될 수 있다.
도 2가 추론 서비스를 제공하는 예시적인 시스템(200)을 나타내고 있지만, 시스템(200)에 여러가지 변경이 행해질 수 있다. 예를 들어, 도 2가 서버(202)의 한 예시적인 기능부를 나타내고 있지만, 서버(202)의 여러가지 컴포넌트가 결합되거나 생략될 수 있으며, 부가의 컴포넌트가 특정의 필요에 따라 부가될 수 있다. 특정의 예로서, 규칙 베이스 엔진(210) 또는 추론 엔진(212)은 서버(202)로부터 생략될 수 있다.
도 3은 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 또다른 예시적인 시스템(300)을 나타낸 예시적인 블록도이다. 예시된 실시예에서, 시스템(300)은 애플리케이션(362)을 실행하는 호스트 컴퓨터(360)를 포함한다.
예시된 실시예에서, 호스트(360)는 공지의 MS-DOS, PC-DOS, OS-2, MAC-OS, WINDOWS, UNIX, LINUX 또는 다른 적절한 오퍼레이팅 시스템 중 임의의 것으로 실행될 수 있다. 호스트(360)는 데스크톱 컴퓨터, 랩톱 컴퓨터, 서버 컴퓨터, 또는 다른 적당한 컴퓨팅 또는 통신 장치를 나타낼 수 있다. 호스트(360)는 입력 장치(364), 출력 장치(366), 랜덤 액세스 메모리(RAM)(368), 판독 전용 메모리(ROM)(370), CD-ROM, 하드 드라이브, 또는 다른 자기 또는 광학 저장 장치(372), 및 하나 이상의 프로세서(374)를 포함할 수 있다. 입력 장치(364)는 예를 들어 키보드, 마우스, 그래픽 태블릿, 터치 스크린, 압력 감지 패드, 조이스틱, 광학 펜, 마이크로폰, 또는 다른 적당한 입력 장치를 포함할 수 있다. 출력 장치(366)는 예를 들어 비디오 디스플레이, 프린터, 디스크 드라이브, 플로터, 스피커, 또는 다른 적당한 출력 장치를 포함할 수 있다.
도 3의 점선 내의 아이템은 시스템(300)의 관련 컴포넌트의 예시적인 기능 동작 및 데이터 구성을 나타낸다. 예시된 실시예에서, 호스트(360)는 애플리케이션(362) 및 데이터베이스(304)를 포함한다. 데이터베이스(304)는 도 1 및 도 2의 데이터베이스(104) 및 데이터베이스(204)와 동일하거나 그와 유사할 수 있다.
애플리케이션(362)은 규칙 베이스 구축 및 추론 기능을 사용하는 전문가 애플리케이션 또는 다른 애플리케이션을 나타낼 수 있다. 예시된 예에서, 애플리케이션(362)은 규칙 베이스 빌더(310), 추론 엔진(312), 및 기타 프로그래밍 논리(374)를 포함한다. 규칙 베이스 빌더(310)는 도 1 및 도 2의 규칙 베이스 빌더(110) 및 규칙 베이스 빌더(210)와 동일하거나 그와 유사할 수 있다. 또한, 추론 엔진(312)은 도 1 및 도 2의 추론 엔진(112) 및 추론 엔진(212)과 동일하거나 그와 유사할 수 있다. 게다가, 규칙 베이스 빌더(310) 및 추론 엔진(312)은 API(318, 320)를 포함할 수 있지만 포함할 필요가 없다.
부가의 프로그래밍 논리(374)는 규칙 베이스 빌더(310) 및 추론 엔진(312)을 호출하는 애플리케이션(362)에서의 논리를 나타낼 수 있다. 예를 들어, 논리(374)는 사용자로부터 환자 증상을 수신하고 그 증상을 추론 엔진(312)으로 전달하는 의료 전문가 프로그램을 구현할 수 있다. 추론 엔진(312)이 추론을 수행한 후에, 논리(374)는 진단을 사용자가 이용가능하게 되도록 할 수 있다. 임의의 다른 적당한 기능이 애플리케이션(362) 내의 논리(374)에 의해 수행될 수 있다.
특정의 실시예에서, 애플리케이션(362)은 자바 애플리케이션을 나타낼 수 있다. 또한, API(318, 320)는 애플리케이션(362) 내의 로컬 서비스로서 호출될 수 있는 상태 보전형 인터페이스를 포함할 수 있다.
도 3이 추론 서비스를 제공하는 예시적인 시스템(300)을 나타내고 있지만, 시스템(300)에 여러가지 변경이 행해질 수 있다. 예를 들어, 도 3이 호스트(360)의 한 예시적인 기능부를 나타내고 있지만, 호스트(360)의 여러가지 컴포넌트가 결합되거나 생략될 수 있으며, 부가의 컴포넌트들이 특정의 필요에 따라 부가될 수 있다. 특정의 예로서, 규칙 베이스 빌더(310) 또는 추론 엔진(312)은 호스트(360)로부터 생략될 수 있다. 또한, 도 3이 호스트(360)를 데스크톱 컴퓨터로서 도시하고 있지만, 다른 컴퓨팅 또는 통신 장치가 사용될 수 있다. 게다가, 도 1 내지 도 3이 여러가지 예시적인 오퍼레이팅 시스템을 도시하고 있지만, 규칙 베이스 빌더(110, 210, 310) 및 추론 엔진(112, 212, 312)이 임의의 다른 적당한 환경에서 사용될 수 있다.
도 4는 본 발명의 일 실시예에 따른 예시적인 규칙 베이스 아키텍처(400)를나타낸 예시적인 블록도이다. 이 실시예에서, 규칙 베이스 아키텍처(400)는 규칙 베이스 레벨 요소(402), 도메인 레벨 요소(404), 및 규칙 세트 레벨 요소(406)를 포함하고 있다. 규칙 베이스 아키텍처(400)가 도 1의 시스템(100)에 관하여 기술될 수 있지만, 규칙 베이스 아키텍처(400)는 다른 시스템과 함께 사용될 수 있으며, 다른 규칙 베이스 아키텍처가 시스템(100)에 의해 사용될 수 있다.
도 4에서, 규칙 베이스 레벨 요소(402)는 클래스(408), 초기화 메소드(410), 연관(412), 제약(414), 및 도메인(416)을 포함한다. 클래스(408)는 정보를 저장하는 데이터 객체 및 데이터 객체 내의 정보를 처리할 수 있는 메소드 객체를 정의한다. 예를 들어, 클래스(408)는 사람의 이름, 사람의 나이, (배우자가 있는 경우) 그 이름에 대한 필드들을 포함하는 Person 객체를 정의할 수 있다. 다른 예로서, 클래스(408)는 Person의 인스턴스를 분석하고, 그 사람의 나이를 65의 값과 비교하며, 그 비교에 기초하여 그 사람이 은퇴 나이에 도달하였는지 여부를 식별해주는 플래그를 설정하는 Retirement 메소드를 정의할 수 있다.
초기화 메소드(410)는 서버(102)가 여러가지 객체에서의 필드들을 어떻게 초기화하는지를 정의한다. 예를 들어, 초기화 메소드(410)는 일련의 데이터 객체 내의 임의의 정수 필드를 0의 값으로 초기화하고 임의의 스트링 필드를 NULL 값으로 초기화할 수 있다. 초기화 메소드(410)는 또한 최대 나이 필드를 120의 값으로 설정하는 것 등에 의해 상수값을 설정할 수 있다.
연관(association)(412)은 필드들 사이의 관계를 정의한다. 예를 들어, Person 인스턴스는 다른 Person 인스턴스의 배우자일 수 있으며, 연관은 Person 인스턴스들 간의 일대일 관계를 나타낼 수 있다. 다른 예로서, Person 인스턴스는 다수의 Duck 인스턴스를 소유할 수 있으며, 연관은 Person 인스턴스와 Duck 인스턴스 사이의 일대다 관계를 나타낼 수 있다. 일 실시예에서, 관련 필드들은 2개의 클래스(408)에서와 같이 아키텍처(400)의 동일 레벨에 있다. 특정의 실시예에서, 연관은 2개의 역할에 의해 정의된다. 각각의 역할은 클래스 및 그 클래스가 가지고 있는 인스턴스 참조 필드를 지정한다. 하나의 객체 내의 인스턴스 참조 필드는 다른 객체를 가리키거나 다른 방식으로 그를 식별한다. 예를 들어, 소유권 연관은 Person 클래스의 Owns 필드에 대한 한 역할 및 Duck 클래스의 IsOwnedBy 필드에 대한 다른 역할을 정의할 수 있다.
제약(414)은 필드에 할당된 값들에 관해 참(true)이어야만 하는 조건을 정의한다. 제약(414)은 또한 그 조건이 위반되는 경우 행해지는 동작을 정의한다. 예를 들어, 제약(414)은 사람의 나이를 저장하는 필드가 0 내지 120의 값을 가져야만 하도록 지정할 수 있다. Person의 인스턴스가 800의 나이를 할당받은 경우, 나이 필드와 관련된 제약(414)이 위반되며, 그 제약(414)에 의해 정의된 동작이 실행될 수 있다. 동작은 추론 엔진(112)이 추론을 중단하는 것, 대체 값을 사용하는 것, 또는 상태 보전형 인터페이스(120)를 사용하여 클라이언트 애플리케이션(122)에 정확한 값을 요청하는 것을 포함할 수 있다.
도메인(416)은 규칙들을 도메인이라고 하는 서로 다른 그룹으로 분할한다. 각각의 도메인(416)에서, 규칙 베이스는 초기화 메소드(418), 연관(420), 제약(422), 클래스(424), 및 규칙 세트(426)를 포함할 수 있다. 초기화 메소드(418),연관(420), 제약(422), 및 클래스(424)는 초기화 메소드(410), 연관(412), 제약(414) 및 클래스(408)과 동일하거나 그와 유사할 수 있다. 이들 도메인 레벨 요소(404)는 규칙 베이스 레벨 요소(402)와 다른 범위를 가질 수 있다. 예를 들어, 연관(412)이 규칙 베이스 레벨에 존재하는 2개의 클래스 사이의 관계를 정의할 수 있는 반면, 연관(420)은 도메인 레벨에 존재하는 클래스들 사이의 관계를 정의할 수 있다. 어떤 실시예들에서, 사전 조건 및 사후 조건은 메인 레벨에서 정의될 수 있다.
규칙 세트(426)는 또한 규칙들을 규칙 세트라고 하는 서로 다른 그룹으로 분할한다. 각각의 규칙 세트(426)에서, 규칙 베이스는 초기화 메소드(428), 연관(430), 제약(432), 클래스(434), 및 규칙(436)을 포함할 수 있다. 이들 규칙 세트 레벨 요소(406)는 대응하는 규칙 베이스 레벨 요소(402) 및 도메인 레벨 요소(404)와 다른 범위를 가질 수 있다. 예를 들어, 연관(430)은 규칙 세트 레벨에 존재하는 클래스들 사이의 관계를 정의할 수 있다.
규칙(436)은 입력값을 분석하고 출력값을 생성하는 데 사용되는 논리를 정의한다. 규칙(436)은 클래스(408, 424, 434)를 사용하여 생성된 객체 등의 데이터 객체 내의 정보를 처리할 수 있다. 규칙(436)은 또한 데이터 객체 내의 필드들에 값을 할당하기 위해 메소드 객체에 정의된 메소드를 사용할 수 있다. 일 실시예에서, 규칙(436)은 결정 트리 규칙 및 패턴 정합 규칙을 포함한다. 예시적인 패턴 정합 규칙은 이하에 설명되는 도 9a에 도시되어 있다. 예시적인 결정 트리 규칙은 역시 이하에 기술되는 도 9b에 도시되어 있다.
도 4가 규칙 베이스 아키텍처(400)의 일례를 나타내고 있지만, 규칙 베이스 아키텍처(400)에 여러가지 변경이 이루어질 수 있다. 예를 들어, 부가의 요소가 아키텍처(400)의 여러가지 레벨에 부가될 수 있으며, 현재의 요소는 특정의 필요에 따라 생략될 수 있다.
도 5a 및 도 5b는 본 발명의 일 실시예에 따른 예시적인 규칙 베이스 빌더를 나타낸 예시적인 블록도이다. 구체적으로 말하면, 도 5a는 상태 비보전형 규칙 베이스 빌더(500)를 나타내고, 도 5b는 상태 보전형 규칙 베이스 빌더(550)를 나타낸다. 도 5a 및 도 5b가 도 1의 시스템(100)에 관하여 기술될 수 있지만, 규칙 베이스 빌더(500, 550)는 다른 시스템과 함께 사용될 수 있다.
도 5a에서, 상태 비보전형 규칙 베이스 빌더(500)는 애플리케이션이 여러가지 함수 호출(502)을 호출할 수 있게 해주며, 함수 호출(502)은 여러가지 데이터 구조(504)를 입력 및 출력으로서 사용한다. 예시된 실시예에서, 함수 호출(502)은 생성자 함수(constructor function)(506) 및 빌드 함수(build function)(508)를 포함한다. 생성자 함수(506)는 규칙 베이스 구축 서비스를 요청하는 애플리케이션이 사용하기 위한 규칙 베이스 빌더(500)의 인스턴스를 생성한다. 예를 들어, 클라이언트 애플리케이션(122)은 네트워크(106)를 통해 생성자 함수(506)를 호출할 수 있다. 서버(102)는 생성자 함수(506)를 실행하고 규칙 베이스 빌더(500)의 인스턴스를 초기화하여 규칙 베이스 빌더 인스턴스를 생성한다. 클라이언트 애플리케이션(122)로부터의 부가의 함수 호출이 그 규칙 베이스 빌더 인스턴스로 보내진다. 다수의 클라이언트 애플리케이션(122)이 규칙 베이스 구축 서비스를 요청하는 경우,서버(102)는 규칙 베이스 빌더(500)의 다수의 인스턴스를 생성하기 위해 생성자 함수(506)를 실행할 수 있다.
빌드 함수(508)는 규칙 베이스 빌더 인스턴스로 하여금 규칙 베이스, 규칙, 및 규칙 세트 등의 여러가지 입력을 통합된 규칙 베이스로 병합하도록 한다. 빌드 함수(508)는 바이너리 규칙 베이스(510), 스트링(512a-512b), 및 콘트롤 객체(513)를 입력으로서 받을 수 있다. 입력 스트링(512a)은 XML 스트링을 나타내며, 이는 컴파일되지 않은, 즉 소스 규칙, 규칙 베이스 및 규칙 세트를 포함된다. 입력 스트링(512b)은 URL을 나타내며, 이는 컴파일된 또는 컴파일되지 않은 규칙, 규칙 베이스, 및 규칙 세트의 원격 장소를 식별해준다. 통합된 규칙 베이스의 구축 이전에, 규칙 베이스 빌더 인스턴스는 URL에 의해 식별된 원격 장소에 액세스하고 그 장소에 있는 임의의 규칙, 규칙 베이스 또는 규칙 세트를 검색할 수 있다.
서버(102)는 콘트롤 객체(513)에 포함된 값을 사용하여 빌드 함수(508)를 실행할 때 규칙 베이스 빌더 인스턴스가 수행해야만 하는 여러가지 함수들을 식별한다. 예를 들어, 값(528a)은 애플리케이션 인터페이스 문서(522)를 생성해야하는지 여부를 규칙 베이스 빌더 인스턴스에 알려준다. 값(528b)은 바이너리 규칙 베이스(516)를 생성해야하는지 여부를 규칙 베이스 빌더 인스턴스에 알려준다. 값(528c)은 로드 맵(load map)(524)을 생성해야하는지 여부를 규칙 베이스 빌더 인스턴스에 알려준다. 값(528d-528f)은 메시지(526)에 기술되어 있을 수 있는 여러가지 유형의 이벤트를 추적해야하는지 여부를 규칙 베이스 빌더 인스턴스에 알려준다. 이 예에서, 이벤트는 상위 레벨, 즉 L1 이벤트, 하위 레벨, 즉 L2 이벤트, 및 로더 이벤트(loader event)로 분할될 수 있다. 또한, 이벤트의 다른 분할도 사용될 수 있다.
빌드 함수(508)가 호출될 때, 규칙 베이스 빌더 인스턴스는 입력 규칙, 규칙 베이스, 및 규칙 세트를 결합하여 출력 결과(514)를 생성하려고 시도할 수 있다. 출력 결과(514)는 통합된 바이너리 규칙 베이스(516)를 포함할 수 있다. 규칙 베이스(516)는 입력이 통합된 규칙 베이스로 병합되어 컴파일될 때 형성되는 규칙 베이스를 나타낸다. 출력 결과(514)는 또한 에러 카운트(518) 및 경고 카운트(520)를 포함할 수 있다. 에러 카운트(518)는 통합된 규칙 베이스(516)를 생성할 때 식별되는 에러의 수를 식별해주며, 경고 카운트(520)는 발생된 경고의 수를 식별해준다.
출력 결과(514)는 애플리케이션 인터페이스 문서(522) 및 로드 맵(524)를 더 포함할 수 있다. 애플리케이션 인터페이스 문서(522)는 규칙 베이스(516)에 의해 사용되는 입력값 및 규칙 베이스(516)에 의해 생성되는 출력값을 기술한다. 애플리케이션 인터페이스 문서(522)는 바이너리 규칙 베이스(516)가 개발되고 있는 애플리케이션과 연계하여 사용될 때 유용할 수 있다. 애플리케이션 인터페이스 문서(522)는 규칙 베이스(516)와 관련된 입력 및 출력을 기술할 수 있으며, 애플리케이션을 제작하는 개발자는 그 애플리케이션이 적절한 입력을 규칙 베이스(516)로 전송하고 규칙 베이스(516)로부터 적절한 출력을 예상하도록 할 수 있다.
로드 맵(load map)(524)은 규칙 베이스(516) 내의 여러가지 객체를 식별한다. 로드 맵(524)은 또한 규칙 베이스(516) 내의 객체와 그 객체에 영향을 주는규칙 베이스(516) 내의 임의의 규칙들 사이의 관계를 식별한다. 예를 들어, 로드 맵(524)은 주어진 객체에 있어서 그 객체로부터 값을 판독하거나 그 객체에 값을 기록하는 임의의 규칙을 식별할 수 있다. 로드 맵(524)은 규칙 베이스 보고서를 생성하기 위해 시스템(100) 내의 다른 컴포넌트에 의하는 등에 의해 추가로 처리될 수 있다. 규칙 베이스 보고서는 규칙 베이스(516) 내의 규칙, 규칙들 간의 상호작용, 또는 다른 적당한 정보를 식별할 수 있다.
출력 결과(514)는 또한 일련의 0개 이상의 메시지(526)를 포함할 수 있다. 메시지(526)는 통합된 규칙 베이스(516)의 구축 동안에 생성된 에러 메시지 및 경고 메시지를 포함할 수 있다. 메시지(526)는 또한 통합된 규칙 베이스(516)의 생성 또는 컴파일 동안에 일어나는 여러가지 이벤트를 식별하는 데 사용되는 메시지 등의 추적 메시지를 포함할 수 있다.
동작의 한 측면에서, 출력 결과(514)의 내용은 값(528)에 따라 변할 수 있다. 예를 들어, 값(528a)이 거짓(false)의 값을 갖는 경우, 출력 결과(514)는 애플리케이션 인터페이스 문서(522)를 포함하지 않게 된다. 이와 유사하게, 값(528c)이 참의 값을 갖는 경우, 출력 결과(514)는 로드 맵(524)을 포함하게 된다. 값(528b)이 거짓의 값을 갖는 경우, 출력 결과(514)는 바이너리 규칙 베이스를 포함하지 않게 된다. 이것은 예를 들어 애플리케이션 인터페이스 문서(522) 또는 로드 맵(524)이 기존의 바이너리 규칙 베이스에 필요한 경우 유용할 수 있다.
도 5b에서, 상태 보전형 규칙 베이스 빌더(550)에 의해 애플리케이션은 입력 및 출력으로서 데이터 구조(554)를 사용하는 여러가지 함수 호출(552)을 호출할 수있다. 예시된 실시예에서, 함수 호출(552)는 생성자 함수(556)를 포함한다. 생성자 함수(556)는 규칙 베이스 구축 서비스를 요청하는 애플리케이션이 사용하기 위한 규칙 베이스 빌더(550)의 인스턴스를 생성한다. 생성자 함수(556)는 2개의 입력값, 즉 추적 마스크(tracemask)(568) 및 메시지 핸들러(570)를 포함한다. 추적 마스크(568)에 제공되는 값은 클라이언트 애플리케이션(122)에 제공되는 추적 메시지의 상세 레벨(level of detail)을 결정한다. 상세 레벨은 추적 메시지가 제공되는지 여부와, 제공되는 경우 어느 환경에서 추적 메시지가 제공되어야 하는지를 식별할 수 있다. 이하에 기술하는 바와 같이, 메시지 핸들러(570)는 클라이언트 애플리케이션(122)과 규칙 베이스 빌더 인스턴스 사이에서 정보를 전달하기 위해 사용되는 핸들러를 식별한다. 메시지 핸들러(570)는 예를 들어 규칙 베이스 빌더(550)가 콜백 동작을 수행하고 클라이언트 애플리케이션(122)에 정보를 요청할 수 있게 해줄 수 있다.
규칙 베이스 추가 함수(558a-558c)는 통합된 규칙 베이스로 병합될 여러가지 규칙 베이스, 규칙, 및 규칙 세트를 식별한다. 규칙 베이스 추가 함수(558a)는 통합된 규칙 베이스를 생성할 때 사용될 바이너리 규칙 베이스, 규칙 또는 규칙 세트를 받는다. 규칙 베이스 추가 함수(558b)는 통합된 규칙 베이스를 생성할 때 사용될 소스, 즉 컴파일되지 않은 규칙 베이스, 규칙 또는 규칙 세트를 받는다. 규칙 베이스 추가 함수(558c)는 통합된 규칙 베이스를 생성할 때 사용될 규칙 베이스, 규칙 또는 규칙 세트의 원격 장소를 식별하는 URL을 받는다. 각각의 규칙 베이스, 규칙 또는 규칙 세트가 규칙 베이스 추가 함수(558a-558c)를 사용하여 추가될 때,그것은 이전에 추가된 규칙 베이스, 규칙 및 규칙 세트와 병합된다. 컴파일 함수(560)는 바이너리 규칙 베이스를 생성하기 위해 병합된 규칙 베이스를 컴파일한다.
애플리케이션 인터페이스 문서 생성 함수(562)는 애플리케이션 인터페이스 문서를 생성한다. 바이너리 규칙 베이스 생성 함수(564)는 출력 스트림을 통해 바이너리 규칙 베이스를 클라이언트 애플리케이션(122)에 제공하고, 클라이언트 애플리케이션(122)은 그 출력 스트림을 버퍼 또는 다른 메모리에 저장할 수 있다. 로드 맵 생성 함수(566)는 규칙 베이스에 대한 로드 맵을 생성한다.
상태 보전형 규칙 베이스 빌더(550)가 세션 정보를 유지하기 때문에, 규칙 베이스 빌더(550)에 의해 지원되는 여러가지 함수 호출(552)은 클라이언트 애플리케이션(122)에 의해 개별적으로 호출될 수 있다. 예를 들어, 클라이언트 애플리케이션(122)을 사용하는 사용자는 기존의 바이너리 규칙 베이스에 대한 애플리케이션 인터페이스 문서를 원할 수 있다. 클라이언트 애플리케이션(122)은 규칙 베이스 추가 함수(558a) 중 하나를 사용하여 바이너리 규칙 베이스를 빌더(550)에 제공할 수 있다. 이어서, 클라이언트 애플리케이션(122)은 함수(562)를 호출함으로써 애플리케이션 인터페이스 문서를 생성할 수 있다. 사용자가 나중에 로드 맵을 생성하기로 결정한 경우, 클라이언트 애플리케이션(122)은 동일한 규칙 베이스 빌더 인스턴스를 사용하여 로드 맵을 생성하기 위해 함수(566)를 호출할 수 있다.
도 5a 및 도 5b가 예시적인 규칙 베이스 빌더(500, 550)를 나타내고 있지만, 규칙 베이스 빌더(500, 550)에 여러가지 변경이 행해질 수 있다. 예를 들어, 여러가지 함수 호출(502, 552)이 특정의 필요에 따라 빌더(500, 550)로부터 생략될 수있다. 또한, 부가의 함수 호출(502, 552)이 빌더(500, 550)에 부가될 수 있다. 게다가, 도 5a 및 도 5b가 함수 호출(502,552)에서 사용되는 예시적인 데이터 구조(504, 554)를 나타내고 있지만, 다른 또는 부가의 데이터 구조가 사용될 수 있다.
도 6a 내지 도 6c는 본 발명의 일 실시예에 따른 예시적인 추론 엔진을 나타낸 예시적인 블록도이다. 구체적으로는, 도 6a는 상태 비보전형 추론 엔진(600)을 나타내고, 도 6b 및 도 6c는 상태 보전형 추론 엔진(650)을 나타낸다. 도 6a 내지 도 6c가 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 추론 엔진(600, 650)은 다른 시스템들과 함께 사용될 수 있다.
도 6a에서, 상태 비보전형 추론 엔진(600)은 애플리케이션이 입력 및 출력으로서 데이터 구조(604)를 사용하는 함수 호출(602)을 호출할 수 있게 해준다. 예시된 실시예에서, 함수 호출(602)은 애플리케이션이 사용하기 위한 추론 엔진(600)의 인스턴스를 생성하는 생성자 함수(606)를 포함한다. 함수 호출(602)은 또한 2개의 추론 함수(608, 610)를 포함한다.
추론 함수(608)는 엔진(600)에 입력으로서 제공되는 규칙 베이스(612) 및 콘트롤 객체(613)을 사용하여 엔진(600)에 의한 추론을 호출한다. 규칙 베이스(612)는 도 4에 도메인(416)으로 도시된 바와 같이 다수의 도메인을 포함할 수 있다. 그 결과, 추론 함수(608)는 또한 도메인 이름(614)을 입력으로서 수신하며, 이 경우 도메인 이름(614)은 추론 동안 어느 도메인(416)을 사용할지를 식별한다. 추론 함수(608)는 또한 추론 동안 생성되어 사용될 임의의 동적 인스턴스(616)의 식별번호를 수신한다. 추론 함수(608)는 또한 도메인 이름(614)에 의해 식별되는 도메인과 함께 사용될 부가의 규칙을 나타내는 임의의 조건부 규칙 세트(618)를 수신한다. 게다가, 추론 함수(608)는 사전 조건값(620a-620b)을 입력으로서 수신할 수 있다. 사전 조건값(620)은 식별된 규칙 베이스(612) 내의 적절한 필드에 할당되어 추론 동안 사용된다. 사전 조건값(620)은 사전 조건값 문서(620a) 또는 사전 조건값 어레이(620b)의 형태를 가질 수 있다.
콘트롤 객체(613)는 추론 엔진 인스턴스에 의해 수행되는 동작을 제어하기 위해 서버(102)에 의해 사용되는 값(632a-632f)을 정의한다. 값(632a)은 필드값 어레이(626b)를 생성하도록 추론 엔진 인스턴스에 지시하는 반면, 값(632b)은 필드값 문서(626a)를 생성하도록 추론 엔진 인스턴스에 지시한다. 값(632c)은 규칙 스냅샷(630)을 생성하도록 추론 엔진 인스턴스에 지시한다. 값(632d-632f)은 메시지(628)에 기술될 수 있는 여러가지 유형의 이벤트를 추적하도록 추론 엔진 인스턴스에 지시한다. 이 예에서, 이벤트는 L1 이벤트, L2 이벤트, 및 추론 이벤트로 분할될 수 있다. 이벤트의 다른 분할도 사용될 수 있다.
추론 함수(610)는 추론 함수(608)와 동일한 입력의 대부분을 수신한다. 추론 함수(608)가 바이너리 규칙 베이스(612)를 수신하는 반면, 추론 함수(610)는 추론 동안 사용될 규칙 베이스의 장소를 식별하는 URL 입력(622)을 수신한다.
추론 함수(608, 610) 둘다는 출력 결과(624)를 반환한다. 출력 결과(624)는 일련의 0개 이상의 필드값(626a-626d)을 포함할 수 있다. 필드값(626)은 추론 동안 추론 엔진(600)에 의해 사전 조건에 할당된 값들을 나타낸다. 값(632a, 632b)에 따라, 필드값(626)은 필드값 문서(626a) 또는 필드값 어레이(626b)의 형태를 가질 수 있다. 출력 결과(624)는 또한 일련의 0개 이상의 메시지(628)를 포함할 수 있다. 메시지(628)는 추론 동작 동안 생성되는 에러 메시지, 경고 메시지, 또는 추적 메시지를 포함할 수 있다.
출력 결과(624)는 또한 규칙 스냅샷(630)을 포함할 수 있다. 규칙 스냅샷(630)은 특정의 시점에서 규칙의 현재의 상태에 관한 정보를 제공한다. 규칙 스냅샷(630)은 규칙, 규칙과 관련된 임의의 규칙 세트, 규칙의 우선순위, 규칙과 관련된 규칙 유형, 규칙의 상태, 및 규칙을 보류시키는 규칙 내의 임의의 필드를 식별할 수 있다.
도 6b 및 도 6c에서, 상태 보전형 추론 엔진(650)은 애플리케이션이 입력 및 출력으로서 데이터 구조(654)를 사용하는 여러가지 함수 호출(652)을 호출할 수 있게 해준다. 예시된 실시예에서, 생성자 함수(654a-654c)는 추론 엔진(650)의 인스턴스를 생성한다. 구체적으로는, 함수(654a)는 입력 스트림을 사용하여 정의되는 바이너리 규칙 베이스를 사용하는 추론 엔진 인스턴스를 생성하고, 함수(654b)는 URL을 사용하여 정의되는 바이너리 규칙 베이스를 사용하는 추론 엔진 인스턴스를 생성한다. 이하에 기술되는 바와 같이, 다수의 추론 엔진 인스턴스가 동일한 규칙 베이스를 사용할 수 있으며, 함수(654c)는 동일한 규칙 베이스를 사용하고 있는 다른 추론 엔진 인스턴스에 기초하여 하나의 추론 엔진 인스턴스를 생성한다.
도메인 함수(656a-656b)는 추론 동안 어느 도메인(416)이 사용되는지를 제어한다. 도메인 함수(656a)는 추론 동안 사용될 도메인(416)을 식별하고, 도메인 함수(656b)는 도메인(416)을 제거하며, 따라서 그 도메인은 추론 동안 더 이상 사용되지 않는다. 입력 함수(658a-658b)는 사전 조건에 대한 값을 추론 엔진(650)에 제공한다. 구체적으로는, 함수(658a)는 특정의 사전 조건에 대한 값을 제공하는 반면, 함수(658b)는 현재의 도메인(416)과 관련된 일련의 사전 조건에 대한 값을 제공한다. 조건부 규칙 세트 함수(660)는 현재의 도메인(416)에서 사용하기 위한 부가의 규칙 세트를 추론 엔진(650)에 제공한다. 동적 인스턴스 함수(662)는 추론 동안 사용될 동적 인스턴스를 생성한다. 추론 함수(664)는 현재의 도메인(416)에 포함된 규칙을 사용하여 추론 프로세스를 시작한다. 출력 함수(666)는 추론 엔진(650)에 의해 계산되는 사후 조건에 대한 값을 제공한다. 구체적으로는, 함수(666a)는 일련의 사후 조건에 대한 값을 포함하는 출력값 문서를 생성하고, 함수(666b)는 특정의 사후 조건의 값을 제공하며, 함수(666c)는 모든 사전 조건 및 사후 조건의 값을 제공한다. 스냅샷 함수(668)는 현재의 도메인에 대한 규칙 스냅샷을 생성하여 출력한다.
상태 보전형 추론 엔진(650)은 세션 정보를 유지하기 때문에, 부가의 함수가 추론 엔진(650)에 의해 제공될 수 있다. 예를 들어, 추론 엔진(650)은 추론 동안 값들이 일정한 필드에 어떻게 할당되는지를 결정하는 데 사용되는 설명 서비스를 제공할 수 있다. 설명 시작 함수(begin explanation function)(670)는 입력으로서 필드의 식별자를 수신하고 최종값을 그 필드에 할당한 규칙을 식별한다. 규칙 기동 설명 함수(explain rule firing function)(672)는 설명 시작 함수(670)에 의해 식별된 규칙을 사용하여 무엇이 그 규칙을 기동시켰는지를 결정한다. 이것은 규칙을 기동시킨 임의의 필드 및 그 필드의 값을 식별하는 단계를 포함할 수 있다. 필드 분석 설명 함수(explain field resolution function)(674)는 규칙 기동 설명 함수(672)에 의해 식별되는 필드를 사용하여 값이 그 필드에 어떻게 할당되었는지를 결정한다. 이들 함수(670-674)에 의해 클라이언트 애플리케이션(122)은 추론 동안 값들이 어떻게 왜 필드에 할당되었는지를 추적할 수 있다. 이들 함수(670-674)는 서버(102)가 추론 동안에 수행되는 여러가지 단계를 모니터링하고 아카이브(archive)할 것을 요구할 수 있다. 이 모니터링이 추론 동안 부가의 프로세싱 요구사항을 부과할 수 있기 때문에, 추적 함수(676a-676b)에 의해 클라이언트 애플리케이션(122)은 서버가 추론 동안 수행되는 단계를 언제 모니터링해야 하는지를 지정할 수 있다. 이것에 의해 클라이언트 애플리케이션(122)은 이 부가의 프로세싱이 언제 필요한지를 제어할 수 있다.
상태 보전형 추론 엔진(650)의 사용은 또한 서버(120)가 진리값 유지(truth maintenance, "TM") 함수를 클라이언트 애플리케이션(122)에 제공할 수 있게 해줄 수 있다. 추론 동안, 기지의 값을 필드에 할당하는 것은 일련의 결과를 트리거할 수 있다. 예를 들어, 필드가 기지의 값을 가지고 있지 않기 때문에 규칙이 이전에 보류되었던 경우, 그 필드에 값을 할당하는 것은 추론 엔진(650)이 보류 해제되도록 하여 그 규칙을 기동시킬 수 있다. 기동된 규칙은 이어서 다른 필드를 분석할 수 있고, 이 필드는 이어서 추론 엔진(650)이 보류 해제되도록 하여 부가의 규칙을 기동시킨다. 진리값 유지는 클라이언트 애플리케이션(122)이 필드에의 값의 할당을 철회 또는 번복할 수 있게 해줌으로써 그 할당의 결과를 철회하는 기능을 말한다. 이것은 진리값 유지 기능이 "만약"형 추론(what-if type reasoning)에 유용할수 있음을 의미한다. 특정의 예로서, 대출 승인 애플리케이션에서, 차용자는 대출 금액, 대출 기간 및 이자율 등의 몇가지 서로 다른 변수로 시험해보고자 할 수 있다. 이들 상황에서, 가설적 시나리오의 컬렉션만큼 많은 "대답"이 없을 수 있으며, 그 대답은 대체 시나리오로 시험해본 후라야만 알게 될 수 있다.
진리값 유지를 지원하기 위해, TM값 설정 함수(set TM value function)(678)는 특정의 필드가 철회가능 값(retractable value)을 할당받을 수 있음을 나타낸다. 철회가능 값은 부정될 수 있는 할당 동안에 할당된 값을 나타낸다. 클라이언트 애플리케이션(122)은 다수의 값을 선택된 필드에 할당할 수 있다. TM 값 확인 함수(confirm TM value function)(680)는 특정의 필드의 현재의 값을 그 필드의 철회불가능 값(non-retractable value)으로서 설정한다. 철회불가능 값은 부정될 수 없는 할당 동안에 할당된 값을 나타낸다. TM 값 철회 함수(retract TM value function)(682)는 필드를 다시 그의 마지막 철회불가능 값으로 철회한다. 동작을 설명하면, 클라이언트 애플리케이션(122)은 5개의 철회가능 값을 필드에 할당할 수 있다. 클라이언트 애플리케이션(122)은 이어서 철회불가능 값을 필드에 할당할 수 있으며, 그에 뒤이어 7개의 추가의 철회가능 값이 오게 된다. 이 예에서, 그 필드에 할당된 마지막 7개의 값은 철회될 수 있지만, 처음 5개는 그렇게 할 수 없다. 철회불가능 값의 존재는 철회불가능 값이 할당되기 이전에 추론 엔진(650)이 할당된 어떤 값도 철회하지 못하도록 한다. 대출 예로 되돌아가서, 선택된 필드는 차용자가 받고자 하는 대출 금액을 나타낼 수 있다. 어떤 실험 동안, 그 필드는 다수의 철회가능 값을 할당받을 수 있다. 결국, 사용자는 그 차용자가 받을 수 있는최대 금액을 식별할 수 있다. 그 최대 금액은 철회불가능 값으로서 할당될 수 있다. 부가의 철회가능 값을 그 필드에 할당하는 부가의 실험이 행해질 수 있다. 이들 부가의 값 중 어느 것은 대출 금액으로서 채택될 수 있거나, 그 값들은 철회불가능 값으로서 식별된 마지막 최대 대출 금액으로 철회될 수 있다.
이들 함수 이외에, 핸들러 함수(684a-684b)는 여러가지 통신 핸들러를 추론 엔진 인스턴스에 등록한다. 이하에 기술하는 바와 같이, 핸들러 함수에 의해 추론 엔진 인스턴스는 추론 동안 클라이언트 애플리케이션(122)과 통신할 수 있게 된다. 리셋 함수(686)는 추론 엔진 인스턴스를 초기 상태로 리셋한다. 이것은 예를 들어 추론 엔진(650)이 모든 필드값을 미지의 상태로 리셋하고, 모든 동적 인스턴스를 삭제하며, 모든 도메인을 팝핑하고, 임의의 규칙 베이스 레벨 초기화 메소드(410)를 실행하는 것을 포함할 수 있다.
도 6a 내지 도 6c가 예시적인 추론 엔진(600, 650)을 예시하고 있지만, 추론 엔진(600, 650)에 여러가지 변경이 행해질 수 있다. 예를 들어, 여러가지 함수 호출(602, 652)이 특정의 필요에 따라 추론 엔진(600, 650)으로부터 생략될 수 있다. 또한, 부가의 함수 호출(602, 652)이 추론 엔진(600, 650)에 부가될 수 있다. 게다가, 도 6a 내지 도 6c가 함수 호출(602, 652)과 함께 사용되는 예시적인 데이터 구조(604, 654)를 예시하고 있지만, 다른 또는 부가의 데이터 구조가 사용될 수 있다.
도 7은 본 발명의 일 실시예에 따른 예시적인 코어 객체(700)를 나타내는 예시적인 블록도이다. 코어 객체(700)는 규칙 베이스 빌더(500, 550) 및 추론 엔진(600, 650) 둘다에 의해 공유되는 객체를 나타낸다. 도 7이 도 2의 시스템(200)과 관련하여 설명될 수 있지만, 코어 객체(700)는 다른 시스템과 함께 사용될 수 있다.
도 7에서, 코어 객체(700)는 규칙 베이스 빌더(500, 550) 및 추론 엔진(600, 650)과 통신하기 위해 여러가지 데이터 구조(702)를 사용한다. 데이터 구조(702)는 메시지 핸들러(704)를 포함한다. 메시지 핸들러(704)는 클라이언트 애플리케이션(222)와 통신하는 데 사용되는 핸들러를 나타낸다. 예를 들어, 메시지 핸들러(704)는 규칙 베이스 빌더(500, 550) 또는 추론 엔진(600, 650)으로부터 메시지(706)을 가로채는 데 사용될 수 있다. 이것에 의해 메시지 핸들러(704)는 규칙 베이스 빌더(500, 550) 또는 추론 엔진(600, 650)에 의해 생성된 에러, 경고, 추적 또는 다른 메시지(706)를 포착할 수 있다. 데이터 구조(702)는 또한 예외(708)를 포함한다. 예외(708)는 규칙 베이스 구축 또는 추론 동안에 검출된 에러를 식별한다.
데이터 구조(702)는 또한 추적 마스크(710)를 포함할 수 있다. 추적 마스크(710)는 서버(102)에 의한 서로 다른 함수의 실행을 어떻게 추적할지를 나타낸다. 추적 마스크(710)에 제공된 정수값은 클라이언트 애플리케이션(222)에 제공된 추적 메시지의 상세 레벨을 결정한다. 상세 레벨은 추적 메시지가 제공되는지 여부와, 제공되는 경우 어느 환경에서 추적 메시지가 제공되어야만 하는지를 식별한다. 예를 들어, 0의 값은 서버(202)로 하여금 어떤 추적 메시지도 제공하지 않도록 할 수 있으며, 1의 값은 서버(202)로 하여금 보다 광범위한 추적 메시지를 제공하도록 할수 있고, 더 높은 값은 서버(202)로 하여금 보다 구체적인 추적 메시지를 제공하도록 할 수 있다. 이 예에서, 이벤트는 추론 이벤트, L1 이벤트, L2 이벤트, 및 로더 이벤트로 분할된다. 다른 이벤트 분할도 사용될 수 있다.
도 7이 코어 객체(700)의 일례를 나타내고 있지만, 코어 객체(700)에 여러가지 변경이 행해질 수 있다. 예를 들어, 임의의 다른 또는 부가의 데이터 구조(702)가 사용될 수 있다.
도 8은 본 발명의 일 실시예에 따른 예시적인 인터페이스(800)를 나타낸 예시적인 블록도이다. 이 실시예에서, 인터페이스(800)는 초기화 핸들러(802) 및 변경 핸들러(804)를 포함한다. 도 8이 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 인터페이스(800)는 다른 시스템과 함께 사용될 수 있다.
초기화 핸들러(802)에 의해 클라이언트 애플리케이션(122)은 필드값을 초기화할 수 있다. 예를 들어, 추론 엔진(650)은 추론 동안 규칙을 실행하려고 시도할 수 있지만, 그 규칙은 미지의 필드를 포함할 수 있다. 추론 엔진(650)은 그 규칙을 보류시키고 미지의 필드가 나중에 분석되는지를 알아볼 수 있다. 규칙을 보류시키는 대신에 또는 그에 부가하여, 추론 엔진(650)은 초기화 핸들러(802)를 호출하고 클라이언트 애플리케이션(122)가 미지의 필드에 대한 값을 제공하기를 원하는지 여부를 클라이언트 애플리케이션(122)에 물어본다. 클라이언트 애플리케이션(122)이 값을 제공하면, 추론 엔진(650)은 그 값을 사용하여 추론을 계속할 수 있다.
초기화 핸들러(802)의 사용은 규칙 베이스에 대해 많은 수의 사전 조건이 존재하는 경우에 유용할 수 있다. 예를 들어, 규칙 베이스는 1,000개의 사전 조건을 가질 수 있다. 초기화 핸들러(802)를 사용하지 않으면, 클라이언트 애플리케이션(122)은 추론이 시작되기 전에 1,000개의 사전 조건 모두에 대한 입력값을 제공하게된다. 초기화 핸들러(802)를 사용하면, 클라이언트 애플리케이션(122)은 사전 조건 중 일부에 대한 입력값을 제공할 수 있으며, 추론 엔진(650)은 그 값들을 사용하여 추론을 완료하려고 시도할 수 있다. 추론 엔진(650)이 추론을 완료할 수 없고 더 많은 사전 조건에 대한 값을 필요로 하는 경우, 클라이언트 애플리케이션(122)은 초기화 핸들러(802)를 사용하여 필요한 사전 조건에 대한 입력값을 제공할 수 있다.
변경 핸들러(804)에 의해 서버(102)는 추론 엔진(650)이 여러가지 데이터 객체를 수정할 때 클라이언트 애플리케이션(122)에 알려줄 수 있다. 예를 들어, 함수(806)는 필드값이 변경될 때 클라이언트(122)에 알려준다. 함수(808)는 객체가 생성될 때 클라이언트 애플리케이션(122)에 통지하며, 함수(810)는 객체가 삭제될 때 클라이언트 애플리케이션(122)에 통지한다.
많은 수의 사후 조건이 추론 동안 추론 엔진(650)에 의해 계산되고 있을 때 변경 핸들러(804)의 사용이 유용할 수 있다. 예를 들어, 규칙 베이스는 1,000개의 사후 조건을 가질 수 있다. 변경 핸들러(804)를 사용하지 않으면, 클라이언트 애플리케이션(122)은 추론 엔진(650)으로부터 일련의 1,000개의 출력값을 수신하기 전에 추론 엔진(650)이 추론을 완료할 때까지 기다릴 필요가 있을 수 있다. 변경 핸들러(804)를 사용하는 경우, 클라이언트 애플리케이션(122)은 사후 조건 중 하나가 값을 할당받을 때마다 통지받을 수 있다. 이와 같이, 클라이언트 애플리케이션(122)은 추론이 완료되지 않았을 때에도 각각의 개별적인 사후 조건이 값을 할당받을 때를 알고 있다.
도 8이 예시적인 인터페이스(800)를 나타내고 있지만, 인터페이스(800)에 여러가지 변경이 행해질 수 있다. 예를 들어, 임의의 다른 또는 부가의 통신 핸들러가 사용될 수 있다. 또한, 각각의 핸들러(802, 804)는 임의의 다른 또는 부가의 함수를 지원할 수 있다.
도 9a 및 도 9b는 본 발명의 일 실시예에 따른 예시적인 유형의 규칙을 나타내는 예시적인 블록도이다. 구체적으로 말하면, 도 9a는 패턴 정합 규칙(900)을 나타내고, 도 9b는 결정 트리 규칙(950)을 나타낸다. 다른 또는 부가의 유형의 규칙도 사용될 수 있다. 게다가, 도 9a 및 도 9b가 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 규칙(900, 950)은 다른 시스템과 함께 사용될 수 있다.
도 9a에서, 패턴 정합 규칙(900)은 전제(premise)(902), 동작(action)(904), 및 바인드 섹션(bind section)(906)을 포함한다. 전제(902)는 동작(904)이 실행되어야만 하는지 여부를 결정하는 조건을 나타낸다. 전제(902)는 예를 들어 하나 이상의 표현식(908)을 포함할 수 있다. 서버(102)는 전제(902) 내의 표현식(908)을 검사하고 표현식(908)이 참인지 거짓인지를 결정할 수 있다. 그 결과를 사용하여, 서버(102)는 이어서 표현식(908)이 참인 경우 동작(904)을 실행함으로써 규칙(900)을 기동시키거나, 표현식(908)이 거짓인 경우 규칙을 불이행하거나, 표현식(908)의 값이 결정될 수 없는 경우 규칙(900)을 보류시킬 수 있다.
동작(904)은 규칙(900)의 전제(902)가 참인 경우 서버(102)에 의해 수행될 하나 이상의 동작을 나타낸다. 동작(904)은 예를 들어 서버(102)가 특정의 값을 필드에 할당해야만 함을 나타낼 수 있다. 동작(904)은 또한 서버(102)로 하여금 함수를 실행하거나 다른 규칙 베이스 도메인에 걸쳐 서브추론을 호출하도록 할 수 있다.
바인드 섹션(906)은 서버(102)에 의해 모니터링될 데이터 객체를 식별한다. 규칙(900)이 패턴 정합 규칙이기 때문에, 이 규칙(900)은 전제(902)를 만족시키는 인스턴스 또는 객체의 전체 컬렉션에 적용될 수 있다. 바인드 섹션(906)은 하나 이상의 바인드 변수(910)를 포함한다. 추론 엔진(112)은 바인드 변수(910)를 바인드 클래스의 하나 이상의 후보 인스턴스와 관련시킨다. 추론 엔진(112)은 이어서 후보 인스턴스 중 임의의 것이 전제(902)를 만족하는지를 결정하기 위해 전제(902)에 대해 바인드 변수(910)를 적용한다. 이와 같이, 추론 엔진(112)은 후보 인스턴스가 추가의 관심을 받을 만한 것인지를 결정한다. 후보 인스턴스 중 임의의 것이 전제(902)를 만족하는 경우, 서버(102)는 그 후보 인스턴스들을 사용하여 동작(904)을 실행한다.
예시된 예에서, P의 바인드 변수(910)는 Person 클래스와 관련되어 있는 반면, D의 다른 바인드 변수(910)는 Duck 클래스와 관련되어 있다. 규칙(900)은 사람이 오리보다 나이가 많고 사람이 다른 오리를 소유하지 않을 때 사람을 나타내는 Person 객체를 오리를 나타내는 Duck 객체와 관련시키는 동작을 한다. 서버(102)는 Person 객체를 P 변수(910)에 바인딩시키고, Duck 객체를 D 변수(910)에 바인딩시킨다. 바인드 변수(910)를 사용하여, 서버(102)는 기존의 Person 및 Duck 객체를 검사하고 어느 것이라도 전제(902)를 만족하는지를 결정한다. 어느 것이라도 전제(902)를 만족시키는 경우, 서버(102)는 규칙(900)의 동작(904)을 그 데이터 객체들 각각에 적용한다. 동작(904)은 사람에 의해 소유된 오리의 수를 증가시키고 사람을 오리와 관련시킨다.
특정의 실시예에서, 서버(102)는 패턴 정합 규칙(900)을 준비 상태로 유지하고 패턴 정합 규칙(900)을 불이행 또는 보류시키지 않는다. 다른 특정의 실시예에서, 패턴 정합 규칙(900)은 단일 기동 규칙(single-fire rule)으로서 동작할 수 있다. 이 실시예에서, 추론 엔진(112)은 임계 개수의 객체가 바인드 변수(910)에 바인딩될 때까지 기다린다. 임계 개수가 만족되면, 추론 엔진(112)은 그 객체들을 사용하여 패턴 정합 규칙(900)을 한번 실행한다. 실행된 패턴 정합 규칙(900)은 이어서 추론 엔진(112)에 의해 무시될 수 있다.
규칙 베이스가 많은 수의 객체를 포함할 수 있기 때문에, 서버(102)는 하나이상의 알고리즘을 사용하여 패턴 정합 규칙(900)을 처리하는 효율을 향상시킬 수 있다. 예를 들어, 서버(102)는 리트(Rete) 알고리즘을 사용할 수 있다. 리트 알고리즘을 사용하여, 서버(102)는 객체가 언제 생성, 수정 또는 삭제되는지를 검출한다. 서버(102)는 이어서 그 생성, 수정 또는 삭제에 의해 영향을 받는 필드를 사용하는 전제(902)를 갖는 임의의 패턴 정합 규칙(900)을 실행한다. 서버(102)는 위치를 알아낸 임의의 패턴 정합 규칙(900)의 전제(902)를 검사하고, 전제(902)가 만족되는 경우 동작(904)을 실행할 수 있다.
일 실시예에서, 제1 패턴 정합 규칙(900)의 동작(904)을 적용할 때, 서버(102)는 객체들을 생성, 수정 또는 삭제할 수 있다. 그 객체들은 동일한 패턴 정합 규칙(900) 또는 다른 패턴 정합 규칙(900)에 의해 영향받을 수 있다. 그 결과, 동작(904)은 새로운 객체들을 하나 이상의 규칙(900)에 바인딩시킬 수 있다.
도 9b에서, 결정 트리 규칙(950)은 평가 서술문(952), 즉 서브트리를 포함하며, 그에 뒤이어서 2개 이상의 트리 노드(954a-954e)가 오게 된다. 각각의 서브트리는 그 서브트리가 규칙과 용이하게 관련될 수 있도록 명명될 수 있다. 평가 서술문(952)은 표현식(956)의 값을 평가하여 결정한다. 표현식(956)의 계산된 값에 기초하여, 트리 노드(954) 중 하나가 실행된다.
각각의 트리 노드(954)는 케이스 서술문(958) 또는 otherwise(그 밖의 경우) 서술문(960)을 포함하고, 그에 뒤이어서 수행될 동작이 오게 된다. 케이스 서술문(958)은 표현식(956)의 가능한 값 또는 가능한 값의 범위를 식별한다. 표현식(956)의 값이 케이스 서술문(958)의 값과 일치하거나 그 값의 범위내에 속하는 경우, 케이스 서술문(958)과 관련된 트리노드(954)가 실행된다. otherwise 서술문(960)은 다른 트리 노드(954)가 실행될 수 없을 경우 실행되는 트리 노드(954)를 식별한다.
트리 노드(954)에서 수행될 동작은 또한 부가의 서브트리를 포함할 수 있다. 예를 들어, 트리 노드(954a)는 다른 평가 서술문(962) 및 2개의 트리 노드(964a-964b)를 포함한다. 이와 같이, 규칙(950)은 서브트리의 계층 구조의 레이어들로 분할될 수 있고, 서버(102)는 수행될 해당 동작에 도달하기 위해 그 서브트리들을순회할 수 있다.
예시된 예에서, 표현식(956)은 나이를 계산하고, 트리 노드들(954) 중 하나가 계산된 나이에 기초하여 선택된다. 계산된 나이가 기지의 값을 갖는 경우, 트리 노드(954a, 954b, 954c)가 그 값에 따라 선택될 수 있다. 그 값이 미지의 값을 갖는 필드에 의존하는 때와 같이 계산된 나이를 알 수 없는 경우, 트리 노드(954d)가 선택된다. 계산된 나이는 알 수 있지만 트리 노드(954a-954c)에서의 케이스 서술문의 범위 밖에 있는 경우, 트리 노드(960)가 선택될 수 있다.
특정의 실시예에서, 서버(102)는 결정 트리 규칙(950)에 대해 JIT(just-in-time) 메모리 할당 방식을 사용할 수 있다. JIT 할당 방식에서, 서버(102)는 결정 트리 규칙(950)의 일부분만을 메모리(126) 등의 메모리에 로드한다. 로드되는 규칙(950)의 일부분에 의해 서버(102)는 순회할 트리 노드(954)를 식별할 수 있게 된다. 서버(102)가 순회할 트리 노드(954)를 식별한 후에, 서버(102)는 그 트리 노드(954)의 내용을 메모리에 로드한다. 로드된 트리 노드(954)가 부가의 서브트리(964)를 포함하는 경우, 서버(102)는 서버(102)가 순회할 그 다음 서브트리(964)를 선택할 수 있게 해주는 규칙(950)의 일부분만을 로드한다. 그 다음 서브트리(964)가 선택된 후에, 서버(102)는 그 서브트리(964)의 내용을 메모리에 로드한다. 이 프로세스는 서버(102)가 규칙(950)을 기동 또는 불이행할 때까지 계속되며, 그 때 서버(102)는 규칙(950)에 의해 사용되는 메모리를 해방(release)시킬 수 있다. JIT 할당 방식의 사용은 결정 트리 규칙(950)에 의해 사용되는 메모리량을 감소시킬 수 있다. 결정 트리 규칙(950)이 수백 또는 수천개의 내장 서브트리를 포함할수 있기 때문에, JIT 할당 방식의 사용은 결정 트리 규칙(950)을 처리하기 위한 메모리 요구사항을 감소시키는 데 도움이 될 수 있다.
일 실시예에서, 서버(102)는 어쩔 수 없이 결정 트리 규칙(950)을 보류시킬 수 있다. 예를 들어, 서버(102)는 추론 동안에 트리 노드(954b)를 선택할 수 있지만, 필드 Fact3가 미지의 값을 가질 수 있다. 이 예에서, 서버(102)가 규칙(950) 을 보류시키는 이유는 서버(102)가 규칙(950)의 실행을 완료할 수 없기 때문이다. 특정의 실시예에서, 서버(102)는 규칙(950)의 실행을 보류 해제 및 완료하기 위해 정확한 재시작(pinpoint restart)을 수행한다. 규칙(950)이 보류되어 있을 때, 서버(102)는 규칙(950)의 스냅샷을 포착할 수 있다. 그 스냅샷은 규칙(950)에섯 ㅏ용되는 필드에 대한 값 및 규칙(950)이 보류되도록 만든 서술문의 정확한 위치 등의 규칙(950)의 컨텍스트를 식별한다. 상기 예에서, 스냅샷이 평가 서술문(966)의 위치를 식별할 수 있는 이유는 그것이 규칙(950)이 보류되도록 만든 서술문이기 때문이다. 규칙(950)이 보류되도록 만든 필드가 기지의 값을 할당받은 경우, 서버(102)는 규칙(950)을 보류 해제시키고 스냅샷에 저장된 위치에서 규칙(950)을 실행하기 시작한다. 이것에 의해 서버(102)는 많은 수의 서브트리를 포함할 수 있는 결정 트리 규칙(950)을 보다 효율적으로 보류 및 보류 해제시킬 수 있게 된다.
도 9a 및 도 9b가 예시적인 규칙(900, 950)을 나타내고 있지만, 규칙(900, 950)에 여러가지 변경이 행해질 수 있다. 예를 들어, 규칙(900)은 다수의 바인드 변수(910)을 포함할 수 있으며, 규칙(950)은 다수의 서브트리를 포함할 수 있다. 또한, 다른 또는 부가의 유형의 규칙들이 사용될 수 있다.
도 10은 본 발명의 일 실시예에 따른 규칙 베이스를 공유하기 위한 예시적인 메모리 구성을 나타낸 예시적인 블록도이다. 구체적으로 설명하면, 도 10은 도 1의 서버(102)에 사용하기 위한 메모리(1026)를 나타낸 것이며, 여기서 다수의 클라이언트 애플리케이션(122)이 추론 동안 동일한 규칙 베이스(114)를 사용한다. 이 실시예에서, 메모리(1026)는 규칙 베이스(114)의 판독 전용 이미지(1050) 및 하나 이상의 클라이언트 고유 정보 블록(1052)을 포함한다. 도 10이 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 메모리(1026)는 다른 시스템과 함께 사용될 수 있다.
판독 전용 이미지(1050)는 규칙 베이스(114) 내의 규칙들(116)의 복사본을 나타낸다. 서버(102)는 규칙 베이스(114)를 데이터베이스(104) 또는 다른 장소로부터 메모리(1026)에 로드함으로써 판독 전용 이미지(1050)를 생성할 수 있다. 규칙 베이스(114)가 서버(102)에 의해 사용되는 그 자신의 데이터 객체들을 정의할 수 있기 때문에, 규칙 베이스(114)는 임의의 다른 애플리케이션에 연계될 수 없다. 그 결과, 규칙 베이스(114)는 다수의 클라이언트 애플리케이션(122)에 의해 동시에 사용될 수 있다. 특정의 실시예에서, 판독 전용 이미지(1050)는 임의의 클라이언트 고유 정보를 갖지 않는 규칙 베이스(114)의 복사본을 포함한다.
실제 사전 조건값 및 사후 조건값 등의 클라이언트 고유 정보는 클라이언트 고유 정보 블록(1052)에 저장될 수 있다. 클라이언트 고유 정보 블록(1052)은 클라이언트 고유 정보(1054) 및 포인터(1056)를 포함한다. 클라이언트 고유 정보(1054)는 사전 조건값, 사후 조건값, 보류 중인 규칙(116)의 스냅샷, 및 클라이언트 애플리케이션(122)에 고유한 임의의 다른 정보를 나타낸다. 포인터(1056)는 클라이언트 고유 정보(1054)와 관련된 판독 전용 이미지(1056)를 가리킨다.
동작의 한 측면에서, 클라이언트 애플리케이션(122)이 규칙 베이스(114)를 사용하여 추론을 요청할 때, 서버(102)는 그 규칙 베이스(114)의 판독 전용 이미지(1050)가 메모리(1026)에 이미 존재하는지 여부를 결정할 수 있다. 존재하지 않는 경우, 서버(102)는 규칙 베이스(114)를 메모리(1026)에 판독 전용 이미지(1050)로서 로드할 수 있다. 추론 엔진(112)은 이어서 판독 전용 이미지(1050)를 사용하여 추론 동작을 수행할 수 있다. 클라이언트 애플리케이션(122)이 이미 메모리(1026)에 판독 전용 이미지(1050)로서 로드되어 있는 규칙 베이스(114)를 사용하여 추론을 요청하는 경우, 추론 엔진(112)은 이전에 생성된 판독 전용 이미지(1050)를 사용하여 추론 동작을 수행할 수 있다. 추론 동안, 특정의 클라이언트 애플리케이션(122)에 대해 저장될 임의의 값은 클라이언트 고유 정보 블록(1052)의 클라이언트 고유 정보(1054)에 위치한다. 이와 같이, 서버(102)는 추론이 서로 다른 입력값을 필요로 하고 규칙(116)이 서로 다른 순서로 실행될 때에도, 다수의 클라이언트 애플리케이션(122)에 대한 추론 동작을 수행하기 위해 동일한 규칙 베이스(114)를 사용할 수 있다.
일 실시예에서, 전술한 바와 같은 메모리(1026)의 사용은 제한될 수 있다. 예를 들어, 특정의 실시예에서, 보조 규칙(116), 규칙 베이스(114) 및 규칙 세트(130)는 다수의 추론 엔진 인스턴스 사이에서 공유될 수 없다. 이 실시예에서, 보조 규칙(116), 규칙 베이스(114), 및 규칙 세트(130)의 이미지는 다수의 추론 엔진인스턴스에 의해 사용될 수 없다.
도 10이 다수의 클라이언트 애플리케이션(122) 사이에서 규칙 베이스(114)를 공유하기 위해 구성된 메모리(1026)의 일례를 나타내고 있지만, 메모리(1026)에 여러가지 변경이 행해질 수 있다. 예를 들어, 각각의 클라이언트 고유 정보 블록(1052)은 별도의 메모리 구조에 저장될 수 있다. 또한, 클라이언트 애플리케이션(122)이 규칙 베이스(114)를 공유할 수 있게 해주거나 해주지 않는 다른 메모리 구성이 사용될 수 있다.
도 11a 내지 도 11d는 본 발명의 일 실시예에 따른 통합된 규칙 베이스로 병합되는 예시적인 규칙 베이스 컴포넌트를 나타낸 예시적인 블록도이다. 구체적으로는, 도 11a 내지 도 11c는 규칙 베이스 컴포넌트(1150a-1150c)를 나타내고, 도 11d는 통합된 규칙 베이스 컴포넌트(1150d)를 나타낸다. 도 11a 내지 도 11d가 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 규칙 베이스 컴포넌트(1150)는 다른 시스템과 함께 사용될 수 있다.
도 11a에서, 컴포넌트(1150a)는 규칙(1152)을 나타낸다. 규칙(1152)은 도메인(1156)의 일부를 형성하는 규칙 세트(1154)에 포함되어 있다. 규칙(1152)은 Father과 Mother라고 명명된 Person 클래스의 2개의 인스턴스(1158)를 참조한다.
도 11b에서, 컴포넌트(1150b)는 도메인(1156)에 포함되어 있는 Person 클래스(1160)의 부분 선언을 나타낸다. 클래스(1160)는 Name이라고 하는 필드(1162)의 선언을 포함한다. 컴포넌트(1150b)는 또한 Father 인스턴스(1158a)의 선언을 포함한다.
도 11c에서, 컴포넌트(1150c)는 도메인(1156)에 포함되어 있는 Person 클래스(1160)의 다른 부분 선언을 나타낸다. 클래스(1160)는 또한 Age라고 하는 필드(1164)의 선언을 포함한다. 컴포넌트(1150c)는 또한 Mother 인스턴스(1158b)의 선언을 포함한다.
규칙 베이스 빌더(110)는 단계들에서 동작을 수행함으로써 컴포넌트(1150a-1150c)를 병합할 수 있다. 일 실시예에서, 제1 단계에서 규칙 베이스 빌더(110)는 데이터 객체 및 논리 객체를 정의하는 클래스들을 수집하기 위해 컴포넌트(1150a-1150c)를 검사한다. 이 단계 동안에, 규칙 베이스 빌더(110)는 컴포넌트(1150)에 의해 정의되는 클래스들 모두를 식별하는 하나 이상의 내부 데이터 구조를 생성할 수 있다. 두번째 단계에서, 규칙 베이스 빌더(110)는 클래스 선언들 사이의 일관성 및 완전성을 보장하도록 돕기 위해 단계 1로부터의 내부 데이터 구조를 파싱한다. 예를 들어, 클래스가 Brother라고 하는 인스턴스에 작용하는 규칙을 정의하는 경우, 규칙 베이스 빌더(110)는 Brother라고 하는 인스턴스가 컴포넌트(1150)에 의해 생성되도록 할 수 있다. 세번째 단계에서, 규칙 베이스 빌더(110)는 바이너리 규칙 베이스(114)를 생성하기 위해 파싱된 데이터 구조를 컴파일할 수 있다.
첫번째 단계 동안, 규칙 베이스 빌더(110)에 의해 검사된 컴포넌트들(1150)은 각각 클래스의 일부분을 정의할 수 있다. 예시된 예에서, 컴포넌트(1150b, 1150c)는 Person 클래스(1160)의 서로 다른 부분을 정의한다. 그 결과, 병합 프로세스의 첫번째 단계 동안, 규칙 베이스 빌더(110)는 각각의 컴포넌트(1150)가 분석될 때 만나게 되는 클래스 선언을 추적한다. 2개의 컴포넌트(1150)가 단일 클래스의 부분들을 정의하는 경우, 규칙 베이스 빌더(110)는 그 선언들을 단일 클래스 선언으로 결합한다. 이것은 규칙 베이스(1150d) 내의 Person 클래스(1160)의 완전한 선언을 나타내고 있는 도 11d에서 볼 수 있다.
규칙 베이스 빌더(110)가 컴포넌트(1150b)를 검사한 다음에 컴포넌트(1150c)를 검사하는 것으로 가정하면, 규칙 베이스 빌더(110)는 컴포넌트(1150b)에 액세스하고 컴포넌트(1150b)가 클래스(1160)의 선언을 포함하는 것으로 결정한다. 규칙 베이스 빌더(110)는 이전에 만났던 선언들 모두를 포함하는 내부 데이터 구조를 검사하고, 클래스(1160)가 이전에 검사된 컴포넌트(1150)에 의해 선언되지 않았던 것으로 결정하며, 클래스(1160) 및 필드(1162)를 내부 데이터 구조에 부가한다. 규칙 베이스 빌더(110)는 계속하여 컴포넌트(1150c)로 가서 클래스(1160)의 다른 선언을 찾아낸다. 규칙 베이스 빌더(110)는 그의 내부 데이터 구조를 검사하고, 클래스(1160)가 이전에 검사된 컴포넌트(1150)에 선언되었던 것으로 결정하며, 필드(1164)를 데이터 구조 내의 클래스(1160)에 부가한다. 이것은 도 11d에 도시한 클래스(1160)의 전체 선언을 생성하며, 이는 필드(1162, 1164)를 갖는 클래스(1160)의 단일 선언을 포함한다. 이와 유사하게, 규칙 베이스 빌더(110)는 컴포넌트(1150)에서 만난 인스턴스(1158)의 각각의 선언을 찾아내어 도 11d에 도시한 바와 같이 단일 선언을 형성할 수 있다.
도 4와 관련하여 전술한 바와 같이, 규칙 베이스(114)는 규칙 베이스(114)의 다수의 레벨(규칙 베이스 레벨, 도메인 레벨, 또는 규칙 세트 레벨)에서 클래스를 정의할 수 있다. 또한, 동일한 이름을 갖는 클래스가 규칙 베이스(114) 내의 서로다른 레벨에 존재할 수 있다. 그 때문에, 병합 프로세스의 단계 1 동안에 생성된 내부 데이터 구조는 클래스의 범위를 지정한다. 예를 들어, 도 11d에서, 클래스(1160)는 도메인(156) 내에 존재하는 것으로 도시되어 있다. 다른 Person 클래스가 규칙 세트(1154)에 선언되는 경우, 그 결과 얻어지는 규칙 베이스(1150d)는 규칙 세트(1154)의 일부처럼 보이는 다른 클래스 정의를 포함하게 된다. 또다른 Person 클래스가 규칙 베이스 레벨에서 선언되는 경우, 그 결과 얻어지는 규칙 베이스(1150d)는 도메인(1156)의 외부에 규칙 베이스(1150d)의 일부처럼 보이는 또다른 클래스 정의를 포함하게 된다.
첫번째 단계 동안, 규칙 베이스 빌더(110)는 동일한 필드를 포함하는 클래스 선언을 검출할 수 있다. 어떤 경우에, 다수의 컴포넌트(1150)가 Person 클래스(1160)가 Name 필드(1162)를 포함하는 것으로 선언할 때와 같이, 선언은 서로 일치할 수 있다. 다른 경우에서, 선언은 서로 충돌할 수 있으며, 규칙 베이스 빌더(110)는 그 충돌을 해결하지 못할 수 있다. 예를 들어, 컴포넌트(1150c)는 Age 필드(1164)를 숫자로서 정의할 수 있는 반면, 다른 컴포넌트(1150)는 Age 필드(1164)를 스트링으로서 정의한다. 이들 선언은 서로 충돌하며, 규칙 베이스 빌더(110)는 에러 메시지를 생성할 수 있다. 또다른 경우에, 선언은 서로 충돌할 수 있지만, 규칙 베이스 빌더(110)에 의해 해결될 수 있다. 예로서, 컴포넌트(1150c)는 Age 필드(1164)를 숫자로서 정의할 수 있는 반면, 다른 컴포넌트(1150)는 Age 필드(1164)를 0 내지 120의 값으로 제한된 숫자로서 정의한다. 규칙 베이스 빌더(110)는 이 예에서 제약을 갖는 선언이 되는 더 제한된 선언을 사용함으로써 이 충돌을해결할 수 있다.
일 실시예에서, 규칙 베이스 빌더(110)는 병합 프로세스의 첫번째 단계 동안 컴포넌트(1150)를 방문할 때 정의된 순서를 사용하지 않는다. 그 결과, 규칙 베이스 빌더(110)는 클래스(1160)의 구조가 정의되기 전에 그 클래스(1160)의 인스턴스(1158)를 사용하는 규칙(1152)을 처리할 수 있다. 특정의 실시예에서, 규칙 베이스 빌더(110)에 의해 사용되는 내부 데이터 구조는 규칙 베이스 병합 프로세스 동안 전방 선언(forward declaration)의 사용을 감축하거나 제거하는데 도움이 된다.
통합된 규칙 베이스(1150d)를 생성한 후에, 규칙 베이스 빌더(110)는 규칙 베이스(1150d)를 파싱한다. 예를 들어, 규칙 베이스 빌더(110)는 Father 및 Mother가 선언된 인스턴스인지 여부를 결정하기 위해 규칙(1152)을 분석한다. 규칙 베이스 빌더(110)는 또한 Father 및 Mother 인스턴스와 관련된 클래스가 Age 필드를 포함하는지 여부를 결정한다. 규칙 베이스 빌더(110)는 또한 Age 필드와 관련된 데이터 유형이 규칙(1152)에서 수행되는 동작에 적절한지 여부를 결정한다. 이 예에서, Age의 값은 65의 값과 비교되어지고, 따라서 규칙 베이스 빌더(110)는 Age가 숫자 데이터 유형으로서 선언되었는지 여부를 결정한다. 게다가, 규칙 베이스 빌더(110)는 병합 결과를 검사하고 선언되었던 각각의 메소드가 또한 관련 구현을 갖는지 여부를 결정한다. 이 예에서, 메소드는 하나의 규칙 베이스 컴포넌트(1150)에서 선언될 수 있으며, 그 컴포넌트(1150)의 개발자는 다른 컴포넌트(1150)의 개발자가 메소드 구현을 제공할 수 있는 것으로 가정하였다. 어느 개발자도 그 메소드가 어떻게 구현되어야 하는지를 정의하지 않은 경우, 규칙 베이스 빌더(110)는 에러 메시지를 생성할 수 있다. 규칙 베이스 빌더(110)는 통합된 규칙 베이스(1150d)를 파싱하기 위해 다른 또는 부가의 조치를 취할 수 있다.
세번째 단계 동안, 규칙 베이스 빌더(110)는 파싱된 규칙 베이스(1150d)를 컴파일한다. 일 실시예에서, 규칙 베이스(1150d)는 표현식이 임의의 부수 효과도 갖지 않도록 하는 포맷에 의해 정의된다. "부수 효과"는 추론 엔진(112)이 표현식을 평가할 때 필드의 값이 변경되는 경우 발생한다. 예를 들어, 도 9b에서, 추론 엔진(112)은 GetAge라는 함수를 호출함으로써 표현식(956)을 평가한다. 이 실시예에서, 추론 엔진(112)은 GetAge 함수를 실행할 때 어떤 필드의 값도 수정할 수 없다. 규칙 베이스(1150d)에서의 부수 효과의 존재를 감축하거나 제거하는 데 도움이 되도록, 규칙 베이스 빌더(110)는 메소드가 값을 반환하는지 여부를 확인한다. 메소드가 값을 반환하면, 그 메소드는 (메소드에서 사용되는 지역 변수를 제외하고는) 필드의 값을 변경하는 어떤 단계도 포함할 수 없다. 또한, 값을 반환하는 메소드는 (제2 메소드에서 사용되는 지역 변수를 제외하고는) 필드의 값을 변경하는 제2 메소드를 호출할 수 없다. 다른 실시예에서, 규칙 베이스 빌더(110)는 규칙 베이스 내의 표현식들이 부수 효과를 갖도록 할 수 있다.
규칙 베이스 구축 프로세스 동안, 규칙 베이스 빌더(110)는 또한 최종값 필드의 사용과 관련된 테이블을 생성할 수 있다. 전술한 바와 같이, 처음값 필드는 단지 한번만 값을 할당받아야 하는 필드인 반면, 최종값 필드는 시간에 따라 다수의 값을 할당받을 수 있는 필드이다. 추론 동안, 최종값 필드의 유용한 값은 일반적으로 최종값 필드의 값을 변경할 수 있는 규칙들 모두가 기동되거나 불이행될 때까지 알지 못한다. 규칙 베이스 구축 프로세스 동안, 규칙 베이스 빌더(110)는 최종값 필드에 대한 테이블을 생성할 수 있다. 이 테이블은 최종값 필드의 값을 변경할 수 있는 규칙 및 최종값 필드의 최종값을 사용하는 규칙을 식별할 수 있다. 이와 같이, 추론 엔진(112)은 최종값 필드의 값을 변경할 수 있는 규칙들 모두를 기동 또는 불이행하기 위해 테이블을 사용할 수 있다. 그 규칙들 모두가 실행되었으면, 추론 엔진(112)은 최종값 필드의 최종값을 사용하는 규칙을 기동 또는 불이행할 수 있다. 특정의 실시예에서, 결정 트리 규칙은 최종값 필드를 사용할 수 있고, 패턴 정합 규칙은 그렇게 할 수 없다. 이 실시예에서, 규칙 베이스 구축 동안 작성된 테이블은 최종값 필드와 관련된 결정 트리 규칙만을 식별한다.
도 12는 본 발명의 일 실시예에 따른 추론 서비스를 제공하는 예시적인 방법(1200)을 나타낸 예시적인 흐름도이다. 방법(1200)이 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 다른 시스템이 사용될 수 있다.
단계 1202에서, 서버(102)는 하나 이상의 규칙(116)을 식별하는 정보를 수신한다. 이것은 예를 들어 API(120)가 하나 이상의 도메인(131)을 갖는 바이너리 규칙 베이스(114)를 수신하는 단계 및 API(120)가 도메인(131) 선택을 수신하는 단계를 포함할 수 있다. 이것은 또한 API(120)가 바이너리 규칙 베이스(114)의 위치를 수신하는 단계를 포함할 수 있다. 그 정보는 추론 엔진(112)의 추론 서비스를 호출하려고 시도하는 클라이언트 애플리케이션(122) 등의 임의의 적당한 소스로부터 올 수 있다.
단계 1204에서, 서버(102)는 식별된 규칙(116)과 관련된 임의의 사전 조건및 임의의 사후 조건을 식별한다. 이것은 예를 들어 추론 엔진(112)이 도메인(131)과 관련된 임의의 사전 조건 및 사후 조건을 식별하기 위해 그 도메인(131)에 포함된 정보를 사용하는 단계를 포함할 수 있다.
단계 1206에서, 서버(102)는 식별된 사전 조건에 대한 값들을 수신한다. 이것은 예를 들어 API(120)가 추론 엔진(112)을 호출하는 클라이언트 애플리케이션(122)으로부터 사전 조건에 대한 값들을 수신하는 단계를 포함할 수 있다. 추론 엔진(112)은 사전 조건 값들을 클라이언트 애플리케이션(122)으로부터 개별적으로, XML 문서로 그룹으로서, 초기화 핸들러를 통해 또는 다른 적당한 방식으로 수신할 수 있다.
단계 1208에서, 서버(102)는 사전 조건값들을 사용하여 규칙(116)을 실행한다. 이것은 예를 들어 추론 엔진(112)이 사후 조건 필드를 미지의 상태에서 기지의 상태로 분석하려고 시도하기 위해 여러가지 규칙(116)을 기동, 불이행 및 보류시키는 단계를 포함할 수 있다. 이것은 또한 필드값들이 변경된 후 그 변경에 의해 추론 엔진(112)이 보류 중인 규칙(116) 중 임의의 것을 기동 또는 불이행할 수 있는지를 결정하기 위해, 추론 엔진(112)이 보류 중인 규칙(116)을 재방문하는 단계를 포함할 수 있다. 이것은 또한 추론 엔진(112)이 규칙(116)의 정방향 추론 또는 역방향 추론을 수행하는 단계를 포함한다.
단계 1210에서, 서버(102)는 임의의 사후 조건의 값들을 반환한다. 이것은 예를 들어 추론 엔진(112)이 식별된 사후 조건에 대한 값들을 클라이언트 애플리케이션(122)으로 전달하는 단계를 포함할 수 있다. 추론 엔진(112)은 사후 조건값들을 클라이언트 애플리케이션(122)으로 개별적으로, XML 문서로 그룹으로서, 변경 핸들러를 통해, 또는 다른 적당한 방식으로 전달할 수 있다. 추론 엔진(112)은 모든 사후 조건에 대한 값, 사후 조건들 중 일부에 대한 값을 성공적으로 결정할 수 있거나 사후조건들 중 어떤 것에 대한 값도 성공적으로 결정할 수 없다.
도 12가 추론 서비스를 제공하는 방법(1200)의 일례를 나타내고 있지만, 방법(1200)에 여러가지 변경이 행해질 수 있다. 예를 들어, 추론 엔진(112)은 실제의 규칙(116)을 수신하기 전에 임의의 사전 조건 및 사후 조건에 대한 값들을 수신할 수 있다. 또한, 추론 엔진(112)은 추론 동안에 규칙 스냅샷 등의 부가의 정보를 생성할 수 있다. 게다가, 도 12의 단계들 중 일부는 중첩될 수 있다. 예로서, 추론 엔진(112)은 사후 조건값들을 클라이언트 애플리케이션(122)으로 전달하기 위해 변경 핸들러를 사용할 수 있다. 이 경우, 사후 조건값들은 추론이 완료되기 전에 클라이언트 애플리케이션(122)으로 전송될 수 있다.
도 13은 본 발명의 일 실시예에 따른 규칙 베이스 구축을 위한 예시적인 방법(1300)을 나타낸 예시적인 흐름도이다. 방법(1300)이 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 다른 시스템이 사용될 수 있다.
단계 1302에서, 서버(102)는 하나 이상의 규칙 베이스 컴포넌트를 식별하는 정보를 수신한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 소스 또는 바이너리 규칙(116), 규칙 세트(130) 또는 규칙 베이스(114)를 수신하는 단계를 포함할 수 있다. 이것은 또한 규칙 베이스 빌더(110)가 소스 또는 바이너리 규칙(116), 규칙 세트(130) 또는 규칙 베이스(114)의 위치를 수신하는 단계를 포함할 수 있다. 그정보는 규칙 베이스 빌더(110)의 규칙 베이스 구축 서비스를 호출하려고 시도하는 클라이언트 애플리케이션(122) 등의 임의의 적당한 소스로부터 올 수 있다.
단계 1304에서, 서버(102)는 수신된 규칙 베이스 컴포넌트들이 적당한 포맷을 가지고 있는지 여부를 결정한다. 이것은 예를 들어 서버(102)가 수신된 규칙 베이스 컴포넌트들이 XML 문서에 포함되어 있는지 여부를 결정하는 단계를 포함할 수 있다. 이것은 또한 서버(102)가 수신된 규칙 베이스 컴포넌트들이 규칙 정의 언어에 정의된 포맷을 따르는지 여부를 결정하는 단계를 포함할 수 있다. 그렇지 않은 경우, 단계 1306에서 서버(102)는 수신된 규칙 베이스 컴포넌트들을 변환하여 적당한 포맷으로 재포맷한다. 이것은 예를 들어 서버(102)가 규칙 베이스 컴포넌트들을 XML 문서로 변환하고 그 규칙 베이스 컴포넌트들을 규칙 정의 언어를 따르도록 재포맷하는 단계를 포함할 수 있다.
단계 1308에서, 서버(102)는 규칙 베이스 컴포넌트들을 통합된 규칙 베이스(114)로 병합한다. 이것은 예를 들어 서버(102)가 규칙 베이스 컴포넌트 내의 클래스 또는 다른 데이터 객체의 선언을 식별하는 단계를 포함할 수 있다. 이것은 또한 서버(102)가 이전에 검사된 규칙 베이스 컴포넌트가 동일한 클래스 또는 다른 데이터 객체의 다른 선언을 포함하고 있는지를 결정하기 위해 내부 데이터 구조를 들여다보는 단계를 포함할 수 있다. 그렇지 않은 경우, 서버(102)는 그 선언을 내부 데이터 구조에 부가한다. 그렇지 않고, 서버(102)는 현재의 선언으로부터의 요소들을 내부 데이터 구조에 포함된 이전의 선언에 삽입한다. 서버(102)가 내부 데이터 구조를 생성하는 일을 마친 경우, 서버(102)는 내부 데이터 구조 내의 요소들을 포함하는 통합된 규칙 베이스(114)를 생성할 수 있다.
단계 1310에서, 서버(102)는 통합된 규칙 베이스(114)를 컴파일한다. 이것은 예를 들어 서버(102)가 통합된 규칙 베이스(114)를 여러가지 구조로 파싱하는 단계로서, 각각의 구조가 규칙 정의 언어에 정의된 XML 요소에 대응하는 것인 파싱 단계를 포함할 수 있다. 이것은 또한 서버(102)가 구조들 사이의 상호 연결을 생성하기 위해 그 구조의 여러가지 요소들 사이의 링크를 식별하는 단계를 포함할 수 있다. 이것은 또한 서버(102)가 통합된 규칙 베이스(114)의 바이너리 버전을 생성하는 단계를 포함할 수 있다.
도 13이 규칙 베이스 구축을 위한 방법(1300)의 일례를 나타내고 있지만, 방법(1300)에 여러가지 변경이 행해질 수 있다. 예를 들어, 규칙 베이스 빌더(110)는 적당한 포맷을 갖는 규칙 베이스 컴포넌트들만을 수신할 수 있으며, 규칙 베이스 빌더(110)는 규칙 베이스 컴포넌트들을 변환할 필요가 없다. 또한, 규칙 베이스 빌더(110)는 로드 맵 및 애플리케이션 인터페이스 문서 등의 부가의 정보를 생성할 수 있다.
도 14는 본 발명의 일 실시예에 따른 규칙 베이스 컴포넌트들을 병합하는 예시적인 방법(1400)을 나타낸 예시적인 흐름도이다. 방법(1400)이 도 1의 시스템(100)과 관련하여 기술될 수 있지만, 다른 시스템이 사용될 수 있다.
단계 1402에서, 서버(102)는 규칙 베이스 컴포넌트를 선택한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 클라이언트 애플리케이션(122)에 의해 제공되는 하나 이상의 규칙 베이스 컴포넌트(1150) 중 하나를 선택하는 단계를 포함할 수 있다. 단계 1404에서, 서버(102)는 선택된 규칙 베이스 컴포넌트를 하나 이상의 규칙 베이스 요소들로 파싱한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 규칙 베이스 컴포넌트(1150)를 클래스 선언 등의 여러가지 선언으로 분할하는 단계를 포함할 수 있다.
단계 1406에서, 서버(102)는 규칙 베이스 요소를 선택한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 선택된 규칙 베이스 컴포넌트(1150)에서 처음으로 나타나는 규칙 베이스 요소를 선택하는 단계를 포함할 수 있다. 단계 1408에서, 서버(102)는 선택된 규칙 베이스 요소에 대응하는 표준 요소를 생성한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 XML 규칙 베이스 요소 등의 규칙 베이스 요소에 대응하는 내부 객체를 생성하는 단계를 포함할 수 있다.
서버(102)가 대응하는 표준 요소를 생성한 후에, 단계 1410에서 서버(102)는이전에 만났던 표준 요소가 동일한 이름을 가지고 또 동일한 규칙 베이스 레벨에 존재하는지를 결정한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 이전에 만났던 표준 요소를 포함하는 내부 데이터 구조를 분석하는 단계를 포함할 수 있다. 이것은 또한 규칙 베이스 빌더(110)가 이전에 만났던 표준 요소가 동일한 이름을 갖는지, 동일한 계층 구조적 규칙 베이스 레벨에 존재하는지 및 선택된 표준 요소와 동일한 유형의 요소를 나타내는지를 결정하는 단계를 포함할 수 있다. 이들 조건 중 임의의 것이 참이 아닌 경우, 단계 1418에서 서버(102)는 선택된 표준 요소를 내부 데이터 구조에 삽입한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 표준 요소가 존재하는 계층 구조 레벨에 기초하여 표준 요소를 내부 데이터 구조 내의 적당한 위치에 삽입하는 단계를 포함할 수 있다.
단계 1410에서 이 3가지 조건들 모두가 만족되는 경우, 2개의 별도의 표준 요소는 동일한 규칙 베이스 레벨에서 동일한 규칙 베이스 구조를 정의한다. 단계 1412에서, 서버(102)는 2개의 표준 요소 중 하나만이 규칙 베이스 논리를 정의하는지 여부를 결정한다. 규칙 베이스 논리는 제약이 만족되는지 여부를 결정하는 데 사용되는 표현식의 정의, 선언된 메소드의 구현, 및 규칙에 대한 구현을 포함할 수 있다. 표준 요소 중 2개 이상이 동일한 규칙 베이스 구조에 대한 규칙 베이스 논리를 정의하는 경우, 단계 1414에서 서버(102)는 에러를 생성한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 메시지 핸들러에 의해 포착되고 클라이언트 애플리케이션(122)으로 전달되는 에러 메시지를 생성하는 단계를 포함할 수 있다. 표준 요소들 중 하나만이 동일한 규칙 베이스 구조에 대한 규칙 베이스 논리를 정의하는 경우, 단계 1416에서 서버(102)는 표준 요소들을 병합한다. 이것은 예를 들어 규칙 베이스 빌더(110)가 선택된 표준 요소들로부터의 일부분을 내부 데이터 구조에 포함된 표준 요소에 삽입하는 단계를 포함할 수 있다.
단계 1420에서, 서버(102)는 처리될 선택된 규칙 베이스 컴포넌트의 부가의 규칙 베이스 요소들이 있는지 여부를 결정한다. 부가의 규칙 베이스 요소들이 남아 있는 경우, 서버(102)는 단계 1406으로 돌아가서 다른 규칙 베이스 요소를 선택한다. 그렇지 않은 경우, 단계 1422에서 서버(102)는 처리될 부가의 규칙 베이스 컴포넌트가 있는지 여부를 결정한다. 부가의 규칙 베이스 컴포넌트가 남아 있는 경우, 서버(102)는 단계 1402로 돌아가서 다른 규칙 베이스 컴포넌트를 선택한다.
규칙 베이스 컴포넌트들이 처리된 후에, 서버(102)에 의해 생성된 내부 데이터 구조는 그 규칙 베이스 컴포넌트들의 여러가지 요소들에 대응하는 표준 요소들을 포함한다. 서버(102)는 이어서 내부 데이터 구조를 사용하여 임의의 다른 적당한 조치를 취할 수 있다. 예를 들어, 서버(102)는 논리에 대응하는 내부 데이터 구조를 의미적으로 분석하고 그 논리에 대한 바이너리 명령어를 생성할 수 있다.
도 14가 규칙 베이스 컴포넌트를 병합하는 방법(1400)의 일례를 나타내고 있지만, 방법(1400)에 여러가지 변경이 행해질 수 있다. 예를 들어, 규칙 베이스 빌더(110)는 한번에 하나의 규칙 베이스 컴포넌트를 수신할 수 있으며, 따라서 단계 1402에서 규칙 베이스 빌더(110)는 규칙 베이스 컴포넌트를 선택할 필요가 없다. 또한, 규칙 베이스 빌더(110)는 표준 요소들 중 어느 것도 내부 데이터 구조에 삽입하기 전에 모든 규칙 베이스 컴포넌트에 대한 표준 요소를 생성할 수 있다. 게다가, 규칙 베이스 빌더(110)가 단일 내부 데이터 구조를 처리하는 것으로 기술되어 있지만, 다른 유형 또는 개수의 데이터 구조가 사용될 수 있다. 게다가, 규칙 베이스 빌더(110)는 규칙 베이스 XML 요소를 이미 존재하는 표준 요소들과 직접 비교할 수 있으며, 그에 따라 중복적인 표준 요소를 생성하는 것을 피할 수 있다.
규칙 정의 언어(RDL)
일 실시예에서, 규칙 베이스는 규칙 정의 언어를 사용하여 정의된다. 규칙 정의 언어는 규칙 베이스를 형성하는 하나 이상의 XML 문서의 구조 및 내용을 정의한다. 구체적으로는, 규칙 정의 언어는 클래스, 필드, 메소드, 및 정적 인스턴스의 정의는 물론 제약 및 도메인을 구성하는 규칙들의 정의 등의 객체 정의를 지원한다.
규칙 정의 언어가 도 1의 시스템(100)과 관련하여 이하에 기술될 수 있지만, 다른 시스템이 규칙 정의 언어를 사용할 수 있다. 또한, 시스템들은 규칙 베이스를 정의하기 위해 다른 언어를 사용할 수 있다.
1. 개요
일반적으로, 규칙 정의 언어(RDL)에 의해 사용자는 클래스, 인스턴스, 필드, 도메인 및 규칙 세트 등의 규칙 베이스(114) 내의 어느 객체가 공개 객체로서 클라이언트 애플리케이션(122)과 공유될 수 있는지를 지정할 수 있다. 디폴트로, 규칙 베이스(114) 내에 지정된 다른 객체들은 그 규칙 베이스(114)에 대해 비공개로 유지될 수 있다. 공유 필드의 경우, 사용자는 각각의 필드가 사전 조건으로서 또는 사후 조건으로서 액세스가능한지 여부를 지정할 수 있다.
규칙 정의 언어는 2가지 유형의 규칙(116), 즉 패턴 정합 규칙 및 결정 트리 규칙을 지원한다. 이들 유형의 규칙 둘다는 정방향 추론 동안 사용되는 반면, 결정 트리 규칙은 역방향 추론 동안 사용된다.
규칙 정의 언어는 숫자, 부울값, 스트링, 연관 인스턴스, 세트, 및 인스턴스 참조를 비롯한 다수의 여러가지 데이터 유형을 지원한다. 숫자는 정수와 부동 소수점 값을 구분하지 않는 일반 숫자 데이터 유형을 나타낸다. 값은 임의의 크기일 수 있으며, 숫자의 정밀도(precision)는 정밀도 플래그를 사용하여 지정될 수 있다. 값은 또한 특정의 필요에 따라 가장 가까운 이웃값으로 반올림될 수 있다. 일 실시예에서, 2개의 이웃하는 값이 등거리에 있는 경우, 추론 엔진(112)은 항상가장 가까운 짝수 이웃으로 또는 가장 가까운 홀수 이웃으로 반올림할 수 있다. 부울값은 참 또는 거짓의 값을 나타낸다. 스트링은 유니코드 문자의 시퀀스를 나타내며, 대소문자 구별은 없다.
연관 인스턴스는 규칙 베이스 인스턴스들 간의 관계를 정의한다. 예를 들어, Person 인스턴스는 다른 Person 인스턴스의 배우자일 수 있거나, Person 인스턴스는 Duck 인스턴스를 가질 수 있다. 규칙 정의 언어는 일대일, 일대다, 다대일 및 다대다 연관 등의 임의의 적당한 유형의 연관을 지원할 수 있다. 특정의 예로서, 규칙 정의 언어는 소유권(Owns 및 IsOwnedBy) 연관, 관리권(Manages 및 IsManagedBy) 연관, 배우자 관계(IsSpouseOf) 연관, 및 형제관계(IsSiblingOf) 연관을 지원할 수 있다. 예를 들어, Duck 인스턴스의 필드는 Person 인스턴스로 IsOwnedBy 연관을 정의할 수 있으며, 이는 Duck가 식별된 Person의 소유임을 나타낸다.
하나의 인스턴스에서의 인스턴스 참조는 다른 인스턴스에 대한 참조를 나타낸다. 예를 들어, Duck 클래스는 Person에 대한 인스턴스 참조를 정의할 수 있으며, 이는 주어진 Duck 인스턴스를 소유하는 Person 인스턴스를 식별한다. 이 예에서, 인스턴스 참조는 다른 인스턴스에 대한 포인터로서 동작한다. 다른 데이터 유형에서와 같이, 인스턴스 참조는 기지의 상태 또는 미지의 상태에 있을 수 있다. 기지의 상태에 있는 경우, 인스턴스 참조값은 인스턴스를 참조하거나 널(null)일 수 있다. 널 값은 미지의 값이 미지의 관계를 나타내는 반면, 널 값은 관계 없음을 알고 있는 것(known lack of a relationship)을 나타낸다는 점에서 미지의 값과구별될 수 있다.
세트는 고유의 요소들의 무순서 컬렉션을 나타낸다. 요소들은 상기 데이터 유형 중 임의의 것일 수 있다. 특정의 실시예에서, 모든 요소들은 동일한 데이터 유형이어야만 한다. 규칙 정의 언어는 세트의 세트를 지원할 수도 하지 않을 수도 있다. 규칙 정의 언어는 또한 리스트, 날짜, 및 시간 등의 다른 데이터 유형을 지원할 수 있다.
규칙 정의 언어는 추론 엔진(112)에 의해 행해질 결정을 규칙 전제 또는 제약 표현식으로 분류할 수 있다. 이것은 의사 결정을 더 적은 잘 정의된 컨텍스트로 제한하는 것을 돕는다. 이것은 또한 규칙 베이스(114) 또는 규칙 베이스(114)의 일부분을 작성하는 개발자가 보다 깔끔하고 보다 기초적인 규칙을 작성하도록 격려하는 데 도움을 준다. 이것은 또한 규칙 베이스(114)에서 IF-THEN 규칙의 사용을 감소 또는 제거할 수 있다. 규칙 정의 언어는 또한 표현식이 어떤 부수 효과도 갖지 않도록 할 수 있다.
규칙 정의 언어는 또한 포인터 및 동적 할당 객체의 사용을 제한할 수 있다. 예를 들어, 규칙 정의 언어는 연관 인스턴스에서 또한 패턴 정합 규칙에서 사용되는 바인드 변수에서 필드에 대한 포인터의 사용을 제한할 수 있다. 이것은 추론이 시작되어 포인터가 사용되기 전에 규칙 베이스(114) 내의 규칙(116)의 분석을 용이하게 하도록 돕는다. 특정의 실시예에서, 규칙 베이스(114)의 분석은 추론이 시작되기 전에 추론 엔진(112)에 의해 행해지는 것이 아니라 규칙 베이스 빌더(110)가 규칙 베이스(114)를 구축하고 있을 때 행해질 수 있다. 다른 실시예에서, 포인터의 사용은 제한되지 않거나 다른 방식으로 제한될 수 있다.
게다가, 써드파티 벤더가 기능 및 부가의 정보를 규칙 베이스(114)에 부가할 수 있도록 하기 위해, 써드파티 벤더는 그 벤더가 규칙 베이스(114)에 정의하고 사용하는 요소 및 필드에 접두어(prefix)를 부가할 수 있다. 어떤 실시예들에서, 접두어는 XML 이름공간 접두어일 수 있다. 추론 엔진(112)은 규칙 정의 언어에 정의되어 있는 임의의 요소 및 필드를 처리하고 접두어를 갖는 요소 및 필드 등의 임의의 다른 요소 및 필드를 무시할 수 있다.
규칙 정의 언어에 대한 이하의 설명은 규칙 베이스(114)가 하나 이상의 XML 문서를 포함하는 것으로 가정한다. 이하의 설명에서, XML 문서의 내용은 BNF(Backus-Naur Form) 표기법을 사용하여 기술되며, 규칙 베이스 논리의 예는 infix 표기법을 사용한다. 이것은 예시적인 것일 뿐이다. XML 문서의 내용 및 예들을 기술하기 위해 사용되는 다른 표기법이 사용될 수 있다. 또한, 다른 실시예에서, 규칙 베이스(114)는 다른 유형의 정보를 포함할 수 있으며, XML 문서에 한정되지 않는다.
2. 요소 속성
규칙 정의 언어는 이하의 속성을 지원한다.
이후의 섹션은 이들 속성을 참조한다. 많은 경우에, 이 리스트는 참 및 거짓 등의 속성이 가질 수 있는 실제값을 정의한다. 다른 경우에, 이 리스트는 심볼값을 반영하며, 이 경우 심볼값은 각괄호(<>)로 둘러싸여 있으며 이하에서 보다 상세히 설명한다.
3. 루트 요소
이 요소는 XML 문서의 루트 요소이며 규칙 베이스(114)의 전체 구조를 정의한다. 이 요소는 다음의 포맷을 갖는다.
Name_Attrib는 영숫자 스트링 등의 규칙 베이스(114)의 이름을 지정한다. 추론 엔진(112)은 잘못하여 이 이름을 사용하여 메시지를 추적할 수 있다. Rulebase_Section은 0개 이상의 서브요소를 포함하며, 이들 서브요소는 규칙 베이스(114) 내의 전역 범위(global scope)에 노출되는 객체를 정의한다. 예를 들어, InitMethodDef_Elements는 규칙 베이스 레벨 초기화 메소드를 정의하고, Assoc_Elements는 규칙 베이스 레벨 클래스 사이의 규칙 베이스 레벨 관계를 정의하며, ConstraintSet_Elements는 규칙 베이스 레벨 필드에 대한 값 할당을 제약하기 위한 규칙 베이스 레벨의 일련의 메소드를 정의한다. ExternalLib_Elements는 규칙 베이스(114)로부터 호출될 수 있는 외부 라이브러리를 정의하며, Class_Elements는 필드, 메소드, 및 정적 인스턴스의 규칙 베이스 레벨 클래스를 정의한다. Domain_Elements는 규칙 베이스 레벨 도메인 자원을 정의한다.
이들 서브요소 모두는 선택적일 수 있는데, 그 이유는 이상에서 기술하고 이하에 보다 상세히 기술하는 바와 같이, 규칙 정의 언어가 완전한 규칙 베이스(114)를 형성하기 위해 불완전한 규칙 베이스의 조각들의 병합을 지원하기 때문이다. 또한, 이하에 기술하는 바와 같이, 각각의 서브요소는 Name_Attrib를 지정할 수 있다. 이들 이름은 규칙 베이스 레벨에서 고유한 것일 수 있지만 그 이하 레벨에서는 오버라이드(override)될 수 있다. 규칙 베이스(114)가 주어진 레벨에서 동일한 이름의 객체를 정의하는 경우, 규칙 베이스 빌더(110)는 병합 프로세스 동안 이들 객체를 단일 규칙 베이스 객체로 병합할 수 있다.
4. InitMethodDef_Element
이 요소는 규칙 베이스(114) 내의 객체를 초기화하는 메소드를 정의하며, 이하의 포맷을 갖는다.
InitMethodDef_Element는 레벨 고유의 필드 및 외부 라이브러리를 초기화하는 메소드 논리를 정의한다. 예를 들어, 이 요소는 차후에 규칙 및 제약에 의해 참조되는 여러가지 필드를 초기화할 수 있다. 추론 엔진(112)은 그 레벨에 대한 자원을 처음으로 로드할 때 이 메소드를 호출한다. 일 실시예에서, 추론 엔진(112)은 이 메소드를 한번 호출할 수 있다. 주어진 레벨에 다수의InitMethodDef_Element가 있는 경우, 추론 엔진(112)은 임의의 적당한 순서로 그 요소를 호출할 수 있다. 이 요소에 정의된 초기화 메소드는 어떤 인자도 받지 않고 어떤 값도 반환하지 않을 수 있다. 이 메소드는 자유롭게 다른 메소드를 호출하고 그의 범위 레벨 내의 모든 객체에 액세스할 수 있다. 일 실시예에서, 이 메소드는 추론을 개시하거나 미지의 상태에 있는 필드를 판독하려고 시도할 수 없을 수 있다. 이 실시예에서, 이들 동작 중 임의의 것을 검출할 시, 추론 엔진(112)은 에러 메시지와 함께 즉각적으로 추론을 중지시킬 수 있다.
이 요소는 규칙 베이스(114)에서 몇가지 서로 다른 레벨에서 지정될 수 있다. 예를 들어, 이 요소는 규칙 베이스 레벨, 도메인 레벨, 및 규칙 세트 레벨에서 지정될 수 있다. 주어진 레벨에서, 이 요소의 다수의 사양이 있을 수 있지만, 각각은 서로 다른 이름을 갖는다. 또한, 다수의 서브 규칙 베이스는 동일한 규칙 베이스 레벨에서 InitMethodDef_Element를 제공할 수 있다.
일 실시예에서, 필드의 초기화는 필드 제약을 받는다. 메소드는 이들 제약 및 이러한 제약이 의존하고 있는 필드에 민감해야 한다. 예를 들어, 필드 제약은 필드 MaximumAge에 의존할 수 있으며, 따라서 초기화 메소드는 이 필드가 그 제약에 의존하는 임의의 필드를 설정하기 전에 초기화되어 있도록 하는 데 도움이 되어야만 한다.
샘플 규칙 베이스(114)는 다음과 같이 규칙 베이스 레벨에서InitMethodDef_Element를 정의할 수 있다.
이 메소드는 규칙 및 제약에 의해 나중에 사용되는 여러가지 상수 필드를 초기화한다.
5. Assoc_Element
이 요소는 필드들 사이의 관계를 정의하고 다음과 같은 포맷을 갖는다.
이 요소는 규칙 베이스(114)에서 몇가지 서로 다른 레벨에서 지정될 수 있다. 예를 들어, 이 요소는 규칙 베이스 레벨, 도메인 레벨, 및 규칙 세트 레벨에서 지정될 수 있다. 일 실시예에서, 연관은 그의 중요도를 반영하는 이름을 갖는다. 예를 들어, 소유권 연관은 사람이 오리를 어떻게 소유하는지를 정의할 수 있고, 관리권 연관은 사람이 다른 사람을 어떻게 관리하는지를 정의할 수 있으며, 배우자 관계 연관은 사람들 사이의 배우자 관계를 정의할 수 있다.
Assoc_Element는 그의 멤버 필드를 FieldRef_Element로서 지정한다. 이들 서브요소 각각은 필드 이름 및 그 필드를 소유 또는 상속하는 클래스를 지정한다. 그의 개별적인 클래스 내에, 이들 필드 각각이 인스턴스-참조 데이터 유형으로 선언될 수 있다(이하에 기술된 DataTypeInstRef_Element 참조). 지정된 필드는 동일한 클래스 또는 서로 다른 클래스에 대한 것일 수 있다. 예를 들어, 사용자는 Duck 클래스의 IsOwnedBy 필드와 Person 클래스의 Owns 필드 사이의 연관을 정의할 수 있다. 다른 예로서, 사용자는 Person 클래스의 IsManagedBy 필드와 Person 클래스의 Manages 필드 사이의 연관을 정의할 수 있다. 사용자는 또한 Person 클래스의 IsSpouseOf 필드가 양쪽 연관 역할을 행하는 경우와 같이 양쪽 연관 역할에 대한 동일한 필드를 지정할 수 있다.
일 실시예에서, 연관의 다중성(일대일, 일대다, 다대일, 다대다)은 지정된 필드가 세트인지 여부에 따라 변할 수 있다. 예를 들어, Person 클래스의 Owns 필드가 세트이지만 Duck 클래스의 IsOwnedBy 필드가 세트가 아닌 경우, 연관은 Person과 Duck 사이의 일대다 관계이다.
Assoc_Element 요소는 객체의 슈퍼클래스들을 연관시킬 수 있다. 예를 들어, 이 요소는 Person과 Bird를 연관시킬 수 있으며, 추론 엔진(112)은 그 관계를Person과 임의의 종류의 Bird(Duck, Vulture 등) 사이에서와 같이 다형적으로 해석할 수 있다.
특정의 실시예에서, Assoc_Element는 그 자체로서 동일한 규칙 베이스 레벨(전역, 도메인, 규칙 세트)에 있는 클래스를 갖는 필드를 지정한다. 이 실시예에서, 도메인 레벨 연관은 도메인 레벨 클래스에 대한 필드만 참조할 수 있으며 전역 레벨 클래스에 대한 필드를 참조할 수 없다.
샘플 규칙 베이스(114)는 다음과 같이 규칙 베이스 레벨에서 2개의 Assoc_Element를 정의할 수 있다.
게다가, 규칙 베이스(114)는 연관 필드를 정의할 수 있다. 이들 필드는 연관에 고유하지만 연관의 개별적인 멤버에 고유하지 않은 정보를 유지하는 데 유용할 수 있다. 예를 들어, 배우자 관계 연관은 DataOfMarriage 필드를 가질 수 있다. 연관 필드를 사용하기 위해, 추론 엔진(112)은 연관의 인스턴스를 유지할 수 있으며, 다른 인스턴스는 연관 인스턴스에 액세스할 수 있다. 예를 들어, Person 인스턴스는 그의 결혼 일자를 결정할 필요가 있을 수 있다. 이것은 다음과 같은 내장된 메소드로 행해질 수 있다.
여기서, 첫번째 인자는 연관에 관여된 인스턴스를 지정하며, 두번째 인자는 관련 연관 필드를 나타낸다.
다른 실시예에서, 연관은 그의 필드를 참여 인스턴스에 "대여"하는 것으로 취급될 수 있다. 예를 들어, Person 클래스는 Person이 배우자관계 연관에서의 역할 클래스(role class)라는 사실로 인해 marriage_date 필드를 상속할 수 있다. 그 경우, 상기 예는 다음과 같이 기록될 수 있다.
이 방법 하에서, 연관 인스턴스의 필드 이름은 Person 클래스(및 그의 조상 클래스)의 필드 이름과 중첩될 수 있다. 이와 마찬가지로, Person 클래스(및 그의 조상 클래스)는 서로 다른 연관 인스턴스에 대한 배우자 관계 역할을 행하는 2개의 필드를 정의하지 못할 수 있다. 게다가, Person이 다수의 서로 다른 연관에서 클래스 역할을 행하는 경우, 연관은 다른 필드 이름을 이용할 필요가 있을 수 있다.다음과 같이 함으로써 이들 문제 중 일부를 회피하기 위해, 선택적인 특수 접두어가 연관 필드에 대해 사용될 수 있다.
6. ConstraintSet_Element
이 요소는 제약 정의의 컬렉션을 지정하며 다음의 포맷을 갖는다.
Constraint_Element는 값이 필드에 어떻게 할당될 수 있는지를 제한하기 위한 기준을 지정한다. 추론 엔진(112)은 값을 타겟 필드에 할당하기 전에 제약을 평가할 수 있다. 제약은 필더의 선언(FieldDcl_Element를 사용함)에 의해 또는 정적 인스턴스 필드 수정자(StaticInstDef_Element를 사용함)에 의해 필드와 관련될 수 있다. 각각의 제약의 GeneralExpr은 부울 표현식을 나타낼 수 있다. 이 표현식은 필드의 제안된 새로운 값에 대한 심볼 참조로서 내장된 식별자(candidate_value)를 참조한다. 표현식을 평가할 때, 추론 엔진(112)은 임의의 심볼 참조를 내장된 식별자로 대체할 수 있다. 표현식의 값은 후보값이 제약을 만족하는지 여부를 나타낸다. 표현식 값이 참인 경우, 추론 엔진(112)은 값 할당이 진행되도록 할 수 있다. 그렇지 않은 경우, 추론 엔진(112)은 필드 선언(또는 필드 수정자) 사양에 의존하는 동작을 취할 수 있다.
표현식은 메소드를 호출하여 그 범위 레벨 내의 모든 객체에 액세스할 수 있다. 일 실시예에서, 표현식은 미지의 상태에 있는 필드를 판독하거나 임의의 부수 효과를 야기하려고 시도하지 않을 수 있다. 이 실시예에서, 이들 동작 중 어떤 것을 검출할 시에, 추론 엔진(112)은 즉각적으로 에러 메시지와 함께 추론은 중지할 수 있다.
이 요소는 다수의 제약을 정의할 수 있으며, 이들 제약 각각은 제약 세트 내의 고유한 이름을 가질 수 있다. 이 요소는 또한 규칙 베이스(114)에서 몇가지 서로 다른 레벨에서 지정될 수 있다. 예를 들어, 이 요소는 규칙 베이스 레벨, 도메인 레벨, 및 규칙 세트 레벨에서 지정될 수 있다. 추론 엔진(112)은 동일한 데이터 유형의 필드 등의 몇개의 서로 다른 필드를 위해 동일한 제약을 평가할 수 있다.
샘플 규칙 베이스(114)가 다음과 같이 규칙 베이스 레벨에서 2개의ConstraintSet_Element를 정의할 수 있다.
7. ExternalLib_Element
이 요소는 사용자가 자바 또는 C++로 코딩된 라이브러리 등의 하나 이상의 "외부" 라이브러리에 의해 제공된 기능으로 규칙 정의 언어 기능을 보조할 수 있게 해준다. 이들 사용자는 이어서 외부 라이브러리를 규칙 베이스(114)와 함께 배포할 수 있다. ExternalLib_Element는 외부 라이브러리로의 게이트웨이를 제공한다. 규칙 베이스(114)의 관점에서 볼 때, 외부 라이브러리는 입력 파라미터, 출력 파라미터 및 반환값을 갖는 메소드를 제공하는 "블랙박스"처럼 보일 수 있다. 규칙 베이스(114)는 외부 라이브러리 내의 메소드를, 규칙 베이스(114) 자체 내에 정의된 메소드를 호출하는 것과 같이 호출할 수 있다. 추론 엔진(112)은 이 호출을 타겟 환경으로 매핑하는 일을 맡을 수 있다. ExternalLib_Element의 정의는 언어 고유의 설정, 플랫폼 고유의 설정, 또는 환경 고유의 설정의 사양을 필요로 할 수 있다. 그 결과, 추론 엔진(112)은 어떤 타겟 고유의 코드를 포함할 필요가 있거나 그렇지 않을 수 있다.
8. Class_Element
이 요소는 필드, 메소드 및 정적 인스턴스의 클래스를 정의한다. 이 요소는 다음의 포맷을 갖는다.
이 요소는 규칙 베이스(114)에서 몇개의 서로 다른 레벨에서 지정될 수 있다. 예를 들어, 이 요소는 규칙 베이스 레벨, 도메인 레벨, 및 규칙 세트 레벨에서 지정될 수 있다. 서브요소의 일부 또는 전부는 Name_Attrib를 지정할 수 있다. 메소드 오버로딩을 제외하고는, 이들 이름은 클래스 레벨에서 고유한 것일 수 있지만, 상위 레벨에서 이름을 오버라이드할 수 있고 하위 레벨에서 오버라이드될 수 있다. 또한, 메소드 오버로딩을 제외하고는, 클래스가 동일 이름의 객체를 정의하는 경우, 규칙 베이스 빌더(110)는 병합 프로세스 동안 그 객체들을 단일 규칙 베이스 객체로 병합할 수 있다. Class_Element는 선택적으로 부모 Class_Element를 지정할 수 있으며, 따라서 클래스는 상속 계층 구조로 구성될 수 있다. 일 실시예에서, 클래스는 기껏해야 하나의 부모 클래스를 가질 수 있다. 특정의 실시예에서, 클래스가 부모인 경우, 부모 클래스 및 자식 클래스는 동일한 규칙 베이스 레벨(전역, 도메인, 규칙 세트)에 존재한다. 이 실시예에서, 도메인 레벨 클래스는 다른 도메인 레벨 클래스에서 파생되고, 전역 레벨 클래스에서 파생될 수 없다.
특정의 실시예에서, 필드 및 메소드는 클래스 레벨이라기 보다는 인스턴스 레벨에 있으며, 필드 및 메소드는 비공개 또는 보호 액세스 레벨보다는 공개 액세스 레벨에 있다. 또한, 특정의 실시예에서, 부모가 아닌 리프 클래스(leaf class)가 인스턴스화될 수 있다. 클래스 포함(class containment)을 지원할 수도 하지 않을 수도 있다.
샘플 규칙 베이스(114)는 다음과 같이 규칙 베이스 레벨에서 몇개의Class_Element를 정의할 수 있다.
8.1 FieldDcl_Element
Class_Element의 이 요소는 클래스 데이터 객체를 정의하고 다음의 포맷을 갖는다.
FieldDcl_Element는 "분석 유형"을 선택적으로 지정할 수 있는 필드인 필드 분석 유형을 포함할 수 있다. 분석 유형은 추론 엔진(112)이 결정 트리 규칙을 처리할 때 추론 엔진(112)의 행동에 적용되며, "처음값"(first_valued)(디폴트) 또는 "최종값"(final_valued)으로 지정될 수 있다. 이 설정은 추론 엔진(112)이 필드의 처음값이 그의 분석값인 것으로 가정해야 하는지 또는 추론 엔진(112)이 필드가 그의 분석값으로의 도중에 있는 중간값을 할당받을 수 있을 것으로 예상해야 하는지를 결정한다. 예를 들어, Age 필드는 일반적으로 "처음값" 필드가 되는 반면, SetOfResults 필드는 "최종값" 필드일 수 있다.
FieldDcl_Element는 또한 선택적으로 그 필드값 할당이 제약되어야만 하는 것으로 지정할 수 있다. 필드에 값을 할당하기 전에, 추론 엔진(112)은ConstraintList_Element에 의해 지정된 순서로 0개 이상의 제약을 평가할 수 있다. 어떤 제약이 부울값 거짓으로 평가되는 경우, 추론 엔진(112)은 ConstraintViloation_Element에 따라 위반 동작을 수행할 수 있다. ConstraintViloation_Element가 ConstraintAbort_Element를 지정하는 경우, 추론 엔진(112)은 추론을 중지할 수 있다. 그 요소가 AbortMsg_Attrib를 지정하는 경우, 그 속성의 값은 에러 메시지 텍스트일 수 있다. 그렇지 않으면, 에러 메시지는 디폴트 텍스트를 반영할 수 있다. ConstraintViolation_Element가 ConstraintResume_Element를 지정하는 경우, 추론 엔진(112)은 추론을 재개할 수 있다. 그 요소가 ResumeVal_Attrib를 지정하는 경우, 추론 엔진(112)은 필드의 현재값을 속성의 값으로 대체할 수 있다. 그렇지 않으면, 필드는 그의 현재값을 보유할 수 있다. ConstraintViolation_Element가 없는 경우, 추론 엔진(112)은 디폴트 에러 메시지와 함께 추론을 중지할 수 있다. FieldDcl_Element 레벨에서 지정된 제약은 필드의 클래스의 모든 인스턴스에 적용될 수 있다. 사용자는 또한 인스턴스 고유의 제약을 지정할 수 있다.
샘플 규칙 베이스(114)로부터의 샘플 필드 선언은 다음과 같을 수 있다.
8.2 ClassMethodDef_Element
Class_Element의 이 요소는 클래스 메소드 객체를 정의하고 다음의 포맷을 갖는다.
메소드는 선택적으로 임의의 데이터 유형의 다수의 인자를 받아들일 수 있으며, 메소드는 각각의 파라미터를 입력("in") 파라미터 또는 출력("out") 파라미터로서 분류할 수 있다. 일 실시예에서, 파라미터는 디폴트로 입력 파라미터 또는 출력 파라미터일 수 있다. 특정의 실시예에서, 파라미터는 입력 파라미터도 출력 파라미터도 아닐 수 있다. 규칙 정의 언어는 메소드 오버로딩을 지원할 수 있으며, 따라서 클래스는 그의 파라미터 리스트가 구분될 수 있는 한 동일한 이름의 다수의 메소드를 정의할 수 있다. 이 구분은 ClassParamAttribs(ParamIOType_Attrib 등) 또는 숫자 정밀도를 고려하지 않을 수 있다. 메소드는 선택적으로 임의의 데이터 유형의 하나 이상의 값을 반환할 수 있다. 메소드가 값을 반환하는 경우, 서버(102)는 그 메소드를 함수 메소드로서 분류할 수 있다. 그렇지 않은 경우, 서버(102)는 그 메소드를 프로시저 메소드로서 분류할 수 있다. 서버(102)는 프로시저 메소드에 부과될 수 없는 제한을 함수 메소드에 부과한다. 이렇게 하는 이유는 함수 메소드가 표현식이기 때문이며, 표현식은 부수 효과를 가질 수 없다. 서버(102)는 따라서 함수 메소드가 출력 파라미터를 지원하는 것, 값을 필드에 할당하는 것, 프로시저 메소드를 호출하는 것, 또는 동적 인스턴스를 생성 또는 삭제하는 것을 하지 못하도록 할 수 있다.
ClassMethodBody_Element가 지정되지 않은 경우, 서버(102)는 다른 규칙 베이스(114)가 메소드 구현을 정의하게 될 것이며 그 다른 규칙 베이스(114)가 추론 이전에 현재의 규칙 베이스(114)와 병합될 것으로 가정할 수 있다.
샘플 규칙 베이스(114)로부터의 샘플 메소드 정의가 다음과 같을 수 있다.
8.3 StaticInstDef_Element
Class_Element의 이 요소는 클래스 정적 인스턴스 객체를 정의하며, 다음의 포맷을 갖는다.
추론 엔진(112)은 정적 인스턴스의 클래스를 로드할 때 그 인스턴스를 생성할 수 있으며, 추론 엔진(112)은 그 인스턴스의 클래스를 언로드(unload)할 때 그 인스턴스를 삭제할 수 있다. 일 실시예에서, 규칙 베이스 논리는 명시적으로 정적 인스턴스를 생성 또는 삭제하지 못할 수도 있다. 이 요소는 선택적으로 마지막 기회 값 및 제약 등의 인스턴스 고유의 필드 특성을 지정하는 FieldModifiers_Element를 지정할 수 있다. FieldModifiers_Element에 대한 Name_Attrib는 영향 받는 인스턴스 필드를 나타낸다. 이 이름은 인스턴스의 클래스에 의해 선언되거나 상속된 필드를 식별할 수 있다.
LastChanceValue_Element는 그 필드에 대한 마지막 기회 값을 지정한다. 인스턴스-참조 데이터 유형의 경우, 마지막 기회 값은 다른 정적 인스턴스 또는 일련의 이러한 인스턴스에 대한 식별자일 수 있다. 다른 데이터 유형의 필드의 경우, 그 값은 리터럴 상수(literal constant), 세트 상수, 또는 리터럴 상수에 대한 단항 연산자(unary operator)일 수 있다. 후자의 경우, 리터럴 상수는 숫자 또는 부울값 상수일 수 있다. 추론 엔진(112)은 결정 트리 규칙에 관한 어떤 잘 정의된 상황에서 마지막 기회 값을 적용할 수 있으며, 따라서 마지막 기회 값의 정적 인스턴스 정의는 본질적으로 추론 엔진(112)이 계속 그것을 적용하게 될 것이라고 보장할 수 없다.
제약 서브요소는 필드값 할당이 제약되어야만 하는 것으로 지정한다. 제약에 관한 추가의 정보는 상기의 FieldDcl_Element 섹션 내의 ConstrainedBy_Element의 설명에서 찾아볼 수 있다. StaticInstDef_Element에서 지정된 제약은 그 인스턴스에만 적용될 수 있다. 예를 들어, 사용자는 Father.Age에 대해서 Mother.Age에 대해서와 다른 제약을 지정할 수 있다. 사용자는 또한 클래스의 모든 인스턴스에 적용되는 클레스 레벨 제약을 지정할 수 있다. 주어진 필드에 대해 사용자가 양쪽 레벨의 제약을 지정한 경우, 추론 엔진(112)은 인스턴스 고유의 제약 이전에클래스 레벨 제약을 적용할 수 있다.
샘플 규칙 베이스(114)로부터의 샘플 StaticInstDef_Element 정의는 다음과 같을 수 있다.
9. Domain_Element
이 요소는 규칙 베이스 레벨 도메인 자원을 정의하며, 다음의 포맷을 갖는다.
이 요소는 도메인이 AppShared_Attrib 필드의 사용을 통해 클라이언트 애플리케이션(122)에 의해 로드될 수 있는 것으로 선택적으로 지정할 수 있다. 그렇지 않은 경우, 도메인이 dmm_push() 내장된 메소드를 사용하여 규칙 베이스 논리로부터 로드가능하다. 규칙 베이스(114)는 적어도 하나의 도메인을 클라이언트 애플리케이션(122)과 공유할 수 있지만, 다수의 도메인을 클라이언트 애플리케이션(122)과 공유할 수 있을 것이다.
대부분의 서브요소는 Name_Attrib를 지정할 수 있다. 이들 이름은 도메인 레벨에서 고유한 것일 수 있지만 상위 레벨에서 이름을 오버라이드할 수 있으며 하위 레벨에서 오버라이드될 수 있다. 도메인이 주어진 레벨에서 동일 이름의 객체를 정의하는 경우, 규칙 베이스 빌더(110)는 병합 프로세스 동안 그 객체들을 단일 규칙 베이스 객체로 병합할 수 있다.
InitMethodDef_Element, Asso_Element, ConstraintSet_Element 및 Class_Element 등의 도메인 서브요소 중 몇개는 이전에 기술한 규칙 베이스 레벨 서브요소와 동일한 것일 수 있다. DomainGoal_Element, DomainAppSharedFlds_Element, 및 Ruleset_Element 등의 다른 서브요소는 도메인에 고유한 것이며, 이에 대해서는 이하에 설명한다.
9.1 DomainGoal_Element
Domain_Element의 이 요소는 도메인에 대한 목표 필드(goal field)를 지정하며, 이하의 포맷을 갖는다.
Domain_Element가 DomainGoal_Element를 지정하는 경우, 추론 엔진(112)은 목표 필드를 분석하기 위해 도메인의 규칙을 역방향 추론할 수 있다. 그렇지 않은 경우, 추론 엔진(112)은 도메인의 규칙을 정방향 추론할 수 있다.
샘플 규칙 베이스(114)로부터의 샘플 DomainGoal_Element는 다음과 같을 수 있다.
9.2 DomainAppSharedFlds_Element
Domain_Element의 이 요소는 클라이언트 애플리케이션(122)와 공유될 필드를지정하며, 다음의 포맷을 갖는다.
도메인이 DomainAppSharedFlds_Element 서브요소를 포함하는 경우, 그 도메인 자체는 자동적으로 클라이언트 애플리케이션(122)과 공유될 수 있다. DomainAppSharedFlds_Element는 2개의 서브요소(하나는 사전 조건을 추론하기 위한 것이고 다른 하나는 사후 조건을 추론하기 위한 것임)를 지정한다. 각각의 서브요소는 0개 이상의 규칙 베이스 레벨 필드를 지정한다. 일 실시예에서, 리스트는 도메인 레벨 필드가 아닌 규칙 베이스 레벨 필드를 지정한다. 동일한 필드가 양쪽 리스트에 대해 지정된 경우, 그 필드는 사전 조건 필드인 것으로 가정할 수 있다.
DomainPreConditionList_Element는 클라이언트 애플리케이션(122)에 의해 판독도 가능하고 기록도 가능한 필드를 식별한다. DomainPostConditionList_Element는 클라이언트 애플리케이션(122)에 대해 판독전용인 필드를 지정한다. 추론 엔진(112)은 클라이언트 애플리케이션(122)이 부정확하게 필드에 액세스하려는 시도를거부할 수 있다. 일 실시예에서, 서로 다른 규칙 베이스 도메인은 서로 다른 DomainAppSharedFlds_Element를 지정할 수 있는 데 그 이유는 그의 입력 및 출력 필드가 서로 다를 수 있기 때문이다.
샘플 규칙 베이스(114)로부터의 샘플 DomainAppSharedFlds_Element는 다음과 같을 수 있다.
상기 예는 4개의 사전 조건 필드와 하나의 사후 조건 필드의 정의를 나타낸 것이다. 각각의 필드에 대해, 단일 식별자만이 지정되어 있는데, 그 이유는 그 필드에 대해 단일 클래스 인스턴스만이 정의되어 있기 때문이다(따라서, 참조 모호성이 없다). 일반적으로, 공유 필드는 단일 정적 인스턴스에 고유한 것일 수 있으며, 따라서 예를 들어 도메인은 Father.Age를 공유할 수 있지만 Mother.Age를 공유할 수는 없다. 도메인이 다수의 인스턴스에 대한 필드를 공유할 필요가 있는 경우, DomainAppSharedFlds_Element는 다음과 같이 각각의 인스턴스에 대해 하나씩 다수의 필드를 지정할 수 있다.
도메인은 또한 클래스의 모든 인스턴스에 대한 필드를 공유하도록 선택할 수 있다. 그렇게 하기 위해, DomainAppSharedFlds_Element는 다음과 같이 FieldRef_Element를 사용하여 필드를 지정한다.
이 예는 Age 필드가 Person의 모든 인스턴스에 대해 공유되어야만 하는 것으로 지정한다. 이것은 동적 인스턴스와 함께 사용될 때 유용할 수 있으며, 이 경우 주어진 필드에 대한 모든 인스턴스를 항목화(itemize)하는 것은 실용적이거나 가능하지 않을 수 있다.
FieldRef_Element는 다음과 같이 부모 클래스는 물론 리프 클래스를 지정할수 있다.
이 형태는 다음과 같은 그 부모 클래스로부터 파생된 모든 리프 클래스에 대한 단축형이다.
9.3 Ruleset_Element
Domain_Element의 이 요소는 규칙 세트 레벨 자원을 정의하며, 다음의 포맷을 갖는다.
이 요소는 선택에 따라서는 Post_Attrib 필드를 사용하여 클라이언트 애플리케이션(122) 또는 규칙 베이스 논리에 의해 제어되는 대로 추론 엔진(112)이 조건부로 규칙 세트의 규칙을 도메인의 규칙 어젠더(rule agenda)로 포스트해야만 하는 것으로 지정할 수 있다. 디폴트로, 추론 엔진(112)은 규칙 세트가 로드될 때 무조건부로 규칙을 어젠더로 포스트할 수 있다. 이 요소는 또한 AppShared_Atrrib 필드를 사용하여 선택에 따라서는 규칙 세트가 클라이언트 애플리케이션(122)이 액세스가능한 것으로 지정할 수 있다. 그렇지 않은 경우, 규칙 세트는 단지 규칙 베이스 로직만이 액세스가능하다.
도메인은 다수의 규칙 세트를 클라이언트 애플리케이션(122)와 공유할 수 있다. 도메인이 임의의 규칙 세트를 공유하는 경우, 도메인 자체는 또한 자동적으로클라이언트 애플리케이션(122)과 공유될 수 있다. 규칙 세트가 애플리케이션과 공유되는 경우, Post_Attrib는 "조건부"로 설정될 수 있다. 그렇지 않은 경우, 서버(102)는 구문 에러와 함께 그 요소를 거부할 수 있다. 규칙 세트가 클라이언트 애플리케이션(122)과 공유되지 않는 경우, Post_Attrib는 "조건부" 또는 "무조건부"로 설정될 수 있다.
모든 서브요소는 Name_Attrib를 지정할 수 있다. 이들 이름은 규칙 세트 레벨에서 고유한 것일 수 있지만, 상위 레벨에서 이름을 오버라이드할 수 있으며 하위 레벨에서 오버라이드될 수 있다. 규칙 세트가 주어진 레벨에서 동일 이름의 객체를 정의하는 경우, 규칙 베이스 빌더(110)는 병합 프로세스 동안 그 객체들을 단일 규칙 베이스 객체로 병합할 수 있다.
InitMethodDef_Element, Assoc_Element, ConstraintSet_Element, 및 Class_Element 등의 규칙 세트 서브요소 중 몇개는 전술한 규칙 베이스 레벨 서브요소와 동일한 것일 수 있다. Rule_Element는 규칙 세트에 고유한 것일 수 있으며 이에 대해서는 이하에 기술되어 있다.
샘플 규칙 베이스(114)에서의 샘플 Ruleset_Element는 다음과 같을 수 있다.
10. Rule_Element
이 요소는 규칙을 정의하며, 다음의 포맷을 갖는다.
이 요소는 선택에 따라서는 Priority_Attrib 필드를 사용하여 우선순위 레벨을 지정할 수 있다. 추론 엔진(112)은 도메인 어젠더 내의 규칙들을, 최고값에서 최저값으로 또는 최저값에서 최고값으로 등과 같이 우선순위에 의해 정렬할 수 있다. 그 요소가 우선순위 레벨을 지정하지 않은 경우, 추론 엔진(112)은 0 또는 다른 적당한 값의 디폴트 우선순위를 할당할 수 있다.
이 요소는 또한 선택에 따라서는 규칙이 Enabled_Attrib 속성을 통한 추론에 대해 인에이블되어야만 하는지 여부를 지정할 수 있다. 인에이블되어 있는 경우, 규칙은 추론에 참여한다. 그렇지 않은 경우, 추론 엔진(112)은 그 규칙을 무시한다. 일 실시예에서, 그 규칙은 디폴트로 인에이블되어 있다.
규칙 정의 언어는 기본적으로 2가지 유형의 규칙, 결정 트리 규칙 및 패턴 정합 규칙을 지원한다. 여러가지 유형이 동일한 규칙 세트 내에 혼합되어 있을 수 있다. 규칙 편집기(132) 및 변환기(133) 등의 규칙 편집기 및 변환기는 부가의 유형의 규칙을 지원하려고 할 수 있다. 예를 들어, Infix-to-XML 툴은 또한 IF-THEN 규칙을 지원할 수 있다. IF-THEN 규칙은 결정 트리 규칙의 간단한 특수예를 나타내기 때문에, Infix-to-XML 툴은 IF-THEN 규칙으로부터 결정 트리 규칙을 생성할 수 있다. 동일한 것이 결정 테이블 규칙에 적용될 수 있는 데, 그 이유는 IF-THEN 규칙과 같이 결정 테이블 규칙은 결정 트리 규칙의 특수예를 나타낼 수 있기 때문이다.
샘플 규칙 베이스(114)로부터의 어떤 샘플 Rule_Element는 다음과 같을 수 있다.
10.1 DecisionTree_Element
Rule_Element의 이 요소는 결정 트리 규칙의 보디(body)를 정의한다.
10.1.1 구조 요소
결정 트리는 이하의 형식을 갖는 하나 이상의 결정을 포함한다.
10.1.1.1 결정
각각의 결정은 식별자(Name_Attrib)에 의해 지명되며, 서브요소를 포함한다.
서로 다른 규칙 내의 결정들이 동일한 결정 이름을 공유할 수 있지만, 주어진 규칙 내의 결정은 고유한 이름을 가질 수 있다. 결정은 임의의 데이터 유형의 기본 표현식(GeneralExpr)을 정의할 수 있다. 이 표현식은 필드를 참조하고 메소드를 호출할 수 있다. 결정은 또한 하나 이상의 테스트 그룹(DecTestGroup_Element)을 정의할 수 있다. 결정은 또한 선택에 따라서는 otherwise(다른 경우) 구문(clause)(DecOtherwise_Element) 및/또는 unknown(미지) 구문(DecUnknown_Element)을 정의할 수 있다.
10.1.1.2 결정 테스트 그룹
각각의 테스트 그룹은 하나 이상의 케이스 표현식(case expression) 및 동작구문을 지정하고, 다음의 형식을 갖는다.
추론 엔진(112)은 케이스 표현식(DecCaseExpr)의 값을 결정의 기본 표현식의 값과 비교한다. 추론 엔진(112)이 적어도 하나의 "같은" 비교를 발견한 경우, 추론 엔진(112)은 그 그룹의 동작 구문(DecAction)에 의해 지정된 동작을 수행한다.
10.1.1.3 다른 경우 결정 구문(Decision Otherwise Clauses)
다른 경우 구문는 현재의 결정에 대한 디폴트 동작 구문를 지정하며, 다음의 형식을 갖는다.
결정 테스트 그룹이 없거나 그 그룹 중 어느 것도 비교의 결과가 참이 아닌 경우, 추론 엔진(112)은 이 구문의 동작 구문(DecAction)에 의해 지정된 동작을 수행한다.
10.1.1.4 미지 결정 구문
다른 경우 구문와 같이 미지 구문는 현재의 결정에 대한 특수한 경우의 동작 구문이며, 다음의 형식을 갖는다.
추론 엔진(112)이 미지의 필드 참조로 인해 결정의 기본 표현식을 평가할 수 없는 경우, 추론 엔진(112)은 이 구문의 동작 구문(DecAction)에 의해 지정된 동작을 수행한다.
10.1.1.5 결정 동작 구문
동작 구문는 2가지 유형의 동작 중 하나를 지정할 수 있으며, 이하의 형식을 갖는다.
서술문 동작 구문(DecStatements_Element)는 수행될 0개 이상의 서술문을 지정한다. 이들 동작의 수행시에, 추론 엔진(112)은 "기동된" 또는 "보류된" 상태에서(구문가 어떤 서술문을 지정하는 경우) "불이행" 상태에서(구문가 어떤 서술문도 지정하지 않은 경우) 규칙을 종료한다.
결정 동작 구문(DecRef_Element)는 현재의 결정 트리 규칙 내의 다른 결정을 지명한다. 추론 엔진(112)은 지명된 결정을 현재의 결정의 서브결정으로서 속행한다. 주어진 규칙의 경우, 다수의 결정 동작 구문는 (동일한 결정에 있든지 다른결정에 있든지 상관없이) 모두 동일한 결정을 서브결정으로서 참조할 수 있다.
10.1.1.6 테스트 그룹 케이스 표현식
각각의 테스트 그룹 케이스 표현식은 부분 비교를 지정하며, 다음의 형식을 갖는다.
부분 비교(PartComp_xxx_Elements)에 대해서는 나중에 기술한다. 일 실시예에서, 이들 표현식은 상수 표현식일 필요가 없다. 예를 들어, 이들 표현식은 자유롭게 필드를 참조하고 메소드를 호출할 수 있다. 이들 표현식은 또한 결정의 기본 표현식과 유형 호환일 수 있다.
10.1.2 동적 식별자 경로에서의 널
일 실시예에서, 동적 식별자 경로는 널 값을 포함할 수 있다. 예를 들어, 이하의 서술문에서,
SpouseOf는 널 값을 가질 수 있다. 널 값이 기본 표현식 평가 동안 검출되는 경우, 추론 엔진(112)은 (그 규칙이 다른 구문를 지정하지 않은 한) 그 규칙을불이행할 수 있다. 널 값이 테스트 케이스 평가 동안에 검출되는 경우, 추론 엔진(112)은 그 테스트 케이스(test case)를 불이행하고 다른 테스트 케이스로 재개할 수 있다. 널 값이 동작을 수행하는 동안 검출되는 경우, 추론 엔진(112)은 에러와 함께 추론을 중지할 수 있다.
추론 엔진(112)은 또한 동작 서술문을 생각할 수 있다. 예를 들어, 이들 서술문에서,
중지하기 보다는, 추론 엔진(112)은 관계 서브표현식을 거짓으로 평가할 수 있다. 이와 마찬가지로, 다음과 같은 기본 표현식 전제의 경우,
추론 엔진(112)은 개별적인 비교를 불이행할 수 있다. 그렇지만, Owner가 널인 경우, Spouse는 널이 아니며, Spouse는 충분히 젊고, 추론 엔진(112)은 여전히 기본 표현식을 참으로 평가할 수 있다.
10.1.3 예시적인 규칙 및 행동
결정 트리 결정은 C, C++, 및 자바에서 발견되는 스위치 서술문(switch statement)과 유사할 수 있다. 결정의 기본 표현식은 스위치 표현식에 대응할 수 있으며, 테스트 그룹 케이스 표현식은 스위치의 케이스 서술문에 대응할 수 있으며, 결정의 다른 구문는 스위치의 디폴트 케이스에 대응할 수 있다.
여기에 단일 결정을 반영하는 아주 간단한 결정 트리 규칙의 infix 코드 일례가 있다.
이 예는 보다 전통적인 IF 규칙의 등가물이다. 이 규칙은 Fact2가 거짓인 경우 Fact1을 참으로 설정한다.
여기에 다수의 결정을 반영하는 다른 예가 있다.
이 규칙은 나이를 평가하고 그 결과에 기초하여 조건부로 동작을 수행한다. 어떤 경우(나이가 15인 경우 등), 동작은 다른 결정(그 규칙에 그의 구별적인 트리 유사 행동을 제공함)을 처리하는 것이다. 다른 경우에(나이가 35인 경우 등), 수행할 동작이 없다.
이 예에서, 결정 테스트 그룹은 (나이 35 및 45에 대한 경우와 같이) 동작을 공유하기 위해 케이스를 "축적"(stack)할 수 있다. 미지 구문의 사용은 나이가 미지인 상황을 포착하고, 다른 경우 구문의 사용은 결정 테스트 그룹에 의해 포함되지 않은 상황을 포착한다.
10.1.4 부가의 행위
10.1.4.1 규칙 베이스 컴파일 동안
일 실시예에서, 규칙 베이스 빌더(110)는 주어진 결정 트리 규칙에 대해 모든 결정이 고유하게 지명되도록 할 수 있다. 이 실시예에서, 규칙 베이스 빌더(110)는 또한 규칙의 결정들 중 정확하게 하나가 임의의 다른 결정에 의해 서브결정으로 참조되지 않도록 할 수 있다. 규칙 베이스 빌더(110)는 이 결정을 규칙의 루트 결정으로서 구분할 수 있다. 규칙은 결정들이 어떻게 서로를 서브결정으로 참조할 수 있는지에 상관없이 결정을 임의의 순서로 지정할 수 있다. 다수의 결정 동작 구문이 동일한 결정을 서브결정으로 지정할 수 있다. 규칙 베이스 빌더(110)는 자기 참조 결정 및 결정들 간의 "순환적" 결정을 허용하지 않을 수 있다.
10.1.4.2 추론 동안
일 실시예에서, 추론 엔진(112)은 루트 결정에서 규칙 처리를 시작한다. 이 실시예에서, 추론 엔진(112)은 이어서 거기에서의 결과에 따라 그 결정의 내포된 결정 중 기껏해야 하나의 결정으로 진행할 수 있다. 결정은 임의의 수의 레벨까지 내포될 수 있지만, 각각의 레벨에서 추론 엔진(112)의 행위는 유사할 수 있다.
주어진 결정에 있어서, 추론 엔진(112)은 먼저 결정의 기본 표현식을 평가한다. 그것이 미지의 필드 참조로 인해 실패하는 경우, 추론 엔진(112)은 (미지의 구문가 지정되어 있는 경우) 그 미지의 구문에 대한 동작을 수행한다. 이러한 구문가 없는 경우, 추론 엔진(112)은 즉각적으로 보류 상태에 있는 규칙 처리를 종료한다.
추론 엔진(112)이 성공적으로 결정의 기본 표현식을 평가하는 경우, 추론 엔진(112)은 그 다음에 그 표현식의 값을 임의의 테스트 그룹 케이스 표현식에 대해 적용한다. 추론 엔진(112)은 결정에 의해 지정된 순서로 테스트 그룹을 방문한다. 각각의 테스트 그룹 내에서, 추론 엔진(112)은 테스트 그룹에 의해 지정된 순서로 케이스 표현식을 방문한다.
참인 케이스를 검출할 때, 추론 엔진(112)은 그 소유 그룹의 동작을 수행한다. 임의의 테스트 그룹 내의 케이스 어느 것도 적용되지 않는 경우, 추론 엔진(112)은 다른 경우-구문의 동작(정의되어 있는 경우)을 수행하거나 불이행 상태에 있는 규칙 처리를 종료한다.
서술문 동작 구문는 비어있거나 채워져 있을 수 있다. 비어있는 경우, 추론 엔진(112)은 불이행 상태에서 규칙 프로세싱을 종료한다. 그렇지 않은 경우, 추론 엔진(112)은 기동 또는 보류 상태에서 규칙 프로세싱을 종료한다.
10.1.4.3 케이스 표현식에 대한 규칙 보류
추론 엔진(112)은 테스트 그룹의 케이스 표현식을 공통인 동작에 대한 대체 자격 요건으로서 볼 수 있다. 케이스 표현식 중 어느 것이라도 참인 케이스가 되는 경우, 추론 엔진(112)은 그룹의 동작을 수행한다.
케이스 표현식 평가가 미지의 필드 참조로 인해 실패하는 경우, 추론 엔진(112)은 참인 경우에 대한 그룹의 케이스 표현식 중 다른 것들을 평가한다. 하나도 발견되지 않는 경우, 추론 엔진(112)은 규칙을 보류 상태에서 종료한다.
이러한 핸들링의 결과, 다수의 테스트 케이스 내의 테스트 그룹은 구문적으로 단일 테스트 케이스를 각각 갖는 다수의 테스트 그룹에 동등하지 않을 수 있다.예를 들어, 이하의 테스트 그룹이 주어지면,
최대값 및 최소값을 알지 못하는 경우라도, 추론 엔진(112)은 기본 표현식의 값이 위험한 범위 내에 속하는 경우 규칙을 기동시킨다. 그렇지만, 이하의 겉보기에 동등한 테스트 그룹이 주어지면,
최소값을 알지 못하는 경우 최대값 및/또는 범위값을 알고 있더라도, 추론 엔진(112)은 즉각적으로 보류 상태에서 규칙을 종료한다.
10.1.4.4 서술문 동작에 대한 규칙 보류
규칙 동작을 수행하는 동안, 추론 엔진(112)이 미지의 필드에 대한 참조를 검출하는 경우, 추론 엔진(112)은 즉각적으로 보류 상태에서 규칙을 종료한다. 규칙을 재시작할 때, 추론 엔진(112)은 이전에 규칙 보류를 야기하였던 동작 내에서의 실행을 재개한다.
10.1.5 기타 고려 사항
추론 엔진(112)은 결정 트리 규칙을 정방향 추론하거나 역방향 추론하거나 할 수 있다. 일 실시예에서, 결정 트리 규칙이 (inst_make 내장 메소드를 통해) 동적 인스턴스를 생성할 수 있더라도, 결정 트리 규칙은 그렇지 않은 경우 동적 인스턴스에 액세스할 수 없다. 이 실시예에서, 결정 트리 규칙은 정적 인스턴스에 대한 메소드 및 필드만 참조할 수 있을 뿐이다.
10.2 PatternMatching_Element
Rule_Element의 이 요소는 패턴 정합 규칙을 정의하며, 다음의 포맷을 갖는다.
이 규칙은 하나 이상의 옵션을 필드로서 지정할 수 있다. 이들 옵션은 인스턴스 바인딩의 순서 결정 및 추론 엔진(112)이 그 규칙을 (첫번째 바인딩에 대해) 한번만 기동시키는지 (모든 바인딩에 대해) 여러번 기동시키는지에 영향을 미친다. 디폴트로, 추론 엔진(112)은 선입선출(first in-first out) 방식으로(least-recent) 바인딩의 순서를 정하고 모든 바인딩에 대해 그 규칙을 기동시킬 수 있다.
PM_Attribs가 다수의 옵션을 지정하는 경우, 그 옵션들은 다음과 같이 콤마-분리되어 있을 수 있다.
그 옵션들은 또한 임의의 순서로 지정될 수 있다.
PatternMatching_Element는 바인드-변수 선언(PMBindVars), 규칙 논리(PMPremise_Element, PMActions_Element), 및 선택적인 정렬 사양(PMOrderBy_Element) 3개의 서브요소를 포함할 수 있다.
샘플 규칙 베이스(114)로부터의 패턴 정합 규칙의 infix-코드 예는 다음과같을 수 있다.
이 규칙은 Person의 모든 인스턴스에 적용되어 형제가 없는 인스턴스를 항목화한다. 그 결과는 나이에 의해 순서가 정해진다. 나이가 동일한 경우, 보다 최근의 바인딩이 덜 최근의 바인딩보다 선행한다.
패턴 정합 규칙은 보다 동적이며 다른 규칙에서 수행되는 인스턴스 생성, 수정, 및 삭제에 자동적으로 반응한다. 예를 들어, 그 자체를 정보원으로 이용하고그에 따라 모든 형제 관계를 계산하는 단일 규칙은 다음과 같을 수 있다.
동적 식별자 경로가 널 값을 포함하는 경우, 추론 엔진(112)은 결정 트리 규칙에 관하여 전술한 것과 동일한 동작을 수행할 수 있다.
10.2.1 PMBindVars 구성체
이 구성체(construct)는 패턴 정합 규칙에 대한 바인드 변수를 선언하며, 다음의 포맷을 갖는다.
이 구성체는 하나 이상의 바인드 변수를 선언할 수 있다. 각각의 선언은 변수 이름(PMBindVarDcl_Attribs Name_Attrib) 및 클래스 이름을 지정한다. 서로 다른 바인드 변수가 동일한 클래스 또는 서로 다른 클래스와 관련될 수 있다. 다음과 같은 infix-코드 선언의 경우,
생성된 규칙 정의 언어 코드는 다음과 같을 수 있다.
전술한 바와 같이, loc_tag 필드는 추론 엔진(112)이 에러 메시지 및 추적메시지에 포함할 수 있는 필드를 나타낸다. loc_tag 필드는 추론 동작을 수행할 때 추론 엔진(112)에 의해 처리될 필요가 없다. 게다가, 규칙 정의 언어에서 계층적으로 보다 하위의 요소들이 loc_tag 값을 오버라이드하지 않는 한, loc_tag 필드는 그 하위 요소들에 적용될 수 있다. 그 결과, loc_tag 필드는 소스-입력 라인 번호를 XML 요소에 첨부하기 위해 사용될 수 있다.
10.2.2 PMPremise_Element
이 요소는 규칙의 전제를 정의한다.
GeneralExpr은 이 규칙에 대해 선언된 바인드 변수들 모두를 참조하는 부울 표현식일 수 있다. 그렇지 않은 경우, 서버(102)는 구문 에러(syntax error)와 함께 그 규칙을 거부할 수 있다.
10.2.3 PMActions_Element
이 요소는 규칙의 동작을 정의한다.
규칙 동작은 바인드 변수를 통해 어떤 필드값들을 참조할 수 있지만, 서버(102)는 이러한 참조를 고집하지 않을 수 없다.
10.2.4 PMOrderBy_Element
이 요소는 인스턴스 바인딩을 정렬하기 위한 조건을 지정하며, 다음의 포맷을 갖는다.
이 요소는 0개 이상의 숫자 또는 스트링 표현식을 정렬 조건(sort criteria)으로서 지정한다. 추론 엔진(112)은 먼저 제1 표현식에 의해 바인딩을 정렬하고, 이어서 제2 표현식에 의해 정합 바인딩을 정렬하며, 이하 마찬가지이다. 모든 그들 비교 이후에 바인딩이 여전히 정합하는 경우, 추론 엔진(112)은 mostrecent 옵션에 따라 순서 결정을 분석할 수 있다. 정렬은 오름차순, 내림차순 또는 다른 적당한 순서로 행해질 수 있다. 숫자 표현식에 대해 내림 차순이 요망되는 경우, 사용자는 다음과 같이 그 표현식을 부정(negate)할 수 있다.
10.2.5 기타 고려사항
일 실시예에서, 추론 엔진(112)은 패턴 정합 규칙을 역방향 추론하지 않고 정방향 추론할 수 있다. 이 실시예에서, 추론 엔진(112)은 역방향 추론 동안에 임의의 패턴 정합 규칙을 무시할 수 있다. 패턴 정합 규칙은 또한 정적 및 동적 인스턴스 둘다 또는 이 두가지 유형의 혼합에 작용할 수 있다. 그 규칙은 자유로이 정적 인스턴스를 수정할 수 있으며, 또 그 규칙은 자유로이 동적 인스턴스를 생성, 수정 및 삭제할 수 있다. 패턴 정합 인스턴스 바인딩을 계산하는 경우, 추론 엔진(112)은 inst_template 내장 인스턴스를 무시할 수 있다. 바인드 변수는 객체의 수퍼 클래스와 관련될 수 있다. 예를 들어, 사용자가 Bird 바인드 변수를 지정할 수 있으며, 추론 엔진(112)은 Duck, Robin, 및 Hawk의 인스턴스에 대해 다형적으로 패턴 정합을 행할 수 있다.
11. 서술문 구성체
이 구성체는 논리 서술문에 대한 규칙 정의 언어의 요소를 정의하며, 다음의 포맷을 갖는다.
11.1 VarDclStmt_Element
Statement의 이 요소는 지역 변수를 선언하며, 다음의 포맷을 갖는다.
이 서술문은 규칙 및 메소드 논리 둘다에 의해 지정될 수 있다. 이 서술문은 그 논리 내의 어느 곳에라도 위치될 수 있지만, 그의 위치 결정은 그의 범위 가시성(scope visibility)에 영향을 줄 수 있다. 지역 변수는 세트 인스턴스 및 연관 인스턴스를 비롯한 임의의 데이터 유형일 수 있다. 이 서술문은 지역 변수에 대한 초기화 값을 지정할 수 있다. GeneralExpr은 유형 호환 초기화값을 정의한다. 이 표현식은 상수 표현식일 필요는 없다.
샘플 규칙 베이스(114)로부터의 infix 코드 예는 다음과 같을 수 있으며,
대응하는 규칙 정의 언어 코드는 다음과 같을 수 있다.
11.2 AssignmentStmt_Element
Statement의 이 요소는 할당 서술문을 정의하며, 다음의 포맷을 갖는다.
이 요소는 규칙 및 메소드 논리 둘다에 의해 지정될 수 있다. 추론 엔진(112)이 GeneralExpr을 평가하고 그의 값을 유형 호환의 지정된 목적지 객체에 할당한다. 목적지 객체는 필드 또는 지역 변수일 수 있다. 필드인 경우, 추론 엔진(112)은 먼저 그 할당을 완료하기 전에 제약 검사를 호출할 수 있다.
피연산자(operand)가 숫자 유형을 갖는 경우, 추론 엔진(112)은 피연산자 정밀도를 비교한다. GeneralExpr 정밀도가 목적지 객체의 정밀도보다 낮은 경우, 추론 엔진(112)은 목적지 정밀도와 일치시킨 다음에 할당을 수행하기 위해 GeneralExpr 값을 제로 확장(zero-extend)시킬 수 있다. 그렇지 않은 경우, 추론 엔진(112)은 목적지 정밀도와 일치시키기 위해 필요에 따라 GeneralExpr 값을 반올림한다.
샘플 규칙 베이스(114)로부터의 infix-코드 예는 다음과 같을 수 있으며,
대응하는 규칙 정의 언어 코드는 다음과 같을 수 있다.
11.3 MethodCall_Element
Statement의 이 요소는 메소드 호출 서술문을 정의하며, 다음의 포맷을 갖는다.
이 요소는 규칙 및 메소드 논리에 의해 지정될 수 있다. 추론 엔진(112)은 임의의 지정된 인자를 갖는 지정된 메소드를 호출할 수 있다. 이 요소는 독립적서술문으로서 또한 (호출된 메소드가 값을 반환하는 경우) 표현식 내의 항으로서 적용될 수 있다. 호출은 0개 이상의 인자 표현식을 수반할 수 있다. 인자의 수는 타겟 메소드가 예상하는 파라미터의 수와 동일할 수 있으며, 각각의 인자는 그의 대응하는 메소드 파라미터와 유형 호환일 수 있다. 메소드 파라미터가 출력 파라미터인 경우, 인자는 필드 또는 지역 변수의 식별자일 수 있다.
인자 및 파라미터가 숫자 유형인 경우, 추론 엔진(112)은 그의 정밀도를 비교한다. 소스 객체(입력 파라미터에 대한 인자, 출력 파라미터에 대한 파라미터) 정밀도가 목적지 객체(입력 파라미터에 대한 파라미터, 출력 파라미터에 대한 인자)의 정밀도보다 낮은 경우, 추론 엔진(112)은 목적지 정밀도와 일치시킨 다음에 그 값을 전달하기 위해 소스 값을 제로 확장한다. 그렇지 않은 경우, 추론 엔진(112)은 목적지 정밀도와 일치시키기 위해 필요에 따라 소스 값을 반올림한다. 유사한 고려 사항이 숫자 유형의 메소드 반환값에 적용될 수 있다. 추론 엔진(112)은 반환값을 목적지 객체에 할당하기에 앞서 그 값을 조정 또는 반올림할 수 있다.
샘플 규칙 베이스(114) 내의 패턴 정합 규칙으로부터의 infix-코드 예는 다음과 같을 수 있으며,
대응하는 규칙 정의 언어 코드는 다음과 같을 수 있다.
11.4 ReturnStmt_Element
이 요소는 메소드 반환 서술문을 정의하며, 다음의 포맷을 갖는다.
일 실시예에서, 이 서술문은 메소드 논리에 의해서만 지정될 수 있으며 규칙 논리에 의해서는 지정될 수 없다. 규칙 논리 내에서 지정되는 경우, 서버(102)는 구문 에러와 함께 그 서술문을 거부할 수 있다. 이 서술문을 실행할 때, 추론 엔진(112)은 메소드 실행을 종료하고 그 메소드를 호출한 코드로 제어를 반환할 수 있다. 그 서술문이 GeneralExpr을 지정하는 경우, 현재의 메소드는 값을 반환하는 것으로 정의될 수 있으며, 선언된 반환 데이터 유형은 그 서술문의 GeneralExpr과 유형 호환일 수 있다. MethodCall_Element에 대해 기술한 바와 같이, 추론 엔진(112)은 숫자 유형의 반환값을 조정 또는 반올림할 수 있다.
샘플 규칙 베이스(114)로부터의 infix-코드 예는 다음과 같을 수 있으며,
대응하는 규칙 정의 언어 코드는 다음과 같을 수 있다.
12. GeneralExpr 구성체
GeneralExpr 구성체는 규칙 정의 언어로부터 참조되는 표현식을 정의하며,다음의 포맷을 갖는다.
GeneralExpr은 예상된 일련의 항(term) 및 연산자(operator)를 지원한다. 전술한 바와 같이, 표현식 평가는 어떤 부수 효과도 생성할 수 없다. 그 자체로서, 표현식에 의해 호출되는 어떤 메소드도 어떤 부수 효과도 생성할 수 없다. 함수 메소드라고 하는 이들 메소드에 대해서는 상기의 ClassMethodDef_Element 섹션에서 상세히 기술되어 있다.
일 실시예에서, 문법(grammar)은 데이터 유형 호환 동작을 비호환 동작과 구별하려는 어떠한 시도도 하지 않는다. 예를 들어, 문법은 부울값을 스트링값에서 뺄 수 있는 것으로 암시할 수 있다. 이 실시예에서, 유형 호환 시행은 서버(102)에 의해 수행되며, 이 서버(102)는 유형 검사 및 상수 계산(constant folding) 둘다를 수행한다.
어떻게든 대부분의 유형의 항 및 연산자의 샘플링을 포함하는 샘플 infix-코드 서술문은 다음과 같을 수 있다.
이 서술문에 대한 대응하는 규칙 정의 언어는 다음과 같을 수 있다.
12.1 SimpleTerm 구성체
GeneralExpr의 SimpleTerm은 다음의 포맷을 가질 수 있다.
LiteralCostant_Element 및 SetConstant_Element에 대해 여기에 기술한다. IdentifierSpec에 대해서는 본 문서에서 나중에 기술하고, MethodCall_Element에 대해서는 전술하였다.
12.1.1 LiteralConstant_Element
LiteralConstant_Element는 다음의 포맷을 갖는다.
Value_Attrib는 상수의 값을 문자의 스트링으로서 나타낸다. 서버(102)는 상수의 데이터 유형을 결정하기 위해 (대소문자 구분하지 않고) 이 값을 검사할 수 있다. 그 값이 "참" 또는 "거짓"인 경우, 서버(102)는 그 상수가 부울 상수로서 인식한다. 그 값이 "널"인 경우, 서버(102)는 그 상수를 (연관 인스턴스의 부존재를 나타내는) 연관 인스턴스 상수로서 인식한다. 그 값의 첫번째 문자가 겹따옴표(double-quote) 문자인 경우, 서버(102)는 그 상수를 스트링 상수로서 인식하고 그 값의 마지막 문자도 역시 겹따옴표인지를 확인한다. 그렇지 않은 경우, 서버(102)는 그 상수가 숫자 상수인 것으로 가정하고 그에 따라 그것을 파싱한다. 추론 엔진(112)은 소수점 오른쪽에 있는 숫자의 개수를 검사함으로써 그 상수의 정밀도를 결정한다. 상수가 과학적 표기법(scientific notation)으로 표현되어 있는 경우, 정밀도는 또한 지수값을 고려한다.
리터럴 상수의 infix-코드 예는 다음과 같을 수 있으며,
대응하는 규칙 정의 언어 코드는 다음과 같을 수 있다.
12.1.2 SetConstant_Element
SetConstant_Element는 다음의 포맷을 갖는다.
세트는 0개 이상의 멤버를 포함한다. 일 실시예에서, 세트의 모든 멤버는동일한 데이터 유형이어야만 한다. (멤버가 있는 경우) 멤버의 데이터 유형은 세트 상수의 데이터 유형이다. 멤버는 리터럴 상수, IdentifierSpec(연관 인스턴스의 세트의 경우), 또는 리터럴 상수에 대한 단항 연산자일 수 있다. 리터럴 상수에 대한 단항 연산자의 경우, 리터럴 상수는 숫자 또는 부울 상수일 수 있다. 숫자 세트 상수의 경우, 세트의 멤버가 정밀도를 갖더라고 그 세트 자체는 정밀도를 갖지 않을 수 있다. 이와 마찬가지로, 인스턴스 세트 상수는 임의의 특정의 연관에 바인드되지 않을 수 있다.
세트 상수의 infix-코드 예는 다음과 같을 수 있으며,
대응하는 규칙 정의 언어 코드는 다음과 같을 수 있다.
12.2 RelationTerm 구성체
RelationTerm은 값 비교를 정의하며, 다음의 포맷을 갖는다.
값 비교는 전술한 전체 비교(full comparision) 및 부분 비교(partialcomparision)를 포함할 수 있다.
12.2.1 전체 비교 구성체
전체 비교는 값의 범위를 수반하는 이항 연산(binary operation) 또는 삼항 연산(ternary operation)을 포함할 수 있다. 예시적인 이항 연산은 다음과 같을 수 있고,
예시적인 삼항 연산은 다음과 같을 수 있다.
어느 경우든지, 표현식은 그 비교 결과를 나타내는 부울값을 반환한다.
이상의 3개의 infix 서술문에 대응하는 규칙 정의 언어는 다음과 같을 수 있다.
전체 비교 요소는 다음의 포맷을 가질 수 있다.
이들 요소 모두에 있어서, GeneralExprs은 모두 동일한 데이터 유형일 수 있다. 그렇지만, 어떤 연산자들은 오로지 어떤 데이터 유형만을 지원한다. 예를 들어, 같은(equality) 및 같지 않음(inequality)의 비교는 모든 데이터 유형 및 값의 세트를 지원한다. 같지 않은 세트는 교차하거나 교차하지 않을 수 있다. 크기의 비교는 오로지 숫자 및 스트링 표현식만을 지원할 수 있지만 세트에도 역시 적용될 수 있다. 세트의 경우, 그 결과는 서브셋 관계를 나타낸다. 숫자값을 비교하는 경우, 추론 엔진(112)은 먼저 정밀도가 낮은 피연산자를 상대방 피연산자의 정밀도에 맞춰 제로 확장한 다음에 비교를 수행한다.
요소들 모두에 대해, 다음의 포맷에서 Comp_Attribs를 지정할 수 있다.
CaseSensitivity_Attrib는 대소문자 구별의 스트링 비교를 나타내도록 지정될 수 있다. 디폴트로, 스트링 비교는 대소문자를 구별하지 않거나 대소 문자를 구별할 수 있다. 다른 데이터 유형에 대한 비교의 경우, 이 설정은 무시될 수 있다.
12.2.2 부분 비교 구성체
범위 비교는 부분 비교 구성체 또는 전체 비교의 "오른쪽"만을 지정하는 구성체에 의존한다. 부분 비교 구성체는 다음의 포맷을 갖는다.
결정 트리 요소에 의해서도 역시 사용될 수 있는 이들 구성체는 하나의 GeneralExpr(또는 범위의 경우는 2개)을 지정한다. 동일한 데이터 유형 및 대소 문자 구별 고려 사항이 전체 비교의 경우에서와 같이 이들 구성체에 적용된다.
12.3 단항 연산자 요소
GeneralExpr의 단항 연산자는 UnaryPlusExpr_Element,UnaryMinusExpr_Element, 및 UnaryNotExpr_Element를 포함한다.
12.3.1 UnaryPlusExpr_Element
GeneralExpr의 UnaryPlusExpr_Element는 다음의 포맷을 갖는다.
이 연산은 기본적으로 GeneralExpr의 값을 반환한다. 이 연산은 다음과 같이 "표현가능성"(expressability) 여부를 위해 포함된다.
GeneralExpr은 숫자 표현식일 수 있으며, 이 연산은 숫자값을 반환한다.
12.3.2 UnaryMinusExpr_Element
UnaryMinusExpr_Element는 다음의 포맷을 갖는다.
이 연산은 GeneralExpr 값의 산술 부호를 반전시킨다. 양의 값은 음의 값이 되고 그 역도 마찬가지이다. GeneralExpr은 숫자 표현식일 수 있으며, 이 연산은 숫자값을 반환한다.
12.3.3 UnaryNotExpr_Element
UnaryNotExpr_Element는 다음의 포맷을 갖는다.
이 연산은 GeneralExpr의 부울값을 반전시킨다. 참 값은 거짓이 되고, 그 역도 마찬가지이다. GeneralExpr은 부울 표현식일 수 있으며, 이 연산은 부울값을 반환한다.
12.4 이항 연산자 요소
이항 연산자는 ORed_Element, ANDed_Element, Addition_Element, Subtraction_Element, Concatenation_Element, Multiplication_Element, 및 Division_Element를 포함한다.
12.4.1 Ored_Element
Ored_Element는 OR 연산을 지원하며, 다음의 포맷을 갖는다.
이 연산은 서브요소에 대한 논리적 OR 연산을 수행한다. 그 결과는 어느 한 서브요소가 참인 경우 참이다. 그렇지 않은 경우, 그 결과는 거짓이다. GeneralExpr은 둘다 부울 표현식일 수 있으며, 이 연산은 부울값을 반환한다.
런타임 시에, 추론 엔진(112)은 GeneralExpr 중 하나만을 평가할 수 있다.예를 들어, 이하의 infix-코드 표현식의 경우,
fld1이 50의 값을 가지면, 추론 엔진(112)은 전체 결과가 참임을 알기 때문에 번거롭게 fld2를 테스트할 필요가 없다. 그렇지만, fld1을 알지 못하는 경우, fld2가 250 등의 충분히 큰 값을 갖는 경우 추론 엔진(112)이 그 규칙을 보류시키는 것을 회피할 수 있도록, 추론 엔진(112)은 fld2를 테스트할 수 있다. 이와 마찬가지로, 추론 엔진(112)은 또한 중간 인스턴스-참조 필드를 갖는 식별자 경로 중 어느 것이 널 값을 갖는지 결정할 수 있다. 예를 들어, 이하의 infix 코드 표현식의 경우,
Father는 어떤 개도 가질 수 없다(pDog = 널). 그렇지만, 추론 엔진(112)은 Child의 친구의 나이가 충분한 경우 그 표현식을 참으로 평가할 수 있다.
ORed_Element가 이항 연산자로 기술되어 있지만, 이는 또한 임의의 수의 피연산자에 대응할 수 있다. 예를 들어, ORed_Element가 하나 이상의 피연산자의 "리스트"를 처리할 수 있다. ORed_Element 내의 하나 이상의 피연산자로 인해 규칙이 보류되는 경우, 추론 엔진(112)은 이전에 보류된 그 피연산자들(및 단지 그 피연산자들)로 추론을 재시작할 수 있다.
12.4.2 ANDed_Element
ANDed_Element는 AND 연산을 지원하고, 다음의 포맷을 갖는다.
이 연산은 서버 요소에 대한 논리적 AND 연산을 수행한다. 양쪽 서브요소가 참인 경우에 그 결과는 참이다. 그렇지 않으면, 그 결과는 거짓이다. GeneralExpr은 둘다 부울 표현식일 수 있으며, 이 연산은 부울값을 반환한다. 런타임시에, 추론 엔진(112)은 GeneralExpr 중 하나만 평가할 수 있다. 예를 들어, 이하의 infix-코드 표현식의 경우,
fld1이 50의 값을 갖는 경우, 추론 엔진(112)은 전체 결과가 거짓임을 알기 때문에 번거롭게 fld2를 테스트할 필요가 없다. 그렇지만, fld1을 모르는 경우, fld2가 250 등의 충분히 큰 값을 갖는 경우 추론 엔진(112)이 그 규칙을 보류시키는 것을 피할 수 있도록, 추론 엔진(112)은 fld2를 테스트할 수 있다. 이와 유사하게, 추론 엔진(112)은 또한 중간 인스턴스-참조 필드를 갖는 식별자 경로 중 어느 것이 널 값을 갖는지 여부를 결정할 수 있다. 예를 들어, 다음의 infix 코드 표현식의 경우,
Father는 어떤 개도 가질 수 없다(pDog = 널). 그렇지만, 추론 엔진(112)은 Child의 친구의 나이가 충분치 않은 경우 그 표현식을 거짓으로 평가할 수 있다.
ANDed_Element가 이항 연산자로서 기술되어 있지만, 그것은 또한 임의의 수의 피연산자에 대응할 수 있다. 예를 들어, ANDed_Element는 하나 이상의 피연산자의 "리스트"를 처리할 수 있다. 규칙이 ANDed_Element 내의 하나 이상의 피연산자로 인해 보류되어 있는 경우, 추론 엔진(112)은 이전에 보류되었던 그 피연산자들(및 그 피연산자들만)로 추론을 재시작할 수 있다.
12.4.3 Addition_Element
Addition_Element는 가산 연산을 지원하며, 다음의 포맷을 갖는다.
이 연산은 서브요소의 산술적 가산을 수행한다. 이 연산은 제2 서브요소를 제1 서브요소에 가산하는 결과를 반환한다. GeneralExpr은 둘다 숫자 표현식일 수 있으며, 이 연산은 숫자값을 반환한다. 객체들을 가산할 때, 정밀도가 더 낮은 객체는 산술 연산 이전에 상대방 객체의 정밀도에 맞게 제로 확장될 수 있다. 그 결과는 더 높은 정밀도를 반영할 수 있다.
12.4.4 Subtraction_Element
Subtraction_Element는 가산 연산을 지원하며, 다음의 포맷을 갖는다.
이 연산은 서브요소들의 산술적 감산을 수행한다. 이 연산은 제1 서브요소로부터 제2 서브요소를 감산하는 결과를 반환한다. GeneralExpr은 둘다 숫자 표현식이며, 이 연산은 숫자값을 반환한다. 객체들을 감산할 때, 정밀도가 더 낮은 객체는 산술 연산 이전에 상대방 객체의 정밀도에 맞춰 제로 확장될 수 있다. 그 결과는 더 높은 정밀도를 반영할 수 있다.
12.4.5 Concatenation_Element
Concatenation_Element는 결합 동작을 지원하며, 다음의 포맷을 갖는다.
이 연산은 한 스트링 값을 다른 스트링 값에 첨부시킨다. 이 연산은 제1 서브요소에 제2 서브요소를 첨부하는 결과를 반환한다. GeneralExpr은 임의의 데이터 유형일 수 있으며, 그 표현식 중 어느 하나 또는 그 둘다는 세트 표현식일 수 있다. 추론 엔진(112)은 첨부 동작을 수행하기 전에 비스트링 표현식을 스트링 값으로 자동적으로 변환할 수 있다. 비스트링 값을 포맷하는 것을 제어하기 위한 옵션이 없을 수 있다. 이 연산은 스트링 값을 반환한다.
12.4.6 Multiplication_Element
Multiplication_Element는 가산 연산을 지원하고 다음의 포맷을 갖는다.
이 연산은 서브요소의 산술적 곱셈을 수행한다. 이 연산은 제1 서브요소를 제2 서브요소로 곱하는 결과를 반환한다. GeneralExpr은 둘다 숫자 표현일 수 있으며, 이 연산은 숫자값을 반환한다. 객체들에 대해 곱셈을 할 때, 정밀도 조정이 없을 수 있으며, 그 곱은 피연산자 정밀도의 합인 정밀도를 나타낼 수 있다.
12.4.7 Division_Element
Division_Element는 가산 연산을 지원하며, 다음의 포맷을 갖는다.
이 연산은 서브요소들의 산술적 나눗셈을 수행한다. 이 연산은 제1 서브요소를 제2 서브요소로 나누는 결과를 반환한다. 0으로 나누는 것은 에러와 함께 추론을 종료시킬 수 있다. GeneralExpr은 둘다 숫자 표현식일 수 있으며, 이 연산은 숫자값을 반환한다. 객체들에 대해 나눗셈을 할 때, 정밀도 조정이 없을 수 있으며, 그 몫은 피제수 값의 정밀도를 나타내고 필요에 따라 반올림될 수 있다.
13. Datatype_Element
이 사양은 Datatype_Element를 빈번히 참조한다. Datatype_Element는 다음의 포맷을 갖는다.
규칙 정의 언어는 전술한 4가지 "기본"(atomic) 데이터 유형을 지원한다. 또한, 각각의 기본 데이터 유형에 대한 Datatype_Element의 변형이 있을 수 있다.
DataType_Attrib 및 Collection_Attrib 속성은 모든 데이터 유형에 공통이다. DataType_Attrib는 관련 데이터 유형을 나타낸다. Collection_Attrib는 이 데이터 유형이 세트 등의 값의 컬렉션에 대한 것인지 또는 간단한 기본값에 대한 것인지를 나타낸다.
DataTypeNumber_Element에 있어서, 사용자는 선택에 따라서 소수점 오른쪽에 있는 십진수로 표현되는 "정밀도"를 지정할 수 있다. 지정되지 않은 경우, 서버(102)는 그 값이 0 정밀도의 정수인 것으로 가정한다.
DataTypeAssoInst_Element에 있어서, 사용자는 2개의 서브요소를 지정할 수 있다. 이들은 데이터 유형의 연관 역할 및 연관 이름을 각각 식별한다. 예를 들어, 클래스 Person 및 Duck를 수반하는 소유권 연관의 경우, 다음과 같이 Duck 클래스는 Ownership 연관에서 역할 Person에 대한 연관 인스턴스로서 선언된 필드(IsOwnedBy)를 정의할 수 있다.
DataTypeInstRef_Element에 있어서, 사용자는 인스턴스 참조와 관련된 클래스를 식별하는 서브요소를 지정한다. 예를 들어, Duck 클래스는 다음과 같이 Person 클래스에 대한 인스턴스로서 선언된 IsOwnedBy 필드를 정의할 수 있다.
14. 식별자
일 실시예에서, 식별자 이름은 대소 문자를 구별하지 않을 수 있다. 특정의 실시예에서, 규칙 정의 언어는 식별자 이름이 겹따옴표, 마침표, 콤마, 콜론, 또는 소괄호(왼쪽 소괄호 또는 오른쪽 소괄호)를 포함하는 것을 허용하지 않는다. 서버(102)는 단어를 예약하는 것 또는 어떤 순서 제한을 부과하는 것 등에 의해 부가의 제한을 부과할 수 있다.
14.1 IdentifierSpec - Identifier_Element, IdentifierPath_Element
IdentifierSpec 요소는 다음의 포맷을 갖는다.
식별자 사양은 단일 식별자 또는 다수의 식별자의 "경로"를 포함할 수 있다. 예를 들어, infix 언어는 다음과 같이 "." 연산자를 사용하는 경로를 지원한다.
14.2 내장 식별자
각각의 Identifier_Element에 있어서, 사용자는 선택에 따라 식별자가 내장 식별자, 즉 규칙 정의 언어에 내장된 식별자인 것으로 지정할 수 있다. 서버(102)는 이들 식별자를 검사하고 그 식별자들을 그의 내장 이름 리스트와 비교한다. 대소 문자 비구별 일치 등의 일치가 있을 수 있다. 그렇지 않은 경우, 서버(102)는 구문 에러와 함께 그 사용을 거부할 수 있다.
infix 언어는 각각의 내장 식별자가 "@" 접두어를 갖게 지정될 것을 요구할 수 있다. 또한, infix 언어는 다른 형태의 내장된 사용법을 지원할 수 있다. 예를 들어, 이하의 서술문쌍은 의미적으로 등가이며 동일한 규칙 정의 언어 코드를생성할 수 있다.
게다가, 서버(102)는 이 문서에 의해 정의된 것과 다른 이름을 갖는 내장 식별자를 노출하려고 할 수 있다. 예를 들어, 서버(102)는 inst_template를 보다 간단하게 "template"로서 노출하려고 할 수 있으며 후자의 이름을 그의 언어에서의 예약된 단어로 할 수 있다.
14.3 식별자 분석
규칙 정의 언어는 식별자들을 클래스, 도메인, 인스턴스, 및 필드 등의 규칙 베이스 객체들과 관련시킨다. 서버(102)는 이어서 그 객체들에 대한 이름-참조를 분석한다.
14.3.1 식별자 범위 지정
사용자는 다음과 같이 계층적 방식으로 객체들을 정의할 수 있다.
● 규칙 베이스 전역 객체
○ 클래스 고유 객체
■ 메소드 고유 지역 변수
○ 도메인 고유 객체
■ 클래스 고유 객체
● 메소드 고유 지역 변수
■ 규칙 세트 고유 객체
● 클래스 고유 객체
○ 메소드 고유 지역 변수
● 규칙 고유 지역 변수
이러한 계층 구조에서 객체의 위치는 객체 참조에 대한 그의 범위(가시성)를 결정한다. 규칙 베이스 레벨에 있는 객체는 규칙 베이스 레벨 및 그 하위 레벨 양쪽에 있는 객체들로부터 규칙 베이스 전반에 걸쳐 볼 수 있다. 도메인 레벨에 있는 객체는 도메인 레벨 및 그 하위 레벨 양쪽에 있는 객체들로부터 그의 도메인 전반에 걸쳐 볼 수 있지만, 이들 객체는 그의 도메인 밖에서는 볼 수 없다. 규칙 세트 레벨에 있는 객체는 규칙 세트 레벨 및 그의 하위 레벨 양쪽에 있는 객체로부터 규칙 세트 전반에 걸쳐 볼 수 있지만, 이러한 객체들은 규칙 세트 밖에서는 볼 수 없다. 하위 레벨에 있는 객체들은 상위 레벨에 있는 동일한 이름의 객체들을 "은닉"시킨다. 따라서, Age라는 이름의 지역 변수는 Age라는 이름의 클래스 필드를 은닉시킬 수 있다.
14.3.2 식별자 자격 요건
사용자는 일반적으로 완전한 객체 참조를 필요로 하지 않는다. 사용자는 참조를 명확히 하기에 충분한 한정자(qualifier)만 지정하면 된다. 따라서, 식별자 Age가 클래스 Person의 인스턴스 Father 내의 필드를 일의적으로 식별하는 경우, 사용자는 단순히 age라고 지정할 수 있다.
Person의 다수의 정적 인스턴스가 있는 경우, 사용자는 또한 식별자를 father.age로서 자격을 부여할 수 있다.
다수의 범위내 클래스가 Father 객체를 정의하는 경우, 사용자는 보다 완벽하게 식별자를 person.father.age로서 자격을 부여할 수 있다.
Age가 코드 블록의 범위 내에서 다수의 장소에 정의되어 있는 경우, 그 코드 블록은 적절한 한정자를 지정함으로써 그 객체들 각각을 참조할 수 있다.
14.4 정적 및 동적 IdentifierSpec 요소
14.4.1 정적 사양
정적 IdentifierSpec은 다음과 같이 추론 이전에 분석될 수 있는 값을 갖는 것이다.
일 실시예에서, IdentifierSpec은 IdentifierSpecs가 허용되는 규칙 베이스 내의 어느 곳에서라도 정적으로 지정될 수 있다. 특정의 실시예에서, 경로는 6개 이상의 식별자로 이루어지지 않을 수 있으며, 경로의 길이는 그의 해석에 영향을 준다. 예를 들어, 5개의 식별자를 갖는 필드 경로는 다음의 포맷인 것으로 가정될수 있는 반면,
3개의 식별자를 갖는 필드 경로는 다음의 포맷인 것으로 가정된다.
14.4.2 동적 사양
동적 IdentifierSpec은 다음과 같이 추론 동안에 분석되는 값을 갖는 것이다.
일 실시예에서, IdentifierSpec은 규칙 또는 메소드 논리 내에서 동적인 것으로 지정될 수 있다. 특정의 실시예에서, 이들 사양은 다음과 같이 임의의 길이를 가질 수 있다.
경로의 테일(tail)은 2개 이상의 필드 이름을 지정한다. 일 실시예에서, 마지막 필드 이름을 제외한 모두는 인스턴스-참조 필드로서 선언된 필드를 식별한다. 상기 예에서, 식별자 Manager 및 Spouse는 인스턴스-참조 필드를 지명한다.
14.4.2.1 추론 행위
추론 엔진(112)이 동적 사양 내의 여러가지 필드를 평가할 때, 추론 엔진(112)은 미지의 또는 널 필드값을 만날 수 있다.
14.4.1.1 미지의 필드값에 대한 처리
추론 엔진(112)이 미지의 값을 검출하면, 추론 엔진(112)은 현재 실행중인 규칙을 보류시킨다.
14.4.2.1.2 널 필드값에 대한 처리
추론 엔진(112)이 널 값을 갖는 중간 필드를 검출한 경우, 결과는 현재의 컨텍스트에 의존할 수 있다. 현재의 컨텍스트가 다음과 같이 비교인 경우,
추론 엔진(112)은 비교의 결과를 강제로 거짓으로 할 수 있다. 추론 엔진(112)이 비교 컨텍스트 밖에서 널 값을 검출하는 경우, 추론 엔진(112)은 에러 예외와 함께 추론을 종료한다. 이 실시예에서, Employee1이 관리자를 갖지 않는 경우(Employee1.Manager = 널), 추론 엔진(112)은 이하의 비교 모두를 거짓으로 평가한다.
15. 규칙 베이스 병합
규칙 베이스 병합은 참여하는 규칙 베이스(114) 또는 서브 규칙 베이스로부터 요소와 필드를 혼합하는 것이다. 어떤 경우에, 병합은 동일한 규칙 베이스 내의 동일한 이름의 객체들을 포함한다. 규칙 베이스 빌더(110)는 규칙 베이스 레벨, 제약 세트 레벨, 클래스 레벨, 도메인 레벨, 및 규칙 세트 레벨에서 객체 이름을 비교함으로써 규칙 베이스 요소를 병합한다.
주어진 레벨에서 중첩(동일한 이름의 요소)이 없는 경우, 결과는 간단히 그 레벨에서의 병합 객체들의 집합이다. 따라서, 하나의 규칙 베이스(114)가 Class1이라고 하는 규칙 베이스 레벨 클래스만을 정의하고 다른 규칙 베이스(114)가 Class2라고 하는 규칙 베이스 레벨 클래스만을 정의하는 경우, 병합 결과는 Class1 및 Class2 둘다를 반영하게 된다.
중첩이 있는 경우, 결과는 병합된 요소 및 필드에 의존하게 된다. 어떤 경우에, 요소와 필드의 혼합이 있게 된다. 다른 경우에, 규칙 베이스(114)들 간의 일관성에 대한 검사만이 있게 된다. 어느 경우든지, 이하의 가이드라인이 적용될 수 있다. 첫째, 병합 결과는 규칙 베이스 빌더(110)에 의해 인식된 요소 및 필드만을 반영하고 이름공간 접두어를 갖거나 미인식된 요소/필드를 포함하지 않을 수 있다. 둘째, 규칙 베이스 논리를 병합하려는 시도가 없을 수 있다. 메소드의 경우, 이것은 단지 하나의 규칙 베이스 요소만이 그 메소드에 대한 구현 논리를 정의할 수 있음을 의미한다. 규칙의 경우, 이것은 단지 하나의 규칙 베이스 요소만이 그 규칙에 대한 구현 논리를 지정할 수 있음을 의미한다. 제약의 경우, 이것은 단지 하나의 규칙 베이스 요소만이 제약 부울 표현식을 지정할 수 있음을 의미한다. 셋째, 주어진 요소에 있어서, 병합은 발견된 첫번째 LocTag_Attrib만을 반영한다. 따라서, 첫번째 규칙 베이스 요소가 LocTag_Attrib를 지정하는 경우, 병합 결과는 그 필드를 반영한다. 그렇지 않은 경우, 결과는 두번째 규칙 베이스 요소에 대한LocTag_Attrib가 있는 경우 이를 반영하게 된다. 이하의 섹션은 규칙 베이스 요소가 어떻게 병합될 수 있는지에 대한 부가의 상세를 제공한다.
15.1 IdentifierSpec 요소의 병합
이들 요소를 병합할 때, 한 요소의 사양은 상대방 요소와 동일하거나 그렇지 않으면 그의 우측 서브경로와 동일해야만 한다. 예를 들어, 한 요소가 Person.Father.Name을 지정할 수 있으며, 상대방 요소가 Person.Father.Name, Father.Name 또는 Name을 지정할 수 있다. 사양이 동일하지 않은 경우, 병합 결과는 가장 구체적인(가장 긴) 사양을 반영할 수 있다.
15.2 데이터 유형 요소의 병합
이들 요소를 병합할 때, 각각의 요소의 속성 및 서브요소는 상대방 요소의 것과 호환되어야만 한다. DataTypeNumber_Elements의 경우, Precision_Attrib가 서로 다른 경우, 병합 결과는 2개의 정밀도 중 더 큰 것을 반영할 수 있다.
15.3 규칙 베이스 요소의 병합
병합 결과는 첫번째 요소의 Name_Attrib를 반영한다.
15.4 (임의의 레벨에서의) InitMethodDef_Elements의 병합
병합 결과는 다수의 InitMethodDef_Elements를 보유할 수 있다. 따라서, 각각의 규칙 베이스 요소가 주어진 레벨에서 하나의 InitMethodDef_Element를 정의하는 경우, 결과는 그 레벨에서의 2개의 InitMethodDef_Element가 된다. 각각의 요소는 그 자신의 필드 및 서브요소를 보유하며, 병합된 요소는 서로 다른 이름을 가져야만 한다. 병합된 요소가 동일한 이름을 갖는 경우, 그 요소들 중 기껏해야 하나가 InitMethodBody(메소드 구현)를 지정할 수 있다.
15.5 (임의의 레벨에서) 동일한 이름의 Assoc_Elements의 병합
IdentifierSpec 요소는 서로 호환되어야만 한다.
15.6 (임의의 레벨에서) 동일한 이름의 ConstraintSet_Elements의 병합
규칙 베이스 빌더(110)는 Constraint_Elements를 결합할 수 있다. 동일한 이름의 Constraint_Elements의 경우, 단지 하나의 요소만이 GeneralExpr을 지정할 수 있다.
15.7 (임의의 레벨에서) 동일한 이름의 Class_Elements의 병합
다수의 요소가 Parent_Element를 지정하는 경우, 이들 사양은 서로 호환되어야만 한다. 어느 한 요소가 Parent_Element를 지정하는 경우, 병합 결과는 부모를 반영한다.
동일한 이름의 FieldDcl_Elements의 경우, ResolutionType_Attribs 및 DataType_Elements는 동일해야만 한다. 한 요소가 "최종값"을 지정하지만 상대방 요소가 그렇지 않은 경우, 그 요소는 "처음값"이 된다. 규칙 베이스 빌더(110)는 ConstraintList_Elements의 리스트를 결합할 수 있다. 양쪽 요소가 ConstraintViolation_Elements를 지정하는 경우, 규칙 베이스 빌더(110)는 가장 제한적인 것을 (재개 요소보다는 중지 요소를) 선택할 수 있다.
동일한 이름의 ClassMethodDef_Elements의 경우, 메소드 서명(파라미터 이름 제외)은 일관성이 있어야 하며, 기껏해야 하나의 요소만이 ClassMethodBody_Element를 지정할 수 있다(메소드 구현).
동일한 이름의 StaticInstDef_Elements의 경우, 규칙 베이스 빌더(110)는 LastChanceValue_Elements의 임의의 리스트를 결합할 수 있다. 동일한 이름의 식별자를 갖는 요소의 경우, 규칙 베이스 빌더(110)는 발견된 첫번째 LastChanceValue만을 보유할 수 있다. 규칙 베이스 빌더(110)는 FieldDcl_Elements에 대해서와 같이 제약을 처리한다.
15.8 동일한 이름의 Domain_Elements의 병합
어느 한 요소가 클라이언트 애플리케이션(122)과 공유되는 경우, 결과는 공유된다. 그렇지 않은 경우, 그 결과는 공유되지 않는다. 양쪽 요소가 DomainGoal_Element를 지정하는 경우, 목표는 일관성있는 값을 가져야만 한다. 어느 한 요소가 목표를 지정하는 경우, 병합 결과는 그 목표를 반영한다.
어느 한 요소가 DomainAppSharedFlds_Element를 지정하는 경우, 결과는 DomainAppSharedFlds_Element를 반영할 수 있다. 둘다가 하나를 지정하는 경우, 서브요소는 병합될 수 있지만, 동일한 식별자가 DomainPreConditionList_Element 및 DomainPostConditionList_Element 둘다로서 끝나서는 안된다.
동일한 이름의 Ruleset_Elements의 경우, 한 요소가 Post_Attrib를 "조건부"로서 지정하지만 상대방 요소가 그렇지 않은 경우, 그 요소는 "무조건부"로 된다. 어느 한 요소가 애플리케이션들과 공유되는 경우, 결과는 공유된다. 그렇지 않은 경우, 결과는 공유되지 않는다. 규칙 베이스 빌더(110)는 Rule_Element 서브요소를 결합하지만 동일한 이름의 Rule_Elements를 허용하지 않을 수 있다.
16. 내장 식별자
규칙 정의 언어는 내장 식별자를 참조한다. 이하는 infix 언어에 주어진 내장 식별자의 예들이다. 이들 예에서, infix 언어는 각각의 내장 식별자가 "@" 접두어를 가지고 지정되어야 함을 요구한다.
16.1 심볼 참조
16.1.1 scope_global
이 식별자는 규칙 베이스 범위 레벨에 대한 심볼 참조이다. 예를 들어, 이 식별자는 규칙 베이스 레벨 Class1을 도메인 레벨 Class1과 구별하는 데 유용할 수 있다. 이 식별자는 다음과 같이 식별자 경로 내의 첫번째 식별자로서 지정될 수 있다.
16.1.2 scope_currclass
이 식별자는 실행중인 메소드의 현재의 클래스에 대한 심볼 참조이다. 예를 들어, 이 식별자는 인스턴스 xyz를 지역 변수 xyz와 구별하는 데 유용할 수 있다. 이 식별자는 다음과 같이 메소드 논리 내에서 식별자 경로 내의 첫번째 식별자로서 지정될 수 있지만, 규칙 논리 내에서는 그렇지 않다.
16.1.3 scope_currinstance
이 식별자는 실행중인 메소드의 현재의 인스턴스에 대한 심볼 참조이다. 예를 들어, 이 식별자는 필드 xyz를 지역 변수 xyz와 구별하는 데 유용할 수 있다.이 식별자는 다음과 같이 메소드 논리 내에서 식별자 경로 내의 첫번째 식별자로서 지정될 수 있지만, 규칙 논리 내에서는 그렇지 않다.
16.1.4 candidate_value
이 식별자는 필드의 제안된 새로운 값에 대한 심볼 참조이다. 이 식별자는 다음과 같이 제약 부울 표현식 내에 지정될 수 있다.
16.2 내장 객체
16.2.1 inst_template
이 식별자는 모든 클래스와 관련된 내장 인스턴스에 대한 참조이다. 이 식별자는 동적 인스턴스 생성의 모델로서 기능한다. 규칙 또는 메소드는 새로운 동적 인스턴스의 원하는 필드를 반영하기 위해 템플릿의 필드를 초기화한다. 템플릿 인스턴스는 이 인스턴스가 기록 전용 인스턴스라는 점에서 제한된 사용을 갖는 특수 형태의 인스턴스이다. 규칙 베이스 논리는 템플릿 필드의 값을 설정만 할 수 있고, 템플릿 인스턴스를 통해 템플릿 필드를 판독하거나 메소드를 호출할 수 없다. 이와 마찬가지로, 템플릿 인스턴스는 패턴 정합에 대한 것과 같은 추론 중요도를 가질 수 없다. 한 예시적인 사용은 다음과 같다.
16.3 엔진 레벨 메소드
16.3.1 engn_startchain
이 식별자는 현재의 도메인 컨텍스트에 대한 추론을 개시(또는 재시작)하는 내장 메소드이다. 한 예는 다음과 같다.
추론 엔진(112)이 이미 현재의 도메인에 걸쳐 추론하고 있는 경우, 추론 엔진(112)은 에러와 함께 이 동작을 중지할 수 있다. 메소드 반환 코드는 (있는 경우) engn_stopchain() 반환 코드를 나타낸다. 추론이 (engn_stopchain 실행없이) 정상적으로 종료하는 경우, 반환 코드는 0이다.
16.3.2 engn_stopchain
이 식별자는 현재의 도메인 컨텍스트에 대한 추론을 즉각적으로 중지시키는 내장 메소드이다. 추론 엔진(112)이 현재의 도메인에 걸쳐 현재 추론하고 있지 않은 경우, 추론 엔진(112)은 에러와 함께 이 동작을 중지시킬 수 있다. 이 식별자는 또한 추론 반환 코드로서 반환되어질 숫자값을 지정한다. 관례에 따르면, 추론이 정상적으로 종료할 때 추론 엔진(112)이 0을 반환하기 때문에 이 값은 영이 아닐 수 있다. 어느 경우든지, 추론은 현재의 규칙 동작을 완료하지 않고 즉각 종료될 수 있다. 그 동작이 메소드들을 호출하고 그중 하나가 engn_stopchain()을 호출한 경우, 그 메소드 및 모든 동적 조상 메소드도 역시 즉각 종료된다. 한 예시적인 사용은 다음과 같다.
16.3.3 engn_tracemsg
이 식별자는 (있는 경우) 애플리케이션의 MessageHandler 또는 MessageArray 객체로 텍스트 메시지를 전송하는 내장 메소드이다. 클라이언트 애플리케이션(122)이 이들 객체 중 어느 것도 정의하지 않은 경우, 추론 엔진(112)은 engn_tracemsg()의 호출을 무시할 수 있다. 한 예시적인 사용은 다음과 같다.
16.4 도메인 레벨 메소드
16.4.1 dmn_push
이 식별자는 지정된 서브추론 도메인을 로드하는 내장 메소드이다. 지정된 도메인이 이미 로드(푸시)되어 있는 경우, 추론 엔진(112)은 에러와 함께 이 동작을 중지시킬 수 있다. 한 예시적인 사용은 다음과 같다.
16.4.2 dmn_pop
이 식별자는 현재의 서브추론 도메인을 언로드하는 내장 메소드이다. 현재 로드된 도메인이 없는 경우, 추론 엔진(112)은 에러와 함께 이 동작을 중지시킬 수 있다. 한 예시적인 사용은 다음과 같다.
16.5 인스턴스 레벨 메소드
16.5.1 inst_make
이 식별자는 인스턴스 템플릿으로부터 동적 인스턴스를 생성하는 내장 메소드이다. 이 식별자는 템플릿 인스턴스의 현재의 필드값에 기초하여 인스턴스를 생성한다. 인스턴스 고유의 차이에 대한 템플릿 필드값을 수정할 때마다, 규칙 베이스 논리는 모든 인스턴스에 의해 공유된 필드값으로 템플릿 인스턴스를 한번 초기화한 다음에 inst_make()를 여러번 호출함으로써 다수의 유사한 인스턴스를 생성할 수 있다.
16.5.2 inst_reset
이 식별자는 지정된 인스턴스의 필드 모두를 미지의 상태로 리셋시키는 내장 메소드이다. 한 예시적인 사용은 다음과 같다.
16.5.3 inst_delete
이 식별자는 지정된 동적 인스턴스를 삭제하는 내장 메소드이다. 일 실시예에서, 어떤 종류의 규칙도 동적 인스턴스를 생성할 수 있지만, 패턴 정합 규칙만이그 동적 인스턴스를 삭제할 수 있다. 한 예시적인 사용은 다음과 같다.
16.5.4 inst_getname
이 식별자는 지정된 인스턴스의 이름을 반환하는 내장 메소드이다. 정적 인스턴스의 경우, 반환된 이름은 다음과 같이 "." 구분 문자(delimiter)를 갖는 전체 이름(fully qualified name)이다.
동적 인스턴스의 경우, 인스턴스 식별자는 다음과 같이 인덱스값을 반영한다.
한 예시적인 사용은 다음과 같다.
16.6 필드 레벨 메소드(모든 필드)
16.6.1 fld_isknown
이 식별자는 지정된 필드의 기지/미지 상태(knowability status)를 테스트하는 내장 메소드이다. 이 필드가 현재 기지의(KNOWN) 상태에 있는 경우, 이 메소드는 참의 부울값을 반환한다. 그렇지 않은 경우, 현재 활성인 규칙은 그 필드가 기지의 상태를 획득할 때까지 보류된다. 한 예시적인 사용은 다음과 같다.
16.6.2 fld_isunknown
이 식별자는 지정된 필드의 기지/미지 상태를 테스트하는 내장 메소드이다. 그 필드가 현재 기지의 상태에 있는 경우, 그 메소드는 거짓의 부울값을 반환한다. 그렇지 않은 경우, 그 메소드는 참의 부울값을 반환한다. 한 예시적인 사용은 다음과 같다.
16.6.3 fld_reset
이 식별자는 지정된 필드를 미지의(UNKNOWN) 상태로 리셋시키는 내장 메소드이다. 한 예시적인 사용은 다음과 같다.
16.7 (세트에 고유한) 필드 레벨 메소드
16.7.1 set_addval
이 식별자는 지정된 값을 세트에 부가하는 내장 메소드이다. 세트가 이미 그 값을 포함하는 경우, 이 동작은 아무 효과가 없다. 지정된 값이 그 세트와 유형 호환될 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.2 set_doesincludeval
이 식별자는 세트가 지정된 값을 이미 포함하고 있는지 여부를 테스트하는 내장 메소드이다. 세트가 그 값을 포함하고 있는 경우, 그 메소드는 참의 부울값을 반환한다. 그렇지 않은 경우, 그 메소드는 거짓의 부울값을 반환한다. 지정된 값은 그 세트와 유형 호환일 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.3 set_removeval
이 식별자는 지정된 값을 세트로부터 제거하는 내장 메소드이다. 그 결과, 그 세트는 변동하지 않은 채로 있거나, 그 자신의 서브셋이 되거나, 또는 비어있는 세트로 된다. 지정된 값은 그 세트와 유형 호환일 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.4 set_mergeset
이 식별자는 지정된 세트를 베이스 세트와 병합하는 내장 메소드이다. 지정된 세트가 비어있는 경우, 이 동작은 아무런 효과가 없다. 지정된 세트는 베이스 세트와 유형 호환일 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.5 set_excludeset
이 식별자는 지정된 세트의 값들을 베이스 세트로부터 제거하는 내장 메소드이다. 그 결과, 베이스 세트는 변동하지 않은 채로 있거나, 그 자체의 서브셋으로 되거나, 또는 비어있는 세트로 된다. 지정된 세트는 베이스 세트와 유형 호환일 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.6 set_intersect
이 식별자는 지정된 세트를 베이스 세트와 교차시키는 내장 메소드이다. 그 결과, 베이스 세트는 변동하지 않은 채로 있거나, 그 자체의 서브셋으로 되거나, 또는 비어있는 세트로 된다. 지정된 세트는 베이스 세트와 유형 호환일 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.7 set_doesintersect
이 식별자는 지정된 세트가 베이스 세트와 교차하는지 여부를 테스트하는 내장 메소드이다. 그 세트들이 임의의 값들을 공유하는 경우, 이 메소드는 참의 부울값을 반환한다. 그렇지 않은 경우, 이 메소드는 거짓의 부울값을 반환한다. 지정된 세트는 베이스 세트와 유형 호환일 수 있다. 한 예시적인 사용은 다음과 같다.
16.7.8 set_getsize
이 식별자는 세트 내의 요소의 개수를 나타내는 숫자값을 반환하는 내장 메소드이다. 그 세트가 비어있는 경우, 이 메소드는 0을 반환한다. 한 예시적인 사용은 다음과 같다.
16.8 (스트링에 고유한) 필드 레벨 메소드
16.8.1 string_getlength
이 식별자는 스트링의 길이를 나타내는 숫자값을 반환하는 내장 메소드이다. 그 스트링이 비어있는 경우, 이 메소드는 0을 반환한다. 한 예시적인 사용은 다음과 같다.
16.9 규칙 세트 레벨 메소드
16.9.1 ruleset_postrules
이 식별자는 지정된 규칙 세트에 대한 규칙을 현재의 도메인 컨텍스트에 대한 어젠더로 포스트하는 내장 메소드이다. 지정된 규칙 세트는 "조건부"의 Post_Attrib 값을 가질 수 있다. 한 예시적인 사용은 다음과 같다.
본 발명이 양호한 실시예 및 일반적으로 관련 방법과 관련하여 기술되어 있지만, 양호한 실시예 및 방법의 변경 및 대체가 당업자에게는 자명할 것이다. 따라서, 양호한 예시적인 실시예의 이상의 설명은 본 발명을 정의하거나 한정하지 않는다. 다른 변경, 대체, 및 변형도 이하의 청구항들에 의해 정의된 본 발명의 사상 및 범위를 벗어나지 않고 가능하다.

Claims (56)

  1. 추론 서비스를 제공하는 방법으로서,
    지정된 도메인에 대한 복수의 규칙을 수신하는 단계,
    상기 규칙들과 관련된 적어도 하나의 사전 조건을 식별하는 단계로서, 각각의 사전 조건이 상기 규칙들의 실행시에 사용되는 입력을 나타내는 것인 사전 조건 식별 단계,
    상기 규칙들과 관련된 적어도 하나의 사후 조건을 식별하는 단계로서, 각각의 사후 조건이 상기 규칙들의 실행으로부터의 출력을 나타내는 것인 사후 조건 식별 단계,
    상기 식별된 사전 조건에 대응하는 입력값을 수신하는 단계, 및
    상기 식별된 사후 조건에 대응하는 출력값을 생성하기 위해 상기 입력값을 사용하여 상기 규칙들 중 적어도 일부분을 실행하는 단계를 포함하는 추론 서비스 제공 방법.
  2. 제1항에 있어서, 상기 규칙들은 제1 규칙들을 포함하고,
    상기 제1 규칙들 중 하나는 보조 규칙 베이스로부터의 제2 도메인을 로드함으로써 서브추론을 기동시키며, 상기 제2 도메인의 규칙을 통한 추론은 상기 제1 규칙들의 실행이 재개되기 이전에 종료되는 것인 추론 서비스 제공 방법.
  3. 제1항에 있어서, 상기 규칙들은 제1 규칙들을 포함하며,
    상기 제1 규칙들 중 하나는 제1 규칙 베이스로부터의 제2 도메인을 로드함으로써 서브추론을 기동시키며, 상기 제2 도메인의 규칙을 통한 추론은 상기 제1 규칙들의 실행이 재개되기 이전에 종료되는 것인 추론 서비스 제공 방법.
  4. 제1항에 있어서, 상기 규칙들은 제1 규칙들을 포함하며,
    상기 제1 규칙들의 실행이 종료된 후에 복수의 제2 규칙을 실행하는 단계를 더 포함하며,
    상기 제2 규칙들의 실행은 상기 제1 규칙들로부터의 출력값을 상기 제2 규칙들에 대한 입력값으로서 사용하는 것인 추론 서비스 제공 방법.
  5. 제1항에 있어서, 필드를 철회가능 필드(retractable field)로서 식별하는 단계,
    상기 철회가능 필드에 철회불가능 값(non-retractable value)을 할당하는 단계,
    상기 철회가능 필드에 하나 이상의 철회가능 값을 할당하는 단계, 및
    상기 철회가능 필드를 상기 철회불가능 값으로 철회(retract)하는 단계를 포함하는 추론 서비스 제공 방법.
  6. 제1항에 있어서, 상기 규칙들의 실행이 시작된 후에 제1 통신 핸들러를 사용하여 제2 입력값을 수신하는 단계, 및
    상기 규칙들의 실행이 종료하기 전에 제2 통신 핸들러를 사용하여 상기 출력값을 전달하는 단계를 더 포함하는 추론 서비스 제공 방법.
  7. 제1항에 있어서, 제1 필드를 식별하는 정보를 수신하는 단계,
    최종값을 상기 제1 필드에 할당한 제1 규칙을 식별하는 단계,
    상기 제1 규칙을 기동시킨 제2 필드를 식별하는 단계, 및
    최종값을 상기 제2 필드에 할당한 제2 규칙을 식별하는 단계를 더 포함하는 추론 서비스 제공 방법.
  8. 제1항에 있어서, 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계는 결정 트리 규칙을 기동, 불이행, 또는 보류시킬지 여부를 결정하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  9. 제8항에 있어서, 상기 결정 트리 규칙을 보류하는 단계는 상기 결정 트리 규칙을 보류시킨 바이너리 서술문을 식별하는 단계를 포함하며,
    상기 방법은 상기 결정 트리 규칙을 보류 해제하고 상기 결정 트리 규칙을 보류시킨 상기 바이너리 서술문에서 실행을 재시작하는 단계를 더 포함하는 추론 서비스 제공 방법.
  10. 제1항에 있어서, 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계는 상기 규칙들이 실행될 때 단조 추론을 시행하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  11. 제1항에 있어서, 상기 규칙들은 최종값 필드에 영향을 주며,
    다수의 값이 상기 최종값 필드에 할당될 수 있는 것인 추론 서비스 제공 방법.
  12. 제1항에 있어서, 상기 규칙들을 포함하는 규칙 베이스의 판독 전용 이미지를 메모리에 저장하는 단계, 및
    상기 입력값 및 출력값을 상기 메모리 내의 클라이언트 고유 정보 블록에 저장하는 단계를 더 포함하는 추론 서비스 제공 방법.
  13. 제1항에 있어서, 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계는 특정의 필드에 대한 제2 입력값이 없으면 상기 실행이 완료될 수 없는 것으로 결정하는 단계를 포함하며,
    상기 방법은 초기화 핸들러 및 상기 규칙들을 포함하는 규칙 베이스 중 적어도 하나를 사용하여 상기 제2 입력값을 수신하는 단계를 더 포함하며,
    상기 초기화 핸들러는 사용자 또는 애플리케이션으로부터 상기 제2 입력값을 수신하는 동작을 하고, 상기 규칙 베이스는 상기 특정의 필드에 대한 마지막 기회값을 식별하는 동작을 하는 것인 추론 서비스 제공 방법.
  14. 제1항에 있어서, 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계는 필드에 할당된 값이 제약을 위반하는지 여부를 결정하는 단계를 포함하고,
    상기 방법은 상기 필드에 할당된 상기 값이 상기 제약을 위반하는 경우 상기 필드에 의해 정의된 위반 동작을 수행하는 단계를 더 포함하는 추론 서비스 제공 방법.
  15. 제14항에 있어서, 상기 위반 동작은 상기 규칙들의 실행을 종료하는 것, 상기 필드에 대체값을 할당하는 것, 및 초기화 핸들러를 사용하여 대체값을 요청하는 것 중 적어도 하나를 포함하는 것인 추론 서비스 제공 방법.
  16. 제1항에 있어서, 상기 규칙들은 바이너리 규칙 베이스 내의 지정된 도메인의 적어도 일부분을 형성하고, 상기 도메인은 상기 사전 조건 및 상기 사후 조건을 식별하는 것인 추론 서비스 제공 방법.
  17. 제16항에 있어서, 상기 규칙 베이스는 상기 규칙들을 정의하는 하나 이상의 컴파일된 XML 문서를 포함하는 것인 추론 서비스 제공 방법.
  18. 제1항에 있어서, 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계는 상기 규칙들을 정방향 추론 또는 역방향 추론하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  19. 제1항에 있어서, 규칙 스냅샷(rule snapshot)을 생성하는 단계를 더 포함하며, 이 규칙 스냅샷은 상기 규칙들 중 하나의 현재의 상태 및 상기 규칙을 보류시킨 상기 규칙과 관련된 임의의 필드를 식별하는 것인 추론 서비스 제공 방법.
  20. 제1항에 있어서, 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계는 추론 엔진 객체를 사용하여 상기 규칙들 중 적어도 일부분을 실행하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  21. 제20항에 있어서, 상기 추론 엔진 객체는 상태 비보전형 추론 엔진 객체 또는 상태 보전형 추론 엔진 객체를 포함하는 것인 추론 서비스 제공 방법.
  22. 제1항에 있어서, 상기 복수의 규칙을 수신하는 상기 단계는,
    상기 규칙들과 관련된 장소 정보를 수신하는 단계,
    상기 장소에 액세스하는 단계, 및
    상기 규칙들을 상기 액세스된 장소로부터 검색하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  23. 추론 서비스를 제공하는 시스템으로서,
    지정된 도메인에 대한 복수의 규칙을 저장하는 동작을 하는 메모리, 및
    상기 규칙들과 관련된 사전 조건을 식별하는 단계로서, 상기 사전 조건이 상기 규칙들의 실행시에 사용되는 입력을 나타내는 것인 사전 조건을 식별하고,
    상기 규칙들과 관련된 사후 조건을 식별하는 단계로서, 상기 사후 조건이 상기 규칙들의 실행으로부터의 출력을 나타내는 것인 사후 조건을 식별하고,
    상기 사전 조건에 대응하는 입력값을 수신하고,
    상기 사후 조건에 대응하는 출력값을 생성하기 위해 상기 입력값을 사용하여 상기 규칙들 중 적어도 일부분을 실행하도록 집합적으로 동작가능한 하나 이상의 프로세서를 포함하는 추론 서비스 제공 시스템.
  24. 제23항에 있어서, 상기 규칙들은 제1 규칙 베이스의 적어도 일부분을 형성하는 제1 규칙들을 포함하고,
    상기 제1 규칙들 중 하나는 보조 규칙 베이스로부터의 제2 도메인을 로드함으로써 서브추론을 기동시키며, 상기 제2 도메인의 규칙을 통한 추론은 상기 제1 규칙들의 실행이 재개되기 이전에 종료되는 것인 추론 서비스 제공 시스템.
  25. 제23항에 있어서, 상기 규칙들은 제1 규칙들을 포함하며,
    상기 제1 규칙들 중 하나는 상기 제1 규칙 베이스로부터의 제2 도메인을 로드함으로써 서브추론을 기동시키며, 상기 제2 도메인의 규칙을 통한 추론은 상기 제1 규칙들의 실행이 재개되기 이전에 종료되는 것인 추론 서비스 제공 시스템.
  26. 제23항에 있어서, 상기 규칙들은 제1 규칙들을 포함하며,
    상기 하나 이상의 프로세서는 또한 집합적으로 상기 제1 규칙들의 실행이 종료된 후에 복수의 제2 규칙을 실행하도록 동작가능 하며,
    상기 제2 규칙들의 실행은 상기 제1 규칙들로부터의 상기 출력값을 상기 제2 규칙들에 대한 입력값으로서 사용하는 것인 추론 서비스 제공 시스템.
  27. 제23항에 있어서, 상기 하나 이상의 프로세서는 또한 집합적으로
    필드를 철회가능 필드(retractable field)로서 식별하는 단계,
    상기 철회가능 필드에 철회불가능 값(non-retractable value)을 할당하는 단계,
    상기 철회가능 필드에 하나 이상의 철회가능 값을 할당하는 단계, 및
    상기 철회가능 필드를 상기 철회불가능 값으로 철회(retract)하는 단계를 수행하는 동작을 하는 것인 추론 서비스 제공 시스템.
  28. 제23항에 있어서, 상기 하나 이상의 프로세서는 또한 집합적으로
    제1 필드를 식별하는 정보를 수신하는 단계,
    최종값을 상기 제1 필드에 할당한 제1 규칙을 식별하는 단계,
    상기 제1 규칙을 기동시킨 제2 필드를 식별하는 단계, 및
    최종값을 상기 제2 필드에 할당한 제2 규칙을 식별하는 단계를 수행하는 동작을 하는 것인 추론 서비스 제공 시스템.
  29. 제23항에 있어서, 상기 하나 이상의 프로세서는 집합적으로 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계를,
    결정 트리 규칙을 기동, 불이행, 또는 보류시킬지 여부를 결정하는 단계로서, 상기 결정 트리 규칙을 보류하는 단계는 상기 결정 트리 규칙을 보류시킨 바이너리 서술문을 식별하는 단계를 포함하는 것인 결정 단계와,
    상기 결정 트리 규칙을 보류 해제하고 상기 결정 트리 규칙을 보류시킨 상기 바이너리 서술문에서 실행을 재시작하는 단계에 의해 수행하는 동작을 하는 것인 추론 서비스 제공 시스템.
  30. 제23항에 있어서, 상기 하나 이상의 프로세서는 집합적으로 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계를, 특정의 필드에 대한 제2 입력값이 없으면 상기 실행이 완료될 수 없는 것으로 결정하는 단계에 의해 수행하는 동작을 하며,
    상기 하나 이상의 프로세서는 또한 집합적으로 초기화 핸들러 및 상기 규칙들을 포함하는 규칙 베이스 중 적어도 하나를 사용하여 상기 제2 입력값을 수신하는 단계를 수행하는 동작을 하며,
    상기 초기화 핸들러는 사용자 또는 애플리케이션으로부터 상기 제2 입력값을수신하는 동작을 하고, 상기 규칙 베이스는 상기 특정의 필드에 대한 마지막 기회 값을 식별하는 동작을 하는 것인 추론 서비스 제공 시스템.
  31. 제23항에 있어서, 상기 하나 이상의 프로세서는 집합적으로 상기 규칙들 중 적어도 일부분을 실행하는 상기 단계를, 필드에 할당된 값이 제약을 위반하는지 여부를 결정하는 단계에 의해 수행하는 동작을 하고,
    상기 하나 이상의 프로세서는 또한 집합적으로 상기 필드에 할당된 상기 값이 상기 제약을 위반하는 경우 상기 필드에 의해 정의된 위반 동작을 수행하는 동작을 하는 것인 추론 서비스 제공 시스템.
  32. 제23항에 있어서, 상기 하나 이상의 프로세서는 또한 집합적으로 규칙 스냅샷(rule snapshot)을 생성하는 동작을 하며, 이 규칙 스냅샷은 상기 규칙들 중 하나의 현재의 상태 및 상기 규칙을 보류시킨 상기 규칙과 관련된 임의의 필드를 식별하는 것인 추론 서비스 제공 시스템.
  33. 적어도 하나의 컴퓨터 판독가능 매체 상에 포함되는 로직으로서, 실행될 때
    지정된 도메인에 대한 복수의 규칙과 관련된 사전 조건을 식별하는 단계로서, 상기 사전 조건이 상기 규칙들의 실행시에 사용되는 입력을 나타내는 것인 사전 조건 식별 단계,
    상기 규칙들과 관련된 사후 조건을 식별하는 단계로서, 상기 사후 조건이 상기 규칙들의 실행으로부터의 출력을 나타내는 것인 사후 조건 식별 단계,
    상기 사전 조건에 대응하는 입력값을 수신하는 단계, 및
    상기 사후 조건에 대응하는 출력값을 생성하기 위해 상기 입력값을 사용하여 상기 규칙들 중 적어도 일부분을 실행하는 단계를 수행하는 동작을 하는 것인 로직.
  34. 추론 서비스를 제공하는 시스템으로서,
    지정된 도메인에 대한 복수의 규칙과 관련된 사전 조건을 식별하는 수단으로서, 상기 사전 조건이 상기 규칙들의 실행시에 사용되는 입력을 나타내는 것인 사전 조건 식별 수단,
    상기 규칙들과 관련된 사후 조건을 식별하는 수단으로서, 상기 사후 조건이 상기 규칙들의 실행으로부터의 출력을 나타내는 것인 사후 조건 식별 수단,
    상기 사전 조건에 대응하는 입력값을 수신하는 수단, 및
    상기 사후 조건에 대응하는 출력값을 생성하기 위해 상기 입력값을 사용하여 상기 규칙들 중 적어도 일부분을 실행하는 수단을 포함하는 추론 서비스 제공 시스템.
  35. 추론 서비스를 제공하는 방법으로서,
    지정된 도메인에 대한 복수의 규칙을 추론 엔진으로 전달하는 단계로서, 상기 규칙들은 사전 조건 및 사후 조건과 관련되어 있고 상기 사전 조건은 상기 규칙들의 실행시에 상기 추론 엔진에 의해 사용되는 입력을 나타내고 상기 사후 조건은 상기 규칙들의 실행으로부터의 출력을 나타내는 것인 전달 단계,
    상기 사전 조건에 대응하는 입력값을 상기 추론 엔진으로 전달하는 단계, 및
    상기 사후 조건에 대응하는 출력값을 상기 추론 엔진으로부터 수신하는 단계를 포함하는 추론 서비스 제공 방법.
  36. 제35항에 있어서, 복수의 규칙을 추론 엔진으로 전달하는 상기 단계는 바이너리 규칙 베이스 및 규칙 베이스의 장소 중 적어도 하나를 상기 추론 엔진으로 전달하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  37. 제36항에 있어서, 상기 규칙 베이스의 장소는 URL을 포함하는 것인 추론 서비스 제공 방법.
  38. 제35항에 있어서, 상기 출력값은 복수의 출력값 중 하나를 포함하고,
    상기 추론 엔진은 상태 비보전형 추론 엔진을 포함하며,
    상기 방법은 상기 추론 엔진이 상기 출력값들 중 하나를 각각 식별하는 복수의 출력 메시지 중 적어도 하나를 생성하는지를 식별하는 콘트롤 객체, 상기 출력값들 모두를 식별하는 출력 문서, 및 상기 규칙들 중 하나의 현재의 상태 및 상기 규칙을 보류시킨 상기 규칙과 관련된 임의의 필드를 식별하는 규칙 스냅샷을 상기 추론 엔진으로 전달하는 단계를 더 포함하는 추론 서비스 제공 방법.
  39. 제35항에 있어서, 상기 출력값은 복수의 출력값 중 하나를 포함하고,
    상기 추론 엔진은 상태 보전형 추론 엔진을 포함하고,
    상기 방법은, 상기 추론 엔진 내의 적어도 하나의 함수를 호출하는 단계를 더 포함하며, 상기 적어도 하나의 함수는 상기 출력값들 중 하나를 식별하는 단계, 상기 출력값들 모두를 식별하는 단계, 상기 규칙들 중 하나의 현재의 상태 및 상기규칙을 보류시킨 상기 규칙과 관련된 임의의 필드를 식별하는 규칙 스냅샷을 생성하는 단계, 상기 출력값들 중 하나를 분석한 상기 규칙을 식별하는 단계, 철회가능 값을 상기 규칙들에 의해 사용되는 필드에 할당하는 단계, 철회불가능 값을 상기 규칙들에 의해 사용되는 필드에 할당하는 단계, 및 상기 규칙들에 의해 사용되는 필드의 값을 철회하는 단계 중 적어도 하나를 수행하는 동작을 하는 것인 추론 서비스 제공 방법.
  40. 추론 서비스를 제공하는 방법으로서,
    제1 규칙 베이스의 적어도 일부분을 포함하는 지정된 도메인에 대한 복수의 제1 규칙을 수신하는 단계,
    상기 제1 규칙들을 메모리에 로드하는 단계,
    제2 규칙을 포함하는 보조 규칙 베이스를 수신하는 단계,
    상기 제2 규칙을 상기 메모리 내의 상기 제1 규칙들과 결합하는 단계, 및
    출력값을 생성하기 위해 상기 제1 규칙 및 상기 제2 규칙의 적어도 일부분을실행하는 단계를 포함하는 추론 서비스 제공 방법.
  41. 제40항에 있어서, 제3 규칙을 포함하는 제2 보조 규칙 베이스를 수신하는 단계,
    상기 제3 규칙을 상기 메모리 내의 상기 제1 규칙들과 결합하는 단계, 및
    제2 출력값을 생성하기 위해 상기 제1 규칙 및 상기 제2 규칙의 적어도 일부분을 실행하는 단계를 더 포함하는 추론 서비스 제공 방법.
  42. 제40항에 있어서, 상기 제2 규칙은 상기 제1 규칙 베이스에 의해 정의된 데이터 객체들에 대해서만 동작하는 것인 추론 서비스 제공 방법.
  43. 제40항에 있어서, 상기 제1 규칙 베이스는 상기 제2 규칙이 상기 제1 규칙들과 상충되는 경우 상기 제2 규칙이 사용될 수 있는지 여부를 식별하는 것인 추론 서비스 제공 방법.
  44. 제40항에 있어서, 상기 제1 규칙 베이스 및 상기 보조 규칙 베이스는 바이너리 규칙 베이스를 포함하는 것인 추론 서비스 제공 방법.
  45. 추론 서비스를 제공하는 시스템으로서,
    제1 규칙 베이스의 적어도 일부분을 포함하는 지정된 도메인에 대한 복수의제1 규칙을 저장하는 동작을 하는 메모리, 및
    제2 규칙을 포함하는 보조 규칙 베이스를 수신하는 단계,
    상기 제2 규칙을 상기 메모리 내의 상기 제1 규칙들과 결합하는 단계, 및
    출력값을 생성하기 위해 상기 제1 규칙 및 상기 제2 규칙의 적어도 일부분을 실행하는 단계를 집합적으로 수행하는 동작을 하는 하나 이상의 프로세서를 포함하는 추론 서비스 제공 시스템.
  46. 제45항에 있어서, 상기 제2 규칙은 상기 제1 규칙 베이스에 의해 정의된 데이터 객체들에 대해서만 동작하는 것인 추론 서비스 제공 시스템.
  47. 제45항에 있어서, 상기 제1 규칙 베이스는 상기 제2 규칙이 상기 제1 규칙들과 상충되는 경우 상기 제2 규칙이 사용될 수 있는지 여부를 식별하는 것인 추론 서비스 제공 시스템.
  48. 제45항에 있어서, 상기 제1 규칙 베이스 및 상기 보조 규칙 베이스는 바이너리 규칙 베이스를 포함하는 것인 추론 서비스 제공 시스템.
  49. 적어도 하나의 컴퓨터 판독가능 매체 상에 포함되는 로직으로서, 실행될 때
    제1 규칙 베이스의 적어도 일부분을 포함하는 지정된 도메인에 대한 복수의제1 규칙을 수신하는 단계,
    상기 제1 규칙들을 메모리에 로드하는 단계,
    제2 규칙을 포함하는 보조 규칙 베이스를 수신하는 단계,
    상기 제2 규칙을 상기 메모리 내의 상기 제1 규칙들과 결합하는 단계, 및
    출력값을 생성하기 위해 상기 제1 규칙 및 상기 제2 규칙의 적어도 일부분을 실행하는 단계를 수행하는 동작을 하는 로직.
  50. 추론 서비스를 제공하는 방법으로서,
    제1 규칙 베이스의 적어도 일부분을 포함하는 지정된 도메인에 대한 복수의 제1 규칙을 추론 엔진으로 전달하는 단계,
    제2 규칙을 포함하는 보조 규칙 베이스를 상기 추론 엔진으로 전달하는 단계,
    상기 추론 엔진이 상기 제2 규칙을 상기 메모리 내의 상기 제1 규칙들과 결합할 수 있게 해주는 단계, 및
    출력값을 생성하기 위해 상기 제1 규칙과 상기 제2 규칙의 적어도 일부분을 실행하는 동작을 하는 상기 추론 엔진으로부터 상기 출력값을 수신하는 단계를 포함하는 추론 서비스 제공 방법.
  51. 제50항에 있어서, 복수의 제1 규칙을 추론 엔진으로 전달하는 상기 단계는 상기 제1 규칙들을 포함하는 바이너리 규칙 베이스 및 상기 제1 규칙들을 포함하는규칙 베이스의 장소 중 적어도 하나를 상기 추론 엔진으로 전달하는 단계를 포함하는 것인 추론 서비스 제공 방법.
  52. 추론 서비스를 제공하는 방법으로서,
    지정된 도메인에 대한 복수의 규칙의 적어도 일부분을 실행하는 단계로서, 상기 규칙들의 적어도 일부분은 표현식을 포함하는 것인 실행 단계,
    상기 규칙 내의 상기 표현식을 분석하기 위해 필요한 필드가 미지의 값을 갖는 경우 상기 규칙들 중 하나를 보류시키는 단계,
    결정 트리 규칙을 보류시킨 상기 표현식과 관련된 바이너리 서술문을 식별하는 단계,
    상기 규칙을 보류시킨 상기 필드에 기지의 값을 할당하는 단계,
    상기 규칙을 보류 해제시키는 단계, 및
    상기 식별된 바이너리 서술문에서 상기 규칙의 실행을 재시작하는 단계를 포함하는 추론 서비스 제공 방법.
  53. 제52항에 있어서, 상기 규칙들 중 적어도 하나는 결정 트리 규칙을 포함하며, 상기 결정 트리 규칙 내의 상기 표현식은 상기 결정 트리 규칙을 적어도 2개의 서브트리로 분할하는 것인 추론 서비스 제공 방법.
  54. 추론 서비스를 제공하는 시스템으로서,
    지정된 도메인에 대한 복수의 규칙으로서, 상기 규칙들의 적어도 일부분이 표현식을 포함하는 것인 복수의 규칙을 저장하는 동작을 하는 메모리, 및
    상기 규칙들 중 적어도 일부분을 실행하는 단계,
    상기 규칙 내의 상기 표현식을 분석하기 위해 필요한 필드가 미지의 값을 갖는 경우 상기 규칙들 중 하나를 보류시키는 단계,
    상기 결정 트리 규칙을 보류시킨 상기 표현식과 관련된 바이너리 서술문을 식별하는 단계,
    상기 규칙을 보류시킨 상기 필드에 기지의 값을 할당하는 단계,
    상기 규칙을 보류 해제시키는 단계, 및
    상기 식별된 바이너리 서술문에서 상기 규칙의 실행을 재시작하는 단계를 집합적으로 수행하는 동작을 하는 하나 이상의 프로세서를 포함하는 추론 서비스 제공 시스템.
  55. 제54항에 있어서, 상기 규칙들 중 적어도 하나는 결정 트리 규칙을 포함하며, 상기 결정 트리 규칙 내의 상기 표현식은 상기 결정 트리 규칙을 적어도 2개의 서브트리로 분할하는 것인 추론 서비스 제공 시스템.
  56. 적어도 하나의 컴퓨터 판독가능 매체 상에 포함되는 로직으로서, 실행될 때
    지정된 도메인에 대한 복수의 규칙의 적어도 일부분을 실행하는 단계로서, 상기 규칙들의 적어도 일부분은 표현식을 포함하는 것인 실행 단계,
    상기 규칙 내의 상기 표현식을 분석하기 위해 필요한 필드가 미지의 값을 갖는 경우 상기 규칙들 중 하나를 보류시키는 단계,
    결정 트리 규칙을 보류시킨 상기 표현식과 관련된 바이너리 서술문을 식별하는 단계,
    상기 규칙을 보류시킨 상기 필드에 기지의 값을 할당하는 단계,
    상기 규칙을 보류 해제시키는 단계, 및
    상기 식별된 바이너리 서술문에서 상기 규칙의 실행을 재시작하는 단계를 수행하는 동작을 하는 것인 로직.
KR10-2004-7016422A 2002-04-19 2003-04-18 추론 서비스 제공 시스템 및 방법 KR20050011745A (ko)

Applications Claiming Priority (3)

Application Number Priority Date Filing Date Title
US37382302P 2002-04-19 2002-04-19
US60/373,823 2002-04-19
PCT/US2003/012071 WO2003090164A2 (en) 2002-04-19 2003-04-18 System and method for providing inferencing services

Publications (1)

Publication Number Publication Date
KR20050011745A true KR20050011745A (ko) 2005-01-29

Family

ID=29251091

Family Applications (1)

Application Number Title Priority Date Filing Date
KR10-2004-7016422A KR20050011745A (ko) 2002-04-19 2003-04-18 추론 서비스 제공 시스템 및 방법

Country Status (11)

Country Link
US (4) US7356522B2 (ko)
EP (1) EP1525556B1 (ko)
JP (1) JP2005525630A (ko)
KR (1) KR20050011745A (ko)
CN (1) CN1659589A (ko)
AU (1) AU2003230984A1 (ko)
BR (1) BR0309333A (ko)
CA (1) CA2482956A1 (ko)
IL (1) IL164622A0 (ko)
WO (1) WO2003090164A2 (ko)
ZA (1) ZA200409017B (ko)

Cited By (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100860407B1 (ko) * 2006-12-05 2008-09-26 한국전자통신연구원 멀티모달 융합 처리 방법 및 그 장치
WO2012093746A1 (ko) * 2011-01-07 2012-07-12 주식회사 아이싸이랩 규칙 서버와 규칙 실행 단말기가 분리된 규칙기반 규칙추론 장치 및 방법
KR101458693B1 (ko) * 2013-03-22 2014-11-05 경희대학교 산학협력단 예측 모형에 기초한 예측결과의 판단 방법
KR102185379B1 (ko) * 2020-01-21 2020-12-01 한국과학기술원 호환되지 않는 IoT 프로토콜 업데이트를 위한 런타임 메시지 추론 장치 및 방법

Families Citing this family (137)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20090106353A1 (en) * 2001-09-19 2009-04-23 Belovich Steven G Method and system for providing an event auditing client server software arrangement
WO2003090164A2 (en) * 2002-04-19 2003-10-30 Computer Associates Think, Inc. System and method for providing inferencing services
AU2002952648A0 (en) * 2002-11-14 2002-11-28 Softlaw Corporation Limited Forward-chaining inferencing
US7831905B1 (en) * 2002-11-22 2010-11-09 Sprint Spectrum L.P. Method and system for creating and providing web-based documents to information devices
US7409440B1 (en) 2002-12-12 2008-08-05 F5 Net Works, Inc. User defined data items
US7296263B1 (en) * 2002-12-12 2007-11-13 F5 Networks, Inc. Method and system for performing operations on data using XML streams
US7530015B2 (en) * 2003-06-25 2009-05-05 Microsoft Corporation XSD inference
US7873668B2 (en) * 2003-08-15 2011-01-18 Laszlo Systems, Inc. Application data binding
US7827591B2 (en) * 2003-10-08 2010-11-02 Fmr Llc Management of hierarchical reference data
US7752608B1 (en) 2003-12-22 2010-07-06 The United States Of America As Represented By The Administrator Of The National Aeronautics And Space Administration Systems, methods and apparatus for verification of knowledge-based systems
US7617531B1 (en) * 2004-02-18 2009-11-10 Citrix Systems, Inc. Inferencing data types of message components
US7720877B1 (en) * 2004-04-14 2010-05-18 Oracle America, Inc. Class structure based enhancer for data objects
US7613666B1 (en) 2004-04-23 2009-11-03 Microsoft Corporation Generating a class model from a business vocabulary to represent facts expressible in the business vocabulary
US7802231B2 (en) * 2004-04-30 2010-09-21 Microsoft Corporation Generating programmatic interfaces from natural language expressions of authorizations for provision of information
US7620935B2 (en) 2004-04-30 2009-11-17 Microsoft Corporation Generating programmatic interfaces from natural language expressions of authorizations for request of information
US7480302B2 (en) * 2004-05-11 2009-01-20 Samsung Electronics Co., Ltd. Packet classification method through hierarchical rulebase partitioning
EP1756711A1 (en) * 2004-05-31 2007-02-28 STMicroelectronics Pvl. Ltd. A method for remotely upgrading the firmware of a target device using wireless technology
US7499850B1 (en) * 2004-06-03 2009-03-03 Microsoft Corporation Generating a logical model of objects from a representation of linguistic concepts for use in software model generation
US7454430B1 (en) 2004-06-18 2008-11-18 Glenbrook Networks System and method for facts extraction and domain knowledge repository creation from unstructured and semi-structured documents
US7613676B2 (en) 2004-07-27 2009-11-03 Microsoft Corporation Generating a database model from natural language expressions of business rules
US8050907B2 (en) * 2004-07-30 2011-11-01 Microsoft Corporation Generating software components from business rules expressed in a natural language
US7742406B1 (en) * 2004-12-20 2010-06-22 Packeteer, Inc. Coordinated environment for classification and control of network traffic
US7926029B1 (en) * 2005-01-13 2011-04-12 21St Century Systems, Inc. System and method of progressive domain specialization product solutions
US7343364B2 (en) * 2005-02-04 2008-03-11 Efunds Corporation Rules-based system architecture and systems using the same
US8103640B2 (en) * 2005-03-02 2012-01-24 International Business Machines Corporation Method and apparatus for role mapping methodology for user registry migration
US20060259342A1 (en) * 2005-05-12 2006-11-16 Bernhard Hartenstein Rule based document distribution to partners
WO2007073257A2 (en) * 2005-12-21 2007-06-28 Telefonaktiebolaget Lm Ericsson (Publ) Network alarm management
US7987149B2 (en) 2006-03-10 2011-07-26 Trilogy Intellectual Property Holdings, Inc. Configuration mapping using a multi-dimensional rule space and rule consolidation
US8205189B2 (en) * 2006-07-13 2012-06-19 Oracle International Corporation Method and system for definition control in a data repository application
US9088554B1 (en) * 2006-12-29 2015-07-21 At&T Intellectual Property Ii, L.P. System and method for data modeling
US9330127B2 (en) * 2007-01-04 2016-05-03 Health Care Productivity, Inc. Methods and systems for automatic selection of classification and regression trees
US7584294B2 (en) * 2007-03-12 2009-09-01 Citrix Systems, Inc. Systems and methods for prefetching objects for caching using QOS
US8701010B2 (en) 2007-03-12 2014-04-15 Citrix Systems, Inc. Systems and methods of using the refresh button to determine freshness policy
US8103783B2 (en) 2007-03-12 2012-01-24 Citrix Systems, Inc. Systems and methods of providing security and reliability to proxy caches
US8037126B2 (en) * 2007-03-12 2011-10-11 Citrix Systems, Inc. Systems and methods of dynamically checking freshness of cached objects based on link status
US7720936B2 (en) * 2007-03-12 2010-05-18 Citrix Systems, Inc. Systems and methods of freshening and prefreshening a DNS cache
US7783757B2 (en) * 2007-03-12 2010-08-24 Citrix Systems, Inc. Systems and methods of revalidating cached objects in parallel with request for object
US8504775B2 (en) 2007-03-12 2013-08-06 Citrix Systems, Inc Systems and methods of prefreshening cached objects based on user's current web page
US8069129B2 (en) 2007-04-10 2011-11-29 Ab Initio Technology Llc Editing and compiling business rules
DE102007033019B4 (de) 2007-07-16 2010-08-26 Peter Dr. Jaenecke Methoden und Datenverarbeitungssysteme für computerisiertes Schlußfolgern
JP5023865B2 (ja) * 2007-07-26 2012-09-12 富士ゼロックス株式会社 文書分類装置及び文書分類プログラム
US8121117B1 (en) 2007-10-01 2012-02-21 F5 Networks, Inc. Application layer network traffic prioritization
US8078556B2 (en) * 2008-02-20 2011-12-13 International Business Machines Corporation Generating complex event processing rules utilizing machine learning from multiple events
US8165984B2 (en) * 2008-03-28 2012-04-24 Microsoft Corporation Decision service for applications
US20090326924A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Projecting Semantic Information from a Language Independent Syntactic Model
US20090326925A1 (en) * 2008-06-27 2009-12-31 Microsoft Corporation Projecting syntactic information using a bottom-up pattern matching algorithm
CA2729304C (en) 2008-06-30 2016-12-13 Ab Initio Technology Llc Data logging in graph-based computations
US8332870B2 (en) * 2008-09-30 2012-12-11 Accenture Global Services Limited Adapter services
US9111030B1 (en) * 2008-10-03 2015-08-18 Federal Home Loan Mortgage Corporation Systems and methods for testing a software application
US20120102421A1 (en) * 2010-10-22 2012-04-26 Bigmachines, Inc. Methods and apparatus for specifying and applying business rules in a product configurator
US9558164B1 (en) 2008-12-31 2017-01-31 F5 Networks, Inc. Methods and system for converting WSDL documents into XML schema
US20100217737A1 (en) * 2009-02-20 2010-08-26 Ajay Shama Method and system for business rules management
CN101938368A (zh) * 2009-06-30 2011-01-05 国际商业机器公司 刀片服务器系统中的虚拟机管理器和虚拟机处理方法
US8352402B2 (en) * 2009-08-12 2013-01-08 Red Hat, Inc. Multiple entry point network for stream support in a rule engine
US10721269B1 (en) 2009-11-06 2020-07-21 F5 Networks, Inc. Methods and system for returning requests with javascript for clients before passing a request to a server
US8806056B1 (en) 2009-11-20 2014-08-12 F5 Networks, Inc. Method for optimizing remote file saves in a failsafe way
US11140178B1 (en) 2009-11-23 2021-10-05 F5 Networks, Inc. Methods and system for client side analysis of responses for server purposes
US8850071B2 (en) * 2010-05-10 2014-09-30 Liaison Technologies, Inc. Map intuition system and method
US9503375B1 (en) 2010-06-30 2016-11-22 F5 Networks, Inc. Methods for managing traffic in a multi-service environment and devices thereof
US9420049B1 (en) 2010-06-30 2016-08-16 F5 Networks, Inc. Client side human user indicator
US8347100B1 (en) 2010-07-14 2013-01-01 F5 Networks, Inc. Methods for DNSSEC proxying and deployment amelioration and systems thereof
US10296653B2 (en) 2010-09-07 2019-05-21 F5 Networks, Inc. Systems and methods for accelerating web page loading
US8281236B2 (en) * 2010-09-08 2012-10-02 Microsoft Corporation Removing style corruption from extensible markup language documents
US8538903B2 (en) * 2010-09-23 2013-09-17 International Business Machines Corporation Data based truth maintenance method and system
US8494999B2 (en) 2010-09-23 2013-07-23 International Business Machines Corporation Sensor based truth maintenance method and system
US8600914B2 (en) * 2010-11-30 2013-12-03 Red Hat, Inc. Left and right unlinking for a shared knowledge base
US9262719B2 (en) 2011-03-22 2016-02-16 Patrick Soon-Shiong Reasoning engines
WO2012158854A1 (en) 2011-05-16 2012-11-22 F5 Networks, Inc. A method for load balancing of requests' processing of diameter servers
US8396836B1 (en) 2011-06-30 2013-03-12 F5 Networks, Inc. System for mitigating file virtualization storage import latency
US8935136B2 (en) * 2011-09-22 2015-01-13 Microsoft Corporation Multi-component model engineering
US8930285B2 (en) * 2011-10-21 2015-01-06 International Business Machines Corporation Composite production rules
US8463850B1 (en) 2011-10-26 2013-06-11 F5 Networks, Inc. System and method of algorithmically generating a server side transaction identifier
KR101329951B1 (ko) * 2011-11-21 2013-11-14 포항공과대학교 산학협력단 결정 구조 기반 컨트롤 컴포넌트 개발 방법 및 장치
US9384711B2 (en) 2012-02-15 2016-07-05 Microsoft Technology Licensing, Llc Speculative render ahead and caching in multiple passes
US10230566B1 (en) 2012-02-17 2019-03-12 F5 Networks, Inc. Methods for dynamically constructing a service principal name and devices thereof
US9020912B1 (en) 2012-02-20 2015-04-28 F5 Networks, Inc. Methods for accessing data in a compressed file system and devices thereof
US9244843B1 (en) 2012-02-20 2016-01-26 F5 Networks, Inc. Methods for improving flow cache bandwidth utilization and devices thereof
US9519631B2 (en) 2012-03-30 2016-12-13 Microsoft Technology Licensing, Llc Semantic diff and automerge
US10097616B2 (en) 2012-04-27 2018-10-09 F5 Networks, Inc. Methods for optimizing service of content requests and devices thereof
US9286122B2 (en) 2012-05-31 2016-03-15 Microsoft Technology Licensing, Llc Display techniques using virtual surface allocation
US9177533B2 (en) 2012-05-31 2015-11-03 Microsoft Technology Licensing, Llc Virtual surface compaction
US9230517B2 (en) 2012-05-31 2016-01-05 Microsoft Technology Licensing, Llc Virtual surface gutters
US9235925B2 (en) * 2012-05-31 2016-01-12 Microsoft Technology Licensing, Llc Virtual surface rendering
US9135244B2 (en) * 2012-08-30 2015-09-15 Arria Data2Text Limited Method and apparatus for configurable microplanning
US10033837B1 (en) 2012-09-29 2018-07-24 F5 Networks, Inc. System and method for utilizing a data reducing module for dictionary compression of encoded data
US20140107932A1 (en) * 2012-10-11 2014-04-17 Aliphcom Platform for providing wellness assessments and recommendations using sensor data
US9578090B1 (en) 2012-11-07 2017-02-21 F5 Networks, Inc. Methods for provisioning application delivery service and devices thereof
US10375155B1 (en) 2013-02-19 2019-08-06 F5 Networks, Inc. System and method for achieving hardware acceleration for asymmetric flow connections
US9497614B1 (en) 2013-02-28 2016-11-15 F5 Networks, Inc. National traffic steering device for a better control of a specific wireless/LTE network
US9317805B1 (en) * 2013-03-12 2016-04-19 Ubs Ag System and method of performing modular quantitative analysis with nodes that have contextual labels
US8965877B2 (en) 2013-03-14 2015-02-24 Glenbrook Networks Apparatus and method for automatic assignment of industry classification codes
US9305111B1 (en) 2013-04-11 2016-04-05 Ubs Ag System and method of performing quantitative analysis via graph nodes representing programs
US9307007B2 (en) 2013-06-14 2016-04-05 Microsoft Technology Licensing, Llc Content pre-render and pre-fetch techniques
WO2015028844A1 (en) 2013-08-29 2015-03-05 Arria Data2Text Limited Text generation from correlated alerts
PL405176A1 (pl) * 2013-08-30 2015-03-02 Akademia Górniczo-Hutnicza im. Stanisława Staszica w Krakowie System wnioskujący w oparciu o zbiór reguł i sposób wnioskowania
US9396181B1 (en) 2013-09-16 2016-07-19 Arria Data2Text Limited Method, apparatus, and computer program product for user-directed reporting
WO2015048212A2 (en) 2013-09-27 2015-04-02 Ab Initio Technology Llc Evaluating rules applied to data
US10187317B1 (en) 2013-11-15 2019-01-22 F5 Networks, Inc. Methods for traffic rate control and devices thereof
CN106104513B (zh) * 2014-01-09 2018-12-18 托马斯·D·法伊根包姆 基于认知的知识处理系统及方法
US11838851B1 (en) 2014-07-15 2023-12-05 F5, Inc. Methods for managing L7 traffic classification and devices thereof
EP3026601A1 (en) * 2014-11-27 2016-06-01 Agfa Healthcare Data repository querying method
US10182013B1 (en) 2014-12-01 2019-01-15 F5 Networks, Inc. Methods for managing progressive image delivery and devices thereof
US11895138B1 (en) 2015-02-02 2024-02-06 F5, Inc. Methods for improving web scanner accuracy and devices thereof
US20170024653A1 (en) * 2015-03-30 2017-01-26 Edgeverve Systems Limited Method and system to optimize customer service processes
US10834065B1 (en) 2015-03-31 2020-11-10 F5 Networks, Inc. Methods for SSL protected NTLM re-authentication and devices thereof
US10505818B1 (en) 2015-05-05 2019-12-10 F5 Networks. Inc. Methods for analyzing and load balancing based on server health and devices thereof
US11350254B1 (en) 2015-05-05 2022-05-31 F5, Inc. Methods for enforcing compliance policies and devices thereof
US10476992B1 (en) 2015-07-06 2019-11-12 F5 Networks, Inc. Methods for providing MPTCP proxy options and devices thereof
US11757946B1 (en) 2015-12-22 2023-09-12 F5, Inc. Methods for analyzing network traffic and enforcing network policies and devices thereof
US10404698B1 (en) 2016-01-15 2019-09-03 F5 Networks, Inc. Methods for adaptive organization of web application access points in webtops and devices thereof
US10797888B1 (en) 2016-01-20 2020-10-06 F5 Networks, Inc. Methods for secured SCEP enrollment for client devices and devices thereof
US11178150B1 (en) 2016-01-20 2021-11-16 F5 Networks, Inc. Methods for enforcing access control list based on managed application and devices thereof
US10185720B2 (en) * 2016-05-10 2019-01-22 International Business Machines Corporation Rule generation in a data governance framework
US10412198B1 (en) 2016-10-27 2019-09-10 F5 Networks, Inc. Methods for improved transmission control protocol (TCP) performance visibility and devices thereof
US10467347B1 (en) 2016-10-31 2019-11-05 Arria Data2Text Limited Method and apparatus for natural language document orchestrator
US11063758B1 (en) 2016-11-01 2021-07-13 F5 Networks, Inc. Methods for facilitating cipher selection and devices thereof
US10505792B1 (en) 2016-11-02 2019-12-10 F5 Networks, Inc. Methods for facilitating network traffic analytics and devices thereof
FR3061337A1 (fr) 2016-12-23 2018-06-29 Dhatim Moteur de regles universel et optimise pour le traitement de documents de gestion
US10812266B1 (en) 2017-03-17 2020-10-20 F5 Networks, Inc. Methods for managing security tokens based on security violations and devices thereof
US11343237B1 (en) 2017-05-12 2022-05-24 F5, Inc. Methods for managing a federated identity environment using security and access control data and devices thereof
US11122042B1 (en) 2017-05-12 2021-09-14 F5 Networks, Inc. Methods for dynamically managing user access control and devices thereof
CN108304164B (zh) * 2017-09-12 2021-12-03 马上消费金融股份有限公司 一种业务逻辑的开发方法及开发系统
US11223689B1 (en) 2018-01-05 2022-01-11 F5 Networks, Inc. Methods for multipath transmission control protocol (MPTCP) based session migration and devices thereof
US11995448B1 (en) 2018-02-08 2024-05-28 Marvell Asia Pte Ltd Method and apparatus for performing machine learning operations in parallel on machine learning hardware
US10929778B1 (en) 2018-05-22 2021-02-23 Marvell Asia Pte, Ltd. Address interleaving for machine learning
US10929760B1 (en) 2018-05-22 2021-02-23 Marvell Asia Pte, Ltd. Architecture for table-based mathematical operations for inference acceleration in machine learning
US10929779B1 (en) 2018-05-22 2021-02-23 Marvell Asia Pte, Ltd. Architecture to support synchronization between core and inference engine for machine learning
US10997510B1 (en) 2018-05-22 2021-05-04 Marvell Asia Pte, Ltd. Architecture to support tanh and sigmoid operations for inference acceleration in machine learning
US11016801B1 (en) 2018-05-22 2021-05-25 Marvell Asia Pte, Ltd. Architecture to support color scheme-based synchronization for machine learning
US12003422B1 (en) 2018-09-28 2024-06-04 F5, Inc. Methods for switching network packets based on packet data and devices
US11657124B2 (en) * 2018-12-10 2023-05-23 Apple Inc. Integrating binary inference engines and model data for efficiency of inference tasks
CN109919315B (zh) * 2019-03-13 2021-10-01 科大讯飞股份有限公司 一种神经网络的前向推理方法、装置、设备及存储介质
US11907867B2 (en) * 2019-06-05 2024-02-20 Paypal, Inc. Identification and suggestion of rules using machine learning
CN111898761B (zh) * 2020-08-12 2022-11-22 曙光信息产业(北京)有限公司 服务模型生成方法、图像处理方法、装置和电子设备
US11461300B2 (en) * 2021-01-06 2022-10-04 Sap Se Dynamic model server for multi-model machine learning inference services
US11816583B2 (en) * 2021-01-29 2023-11-14 Intuit, Inc. Knowledge engine module collections
CN112907234B (zh) * 2021-05-08 2021-07-16 武汉众邦银行股份有限公司 一种基于动态配置规则的决策引擎实现方法

Family Cites Families (41)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5175696A (en) * 1986-09-12 1992-12-29 Digital Equipment Corporation Rule structure in a procedure for synthesis of logic circuits
US4884217A (en) * 1987-09-30 1989-11-28 E. I. Du Pont De Nemours And Company Expert system with three classes of rules
US4885705A (en) * 1988-02-25 1989-12-05 Eastman Kodak Company Expert system shell for building photofinishing diagnostic systems
US5218669A (en) * 1988-03-11 1993-06-08 International Chip Corporation VLSI hardware implemented rule-based expert system apparatus and method
US5121496A (en) * 1988-07-25 1992-06-09 Westinghouse Electric Corp. Method for creating, maintaining and using an expert system by recursively modifying calibration file and merging with standard file
US5165011A (en) * 1988-09-22 1992-11-17 Omron Tateisi Electronics Co. System for switching a rule group
JPH07100262B2 (ja) * 1988-10-07 1995-11-01 三菱電機株式会社 放電加工終了判定方法及びその装置
US5058043A (en) * 1989-04-05 1991-10-15 E. I. Du Pont De Nemours & Co. (Inc.) Batch process control using expert systems
US5355444A (en) 1990-01-23 1994-10-11 International Business Machines Corporation Expert system wtih a plurality of independent knowledge bases
US5122976A (en) 1990-03-12 1992-06-16 Westinghouse Electric Corp. Method and apparatus for remotely controlling sensor processing algorithms to expert sensor diagnoses
US5367619A (en) * 1990-04-27 1994-11-22 Eaton Corporation Electronic data entry system employing an expert system to facilitate generation of electronic data forms with complex interrelationships between fields and subforms
US5276775A (en) * 1990-12-07 1994-01-04 Texas Instruments Inc. System and method for building knowledge-based applications
US5363473A (en) 1991-05-28 1994-11-08 The Trustees Of Columbia University In The City Of New York Incremental update process and apparatus for an inference system
FR2720846B1 (fr) * 1994-06-02 1996-07-26 Bull Sa Système d'information pour la consultation d'informations centralisées en provenance d'applications opérationnelles.
US5706406A (en) * 1995-05-22 1998-01-06 Pollock; John L. Architecture for an artificial agent that reasons defeasibly
US6058387A (en) 1996-01-30 2000-05-02 The University Of Chicago Dynamic information architecture system and method
US5778157A (en) * 1996-06-17 1998-07-07 Yy Software Corporation System and method for expert system analysis using quiescent and parallel reasoning and set structured knowledge representation
US5826250A (en) 1996-06-19 1998-10-20 Pegasystems Inc. Rules bases and methods of access thereof
GB2318478B (en) 1996-10-21 2001-01-17 Northern Telecom Ltd Network model for alarm correlation
GB2318479B (en) 1996-10-21 2001-04-04 Northern Telecom Ltd Problem model for alarm correlation
US6167520A (en) * 1996-11-08 2000-12-26 Finjan Software, Inc. System and method for protecting a client during runtime from hostile downloadables
US6092033A (en) * 1997-04-16 2000-07-18 Uhlmann; Jeffrey K. Method and apparatus for fusing mean and covariance estimates
US6067637A (en) * 1997-05-16 2000-05-23 At&T Corp Data reduction technique for rule based systems
US6536935B2 (en) * 1997-07-23 2003-03-25 Atarum Institute Computerized system for market-based constraint optimization
US6092064A (en) 1997-11-04 2000-07-18 International Business Machines Corporation On-line mining of quantitative association rules
US6606616B1 (en) * 1998-12-01 2003-08-12 Lucent Technologies Inc. Modified action rules
US6826552B1 (en) * 1999-02-05 2004-11-30 Xfi Corporation Apparatus and methods for a computer aided decision-making system
US6535864B1 (en) * 1999-08-05 2003-03-18 Unisys Corporation Method for mapping alterations in system state to knowledge base objects in a persistent repository-resident knowledge base
US6829604B1 (en) * 1999-10-19 2004-12-07 Eclipsys Corporation Rules analyzer system and method for evaluating and ranking exact and probabilistic search rules in an enterprise database
US20010029499A1 (en) * 1999-12-30 2001-10-11 Tuatini Jeffrey Taihana Rules processing system
US6681383B1 (en) * 2000-04-04 2004-01-20 Sosy, Inc. Automatic software production system
US6519580B1 (en) * 2000-06-08 2003-02-11 International Business Machines Corporation Decision-tree-based symbolic rule induction system for text categorization
US20020046047A1 (en) * 2000-07-07 2002-04-18 Budd Jeffrey R. Patient care management system and method
US20020029154A1 (en) * 2000-09-07 2002-03-07 Hnc Software, Inc. Mechanism and method for dynamic question handling through an electronic interface
US20050144114A1 (en) * 2000-09-30 2005-06-30 Ruggieri Thomas P. System and method for providing global information on risks and related hedging strategies
US6965887B2 (en) 2001-03-21 2005-11-15 Resolutionebs, Inc. Rule processing methods for automating a decision and assessing satisfiability of rule-based decision diagrams
US20040030710A1 (en) 2001-05-21 2004-02-12 Thomas Shadle Rules-based task browser for engineering systems
US6910028B2 (en) 2001-07-27 2005-06-21 International Business Machines Corporation Conflict-handling assimilator service for exchange of rules with merging
US20030037063A1 (en) 2001-08-10 2003-02-20 Qlinx Method and system for dynamic risk assessment, risk monitoring, and caseload management
US6868411B2 (en) * 2001-08-13 2005-03-15 Xerox Corporation Fuzzy text categorizer
WO2003090164A2 (en) * 2002-04-19 2003-10-30 Computer Associates Think, Inc. System and method for providing inferencing services

Cited By (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR100860407B1 (ko) * 2006-12-05 2008-09-26 한국전자통신연구원 멀티모달 융합 처리 방법 및 그 장치
WO2012093746A1 (ko) * 2011-01-07 2012-07-12 주식회사 아이싸이랩 규칙 서버와 규칙 실행 단말기가 분리된 규칙기반 규칙추론 장치 및 방법
KR101296279B1 (ko) * 2011-01-07 2013-08-20 주식회사 아이싸이랩 규칙 서버와 규칙 실행 단말기가 분리된 규칙기반 규칙추론 장치 및 방법
KR101458693B1 (ko) * 2013-03-22 2014-11-05 경희대학교 산학협력단 예측 모형에 기초한 예측결과의 판단 방법
KR102185379B1 (ko) * 2020-01-21 2020-12-01 한국과학기술원 호환되지 않는 IoT 프로토콜 업데이트를 위한 런타임 메시지 추론 장치 및 방법

Also Published As

Publication number Publication date
US20030229605A1 (en) 2003-12-11
BR0309333A (pt) 2007-02-21
US7849045B2 (en) 2010-12-07
ZA200409017B (en) 2005-11-02
WO2003090164A3 (en) 2005-02-24
JP2005525630A (ja) 2005-08-25
CA2482956A1 (en) 2003-10-30
US20090089239A1 (en) 2009-04-02
US7191163B2 (en) 2007-03-13
US7937358B2 (en) 2011-05-03
EP1525556A2 (en) 2005-04-27
WO2003090164A2 (en) 2003-10-30
US20110047123A1 (en) 2011-02-24
US20040015463A1 (en) 2004-01-22
CN1659589A (zh) 2005-08-24
IL164622A0 (en) 2005-12-18
US7356522B2 (en) 2008-04-08
AU2003230984A1 (en) 2003-11-03
EP1525556B1 (en) 2018-12-05

Similar Documents

Publication Publication Date Title
KR20050011745A (ko) 추론 서비스 제공 시스템 및 방법
US8959480B2 (en) Methods and apparatus for integration of declarative rule-based processing with procedural programming in a digital data-processing environment
US20070197877A1 (en) Behavior Based Multi-Agent Systems As Data Types
Negara et al. Inferring ownership transfer for efficient message passing
US6345387B1 (en) Coherent object system architecture
US20160259633A1 (en) Safely consuming dynamically-typed code from a statically-typed programming language
US7607125B2 (en) Programming language support for integrating undo and exception handling
US6665866B1 (en) Extensible compiler utilizing a plurality of question handlers
US11609753B2 (en) Deriving many idiomatic programming language interfaces
US9311111B2 (en) Programming environment with support for handle and non-handle user-created classes
US20070142929A1 (en) Specifying optional and default values for method parameters
Jordan et al. A feature model of actor, agent, functional, object, and procedural programming languages
Valliappan et al. Typing the wild in Erlang
Marron Toward Programming Languages for Reasoning: Humans, Symbolic Systems, and AI Agents
Murray et al. Automated debugging in java using OCL and JDI
Laneve et al. Deadlock detection of Java bytecode
Taylor et al. Software analysis in the semantic web
Asăvoae et al. Software model checking for mobile security–collusion detection in K
Wielemaker SWI-Prolog 2.9. 6
KR20070018000A (ko) 데이터 형식에 따른 행위 기반 다중 에이전트 시스템
Safi Detecting Anomalies in Event-Based Systems Through Static Analysis
Calta Analyzer of Windows Kernel Models
Li et al. The Java Language
Borchert Computer Science 4 Winter 2001/2002
Črepinšek et al. Grid-enabled grammar inference

Legal Events

Date Code Title Description
WITN Application deemed withdrawn, e.g. because no request for examination was filed or no examination fee was paid