[go: up one dir, main page]

KR101046101B1 - 제1 데이터 구조를 제2 데이터 구조로 조정하는 방법 - Google Patents

제1 데이터 구조를 제2 데이터 구조로 조정하는 방법 Download PDF

Info

Publication number
KR101046101B1
KR101046101B1 KR1020047010394A KR20047010394A KR101046101B1 KR 101046101 B1 KR101046101 B1 KR 101046101B1 KR 1020047010394 A KR1020047010394 A KR 1020047010394A KR 20047010394 A KR20047010394 A KR 20047010394A KR 101046101 B1 KR101046101 B1 KR 101046101B1
Authority
KR
South Korea
Prior art keywords
node
ink
analysis
data structure
document
Prior art date
Application number
KR1020047010394A
Other languages
English (en)
Other versions
KR20060080647A (ko
Inventor
리차드 던칸
헤리 스탄토
재미에 웨이킴
사쉬 래그허패씨
티모씨 에이치. 카네펠
졸탄 스질라자이
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Priority claimed from PCT/US2003/026170 external-priority patent/WO2005029342A1/en
Publication of KR20060080647A publication Critical patent/KR20060080647A/ko
Application granted granted Critical
Publication of KR101046101B1 publication Critical patent/KR101046101B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G01MEASURING; TESTING
    • G01BMEASURING LENGTH, THICKNESS OR SIMILAR LINEAR DIMENSIONS; MEASURING ANGLES; MEASURING AREAS; MEASURING IRREGULARITIES OF SURFACES OR CONTOURS
    • G01B7/00Measuring arrangements characterised by the use of electric or magnetic techniques
    • G01B7/28Measuring arrangements characterised by the use of electric or magnetic techniques for measuring contours or curvatures
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/32Digital ink
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01BMEASURING LENGTH, THICKNESS OR SIMILAR LINEAR DIMENSIONS; MEASURING ANGLES; MEASURING AREAS; MEASURING IRREGULARITIES OF SURFACES OR CONTOURS
    • G01B21/00Measuring arrangements or details thereof, where the measuring technique is not covered by the other groups of this subclass, unspecified or not relevant
    • G01B21/30Measuring arrangements or details thereof, where the measuring technique is not covered by the other groups of this subclass, unspecified or not relevant for measuring roughness or irregularity of surfaces
    • GPHYSICS
    • G01MEASURING; TESTING
    • G01NINVESTIGATING OR ANALYSING MATERIALS BY DETERMINING THEIR CHEMICAL OR PHYSICAL PROPERTIES
    • G01N27/00Investigating or analysing materials by the use of electric, electrochemical, or magnetic means
    • G01N27/02Investigating or analysing materials by the use of electric, electrochemical, or magnetic means by investigating impedance
    • G01N27/22Investigating or analysing materials by the use of electric, electrochemical, or magnetic means by investigating impedance by investigating capacitance
    • G01N27/24Investigating the presence of flaws
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V10/00Arrangements for image or video recognition or understanding
    • G06V10/96Management of image or video recognition tasks
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/10Character recognition
    • G06V30/14Image acquisition
    • G06V30/1444Selective acquisition, locating or processing of specific regions, e.g. highlighted text, fiducial marks or predetermined fields
    • G06V30/1456Selective acquisition, locating or processing of specific regions, e.g. highlighted text, fiducial marks or predetermined fields based on user interactions
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06VIMAGE OR VIDEO RECOGNITION OR UNDERSTANDING
    • G06V30/00Character recognition; Recognising digital ink; Document-oriented image-based pattern recognition
    • G06V30/40Document-oriented image-based pattern recognition
    • G06V30/41Analysis of document content
    • G06V30/414Extracting the geometrical structure, e.g. layout tree; Block segmentation, e.g. bounding boxes for graphics or text
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B21MECHANICAL METAL-WORKING WITHOUT ESSENTIALLY REMOVING MATERIAL; PUNCHING METAL
    • B21BROLLING OF METAL
    • B21B38/00Methods or devices for measuring, detecting or monitoring specially adapted for metal-rolling mills, e.g. position detection, inspection of the product
    • B21B38/008Monitoring or detecting vibration, chatter or chatter marks
    • BPERFORMING OPERATIONS; TRANSPORTING
    • B21MECHANICAL METAL-WORKING WITHOUT ESSENTIALLY REMOVING MATERIAL; PUNCHING METAL
    • B21BROLLING OF METAL
    • B21B38/00Methods or devices for measuring, detecting or monitoring specially adapted for metal-rolling mills, e.g. position detection, inspection of the product
    • B21B38/12Methods or devices for measuring, detecting or monitoring specially adapted for metal-rolling mills, e.g. position detection, inspection of the product for measuring roll camber

Landscapes

  • Engineering & Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • Chemical & Material Sciences (AREA)
  • Multimedia (AREA)
  • Computer Vision & Pattern Recognition (AREA)
  • Theoretical Computer Science (AREA)
  • Electrochemistry (AREA)
  • Life Sciences & Earth Sciences (AREA)
  • Pathology (AREA)
  • Immunology (AREA)
  • Chemical Kinetics & Catalysis (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Biochemistry (AREA)
  • Analytical Chemistry (AREA)
  • Geometry (AREA)
  • Artificial Intelligence (AREA)
  • Computer Graphics (AREA)
  • Human Computer Interaction (AREA)
  • Length Measuring Devices With Unspecified Measuring Means (AREA)
  • Character Discrimination (AREA)

Abstract

본 발명은 제1 데이터 구조의 차후 수정 버전인 제2 데이터 구조로 제1 데이터 구조를 조정하는 방법에 관한 것이다. 처음에, 제2 데이터 구조에서의 대응 노드에 변경이 이루어진 제1 데이터 구조에서의 각각의 노드가 액세싱된다. 각각의 액세싱된 노드에 대하여, 제2 데이터 구조에서의 대응 노드에 이루어진 변경이 제1 데이터 구조와 충돌하는지 여부에 대한 판정이 이루어진다. 만약 제2 데이터 구조에서의 대응하는 노드에 이루어진 변경이 제1 데이터 구조와 충돌하지 않는다면, 제1 데이터 구조에서의 액세싱된 노드로 변경이 이루어진다.
Figure R1020047010394
전자 잉크, 주석, 콘텍스트 노드, 전자 문서, 링크

Description

제1 데이터 구조를 제2 데이터 구조로 조정하는 방법{ELECTRONIC INK PROCESSING}
본 발명은 전자 잉크의 프로세싱에 관한 것이다. 특히 본 발명의 각종 실시예들은 전자 잉크의 레이아웃 분석, 분류, 및 인식을 포함하는 전자 잉크의 분석에 적용가능하다. 본 발명의 부가적인 실시예들은 예를 들어, 전자 잉크 문서에 풍부하고(rich) 유연한(flexible) 주석들(annotations)을 제공함에 있어서, 레이아웃이 분석되고, 분류되며, 인식되는 전자 잉크의 사용에 관한 것이다.
사회에서 컴퓨터의 역할이 증대됨에 따라, 컴퓨터에 데이터를 입력하기 위한 여러가지 다양한 기술들이 개발되어 왔다. 데이터를 입력하기 위한 특히 유용한 한가지 기술은 핸드라이팅(handwriting)에 의한 것이다. "전자 잉크"를 생성하기 위해 디지타이저(digitizer) 상에 스타일러스(stylus) 또는 다른 물체를 이용하여 기재함(writing)으로써, 컴퓨터 사용자는 키보드와 연관된 불편함과 큰 부피에서 벗어날 수 있다. 핸드라이팅 입력은 예를 들어, 회진을 도는 의사들, 건축 부지 위에 있는 건축가들, 소포를 배달하는 배달부들, 창고를 돌아다니는 창고 일꾼들에 의해 편리하게 사용될 수 있으며, 키보드의 사용이 힘들거나 불편한 임의의 상황에서 사용될 수 있다. 많은 상황에서 핸드라이팅 입력은 키보드 입력보다 편리하지만, 통상적으로 대부분의 소프트웨어 애플리케이션은 전자 잉크로 쓰여진 텍스트를 곧바로 처리할 수 없다. 대신에, 전자 잉크로 쓰여진 텍스트는 ASCII 문자들과 같은 또 다른 형태로 변환되기 위해 분석되어야 한다. 이러한 분석은 핸드라이팅 인식 처리를 포함하며, 이는 전자 잉크의 한 단어를 구성하는 개개의 전자 잉크 스트록들(strokes) 간의 여러 관계들에 기초하여 문자들을 인식한다.
핸드라이팅 인식 알고리즘들은 최근 몇 년 동안 엄청나게 개선되었지만, 전자 잉크가 기울어진 채로 쓰여 질 경우 그 정확성은 떨어질 수 있다. 마찬가지로, 두 개의 단어가 서로 가까이 함께 쓰여 진 경우와 같이 잉크 스트록들의 분리된 그룹들이 쉽게 구별될 수 없는 경우, 많은 인식 알고리즘들은 전자 잉크를 정확하게 인식할 수 없다. 또한, 일부 인식 알고리즘들은 사실상 전자 잉크가 그림(drawing)을 그리도록 의도된 경우에도 전자 잉크를 텍스트로 잘못 인식할 수 있다. 예를 들어, 사용자가 타이프라이팅된(typewritten) 텍스트의 일부분을 지나가도록 밑줄을 긋거나(underlines) 하이라이트(highlight)를 표시하거나 써클(circle) 또는 크로스(cross)를 표시하여 전자 잉크 스트록을 기재함으로써 타이프라이팅된 텍스트에 주석을 달 수 있다. 핸드라이팅 인식 알고리즘은 이러한 주석 스트록들을 대시(-), 숫자 "0" 또는 문자 "O"로서 잘못 인식할 수 있다.
많은 인식 알고리즘들의 정확성은 핸드라이팅 인식 알고리즘을 이용하기 전에 전자 잉크를 "파싱(parsing)"함으로써(예를 들어, 전자 잉크의 레이아웃을 분석함으로써 및/또는 전자 잉크를 "분류"함으로써) 상당히 개선될 수 있다. 통상적으로 분류 처리는 전자 잉크 스트록이 그림의 일부(즉, 그림 잉크 스트록)인지, 아니면 핸드라이팅된 텍스트의 일부(즉, 텍스트 잉크 스트록)인지를 결정한다. 다른 스트록 타입을 식별하기 위한 분류 알고리즘들도 가능하다. 레이아웃 분석 처리는 통상적으로 단어들, 행들(lines) 및 단락들과 같은 의미 있는 조합으로 전자 잉크 스트록들을 그룹화한다. 그러므로, 레이아웃 분석 및 분류 처리들은 전자 잉크의 콜렉션 내의 어느 스트록들이 하나의 단어에 속하는지, 전자 잉크의 어느 단어들이 전자 잉크로 쓰여진 텍스트의 하나의 행과 연관되는지, 그리고 전자 잉크로 쓰여진 텍스트의 어느 라인이 단락과 연관되는지를 식별하는데 사용될 수 있다.
레이아웃 분석 및 분류 잉크는 전자 잉크의 인식을 엄청나게 개선 시킬 수 있으나, 전자 잉크 인식 전의 이러한 활동들의 중요성에 대해 많은 소프트웨어 애플리케이션 개발자들은 인식하지 못하고 있다. 최근까지도, 기존의 소프트웨어 애플리케이션들과 함께 사용하기 위한 레이아웃 및 분류 알고리즘들은 쉽게 구할 수 없었다. 예를 들어, 통상적으로 Microsoft® Windows XP Tablet PC Edition Version 2002 운영 체제는, 전자 잉크를 저장하고 표시하며 처리하기 위해 Microsoft® 윈도우즈 저널(Windows Journal) 소프트웨어 애플리케이션과 함께 판매되었다. Microsoft® 윈도우즈 저널 소프트웨어 애플리케이션은 내부 파서(internal parser)를 이용하는데, 이 파서는 최근까지도 운영 체제에 의해 실행되는 다른 소프트웨어 애플리케이션에 액세스할 수 없었다.
이제는 윈도우즈 저널 소프트웨어 애플리케이션으로부터의 파싱 처리가 다른 소프트웨어 애플리케이션들에 의해 별도로 액세스가 가능하지만, 이러한 파서를 사용하는 것은 잘 알려져 있지 않으며, 사용자가 핸드라이팅 입력을 입력하고자 하는 많은 소프트웨어 애플리케이션들과 함께 이러한 파서를 사용하는 일은 쉽지 않을 수 있다. 게다가, 소프트웨어 애플리케이션 개발자가 원하는 소프트웨어 애플리케이션을 사용하기 위해 특별히 파서를 생성하고자 하는 경우에도 (이는 그 자체가 어려우며 시간 소모적인 처리일 수 있으며), 파싱 처리의 실행은 매우 시간 소모적일 수 있다. 예를 들어, 비교적 빠른 마이크로프로세서를 사용하여 전자 잉크의 단지 몇 개의 스트록 만을 파싱하는 데도 수 초 또는 심지어 수 분이 걸릴 수 있다. 파싱 처리가 완료될 때까지 소프트웨어 애플리케이션이 동작을 정지해야 한다면, 그 소프트웨어 애플리케이션은 대부분의 사용자들이 실용적으로 사용하기에는 너무 느릴 것이다.
따라서, 예를 들어 전자 잉크의 레이아웃을 분석하고, 전자 잉크를 분류 및/또는 인식하기 위해 다양한 소프트웨어 애플리케이션들에 의해 사용될 수 있는 전자 잉크 처리 기술들이 필요하다. 또한, 전자 잉크를 처리할 수 있는 전자 잉크 처리 기술과, 그 기술들을 이용한 소프트웨어 애플리케이션이 그 잉크 처리의 결과들을 무효로 하지 않으면서 새로운 전자 잉크 입력을 수용하도록 허용하는 것도 필요하다.
발명의 개요
유리하게도, 본 발명의 각종 실시예들은 전자 잉크를 처리하기 위해 여러 소프트웨어 애플리케이션들에 의해 사용될 수 있는 전자 잉크 처리 기술들을 제공한다. 또한, 이러한 전자 잉크 처리 기술들은 그 기술들을 구현하는 소프트웨어 애플리케이션의 동작과 전자 잉크가 비동기적으로 처리되도록 하므로, 소프트웨어 애플리케이션의 동작을 중지시키거나 상당히 지연시키지 않고 전자 잉크가 처리될 수 있다. 소프트웨어 애플리케이션은 심지어 이전의 전자 잉크 입력이 처리되고 있는 동안에도 새로운 전자 잉크 입력을 계속해서 수용할 수 있다.
본 발명의 각종 실시예들에서, 파일 또는 문서에서의 엘리먼트들(elements)은 그들의, 서로에 대한 공간적 위치에 기초하여 기술될 수 있다. 예를 들어, 전자 잉크 스트록 및 타이프라이팅된 텍스트 양자 모두는 동일한 공간 좌표계에 의해 설명될 수 있다. 문서의 엘리먼트들을 설명하기 위해 공간 정보를 사용하면, 그 문서를 관리하는 소프트웨어 애플리케이션은 그 문서 엘리먼트들 간의 관계를 설명하는 데이터 구조를 유지할 수 있다. 특히, 그 소프트웨어 애플리케이션은 여러가지 문서 엘리먼트들의 클래스를 설명하고, 다양한 문서 엘리먼트들 간의 연관성들을 정의하는 데이터 구조를 유지할 수 있다. 이러한 연관성들은 예를 들어, 전자 잉크 스트록 데이터 또는 그 집합들을 전자 문서 내의 (단어들, 행들, 단락들, 그림들, 테이블 셀들 등과 같은) 다른 엘리먼트들에 링크시키기 위해 사용되는 정보로서 정의될 수 있다.
파일 또는 문서 데이터 구조 내의 문서 엘리먼트들을 그들의 공간적 위치에 기초하여 기술함으로써, 다양한 파일 타입들에 대한 문서 엘리먼트들은 그 문서 엘리먼트들을 식별하고 처리하기 위해 공통의 기술들을 사용할 수 있다. 특히, 다양한 소프트웨어 애플리케이션들은 그들의 공간적 위치에 기초하여 문서 내에 문서 엘리먼트들을 기술할 수 있으며, 공통의 전자 잉크 분석 메소드들을 사용하기 위해 이러한 공간적 위치 참조를 이용할 수 있다. 또한, 분석을 위해 문서의 특정 영역을 지정함으로써, 각 소프트웨어 애플리케이션은 문서 내의 희망하는 엘리먼트들만으로 분석 처리를 한정할 수 있다.
본 발명의 각종 실시예들에 따라 문서로의 새로운 전자 잉크 입력을 분석하기 위해, 문서를 관리하는 소프트웨어 애플리케이션은, 분석될 새로운 잉크를 포함하도록 그 문서와 연관된 데이터 구조를 변경한다. 이어서 그 소프트웨어 애플리케이션은 이러한 데이터 구조(또는 그 관련 부분들)를 잉크 분석 도구에 제공하며, 이는 분석을 위해 데이터 구조의 일부 또는 모두를 카피한다 (그리고 그 응용 프로그램의 문서 데이터 구조와는 별도로 데이터의 카피에서 동작한다). 잉크 분석 도구는 파싱 처리(예를 들어, 레이아웃 분석 처리 및/또는 분류 처리)와 같은 분석 처리에 그 카피를 전달한다. 소프트웨어 애플리케이션은, 잉크 분석 처리(들)가 수행되는 동안, 새로운 전자 잉크 입력 및/또는 다른 데이터를 수신하는 단계를 포함하는 일반적인 동작을 재개할 수 있다. 새로운 전자 잉크를 수신하는 단계에 부가하여, 임의의 "다른 데이터", 예컨대, 기존의 잉크, 텍스트, 이미지, 그래픽, 테이블, 플로우차트, 다이어그램 등의 콘텐트, 위치 및 크기를 변경하는 데이터와; 부가적인 텍스트, 이미지, 그래픽, 테이블, 플로우차트, 다이어그램 등을 추가하는 데이터; 기존의 텍스트, 이미지, 그래픽, 테이블, 플로우차트, 다이어그램 등을 삭제하는 데이터가 응용 프로그램에 의해 수신될 수 있다. 모든 희망하는 분석 처리들이 완료된 후, 그 분석 결과들은 잉크 분석 도구로 리턴된다.
그러므로, 본 발명에 따른 시스템 및 방법의 여러가지 예시들은 잉크 분석 처리들이 그 잉크 분석 처리를 이용하는 소프트웨어 애플리케이션의 동작과 비동시적으로 실행되도록 한다. 이러한 비동시성 동작은 사용자가 소프트웨어 애플리케이션을, 분석 처리에 의해 지연되는 일 없이, 계속하여 사용할 수 있도록 한다. 또한, 이는 다수의 분석 처리들이 동시에 실행되도록 한다.
분석 결과들을 수신하는 것에 응답하여, 잉크 분석 도구는 (분석 처리들이 수행되는 동안 입력된 새로운 및/또는 변경된 데이터를 포함할 수 있는) 전자 문서의 데이터 구조의 현재 버전을 소프트웨어 애플리케이션으로부터 획득하고, 데이터 구조의 현재 버전을 이용하여 분석 결과를 조정(reconcile)한다. 데이터 구조의 현재 버전을 이용하여 분석 결과들을 조정함으로써, 본 발명의 각종 실시예들은, 소프트웨어 애플리케이션에 의해 사용되고 있는 데이터에 비동시적으로 액세스하기 위한, "록킹(locking)"과 같은 보다 복잡한 기술들을 피할 수 있다. 대신, 조정(reconciliation)은 복잡한 내부 록킹을 제공할 필요없이 임의의 소프트웨어 애플리케이션에 의해 호출될 수 있다.
데이터 구조의 현재 버전을 이용하여 분석 결과들을 조정한 후에, 잉크 분석 도구는 그 조정된 분석 결과들의 카피를 핸드라이팅 인식 처리와 같은 또 다른 분석 처리에 제공할 수 있다. 다시, 소프트웨어 애플리케이션은 제2 잉크 분석 처리(들)가 수행되고 있는 동안, 새로운 전자 잉크 입력 및/또는 다른 데이터를 수신하는 단계를 포함하는 일반적인 동작을 재개할 수 있다. 모든 희망하는 제2 분석 처리가 완료된 후, 제2 분석 처리의 결과들은 잉크 분석 도구로 리턴된다. 이어서 그 잉크 분석 도구는 (새롭고 및/또는 변경된 데이터를 다시 포함할 수 있는) 소프트웨어 애플리케이션으로부터 데이터 구조의 현재 버전을 획득하고, 데이터 구조의 현재 버전을 이용하여 제2 분석 결과들을 조정한다. 이어서 잉크 분석 도구는 제2 분석 처리의 조정된 결과들을 이용하여 데이터 구조를 업데이트한다. 물론, 임의의 수의 잉크 분석 절차들 및/또는 단계들이 본 발명으로부터 벗어나지 않는 범위에서 사용될 수 있다.
상술한 여러 잉크 분석 처리들 및 전자 잉크 데이터를 전자 문서의 다른 특징들에 관련시키거나 링크시키는 공간적 정보의 사용은, 전자 문서에 풍부하고 유연하며 자연스러운 잉크 주석들을 제공하기 위해 사용될 수 있다. 예를 들어, 본 발명의 실시예들은 주석이 달린 바탕(underlying) 문서 엘리먼트들에 가해진 변경들에 기초하여 동적으로 이동하거나 및/또는 변화하는 전자 잉크 주석들을 제공하기 위해 사용될 수 있다. 사용자들은 통상적으로 여러 가지 서로 다른 방식(예를 들어, 단어들에 써클(circle)을 표시하거나, 밑줄을 긋거나, 하이라이트(highlight)를 표시하거나, 줄을 그어 지우는 표시(strikeout)를 할 수 있으며; 여백(margine)에 노트를 기재할 수 있고; 여백에 위치한 주석들에 화살표 또는 다른 포인터(pointer)를 그릴 수 있음)으로 문서들에 주석을 단다. 게다가, 사용자들은, 예를 들어, 텍스트, 스프레드시트(spreadsheet), 그림, 슬라이드쇼, 테이블, 차트, 그래프, 플로우차트 등을 포함하는 매우 다양한 서로 다른 문서 타입에 주석을 달 수 있다.
전자 잉크 주석들을 전자 문서에 매끄럽게 통합시키기 위해서는, 바탕 전자 문서가 어떤 이유로 변화될 때 주석들이 적절하게 반응(behave)할 것이 요구된다. 예를 들어, 사용자가 전자 문서의 단어에 (주석으로서) 써클(circle)을 표시하고 이어서 그 단어 앞의, 문서 내의 어딘가에 텍스트를 추가하는 것은 써클이 표시된 단어를 이동시키는 결과를 가져올 수 있다. 이 경우, 써클 주석은 이동하여 그 단어와 함께 있어야 한다. 또 다른 예로서, 사용자가 써클을 표시한 단어에 문자들을 추가 또는 제거하거나, 임의의 방식으로 그 크기를 변화시킬 경우, 써클 주석은 그 단어의 새로운 크기를 수용하도록 확장 또는 수축해야 한다. 바람직하게, 바탕 전자 문서가 어떤 이유로 구성 엘리먼트들(단락, 그림, 열 등)의 서로에 대한 상대적 위치 및/또는 페이지를 업데이트하거나, 리플로우(reflow)하는 경우, 전자 잉크 주석들 또한 바탕 텍스트 또는 다른 정보와 관련하여 적절한 위치에 머무르거나 재위치할 것이다. 주석들이 바탕 전자 문서 텍스트에 대해 이러한 방식으로 반응하지 않는다면, 주석을 단 후에 생생한 전자 문서들을 편집하거나 공유하기에는 실용적이지 않으므로, 용지에 출력하는 것이(parer printout) 주석을 달기에 여전히 가장 용이하고 유용한 방식이 될 것이다.
어떻게 주석을 적절하게 변화시킬 지를 결정하는 것은 주석 및 전자 문서에 관한 여러 요소들에 의존할 것이다. 예를 들어, 리플로우(reflow) 상황에서 주석을 적절하게 변화시키는 것은 예를 들어, (a) 전자 잉크를 주석으로서 식별하고, (b) 전자 잉크 주석의 타입을 식별하고, (c) 바탕 전자 문서 내의 특정 엘리먼트에 대한 전자 잉크의 관계를 식별하는 컴퓨팅 시스템(예컨대, 파서)의 능력에 의존할 수 있다. 이러한 정보 타입의 일부 또는 모두를 사용자에게 질의하는 것이 가능할 수 있지만, 그러한 시스템에서는 사용자가 용지에 주석하는 경우보다 훨씬 더 귀찮은 경험을 하게 될 것이다. 따라서, 본 발명의 각종 실시예들에 따르면, 상기 정보는 (1) 전자 잉크 자체와, (2) 문서 내의 여러 엘리먼트들의, 전자 잉크에 대한 공간적 위치를 포함하는 바탕 문서의 콘텐트로부터 추론될 수 있다.
잉크 주석들의 의미를 판단하는 것은 복잡하고 어려울 수 있기 때문에, 사용자가 주석 달기를 희망하는 문서의 각 응용 프로그램이 주석 식별 로직을 개별적으로 구현할 것을 기대하는 것은 매우 비현실적이다. 오히려, 각 응용 프로그램이 쉽게 통합할 수 있는 이러한 주석 기능(function)을 보조하기 위한 재사용가능 컴포넌트(component)를 제공하는 것이 바람직하다. 예를 들어, 펜입력식 컴퓨팅 시스템(pen-based computing system)의 운영 체제가 전자 잉크의 렌더링 및 콜렉션(collection)을 위한 컴포넌트를 제공하는 것처럼, 연관된 잉크와 함께 매우 쉽게 작동할 수 있는, 잉크 주석들의 의미(meaning)를 결정하는 컴포넌트("주석 파서(annotation parser)"라고도 함)를 운영 체제가 제공하는 것이 바람직할 것이다.
그러나, 바탕 전자 문서의 콘텐트를 식별하는 것은 "스마트한(smart)" 주석 능력을 제공함에 있어서 상당한 어려움들을 야기한다. 예를 들어, 다양한 서로 다른 응용 프로그램들은 문서들을 저장하고 관리하며 리플로우하는 매우 이질적인 방식들을 갖는다. 본 발명은, 다양한 서로 다른 타입들의 전자 문서들에 대한 가능한 잉크 주석들의 관계를 결정할 수 있는 재사용가능한 주석 파서를 제공한다. 구체적으로, 본 발명의 일부 실시예에 따르면, 파싱되고 있는 잉크에 관한 관련 정보(예를 들어, 잉크 주석에 "콘텍스트"를 제공하기 위해 잉크 주석에 대응하는 공간적 영역 내에서의 전자 문서에 관한 정보)를 제공하기 위해 응용 프로그램으로 콜백(call back)하는 주석 파서가 메커니즘에 제공된다. 메커니즘은 임의의 문서-기반의 애플리케이션에 통합하기에 알맞도록 충분히 용이하며, (페이지 등과 같은 섹션들에서 처리될 수 있는) 매우 큰 문서들을 작업하기에 충분히 효율적이다.
그러므로, 본 발명의 각종 실시예들에 따른 잉크 처리 기술들은, 다양한 소프트웨어 애플리케이션이 잉크 분석 도구를 통해 전자 잉크에 대한 다수의 처리를 수행하도록 한다. 또한, 이러한 기술들을 이용한 소프트웨어 애플리케이션은, 분석 처리 동안에도, 분석 처리들의 결과들을 반드시 무효화할 필요 없이, 새로운 전자 잉크 입력을 수신하는 단계를 포함하는 통상의 동작을 계속할 수 있다.
본 발명의 상기 및 다른 목적들, 특징들 및 이점들은 첨부 도면들에 관련하여 설명되는 다음의 상세한 설명으로부터 쉽게 명백해지고 완전히 이해될 것이다.
도 1은 본 발명의 일부 실시예들이 구현될 수 있는 범용의 디지털 컴퓨팅 환경의 개략도를 도시한 도면.
도 2는 본 발명의 일부 실시예들이 구현될 수 있는 펜입력식(pen-based) 퍼스널 컴퓨팅(PC) 환경의 개략도를 도시한 도면.
도 3 및 도 4는 전자 문서 주석에 관한 본 발명의 실시예들의 예시적인 구현들의 여러가지 특징들을 도시한 도면.
도 5는 전자 문서의 잉크 파싱의 일반적인 특징들을 도시한 도면.
도 6a 내지 도 6i는 본 발명의 적어도 일부 실시예들을 실행하기에 유용한 예시적인 데이터 구조들을 도시한 도면.
도 7a 내지 도 12b는 예시적인 전자 문서들 및 이 전자 문서들의 전자 잉크 주석들을 실행하기에 유용한 관련 예시적인 데이터 구조들을 도시한 도면.
도 13a 내지 도 14b는 예시적인 전자 문서들 및 이 전자 문서들의 전자 플로 우차트 특징들을 처리하기에 유용한 관련 예시적인 데이터 구조들을 도시한 도면.
도 15a 내지 도 15c는 예시적인 전자 문서들 및 이 전자 문서들의 전자 테이블 특징들을 처리하기에 유용한 관련 예시적인 데이터 구조들을 도시한 도면.
도 16a 내지 도 16d는 본 발명의 각종 실시예들에 따른 전자 잉크를 처리하는 방법을 도시한 도면.
도 17, 도 19 내지 도 21, 및 도 23 내지 도 26은 본 발명의 각종 실시예들에 따른 예시적인 잉크 분석 처리동안 데이터 대상들의 전달을 도시한 도면.
도 18 및 도 22는 본 발명의 각종 실시예들에 따른 다루어질 수 있는 간단한 데이터 트리를 도시한 도면.
도 27은 문서의 현재 상태로 분석 결과들을 조정하는 방법을 보여주는 플로우차트를 도시한 도면.
도 28은 본 발명의 또다른 예들에 따라 전자 잉크를 비동시적으로 분석하기 위한 장치를 도시한 도면.
도면의 상세한 설명
<용어>
본 명세서에서는 이하의 용어들이 사용되며, 그 용어들은, 달리 구체화되거나 문맥상으로 명확하지 않다면, 이하에서 제공되는 의미들을 갖는다.
"렌더(Render)" 또는 "렌더링된(Rendered)" 또는 "렌더링한(Rendering)" - (텍스트, 그래픽 및/또는 전자 잉크를 포함하는) 정보가, 스크린 상이든 어디든에서 어떻게 표시되거나, 인쇄 또는 그밖에 다른 방식들로 출력되는지를 결정하는 처리.
"컴퓨터 판독가능 매체(Computer-Readable Medium)" - 컴퓨터 시스템 상에서 사용자에 의해 액세스될 수 있는 임의의 사용가능한 매체. 예시로서, "컴퓨터 판독가능 매체"는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있으나 이에 제한되는 것은 아니다. "컴퓨터 저장 매체"는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성과 비휘발성, 분리형 및 비분리형 매체를 포함한다. "컴퓨터 저장 매체"는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 다른 메모리 기술; CD-ROM, DVD(digital versatile disk) 또는 다른 광 저장 디바이스; 자기 카세트, 자기 테이프, 자기 디스크 저장소 또는 다른 자기 저장 디바이스; 또는 원하는 정보를 저장하는데 사용될 수 있으며 컴퓨터에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만 이에 제한되지는 않는다. "통신 매체"는 통상적으로 컴퓨터 판독가능 명령들, 데이터 구조, 프로그램 모듈 또는 반송파(carrier wave)와 같은 변조된 데이터 신호 내의 다른 데이터 또는 다른 전달 매체를 구현하고, 임의의 정보 전달 매체를 포함한다. 용어 "변조된 데이터 신호"는 그 신호에서 정보를 인코딩하기 위한 방식으로 설정되거나 변화된 하나 이상의 특징들을 갖는 신호를 의미한다. 일례로서, 통신 매체는 유선 네트워크 또는 직접-유선 접속과 같은 유선 매체 및 음향(acoustic), RF, 적외선 및 기타 무선 매체와 같은 무선 매체를 포함하지만, 이에 한정되는 것은 아니다. 상기의 임의의 조합들 또한 "컴퓨터 판독가능 매체"의 범위 내에 포함되어야 한다.
<개요>
본 발명의 각종 실시예들에 따르면, 문서(또는 다른 타입의 파일) 내의 엘리먼트의 속성들은 문서 내의 그 엘리먼트의 공간적 위치에 관한 정보를 포함할 수 있다. 따라서, 전자 잉크 스트록 및 타이프라이팅된 텍스트 양자 모두는 문서에 대해 동일한 공간 좌표 시스템 및/또는 문서 내의 다른 엘리먼트들과의 공간적 관계 또는 다른 관계에 의해 기술될 수 있다. 또한, 문서 내에서의 관련된 엘리먼트들은, 이러한 엘리먼트들이 포함되어 있는 문서의 공간 영역을 식별함으로써 및/또는 이러한 엘리먼트들을 링크시킴으로써 간단하게 식별될 수 있다.
다양한 문서 엘리먼트들 간의 이러한 공간적 관계를 이용하면, 소프트웨어 애플리케이션은 문서 엘리먼트들 간의 다른 관계들을 설명하는 데이터 구조를 생성하고 유지할 수 있다. 예를 들어, 소프트웨어 애플리케이션은, 문서 내의 다양한 엘리먼트들에 대한 클래스를 정의하는 데이터 트리와 같은 데이터 구조를 유지할 수 있다. 따라서, 데이터 구조 내의 노드는 하나 이상의 잉크 스트록을 포함하는 그림 또는 핸드라이팅된 단어에 대응할 수 있고, 그 노드에 저장된 데이터는 또한 페이지 상에서의 그 단어의 위치를 표시할 수 있다. 전자 잉크 단어 및/또는 잉크 스트록과 관련하여 통상적으로 저장된 임의의 다른 적절한 데이터 또는 종래의 데이터는 또한 단어 노드에 저장될 수 있다.
이러한 타입의 데이터 구조는 또한 (개별적인 잉크 스트록 또는 타이프라이팅된 텍스트 문자들과 같은) 문서 엘리먼트들을, 단어, 단어들의 행, 문장, 단락 등과 같은 의미 있는 그룹들에 연관시킬 수 있다. 그러므로, 소프트웨어 애플리케이션이 핸드라이팅된 전자 잉크의 단락을 설명하는 문서 트리 구조를 유지한다면, 그 데이터 구조의 리프(leaf) 노드들은 전자 잉크의 개별적인 스트록들에 관한 데이터를 포함할 수 있고, 하나 이상의 스트록들은, 그 단락 내의 단어들(예를 들어, 파서 및/또는 인식기에 의해 결정된 단어들)에 대응하는 단어 노드들로서 그 데이터 구조 내에서 서로 연관될 수 있다. 이어서 트리 구조는 그 단락 내의 행들에 대응하는 행 노드들과 그 단어 노드들을 연관시킬 수 있다. 각 라인 노드는 또한 그 단락에 대응하는 노드와 연관될 수 있다. 또한, 소프트웨어 애플리케이션은, 전자 잉크 스트록 및/또는 전자 잉크의 몇 가지 다른 그룹에 대응하는 노드를, 이미지와 같은 비-잉크 문서 엘리먼트, 잉크 그림, 타이프라이팅된 문자, 단어, 행, 단락 등에 대응하는 또 다른 노드와 연관시키는 트리 또는 다른 데이터 구조를 유지할 수 있다. 그러므로, 이러한 데이터 구조들은, 연관된 전자 잉크 스트록들 간의 관계들을 정의하기 위해, 핸드라이팅된 텍스트를 형성하는 전자 잉크 스트록들을, 비-잉크 문서 엘리먼트에 주석을 다는 전자 잉크 스트록들과 구별하기 위해, 및/또는 전자 잉크 스트록들을 다른 문서 엘리먼트들에 링크시키기 위해 사용될 수 있다.
이하에서 상세하게 논의될 바와 같이, 이러한 데이터 구조들은 문서 내의 전자 잉크를 분석하기 위해 본 발명의 각종 실시예들에 따른 잉크 분석 도구와 함께 사용될 수 있다. 본 발명의 각종 실시예들에 따르면, 소프트웨어 애플리케이션은 우선 문서에 대한 데이터 구조를 생성함으로써 문서 내의 전자 잉크의 분석을 획득할 수 있다. 데이터 구조는 이미 분석된 문서 엘리먼트들 간의 관계가 있다면 이를 설명하므로, 임의의 새로운 전자 잉크가 분석될 콘텍스트를 제공한다. 이러한 데이터 구조 또는 "분석 콘텍스트 오브젝트"는 또한 분석되지 않은 임의의 새로운 전자 잉크를 포함한다. 즉, 분석 콘텍스트 오브젝트는 또한 다른 문서 엘리먼트들과의 관계가 아직 설정되지 않은 전자 잉크를 포함한다. 본 발명의 몇 가지 예들에서, 소프트웨어 애플리케이션은 스스로 분석 콘텍스트 오브젝트를 생성한다. 그러나, 본 발명의 다른 예들로서, 소프트웨어 애플리케이션은 분석 콘텍스트 오브젝트를 생성하기 위해 잉크 분석 도구 또는 또 다른 도구를 이용한다.
소프트웨어 애플리케이션이 잉크 분석 도구에 분석 콘텍스트 오브젝트를 제공한 후 (또는 잉크 분석 도구가 분석 콘텍스트 오브젝트를 생성한 후), 잉크 분석 도구는 분석되지 않은 전자 잉크를 포함하는 분석 콘텍스트 오브젝트의 적어도 일부에 관한 정보를 검색하거나 그 카피를 만든다. 분석 콘텍스트 오브젝트가의 원하는 부분에 관한 정보를 검색하거나 그 카피를 만드는 것에 의해, 잉크 분석 도구는 소프트웨어 애플리케이션에 의해 유지되는 분석 콘텍스트 오브젝트를 변경하지 않고도 후속하여 분석될 수 있는 데이터 구조를 생성한다. 즉, 카피는 소프트웨어 애플리케이션에서 사용되는 실제의 전자 문서와는 별개이며, 따라서 이하에서는 "문서 독립" 분석 콘텍스트 오브젝트로서 지칭될 수 있다.
일단 잉크 분석 도구가 문서 독립 분석 콘텍스트 오브젝트를 생성했으면, 잉크 분석 도구는 문서 독립 분석 콘텍스트 오브젝트를 하나 이상의 분석 처리에 제공한다. 예를 들어, 문서 내의 분석되지 않은 전자 잉크에 대해 핸드라이팅 인식이 수행되면, 잉크 분석 도구는, (필요하거나 요구될 경우) 잉크를 텍스트 및 그림 스트록들로 분류하고 미분석 전자 잉크 텍스트 스트록들을 잉크 레이아웃에 기초하여 연관된 그룹들로 그룹화하기 위해 분류 및/또는 레이아웃 분석 처리들에 문서 독립 분석 콘텍스트 오브젝트를 제공할 수 있다. 분류 단계 및/또는 레이아웃 분석 처리들이 문서 독립 분석 콘텍스트 오브젝트를 분석하는 동안, 소프트웨어 애플리케이션은 정규의 동작을 계속할 수 있다. 특히, 소프트웨어 애플리케이션은 새로운 전자 잉크 입력 및/또는 응용 프로그램에 의해 계속된 전자 문서 내의 임의의 다른 데이터를 계속해서 수신할 수 있다.
파싱 처리와 같은 분석 처리가 문서 독립 분석 콘텍스트 오브젝트의 분석을 완료한 경우, 분석 결과들이 잉크 분석 도구로 리턴된다. 특히, (그중에서도 특히, 상술한 바와 같이 분류 및 레이아웃 분석 처리들을 포함할 수 있는) 파싱 처리는 앞서 분석되지 않은 전자 잉크에 대한 새로운 관계들을 보여주는 문서 독립 분석 콘텍스트 오브젝트의 변경된 버전을 리턴한다. 그러나, 소프트웨어 애플리케이션은 상술한 파싱 동작 중에 새로운 전자 잉크 입력 및/또는 문서에 대한 임의의 다른 데이터를 자유롭게 수용하기 때문에, 문서에 대한 분석 콘텍스트 오브젝트의 현재 버전 (즉, 애플리케이션에 의해 유지되는 버전)은 잉크 분석 도구에 원래 제공된 문서 독립 분석 콘텍스트 오브젝트와 파싱 처리에 의해 제공되는 파싱 결과들과는 다를 수 있다.
따라서, 본 발명의 몇가지 예들로서, 잉크 분석 도구는 소프트웨어 애플리케이션으로부터 분석 콘텍스트 오브젝트의 현재 버전을 획득할 수 있으며, 분석 콘텍스트 오브젝트의 현재 버전을 이용하여 파싱 결과들을 조정할 수 있다. 이러한 조정 처리 동안, 잉크 분석 도구는 파싱 처리의 결과들을 반영하기 위해 분석 콘텍스트 오브젝트의 현재 버전을 업데이트할 것이다. 이어서 잉크 분석 도구는 현재 분석 콘텍스트 오브젝트로부터 조정된 데이터를 인식을 위한 핸드라이팅 인식 처리로 전달할 것이다. 그러나, 본 발명의 다른 예들로서, 잉크 분석 도구는 조정 처리를 생략할 수 있으며, 대신에 파싱 결과들을 핸드라이팅 인식 처리로 직접 전달할 수 있다.
일단 파싱 결과들이 분석 콘텍스트 오브젝트의 현재 버전을 이용하여 조정되었으면, 소프트웨어 애플리케이션은 정규 동작으로 다시 리턴될 수 있고, 따라서 문서에 관한 임의의 다른 데이터 및/또는 새로운 전자 잉크 입력을 계속해서 수신할 수 있다. 한편, 인식 처리는 현재 분석 콘텍스트 오브젝트로부터의 조정된 데이터(또는, 그 파싱 결과들)를 분석한다. 인식 처리는 조정된 데이터(또는 파싱 결과들)의 분석을 완료한 후에 인식 결과들을 잉크 분석 도구로 리턴한다. 다시, 소프트웨어 애플리케이션은 인식 처리의 동작 중에 문서에 대한 임의의 다른 데이터 및/또는 새로운 전자 잉크 입력을 수신했을 수 있기 때문에, 잉크 분석 도구는 소프트웨어 애플리케이션으로부터 분석 콘텍스트 오브젝트의 현재 버전을 획득한다. 잉크 분석 도구는 분석 콘텍스트 오브젝트의 현재 버전을 조정 결과들로 업데이트하기 위해 인식 처리로부터의 결과들을 분석 콘텍스트 오브젝트의 현재 버전을 이용하여 조정한다.
<예시적인 동작 환경>
도 1은 본 발명의 각종 실시예들을 구현하는데 사용될 수 있는 범용의 디지털 컴퓨팅 환경의 개략도를 도시한다. 도 1에서, 컴퓨터(100)는 처리 유닛(110), 시스템 메모리(120), 및 시스템 메모리(120)를 포함하는 다양한 시스템 구성요소들을 상기 처리 유닛(110)에 결합하는 시스템 버스(130)를 포함한다. 시스템 버스(130)는 메모리 버스 또는 메모리 콘트롤러를 포함하는 몇 가지 타입의 버스 아키텍처들 중 하나의 버스 아키텍처, 주변 버스, 및 다양한 버스 아키텍쳐들 중 임의의 버스 아키텍쳐를 이용하는 로컬 버스일 수 있다. 시스템 메모리(120)는 판독 전용 메모리(ROM)(140) 및 랜덤 액세스 메모리(RAM)(150)를 포함할 수 있다.
기본 입/출력 시스템(160)(BIOS)은 시동 중 ROM(140)에 저장되는 것과 같이, 컴퓨터(100) 내의 엘리먼트들 간에 정보를 전달하는 것을 돕는 기본 루틴들을 포함한다. 컴퓨터(100)는 또한 하드디스크(도시되지 않음)로부터 판독하고 하드디스크에 기록하기 위한 하드디스크 드라이브(170)와, 분리형 자기 디스크(190)로부터 판독하고 분리형 자기 디스크(190)에 기록하기 위한 자기 디스크 드라이브(180)와, CD ROM 또는 다른 광 매체와 같은 분리형 광 디스크(192)로부터 판독하고 분리형 광 디스크(192)에 기록하기 위한 광 디스크 드라이브(191)를 포함할 수 있다. 하드디스크 드라이브(170), 자기 디스크 드라이브(180) 및 광 디스크 드라이브(191)는 하드디스크 드라이브 인터페이스(192), 자기 디스크 드라이브 인터페이스(193) 및 광 디스크 드라이브 인터페이스(194)에 의해 시스템 버스(130)에 각각 접속된다. 이러한 드라이브들 및 그들의 연관된 컴퓨터 판독가능 매체는 컴퓨터 판독가능 명령들, 데이터 구조들, 프로그램 모듈들 및 퍼스널 컴퓨터(100)용의 다른 데이터의 비휘발성 저장을 제공한다. 자기 카세트, 플래쉬 메모리 카드, 디지털 비디오 디스크, 베르누이 카트리지(Bernoulli cartridge), 랜덤 액세스 메모리들(RAMs), 판독 전용 메모리들(ROMs) 등과 같은 컴퓨터에 의해 액세스 가능한 데이터를 저장할 수 있는 컴퓨터 판독가능 매체의 다른 타입들이 예시적인 동작 환경에서 사용될 수 있음을 본 기술분야의 숙련자들은 이해할 것이다.
하드디스크 드라이브(170), 자기 디스크(190), ROM(140), 또는 RAM(150)에 저장될 수 있는 많은 프로그램 모듈들은 운영 체제(195), 하나 이상의 응용 프로그램(196), 다른 프로그램 모듈(197) 및 프로그램 데이터(198)를 포함한다. 사용자는 키보드(101) 및 (마우스와 같은) 포인팅 디바이스(102)와 같은 입력 디바이스들을 통해 컴퓨터(100) 내에 명령들 및 정보를 입력할 수 있다. 다른 입력 디바이스들(도시되지 않음)은 마이크로폰, 조이스틱, 게임 패드, 인공위성 접시(satellite dish), 스캐너 등을 포함할 수 있다. 이들 및 다른 입력 디바이스들은 종종 시스템 버스(130)에 접속된 직렬 포트 인터페이스(106)를 통해 처리 유닛(110)에 접속되지만, 이들은 또한 병렬 포트, 게임 포트, 또는 범용 직렬 버스(USB) 등과 같은 다른 인터페이스들에 의해 접속될 수 있다. 또한, 이 디바이스들은 적절한 인터페이스(도시되지 않음)를 통해 시스템 버스(130)에 직접적으로 결합될 수 있다.
모니터(107) 또는 다른 타입의 디스플레이 디바이스는 또한 비디오 어댑터(108)와 같은 인터페이스를 통해 시스템 버스(130)에 접속될 수 있다. 모니터(107)에 부가하여, 퍼스널 컴퓨터는 통상적으로 스피커 및 프린터와 같은 다른 주변 출력 디바이스(도시되지 않음)를 포함한다. 일례로, 수기 입력(freehand input)을 디지털로 캡처하기 위해 펜 디지타이저(pen digitizer)(165) 및 이에 수반된 펜 또는 스타일러스(166)가 제공된다. 도 1에는 펜 디지타이저(165)와 직렬 포트 인터페이스(106) 간의 접속이 도시되어 있으나, 실제로 펜 디지타이저(165)는 처리 유닛(110)에 직접 결합될 수 있으며, 또는 본 기술분야에 공지된 바와 같이 병렬 포트 또는 또 다른 인터페이스 및 시스템 버스(130)를 통하는 것과 같은 임의의 적절한 방식으로 처리 유닛(110)에 결합될 수 있다. 또한, 도 1에는 디지타이저(165)가 모니터(107)로부터 분리된 것으로 도시되어 있으나, 디지타이저(165)의 사용가능 입력 영역은 모니터(107)의 디스플레이 영역과 동일한 영역이 될 수 있다. 또한, 디지타이저(165)는 모니터(107)에 통합될 수 있거나, 모니터(107)에 중첩되거나 부가된 별개의 디바이스로서 존재할 수 있다.
컴퓨터(100)는 원격 컴퓨터(109)와 같은 하나 이상의 원격 컴퓨터에 대한 논리적 접속들을 이용하여 네트워크 환경에서 동작할 수 있다. 원격 컴퓨터(109)는 서버, 라우터, 네트워크 PC, 피어 디바이스(peer device) 또는 다른 공통의 네트워크 노드가 될 수 있으며, 도 1에는 간략하게 메모리 저장 디바이스(111) 만이 도시되어 있으나 통상적으로는 컴퓨터(100)에 대한 상술한 많은 또는 모든 엘리먼트들을 포함한다. 도 1에 도시된 논리적 접속들은 근거리 네트워크(LAN)(112) 및 광역 네트워크(WAN)(113)를 포함한다. 그러한 네트워킹 환경은 유선 및 무선 접속을 모두 사용하는 사무실, 대규모 광 컴퓨터 네트워크, 인트라넷 및 인터넷에 흔히 있는 것이다.
LAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(100)는 네트워크 인터페이스 또는 어댑터(114)를 통해 근거리 네트워크(112)에 접속된다. WAN 네트워킹 환경에서 사용되는 경우, 퍼스널 컴퓨터(100)는 통상적으로 인터넷과 같은 광역 네트워크(113)를 통해 통신 링크를 설정하기 위한 모뎀(115) 또는 다른 수단을 포함한다. 컴퓨터(100) 내부 또는 외부에 있을 수 있는 모뎀(115)은 직렬 포트 인터페이스(106)를 통해 시스템 버스(130)에 접속될 수 있다. 네트워크 환경에서, 퍼스널 컴퓨터(100) 또는 그 일부분들에 대하여 도시된 프로그램 모듈들은 원격 메모리 저장 장치에 저장될 수 있다.
도시된 네트워크 접속들은 예시들이며, 컴퓨터 간의 통신 링크를 설정하기 위한 다른 기술들이 사용될 수 있음을 이해해야 한다. TCP/IP, 이더넷, FTP, HTTP, UDP 등과 같은 다양한 잘 알려진 프로토콜들 중 임의의 프로토콜이 존재하는 것으로 추정하며, 시스템은 사용자가 웹-기반 서버로부터 웹 페이지를 검색하는 것을 허용하도록 사용자-서버 구성에서 동작될 수 있다. 다양한 종래의 웹 브라우저들 중 임의의 브라우저가 웹 페이지들 상의 데이터를 디스플레이하고 처리하는데 사용될 수 있다.
도 1의 환경이 예시적인 환경을 도시할지라도, 다른 컴퓨팅 환경들이 또한 사용될 수 있음을 이해해야 한다. 예를 들어, 본 발명의 하나 이상의 예들은 도 1에 도시되고 상술한 모든 각종 실시예 보다 소수의 환경을 사용하며, 이러한 실시예들은 숙련가들에게 명백한 여러 조합들 및 서브조합들에서 나타날 것이다.
도 2는 본 발명의 각종 실시예들에 따라 사용될 수 있는 펜입력식 퍼스널 컴퓨터(PC)(201)를 도시한다. 도 1의 시스템의 특징, 서브시스템 및 기능들 중 임의의 것 또는 모두가 도 2의 컴퓨터에 포함될 수 있다. 펜입력식 퍼스널 컴퓨터 시스템(201)은 복수의 윈도우(203)가 디스플레이되는 큰 디스플레이 표면(202), 예를 들어 액정 디스플레이(LCD) 스크린과 같은 디지타이징 평판 디스플레이를 포함한다. 스타일러스(204)를 사용하여, 사용자는 디지타이징 디스플레이 영역을 선택하고, 하이라이트를 표시하며 그 위에 기록할 수 있다. 적절한 디지타이징 디스플레이 패널들의 예들은 Mutoh Co.(현재는 FinePoint Innovations Co.로서 알려져 있음) 또는 Wacom Technology Co.로부터 이용가능한 펜 디지타이저와 같은 전자기 펜 디지타이저들을 포함한다. 펜 디지타이저의 다른 타입들, 예를 들어, 광 디지타이저 및 접촉식(touch-sensitive) 디지타이저가 또한 사용될 수 있다. 펜입력식 컴퓨팅 시스템(201)은 데이터를 조작하고, 텍스트를 입력하고, 스프레드시트, 워드 프로세싱 프로그램 등을 생성, 편집 및 변경하는 것과 같은 종래의 응용 태스크를 실행하기 위해서 스타일러스(204)를 사용하여 행해진 제스처(gesture)를 해석한다.
스타일러스(204)는 그 성능을 개선시키기 위해 버튼들 또는 다른 특징들을 구비할 수 있다. 일례로, 스타일러스(204)는 "연필(pencil)" 또는 "펜"으로 구현될 수 있고, 한쪽 끝은 기록 부분을 구성하고 다른 끝은 "지우개" 부분을 구성하여 디스플레이 상을 움직일 때, 디스플레이 상에서 지워져야하는 전자 잉크 부분들을 표시하도록 한다. 마우스, 트랙볼, 키보드 등과 같은 입력 디바이스들의 다른 부분들이 또한 사용될 수 있다. 부가적으로, 사용자 자신의 손가락이 접촉식 또는 근접식(proximity-sensitive) 디스플레이 상에 디스플레이된 이미지의 부분들을 선택하거나 표시하는데 사용될 수 있다. 결과적으로, 본 명세서에 사용된 용어 "사용자 입력 디바이스"는 넓은 정의를 갖는 것으로 의도되며, 잘 알려진 입력 디바이스들의 다양한 변형까지 포함한다.
다양한 예들에서, 시스템은 응용 프로그램이 잉크를 캡쳐하고, 조작하고, 저장하는데 사용할 수 있는 잉크 플랫폼(ink platform)을 한 세트의 COM(컴포넌트 오브젝트 모델) 서비스로서 제공한다. 잉크 플랫폼은 또한 확장성 마크업 언어(XML)와 같은 언어를 포함하는 마크업 언어를 포함할 수 있다. 또한, 시스템은 DCOM을 또다른 구현으로서 사용할 수 있다. 또한, 마이크로소프트 코포레이션(Microsoft Corporation)으로부터의 Win32 프로그래밍 모델 및 Net 프로그래밍 모델을 포함하는 구현들이 사용될 수 있다. 이러한 플랫폼들은 상업적으로 이용가능하며 본 기술분야에 공지되어 있다.
완벽한 성능의 펜입력식 컴퓨팅 시스템들 또는 "태블릿 PC들"(예를 들어, 컨버터블 랩탑 또는 "슬레이트(slate)" 타입 태블릿 PC)의 사용에 부가하여, 본 발명의 실시예들은 핸드-헬드 또는 팜-탑(palm-top) 컴퓨팅 시스템들; PDA(Personal Digital Assistant); 포켓 퍼스널 컴퓨터; 모바일 및 셀룰러 전화, 무선호출기(pager) 및 다른 통신 디바이스; 시계; 가전제품; 모니터 또는 다른 디스플레이 디바이스를 포함하는 임의의 다른 디바이스들 또는 시스템들 및/또는 프린트되거나 그래픽적인 정보를 사용자들에게 제시하거나 및/또는 전자 펜 또는 스타일러스를 사용한 입력을 허용하거나 또는 또다른 디바이스에 의해 수집된 전자 잉크를 처리할 수 있는 디지타이저(예를 들어, 태블릿 PC에 의해 콜렉팅된 전자 잉크를 처리할 수 있는 종래의 데스크탑 컴퓨터)와 같은 펜입력식 컴퓨팅 시스템들의 다른 타입들 및/또는 전자 잉크로서 데이터를 수용하고 및/또는 전자 펜 또는 스타일러스 입력을 수용하는 다른 디바이스들에 사용될 수 있다.
본 발명은 이제 본 발명의 각종 실시예들 및 본 발명을 설명을 돕기 위한 정보를 도시하는 남아있는 도면들에 관련하여 기재될 것이다. 상세한 설명에 포함된 특정 도면들 및 정보들이 본 발명을 제한하는 것으로 추론되어서는 안된다.
<공간적 문서 보기 추상화>
상술한 바와 같이, 본 발명의 일부 실시예들은 일반적으로 전자 문서들 내의 전자 잉크를 사용하여 보다 풍부하고 보다 다기능의 주석들을 제공하기 위한 시스템 및 방법에 관한 것이다. 다음은 본 발명의 각종 실시예들 및 예들을 보다 상세하게 기재한다.
A. 본 발명의 포괄적 개요
도 3은 본 발명의 적어도 일부 예시들에 따른 시스템 및 방법의 동작을 개괄적으로 도시한다. 구체적으로, 도 3에 도시된 바와 같이, 사용자는 몇 가지 방법에 의해, 예컨대 전자 잉크를 전자 문서(300)에 추가하는 것에 의해 전자 문서(300)(도 3의 문서 "A")와 상호작용할 수 있다. 도시된 예시에서, 전자 문서(300)는 전자 또는 타이프라이팅된 텍스트(302)(도시된 예시에서, "Sample Text") 및 잉크 그림(304)(도시된 예시에서, 집)을 포함한다. 물론, 전자 문서(300)는, 본 발명으로부터 벗어나지 않는 범위 내에서, 전자 텍스트, 전자 잉크(그림 또는 텍스트), 이미지, 그래프, 테이블, 차트, 기타 그래픽 또는 전자 정보 및/또는 이들의 조합과 같은 임의의 데이터 또는 정보를 포함할 수 있다. 이러한 예시의 목적으로, 원래의 전자 문서(300)(본 출원에서 "기초 문서" 또는 "기초 부분"이라고도 함)는 전자 타이프라이팅된 텍스트(302) 및 전자 잉크 그림(304)을 포함한다. 사용자가 이 예시에서 문서 A(300)를 리뷰할 때, 사용자는 문서(300) 내에 전자 잉크 주석을 포함시킬 것을 결정한다. 구체적으로, 도시된 예에서, 주석은 전자 텍스트(302)의 일부분(308)을 둘러싸는 써클(306)을 포함한다.
이 예시에서, 사용자가 주석을 입력한 후, 응용 프로그램은 파서(310)를 호출하여 새롭게 입력된 전자 잉크 데이터의 파싱을 요청할 것이다 (상술한 바와 같이, "파싱"은, 예를 들어, 전자 잉크를 여러 가지 잉크 타입(예컨대, 그림, 텍스트, 플로우차트, 음악 등)으로 분류하는 것, (예를 들어, 잉크 스트록들 간의 공간 및 위치적 관계들을 확인하고 이들을 적절한 그룹으로 그룹화하는) 잉크 레이아웃 분석 및 기타 분석 처리들을 포함할 수 있다). 구체적으로, 응용 프로그램은 (이 예시에서는, 주석(306)을 나타내는) 입력된 전자 잉크 데이터를 미분류 잉크 데이터로서 파서(310)로 보낼 것이다. 이는 도 3에서 입력 화살표(312)에 의해 도시되어 있다.
선택적으로, 응용 프로그램은 바탕 전자 문서(300)와 관련된 일부 또는 모든 데이터를 파서(310)로 동시 또는 거의 동시에 보낼 수 있다. 이러한 데이터는 예를 들어, 전자 텍스트(302), 그림(304) 등의 위치와 같은, 문서(300) 내의 정보의 공간적 레이아웃에 관한 데이터를 포함할 수 있다. 부가적으로, 응용 프로그램은 문서 내의 데이터의 계층적 구조를 나타내는 데이터를 보낼 수 있으며, 이는 이하에 보다 상세하게 설명한다. 다른 대안으로서, 또한 이하에서 보다 상세하게 설명하는 바와 같이, 파서(310)는, 새로운, 미분류된 잉크와 연관된 공간적 영역에서의 전자 문서(300)에 관한 정보와 같은, 전자 문서(300)에 관한 임의의 데이터(이 예시에서는, 공간적으로 주석(306) 가까이에 위치한 타이프라이팅된 텍스트 및 정보를 나타내는 데이터)를 요청하는 응용 프로그램으로 콜백(call back)할 수 있다. 파서(310)에 입력된 이러한 데이터는 도 3에 입력 화살표(314)로 도시된다. 물론, 미분류된 잉크 및 미리 분석된 데이터 양자는 모두, 본 발명으로부터 벗어나지 않는 범위 내에서, 동시에 파서로 보내질 수 있거나, 및/또는 그 파서에 사용가능하게 될 수 있다.
파서(310)는 입력된 전자 문서 데이터(314) 및 입력된 미분류 잉크 데이터(312)를 취하고, 그 정보를 사용하여 새로운 전자 잉크 데이터를 잉크 타입으로 분류한다. 잉크는 본 발명으로부터 벗어나지 않는 범위 내에서 다양한 잉크 타입들로 분류될 수 있으며, 가능한 잉크 타입들에 대한 여러 예시들이 이하에 보다 상세하게 설명된다. 본 예시에서는, 본 발명의 본 예시에 따른 파서(310)가, 바탕 문서(300)에 포함된 입력 잉크(306) 및 정보(302)에 기초하여, 주석으로서, 또는 보다 구체적으로는 특정 타이프라이팅된 텍스트를 포함하는 콘테이너 주석(예컨대, 써클)에 대응하는 잉크 그림으로서 입력 잉크(306)를 결정하고 분류할 수 있다. 물론, 하이라이트 표시 주석, "포인트 투(point to)" 주석, "포인트 프롬(point from)" 주석, (예를 들어, "포인트 투" 또는 "포인트 프롬" 하지 않는) 고정(anchor) 주석, 수평 스팬(horizontal span), 수직 스팬(vertical span) 등과 같은 다양한 타입의 주석이 또한 가능하며, 여러 예시들이 이하에 보다 상세하게 설명될 것이다.
일단 파싱되면, 주석(306)과 연관된 데이터는 전자 문서(300)와 연관된 "문서 트리" 계층적 데이터 구조(또는 임의의 다른 적절한 또는 원하는 데이터 구조)로 통합될 수 있으며, 데이터 구조(또는 응용 프로그램에 의해 유지되는 기존의 데이터 구조를 변경하기 위한 명령들)는, 도 3에 화살표(316)로 표시된 바와 같이 응용 프로그램으로 다시 보내질 수 있다. 원하는 경우에는, 본 발명으로부터 벗어나지 않는 범위 내에서, 다른 데이터가 또한 파서(310)로부터 응용 프로그램으로 리턴될 수 있다. 예를 들어, 도 3에 도시된 바와 같이, 포함된 파서(310)의 동작이 하나 이상의 인식기 모듈, 컴포넌트 및/또는 프로그램에서 호출된다면, (핸드라이팅 인식기 또는 다른 인식기와 같은) 인식 분석 처리의 결과와 연관된 데이터가 응용 프로그램으로 리턴될 수 있다.
도 4는 본 발명의 일부 예시에서 사용된 여러 특징의 구현(400)에 대한 예시를 도시한다. 도시된 바와 같이, (도 3에서 문서 A와 같은) 전자 문서가 데이터 구조 또는 문서 모델(402)로서 응용 프로그램(400a)에 의해 생성, 저장 및/또는 유지된다. 이러한 데이터 구조(402)는, 본 발명으로부터 벗어나지 않는 범위 내에서, 계층적 데이터 구조 또는 임의의 다른 적절하거나 희망하는 데이터 구조가 될 수 있다. 응용 프로그램(400a)은 미러(mirror) 카피, 선택적 카피, 또는 데이터 구조(402)에 관한 기타 관련 정보를 포함하는 "분석 콘텍스트(Analysis Context)" 오브젝트(404)를 포함한다(예를 들어, 분석 콘텍스트 오브젝트(404)는 "번역" 레이어일 수 있으며, "번역" 레이어에서는 분석 콘텍스트 구조(404)에 대한 쿼리들이 원시 문서 모드 구조(native document mode structure)의 쿼리들로 번역되며 - 이러한 방식으로, 본 발명의 실시예들에 따른 파싱 기술은 여러 가지 서로 다른 원시 응용 프로그램들에서 사용될 수 있도록 번역될 수 있다). 본 예시인 구현(400)의 운영 체제 측 또는 "플랫폼"(400b)은, 응용 프로그램(400a)에 의해 호출되는 "잉크 분석기" 메소드(406)를 포함한다. 응용 프로그램(400a)은 잉크 분석기 메소드(406)를 호출하여, 이 레퍼런스를 분석 콘텍스트 오브젝트(404)에 전달한다. 잉크 분석기 메소드(406)는 (역시 본 예시에서 플랫폼(400b)의 일부인) 파서(408)를 호출할 것이며, 파서는 앞서 개괄적으로 설명된 바와 같이 입력 데이터의 레이아웃을 분류하고 분석한다. 본 발명에 따른 예시적인 구현의 동작은, 이하의 <잉크의 분석> 섹션에서 보다 상세하게 설명한다. 일단 파서(408)가 분석 및 처리를 완료하면, 플랫폼(400b)은, 도 4에 화살표(410)로 포괄적으로 도시된 바와 같이, 문서 모델(402) 및/또는 분석 콘텍스트 오브젝트(404)가 파서 처리 및 결과들에 기초하여 데이터 구조를 리빌드(rebuild)할 수 있도록, 응용 프로그램(400a)으로 데이터를 다시 리턴할 수 있다.
도 5는, 본 발명의 적어도 일부의 예시들에서의 전자 문서 데이터를, 예를 들어 "분석 콘텍스트" 오브젝트(404)의 일부로서, 문서 모델(402)로서, 또는 파서(408)에 의해 생성되거나 및/또는 출력된 데이터 구조로서 저장하기 위해 사용될 수 있는 데이터 구조의 일례를 개괄적으로 도시한다. 구체적으로, 도 5에는 예시적인 전자 문서(500)가 도시된다. 데이터 구조가 분석 콘텍스트 오브젝트(502)로서 저장되거나 파싱의 대상이 되는 경우, 데이터 구조는 서로 다른 그룹(grouping) 또는 "노드들"로 분류 또는 배열되는 다양한 문서 엘리먼트를 포함할 수 있다. 예를 들어, 도 5에 도시된 바와 같이, 전자 문서(500)는 세 개의 전자 텍스트 단락(504, 506, 508); 하나의 전자 잉크 그림(510); 및 하나의 전자 잉크 주석(512)을 포함한다. 전자 문서(500)에 대한 예시적인 분석 콘텍스트 데이터 구조(502)가 도 5에서 최상위-레벨 엘리먼트들의 리스트로서 도시된다. 구체적으로, 노드 엘리먼트(504(a))는 전자 문서(500) 내의 단락(504)에 대응하고, 노드 엘리먼트(506(a))는 전자 문서(500) 내의 단락(506)에 대응하고, 노드 엘리먼트(508(a))는 전자 문서(500) 내의 단락(508)에 대응하고, 노드 엘리먼트(510(a))는 전자 문서(500) 내의 단락(510)에 대응하고, 노드 엘리먼트(512(a))는 전자 문서(500) 내의 단락(512)에 대응한다. 이하에서 보다 상세히 설명되는 바와 같이, 추가 노드들이 도 5에 도시된 최상위 레벨 노드들(504(a), 506(a), 508(a), 510(a), 512(a))에 대한 부모 노드(parent node) 및/또는 자식 노드(child node)로서 데이터 구조에 (예를 들어, 계층적 배열로) 저장될 수 있다.
B. 콘텍스트 노드 및 계층적 데이터 구조
도 6a 내지 6i는, 본 발명의 일부 예시들에 따르는, 분석 콘텍스트 오브젝트와 같은 전자 문서 데이터의 빌드(building), 분석 및 파싱에 사용될 수 있는 데이터 구조들 및 콘텍스트 노드들의 다양한 예시들을 도시한다. 도 6a는 미분류 전자 잉크 데이터(예를 들어, 사용자에 의해 새롭게 입력된 잉크로서, 이전에 파싱의 대상이 되지 않았던 잉크)를 저장하기 위해 사용될 수 있는 예시적인 데이터 구조(600)를 도시한다. 이러한 예시적인 데이터 구조(600)는 (예를 들어, 응용 프로그램에서의 전자 문서 전체에 대응하거나, 문서의 특정 페이지에 대응하거나, 또는 응용 프로그램에 의해 사용되는 그룹과 같은 임의의 적절한 또는 원하는 그룹의 데이터에 대응할 수 있는) 루트 노드(root node)(602)를 포함한다. 루트 노드(602)에는, 페이지 넘버, 이전의 페이지와 다음 페이지에 대한 포인터, 여백의 위치 또는 크기 등과 같은 임의의 적절하거나 희망하는 데이터가 포함될 수 있다. 각 루트 노드(602)는 임의의 수의 미분류 잉크 노드들(604)을 자식 노드들로서 포함할 수 있고, 각 미분류 잉크 노드(604)는 또한 임의의 수의 개별 스트록 노드들(606)을 더 포함할 수 있다 (계층 구조에서 마지막 노드(본 예시에서, 스트록 노드(606))는 또한 본 명세서에서 "리프 노드(leaf node)"로도 지칭될 수 있다). (여러 도면에서 문자 "n"은 0을 포함한 임의의 수를 나타낸다.) 데이터 구조(600)의 여러 노드는, 노드에 대응하는 희망하거나 적절한 임의의 데이터를 포함할 수 있다. 예를 들어, 스트록 노드(606)는 데이터를 포함할 수 있으며, 이 데이터는 전자 잉크 스트록을 식별하는 기타 데이터 또는 디지타이저 포인트; 스트록 위치 또는 방향(orientation) 데이터; 스트록 컬러 데이터; 스트록 압력 데이터; 스트록 입력 타이밍 데이터; 스트록 ID 데이터; 및/또는 전자 잉크를 수신할 수 있는 시스템 및 방법에서 스트록 정보를 저장하는데 사용되는 임의의 기타 종래의 또는 유용한 데이터를 나타낼 수 있다. 마찬가지로, 미분류 잉크 노드(들)(604)는, 잉크 또는 노드와 연관된 임의의 희망하거나 적절한 데이터(예를 들어, 노드 내에 포함된 모든 스트록의 바운딩 박스(bounding box) 크기; 바운딩 박스 위치; 입력 타이밍 정보; (예를 들어, 최소 볼록 집합(convex hull) 정보와 같은) 잉크에 대한 기하학(geometric) 정보; 및/또는 노드에 포함된 미분류 잉크 스트록들에 관한 임의의 종래 또는 유용한 기타 데이터를 나타내는 데이터)를 포함할 수 있다. 대안으로, 필요에 따라, 스트록 데이터는 일반적으로 문서 트리의 개별 노드로서 저장되기보다는, 또 다른 노드(예를 들어, 단어 노드, 테이블 노드 등)의 속성으로서 저장될 수 있다.
일단 미분류 잉크가 분류기, 레이아웃 분석기, 인식기 및/또는 또다른 파싱 시스템으로 보내지면, 잉크의 적어도 일부분은 서로 연관되거나 및/또는 다양한 서로 다른 타입들로 분류될 수 있으며, 잉크와 연관된 데이터 구조는 그것이 분류된 여러 타입 및 연관 조합(associations)에 대응되도록 변화될 수 있다. 도 6b는 잉크 텍스트로 분류된 전자 잉크에 대한 예시적인 데이터 구조(610)를 도시한다. 본 기술분야에서의 알려지고 사용된 종래의 파서들을 포함하는 파싱 기술을 이용하면, 입력 전자 잉크 스트록(예를 들어, 펜-다운 이벤트(pen-down event)와 시간적으로 후속하는 펜-업 이벤트(pen-up event) 사이에. 또는 몇가지 다른 방식으로 수집된 전자 잉크 데이터)은 계층적 방식으로 파싱되고 저장될 수 있으며, 관련된 개별 잉크 스트록들은 함께 분류되어 잉크 단어들로 저장될 수 있으며, 선형으로 배치된 잉크 단어들은 함께 분류되어 잉크 라인들으로서 저장될 수 있으며, 관련된 잉크 라인들은 함께 분류되어 잉크 단락들로서 저장될 수 있으며, 관련된 단락들은 전자 문서들로서(예를 들어, 개별 페이지 부분들로, 전체 문서로서, 또는 임의의 적절한 루트 그룹으로) 저장될 수 있다. 도 6b에 도시된 바와 같이, 이러한 방식으로 파싱되고 저장된 전자 잉크 데이터에 대응하는 예시적인 계층적 데이터 구조(610)는 루트 노드(612)를 포함할 수 있으며, 루트 노드(612)는 전체 전자 문서, 페이지, 또는 응용 프로그램에 의해 사용되는 바와 같이 또 다른 그룹에 대응할 수 있다. 각 루트 노드(612)는 전자 잉크 스트록들의 유사한 그룹들 또는 단락들에 대응하는 임의의 수의 노드들(614)을 포함할 수 있다. 단락 노드들(614)은 임의의 수의 개별 라인 노드들(616)을 포함할 수 있고, 개별 라인 노드들(616)은 임의의 수의 개별 잉크 단어 노드들(618)을 포함할 수 있으며, 개별 잉크 단어 노드들(618)은 또한 입력 전자 잉크 데이터의 개별 스트록들에 대응하는 임의의 수의 개별 스트록 노드들(620)을 포함할 수 있다. 선택적으로, 상술한 바와 같이, 스트록 데이터는 필요에 따라, 연관된 단어 노드의 "속성"으로서 저장될 수 있다. 여러 노드들(612, 614, 616, 618, 620)은, 공간적 방향 또는 포지셔닝(positioning) 데이터와 같은 노드 내에 포함된 다양한 개별 스트록들 또는 스트록들의 집합에 관한 임의의 적절한 데이터 및/또는 상술한 바와 같은 기타 데이터를 저장할 수 있다.
본 발명으로부터 벗어나지 않는 범위 내에서, 입력 전자 잉크 스트록들에 대응하는 다른 데이터 타입들 및 데이터 구조 배치들도 가능하다. 예를 들어, 분류, 레이아웃 분석, 또는 인식기 기술은 입력 전자 잉크가 잉크 그림을 형성함을 판단할 수 있다. 도 3은 몇몇 개별 잉크 스트록들을 포함하는 예의 잉크 그림(304)을 도시한다. 도 6c 및 도 6d는 잉크 그림들에 관련하는 것으로 결정된 전자 잉크 데이터를 그룹화하고 저장하는데 사용될 수 있는 예시적인 계층적 데이터 구조들을 도시한다. 도 6c에 도시된 바와 같이, 데이터 구조(630)는 (상술한 바와 같이, 전체 전자 문서, 전자 페이지, 또는 몇가지 기타 데이터 그룹에 대응할 수 있는) 루트 노드(632)를 포함한다. 각 루트 노드(632)는 (예를 들어, 각 개별 그림이 예를 들어, 그림 폭, 그림 높이, 그림 위치, 바운딩 박스 크기 등에 관한 데이터를 저장하는 개별 노드를 갖도록) 임의의 수의 개별 잉크 그림 노드들(636)을 포함할 수 있으며, 각 잉크 그림 노드(636)는 (그 그림을 구성하는 개별 잉크 스트록들에 대응하는) 임의의 수의 개별 잉크 스트록 노드들(638)을 포함할 수 있다. 선택적으로, 잉크 스트록 데이터는 대응하는 잉크 그림 노드(또는 다른 노드)의 "속성"으로 저장될 수 있다.
도 6d는 하나 이상의 잉크 그림들을 포함하는 전자 문서들에 대한 대체가능한 데이터 구조(630a)를 도시한다. 본 예시에서, 전자 문서 또는 페이지 또는 다른 데이터 그룹(루트 노드 632a로 표시됨)은 도 6c에 관련하여 기재된 계층적 방식으로 함께 연관되고 저장되는 데이터를 갖는 전자 잉크 그림들의 하나 이상의 그룹(노드 634a로 표시됨)을 포함할 수 있다 (예를 들어, 전체 전자 문서(루트 노드 632a로 표시됨)는 몇몇 개별 페이지들(각각이 그룹 노드 634a로 표시됨)을 포함할 수 있고, 각 개별 페이지는 하나 이상의 개별 잉크 그림(각각이 잉크 그림 노드 636a로 표시됨)을 가질 수 있고, 각 개별 잉크 그림은 하나 이상의 개별 잉크 스트록(각각이 스트록 노드 638a로 표시되거나 잉크 그림 노드의 속성에 표시됨)을 포함할 수 있다). 그룹들 및 잉크 그림들은 모두 동일한 루트 노드 또는 임의의 그룹 노드의 자식들(children)이 될 수 있음을 이해해야 한다. 또한, 필요에 따라, 하나의 그룹 노드가 추가의 그룹 노드를 포함할 수도 있다. 물론, 본 발명에서 벗어나지 않는 범위 내에서, 전자 잉크 그림들을 저장하기 위한 또 다른 적절한 데이터 구조들이 사용될 수 있다.
그러나, 계층적 데이터 구조들은 입력 전자 잉크 데이터와 함께 사용하는 것으로 제한되는 것은 아니다. (예를 들어, 키보드로부터의) 입력 타이프라이팅된 텍스트는 또한 여러가지 그룹들로 연관되어 계층적 데이터 구조로 저장될 수 있다. 도 6e는 그러한 데이터 구조(640)의 일례를 도시한다. 이러한 데이터 구조(640)는 (예를 들어, 상술한 루트 노드들과 같은) 루트 노드(642)를 포함할 수 있다. 각 루트 노드(642)는 (텍스트의 단락들에 대응하는) 임의의 수의 텍스트 단락 노드들(644)을 포함할 수 있고, 각 단락 노드(644)는 임의의 수의 텍스트 라인 노드들(646)(또는 대안으로 텍스트 문장 노드들)을 포함할 수 있으며, 각 라인 노드(646)는 임의의 수의 개별 텍스트 단어 노드들(648)을 더 포함할 수 있다. 필요에 따라, 텍스트 단어들은 또한 본 발명으로부터 벗어나지 않는 범위 내에서 개별 텍스트 문자 노드들로 더 쪼개질 수 있으며, 개별 문자 특징 노드(예컨대, 각 문자의 기준선, 가는선, 어센더(ascender) 및 디센더(descender) 특징들에 관한 문자 특징 노드)로 더 쪼개질 수 있다. 여러가지 노드들은, 단락, 라인 또는 단어 공간적 위치, 콘텐트, 크기 등과 같은 텍스트에 관한 적절한 데이터, 페이지 마진; 마진 크기 또는 위치; 페이지 수 등에 관한 임의의 적절한 데이터를 저장할 수 있다.
도 6a 내지 도 6e에 관련하여 상술한 여러가지 데이터 구조들은 전자 잉크 데이터만을 배타적으로 포함하거나 전자 타이프라이팅된 텍스트 데이터만을 배타적으로 포함하는 데이터 구조들을 도시한다. 파싱 기술은 본 발명으로부터 벗어나지 않는 범위 내에서, 이러한 단일의 데이터 구조 내의 서로 다른 데이터 타입들을 분석하고, 결합하고, 연관시키고, 그룹화하는데 사용될 수 있다. 도 6f에 도시된 예시적인 데이터 구조에서는, 전자 문서 또는 그 일부분(루트 노드(652)로 표시됨)이 하나 이상의 개별 단락(단락 노드(654)로 표시됨) 및 하나 이상의 개별 라인(라인 노드(656)로 표시됨)을 포함한다. 타이프라이팅된 텍스트(텍스트 단어 노드(658)로 표시됨) 및 전자 잉크 텍스트(잉크 단어 노드(660) 및 잉크 스트록 노드(662)로 표시됨) 양자가 모두 라인에 포함되는 것은 가능하다. 각 개별 단락, 라인 및 단어 노드(타이프라이팅된 텍스트 및 잉크 단어들 양자 모두)는 단락, 라인 및 단어의 콘텐트에 따라 적절한 독립 데이터를 포함할 것이다. 부가적으로 또는 대안으로, 개별 단어들은 본 발명으로부터 벗어나지 않는 잉크 문자들 및 타이프라이팅된 문자들 둘 모두를 더 포함할 수 있다.
다른 전자 데이터는 또한 본 발명에서 벗어나지 않지 않는 범위 내에서 (계층적 데이터 구조를 포함하는) 전자 문서의 데이터 구조에 포함될 수 있다. 예를 들어, 도 6g의 데이터 구조(664)에 도시된 바와 같이, (디지털 포토, 그래픽 정보 등과 같은) 이미지 데이터가 전자 문서에 대한 데이터 구조에 포함될 수 있다. 본 예시에 도시된 바와 같이, 데이터 구조(664)는 전자 문서 또는 그 일부분(루트 노드(666)로 표시됨)을 포함하고, 전자 문서 또는 그 일부분(루트 노드(666)로 표시됨)은 하나 이상의 데이터의 개별 그룹들(그룹 노드(668)로 표시됨)을 포함한다. 본 예시에서 각 데이터 그룹은 도 6e 및 도 6f에 관련하여 앞서 개괄적으로 설명한 바와 같이, 타이프라이팅된 텍스트(단락 노드(672), 라인 노드(674) 및 텍스트 단어 노드(676)로 표시됨)뿐만 아니라 전자 이미지(이미지 노드(670)로 표시됨)를 포함할 수 있다. 물론, 도 6g에 도시된 것과 같은 데이터 구조는 또한 (예를 들어, 도 6a 내지 도 6d에 도시된 데이터 구조와 같은) 전자 잉크 데이터 또는 본 발명에서 벗어나지 않는 범위 내에서 기타 희망하는 데이터 타입을 포함할 수 있다. 도 6h는 본 발명의 적어도 일부 예시들에 따라 사용될 수 있는 또 다른 잠재적 데이터 구조(680)의 일례를 도시한다. 더욱 구체적으로, 도 6h의 데이터 구조(680)는 하나 이상의 리스트(리스트 노드(684)로 표시됨)를 포함하는 전자 문서 또는 그 일부분(루트 노드(682)로 표시됨)에 대응한다. 전자 문서 내의 리스트는 임의의 수의 개별 리스트 항목들(리스트 항목 노드(686)로 표시됨)을 포함할 수 있으며, 각 리스트 항목은 매우 다양한 서로 다른 타입의 전자 정보를 포함할 수 있다. 예를 들어, 일부 리스트 항목들은 리스트 불릿(list bullet)을 선택적으로 포함할 수 있으며, 리스트 블릿은 타이프라이팅된 불릿 또는 전자 잉크 불릿으로 구성될 수 있다(하나 이상의 대응 잉크 스트록(690)을 포함하는 잉크 불릿 노드(688)는 도 6h의 예시에서 도시된다). 또한, 각 리스트 항목은 선택적으로 하나 이상의 전자 잉크 단락(노드 체인(692)로 표시됨), 하나 이상의 잉크 그림(노드 체인(694)으로 표시됨), 및/또는 하나 이상의 타이프라이팅된 단락(노드 체인(696)으로 표시됨)을 포함할 수 있다. 부가적으로(또는 대체 가능하게), 각 리스트 항목은 선택적으로 하나 이상의 이미지들(이미지 노드(698)로 표시됨) 및/또는 도 6d 및 도 6g와 관련하여 상술한 그룹들과 같은 하나 이상의 데이터 그룹(그룹 노드 체인(700)으로 표시됨)을 포함할 수 있다. 다양한 노드들 및/또는 노드 체인들(692, 694, 696, 698, 700)은 일반적으로 이러한 데이터 구조들의 서브세트 및/또는 그룹들뿐만 아니라 도 6a 내지 도 6g에 도시된 예시적인 데이터 구조들에 대응할 수 있으므로, 더 이상의 설명은 생략한다. 필요에 따라, 적어도 일부 예시에서는, 개별 리스트 항목 노드(686) 자체가 또한 도 6h에 도시된 것과 같은 데이터 구조를 갖는 리스트를 포함할 수 있다.
도 6i는 본 발명의 적어도 일부 예시에서 사용될 수 있는 또 다른 예시적인 데이터 구조(710)를 도시한다. 이러한 예시적인 데이터 구조(710)는, 테이블로서 분석되어 함께 연관되고 그룹화되어 저장된 전자 데이터에 대응한다. 이 도시된 예시에서, 각 전자 문서 또는 그 일부분(루트 노드(712)로 표시됨)은 하나 이상의 테이블(테이블 노드(714)로 표시됨)을 포함할 수 있다. 본 예시에서, 테이블은 하나 이상의 정보 행(row)(행 노드(716)로 표시됨)로 구성될 수 있고, 모든 행은 하나 이상의 개별 셀(셀 노드(718)로 표시됨)로 구성될 수 있다. 개별 셀은 예를 들어, 상술한 여러 가지 서로 다른 데이터 구조들 중 임의의 구조를 포함하는 하나 이상의 데이터 구조를 포함할 수 있다. 도시된 예에서, 개별 테이블 셀은 임의의 수의 이미지들(이미지 노드(720)로 표시됨), 임의의 수의 타이프라이팅된 텍스트 단락들(노드 체인(722)으로 표시됨), 임의의 수의 그룹들(노드 체인(724)으로 표시됨), 임의의 수의 추가 테이블들(노드 체인(728)으로 표시됨) 및 임의의 수의 리스트들(노드 체인(730)으로 표시됨)을 잠재적으로 포함할 수 있는 것으로 도시된다. 물론, 본 발명으로부터 벗어나지 않는 범위 내에서, 상술한 여러 가지 특정 데이터 구조들 및/또는 예를 들어, 상술한 데이터 구조들의 조합들 및 서브세트들을 포함하여 임의의 기타 적절한 또는 원하는 데이터 구조들이 테이블에 포함될 수 있다.
임의의 적절한 또는 원하는 데이터가 앞서 기재된 여러가지 데이터의 타입들을 포함하는 여러가지 다른 노드들에 저장될 수 있다. 주석들에 관한 데이터를 처 리하는 사용을 위해, 그 전자 문서 내의 노드의 공간적 위치, 방향 또는 위치에 관한 데이터를 저장하기 위해 여러가지 노드들에 대한 본 발명의 적어도 몇가지 예들에 유용할 수 있으며, 선택적으로 이러한 공간적 정보는 전자 문서 데이터 구조 내의 다른 노드들에 관련하거나 또는 그와 링크한다.
또한, 본 발명으로부터 벗어나지 않는 범위 내에서, 다른 타입들의 파서들, 분류기들 및/또는 인식기 및 데이터 타입들이 사용될 수 있다. 예를 들어, 인식기들은, 본 발명으로부터 벗어나지 않는 범위 내에서, 전기 또는 전자 심볼들(예를 들어, 저항기, 전압원, 캐패시터 등); 음악 심볼들; 수학적 심볼들; 플로우차트 엘리먼트들; 파이 차트 엘리먼트들(pie chart elements) 등을 분석하고, 인식하고, 그룹화하고, 및/또는 연관시키기 위해 사용될 수 있다.
도 6a 내지 도 6i에 도시된 데이터 구조들은 본 발명의 실시예들에 따라 사용될 수 있는 여러 가지 데이터 구조들의 예시들일 뿐이다. 본 기술분야의 통상의 지식을 가진 자들은 사용된 특정 데이터 구조들이 본 발명으로부터 벗어나지 않는 범이 내에서 다양하게 변형될 수 있음을 인식할 것이다. 예를 들어, 서로 다른 레이아웃 그룹들을 나타내는 서로 다른 노드들이 사용될 수 있거나, 부가적인 노드 타입들이 추가될 수 있거나, 본 발명으로부터 벗어나지 않는 범위 내에서 기술된 노드 타입들 중 일부가 생략될 수 있다(예를 들어, 테이블 데이터 구조 내에서, 행 노드들 대신에 열 노드들이 사용될 수 있다). 부가적으로, 상술한 내용은, 페이지 상에서 문자들이 좌에서 우로, 그리고 위에서 아래로 판독되는 언어 및 텍스트 표현에 사용되도록 최적화되어 있다. 본 발명으로부터 벗어나지 않는 범위 내에서, 다른 언어 및 문자 배열에 대응하여 사용하도록 설계된 데이터 구조들, 예를 들어, 우에서 좌로, 상에서 하로, 하에서 상으로, 또는 그 조합들로 판독 및/또는 기록된 언어들을 수용하기 위한 데이터 구조들이 사용될 수 있다. 부가적으로, 필요할 경우 (특히 아시아 언어들과 같은 몇 가지 언어들에 대해), 스트록들을 문자들로 적절하게 그룹화할 수 있으며, 이들을 다시 라인들로 그룹화하여, 상술한 바와 같이, "단어" 노드를 중간에 사용하지 않을 수 있다. 또 다른 대안으로, 라인 노드들의 사용은 생략될 수 있고, 단어 노드들이 단락들 및/또는 다른 원하는 그룹들으로 함께 그룹화될 수 있다. 특정 언어의 문자들을 수용하기 위한 데이터 구조의 이러한 변형들 및 기타 변경들이 본 발명으로부터 벗어나지 않는 범위 내에서 사용될 수 있다.
C. 주석들에 대한 본 발명의 실시예들의 응용
상술한 바와 같이, 콘텍스트 노드들 및 계층적 데이터 구조들의 사용을 포함하는 본 발명의 실시예들은 전자 문서들에 "스마트한(smart)" 전자 잉크 주석들을 제공하기 위해 사용될 수 있다. 상술한 바와 같이, 전자 문서에 주석을 다는 것은, 펜입력식 컴퓨팅 시스템들을 바람직하고 유리하게 사용하는 방법 중 하나이다. 그러나, 특히 유용하고 효과적이기 위해서는, 펜입력식 컴퓨팅 시스템 상에서 문서들에 전자 잉크로 만들어진 주석들이, 바탕 문서 내의 여러 가지 엘리먼트들과 연관된 문자들이 어떤 이유(예를 들어, 여백 변화, 디스플레이 크기 변화, 폰트 변화, 정보의 추가, 정보의 삭제 등)로 변화하는 경우, 바탕 문서에서 주석을 단 엘리먼트들에 대한 변경에 기초하여 주석의 위치 및/또는 다른 특징들이 정확하게 변경될 수 있도록 주석은 충분히 유연해야 한다. 이는, 예를 들어 주석과 연관된 적어도 하나의 콘텍스트 노드를 바탕 문서와 연관된 하나 이상의 콘텍스트 노드에 링크함으로써 달성될 수 있다. 적어도 몇 가지 예들에서, 공간적 속성들, 위치(position), 및/또는 하나 이상의 문서 엘리먼트들의 위치(location)에 관한 데이터와 같은, 바탕 문서와 연관되고 바탕 문서와 관련하여 저장된 데이터 및/또는 특성들은 주석의 위치, 모양 및/또는 다른 특성들을 제어하는데 사용될 수 있다.
도 7a 및 도 7b는 전자 잉크를 통해 전자 문서에 적용될 수 있는 주석의 일례를 도시한다. 도 7a에 도시된 바와 같이, 전자 문서(750)는 문장 "Today the sky is green"을 포함한다. 펜입력식 컴퓨팅 시스템의 사용자가 단어 "green"에 밑주을 긋기 위해 전자 잉크를 사용하여 문서(750)에 주석을 달았다 (밑줄 주석은 참조 번호 "752"로 도시되었다). 도 7b는 이러한 복합 전자 문서(750)에 대응하는 예시적인 계층적 데이터 구조(760)를 도시한다(전체 전자 문서(750)는 데이터 구조 내에서 루트 노드(762)로 표현된다). 일단 완벽히 파싱되면, 데이터 구조(760)는 전반적인 문서 구조를 보여주는 콘텍스트 노드들을 포함할 것이다. 더욱 구체적으로, 전자 문서(750)가 하나의 단락(단락 노드(764))을 포함하고, 그 단락은 라인(라인 노드(766))을 포함하고, 그 라인은 다섯 개의 단어(단어들 "Today", "the", "sky", "is" 및 "green" 각각에 대한 텍스트 단어 노드(768a 내지 768e))를 포함함을 나타내기 위해서, 전자 문서(750) 내의 타이프라이팅된 텍스트에 관한 정보는 분석되고 함께 연관될 것이다. 부가적으로, 파서는, 전자 문서(750) 내에서 주석(752)에 관련된 데이터의 존재를 발견할 것이며, 이 데이터를 전자 잉크 그림(잉크 그림 노드(770))로 분류할 것이다. 부가적으로, 바탕 문서(750)에서 타이프라이팅된 텍스트에 대한 잉크 그림 스트록(들)의 위치 및 존재 지점에 기초하여, 파서는 그 주석을 "밑줄" 주석으로 인식하여 분류할 것이며, 밑줄 노드(772)를 생성할 것이다. 부가적으로, 파서는, 하나 이상의 스트록 리프 노드(774)에 밑줄 주석의 실제 잉크 스트록(들)에 대응하는 모든 스트록 데이터를 저장할 것이다 (선택적으로, 스트록 데이터는 또 다른 적절한 노드 또는 밑줄 노드(772)의 속성으로서 저장될 수 있다).
부가적으로, 개별 단어 "green"이 전자 문서(750)에 등장할 때마다 전자 잉크 밑줄 스트록(752)을 개별 단어 "green"과 함께 유지하기 위해서 (예를 들어, 그 단어가 어떤 이유로 이동하는 경우를 위해), 도 7b에 화살표(776)로 도시된 바와 같이, 밑줄 콘텍스트 노드(772)(예를 들어, 본 링크 예시에서, "소스" 콘텍스트 노드)가 단어 "green"에 대한 텍스트 단어 노드(768e)에 링크됨을 나타내도록 데이터가 본 예시의 데이터 구조(760)에 저장되며, 화살표(778)로 표시한 바와 같이 텍스트 단어 노드(768e)가 밑줄 노드(772)에 링크되었음을 나타내도록 데이터가 저장된다. 이러한 링크는 밑줄 노드(772)를 텍스트 단어 노드(768e)에 "고정(anchor)"시킨다(예를 들어, "코정" 타입 링크). 따라서, 어떤 이유로든, 텍스트 단어 콘텍스트 노드(768e)에 저장된 데이터가 전자 문서에서 단어 "green"의 위치가 변경되었음을 나타내는 경우, 링크들(776, 778)은, 가능하다면, 변경된 전자 문서상에서의 텍스트 단어 콘텍스트 노드(768e)의 공간적 위치 및/또는 존재 장소로 밑줄 주석의 렌더링을 이동시켜야 한다는 점을 응용 프로그램이 검지할 수 있도록 한다. 또 다른 예로서, 콘텍스트 노드(768e)에 저장된 "바운딩 박스" 데이터, 단어 폭 데이터, 또는 기타 데이터가, 어떤 이유로 인하여(예를 들어, 폰트 크기 변경, 문자들의 추가, 문자들의 삭제, 문자들의 변경 등에 기인하여) 단어의 크기 또는 위치가 변화되었음을 나타내는 경우, 응용 프로그램은, 가능하다면, (예컨대, 길이가 늘어났거나 줄어든) 렌더링된 밑줄의 크기를 수정하여 콘텍스트 노드(768e)로 표시된 텍스트 단어와 연관된 새로운 크기에 대응하도록 할 수 있다. 적용가능한 경우, 본 발명의 적어도 일부 예시들에 따른 시스템 및 방법은 주석의 스트록(들)을 쪼개서 하나 이상의 라인에 나타나도록 할 수 있으며, (예를 들어, 단어 추가, 하이픈 넣기(hyphenation) 등으로 인해) 바탕 문서가 변동되는 경우 주석을 단 문서 엘리먼트가 복수의 라인에 나타나도록 해야 한다. 또한, 본 발명으로부터 벗어나지 않는 범위 내에서, 노드들 간의 임의의 적절한 링크 배열 또는 링크를 나타내는 임의의 적절한 데이터가 사용될 수 있다.
도 8a 및 도 8b는 또 다른 예시적인 주석을 도시한다. 이 예시에서는, 도 8a에 도시된 바와 같이, 전자 문서(800)는 문장 "Today the sky is green"을 포함하고, 펜입력식 컴퓨팅 시스템의 사용자는 단어 "green"에 줄을 그어 삭제(스트라이크아웃 표시)하기 위해 전자 잉크를 사용하여 문서(800)에 주석을 달았다(스트라이크아웃(strike-out) 표시는 참조번호(802)로 도시됨). 도 8b는 완전히 파싱되어 복합 전자 문서(800)에 대응하는 예시적인 계층적 데이터 구조(810)를 도시한다 (도 8b의 많은 특정 콘텍스트 노드들이 도 7b에서의 콘텍스트 노드에 대응되므로, 도 8b에서는 도 7b에서와 동일한 참조 번호들이 사용되었으며, 중복되는 설명은 생략한다). 이 경우, 파서는 주석(802)과 관련된 전자 문서(800) 내의 데이터의 존재를 파악할 것이고, 이 데이터를 전자 잉크 그림(잉크 그림 노드(812))으로 분류할 것이다. 부가적으로, 문서(800)에서의 바탕 타이프라이팅된 텍스트의 콘텐트에 대한 잉크 그림 스트록(들)의 위치 및 존재 장소에 기초하여 (예를 들어, 스트라이크아웃 표시는 텍스트 단어를 수평으로 가로지른다), 파서는 주석을 "스트라이크아웃(strike-out)" 주석으로 인식하여 분류하고 스트라이크아웃 노드(814)를 생성할 것이다. 부가적으로, 파서는 스트라이크아웃 주석의 실제 잉크 스트록(들)에 대응하는 모든 스트록 데이터를 (또는 대안으로, 스트라이크아웃 노드(814) 또는 또다른 적절한 노드의 속성으로서) 하나 이상의 스트록 리프 노드들(816)에 저장할 것이다.
도 7a 및 도 7b과 관련하여 설명한 밑줄 주석의 경우와 마찬가지로, 개별 단어 "green"가 어떤 이유로 이동하는 경우, 스트라이크아웃 주석은 개별 단어 "green"과 함께 유지될 수 있다. 이는, 예를 들어, 도 8b에서 화살표(818)로 도시된 바와 같이, 스트라이크아웃 콘텍스트 노드(814)(본 예시에서 "소스" 콘텍스트 노드)가 단어 "green"에 대한 텍스트 단어 노드(768e)(본 예에서 "목적지" 콘텍스트 노드)에 링크됨을 나타내도록 데이터를 데이터 구조(810)에 저장함으로써, 또한 화살표(820)로 표시된 바와 같이 텍스트 단어 노드(768e)가 스트라이크아웃 노드(814)에 링크됨을 나타내도록 데이터를 데이터 구조에 저장함으로써 달성될 수 있다. 본 예시에서의 링크 타입은 스트라이크아웃 노드(814)를 텍스트 단어 노드(768e)에 고정하는 "수평으로 가로지르기(horizontally spanning)" 링크 타입이다. 따라서, 단어 "green"(또는 노드(768e)와 연관된 다른 단어(들))의 위치 및/또는 크기를 나타내는 텍스트 단어 콘텍스트 노드(768e)에 저장된 데이터가 어떤 이유로 문서(800)에서 변경되었다면, 링크들(818, 820)은, 가능하다면 스트라이크아웃의 렌더링을 조정하고 및/또는 (가능하다면) 변경된 전자 문서에서 콘텍스트 노드(768e)에 저장된 단어의 크기, 및/또는 공간적 위치, 존재 장소에 대한 크기를 조정해야함을 응용 프로그램이 검지할 수 있도록 할 것이다. 다시, 본 발명으로부터 벗어나지 않는 범위 내에서 노드들 간의 임의의 적절한 링크 배열 또는 링크를 나타내는 임의의 적절한 데이터가 사용될 수 있다.
도 9a 및 도 9b는 또 다른 예시적인 주석의 타입을 도시하며, 주석들이 하나 이상의 텍스트 단어와 연관 또는 링크되는 것을 더 도시한다. 도 9a 및 도 9b에 도시된 예시에서, 전자 문서(900)는 문장 "Today the sky is green"을 포함하지만, 이 경우에는, 펜입력식 컴퓨팅 시스템의 사용자가 단어들 "is green"에 써클을 표시하기 위해 전자 잉크를 사용하여 문서(900)에 주석을 표시했다(동그라미 또는 "콘테이너" 타입의 주석은 도 9a에서 참조번호 902로 도시된다). 도 9b는 완전히 파싱되어 복합 전자 문서(900)에 대응하는 예시적인 계층적 데이터 구조(910)를 도시한다(도 9b의 많은 특정 콘텍스트 노드들은 도 7b에서의 콘텍스트 노드들에 대응하므로, 도 9b에서는 7b에 존재하는 것들과 동일한 참조 번호들이 사용되었으며, 이에 대한 중복되는 설명은 생략한다). 이 경우, 파서는 주석(902)과 관련된 전자 문서(900) 내의 데이터의 존재를 파악할 것이고, 이 데이터를 전자 잉크 그림(잉크 그림 노드(912))으로 분류할 것이다. 부가적으로, 문서(900) 내의 바탕 타이프라이팅된 텍스트의 콘텐트에 대한 잉크 그림 스트록(들)의 존재 장소 및 위치에 기초하여, 파서는 주석을 "콘테이너(container)" 주석으로 인식하여 분류하고 데이터 구조(910)에 콘테이너 노드(914)를 생성할 것이다. 부가적으로, 파서는 하나 이상의 스트록 리프 노드들(916)에 콘테이너 주석의 실제 잉크 스트록(들)에 대응하는 모든 스트록 데이터를(또는 대안으로, 잉크 콘테이너 노드 또는 또 다른 적절한 노드의 속성으로서) 저장할 것이다.
도 7a 내지 도 8b과 관련하여 설명한 밑줄 및 스트라이크아웃 주석들의 경우와 마찬가지로, 단어들 "is green"이 어떤 이유로 이동하는 경우에도, 콘테이너 주석은 단어 "is green"와 함께 유지될 수 있다. 이는, 예를 들어, 도 9b에 화살표(918a)로 도시된 바와 같이, 잉크 콘테이너 콘텍스트 노드(914)(본 예에서 "소스" 콘텍스트 노드)가 단어들 "is green"에 대한 텍스트 단어 노드들(768d, 768e)(본 예에서 "목적지" 콘텍스트 노드) 각각에 링크됨을 나타내도록 데이터를 데이터 구조(910)에 저장함으로써 달성될 수 있다. 부가적으로, 도 9b에 화살표(920a, 920b)로 표시된 바와 같이, 텍스트 단어 노드들(768d, 768e)이 콘테이너 노드(914)에 링크됨을 나타내도록 데이터가 데이터 구조(910)에 저장할 수 있다. 이 링크는 "콘테인먼트(containment)" 타입의 링크이다. 따라서, 텍스트 단어 콘텍스트 노드들(768d, 768e)에 저장된 데이터가, 단어들 "is green"(또는 이러한 콘텍스트 노드들과 연관된 다른 단어(들))의 위치 및/또는 크기가 어떤 이유로 전자 문서(900)에서 변경되었음을 나타내는 경우, 링크들(918a, 918b, 920a, 920b)은, 가능하다면, 변경된 전자 문서에서 콘텍스트 노드들(768d, 768e)에 저장된 단어들의 크기, 공간적 위치, 및/또는 존재 장소에 대한 그 크기 및/또는 콘테이너 주석의 렌더링을 조정해야 함을 응용 프로그램이 검지할 수 있도록 할 것이다. 부가적으로, 사용자가 단어 "is"와 단어 "green" 사이에 단어들을 추가하거나 단어들 또는 문자들이 임의의 방식으로 제거 또는 변경되는 경우, 응용 프로그램은 이러한 변경들을 수용하기 위해 콘테이너 주석의 크기 및/또는 위치를 수정할 수 있다. 본 발명으로부터 벗어나지 않는 범위 내에서, 다른 링크 배치들 또는 링크를 나타내는 데이터가 사용될 수 있다.
도 10a 및 도 10b는 일반적으로 사용되는 또 다른 타입의 주석, 특히 "여백 코멘트(margin comment)" 타입의 주석을 도시한다. 본 예시에서, 사용자는, 도 10a에 도시된 바와 같이, 문장 "Today the sky is green"을 포함하는 전자 문서(1000)에 대해 "it's not green!"을 기재하는 전자 잉크 여백 코멘트(1002)로 주석을 표시했다. 명백하게, 도 10b에 도시된 바와 같이, 이 예시에서는 텍스트가 (도 7a, 도 8a, 도 9a에서 하나의 라인으로 존재하는 것과는 달리) 전자 문서(1000)에서 두 개의 라인으로 존재하므로, 타이프라이팅된 텍스트와 연관된 데이터 구조(1010)는 변경되었다. 따라서, 데이터 구조(1010)는 두 개의 라인 노드(1012, 1014)를 가지며, 제1 라인 노드(1012)는 (단어들 "Today" 및 "the"와 연관된) 텍스트 단어 노드(768a, 768b)를 포함하고, 제2 라인 노드(1014)는 (단어들 "sky", "is" 및 "green"과 연관된) 텍스트 단어 노드(768c, 768d, 768e)를 포함한다.
일단 복합 전자 문서(1000)가 완전히 파싱되면, 파서는 주석(1002)이 전자 잉크 텍스트를 포함하는 것으로 인식할 것이며, 이 주석을 (예를 들어, 문서(1000)의 여백의 위치에 기인하여) "여백 코멘트" 타입의 주석으로 분류할 것이다. 따라서, 파서는 여백 코멘트에 대해 적절한 콘텍스트 노드(1016)를 생성할 것이다. 이러한 여백 코멘트(1002)는 전자 잉크 텍스트만을 포함하므로, 파서는 전자 잉크의 계층적 구조와 연관된 단락 노드(1018), 두 개의 라인 노드(1020, 1022), 및 적절한 잉크 단어 노드들 (1024, 1026, 1028) 및 스트록 노드(1030, 1032, 1034)를 더 생성한다(상술한 바와 같이, 선택적으로 및 대안으로, 잉크 스트록 데이터는 잉크 단어 노드(들)의 속성들로서 저장될 수 있고, 및/또는 라인 노드들은 데이터 구조(1010)에서 생략될 수 있다).
도 10a 및 도 10b의 예시에는 다른 링크 관계가 도시된다. 구체적으로, 이 예시에서는, 페이지 여백 및 바탕 문서의 콘텐트에 대한 여백 코멘트(1002)의 위치 및 방향에 기초하여, 파서는, 도 10b에 화살표(1036)로 도시된 바와 같이, 여백 코멘트(1002)와 연관된 단락 노드(1018)(본 예시에서 "소스" 콘텍스트 노드)가 타이프라이팅된 텍스트와 연관된 단락 노드(764)(본 예에서 "목적지" 콘텍스트 노드)에 링크됨을 나타내도록 데이터를 데이터 구조(1010)에 저장한다. 부가적으로, 파서는, 화살표(1038)로 도시된 바와 같이, 타이프라이팅된 텍스트와 연관된 단락 노드(764)가 여백 코멘트(1002)의 단락 노드(1018)에 의해 링크됨을 나타내도록 데이터를 데이터 구조(1010)에 저장할 것이다. 이는 잉크 단락이 텍스트 단락에 고정되는(anchored) "고정된" 타입의 링크 배치이다. 이러한 방식으로, 타이프라이팅된 단락이 전자 문서(1000) 내에서 이동할 때마다, 선택적으로, 추가적인 라인 및/또는 단어가 단락에 추가되는 경우, 및/또는 라인 및/또는 단어가 단락에서 제거되는 경우, 및/또는 기타 변경들이 단락 내 또는 전자 문서 (1000) 내에 가해지는 경우일지라도, 링크된 타이프라이팅된 단락 근방의 여백에 여백 코멘트(1002)가 남아 있도록 여백 코멘트(1002)를 이동시켜야 한다는 점을 응용 프로그램이 검지하는 것이 링크들(1036, 1038)에 의해 허용된다. 물론, 본 발명으로부터 벗어나지 않는 범위 내에서, 다른 링크 배치들 또는 그 링크들과 연관된 데이터가 저장될 수 있다. 예를 들어, 여백 코멘트 노드(1016)는 제1 텍스트 단어 노드(768a)와 같은 타이프라이팅된 단락의 하나 이상의 개별 텍스트 단어 노드에 링크될 수 있다.
도 11a 및 도 11b는 본 발명의 적어도 일부 예시들에 따른 방법 및 시스템에 의해 인식가능한 주석의 보다 다소 복잡한 예시를 도시한다. 도시된 예에서, 전자 문서(1100)는 문구 "Today the sky is green"을 포함하지만, 이 경우에, 사용자는 서로 다른 주석 타입들의 조합을 사용하여 전자 문서(1100)에 주석을 표시했다. 구체적으로, 사용자는 단어 "green"을 둘러싸는 콘테이너 타입 주석(1102), 전자 잉크 단어 "Blue!"를 포함하는 여백 코멘트 타입 주석(1104) 및 콘테이너 타입 주석(1102)으로부터 마진 코멘트 주석(1104)을 포인트하는 커넥터 타입 주석(1106)(본 예시에서 화살표)을 도시하였다.
바탕 문서, 타이프라이팅된 문서 텍스트 및 문서의 여백에 대한 여러 주석 타입들의 상대적인 위치 및 공간적 방향으로 인해, 본 발명의 적어도 일부 예시들에 따른 파서 시스템은, 개괄적으로 상술한 바와 같이, 여러 주석 타입들, 그들의 콘텐트, 서로에 대한 관계 및 전자 문서 타이프라이팅된 텍스트에 대한 관계를 인식할 것이다. 파서에 의해 생성된 전자 문서(1100)에 대한 예시적인 계층적 데이터 구조(1110)가 도 11b에 도시된다. 타이프라이팅된 텍스트에 대한 계층적 구조은 도 7b에 도시된 바와 동일하기 때문에, 도 11b에서는 동일한 참조번호들이 사용되며 이에 대한 상세한 설명은 생략한다. 또한, 도 11b에 도시된 바와 같이, 잉크 콘테이너 타입 주석(1102)에 대한 노드 체인(1112)은 도 9b에 도시된 것과 유사하며, 여백 코멘트 타입 주석(1104)에 대한 노드 체인(1114)은 도 10b에 도시된 것과 유사하다. 따라서, 이러한 노드 체인들에 대한 상세한 설명은 생략한다.
바탕 텍스트의 적절한 부분 및 공간적 위치와 주석들의 공간적 위치를 함께 유지하기 위해서, 주석 노드들 간의 여러 링크들 및 적절한 텍스트 노드를 갖는 여러 링크들이 파서에 의해 제공되어 데이터 구조(1110)에 저장된다. 도시된 예시에서, 도 11b에 화살표(1118)로 도시된 바와 같이, 잉크 콘테이너 노드(1116)(여기서, "소스" 콘텍스트 노드)는 자신이 포함하고 있는 단어의 텍스트 단어 노드(768e)에 링크된다. 유사하게, 도 11b에 화살표(1120)로 표시된 바와 같이, 텍스트 단어 노드(768e)가 잉크 콘테이너 노드(1116)에 링크됨을 나타내도록 데이터가 데이터 구조(1110)에 저장된다. 이것은 "콘테이너" 타입 링크 배열이다.
상술한 바와 같이, 본 발명의 이러한 예시에 따른 파서는, 전자 문서(1100)가 잉크 커넥터에 대응하는 잉크 그림(1106)(즉, 본 예에서 콘테이너 주석(1102)과 여백 코멘트 주석(1104) 사이의 화살표)을 포함함을 인식한다. 이러한 커넥터 주석(1106)은, 잉크 그림(본 예시에서 잉크 그림 노드(1122)로 표시됨)으로서 데이터 구조(1110)에 저장되며, 잉크 그림은 주석 타입을 나타내는 노드(본 예시에서, 잉크 커넥터 노드(1124))를 포함하며, 주석 타입을 나타내는 노드는 커넥터를 구성하는 스트록 또는 스트록들을 (예를 들어, 스트록 노드(들)(1126), 또는 다른 적절한 노드 또는 잉크 커넥터 노드(1124)와 연관된 속성으로) 나타내는 데이터를 더 포함한다. 또한, 잉크 커넥터 노드(1124)(본 예에서 "목적지" 노드)가 잉크 커넥터 노드(1116)(본 예에서 "소스" 노드)로부터 포인트됨(pointed)을 나타내도록 정보가 데이터 구조(1110)에 저장된다. 이러한 링크("포인트 프롬(points from)" 타입의 링크)는 도 11b에서 화살표(1128)로 표시된다. 부가적으로, 데이터 구조(1110)는 잉크 커넥터 노드(1124)(본 예에서 "소스" 콘텍스트 노드)가 잉크 단어 노드(1132)(본 예에서 "목적지" 콘텍스트 노드)에 링크됨을 나타내도록 데이터를 더 포함한다. 이러한 링크("포인트 투" 타입의 링크)는 도 11b에 화살표(1134)로 표시된다. 대안으로, 잉크 커넥터 노드(1124)는, 본 발명으로부터 벗어나지 않는 범위 내에서, 잉크 라인 노드, 잉크 단락 노드, 또는 노드 체인(1114)의 여백 코멘트 노드 중 임의의 것으로 링크될 수 있다. 상술한 특정 링크들을 이용하여, 데이터 구조(1110)는 도 11a에 도시된 바와 같이 잉크 커넥터(1106)가 써클 그림(1102)으로부터 포인트되고(point from), 잉크 단어를 포인트함(point to)을 나타낸다. 이러한 여러 링크에 의해 응용 프로그램은 바탕 문서 및 여러 주석 엘리먼트들 간의 관계를 검출하도록 허용된다. 이어서, 가능할 경우, 응용 프로그램은 바탕 문서에서의 이동에 적절하게 대응하기 위해 주석 엘리먼트들을 이동시킬 수 있다. 본 발명으로부터 벗어나지 않는 범위 내에서, 임의의 적절한 링크 배열 또는 링크와 연관된 데이터가 사용될 수 있다.
도 12a 및 도 12b는 일반적으로 사용되는 또 다른 예시적인 주석 특징을 도시한다. 도 12a에 도시된 바와 같이, 이 예시에서 전자 문서(1200)는 문장 "Today the sky is green"을 포함하지만, 이 경우에는, 펜 입력식 컴퓨팅 시스템의 사용자가 문장의 첫 번째 단어 근처에 별(star) 또는 별표(asterisk)를 표시하기 위해 전자 잉크를 사용하여 문서(1200)에 주석을 표시했다(주석은 참조번호(1202)로 도시된다). 도 12b는, 일단 완전히 파싱된, 복합 전자 문서(1200)에 대응하는 예시적인 계층적 데이터 구조(1210)를 도시한다(도 12b의 많은 콘텍스트 노드들이 도 7b에서의 콘텍스트 노드들에 대응하므로, 도 12b에서는 도 7b에서와 동일한 참조번호들이 사용되며, 이에 대한 중복되는 설명은 생략한다). 이 경우에, 파서는 주석에 대한 전자 잉크 데이터의 존재를 인식할 것이며, 이러한 데이터를 잉크 그림(잉크 그림 노드(1212))으로서 분류할 것이다. 부가적으로, 바탕 문서(1200)의 콘텐트에 대한 주석(1202)의 잉크 스트록(들)의 위치 및 지점(예를 들어, 타이프라이팅된 텍스트의 라인과 나란함)뿐만 아니라 잉크 스트록 모양에 기초하여, 파서는 주석을 "별표", "불릿" 또는 고정 타입의 주석으로서 인식할 것이며, 별표 노드(1214)를 생성할 것이다. 부가적으로, 파서는 별표의 실제 잉크 스트록(들)에 대응하는 모든 스트록 데이터를 하나 이상의 스트록 리프 노드들(1216) 또는 (몇 가지 기타 노드 또는) 그 별표 노드의 속성으로서 저장할 것이다.
이러한 예시에서는, 타이프라이팅된 텍스트가 어떤 이유로 이동하는 경우, 별표 타입의 주석(1202)은, 타이프라이팅된 텍스트의 전체 라인이 전자 문서(1200)에 나타날 때마다 그 라인과 함께 유지될 수 있다. 이는, 예를 들어, 도 12b에 화살표(1218)로 도시된 바와 같이 별표 콘텍스트 노드(1214)(본 예에서 "소스" 콘텍스트 노드)가 텍스트 라인 노드(766)("본 예에서 "목적지" 콘텍스트 노드)에 링크됨을 나타도록 데이터를 데이터 구조(1210) 내에 데이터를 저장함으로써, 또한 화살표(1220)로 표시된 바와 같이, 텍스트 라인 노드(766)가 별표 노드(1214)에 의해 링크됨을 나타내도록 데이터를 저장함으로써 달성될 수 있다. 따라서, 텍스트 라인 콘텍스트 노드(766)에 저장된 데이터가, 전자 문서(1200) 상에서 라인의 지점 또는 위치가 어떤 이유에서 변경되었음을 나타내는 경우, 가능하다면, 변경된 전자 문서에서의 콘텍스트 노드(766)와 연관된 데이터의 렌더링에 대응하는 지점 및/또는 공간적 위치로 별표의 렌더링을 조정해야 한다는 점을 응용 프로그램이 검출하는 것이 링크들(1218, 1220)에 의해 허용될 것이다. 대안으로, 필요에 따라, 파서는 본 발명으로부터 벗어나지 않는 범위 내에서 별표 노드(1214)(또는 별표 주석과 연관된 다른 적절한 노드)와 단락 노드(764) 또는 개별 단어 노드들 중 하나(예를 들어, 단어 노드(768a))를 묶을 수 있다. 또한, 필요에 따라, 잉크 그림 노드(1212)는 라인 노드(766)에 고정된 소스 노드(또는 본 예에서 타이프라이팅된 텍스트에 대응하는 다른 적절한 노드)가 될 수 있다. 본 발명으로부터 벗어나지 않는 범위 내에서, 적절한 링크 배치 또는 링크를 나타내는 데이터가 사용될 수 있다.
도 13a 및 도 13b에서 링크된 주석의 "플로우차트" 타입이 도시된다. 본 예시에서, 전자 문서(1300)는 플로우차트를 포함하며, 플로우차트는 전체적으로 큰 전자 문서 내의 주석의 일부분으로서 선택적으로 포함될 수 있다. 도 13a에 도시된 바와 같이, 주석 또는 플로우차트는 제1 콘테이너에 의해 둘러싸인 또는 에워싸인 제1 잉크 엔트리(1302)(본 예에서 문자 "A") 및 제2 콘테이너 주석(1308)에 의해 둘러싸인 또는 에워싸인 제2 잉크 엔트리(1306)를 포함한다. 부가적으로, 커넥터 주석(1310)(본 예시에서 화살표)은 제1 콘테이너 주석(1304)으로부터 제2 콘테이너 주석(1308)으로 연장된다. 그러나, 문서 엘리먼트들 간의 관계들은 링크 이외의 대체 가능한 방식들로 표시될 수 있음을 이해해야 한다. 예를 들어, 이러한 관계들은, 예컨대 연관된 문서 엘리먼트들을 포함하는 콘테이너 노드들의 사용을 통해 데이터 트리 자체의 구조로 표시될 수 있다.
도 13b는, 일단 완전히 파싱되면 도 13a의 전자 문서(1300)의 플로우차트 주석과 연관될 수 있는 예시적인 데이터 구조(1320)를 도시한다. 이러한 예시적인 데이터 구조(1320)에서, 전자 문서(1300)의 모든 부분 또는 일부분에 대응할 수 있는 루트 노드(1322)가 부모 노드로서 플로우차트 타입의 주석 내의 노드들에 제공된다. 특정 주석 구조들에 관한 제1 콘텍스트 노드는 콘테이너(1304)에 대응하는 잉크 그림 노드(1324)이다. 잉크 그림 노드(1324)에는 잉크 콘테이너 노드(1326)가 자식 노드로서 제공되며, 잉크 콘테이너 주석(1304)과 연관된 특정 스트록(들)는 리프 노드(들)(1328)에 저장되거나, 잉크 콘테이너 노드(1326)(또는 다른 노드)에 속성들로서 저장된다.
도 13a와 관련하여 상술한 바와 같이, 주석은 문자 "A"(1302)에 대응하는 전자 잉크 텍스트를 더 포함한다. 상술한 다른 전자 잉크 텍스트와 공통으로, 잉크 텍스트와 연관된 전자 잉크는 계층적 데이터 구조(1320)에 단락 노드(1330)로 저장되며, 단락노드(1330)는 라인 노드(1332)를 포함하며, 라인 노드(1332)는 잉크 단어 노드(1334)를 포함하며, 잉크 노드 단어(1334)는 잉크 텍스트 주석 내의 개별 스트록들 또는 그 스트록 데이터를 포함하는 속성에 대응하는 하나 이상의 리프 노드들(1336)을 선택적으로 포함한다. 데이터 구조(1320)에 저장되는 정보는, 도 13b에 화살표(1338)로 도시되는 바와 같이, 콘테이너 주석(1304)의 잉크 콘테이너 노드(1326)("소스" 노드)가 문자 "A"의 단락 노드(1330)("목적지" 콘텍스트 노드)에 링크됨을 나타낸다. 대안으로, 필요에 따라, 잉크 단어 노드(1334) 또는 라인 노드(1332)는 목적지 노드로서 역할을 할 수 있다. 부가적으로, 데이터 구조(1320)에 저장된 정보는, 도 13b에 화살표(1340)로 표시된 바와 같이, 단락 노드(1330)가 잉크 콘테이너 노드(1326)에 의해 링크됨을 나타낸다. 본 예시에서는, 주석의 잉크 콘테이너(1308) 및 문자 "B"(1306)에 대한 데이터 구조와 잉크 콘테이너(1304) 및 문자 "A"(1302)에 대한 데이터 구조는, 동일한 일반 링크 구조를 포함하는 동일한 일반 구조를 공유하기 때문에, 문자 "B"(1306) 및 연관된 콘테이너(1308)에 대한 데이터 구조(1320)의 여러 노드는 문자 "A" 및 연관된 콘테이너와 동일한 참조번호들을 공유하지만, 문자 "b"는 도 13b에서의 잉크 콘테이너(1308) 및 잉크 단어(1306)에 대한 참조번호들을 따른다. 물론, 본 발명으로부터 벗어나지 않는 범위 내에서, 여러 계층적 배열 및 링크 구조 또는 링크 데이터는 앞서 구체적으로 설명한 것과는 다를 수 있다.
주석은, 데이터 구조(1320)에서 잉크 그림 노드(1342)로 나타낸 커넥터 주석(1310)을 더 포함한다. 도 11b와 관련하여 상술한 바와 같이, 잉크 커넥터 주석을 나타내는 잉크 그림에 대한 데이터 구조는, 잉크 커넥터 노드(1344)를 더 포함할 수 있고, 잉크 커넥터 구조(1344)는 하나 이상의 속성들 또는 리프 노드(들)(1346)를 더 포함할 수 있고, 리프 노드(들)(1346)는 커넥터(1310)를 구성하는 특정 스트록(들)과 연관된 데이터를 포함한다. 본 예시의 주석 데이터 구조를 완성하기 위해, 잉크 커넥터 주석(1310)(소스 노드)과 연관된 데이터는 두 개의 콘테이너 주석들(1304, 1308)(목적지 노드들)과 연관된 데이터에 링크된다. 구체적으로, 도 13b의 예에 도시된 바와 같이, 잉크 콘테이너 노드(1326)가 잉크 커넥터 노드(1344)에 링크됨을 "포인트 프롬" 주석 타입으로서 나타내도록(화살표(1348)로 표시됨), 정보를데이터 구조(1320)에 저장된다. 부가적으로, 잉크 커넥터 노드(1344)가 잉크 콘테이너 노드(1326b)에 링크됨을 "포인트 투" 주석 타입으로서 나타도록(화살표(1352)로 표시됨), 정보를 데이터 구조(1320)에 저장된다. 이러한 방식으로, 링크들에 관해 저장된 데이터는, 도 13a에 도시된 바와 같이, 커넥터(1310)가 써클 콘테이너(1304)로부터 써클 콘테이너(1308)로 포인트함을 나타낸다. 따라서, 여러 링크들의 존재하는 것에 의해, 전자 문서(1300) 내의 주석의 일부분의 이동 시 주석의 다른 부분들이 따라가게 되므로, 전자 문서(1300)가 몇가지 방식으로 변경할지라도 주석을 원래대로 유지하는 것이 가능하다. 물론, 이러한 전반적인 구조는, 본 발명으로부터 벗어나지 않는 범위 내에서, 전술한 일부 바탕 문서 엘리먼트에 링크되어 있을 수 있다.
유사하게, 주석은, 커넥터에 의해, 예를 들어 "switch these!"와 같은 문자(written) 코멘트에 연결된 두 개의 엔클로저(encloser)를 포함할 수 있다. 두 개의 엔클로저 사이에 단어들이 삽입되는 경우와 같이, 주석의 일 부분이 이동하면 그 부분은 주석의 다른 부분과 관계없이 이동될 것이 요구된다. 전자 잉크 주석들을 나타내는 콘텍스트 노드들과 비-잉크(non-ink) 콘텐트를 나타내는 노드들 간의 링크들은, 주석의 조각들을 재위치시키고 위치지정 동작이 완료되면 다시 함께 묶기 위해 소프트웨어 애플리케이션에 의해 사용될 수 있다.
도 14a 및 도 14b는 플로우차트 타입의 주석 또는 잉크 구조를 갖는 전자 문서(1400)의 또 다른 예시를 도시한다. 이 예시에서, 문자 "A"와 "B" 간의 전자 잉크 커넥터(1408) 및 문자 "A"와 "C" 간의 전자 잉크 커넥터(1410)에 의해, 문자 "A"(1402)에 대한 전자 잉크 주석이 문자 "B"(1404) 및 문자 "C"(1406)에 대한 전자 잉크 주석에 각각 연결된다.
도 14b에는, 파싱 후의 전자 문서(1400)에 대한 예시적인 데이터 구조(1420)가 도시된다. 부모 루트 노드(1422)에는 전체 전자 문서 또는 그 일부분에 관한 데이터가 저장될 수 있다. 전자 잉크 단어들 "A", "B" 및 "C"에 대응하는 데이터는, 상술한 몇 가지 도형에서 사용된 것과 동일한 단락 노드(1424a, 1424b, 1424c), 라인 노드(1426a, 1426b, 1426c), 잉크 단어 노드(1428a, 1428b, 1428c) 및 스트록 노드(들)(1430a, 1430b, 1430c) 구조를 갖는다. 이러한 노드들에 대한 설명의 반복은 생략한다. 마찬가지로, 잉크 커넥터들은 도 11b 및 도 13b에서 사용된 잉크 그림 노드(1432a, 1432b), 잉크 콘테이너 노드(1434a, 1434b) 및 스트록 노드(들)(1436a, 1436b) 구조를 가지므로, 반복되는 기재는 생략한다. 물론, 본 발명으로부터 벗어나지 않는 범위 내에서 상술한 가능한 변형들을 포함하는 특정 데이터 구조들의 변형들이 사용될 수 있다.
이러한 예시적인 주석 데이터 구조를 완성하기 위해서, 잉크 커넥터 주석(1408)과 연관된 데이터는 연결한 두 개의 잉크 단어 주석(1402, 1404)과 연관된 데이터에 링크되고, 잉크 커넥터 주석(1410)과 연관된 데이터는 연결하고 있는 두 개의 잉크 단어 주석들(1402, 1406)과 연관된 데이터에 링크된다. 구체적으로, 도 14b의 예에 도시된 바와 같이, 잉크 그림 노드(1432a)("소스" 노드)가 잉크 단어 노드들(1428a, 1428b)를 포인트함("point to")을 나타내도록 정보가 데이터 구조(1420)에 저장된다(각각 화살표(1438, 1440)로 표시됨). 유사하게, 잉크 그림 노드(1432b)("소스" 노드)가 잉크 단어 노드들(1428a, 1428c)를 포인트함(point to)을 나타내도록 정보가 데이터 구조(1420)에 저장된다(화살표(1442, 1444)로 각각 표시됨). 잉크 단어 노드들(1428a, 1428b, 1428c)은 "목적지" 노드로서 기능한다. 여러 링크에 의해서, 전자 문서(1400)의 주석의 일부가 이동하면 주석의 다른 부분들이 따라올 수 있으므로, 전자 문서(1400)가 어떠한 방식으로 변경될지라도 주석은 온전한 상태 또는 링크된 상태로 유지될 수 있다. 또한, 주석은 본 발명으로부터 벗어나지 않는 범위 내에서, 타이프라이팅된 텍스트, 그림, 이미지 등과 같은 전자 문서 내의 하나 이상의 다른 엘리먼트들과 링크될 수 있다.
도 15a 내지 도 15c는 전자 문서(1500)의 예시들, 및 복수의 행과 열을 갖는 테이블의 형태로 전자 잉크 주석을 포함하는 예시적인 데이터 구조들을 도시한다. 구체적으로, 도 15a의 예시에 도시된 바와 같이, 전자 문서(1500)는 두 개의 행 및 두 개의 열을 갖는 테이블(1502)(전체 4개의 셀로 구성됨)을 포함하고, 테이블의 각 셀은 전자 잉크 경계들로 구성되며 전자 잉크 텍스트 입력을 포함한다.
도 15b에는, 도 15a에 도시된 전자 잉크 테이블(1502)에 대한 파싱 완료 후의 예시적인 데이터 구조(1510)가 도시된다. 이 예시에서, 데이터 구조(1510)는 전자 문서(1500)의 전체 또는 일부에 대응할 수 있는 루트 노드(1512)를 포함한다. 루트 노드(1512) 아래에는, 테이블에 관한 관련 데이터가 테이블 노드(1514)에 저장된다. 이것은 예를 들어, 테이블 크기, 테이블 위치, 행의 수, 열의 수, 바운딩 박스 크기 등을 나타내는 데이터를 포함할 수 있다. 테이블 노드(1514) 아래에는, 분리된 행 노드들이 테이블의 각 행에 제공된다(본 예시에서는, 도 15b에 도시된 바와 같이 두 개의 행 노드(1516, 1518)가 제공된다). 이러한 각각의 예시적인 데이터 구조의 행 노드는 하나 이상의 셀 노드를 더 포함한다(도시된 예에서, 행 노드(1516)는 두 개의 셀 노드(1520, 1522)를 포함하고, 행 노드(1518)는 두 개의 셀 노드(1524, 1526)를 포함한다). 본 예시에서의 각 셀은 전자 잉크 텍스트 데이터를 포함하기 때문에, 본 예시에서의 계층적 데이터 구조(1510)의 나머지 부분은 상술한 친숙한 단락 노드, 라인 노드, 잉크 단어 노드 및 스트록 노드(들)를 갖는다. 물론, 테이블 셀은, 본 발명으로부터 벗어나지 않는 범위 내에서, 예를 들어, 타이프라이팅된 텍스트 데이터 및/또는 도 6i와 관련하여 상술한 여러 데이터 타입을 포함하는 전자 잉크 데이터에 부가하여, 및/또는 이를 대신하여 하나 이상의 기타 데이터 타입을 포함할 수 있다. 또 다른 대안으로서, 행 노드들(1516, 1518) 대신에, 데이터 구조는 열 노드를 포함할 수 있으며, 열 노드는, 예를 들어 도 15b에 도시된 바와 같은, 셀 노드, 단락 노드 등을 포함할 수 있다. 실제 테이블을 구성하는 잉크 스트록은, 예를 들어, 테이블 노드(1514)의 일 부분으로서(예를 들어, 그 노드와 연관된 속성들로서), 및/또는 (그 아래에 저장된 연관된 스트록들과 함께) 테이블 노드(1514)에 의존하는 잉크 그림 노드로서 저장되거나, 및/또는 데이터 구조(1510) 내의 임의의 다른 적절한 위치에 저장될 수 있다.
도 15c에는, 테이블(1502)을 포함하는 전자 문서(1500)에 대한 대안의 예시적인 데이터 구조(1530)가 도시된다. 이 예시에서 루트 노드(1512), 테이블 노드(1514), 행 노드들(1516, 1518) 및 셀 노드들(1520, 1522, 1524, 1526)은 도 15b에 도시된 것과 동일하다. 다만, 도 15b에서는 전자 잉크 텍스트 데이터가 여러 셀 노드들(1520, 1522, 1524, 1526) 아래에 자식 노드들로서 포함되지만, 도 15c에서는 전자 잉크 텍스트 데이터의 단락 노드(1528a, 1528b, 1528c, 1528d)(또는 임의의 다른 적절한 또는 원하는 데이터 구조)가, 도 15c에 화살표(1530a, 1530b, 1530c, 1530d)로 도시된 바와 같이, 각각 셀 노드(1520, 1522, 1524, 1526)에 링크된다. 본 예시에서 셀 노드들은, 포함된 잉크 단어들에 대한 콘테이너 타입 "소스" 노드들로서 역할할 수 있으며, 잉크 단락, 라인 또는 단어 노드들은 "목적지" 콘텍스트 노드들로서 역할한다. 여러 링크들에 의해, 전자 문서(1500)에서 테이블 주석의 일부가 이동하면 주석의 다른 부분들이 따라갈 수 있으며, 그리하여 전자 문서(1500)가 몇몇 방식으로 변경될지라도 테이블 주석은 본래대로 또는 링크된 채로 유지될 있다. 테이블은 또한 바탕 전자 문서에 기초하여 존재하는 일부 다른 노드들에 링크될 수 있다. 다시, 대안으로서, 행 노드들(1516, 1518)은 본 발명으로부터 벗어나지 않는 범위 내에서, 여러 셀 노드를 포함하는 열 노드들로 대체될 수 있다. 또한, 실제 테이블을 구성하는 잉크 스트록들은, 본 발명으로부터 벗어나지 않는 범위 내에서, 임의의 위치, 예를 들어, 테이블 노드(1514)의 일부로서(예를 들어, 그 노드와 연관된 속성들로서) 및/또는 테이블 노드(1514)에 의존하는 잉크 그림 노드로서(그 아래에 저장된 연관된 스트록들로) 저장될 수 있거나, 및/또는 데이터 구조(1510) 내의 임의의 다른 적절한 위치에 저장될 수 있다.
물론, 상술한 여러 가지 예시적인 주석 타입들과 관련된 다양한 도형들은, 주석 내에 포함될 수 있는 정보, 주석의 사용 및 가능한 주석 타입의 가능한 예시들일 뿐이다. 본 기술분야의 통상의 지식을 가진 자라면 많은 변형들 및 변경들이 본 발명으로부터 벗어나지 않는 범위 내에서 행해질 수 있음을 인식할 것이다. 예를 들어, 주석들은, 본 발명으로부터 벗어나지 않는 범위 내에서, (전자 잉크 텍스트, 그림, 이미지, 타이프라이팅된 텍스트 및 이미지 등과 같은) 서로 다른 많은 데이터 타입들을, 서로 다른 많은 조합들 및 교환들로 포함할 수 있다.
부가적으로, 상술한 여러가지 데이터 구조들과 관련하여 여러가지 링크 스킴들을 설명한다. 이러한 링크 스킴들 또는 기술들은 여러 데이터 노드들이 함께 링크될 수 있도록 하는 방식의 예시일 뿐이다. 본 발명으로부터 벗어나지 않는 범위 내에서 링크와 연관된 데이터 또는 임의의 적절한 링크 배열이 저장될 수 있다. 예를 들어, 각각의 노드를 ("세계적 단일 식별자(globally unique identifier)", 즉 GUID와 같은) 개별 식별자로 나타내고, GUID 쌍들(또는 그 이상)을 이용하여 그 링킹을 나타내는 것이 가능할 수 있다. 또 다른 대안으로서, 상기 몇 가지 예들과 관련하여 설명한 이중 링크 배치 대신에, 단일의 링크가 링크 노드들에 사용될 수 있다. 또 다른 가능한 대안으로서, 필요하거나 원한다면, 노드가 자기 자신으로 링크될 수 있다(예를 들어, 소스 노드 및 목적지 노드가 같은 노드에 있는 셀프-링킹(self-linking)). 본 기술 분야의 통상의 지식을 가진 자들은, 본 발명으로부터 벗어나지 않는 범위 내에서, 여러 가지 데이터 세트들을 서로와 연관시키거나 링크시키는 임의의 적절한 방식이 사용될 수 있음을 인식할 것이다.
<잉크의 분석>
지금부터 본 발명의 예시들에 따르는 전자 문서 내의 전자 잉크를 분석하기 위한 여러가지 예시적인 기술들을 설명한다. 특히, 도 16a 내지 도 16e는 본 발명의 각종 실시예들에 따라 문서를 분석하는 단계들을 보여주는 순서도를 도시한다. 이어서, 도 17 내지 도 26은 분석 처리 동안 사용되는 서로 다른 컴포넌트들 간의 관계를 도시한다.
도 17를 참조하면, 이 도면은 소프트웨어 애플리케이션(1701)을 도시한다. 소프트웨어 애플리케이션(1701)은 타이프라이팅된 문자들 또는 이미지들과 같은 전자 잉크 데이터(1705) 및 비-잉크 데이터(1707) 양자를 모두 포함할 수 있는 문서(1703)를 유지한다. 앞서 상세히 설명한 바와 같이, 전자 잉크 데이터(1705)와 비-잉크 데이터(1707)의 속성들은 트리와 같은 계층적 데이터 구조로 표현될 수 있다. 전자 잉크의 분석을 시작하기 위해, 단계 1601에서, 소프트웨어 애플리케이션(1701)은 도 17에서 분석 콘텍스트 오브젝트(1709)로 식별되는 데이터 구조를 생성한다.
도 18은 분석 콘텍스트 오브젝트(1709)에 포함될 수 있는 타입의 예시적인 트리(1801)를 도시한다. 트리(1801)는 루트 노드(1803) 및 단락 노드(1805)를 포함한다. 단락 노드(1805)는 예를 들어, 앞선 분석 처리에서 먼저 식별되었을 수 있는 전자 잉크 텍스트의 단락에 대응한다. 단락 노드(1805)는, 전자 잉크 텍스트의 단락에서의 두 개의 라인을 나타내는 두 개의 라인 노드(1807, 1809)에 연결된다. 라인 노드(1807)는 차례로 두 개의 단어 노드(1811, 1813)와 연관된다. 각 단어 노드(1811, 1813)는, 라인 노드(1807)가 나타내는 전자 잉크 텍스트의 라인 내의 단어에 대응한다. 단어 노드(1811)는 잉크 스트록 데이터(1815) 및 잉크 스트록 데이터(1817)를 포함한다. 그러므로, 스트록 데이터(1815, 1817)는 단어 노드(1811)로 표시된 단어를 구성하는 텍스트 전자 잉크 스트록들에 대응한다. 유사하게, 단어 노드(1813)는, 단어 노드(1813)로 표시된 단어를 구성하는 텍스트 전자 잉크 스트록들에 대응하는 잉크 스트록 데이터(1819) 및 잉크 스트록 데이터(1821)를 포함한다. 트리(1801)는 또한 루트 노드(1803)에만 연관된 스트록 데이터(1823 내지 1827)를 포함한다. 이러한 잉크 데이터(1823 내지 1827)는 또 다른 잉크 스트록 또는 다른 문서 엘리먼트와 연관되거나 미분류 새로운 잉크 스트록들을 표시한다.
그러므로, 스트록들을 개별 스트록 노드들에 저장하는 것을 대신하여, 여러 노드들은, 노드와 연관된 스트록들에 대응하는 데이터를 저장하는 연관된 "스트록들" 속성을 가질 수 있다. 예를 들어, 리스트 항목 내에 (a)미분류 콘텍스트 노드가, 분석을 필요로하는 하나 이상의 스트록을 갖는 하나 이상의 "스트록" 속성을 포함할 수 있고, (b) 잉크 단어 노드가, 잉크 단어를 구성하는 하나 이상의 스트록을 포함하는 하나 이상의 "스트록" 속성을 포함할 수 있으며; (c) 그림 노드가, 그림을 구성하는 하나 이상의 스트록을 포함하는 하나 이상의 "스트록" 속성을 포함할 수 있으며, (d) 불릿 노드가 불릿을 구성하는 하나 이상의 스트록을 포함하는 하나 이상의 "스트록" 속성을 포함할 수 있다. 물론, 본 발명의 대안의 구현들로서, 단어 노드 또는 그림 노드와 잉크 스트록들을 연관시키는 것을 대시하여, 개별 스트록 노드들은 데이터 트리에서 예를 들어, 전자의 개별 스트록을 표시하도록 사용될 수 있다.
도 18에 도시된 트리(1801)는, 이미 단어, 라인 및 단락으로 조직된 잉크 스트록들을 포함하지만, 트리(1801)는, 또 다른 잉크 스트록 또는 문서 엘리먼트와 연관되지 않았거나 분류되지 않은 새로운 잉크 스트록만을 포함할 수 있음을 이해해야 한다. 예를 들어, 사용자가 처음으로 문서(1703)에 전자 잉크를 입력하는 경우, 이러한 처음의 잉크 스트록은 분석되지 않았을 것이다. 트리(1801)는 대표 예일 뿐이며, 본 발명의 각종 실시예들을 이해하는데 용이하도록 매우 간략화된 것임을 또한 이해해야 한다. 예를 들어, 통상적으로 라인 노드는 복수의 단어 노드와 연관될 것이며, 각 단어 노드는 몇 개의 잉크 스트록에 대한 스트록 데이터를 포함할 수 있다. 또한, 트리(1801)는 잉크-관련(ink-related) 노드만을 포함하지만 분석 콘텍스트 오브젝트(1709)는, 앞서 상세하게 설명한 바와 같이, 이미지 및 타이프라이팅된 텍스트와 같은 비-잉크 문서 엘리먼트들을 나타내는 노드들을 포함할 수 있음을 알아야 한다.
도 17로 돌아가서, 본 발명의 몇 가지 예시로서, 소프트웨어 애플리케이션(1701)은 자기 자신의 분석 콘텍스트 오브젝트(1709)를 생성하고 유지할 것이다. 이러한 소프트웨어 애플리케이션들(1701)을 위하여, 소프트웨어 애플리케이션(1701)은 간단히 분석 오브젝트(1709)에 대한 참조를 제공할 수 있다. 그러나, 이러한 소프트웨어 애플리케이션들(1701)을 위하여, 소프트웨어 애플리케이션(1701)은 분석 오브젝트를 생성하여 포퓰레이트하고(populate) 유지하는데 필요한 메커니즘들을 포함해야 한다. 그러나, 일부 소프트웨어 개발자들은 이러한 메커니즘들에 그 애플리케이션(1701)을 제공하는 문제점을 제기하고 싶지는 않을 것이다.
따라서, 그러나, 본 발명의 다른 예들로서, 소프트웨어 애플리케이션(1701)은 분석 콘텍스트 오브젝트(1709)를 생성하기 위해 또 다른 오브젝트를 인스턴스화(instantiate)할 수 있다. 예를 들어, 소프트웨어 애플리케이션(1701)은 분석 콘텍스트 오브젝트(1709)를 생성 및/또는 유지하기 위하여 잉크 분석 도구 또는 다른 오브젝트를 사용할 수 있다. 예를 들어, 소프트웨어 애플리케이션(1701)은 미분석 잉크 데이터를 잉크 분석 도구에 제공하거나 식별할 수 있다. 소프트웨어 애플리케이션(1701)으로부터의 명령들에 의존하여, 잉크 분석 도구는 소프트웨어 애플리케이션(1701)에 의해 식별된 미분석 잉크를 포함하는 문서의 특정 영역(또는 영역들)만을, 또는 전체 문서(1703)를 나타내는 분석 콘텍스트 오브젝트(1709)를 생성할 수 있다. 몇가지 소프트웨어 애플리케이션들(1701)에 있어서, 소프트웨어 애플리케이션(1701)은, 그 후, 자체적으로, 또는 잉크 분석 도구나 또 다른 오브젝트에 의해 제공되는 서비스를 이용하여, 분석 콘텍스트 오브젝트(1709)를 유지하고 업데이트할 수 있다. 또 다른 소프트웨어 애플리케이션들(1701)에서는, 소프트웨어 애플리케이션(1701)이 분석 문서 오브젝트(1709)를 유지하지 않을 수 있으며, 그 대신 잉크 분석 도구 또는 다른 오브젝트로 하여금 필요할 때 새로운 분석 문서 오브젝트(1709)를 생성하도록 할 수 있다.
통상적으로, 분석 콘텍스트 오브젝트(1709)는 전체 문서(1703)에 대한 문서 엘리먼트들에 관한 정보를 포함할 것이다. 그러나, 본 발명의 몇 가지 예시에서는, 분석 콘텍스트 오브젝트(1709)는 문서(1703)의 일부에서만의 문서 엘리먼트들에 대한 정보를 포함할 수 있음을 알아야 한다. 즉, 분석 콘텍스트 오브젝트(1709)는, 새로운 또는 "더티(dirty)" 잉크 또는 다른 데이터를 포함하는 문서의 공간적 영역 내의 문서 엘리먼트만을 나타낼 수 있다. 전자 잉크를 포함하는 문서 내의 영역에서의 모든 문서 엘리먼트들이 이미 분석된 경우, 이러한 이미 분석된 문서 엘리먼트들은 분석 콘텍스트 오브젝트(1709)에 포함되지 않을 수 있다. 또 다른 대안으로서, 응용 프로그램은, 전체 전자 문서(1703)에 관련되는 데이터의 각 페이지 또는 다른 서브세트에 대한 분리된 분석 콘텍스트 오브젝트(1709)를 유지할 수 있다.
일단 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709)를 생성했으면, 단계 1603에서, 잉크 분석 도구(1901)는 도 19에 도시된 바와 같이 분석 콘텍스트 오브젝트(1709)의 적어도 일부를 카피한다. 더욱 구체적으로, 분석 콘텍스트 오브젝트(1709)가 상술한 바와 같이 새로운 잉크 및/또는 다른 데이터를 포함하는 영역들로 한정되지 않는 경우에는, 소프트웨어 애플리케이션(1701)이 새로운 잉크 및/또는 분석되어야 하는 다른 데이터를 포함하는 문서(1703)의 영역들을 지정할 것이다. 이어서 소프트웨어 애플리케이션(1701)은, 잉크 분석 도구(1901)를 호출하여(invoke) 문서(1703)의 지정된 영역에 대응하는 분석 콘텍스트 오브젝트(1709)의 부분을 카피하도록 한다. (물론, 이미 분석 콘텍스트 오브젝트(1709)가 새로운 잉크를 포함하는 영역들을 기술하는 것으로 한정된 경우, 잉크 분석 도구(1901)는 전체 분석 콘텍스트 오브젝트(1709)를 카피할 수 있다.)
응용 프로그램(1701)은, 앞서 분석되지 않았던 잉크가 어떤 잉크인지는 알 것이지만, 새로운 잉크에 영향을 미치는 부분이 전자 문서(1703)의 어느 부분(들)(예를 들어, 전자 문서 내의 바탕 데이터, 앞서 분석된 잉크 등)인지, (그러므로, 잉크 분석 도구(1901)에 제공할 부분이 어느 부분(들)인지)는 알 수 없다. 그러므로, 본 발명의 적어도 몇가지 예들에서, 응용 프로그램(1701)은, 큰 섹션들이 전자 문서(1703)의 분석 콘텍스트 오브젝트(1709)를 통해 잉크 분석 도구(1901)에 이용가능하도록 만들 것이다. 응용 프로그램(1701)은, 분석 콘텍스트 오브젝트(1709)를 통해 응용 프로그램(1701)에서 실제로 요구하는 정보를 결정하는 것을 잉크 분석 도구(1901)에게 맡긴다.
새로운 데이터를 분석하기 위한 호출에 응답하여, 잉크 분석 도구(1901)는, 필요한 경우, 소프트웨어 애플리케이션(1701)에 의해 지정된 영역 내의 기타 데이터 및/또는 새로운 잉크를 분석하는데 필요한, 분석 콘텍스트 오브젝트(1709)으로부터의 정보를 획득하기 위해, 분석 콘텍스트 오브젝트(1709)로 여러 가지의 콜백을 행한다. 예를 들어, 잉크 분석 도구(1901)는, 새로운 잉크 및/또는 다른 데이터 뿐만 아니라, 이미 분석된 지정된 영역 내의 다른 데이터 및/또는 잉크에 관한 정보에 대한 분석 콘텍스트 오브젝트(1709)에 관하여 질의하거나, 또는 그 지정된 영역 내의 비-잉크 문서 엘리먼트들에 관한 정보에 대한 분석 콘텍스트 오브젝트(1709)에 관하여 질의할 수 있다. "지정된 영역"은, 본 발명의 적어도 몇 가지 예들에서, 분석될 기타 데이터 또는 새로운 잉크를 포함하는 영역에서의, 및/또는 그 영역의 부근에서의 공간적 영역의 데이터에 대응할 수 있다.
미리 분석된 잉크 및 비-잉크 문서 엘리먼트들 양자 모두는, 특히 분석될 새로이 입력된 데이터 부근에 위치한 엘리먼트들은, 미분석 잉크 또는 기타 데이터의 분석을 개선시키는 콘텍스트를 제공할 수 있다. 잉크 분석 도구(1901)가 분석 콘텍스트 오브젝트(1709)로부터 원하는 정보를 획득하므로, 잉크 분석 도구(1901)는 획득된 정보로 문서 독립 분석 콘텍스트 오브젝트(1903)를 생성한다. 그러므로, 문서 독립 분석 콘텍스트 오브젝트(1903)는, 분석 콘텍스트 오브젝트(1709)에 포함된 정보의 서브세트를 포함하지만, 이것은 문서(1703)와 독립적이다. 상술한 공간적 추상화(abstraction) 메소드에 기초하여 질의에서 이러한 "콜백(call back)" 기술을 사용하는 것에 의해, 잉크 분석 도구(1901)가 필요한 데이터를, 심지어 큰 문서들에 대해서도, 효율적으로 획득하고 분석하는 것이 가능해진다. 그러나, 애플리케이션(1701)은, 요구되는 경우, 콘텐트를 분석 도구에 노출시키지 않음으로써 문서 독립 분석 콘텍스트 오브젝트(1903)의 콘텐트를 간단히 통제할 수 있음을 유의해야 한다.
또한, 잉크 분석 도구(1901)가 문서 독립 분석 콘텍스트 오브젝트(1903)를 생성하는 동안 소프트웨어 애플리케이션(1701)은 분석 콘텍스트 오브젝트(1709)를 변경해서는 안 된다는 점에 (그리고, 응용 프로그램 내의 다른 스레드(thread) 및/또는 다른 프로그램이 이 기간 동안 분석 콘텍스트 오브젝트(1709)를 변경하는 것은 허용될 수 없음에) 유의해야 한다. 즉, 소프트웨어 애플리케이션(1701)은 이 기간 동안 새로운 데이터를 문서(1703)에 입력해서는 안 되며, 다른 스레드들 및/또는 응용 프로그램들에게도 이는 허용되지 않는다. 그러나, 문서 독립 분석 콘텍스트 오브젝트(1903)를 생성하는 처리는 비교적 빠르며, 이는 통상적으로 소프트웨어 애플리케이션(1701)의 동작에 상당한 영향을 미치지는 않을 것이다. 그러나, 필요에 따라, 문서(1703)에 데이터를 입력한 결과들은 캐쉬(cach)되어 문서 독립 분석 콘텍스트 오브젝트(1903)가 생성된 후에 시스템에 입력될 수 있다.
일단 문서 독립 분석 콘텍스트 오브젝트(1903)가 생성되면, 미분석 잉크 및/또는 다른 데이터에 대한 모든 후속적인 분석 작업은 분석 콘텍스트 오브젝트(1709)보다는 문서 독립 분석 콘텍스트 오브젝트(1903)에 대해 수행될 수 있으며, 그에 따라 소프트웨어 애플리케이션(1701)은 일반 동작을, 미분석 잉크 및/또는 다른 데이터의 분석에 의해 지연되거나 중단되는 일 없이, 계속 수행하는 것이 가능하다. 소프트웨어 애플리케이션(1701)은, 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 미분석 잉크의 분석에 간섭하는 일 없이, 새로운 전자 잉크 데이터(1705)를 문서(1703)에 입력할 수 있다.
따라서, 문서 독립 분석 콘텍스트 오브젝트(1903)가 생성된 후, 단계 1605에서는 잉크 분석 도구(1901)가 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 잉크를 분석하기 위해 분리된 분석 스레드를 생성한다. 따라서, 단계 1607에서, 소프트웨어 애플리케이션(1701)은 주요 처리 스레드의 제어를 재개할 수 있으며, 일반 동작을 계속 수행할 수 있다. 이어서, 단계 1609에서, 잉크 분석 도구(1901)는 문서 독립 분석 콘텍스트 오브젝트(1903)를, 분석을 위한 제1 분석 처리에 제공한다. 예를 들어, 도 20에 도시된 바와 같이, 잉크 분석 도구(1901)는 문서 독립 분석 콘텍스트 오브젝트(1903)를 분석 스레드를 사용하여 파싱하기 위해 파싱 처리(2001)에 전달할 수 있다. 파싱 처리는, 본 발명으로부터 벗어나지 않는 범위 내에서, 하나 이상의 분류 처리(예컨대, 잉크 및/또는 다른 데이터를, 예를 들어, 잉크 텍스트, 잉크 그림, 테이블, 차트, 그래픽, 이미지, 음악, 수학, (저항, 캐패시터 등을 갖는 전기회로도와 같은) 특별한 기호들을 포함한 그림 등과 같은 다양한 서로 다른 다른 타입으로 분류하기 위한 처리)를 포함할 수 있다. 본 발명의 몇가지 예시들에서, 잉크 분석 도구(1901)는 문서 독립 분석 콘텍스트 오브젝트(1903)의 카피를 만들 수 있음을 유의해야 한다. 이하에 보다 상세하게 설명하는 바와 같이, 문서 독립 분석 콘텍스트 오브젝트(1903)의 원본(original form)의 카피는 문서(1703)의 현재 상태를 이용하여 그 분석 처리의 분석 결과들을 조정하기 위해 사용될 수 있다.
제1 분석 처리가 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 잉크 및/또는 다른 데이터를 분석한 후, 제1 분석 처리는 분석 결과를 잉크 분석 도구(1901)로 리턴하며, 이는 차례로 분석 결과를 단계 1611에서 소프트웨어 애플리케이션(1701)에게 알린다. 예를 들어, 도 21에 도시된 바와 같이, 제1 분석 처리가 파싱 처리(2001)인 경우, 파싱 처리는 파싱 결과들(2101)을 잉크 분석 도구(1901)로 리턴하며, 이어서 (예를 들어, 이벤트를 자극함(firing)으로써) 분석 결과들(2101)에 대한 참조를 소프트웨어 애플리케이션(1701)으로 전달할 수 있다.
이하에 보다 상세하게 설명될 것처럼, 본 발명의 몇 가지 예시들에서, 분석 결과들(2101)은, 원래 분석 처리에 제공되었던 문서 독립 분석 콘텍스트 오브젝트(1903)일 수도 있으나, 제1 분석 처리에 의해 생성된 새로운 정보(예를 들어, 본 예에서 파싱 결과들)를 포함하도록 변경될 수도 있다. 그러나, 본 발명의 또 다른 예들에서, 분석 결과들(2101)은 문서 독립 분석 콘텍스트 오브젝트(1903)의 수정된 카피일 수 있다. 제1 분석 처리에 의해 생성된 새로운 정보를 문서 독립 분석 콘텍스트 오브젝트(1903)의 카피에 포함시킴으로써, 원래의 문서 독립 분석 콘텍스트 오브젝트(1903)는 예를 들어, 조정자(reconciler)에 의해 사용되도록, 및/또는 상술한 다른 분석 처리에서 사용하기 위해 보존될 수 있다.
도 22는, 파싱 처리(예컨대, 파싱 처리(2001))가 파싱 동작에 의해 생성된 레이아웃 변경들을 보여주기 위해 데이터 트리(1801)를 어떻게 변형시킬 수 있는지에 관한 예시를 도시한다. 이 도면에 도시된 바와 같이, 파싱 처리(2001)는 스트록 데이터(1823)가 나타내는 미분석 잉크 스트록이 단어 노드(1813)가 나타내는 단어의 일부인 것으로 판단하였다. 따라서, 파싱 처리는 루트 노드(1803)와 그 스트록 데이터(1823)의 연관을 해제하고, 대신에 단어 노드(1813)와 연관시킨다.
파싱 처리는, 또한 미분류 스트록 데이터(1825, 1827)가 나타내는 잉크 스트록들이, 앞서 식별되지 않은 라인 노드(1809)가 나타내는 라인 내의 새로운 단어의 일부분인 것으로 판단하였다. 따라서, 파싱 처리(2001)는 새로운 단어 노드(2201)를 생성하고, 라인 노드(1809)와 단어 노드(2201)를 연관시킨다. 이어서 파싱 처리(2001)는 새로운 단어 노드(2201)과 스트록 데이터(1825, 1827)를 연관시킨다. 따라서, 파싱 결과들(2101)은, 앞서 분석되지 않은 미분석 잉크 스트록들과 파싱 처리(2001)에 의해 식별된 다른 잉크 스트록들(또는 다른 문서 엘리먼트들) 간의 관계들을 설명한다. 또한, 파싱 처리(2001)에 의해 결정된 관계 변경들을 보여주는 것에 부가하여, 파싱 결과들(2101)은 또한 파싱 처리들(2101)에 의해 결정되는 분류 정보를 포함할 수 있다. 예를 들어, 대응하는 잉크 스트록을 그림 잉크 스트록보다는 텍스트 잉크 스트록으로 분류하도록 잉크 스트록 데이터(1823~1827)의 각 인스턴스가 변경될 수 있다. 본 발명의 적어도 몇가지 예시들에서, 필요한 경우, 파싱 결과들(2101)은 문서 독립 분석 콘텍스트 오브젝트(1903) 내에 표시될 수 있다.
상술한 바와 같이, 제1 분석 처리가 문서 독립 분석 콘텍스트 오브젝트(1903)를 분석하는 동안, 소프트웨어 애플리케이션(1701)은 새로운 잉크 데이터(1705) 및 새로운 비-잉크 데이터(1707) 양자를 모두 포함하는 새로운 데이터를 문서(1703)에 입력할 수 있다. 따라서, 제1 분석 처리의 결과들은 문서(1703)의 현재 상태에 더 이상 적용가능하지 않을 수 있다. 예를 들어, 파싱 처리는 잉크 스트록이 단어와 연관되는 것으로 결정할 수 있지만, 사용자는 문서(1703)로부터 잉크 스트록을 (예를 들어, 연관된 단어 전부 또는 그 이상과 함께) 전부 삭제할 수 있다. 따라서, 단계 1613에서 분석 결과들(2101)은 문서(1703)의 현재 상태로 조정되어야 한다. 예시적인 조정 처리가 도 23에 개괄적으로 도시되며, 이는 이하에 보다 상세하게 설명될 것이다.
본 발명의 몇가지 예들로서, 소프트웨어 애플리케이션(1701)은 분석 결과들(2101)을 문서(1703)의 현재 상태로 수동으로 조정할 수 있다. 즉, 소프트웨어 애플리케이션(1701)은 분석 결과들(2101)을 면밀히 살펴서 그 결과들이 현재 문서(1703) 내의 문서 엘리먼트들에 관련되었는지를 판단할 수 있다. 그러나, 본 발명의 다른 예들에서, 잉크 분석 도구(1901)는 분석 결과들(2101)을 현재 분석 콘텍스트 오브젝트(1709)(즉, 문서(1703)의 현재 상태를 반영하는 분석 콘텍스트 오브젝트(1709))로 조정하기 위한 조정 기능을 제공할 수 있다. 이하에 보다 상세하게 설명하는 것처럼, 본 발명의 여러 실시예들의 조정 기능에 의해 제1 분석 처리로부터의 분석 결과들(2101)과 문서(1703)의 현재 상태에 대한 분석 콘텍스트 오브젝트(1709) 간의 대립(conflict) 또는 "충돌(collision)"이 식별될 것이다. 이어서 잉크 분석 도구(1901)는 단계 1615에서 분석 결과들에 기초하여 분석 콘텍스트 오브젝트(1709)를 업데이트하고, 단계 1617에서 분석 콘텍스트 오브젝트(1709)의 조정된 분석 결과들로부터 새로운 문서 독립 분석 콘텍스트 오브젝트(1903)를 생성할 것이다.
잉크 분석 도구(1901)가 분석 결과들(2101)을 현재 분석 콘텍스트 오브젝트(1709)로 조정하는 동안, 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709)를 변경하는 것은 허용되지 않음에 (그리고 분석 콘텍스트 오브젝트(1709)가 응용 프로그램 및/또는 임의의 다른 응용 프로그램 내의 다른 스레드들에 의해 변경되도록 허용해서는 안된다는 점에) 유의해야 한다. 즉, 소프트웨어 애플리케이션(1701)은 조정이 완료될 때까지 새로운 데이터를 문서(1703)에 입력해서는 안되며, 및/또는 다른 스레드들 및/또는 응용 프로그램이 새로운 데이터를 문서(1703)에 입력하는 것을 허용해서도 안 된다. 문서 독립 분석 콘텍스트 오브젝트(1903)를 최초로 생성하는 처리와 같이, 조정 처리는 비교적 빠르며, 통상적으로 소프트웨어 애플리케이션(1701)의 동작에 상당한 영향을 미치지는 않을 것이다. 그러나, 필요에 따라, 시도된 사용자 입력은 캐쉬되어 조정 처리가 완료된 후에 입력될 수 있다.
잉크 분석 도구(1901)가 분석 결과들(2101)을 문서(1703)의 현재 상태에 대한 분석 콘텍스트 오브젝트(1709)로 조정한 후, 잉크 분석 도구(19901)는 선택적으로 조정된 분석 결과들을 또 다른 분석을 위한 제2 분석 처리에 제공할 수 있다. 예를 들어, 도 24에 도시된 바와 같이, 잉크 분석 도구(1901)는 조정된 파싱 결과들(2401)을 인식을 위한(예를 들어, 텍스트, 음악, 수학적 정보 또는 다른 특정 데이터 타입들의 핸드라이팅 인식을 위한) 잉크 인식 처리(2003)에 제공할 수 있다. 특히, 단계 1619에서 잉크 분석 도구(1901)는 제2 분석 처리를 수행하기 위한 분리된 분석 스레드를 다시 생성할 것이다. 잉크 분석 도구(1901)가 제2 분석 처리를 실행하기 위한 이러한 분리 스레드를 생성하기 때문에, 소프트웨어 애플리케이션(1701)은 단계 1621에서 일반 동작을 재개할 수 있으며, 심지어 새로운 전자 잉크 데이터(1705)를 포함하는 새로운 입력 데이터를 수용할 수도 있다.
다음으로, 단계 1623에서, 잉크 분석 도구(1901)는 제1 분석 처리로부터 제2 분석 처리로 조정된 결과들(2401)을 제공한다. 일단 제2 분석 처리가 시작되면, 애플리케이션(1701)은 새로운 미분석 잉크에 대해 제1 분석 처리의 또 다른 실행을 시작할 수 있다. 따라서, 다수의 분석 처리가 동시에 실행될 수 있으며, 그리하여 제1 분석 처리의 결과들에 대해 제2 분석 처리가 수행되는 동안, 애플리케이션(1701)은 분석 결과들의 다음 세트를 준비하기 위해 제1 분석 처리를 재시작할 수 있다.
유리하게, 분석 처리들을 병렬적으로 실행하는 것은 소프트웨어 애플리케이션(1701)의 동작을 개선시킬 수 있다. 예를 들어, 파싱 분석 처리는 통상적으로 인식 분석 처리에 비해 빠르며, 인식 분석 결과들을 사용하는 일 없이 정확한 선택 동작 및 공간-삽입(space-insertion) 동작을 구현하기 위해 파싱 분석 결과들이 사용될 수 있다. 따라서, 다른 분석 처리들이 병렬적으로 실행될 수 있으므로, 문서(1703)에 추가된 새로운 잉크는, 선택되거나 또는 공간이 그 안에 정확하게 삽입되기 전에, 오래된 잉크 데이터에 대해 인식 분석 처리가 완료되는 것을 기다릴 필요가 없다. 또한, 본 발명의 각종 실시예들은, 유지 보수성(maintainability)을 향상시키고 및 두 그룹에 대한 개발 처리를 간소화하면서, 파서 및 인식기 알고리즘 개발자들및 애플리케이션 개발자들을 멀티스레딩 문제들로부터 해방시키도록 비동기적 잉크 분석을 실현하며, 애플리케이션에 대한 변경 없이 분석 처리들 간의 상호작용에 대한 변경을 허용한다.
상술한 바와 같이, 잉크 분석 도구(1901)는, 분석 결과들(2101)의 관련 부분들을 포함하도록 업데이트된 후의 새로운 문서 독립 분석 콘텍스트 오브젝트(1903)를 분석 문서 오브젝트(1703)로부터 생성함으로써 조정된 분석 결과들을 제공할 수 있다. 그러나, 본 발명의 다른 예들에서, 잉크 분석 도구(1901)는 문서(1703)의 현재 상태를 반영하기 위해 원래의 문서 독립 분석 콘텍스트 오브젝트(1903)를 분석 결과들(2101)로 간단히 업데이트할 수 있다. 또한, 잉크 분석 도구(1901)는, 간단하게, 분석될 관련 잉크 데이터를 제2 분석 처리에 더 제공할 수 있다.
그러므로, 본 발명의 각종 실시예들은, 후속 분석 처리를 실행하기 전에, 문서(1703)의 현재 상태로 앞선 분석 처리의 결과들을 조정한다. 그러나, 이러한 중간 조정 단계는 본 발명의 몇 가지 예시들에서 생략될 수 있음을 이해해야 한다. 특히, 본 발명의 몇 가지 예시들에서, 앞선 분석 처리의 결과들은, 그 결과들을 문서(1703)의 현재 상태로 조정하지 않고, 후속 분석 처리에 바로 제공될 수 있다. 예를 들어, 잉크 분석기 처리가 잉크 레이아웃 처리로부터 분리되어 제공된다면, 핸드라이팅된 텍스트로 분류된 잉크는 중간 조정 단계 없이 잉크 레이아웃 분석기 처리에 제공될 수 있다.
어느 배열에서든, 제2 분석 처리(2003)가 제1 분석 처리로부터의 조정된 결과들(2401)의 분석을 완료한 후에, 제2 분석 처리(2003)는 도 25에 도시된 바와 같이 그 결과들(2501)을 잉크 분석 도구(1901)로 리턴한다. 이어서 잉크 분석 도구(1901)는 단계 1625에서 소프트웨어 애플리케이션(1701)에 제2 분석의 결과들(2501)을 알린다.
상술한 바와 같이, 제2 분석 처리가 제1 분석 처리의 조정된 결과들(2401)을 분석하는 동안, 소프트웨어 애플리케이션(1701)은 새로운 전자 잉크 데이터(1705)를 포함하는 새로운 데이터를 문서(1703)에 입력할 수 있다. 그러므로, 제2 분석 처리 결과들(2501)은 문서(1703)의 현재 상태에 더 이상 적용될 수 없다. 따라서, 제2 분석 처리(2003)의 결과들(2501)은 또한 단계 1627에서 문서(1703)의 현재 상태로 조정되어야 한다. 예시적인 조정 처리가 도 26에 개괄적으로 도시되며, 이는 이하에서 보다 상세하게 기재될 것이다.
다시, 본 발명의 몇가지 예들로서, 소프트웨어 애플리케이션(1701)은 제2 분석 결과들(2501)을 문서(1703)의 현재 상태로 수동으로 조정할 수 있다. 대안으로, 본 발명의 다른 예들로서, 잉크 분석 도구(1901)는 분석 결과들(2101)을 현재 분석 콘텍스트 오브젝트(1709)로 조정하는 조정 기능을 제공할 수 있다. 이러한 조정 기능은 제2 분석 처리로부터의 분석 결과들(2501)과 문서(1703)의 현재 상태에 대한 분석 콘텍스트 오브젝트(1709) 간의 대립 또는 "충돌"을 식별할 것이며, 이어서 잉크 분석 도구(1901)는 단계 1629에서 분석 결과들에 기초하여 분석 콘텍스트 오브젝트(1709)를 업데이트할 것이다. 이어서 이 처리는 분서 처리들이 실행되는 동안 새로운 잉크 입력 또는 잉크를 분석하는데 필요한 만큼 반복될 수 있다.
상술한 바로부터, 본 발명의 각종 실시예들에 따른 잉크 분석 기술들에 의해 전자 잉크가 소프트웨어 애플리케이션(1701)으로부터 비동기적으로 분석되는 것이 가능하며, 소프트웨어 애플리케이션(1701)은 분석 처리 동안 새로운 전자 잉크를 포함하는 입력 데이터를 계속해서 받아들이는 것이 허용된다. 상술한 설명에서는 두 개의 분석 처리만을 기재하였으나, 임의의 수의 분석 처리가 병렬적으로 동시에 실행될 수 있음을 알아야 한다. 예를 들어, 본 발명의 여러 가지 구현들은 제1 파싱 처리, 제2 파싱 처리 및 인식 처리를 이용할 수 있다. 이러한 방식으로, 일단 각각의 분석 처리가 완료되면, 그 결과들은 다음 분석 처리에 전달될 수 있으며, 제1 분석 처리는 다시 새롭게 입력된 잉크에 동시에 병렬적으로 실행될 수 있다.
또한, 본 발명의 각종 실시예들에서, 하나 이상의 분석 처리가 순차적으로 실행될 수 있다. 예를 들어, 몇가지 소프트웨어 애플리케이션들로서, 사용자는, 잉크 스트록 또는 스트록들의 조합에 대하여 (영어(English) 또는 일어(Japanese)와 같은) 특정 언어를 지정할 수 있다. 이어서 이러한 언어 지정은 분석 콘텍스트 오브젝트(1709) 및 문서 독립 분석 콘텍스트 오브젝트(1903)에 포함될 수 있다. 언어 지정에 기초하여, 잉크 분석 도구(1901)는 제1 언어로 지정된 전자 잉크를 그 제1 언어에 맞는(tailored) 인식 처리로 라우팅하고, 후속하여 제2 언어로 지정된 전자 잉크를 제2 언어에 맞는 다른 인식 처리로 라우팅할 수 있다. 이러한 동일한 방식으로, 기타 특정 타입들로 분류 및/또는 지정된 입력 데이터가, 음악용 인식기들, 전기 기호들, 수학 기호들, 플로우차트 모양들, 그래픽 모양들 등과 같은 기타 특정 인식기들로 보내질 수 있다.
아울러, 분석 처리들은 소프트웨어 애플리케이션(1701)의 일부일 필요는 없으므로, 임의의 희망하는 분석 처리가 소프트웨어 애플리케이션(1701)에서 전자 잉크를 분석하는데 사용될 수 있다. 예를 들어, 소프트웨어 애플리케이션 개발자는, 소프트웨어 애플리케이션(1701)에 대해 예상되는 전자 잉크 입력을 분석하는데 특히 적절한 파싱 처리 또는 인식 처리를 개발하여 사용할 수 있다.
이러한 기술들의 또다른 변형들이 본 발명의 여러 구현에 의해 사용될 수 있다. 예를 들어, 몇몇 상황에서, 소프트웨어 애플리케이션(1701)이 문서(1703) 내의 여러가지 문서 엘리먼트들 간의 관계를 반영하는 내부 문서 트리를 유지하는 것은 바람직하지 않을 수 있다. 대신, 소프트웨어 애플리케이션(1701)은 전자 잉크 입력에 관한 간단한 상태 정보를 이용하는 것만을 목적으로 할 수 있다. 이러한 소프트웨어 애플리케이션들(1701)에서, 소프트웨어 애플리케이션(1701)은 전체 문서(1703)의 현재 상태를 반영하는 분석 콘텍스트 오브젝트(1709)를 생성하는 것을 생략할 수 있다. 오히려, 소프트웨어 애플리케이션(1701)은, 소프트웨어 애플리케이션(1701)이 분석하기를 희망하였던 특정 잉크 입력에 관한 정보를 단지 포함하기만 하는 특정-목적의 분석 콘텍스트 오브젝트(1709)를 생성할 수 있다. 특정-목적의 분석 콘텍스트 오브젝트(1709)를 사용하는 것에 의해, 소프트웨어 애플리케이션(1701)은, 문서 내의 잉크를 분석하기 위해 원하는 분석 처리들을 사용할 수 있으면서도, 문서(1703)의 상태에 대응하는 내부 데이터 구조를 유지하는 것의 복잡함을 피할 수 있다.
또한, 상술한 설명에서는 전자 잉크의 비동기성 분석에 대해 설명하였으나, 본 발명의 여러 실시예들은 잉크 분석 도구(1901)가 잉크를 동기적으로 분석하는 것도 허용함을 알아야 한다. 예를 들어, 본 발명의 몇 가지 구현들은, 소프트웨어 애플리케이션(1701)이 전자 잉크의 즉각적이고 동기적인 분석을 수행하도록 잉크 분석 도구(1901)에게 명령하는 것을 허용한다. 또한, 동기적인 분석은, 전체 문서(1703) 또는 단지 문서(1703)의 특정 영역 내의 잉크에 대한 것일 수 있다.
<잉크 분석 도구>
앞서 논의된 바와 같이, 잉크 분석 도구(1901)는 전자 잉크의 처리를 용이하게 하기 위해 여러가지 기능들을 수행한다. 예를 들어, 본 발명의 여러가지 구현들에 따르면, 잉크 분석 도구(1901)는 분석될 잉크 데이터를 갖는 문서(1703) 내의 하나 이상의 영역을 지정하는 소프트웨어 애플리케이션(1701)으로부터의 정보를 수신하고, 그 영역들에 관한 정보를 획득하기 위해 소프트웨어 애플리케이션(1701)에 대해 질의하고, 이어서 정보에 기초하여 문서 독립 분석 콘텍스트 오브젝트(1903)를 구성한다. 또한, 잉크 분석 도구(1901)는 분석을 위한 하나 이상의 분석 처리들에 문서 독립 분석 콘텍스트 오브젝트(1903)를 제공하고, 이어서 분석 처리의 결과들을 문서(1703)의 현재 상태로 조정한다. 다양한 처리들이, 본원 발명으로부터 벗어나지 않는 범위 내에서, (상술한 바와 같이) 분리된 스레드들을 사용하여, 스레드 풀(thread pool)을 통해서, 클러스트에서의 분리된 머신들을 통해서, 또는 분리된 처리들로서, 또는 임의의 다른 적절한 방식 또는 원하는 방식으로 수행될 수 있다.
본 발명의 다른 예들에 따르면, 잉크 분석 도구(1901)를 구현하고 이러한 기능들을 수행하기 위해 여러 소프트웨어 오브젝트들 및 도구들이 사용될 수 있다. 그러나, 본 발명의 몇 가지 예시들에서, 잉크 분석 도구(1901)는 응용 프로그래밍 인터페이스(API)로서 구현될 수 있다. 특히, 본 발명의 몇 가지 예시들에 따르면, 잉크 분석 도구(1901)는, 문서(1703) 내의 잉크를 분석하는데 필요한 경우 소프트웨어 애플리케이션(1701)에 의해 호출될 수 있는 소프트웨어 오브젝트 루틴들과 관련 정보의 그룹으로서 구현될 수 있다.
본 기술분야의 통상의 지식을 가진 자라면 이해할 수 있는 바와 같이, 응용 프로그래밍 인터페이스는 소프트웨어 오브젝트들에 관한 "클래스들(classes)" 또는 카테고리들로 조직될 수 있다. "오브젝트"는 저장가능한 상태 값들 및 실행가능한 동작들의 콜렉션(collection)이다. 특히, 오브젝트는, 오브젝트와 연관되거나 그 오브젝트에 의해 검색될 수 있는, "필드들(fields)" 및 "속성들(properties)"로 지칭되는 서로 다른 타입들의 상태 값들을 유지할 수 있다. 외부의 소프트웨어 애플리케이션 또는 또다른 소프트웨어 오브젝트에 있어서, 이러한 속성들은 판독 전용(read only)(용어 "{get;}"의 사용에 의해 식별됨), 기록 전용(write only)(용어 "{set;}"의 사용자에 의해 식별됨), 또는 판독가능 및 기록가능 두 가지 모두("{get; set}"으로 식별됨)일 수 있다. 오브젝트는, 종종 소프트웨어 애플리케이션 또는 또 다른 오브젝트의 요청 또는 "호출"에서, 태스크들 또는 "메소드들"을 실행할 수 있다. 그러므로, 애플리케이션 프로그래밍 인터페이스는, 요청시 특정 태스크들을 수행하거나 또는 특정 정보를 제공하도록 또 다른 소프트웨어 애플리케이션이 명령할 수 있는 여러가지 오브젝트들을 포함할 수 있다.
본 발명의 여러 실시예들은, 소프트웨어 애플리케이션(1701)이 원하는 분석 처리를 완료하는데 필요한 최소량의 정보만을 제공할 것을 요구하도록 구현될 수 있음을 알아야 한다. 이러한 이유로, 이하에 상세하게 설명하는 몇 가지 속성들이 단지 판독 전용(즉 "{get;}") 또는 기록 전용(즉, "{set;}") 속성들로서 설명될 수 있으나, 본 발명의 여러가지 대안의 구현들에서는 판독가능 및 기록가능 두 가지 모두가 될 수 있다. 예를 들어, 전자 잉크를 분석하기 위해 분석 처리에 의해 사용될 "힌트들"을 정의하는 속성은, 소프트웨어 애플리케이션(1701)이 힌트들을 사용하는 것으로 의도되어서는 안 되는 상황들에서는 판독 전용 속성으로서 식별될 수 있다. 이는 잉크 분석기에 의해 생성된 오브젝트가 적어도 이러한 속성을 판독하도록 허용하고, 이러한 속성의 값이 널(null)인 디폴트(default) 값임(즉, 소프트웨어 애플리케이션(1701)이 어떠한 "힌트들"도 원하지 않음)을 결정한다. 그러나, 소프트웨어 애플리케이션(1701)이 잉크 분석을 위해 힌트들을 사용하기를 원할 경우, 소프트웨어 애플리케이션(1701)이 원하는 힌트들을 지정하기 위해 이러한 속성의 값을 널 값으로부터 변경하는 것을 허용하기 위해 이러한 속성은 판독가능과 기록가능 두 가지 모두가 될 것이다.
본 발명의 여러 실시예들에 따르면, 잉크 분석 도구(1901)의 구현을 구체화하는 API(이후 잉크 분석 API로서 언급됨)는 두 개의 코어 클래스를 포함할 수 있다. 그 첫 번째 클래스는 "Analysis Context" 클래스로 지칭될 것이며, 두 번째 클래스는 "Ink Analyzer" 클래스이다. "Analysis Context" 클래스의 컴포넌트들은 분석 콘텍스트 오브젝트(1709)를 생성하는데 사용된다. 따라서, 소프트웨어 애플리케이션(1701)이 자신의 분석 콘텍스트 오브젝트(1701)를 생성하고 유지하는 본 발명의 여러가지 구현들에서, 이 클래스의 하나 이상의 컴포넌트는 잉크 분석 도구로부터 생략될 수 있다. 대신, 이러한 컴포넌트들 중 하나 이상이 소프트웨어 애플리케이션(1701) 자체에 의해 구현될 수 있다.
이어서 "Ink Analyzer" 클래스의 컴포넌트들은, 분석 처리에 문서 독립 분석 콘텍스트 오브젝트(1903)를 제공하는 오브젝트를 생성하고 이용하기 위해 사용될 수 있으며, 분석 결과들이 생성된 시점을 결정하고 분석 결과들을 문서(1703)의 현재 상태로 조정하기 위해 사용될 수 있다. 이하에서는 본 발명의 여러 실시예에 따른 잉크 분석 API에 포함될 수 있는 이러한 클래스들 및 기타 클래스가 상세히 설명된다.
우선 분석 콘텍스트 클래스로 돌아가서, 이러한 클래스는 분석 콘텍스트 오브젝트(1703)을 생성하도록 호스트 애플리케이션(1701)에 의해 구현되며, 이는 소프트웨어 애플리케이션(1701)의 내부 문서 트리에서 프록시 뷰(proxy view)로서 역할을 수행한다. 대안으로, 상술 바와 같이, 애플리케이션이 자신의 분석 콘텍스트 오브젝트를 구현하는 경우, 이러한 클래스 내의 하나 이상의 구성요소는 잉크 분석 도구(1901)로부터 생략될 수 있다. 상술한 바와 같이, 분석 콘텍스트 오브젝트(1703)는 모든 미분석 잉크 데이터를 포함하고, 분석 콘텍스트 오브젝트(1703)는 어떤 미분석 잉크 데이터가 분석되어야 하는지를 식별하기 위해 사용된다. 분석 콘텍스트 오브젝트(1703)는 또한 이미 분석된 잉크에 대한 정보를 포함한다. 이러한 이미 분석된 잉크는 현재 미분석 잉크가 어떻게 분석되어야 하는지를 결정하기 위해 사용될 수 있으며, 스스로가 미분석 잉크를 분석하는 중에 변경될 수 있다. 또한, 분석 콘텐트 오브젝트(1703)는 문서(1703)의 비-잉크 콘텐트에 대한 정보를 포함하고, 이는 잉크를 비-잉크 콘텐트에 대한 주석들로 적절히 분류하기 위해 사용된다.
본 발명의 여러 실시예들에 따르면, 분석 콘텍스트 클래스는, 소프트웨어 애플리케이션(1701)에 의해 호출되면 분석 콘텍스트 오브젝트(1709)를 생성하는 생성자(constructor)를 포함한다. 이 클래스는 또한 "Dirty Region {get;}"으로 명명되는 속성을 포함하는 분석 콘텍스트 오브젝트(1709)에 대한 여러 속성들을 포함할 수 있다. 더티 영역 속성은 미분석 잉크 데이터를 포함하는 문서의 부분(그리고 분석 콘텍스트 오브젝트(1709)의 부분)을 정의한다. 본 발명의 여러 실시예들로서, 더티 영역은 해체 영역(disjoint area)을 정의할 수 있다. 더티 영역은 분석영역(AnalysisRegion)으로 특정되고, 이는 이하에 보다 자세히 기재될 것이지만, 간단히 문서 내의 직사각 영역들의 콜렉션일 수 있다. 더티 영역이 비어있는(empty) 경우, 분석은 발생하지 않을 것이다. 이러한 클래스는 "Margins {get;}"으로 명명되는 분석 콘텍스트 오브젝트에 대한 속성을 더 포함하고, 이는 고려된 여백들인, 문서(1703) 내의 페이지의 영역들을 선언한다. 예를 들어, 레이아웃을 분석하고 전자 잉크의 분류를 결정하는 분석 처리는, 비-잉크 콘텐트인 전자 잉크(예를 들어, 여백 상의 잉크)의 분류의 결정을 돕기 위해 이러한 속성을 사용할 수 있다.
또한, 분석 콘텍스트 클래스는 "Rootnode {get;}"로 명명되는 속성을 포함할 수 있고, 이는 분석 콘텍스트 오브젝트(1709)에서 최상의 콘텍스트 노드 또는 루트 콘텍스트 노드를 식별한다. 상술한 바와 같이, 이러한 루트 노드는 주어진 분석 콘텍스트 오브젝트(1709)에 대한 모든 다른 콘텍스트 노드들을 자식 콘텍스트 노드들로서 포함한다. 본 발명의 여러 실시예들로서, 루트 콘텍스트 노드는 콘텍스트 노드 타입 "Root"가 되어야 함을 알아야 한다. 애플리케이션(1701)이 자신의 분석 콘텍스트 오브젝트(1709)를 구현하는 본 발명의 예시들에서, 분석 콘텍스트 오브젝트(1709)는 루트 콘텍스트 노드의 형제들(siblings)과 같은 다른 콘텍스트 노드들을 가질 수 있으나, 잉크 분석기 클래스의 컴포넌트들은 루트 콘텍스트 노드에 의해 포함된 콘텍스트 노드들을 고려하는 것으로 제한될 수 있음을 또한 알아야 한다.
분석 콘텍스트 클래스는 속성 "Analysis Hints {get;}"을 추가적으로 포함할 수 있으며, 이는 소프트웨어 애플리케이션(1701)에 의해 설정된 분석 힌트 오브젝트들의 어레이를 리턴한다. 이하에 보다 상세하게 논의되는 바와 같이, 분석 힌트 오브젝트들은 분석 처리를 도울 수 있는 임의의 정보 타입을 포함할 수 있다. 이러한 정보는 예를 들어, 가이드 또는 단어 리스트를 팩토이드(factoids)로서 포함할 수 있다. 이는 또한 분석을 위해 사용될 언어를 설정하는 정보를 포함하거나, 리스트, 테이블, 모양, 플로우차트, 커넥터, 콘테이너 등으로서 잉크를 식별하는 것과 같은 파싱 처리에 임의의 종류의 안내(guidance)를 제공하거나 또는 미분석 잉크를 핸드라이팅된 텍스트로서만 또는 그림으로서만 지정하는 정보를 포함할 수 있다.
이러한 속성들에 부가하여, 분석 콘텍스트 클래스는 또한 예를 들어, 분석 콘텍스트 오브젝트(1709)가 태스크를 수행하도록 소프트웨어 애플리케이션(1701)에 의해 호출될 수 있는 여러 메소드들을 포함할 수 있다. 예를 들어, 분석 콘텍스트 클래스는 "FindNode (Guid id)"로 명명되는 메소드를 포함할 수 있다. 분석 콘텍스트 오브젝트(1709)의 각 노드는 전체적으로 유일한 식별자(globally unique identifier(즉, GUID)를 가지며, 이러한 메소드는 분석 콘텍스트 오브젝트(1709) 내의 어디엔가에서의 호출로 특정된 노드에 위치할 것이다. 이러한 메소드는 시간이 중요한(time critical) 많은 동작들로부터 호출될 수 있으므로, 이러한 룩업 메소드는 가능한 한 효율적으로 구현되어야 한다.
분석 콘텍스트 클래스와 마찬가지로, 잉크 분석기 클래스는 또한 소프트웨어 애플리케이션(1701)이 클래스의 인스턴스(즉, 잉크 분석기 오브젝트)를 생성하는 것을 허용하는 퍼블릭 생성자(public constructor)를 다양한 속성에 따라 정의한다. 예를 들어, 이는, 분석 처리의 결과들이 리턴되는 처리 스레드를 정의하는, "User Interface Context {get; set;}"으로 명명되는 속성을 포함할 수 있다. 이러한 속성은 그 결과들이 또다른 오브젝트에 동기화되는 것을 허용한다. 예를 들어, 이것이 주요 형태로 설정될 경우, 파서 결과들은 애플리케이션 메인 스레드에 파이어링(fired)될 것이다. 또한, 이는, 분석 처리에 사용될 수 있는 여러 가지 기준들을 특정하는 속성 "AnalysisOptions AnalysisOptions {get; set'}"을 포함할 수 있다. 이러한 기준들은 예를 들어, 텍스트 인식을 가능하게 하는 것, 테이블의 사용을 가능하게 하는 것, 리스트의 사용을 가능하게 하는 것, 주석의 사용을 가능하게 하는 것, 커넥터 및 콘테이너의 사용을 가능하게 하는 것을 포함할 수 있다.
잉크 분석기 클래스는 여러 메소드들을 포함할 것이다. 예를 들어, 이러한 클래스는 "AnalysisRegion Analyze ()"로 명명되는 메소드를 포함할 수 있다. 이러한 메소드는 동기 분석 처리를 시작한다. 문서 엘리먼트 데이터는 이러한 메소드로 전달되는데, 이는 문서(1703)의 현재 상태를 설명하고 문서(1703) 내의 어떤 잉크가 분석될 필요가 있는지를 표현한다. 본 발명의 몇몇 구현들에서, 문서 엘리먼트 데이터는 상술한 바와 같이, 분석 콘텍스트 오브젝트(1709)(즉, AnalysisRegion Analyze(Analysis Context))로서 제공될 수 있다. 대안으로, 개별 잉크 스트록들은, 스트록들(즉, AnalysisRegion Analyze(Strokes))에 대한 참조를 사용하거나, 분석 메소드로 전달되는 속성 없이 잉크 분석기 오브젝트(예를 들어, InkAnalyzer.Strokes {get; set})의 속성으로서 참조되어, 분석 처리로 전달될 수 있다.
일단 분석 처리가 완료되면, 이 메소드는 분석 처리의 결과들을 포함하도록 변경된 문서 독립 분석 콘텍스트 오브젝트에 대한 참조를 리턴할 것이다. 메소드는 또한 결과들이 계산된 문서 내의 영역을 기술하는 분석영역(AnalysisRegion) 값(이하에서 자세히 설명됨)을 리턴한다.
잉크 분석기 클래스는 또한 "AnalysisRegion Analyze(AnalsisContext, waitRegion)"으로 표시되는 메소드를 포함할 수 있다. 이 메소드는, 상술한 동기적인 Analysis Region Analyze () 메소드와 동일하지만, 특정 waitRegion 영역에서 결과들이 필요한 경우 분석되는 잉크를 단지 갖는다. 특히, 이 방법에 대한 호출은 문서(1703)에 대한 분석 콘텍스트 오브젝트(1709)와, 분석 처리가 동기적으로 분석해야 하는 분석 콘텍스트 오브젝트(1709)의 영역("waitRegion"으로 언급됨)을 식별할 것이다. 본 발명의 여러 실시예들에서, 분석 콘텍스트 오브젝트(1709)의 모든 다른 영역들은, 분석 처리가 waitRegion의 분석을 완료하기 위해 그 영역들 내의 콘텐트를 분석할 필요가 없다면, 무시될 것이다. 상술한 바와 같이, 이러한 메소드로 전달된 분석 콘텍스트 오브젝트(1709)는 분석을 필요로 하는 문서(1703)의 영역들을 기술하는 "DirtyRegion"으로 지칭되는 속성을 포함한다. 특정 waitRegion을 명시함으로써, 소프트웨어 애플리케이션(1701)은, 문서(1703) 내의 모든 잉크 데이터가 분석되도록 하는 것보다, 관심 있는 하나의 특정 영역에 대한 분석 결과들을 보다 신속하게 획득할 수 있다.
이러한 분석 메소드들 중 어느 것이 호출될 때, 모든 이용가능한 분석 처리가 실행될 것이다. 또한, 이러한 분석 메소드들은 동기적 호출들이기 때문에, 조정 처리를 그 종료시에 실행할 필요가 없으며, 완료한다 해도 이벤트 파이어를 실행하지 않을 것이다.
잉크 분석기 클래스는 또한 "BackgroundAnalyze(AnalysisContext)"로 표시되는 메소드를 포함한다. 이 메소드는 특정된 분석 동작을 개시하지만, 별도의 배경(background) 분석 스레드에 대해서도 진행한다. 그러므로, 이 메소드는, 실제의 분석 동작이 배경(background)에서 완료되면 거의 즉시 메인 처리 스레드로 제어를 리턴할 것이다. 특히, 이 메소드는 분석 처리가 성공적으로 개시되었으면 "참(true)"의 값을 리턴할 것이다. 다시, 메소드로 전달된 분석 콘텍스트 (AnalysisContext) 값은, 문서(1703)에 대한 분석 콘텍스트 오브젝트(1709)를 식별하고, 문서(1703) 내의 어떤 잉크가 분석될 필요가 있는지를 나타낸다. 일단 배경 스레드에 대한 분석 동작이 완료되면, 소프트웨어 애플리케이션(1701)이 결과들에 액세스하는 것을 허용하기 위해 결과(Results) 이벤트가 제기된다. 그 이벤트는 결과들과 조정 메소드를 포함하는데, 조정 메소드는 결과들이 리턴될 때 문서(1703)의 현재 상태에 대한 분석 콘텍스트 오브젝트(1709)로 결과들을 다시 통합시키기 위해 사용된다.
이러한 3개의 분석 메소드들 각각은 차례대로, 이하에서 상세하게 논의되는 바와 같이, "Analysis Region(분석 영역)" 클래스에서의 메소드 "Clone(클론)"을 차례로 호출함을 알아야 한다. "Clone(클론)" 메소드를 사용하여, 이러한 분석 메소드들은 분석 결과들을 보여주기 위해 분석 처리에 의해 후속하여 변경되는 독립 문서 분석 콘텍스트 오브젝트를 생성한다.
잉크 분석기 클래스는, 또한 배경 분석 (분석 콘텍스트) (BackgroundAnalyze(AnalysisContext)) 메소드를 호출함으로써 발생되는 결과 이벤트를 수신한 후에 소프트웨어 애플리케이션(1701)이 호출하는 "Reconcile(AnalysisContext current, AnalysisResultsEventArgs resultArgs)"로 표시되는 메소드를 포함할 수 있다. 조정 메소드는 문서 독립 분석 콘텍스트 오브젝트에 포함되는 분석 결과들을, 소프트웨어 애플리케이션(1701)에 의해 유지되는 분석 콘텍스트 오브젝트(1709)의 현재 버전과 비교한다. 이 메소드는 분석 콘텍스트 오브젝트(1709)의 현재 버전에서 제거되거나 추가될 필요가 있는 노드들을 식별하고, 존재하는 노드의 속성들인, 인식 결과들, 위치, 노드와 연관된 잉크 스트록들 또는 분석 동작의 결과들과 연관된 임의의 다른 데이터 중 임의의 것이 변경되었는지를 식별한다. 이 메소드는 또한 이러한 식별된 변경들을 분석 콘텍스트 오브젝트(1709)의 현재 버전에 기록한다. 이 메소드는 라인 콘텍스트 노드 상의 단어 콘텍스트 노드들의 순서와 같은 콘텍스트 노드 순서에 민감하다.
분석 결과들(즉, 속성 AnalysisResultsEventArgs의 값)은, 퍼블릭 결과 구조(public results structure) 및 프라이빗 결과 구조(private results structure)를 포함하기 때문에, 이 메소드로 다시 전달된다. 퍼블릭 구조는 리턴되므로 소프트웨어 애플리케이션(1701)이 조정 단계에서 발생하게 되는 변경들을 미리 볼 수 있다. 프라이빗 구조는 소프트웨어 애플리케이션(1701)이 조정 처리 전에 분석 결과들 중 임의의 것이 변경되는 것을 방지하기 위해 포함된다.
잉크 분석기 클래스는 또한 "Recognizers RecognizersPriority()" 및 "SetHighestPriorityRecognizer(recognizer)"로 표시된 메소드들을 포함할 수 있다. 잉크가 인식될 필요가 있는 경우, 언어들 및 능력들에 기초하여 적절한 인식기가 사용될 것이다. 따라서, Recognizers RecognizerPriority() 메소드는 잉크 분석기 오브젝트에 의해 평가될 순서로 인식 처리들을 리턴한다. 그 순서는 인식 처리들이 이용가능한지에 의존하여 시스템마다 결정되지만, 잉크 분석기 오브젝트상의 SetHighestPriorityRecognizer(recognizer)를 호출함으로써 소프트웨어 애플리케이션(1701)에 대해 오버라이드될 수 있다. 잉크 분석기는 적절한 인식기가 발견될 때까지 이러한 순서 리스트를 열거할 것이다. SetHighestPriorityRecognizer(recognizer) 메소드는 인식 처리의 우선순위를 제기한다. 특정 인식 처리의 우선순위를 제기함으로써, 인식 처리는, 현재 인식 동작의 요구되는 언어 및 능력들에 부합할 경우 사용될 것이다. 본질적으로, 그 SetHighestPriorityRecognizer(recognizer)는 지정된 인식 처리를 인식기우선순위(RecognizersPriority) 메소드에 의해 리턴되는 리스트의 최상부(top)에 푸시한다.
잉크 분석 API는 또한 분석 콘텍스트 클래스 및 잉크 분석기 클래스에 추가하여 클래스들을 포함할 수 있다. 예를 들어, 본 발명의 각종 실시예들에 따른 ㅇ잉크 분석 API는 콘텍스트 노드 클래스를 포함할 수 있다. 이러한 클래스는 "ContextNodeType Type {get;}"으로 표시된 속성과 같은, 문서 독립 분석 콘텍스트 오브젝트 및 분석 콘텍스트 노드(1709)를 구성하는 콘텍스트 노드들에 관한 다양한 컨포넌트들을 포함할 수 있다. 본 기술분야의 통상의 지식을 가진 자가 이해할 수 있는 바와 같이, 각 콘텍스트 노드는 타입을 가지며, 각 타입이 고수해야 하는 특정한 규칙들의 세트가 있다. 이는, 예를 들어, 자식 콘텍스트 노드들의 어떤 타입들이 허용되는지, 그리고 스트록들이 콘텍스트 노드에 바로 연관될 수 있는지 아니면 그 자식 콘텍스트 노드들을 통해서만 연관되는지와 같은 규칙들을 포함한다.
콘텍스트 노드들의 가능한 타입들은 콘텍스트 노드 타입(ContextNodeTypes) 열거로 정의될 수 있으며 예를 들어, 다음의 타입들: 비-텍스트 데이터(non-text data)를 주석하는 잉크 데이터를 나타내는 잉크 주석 노드; 그림을 형성하는 잉크 데이터를 나타내는 잉크 그림 노드; 단어를 형성하는 잉크 데이터를 나타내는 잉크 단어 노드, 하나 이상의 잉크 워드 노드들을 포함하는 라인 노드 및/또는 텍스트의 라인을 형성하는 단어들에 대한 텍스트 워드 노드들; 리스트 내에 예상되는 단락, 이미지 등의 노드들을 포함할 수 있는 리스트 항목 노드; 및 리스트 내에 엔트리를 각각 기재하는 하나 이상의 리스트 항목 노드들을 포함하는 리스트 노드를 포함할 수 있다. 노드 타입들은 또한 비-잉크 그림 이미지를 나타내는 비 잉크 그림 노드; 콘텍스트노드 타입 열거의 다른 값들에 의해 커버되지 않는 데이터를 나타내는 오브젝트 노드; 단락을 형성하는 라인들에 대응하는 하나 이상의 라인 노드들을 포함하는 단락 노드; 픽쳐 미이지를 나타내는 그림 또는 이미지 노드; 분석 콘텍스트 오브젝트에서 최상의 노드로서 역할을 하는 루트 노드; 테이블을 구성하는 항목들을 나타내는 노드들을 포함하는 테이블 노드; 텍스트 박스를 나타내는 텍스트 상자 노드; 텍스트 워드 노드; 및 아직 미분류 잉크 데이터에 대응하는 미분류 잉크(UnclassifiedInk) 노드를 포함할 수 있다. 그 노드 타입들은 또한 다른 노드들의 그룹들에 대한 그룹 노드, 불릿 항목들에 대한 잉크 불릿(InkBullet) 노드, 테이블의 행에 제시된 문서 엘리먼트들에 대한 행(Row) 노드, 및 테이블의 셀에 제시된 문서 엘리먼트들에 대한 셀 노드를 포함할 수 있다.
콘텍스트 노드(Context Node) 클래스는 또한 현재 콘텍스트 노드에 대한 세계적 단일 식별자인, "GUID Id {get;}"으로 명명된 속성을 포함할 수 있다. 임의의 원하는 콘텍스트 노드로의 액세스를 허용하기 위해서, 단일 분석 콘텍스트 오브젝트 내의 각각의 콘텍스트 노드가 항상 단일 식별자를 가져야 한다. 이러한 클래스는 또한 관련 콘텍스트 노드가 실제로 위치된 문서 공간 내의 위치를 식별하는, "AnalysisRegion Location {get;}"으로 명명된 속성을 포함할 수 있다. 앞서 언급된 바와 같이, 분석 영역(AnalysisRegion)이 하나 이상의 가능한 해체 사각형 구조들을 함께 그룹화하는 이차원 구조이다. 이러한 클래스는 또한 이는 관련 콘텍스트 노드와 연관된 잉크 스트록들을 식별하는, "StrokeCollection Strokes {get;}"으로 명명된 속성을 포함할 수 있다. 본 발명의 각종 실시예들로서, (단어, 그림, 및 불릿 노드들과 같은) 단지 리프 콘텍스트 노드들이 스트록들을 갖기 위해 잉크 분석 API에 의해 허용된다. 소프트웨어 애플리케이션(1701)은 모든 조상(ancestor) 콘텍스트 노드들에 의해 리프 노드 레벨로 스트록들을 참조하기 위해 이러한 속성들을 사용할 수 있다(예를 들어, 루트 노드는 모든 스트록들에 대한 스트록 참조를 관련 분석 콘텍스트 오브젝트 내에 포함할 것이다).
또한, 이러한 클래스는 관련 콘텍스트 노드를 포함하는 부모 콘텍스트 노드를 식별하는, "ContextNode ParentNode {get;}"으로 명명된 속성을 포함할 수 있다. 본 발명의 각종 실시예들로서, 콘텍스트 노드들은 루트(Root) 콘텍스트 노드가 분석 콘텍스트 오브젝트의 정적인 수인, 부모 콘텍스트 노드로부터 의존하기 위해 항상 생성된다. 이 클래스는 또한 관련 콘텍스트 노드의 직접 자식인 모든 콘텍스트 노드를 식별하는 속성 "ContextNode[]SubNodes {get;}"를 포함할 수 있다. 즉, 이러한 속성은 분석 콘텍스트 오브젝트에서 한 레벨 아래의 자식 콘텍스트 노드들을 단지 식별할 것이다. 예를 들어, 이러한 단락 콘텍스트 노드에 대한 속성의 값은 단락 노드에 의해 포함되는 라인 콘텍스트 노드들만을 단지 식별할 것이며, 라인 콘텍스트 노드의 자식인 단어 콘텍스트 노드들은 식별하지 않을 것이다.
이러한 클래스는 또한 인식 결과가 하나 이상의 텍스트의 라인을 하나 이상의 언어로 표현할 수 있기 때문에, 관련 인식 분석 처리 또는 처리들에 의해 계산된 인식 결과들을 제공하는, "RecognitionResult RecognitionResult {get;}"으로 표시되는 속성을 포함할 수 있다. 인식 결과는, 인식 분석 처리에 의해 설정되고 인식 결과 오브젝트을 생성하는데 사용되는 인식 결과 속성(이하에 보다 상세하게 기재됨)이 데이터의 복제를 피하기 위해 콘텍스트 노드 트리의 하나의 레벨로만 설정될 수 있을지라도, 문서 독립 분석 콘텍스트 오브젝트 내의 모든 콘텍스트 노드가 이용가능하다. 노드는, 그와 연관된 인식 데이터를 갖지 않을 경우, 그 서브노드들 모두의 인식 결과를 합병하거나 그 부모로부터 인식 결과를 추출할 것이다. 이러한 클래스는 또한 인식 결과 값의 지속적인 형태인, "Stream RecognitionData {get; set;}"으로 표시되는 속성을 포함할 수 있다. 다시, 인식 분석 처리는 관련 콘텍스트 노드로 설정된 스트림 인식데이터 값을 생성한다. 이어서 이러한 값에 기초하여 인식 결과 오브젝트가 구성된다.
콘텍스트 노드 클래스는 콘텍스트 링크 오브젝트들의 어레이를 제공하는, "ContextLink[] Links {get;}"으로 표시되는 속성을 더 포함할 수 있다. 콘텍스트 링크 오브젝트는 두 개의 콘텍스트 노드들 간의 대체가능한 관계를 설명한다. 콘텍스트 노드들은 통상적으로 다른 콘텍스트 노드들과 부-자 관계를 갖는 반면, 콘텍스트 링크는 콘텍스트 노드들 간의 대안의 관계를 허용한다. 예를 들어, 콘텍스트 링크가 두 개의 콘텍스트 노드들 간의 연결, 또 다른 콘텍스트 노드에 하나의 콘텍스트 노드의 고정(anchoring), 또 다른 콘텍스트 노드에 의한 하나의 콘텍스트 노드의 억제, 또는 소프트웨어 애플리케이션(1701)에 의해 정의된 원하는 링크 타입을 허용할 수 있다. 콘텍스트 링크는, 이하에 보다 상세하게 논의되는 링크 추가 메소드를 호출함으로써 이러한 어레이에 추가될 수 있다. 유사하게, 콘텍스트 링크는 이하에 보다 상세하게 논의된 링크 삭제 메소드를 호출함으로써 이러한 어레이로부터 제거될 수 있다.
또한, 이러한 클래스는 속성들 "IsContainer {get;}" 및 "IsInkLeaf {get;}"을 포함할 수 있다. 속성 IsContainer {get;}은 관련 콘텍스트 노드가 리프 콘텍스트 노드가 아닌 경우(즉, 관련 콘텍스트 노드가 자식 콘텍스트 노드들을 포함하고 그리하여 콘테이너 콘텍스트 노드로 고려되면), "참" 값을 갖고, 그렇지 않으면 "거짓(false)" 값을 갖는다. IsInkLeaf {get;} 속성은 현재 콘텍스트 노드가 콘테이너 콘텍스트 노드가 아닌 경우 "참" 값을 갖고, 그렇지 않으면 "거짓" 값을 갖는다. 즉, 현재 콘텍스트 노드가 임의의 자식 콘텍스트 노드들을 포함하지 않는다면, 리프 콘텍스트 노드로 고려된다. 본 발명의 여러 실시예들로서, 잉크 리프 콘텍스트 노드는 스트록 데이터에 대한 참조들을 포함하는 것으로 기대되나, 콘테이너 콘텍스트 노드들은 이러한 제한을 갖는 것은 아니다. 콘테이너 콘텍스트 노드들은 소프트웨어 애플리케이션(1701)에 의해 지정되는 바와 같은 스트록 데이터를 참조하거나 참조하지 않을 수 있다.
콘텍스트 노드 클래스는 또한 속성 "Rect RotatedBoundingBox {get; set;}"을 포함할 수 있다. 이러한 속성의 값은 레이아웃 및 분류 분석 처리에 의해 계산된다. 관련 콘텍스트 노드와 연관된 잉크 데이터가 비스듬히 기재되는 경우, 그 콘텍스트 노드에 대한 바운드들은 여전히 수평 정렬될 것이다. 그러나, 회전된 바운딩 상자(RotatedBoundingBox) 속성의 값은 관련 콘텍스트 노드와 연관된 잉크 데이터가 기재된 각도로 정렬될 것이다. 또한, 이러한 클래스는, 관련 콘텍스트 노드의 값들을 변경하는 것이 허용되는지를 잉크 분석기에 알리는 속성 "ReClassifiable {get;}"을 포함할 수 있다.
이러한 속성들에 부가하여, 콘텍스트 노드 클래스는 또한 여러 메소드를 포함할 수 있다. 예를 들어, 이러한 클래스는 "ContextNode CreateSubNode(ContextNodeType type)"으로 표시되는 메소드를 포함한다. 이러한 메소드는 특정 타입의 자식 콘텍스트 노드의 생성을 허용한다. 본 발명의 여러 실시예들로서, 이러한 메소드는 단지 관련 콘텍스트 노드의 유효한 자식 타입들이 생성되도록 허용할 수 있으며, 그리하여 기형의 데이터 구조들이 생성되는 것이 방지된다. 예를 들어, 이 메소드는 단지 라인 콘텍스트 노드가 잉크 단어 및 텍스트 단어 콘텍스트 노드를 생성하도록 허용할 수 있다. 이 클래스는 또한 참조되는 자식 콘텍스트 노드를 관련 분석 콘텍스트 오브젝트로부터 삭제하는, "void DeleteSubNode(ContextNode node)"로 표시되는 메소드를 포함할 수 있다. 그러나, 본 발명의 여러 실시예들에서, 참조된 콘텍스트 노드가 스트록들 또는 자식 콘텍스트 노드들을 포함하는 경우, 이러한 메소드는 실패해야 한다는 점을 알아야 한다. 또한, 참조 콘텍스트 노드가 관련 콘텍스트 노드의 직접적인 자식이 아닌 경우, 이 메소드는 실패한다. 소프트웨어 애플리케이션(1701)이 자신의 분석 콘텍스트 오브젝트(1709)을 구현하고 차례로 이 메소드를 이용할 경우, 분석 콘텍스트 오브젝트(1709)에서의 기형의 데이터 구조를 방지하기 위하여, 비어있지 않은(non-empty) 콘텍스트 노드들 또는 관련 콘텍스트 노드의 직접적인 자식들이 아닌 콘텍스트 노드들은 삭제되지 않아야 함을 알아야 한다.
또한, 이러한 클래스는 그 특정 영역 내에 위치된 콘텍스트 노드의 어레이를 리턴하는, 메소드 "ContextNode[] HitTestSubNodes(AnalysisRegion region)"를 포함할 수 있다. 그러나, 모든 자손들(descendants)이 아닌, 이러한 엘리먼트의 직접적인 자식 노드들만이 리턴됨을 알아야 한다. 그 영역은 앞서 언급된 바와 같이, 하나 이상의 직사각형들의 콜렉션일 수 있는, 분석 영역 오브젝트에 의해 정의된다. 본 발명의 각종 실시예들에 따라서, 콘텍스트 노드의 위치의 임의의 부분이 특정 영역을 가로지를(intersect) 경우, 콘텍스트 노드는 어레이로 리턴될 것이다. 이 메소드는, 예를 들어, 문서 독립 분석 콘텍스트 오브젝트를 생성하여 그 분석 결과들을 문서(1703)의 현재 상태에 대응하는 분석 콘텍스트 오브젝트로 조정하기 위해 사용된다. 그러므로, 이 메소드는 빈번하게 호출되며, 잉크 분석기 오브젝트에 의한 고속의 반복되는 액세스에 대해 최적화되어야 한다.
콘텍스트 노드 클래스는 또한 "MoveStroke(Stroke stroke, ContextNode destination)"으로 표시되는 메소드를 포함한다. 이 메소드는 하나의 리프 콘텍스트 노드로부터 또 다른 노드로 스트록의 연관성(association)을 이동시킨다. 본 발명의 여러 실시예들로서, 이 메소드는 리프 콘텍스트 노드들 사이에서만 사용된다. 이는 또한 형제 콘텍스트 노드들에 대한 관련 콘텍스트 노드의 순서를 다시 하는(reorder), "MoveSubNodeToPosition(int OldIndex, int NewIndex)"로 표시되는 메소드를 포함할 수 있다. 예를 들어, 문서(1703)가 한 라인 상에 3개의 단어들, 예를 들어 단어 1, 단어 2, 단어 3을 갖는다면, 그들의 순서는 부모 콘텍스트 노드로부터 리턴되는 서브노드들의 어레이에 의해 암시(imply)된다. 이 메소드는 그들의 순서가 변경되도록 허용하여, 관련 콘텍스트 노드와 관련하여, 단어 1에 대한 콘텍스트 노드를 위치 1로부터 위치 3으로 이동시킴으로써 단어 1이 라인 상의 마지막 단어가 되도록 특정된다.
또한, 이러한 클래스는 현재 콘텍스트 노드에 새로운 콘텍스트 링크 오브젝트를 추가하는, "AddLink(ContextLink link)"로 표시되는 메소드를 포함할 수 있다. 본 발명의 여러 실시예들로서, 콘텍스트 링크 오브젝트는, 관련 콘텍스트 노드에 연관된 콘텍스트 링크들의 어레이에 성공적으로 추가되는 콘텍스트 링크의 순서대로 관련 콘텍스트 노드에 대한 참조를 포함해야 한다. 이는 또한 "DeleteLink(ContextLink link)"로 표시되는 메소드를 포함할 수 있다. 이 메소드는 관련 콘텍스트 노드에 대한 콘텍스트 링크들의 어레이로부터 특정 콘텍스트 링크 오브젝트를 삭제하거나 제거한다. 본 발명의 여러 실시예들로서, 이 메소드는, 콘텍스트 링크가, 관련 콘텍스트 노드와 연관되는 콘텍스트 링크들의 어레이에 존재하지 않는 경우에도, 항상 호출을 성공적으로 완료한다.
잉크 분석 API는 또한 분석 힌트 클래스를 포함한다. 상술한 많은 클래스들에서, 분석 힌트 클래스는 분석 힌트 오브젝트를 비어있는 상태로 초기화하는, "AnalysisHint()"로 표시되는 생성자를 포함한다. 이러한 클래스는 또한 "AnalysisRegion Location {get;}"로 표시되는 속성을 포함하는 많은 속성들을 포함할 수 있다. 이러한 속성은 분석 힌트가 적용가능한 문서(1703)(분석 영역으로서) 내에 위치를 지정한다. 예를 들어, 문서(1703)가 페이지 상부에 타이틀 부분을 갖는 자유 형식의 노트(note)라면, 애플리케이션(1701)은 잉크의 수평 라인이 그 영역 내에 존재할 것이 예상됨을 특정하기 위해 타이틀 영역에 대한 분석 힌트를 설정할 수 있다. 분석 힌트는 분석 처리의 정확성을 증가시키는데 도움을 줄 것이다.
이 클래스는 또한 분석 힌트가 적용가능한 문서(1703) 내의 위치에 대하여 사용되기위한 특정 "팩토이드(factoid)"를 특정하는, "string Factoid {get; set;}"로 명명되는 속성을 포함할 수 있다. 본 기술분야에서 통상의 지식을 가진 자들에게 알려진 바와 같이, 팩토이드들은, 잉크 데이터의 예상되는 사용(예를 들어, 규칙적인 텍스트, 숫자, 우편번호, 파일명 및 웹 URL)에 관해 인식 처리에 힌트들을 제공한다. 이 클래스는 "RecognizerGuide Guide "{get; set;}" 및 "OverrideLanguageId {get; set;}로 명명되는 속성들을 포함할 수 있다. RecognizerGuide Guide {get; set;} 속성은 분석 힌트가 적용가능한 문서(1703) 내의 위치에 인가될 기록 가이드를 명시한다. 예를 들어, 가이드를 기록하는 것은, 사용자가 라인들 또는 문자들을 기록하는 인식기 분석 처리를 사용자에게 특정하고 알림으로써 인식기 분석 처리의 정확성을 개선하는데 도움을 준다. OverrideLanguageId {get; set;} 속성은 분석 힌트가 적용가능한 문서(1703)에 그에 대한 언어 힌트를 특정한다. 언어 힌트를 설정하는 것은 잉크 분석기 오브젝트가 콘텍스트 노드 상에 명시된 언어 대신에 특정된 언어를 사용하도록 한다.
이러한 클래스는 또한 인식되어야 할 잉크의 라인에 앞에 기록되거나 타이핑된 텍스트를 명시하는, "PrefixText {get; set;}"으로 명명되는 속성을 포함할 수 있다. 또한, 이 클래스는 인식 처리가 분석 힌트가 적용가능한 문서(1703) 내의 위치에 관련해야 하는 특정 타입의 모드들을 명시하는, "RecognitionModes RecognitionFlags {get; set;}"으로 표시되는 속성을 포함한다. 또한, 이 클래스는 인식되어야 할 링크의 라인 앞에 기록되거나 타이핑된 텍스트를 명시하는, "SuffixText {get; set;}"으로 명명되는 속성, 및 인식 분석 처리에 의해 사용되어야 하는 단어들의 특정 세트를 특정하는, "WordList WordList {get; set;}으로 명명되는 속성을 포함할 수 있다. 사용자가 실제로 기록되는 입력 데이터를 갖기 전, 예상되는 인식 결과들이 알려진 경우에는, 예컨대 의학 형식(medical form) 내부에 기록될 것으로 예상되는 의학 용어들의 리스트와 같은, 단어 리스트가 사용될 수 있다.
또한, 이 클래스는 "WordMode {get; set;}"으로 명명되는 속성을 포함할 수 있다. 이 값이 "참"라면, 분석 처리는 전체 분석 영역에 대해 단일의 단어를 리턴하기 위해 그 자체를 바이어스할 것이다. 또한, "참"이면, 분석 처리가 관련 힌트에서 설정된 임의의 팩토이드 또는 단어 리스트(wordlist)로 그 결과를 한정하도록 강제하는, "Coerce {get; set;}"으로 명명되는 속성을 포함할 수 있다. 이 클래스는 또한 "AllowPartialDictionaryTerms {get; set;}"으로 명명되는 속성을 포함할 수 있다. 이 속성 값이 "참"이면, 인식 분석 처리는 부분적인 단어들을 인식 사전으로부터 리턴하도록 허용될 것이다.
본 발명의 각종 실시예들에 따라서, 잉크 쿤석 API는 분석 영역 클래스를 더 포함할 수 있다. 이러한 클래스가 예를 들어, 분석 영역 오브젝트를 구성하기 위한 다수의 생성자를 포함할 수 있다. 예를 들어, 어떤 영역을 갖는 분석 영역 오브젝트를 구성하기 위한 제1 생성자, 2차원 직사각형에 대한 파라미터들에 기초하여 분석 영역 오브젝트를 구성하는 제2 생성자, 및 공간 좌표에 기초하여 분석 영역 오브젝트를 구성하는 제3 생성자를 포함할 수 있다. 예를 들어, 디폴트 생성자가 비어있는 영역을 생성할 수 있다. 이 클래스는 또한 많은 속성들을 포함할 수 있다. 예를 들어, 이 클래스는 분석 영역에 대한 바운딩 직사각형을 수신하는, "Rectangle Bounds {get;}"으로 명명되는 속성, 관련 분석 영역 오브젝트가 비어있는 내부를 갖는지의 여부를 나타내는, "IsEmpty {get;}"으로 명명되는 속성, 및 그 관련 분석 영역이 무한(infinite)으로 설정되었는지 아닌지의 여부를 나타내는, "IsInfinite {get;}"으로 명명되는 속성을 포함할 수 있다.
이 클래스는 또한 관련 분석 영역 오브젝트를 복제하는, "AnalysisRegion Clone()"으로 명명되는 메소드와 같은 다수의 메소드들을 포함한다. 이 클래스는 또한 특정된 분석 영역 오브젝트(기타 영역으로 지칭됨)가 관련 분석 영역 오브젝트와 동일한지 여부를 테스트하는, "Equals(AnalysisRegion otherRegion)"으로 명명되는 메소드를 포함할 수 있다. 이 메소드는 특정된 분석 영역 오브젝트의 내부가 관련 분석 영역 오브젝트의 내부와 동일하다면, "참"의 값을 리턴하고, 그렇지 않으면 "거짓"의 값을 리턴한다.
이 클래스는 특정된 분석 영역에 대해 관련 분석 영역 오브젝트를 잘라내는(crop down) 메소드 "Intersect(AnalysisRegion regionToIntersect)"를 더 포함할 수 있다. 그러므로, 결과적인 분석 영역 오브젝트는 특정된 분석 영역에 중복했거나 가로질렀던 영역들만을 포함할 것이다. 이러한 클래스는 또한 특정된 직사각형에 대해 관련 분석 영역 오브젝트을 잘라내는(crop down), "Intersect(Rectangle rectangle)"로 명명되는 메소드를 포함할 수 있다. 다시, 결과적인 분석 영역 오브젝트는 특정된 직사각형에 중복했거나 가로질렀던 영역들만을 포함할 것이다. 이는 또한 관련 분석 영역 오브젝트를 비어있는 내부로 초기화하는, "MakeEmpty()"로 명명되는 메소드 및 관련 분석 영역에 의해 무한정 점유되는 영역을 설정하는 "MakeInfinite()"로 명명되는 메소드를 포함할 수 있다. 이는 분석 영역 오브젝트를 관련 분석 영역 오브젝트에 결합하거나 추가하도록 지정하는, "Union(AnalysisRegion regionToUnion)"으로 명명되는 메소드 및 특정된 직사각형을 관련 분석 영역 오브젝트에 결합하는, "Union(Rectangle rectangle)"로 명명되는 메소드와 같은, 상이하게 정의된 영역들을 결합하거나 분리하기 위한 여러가지 메소드들을 더 포함할 수 있다. 이 메소드에서, 직사각형은 관련 분석 영역 오브젝트에 대한 좌표 공간에 의해 지정될 수 있다. 물론, 이 클래스는 영역들을 결합하거나 그 영역들에 대한 임의의 원하는 정의에 기초하여 또 다른 영역으로부터 하나의 영역을 추출하기 위한 다수의 서로 다른 메소드들을 포함할 수 있다.
잉크 분석 API는 또한 인식 결과 클래스를 가질 수 있다. 상술한 많은 클래스에서, 인식 결과 클래스는 하나 이상의 생성자를 포함할 수 있다. 예를 들어, 이러한 클래스는 주어진 인식 격자(lattice)로부터 인식 결과 오브젝트를 구성하는, "RecognitionResult(Stream lattice)"로 명명되는 생성자를 포함할 수 있다. 본 발명의 여러 실시예들에서, 인식 격자는 인식 처리로부터의 결과들의 시리얼화된 형태(serialized form)이다. 이 메소드는, 예를 들어, 관련 인식 결과 오브젝트의 구성에 사용되도록 인식 격자를 바이트(byte) 어레이로 지정할 수 있다. 이는 또한 주어진 콘텍스트 노드로부터 인식 결과 오브젝트를 구성하는, "RecognitionResult(ContextNode node)"으로 명명되는 생성자를 포함할 수 있다. 이는 또한 지정된 텍스트 값으로부터 인식 결과 오브젝트를 구성하는, "RecognitionResult(string Text, int StrokeCount)"으로 명명되는 생성자를 포함할 수 있으며, 이는 차례로 지정된 수의 스트록들에 연관되고, 인식 처리가 실제의 핸드라이팅된 잉크 데이터에 대응하는 대안의 인식 값을 제공하지 않은 경우 수정을 위해 사용될 수 있다. 또한, 이 클래스는 두 개의 기존의 인식 결과 오브젝트를 함께 합병함으로써 인식 결과 오브젝트를 구성하는, "RecognitionResult(RecognitionResult leftRecognitionResult, RecognitionResult rightRecognitionResult)"로 명명되는 생성자를 포함할 수 있다.
인식 결과는 또한 단일의 잉크 오브젝트에 포함된 스트록들의 콜렉션을 나타내는 스트록 인덱스들의 어레이를 제공하는, "StrokeCollection StrokeCollection {get;}"으로 명명되는 속성, 및 인식 결과의 최상의 대안을 제공하는, "RecognitionAlternate TopAlternate {get;}"으로 명명되는 속성과 같은 하나 이상의 속성들을 포함할 수 있다. 이 클래스는 또한 인식 분석 처리로부터의 현재 결과의 최상의 대안의 선정에 대한 신뢰성 레벨(예를 들어, 강력, 중간, 또는 열악)을 제공하는, "RecognitionConfidence RecognitionConfidence {get;}"으로 명명되는 속성 및 인식 분석 처리로부터의 분석 결과들의 최상의 결과 스트링을 리턴하는, "string TopString {get;}"으로 명명되는 속성을 포함할 수 있다.
인식 결과 클래스는 또한 인식 분석 처리로부터의 분석 결과들의 최고의 결과 스트링 내에서의 선정으로부터 대안들의 콜렉션을 특정하는, "public RecognitionAlternateCollection GetAlternateCollectionFromSelection (selectionStart, selectionLength, maximumAlternates)"로 명명되는 메소드와 같은 많은 메소드들을 포함할 수 있으며, 각각의 대안은 하나의 잉크 세그먼트에만 대응된다. 이 메소드를 위한 입력 파라미터들은 예를 들어, 대안들의 콜렉션이 리턴되는 텍스트 선택의 시작을 지정하는 값, 대안들의 콜렉션이 리턴되는 텍스트 선택의 길이를 지정하는 값 및 리턴하기 위해 최대수의 대안들을 지정하는 값을 포함할 수 있다. 이어서 이 메소드는 인식 결과의 최고의 결과 스트링 내에서의 선정으로부터 대안들의 인식 대안 콜렉션(RecognitionAlternateCollection)을 리턴할 수 있다.
인식 결과 클래스는 "RecognitionResults Merge(RecognitionResults left, string separator, RecognitionResults right)"로 명명되는 메소드를 더 포함할 수 있다. 이 메소드는, 편평한 격자(flat lattice)가 되는 단일의 스트링으로부터 새로운 인식 결과 오브젝트를 생성하거나, 기존 인식 결과 오브젝트의 시작 및 종료에 단일의 스트링을 추가하거나, 두 개의 기존의 인식 결과 오브젝트들 사이에 단일의 스트링을 연결시키기 위해 사용될 수 있다. 이 클래스는 또한 알려진 대안으로 변경되도록 그 인식 결과를 지정하는, "ModifyTopAlternate(RecognitionAlternate alternate)"로 명명되는 메소드를 포함할 수 있다. 본 발명의 몇 가지 실시예들에서, 디폴트로서, 인식 분석 처리의 결과들 중 최고의 결과 스트링은 최상위 대안(top alternate)에 대응한다. 그러나, 이 메소드는 최상위 대안 이외의 대안들이 인식 분석 처리의 결과들에 사용됨을 특정하기 위해 사용될 수 있다. 새로운 최상의 대안이 이전과 다른 분할(segmentation)이 되는 경우, 수정 최상위 대안 메소드는 변경들을 반영하기 위해 콘텍스트 노드들을 자동으로 업데이트할 것이다.
인식 결과를 변경하는데 사용될 수 있는 대안들을 검색하기 위해서, 이 메소드는 이하에 상세하게 논의되는 GetAlternatesFromSelection 메소드를 호출함을 유의해야 한다. 이 클래스는 또한 관련 RecognitionResults 오브젝트를 인식 격자의 형태로 지속적으로 유지하는, "Stream Save()"로 명명되는 메소드를 가질 수 있다. 인식 격자는 인식 처리로부터의 결과들을 표현하는데 사용되기 위한 시리즈화된 포맷이다.
잉크 분석 API는 또한 열거된 타입의 분석 옵션들(Analysis Options)을 가질 수 있다. 이러한 타입은 잉크 데이터가 분석 처리에 이용가능한 모든 옵션들을 인에이블하는, "const AnalysisOptions Default"로 명명되는 필드와 같은, 분석 처리에 의해 어떻게 분석될 것인지를 지정하는 하나 이상의 필드들을 포함할 수 있다. 예를 들어, 이 필드는 텍스트 인식, 테이블의 사용, 리스트의 사용, 주석의 사용, 커넥터 및 콘테이너의 사용 및 중간 결과들의 사용을 가능하게 할 수 있다. 이 타입은 또한 주석들의 검출을 인에이블 및 디세이블 할 수 있는, "const AnalysisOptions EnableAnnotations"로 명명되는 필드, 커넥터 및 콘테이너의 검출을 인에이블 및 디세이블 하는, "const AnalysisOptions EnableConnectorsAndContainers"로 명명되는 필드, 및 서로 다른 순차적인 분석 처리들(예컨대, 파싱 처리 및 후속하는 인지 처리)의 사용 사이에 소프트웨어 애플리케이션(1701)으로 분석 결과들의 리턴하는 것을 인에이블 및 디스에이블하는, "const AnalysisOptions EnableIntermediateResults"로 명명되는 필드를 포함할 수 있다. 이 타입은 또한 리스트의 검출을 인에이블 및 디스에이블하는 "const AnalysisOptions EnableLists"로 명명되는 필드 및 테이블의 검출을 인에이블 및 디스에이블하는 "const AnalysisOptions EnableTables"로 명명되는 필드를 가질 수 있다. 이 열거된 타입은 텍스트 인식 분석 처리를 인에이블 및 디스에이블하는, "const AnalysisOptions EnableTables"로 명명되는 필드를 더 포함할 수 있다. 그러나, 추가적인 분석 처리들(또는 동일한 분석 처리의 다른 버전들)이 이용가능할 경우, 이러한 타입은 따라서 부가적인 분석 옵션들을 포함할 수 있음을 알아야 한다.
또한, 잉크 분석 API는 AnalysisResultsEventArgs 클래스를 포함할 수 있다. 이 클래스는 분석 결과들을 포함하고, 분석 결과 (AnalysisResult) 이벤트가 제기될 경우 소프트웨어 애플리케이션(1701)으로 리턴되는 데이터 구조를 생성하는, "public AnalysisResultsEventArgs()"로 명명되는 생성자를 가질 수 있다. 이 클래스는 분석 처리를 수행하는 잉크 분석기(InkAnalyze)를 식별하는, "InkAnalyzer InkAnalyzer {get;}"으로 명명되는 속성을 포함할 수 있다.
그 API는 또한 기하학적 라인을 나타내는 "Line" 오브젝트의 사용을 인식하는 몇가지 타입의 운영체제가 유용할 수 있는 라인(Line) 클래스를 가질 수 있다. 이 클래스는 "public Line(Point beginPoint, Point endPoint)"로 명명되는 생성자와 같은, Line 오브젝트을 생성하는 생성자를 포함할 수 있다. 이 클래스는 또한 라인 오브젝트의 시작점을 나타내는, "public Point BeginPoint {get; set;}"로 명명되는 속성, 및 라인 오브젝트의 종료점을 나타내는, "public Point EndPoint {get; set;}"로 명명되는 속성과 같은 여러 속성들을 포함할 수 있다.
이러한 클래스들에 부가하여, 잉크 분석 API는 또한 인식 대안(Recognition Alternate) 클래스를 포함할 수 있다. 이 클래스는, 인식기의 사전과 비교되는 잉크의 세그먼트들에 대한 가능한 단어 매치를 나타내는 엘리먼트들을 포함할 수 있다. 예를 들어, 이러한 클래스는 단일 라인 상에 존재하는 인식 대안(RecognitionAlternate) 오브젝트의 어센더 라인(ascender line)을 제공하는(라인이 두 지점들로 표현됨), "Line Ascender {get;}"로 명명되는 속성, 단일 라인 상에 존재하는 인식 대안 오브젝트의 기준선(Baseline)을 제공하는, "public Line Baseline {get;}"으로 명명되는 속성, 단일 라인 상에 존재하는 인식 대안 오브젝트의 디센더 라인(descender line)을 제공하는, "Line Descender {get;}"으로 명명되는 속성을 포함할 수 있다. 이 클래스는 또한 현재 인식 대안 오브젝트에 대한 인지 결과(RecognitionResults)를 제공하는, "RecognitionResult Extract {get;}"로 명명되는 속성을 포함할 수 있다. 이 속성은 예를 들어, 단어에 대한 인식 결과 오브젝트를, 그 단어를 포함하는 라인에 대한 인식 결과 오브젝트로부터 추출하기 위해 사용될 수 있다.
이는 또한 단일 라인 상에 존재하는 인식 대안 오브젝트에 대한 중심선(midline)을 제공하는, "Line Midline {get;}"으로 명명되는 속성, 잉크 오브젝트에 포함된 스트록들의 콜렉션을 제공하는(즉, 이는 인식 결과(RecognitionResult)에 연관된 스트록들을 나타내는 스트록 콜렉션(StrokeCollection)을 제공함), "StrokeCollection Strokes {get;}"으로 명명되는 속성 및 인식 결과(RecognitionResult)와 연관된 스트록들을 나타내는 하나 이상의 잉크 오브젝트들에 포함되는 스트록들의 콜렉션을 제공하는, "StrokeCollection[] StrokesArray {get;}"으로 명명되는 속성을 포함할 수 있다. 이 클래스는 또한 제스처 또는 인식 대안 오브젝트 인식시에 인식 분석 처리에 의해 결정되는 신뢰도 레벨(예를 들어, 강력, 중간 또는 열악)을 제공하는, "RecognitionConfidence RecognitionConfidence {get;}"로 명명되는 속성을 포함할 수 있다. 비선형 노드들(non-line nodes)에 대해, 관련 콘텍스트 노드들의 자식들의 최하위 인식 신뢰도(RecognitionConfidence)가 리턴될 것이다. 이는 또한 대안의 결과 스트링을 특정하는 "string RecognizedString {get;}"으로 명명되는 속성을 포함할 수 있다. 따라서, 단어 콘텍스트 노드보다 상위의 임의의 콘텍스트 노드에 대해, 그 결과들 스트링은 이 메소드에 의해 함께 연관(concatenate)된다. 예를 들어, 라인 노드는 모든 자식 노드들 또는 단어 노드의 결과들을 차례로 포함하는 결과 스트링을 포함할 것이다. 이어서, 단락 노드는 모든 그 자식 노드들 또는 라인 노드들의 결과들을 포함하는 결과 스트링을 포함할 것이다.
인식 대안(Recognition Alternate) 클래스는 또한 예를 들어, 알려진 텍스트 범위에 대응하는 각각의 잉크 오브젝트로부터 스트록 콜렉션(StrokeCollection)을 특정하는 "StrokeCollection[] GetStrokeArrayFromTextRange(int selectionstart, int selectionlength)"로 명명되는 메소드를 포함하는 하나 이상의 메소드를 포함할 수 있다. 이 클래스는 또한, 스트록들의 알려진 입력 콜렉션을 포함하고 인식기가 대안들을 제공할 수 있는 가장 작은 스트록들의 콜렉션을 지정하는, "StrokeCollection[] GetStrokesFromStrokesArrayRanges(StrokeCollection[] strokesArray)"로 명명되는 메소드를 포함할 수 있다. 특히, 스트록들은, 콜렉션에 대한 스트록 인덱스들의 어레이를 각각 포함하는 잉크 오브젝트의 어레이에 의해 리턴된다. 이 메소드에 의해 리턴되는 잉크 스트록들의 콜렉션은, 입력 콜렉션에 매칭될 수 있거나, 모든 입력 스트록들을 포함하는 최소의 인식 결과의 일부에만 입력 콜렉션이 매칭되는 경우에는 더 클 수 있음을 알아야 한다. 이 클래스는 스트록들의 알려진 입력 콜렉션을 포함하고, 인식기가 대안들을 제공할 수 있는 최소의 스트록들의 콜렉션을 지정하는, "StrokeCollection GetStrokesFromStrokesRanges(StrokeCollection strokes)"로 명명되는 메소드 및 공지된 텍스트 범위에 대응하는 스트록 콜렉션(StrokeCollection)을 특정하는 "StrokeCollection GetStrokesFromTextRanges(int selectionstart, int selectionlength)"로 명명되는 메소드를 더 포함할 수 있다.
삭제
이 클래스는, 인식기가 알려진 스트록들의 세트를 포함하는 대안을 리턴할 수 있는 최소 범위의 인식된 텍스트를 특정하는, "void GetTextRangeFromStrokes(ref int selectionstart, ref int selectionend, StrokeCollection strokes)"로 명명되는 메소드 및 인식기가 알려진 스트록들의 세트를 포함하는 대안을 리턴할 수 있는 최소 범위의 인식된 텍스트를 지정하는, "void GetTextRangeFromStrokesArray(ref int selectionstart, ref int selectionend, StrokeCollection[] strokesarray)"로 명명되는 메소드를 더 포함할 수 있다. 이는, "RecognitionAlternateCollection SplitWithConstantPropertyValue(GUID propertyType)"으로 명명되는 메소드를 가질 수 있으며, 이 메소드는, 이 메소드가 호출되는 대안의 분할(division)인 대안들의 콜렉션을 리턴한다. 콜렉션 내의 각각의 대안은 메소드로 전달되는 속성에 대해 동일한 속성 값을 갖는 인접하는 인식 세그먼트들을 포함한다. 예를 들어, 이 메소드는 인식 결과 내의 신뢰성 레벨 경계들(강력, 중간 또는 열악), 라인 경계들 또는 세그먼트 경계들로 원래의 대안을 분할하는 대안들을 획득하기 위해 사용될 수 있다. 이는 대안의 인식기 신뢰도와 같은 그 대안의 공지된 속성의 값을 지정하는, "byte[] GetPropertyValve(GUID propertyType)"으로 명명되는 메소드를 더 포함한다. 그러나, 모든 인식 분석 처리들이 모든 속성 타입들에 대한 값을 제공하는 것은 아니다. 그러므로, 이 메소드는 관련 인식 분석 처리에 의해 지원되는 타입들에 대한 데이터를 제공한다.
잉크 분석 API는 또한 인식 대안 콜렉션 (Recognition Alternate Collection) 클래스를 포함할 수 있다. 상술한 많은 클래스들과 같이, 이 클래스는 인식 대안 콜렉션(RecognitionAlternateCollection) 오브젝트를 생성하기 위한 "RecognitionAlternateCollection()"으로 명명되는 생성자를 포함할 수 있다. 이러한 클래스는 또한 많은 오브젝트들 또는 대안의 인식 값들의 콜렉션에 포함되는 콜렉션들을 제공하는, "Count {get;}"으로 명명되는 속성, 대안의 인식 값들의 콜렉션으로의 액세스가 소프트웨어 애플리케이션(1701)(즉, "스레드 안전(thread safe)")과 동기화되는지 여부를 나타내는 값을 제공하는, "IsSynchronized {get;}"으로 명명되는 속성, 및 대안의 인식 값들의 콜렉션으로의 액세스를 동기화하기 위해 사용될 수 있는 오브젝트를 제공하는, "SyncRoot {get;}"으로 명명되는 속성과 같은, 많은 속성들을 포함할 수 있다.
이 클래스는 또한 지정된 목적지 어레이 인덱스에서 시작하는 특정 1차원 어레이에 대안의 인식 값들의 현재 콜렉션의 모든 엘리먼트들을 카피하는, "virtual void CopyTo(Array array, int index)"로 명명되는 메소드, 및 각 생성이 대안의 인식 값들의 콜렉션 내의 각 RecognitionAlternate(인식 대안)를 통해 열거하는 것을 호출자(callers)가 사용가능하게 하는 IEnumerable의 표준 구현인, "IEnumerable IEnumerableGetEnumerator()"로 명명되는 메소드와 같은 하나 이상의 메소드를 포함할 수 있다. 이 클래스는 또한, 인식 대안 값들의 콜렉션 내에 모든 오브젝트들을 포함하는 RecognitionAlternateCollectionEnumerator(인식 대안 콜렉션 열거자)를 리턴하는 "RecognitionAlternateCollectionEnumerator GetEnumerator()"로 명명되는 메소드를 포함할 수 있다. 이 메소드는, 예를 들어, 인식 대안 값들의 콜렉션에서 각 오브젝트를 검색하는데 사용될 수 있다.
잉크 분석 API는 추가적으로 Recognition Confidence (인식 신뢰도) 열거 및 Recognition Mode (인식 모드) 열거를 포함할 수 있으며, 각각은 인식 분석 처리에 관한 하나 이상의 필드들을 포함할 수 있다. 예를 들어, Recognition Confidence 클래스는, 인식 분석 처리가 대안의 인식 값들이 제공된 리스트에 정확한 결과가 있음을 확신함을 나타내는 "Intermediate"로 명명되는 필드, 인식 분석이 대안의 인식 값들이 제공된 리스트에 그러한 결과가 있음을 확신하지 못함을 나타내는 "Poor"로 명명된 필드, 및 인식 분석 처리가 대안의 인식 값들의 최상의 대안은 정확함을 확신함을 나타내는 "Strong"으로 명명되는 필드와 같은 다수의 필드들을 포함할 수 있다.
마찬가지로, 인식 모드(Recognition Mode) 클래스는 인식 분석 처리가 전자 잉크 데이터를 어떻게 해석하며, 그리하여 인식 결과 스트링을 어떻게 결정하는지를 명시하는 필드들을 포함할 수 있다. 예를 들어, 이 클래스는 인식 분석 처리가 그 콘텍스트에 대해 지정된 팩토이드에 기초한 인식 결과를 지배함을 명시하는, "Coerce"로 명명된 필드, 및 인식 분석 처리가 단일 라인으로서 전자 잉크 데이터를 다룸을 명시하는 "Line"으로 명명된 필드를 포함할 수 있다. 이 클래스는 또한 인식 분석 처리가 어떠한 인식 모드들도 적용하지 않음을 명시하는, "None"으로 명명된 필드, 및 인식 분석 처리가 그 전자 잉크 데이터를 단일의 단어 또는 문자를 형성하는 것으로서 다룸을 명시하는, "Segment"로 명명된 필드를 포함할 수 있다. 또한 이 클래스는 다수의 분할을 디스에이블하는, "TopInkBreaksOnly"로 명명된 필드를 포함할 수 있다.
또한, 잉크 분석 API는 두 개의 콘텍스트 노드들이 어떻게 함께 링크될 수 있는지를 정의하는, 콘텍스트 링크 (Context Link) 클래스를 포함할 수 있다. 콘텍스트 링크(ContextLink) 오브젝트 자체는 두 개의 콘텍스트 노드들, 그 링크의 방향 및 링크의 타입을 나타낸다. 이 클래스는, 또 다른 콘텍스트 노드로부터 링크되어 있는 소스 콘텍스트 노드를 지정하는, "ContextNode SourceNode {get;}"으로 명명되는 속성, 소스와 목적지 콘텍스트 노드들 사이에 존재하는 링크 관계의 타입을 특정하는, "ContextLinkType LinkType {get;}"으로 명명된 속성, 및 주문형 링크(custom link)가 사용되고 있음을 명시하는, "CustomLinkType {get;}"으로 명명되는 속성을 포함할 수 있다. 이 상황은, API가 인식할 수 있는 범위를 넘어서는 애플리케이션 특정 링크들을 나타내기 위해 잉크 분석기 API의 링킹 시스템을 사용할 것을 애플리케이션이 결정하는 경우에 발생할 것이다.
이 클래스는 또한 또다른 콘텍스트 노드로부터 링크되는 목적지 콘텍스트 노드를 명시하는, "ContextNode DestinationNode {get'}"으로 명명되는 속성을 포함한다. 이 클래스에 이용가능한 두 개의 생성자가 있을 수 있으며, 이는 존재하는 소스와 목적지 콘텍스트 노드들 간의 관계를 생성한다.
이 클래스는 또한 두 개의 콘텍스트 노드들에 의해 공유되는 관계의 타입을 정의하는, "ContextLinkType enum"으로 명명되는 열거를 포함할 수 있다. 이러한 여러 가지 링크 타입들은 예를 들어, 하나의 노드가 다른 노드에 고정(anchored)됨을 기술하는 "AnchorsTo" 타입을 포함할 수 있다. 두 가지 노드들 모두는 파싱 상황에 기초하여 적절하게 소스 노드(SourceNode) 또는 목적지 노드(DestinationNode) 속성을 사용할 수 있다. 링크 타입들은 또한 하나의 노드가 다른 노드를 포함함을 기술하는, 타입 "Contains"을 포함할 수 있다. 이러한 관계에서, 콘테이너 노드(container)는 SourceNode로서 참조될 수 있는 반면, 콘테이니(containee) 노드는 목적지 노드(DestinationNode)로서 참조될 수 있다. 링크 타입들은 하나의 노드가 또 다른 노드를 포인팅함을 기술하는, "PointTo" 타입을 더 포함할 수 있다. 이러한 관계에 대해, 포인팅하는 노드는 소스 노드(SourceNode)로서 지칭될 수 있는 반면, 포인팅되는 노드는 DestinationNode로서 지칭될 수 있다. 또한, 링크 타입들은 하나의 노드가 다른 노드로부터 포인팅됨을 기술하는, "PointsForm" 타입을 가질 수 있다. 이러한 관계에서, 다른 노드로부터 포인팅하는 노드는 소스 노드(SourceNode)로서 지칭될 수 있는 반면, 다른 노드로부터 포인팅되는 노드는 목적지 노드(DestinationNode)로서 지칭될 수 있다.
링크 타입들은 추가적으로 하나의 노드가 또 다른 노드의 길이를 수평으로 실행함(run)을 기술하는, "SpansHorizontally" 타입, 및 하나의 노드가 또다른 노드의 길이를 수직으로 실행함을 기술하는, "SpansVertically" 타입을 포함할 수 있다. 이러한 타입들에 대해, 보통 마지막에 기록되는 다른 노드를 커버하는(스트라이크아웃, 언더라인, 여백 표시 바) 노드는 소스 노드(SourceNode)로서 언급될 수 있는 반면, 가로질러지는(spanned) 노드는 목적지 노드(DestinationNode)로서 언급될 수 있다. 링크 타입들은 또한 주문형 링크 타입이 사용되었음을 기술하는, "Custom" 타입을 포함할 수 있다. 이 값이 사용되는 경우, 콘텍스트 링크(ContextLink) 오브젝트에 대한 "CustomLinkType" 속성은 이 링크의 목적에 관하여 보다 상세하게 제공할 수 있다.
따라서, 잉크 분석기 API는 문서 내의 전자 잉크를 비동기적으로 분석하기 위한 여러 기능들 및 서비스들을 제공하며, 이어서 상술한 바와 같이 분석 처리의 결과들을 문서의 현재 상태로 조정한다. 또한, 앞서 기재된 여러 클래스들은, Microsoft Windows 운영 환경, Microsoft COM 운영 환경, Unix 또는 Linux 운영 환경, 또는 임의의 다른 적절한 컴퓨터 운영 환경과 같은 여러가지 운영 체제들 및 운영 환경들에 적용될 수 있음을 이해해야 한다. 게다가, 본 발명의 여러가지 구현들에 따른 응용 프로그래밍 인터페이스가 앞서 기재된 하나 이상의 클래스 구성요소들을 생략할 수 있거나, 또는 원하는 서비스 또는 기능성을 제공하기 위해 부가적인 구성요소들을 포함할 수 있음을 이해해야 한다.
<조정>
상술한 바와 같이, 본 발명의 여러 실시예들은, 문서(1703) 내의 미분석 전자 잉크가 배경 분석 처리에 의해 분석되는 동안, 소프트웨어 애플리케이션(1701)이 계속해서 동작하는 것을 허용한다. 따라서, 소프트웨어 애플리케이션(1701)은, 분석 처리의 결과들과 충돌할 문서(1703)를 다수의 방식으로 변경할 수 있다. 예를 들어, 소프트웨어 애플리케이션(1701)은 문서(1703)로 새로운 전자 잉크 데이터(1705)를 입력할 수 있거나, 또는 기존의 전자 잉크 데이터(1705)를 문서(1703)로부터 삭제할 수 있다. 또한, 소프트웨어 애플리케이션(1701)은 기존의 전자 잉크 데이터(1705)의 위치를 이동시키거나 기존의 전자 잉크 데이터(1705)의 속성들을 변경함으로써 기존의 전자 잉크 데이터(1705)를 편집할 수 있다. 또한, 소프트웨어 애플리케이션(1701)은 기존의 전자 잉크 데이터(1705)에 영향을 미치는 방식으로 비-잉크 문서 엘리먼트들(1707)을 추가, 삭제 또는 변경할 수 있다. 예를 들어, 소프트웨어 애플리케이션(1701)은 전자 잉크 데이터(1705)에 주석으로 표시된 타이프라이팅된 텍스트를 삭제할 수 있다.
소프트웨어 애플리케이션(1701)은 분석 처리에 의한 변경을 금지하기 위해, 기존의 전자 잉크 데이터(1705)를 추가적으로 "고정(pin)"할 수 있다. 예를 들어, 사용자가 잉크 스트록들의 그룹에 대한 레이아웃 또는 분류를 수동으로 지정하면, 소프트웨어 애플리케이션(1701)은, 파싱 처리에 의해 생성된 결과와 상관없이, 잉크 스트록들이 그 분류로 남아있는 것으로, 또는 특정 레이아웃 내에 남아있는 것으로 지정할 수 있다. 유사하게, 사용자는, 인식 처리에 의해 생성된 결과들과 무관하게, 잉크 스트록들의 그룹에 대한 특정 인식 결과를 지정할 수 있다.
여러가지 타입들의 고정(pinning)이 본 발명의 서로 다른 구현들에 따라 사용될 수 있다. 예를 들어, 잉크 분석 도구(1901)는 소프트웨어 애플리케이션(1701)이 잉크를 "단단히(hard)" 고정하도록 허용할 수 있다. 이러한 배치에서는, 어떠한 잉크 스트록들도 고정된 노드 아래의 임의의 리프 노드들에 추가될 수 없으며, 어떠한 스트록들도 고정된 노드 아래의 임의의 리프 노드들로부터 제거될 수 없으며, 자식 노드들의 어떠한 추가 또는 삭제도 허용되지 않으며, 고정된 노드 아래의 임의의 노드들의 어떠한 리-페어런팅(re-parenting)도 허용되지 않는다. 대안으로 또는 부가적으로, 잉크 분석 도구(1901)는 늦은(late) 스트록들과의 "단단한" 고정을 허용할 수 있으며, 이는 늦은 스트록들이 지정된 조건들 하에서 추가되는 것을 허용하고, 스트록들이 고정된 노드 아래의 임의의 리프 노드들로부터 제거되는 것으로부터 금지하고, 자식 노드들의 추가 또는 제거를 금지하고, 고정된 노드 아래의 임의의 노드들의 리-페어런팅을 금지한다. 또한, 잉크 분석 도구(1901)는 소프트웨어 애플리케이션(1701)이 잉크를 대안으로 또는 부가적으로 "부드럽게(soft)" 고정하도록 허용할 수 있다. 이러한 배치로서, 어떠한 스트록들도 고정된 노드 아래의 임의의 리프 노드들로부터 제거될 수 없으며, 스트록들의 추가하도록 허용하기 위해 지정된 규칙들이 있으며(이는 늦은 스트록들에 대해 내부에 추가되도록 허용한다), 자식 노드들의 재그룹화, 추가 및 제거가 허용된다. 고정은 제거될 수 있으며, 일단 고정이 제거되면, 이전에 고정된 노드들 및 그들의 자식들은 "더티"로 고려될 수 있거나 재분석이 필요하게 됨을 알아야 한다.
또한, 본 발명의 여러 실시예들에 따른 잉크 처리는 앞서 상세하게 논의된 바와 같이, 다수의 분석 처리들을 이용할 수 있다. 따라서, 제2의 다음 분석 처리가 실행중인 동안, 이전의 분석 처리의 결과들이 전자 잉크 데이터(1705)를 변경할 수 있다. 따라서, 분석 처리의 결과들이 문서(1703)의 현재 상태로 조정되어야 하므로, 문서(1703)의 현재 상태에 대해 유효한 결과들만이 분석 콘텍스트 오브젝트(1709)에 적용된다. 즉, 현재 분석 콘텍스트 오브젝트(1709)(및, 몇가지 경우에 그 분석 처리의 결과들)는 분석 처리의 결과들과 문서(1703)의 현재 상태 간의 불일치들(discrepancies) 또는 "충돌들"을 제외시키기 위해서 변경된다.
조정 처리의 결과들이 유효하도록 하기 위해서, 문서(1703)의 상태가 조정 처리동안 변경되어서는 안됨을 유의해야 한다. 따라서, 조정 처리는, 소프트웨어 애플리케이션(1701)이 실행되는 1차 스레드를 사용하여 수행될 수 있고, 조정 처리를 실행하는 것은 소프트웨어 애플리케이션(1701)의 동작을 일시적으로 중지시킬 수 있다. 대안으로, 문서(1703)의 상태가 조정 처리 동안 변경되지 않음을 보장하기 위해, 데이터 구조 잠김(locking)과 같은 다른 기술들이 사용될 수 있다. 따라서, 사용자가 소프트웨어 애플리케이션(1701)의 성능에 만족하지 못하게 되는 것을 방지하기 위해, 조정 처리를 가능한 한 신속하게 수행하는 것이 바람직하다. 조정 처리의 또 다른 고려는, 분리된 배경 분석 스레드에서 실행되는 분석 처리의 성능에 대한 효과이다. 현재 분석 콘텍스트 오브젝트(1709)(즉, 문서(1703)의 현재 상태를 반영하는 분석 콘텍스트 오브젝트(1709))와 분석 결과들 간의 불일치가 지나치게 넓게 정의되면, 대량의 전자 잉크가 불필요하게 재분석될 것이다. 물론, 조정 중 문서의 보존성(integrity)을 보호하는 또 다른 방식들이 본 발명으로부터 벗어나지 않는 범위 내에서 사용될 수 있다.
본 발명의 여러 실시예들로서, 분석 처리 및 조정 처리는 조정 처리의 효율성(efficiency) 및 편리성을 개선하기 위해 하나 이상의 다음 컨벤션(convention)들에 집착할 수 있다. 우선, 분석 처리는 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 문서 엘리먼트에 대한 노드들을 가능한 한 많이 재사용할 수 있다. 즉, 충돌들이 문서 엘리먼트들에 대한 새로운 비관련 노드들을 생성에 의해 회피되어서는 안된다. 또한, 조정 처리는 소프트웨어 애플리케이션(1701)에 의해 지정된 "고정(pinning)"을 존중해야 한다. 분석 처리는 통상적으로 소프트웨어 애플리케이션(1701)에 의한 고정(pinning) 지정들을 준수할 것이지만, 소프트웨어 애플리케이션(1701)은 분석 처리가 실행되는 동안 전자 잉크 데이터(1705)를 고정할 수 있다. 또한, 조정 처리는 어떠한 비어있는 노드들도 조정 처리가 완료된 후에 현재 분석 콘텍스트 오브젝트(1709)에 남아있지 않음을 보장해야 한다. 그러나, 하나 이상의 이러한 컨벤션들이 본 발명의 대안의 구현에 따라 생략되거나 준수되지 않을 수 있음을 이해해야 한다. 예를 들어, 본 발명의 몇 가지 구현은 분석 오브젝트(1709)가 비어있는 노드들을 포함하는 것을 허용할 수 있다.
이러한 컨벤션들에 부가하여, 조정 처리는 통상적으로 분석 콘텍스트 오브젝트(1709)에 의해 명기된 인터페이스 규칙들에 따라야 한다. 예를 들어, 본 발명의 몇가지 구현들에서, 분석 콘텍스트(1709)는, 어떠한 자식 노드도 갖지 않는 경우, 문서 엘리먼트에 대한 노드가 삭제되는 것을 허용하지 않을 수 있다.
앞서 언급된 바와 같이, 분석 처리가 개시된 후에 행해진 분석 콘텍스트 오브젝트(1709)에 대한 변경과 몇가지 형태로 대립하는 문서 독립 분석 콘텍스트 오브젝트(1903)에 대한 변경이 분석 처리에 의해 행해진 경우, 충돌이 발생한다. 충돌은 두 가지 타입, 즉 필수적(mandatory) 충돌 및 임의적(discretionary) 충돌로 나눠질 수 있다.
필수적 충돌은, 분석 처리에 의해 문서 독립 분석 콘텍스트 오브젝트(1903)에 대해 행해진 변경을, 문서(1703)의 현재 상태에 대한 분석 콘텍스트 오브젝트(1709)에 적용하는 것이 불가능한 경우에 발생한다. 예를 들어, 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709)에서 노드를 "고정(pin)" 또는 고정(fix)하고, 분석 처리가 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 대응하는 노드를 변경하는 경우, 필수적인 충돌이 발생한다. 또한 분석 처리가 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 노드에 대해 임의의 종류의 변경을 행하였으나 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709)로부터 대응하는 노드를 삭제한 경우, 및 분석 처리가 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 대응하는 노드를 삭제하였을 때 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709) 내의 노드에 대해 스트록들 또는 자식 노드들을 추가한 경우에 필수적인 충돌이 발생할 것이다. 또한, 필수적인 충돌은, 분석 처리가 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 대응하는 노드에 대한 링크를 재정리(reorder)하거나 생성한 때 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709) 내의 노드를 삭제하는 경우에 발생할 것이다.
소프트웨어 애플리케이션(1701)이 분석 처리에 의해 문서 독립 분석 콘텍스트 오브젝트(1903)에서 변경된 값과 관련된 분석 콘텍스트 오브젝트(1709)에서의 값을 변경하는 경우, 임의적인 충돌이 발생하지만, 분석 콘텍스트 오브젝트(1709)에 대한 인터페이스의 고유의 제약들, 고정 제약들 및 엘리먼트 재사용 제약들은 분석 콘텍스트 오브젝트(1709)에 대해 분석 처리에 의해 이루어진 변경의 애플리케이션을 허용할 수 있다. 임의적 충돌은 분석 콘텍스트 오브젝트(1709)에 대한 변경으로서 적용되거나 또는 회피될 수 있다. 또한, 조정 처리는 몇 가지 타입의 임의적 충돌들을 모두 함께 간단히 무시할 수 있다.
임의적인 충돌의 한가지 그래픽 예시는, 분석 콘텍스트 오브젝트(1709) 및 문서 독립 분석 콘텍스트 오브젝트(1903) 양자 모두의 원래의 노드가 잉크 스트록들 A 및 B에 대한 자식 노드들 A 및 B를 갖는 경우 발생한다. 소프트웨어 애플리케이션(1701)은 분석 콘텍스트 오브젝트(1709) 내에 잉크 스트록 C에 대한 제3 자식 C 노드를 추가할 수 있는 반면, 분석 처리는 문서 독립 분석 콘텍스트 오브젝트(1903)에 대해 잉크 스트록 D에 대한 제3 자식 노드 D를 추가한다. 본 발명의 여러 실시예들에서, 조정 처리는 분석 결과들에 기초하여 분석 콘텍스트 오브젝트(1709) 내의 부모 노드에 자식 노드 D를 추가할 수 있다. 그러나, 분석 콘텍스트 오브젝트(1709) 내의 부모 노드에 대한 이러한 변경이 금지되지 않은 동안, 부모 노드의 특성들이 소프트웨어 애플리케이션(1701)에 의해 희망하지 않을 수 있는 방식으로 변경된다. 예를 들어, 부모 노드와 연관된 잉크는 후속하여 분석되는 것으로 고려될 수 있으며, 잉크 스트록들의 그룹에 대한 잉크 C의 효과를 고려하기 위해 재분석되지 않을 수 있다. 또한, 이제 부모 노드에 대한 인식 결과들은, 잘못된 자식 노드들 또는 스트록들을 참조할 수 있으며, 이는 결코 다시 정정되지 않을 수 있다.
따라서, 본 발명의 각종 실시예들은, 분석 처리의 결과들에 기초하여 분석 콘텍스트 오브젝트(1709)를 업데이트하는 경우, 임의적인 충돌에 대한 변경들을 적용하지 않을 것이다. 이러한 기준이 임의적인 충돌들에 기초하여 변경들을 식별하고 차단하기 위해 추가적인 처리를 요구할 수 있지만, 이러한 기준은 비교적 구현하기 쉬우며 유지하기 간단하다. 물론, 본 발명의 또 다른 예시들은 다른 기준에 따라서 임의적인 충돌들에 대응하는 변경들을 구현할 수 있다. 특히, 이러한 대안의 예들은 분석 콘텍스트 오브젝트(1709)에서 영구적인 논리적 불일치 관계들을 생성하지 않는 임의적인 충돌들로부터의 변경들을 구현할 수 있다.
하나의 충돌이 또다른 충돌을 생성할 수 있다는 점에서 그 충돌들은 전이적 효과(transitive effect)를 가질 수 있음을 유의해야 한다. 예를 들어, 분석 처리가 라인에 대한 노드 L을 생성하고 이어서 노드 L의 자식 노드로서 단어에 대한 노드 W를 생성할 수 있다. 임의의 종류의 충돌에 기인하여 노드 L의 생성이 분석 콘텍스트 오브젝트(1709)에 적용되지 않았다면, 노드 W의 생성은 필수적 충돌이 될 것이다.
본 발명의 여러 실시예들이 분석 처리의 결과들을 문서(1703)의 현재 상태로 조정하기 위해 로그-기반의 접근법을 이용할 수 있다. 이러한 로그-기반의 접근법에서, 문서 독립 분석 콘텍스트 오브젝트(1903)는 분석 처리에 의해 행해진 문서 독립 분석 콘텍스트 오브젝트(1903)에 대한 변경들의 로그를 포함한다. 로그는 예를 들어, 변화 기록들의 리스트의 형태일 수 있다. 이어서 각 변경은 (예를 들어, 문서 독립 분석 콘텍스트 오브젝트(1903)를 변경하기 위해 호출되었던 메소드를 식별함으로써) 행해진 변경의 타입, (예를 들어, 메소드가 호출된 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 노드를 식별함으로써) 변경이 행해진 문서 엘리먼트, 및 메소드 호출을 위한 논쟁(arguments)을 재생성하는데 요구되는 임의의 정보를 포함할 수 있다. 유리하게, 문서 독립 분석 콘텍스트 오브젝트(1903)는 잉크 분석 도구(1901) 및 분석 처리들에 의해 구현되기 때문에, (희망하는 경우, 로그가 대안으로 애플리케이션(1701)에 노출될 수 있는 경우에도) 변경 로그는 소프트웨어 애플리케이션(1701)에 보이지 않을 수 있다.
변경 로그 접근법을 이용한 조정 처리를 실행하기 위해서, 잉크 분석 도구(1901)는 변경들의 발생 시간 순서대로 각각의 변경 기록을 조사한다. 즉, 잉크 분석 도구(1901)는 도 27에 도시된 처리를 구현할 수 있다. 우선, 단계 2701에서, 잉크 분석 도구(1901)는 변경을 적용하도록 요구되는 현재 분석 콘텍스트 오브젝트(1709) 내의 대응하는 노드들을 액세스하려고 시도한다. 이 검색 단계는, 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709)로부터 하나 이상의 필요한 노드들을 삭제한 경우, 실패할 수 있으며, 따라서 필수적 충돌로 이어질 수 있다.
다음으로, 단계 2703에서, 잉크 분석 도구(1901)는 변경이 필수적 충돌을 생성하는지 아니면 임의적 충돌을 생성하는지를 결정한다. 이러한 결정을 하기 위한 절차는 이하에 보다 상세하게 설명될 것이다. 단계 2705에서, 잉크 분석 도구(1901)는, 조정 처리에 대한 기준에 의해 금지된 임의적인 충돌이나 필수적인 충돌을 생성하는 경우, 변경을 행하거나 아니면 변경을 금지한다. 예를 들어, 변경이 조정 처리에 대한 기준에 의해 금지되는 임의적 충돌이나 필수적 충돌을 생성할 경우, 잉크 분석 도구(1901)는 변경이 행해진 문서(1703)의 대응하는 영역을 나타내는 분석 콘텍스트 오브젝트(1709) 내의 노드들에 대해 변경들을 차단할 수 있다. 다른 한편 변경이 적용되면, 잉크 분석 도구(1901)는 분석 콘텍스트 오브젝트(1709) 내의 필수적인 노드들에 대해 원하는 변경을 행하기 위해 적절한 메소드를 호출할 수 있다.
삭제
분석 처리가 분석 콘텍스트 오브젝트(1709)에 새로운 엘리먼트 노드를 추가하지만 이어서 스트록 노드들을 새로운 노드로 이동시키는 것에 실패한다면, 분석 처리는 또한 스트록 노드들이 새로운 노드들로 성공적으로 이동되었음을 가정하고 엘리먼트 노드를 삭제하려고 하지 않을 것이다. 그러므로, 현재 분석 콘텍스트 오브젝트(1709) 내의 비어있는 노드에 대응하는 문서 독립 분석 콘텍스트 오브젝트(1903) 내에 엘리먼트 노드가 있을 것이다. 따라서, 일단 분석 콘텍스트 오브젝트(1709)에 대한 모든 변경들이 처리되기만 하면, 단계 2707에서, 잉크 분석 도구(1901)는 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 노드들에 대응하는 분석 콘텍스트 오브젝트(1709) 내의 임의의 "비어있는" 노드들을 삭제하기 위해 그 문서 독립 분석 콘텍스트 오브젝트을 리뷰한다. 이러한 비어있는 노드 삭제 단계는 선택적인 것이며, 본 발명으로부터 벗어나지 않고 생략될 수 있다.
문서 독립 분석 콘텍스트 오브젝트(1903)가 임의의 비어있는 노드들을 포함해서는 안되며, 조정 처리는 비어있는 노드들이 문서 독립 분석 콘텍스트 오브젝트(1903) 내에 생성되는 것을 방지해야 함을 유의해야 한다. 이 단계는, 예외적으로, 비어있을지라도 분석 콘텍스트 오브젝트(1709)의 루트 노드를 삭제하려고 시도하지 않을 것임을 또한 알아야 한다. 마지막으로, 단계 2709에서, 잉크분석 도구(1901)는 소프트웨어 애플리케이션(1701)에 대해 문서 독립 분석 콘텍스트 오브젝트(1903)과 현재의 분석 콘텍스트 오브젝트(1709)의 분석 결과들 간의 임의의 충돌을 식별할 것이므로, 소프트웨어 애플리케이션(1701)은 다음의 분석 처리에서의 충돌들에 의해 영향을 받는 문서(1703)의 영역들을 포함할 수 있다.
이제 상기 단계 2703 내의 충돌들의 검출로 돌아가서, 일단 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 변경들에 대응하는 분석 콘텍스트 오브젝트(1709) 내의 모든 노드들이 액세스되면, 분석 콘텍스트 오브젝트(1709) 내의 각 노드에 대한 모든 다른 가능한 필수적 충돌들이 정적으로 검출될 수 있다(또는 대안으로, 필수적인 충돌의 부재가 각각의 노드에 대해 검출될 수 있다). 특히, 필수적인 충돌들은, 분석 콘텍스트 오브젝트(1709)에 대한 인터페이스에 의해 지정된 규칙들에 기초하여 검출될 수 있다.
그러나, 이러한 변경들은, 분석 콘텍스트 오브젝트(1709)의 인터페이스에 의해 강제되지 않지만, 대신에 두 가지 경우의 변경들이 모두 분석 콘텍스트 오브젝트(1709) 내의 동일한 노드에 영향을 미친 경우 분석 처리에 의해 행해진 변경들보다 우호적인, 소프트웨어 애플리케이션(1701)에 의해 행해진 변경들에 대한 재량에 의한 선택에 기초하므로, 임의적인 충돌들은 문서(1703)에 관한 추가적인 상태 정보 없이는 식별될 수 없다. 대신에, 이러한 충돌들은, 분석 콘텍스트 오브젝트(1709) 내의 노드들이 소프트웨어 애플리케이션(1701)에 의해 변경되었음을 결정하기 위해 현재 분석 콘텍스트 오브젝트(1709)를 문서 독립 분석 콘텍스트 오브젝트(1903)의 최초 버전과 비교함으로써, 검출될 수 있다.
예를 들어, 조정 기준은 소프트웨어 애플리케이션(1701)에 의한 부모 노드로의 자식 스트록 노드의 추가 또는 삭제를 부모 노드에 대한 임의적인 충돌인 것으로 정의할 수 있다. 그러한 변경이 발생하는지를 결정하기 위해, 잉크 분석 도구(1901)는 현재 분석 콘텍스트 오브젝트(1709) 내의 노드에 의존하는 자식 스트록 노드들을 리뷰하고, 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 내의 대응 노드에 의존하는 자식 스트록 노드들과 그들의 수 및 Guid(또는 다른 유일 식별자)를 비교할 수 있다. 자식 스트록 노드들이 이러한 실시예들(및 임의의 다른 원하는 실시예들)에 매칭한다면, 잉크 분석 도구(1901)는 분석 처리들에 의해 행해진 변경들을 분석 콘텍스트 오브젝트(1709) 내의 부모 노드에 적용할 수 있다.
이러한 예에 계속하여, 로그 엔트리 내의 다음 변경은, 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 부모 노드에 종속하도록 이동되는 또다른 스트록 노드로 이루어 질 수 있다. 이러한 변경들로부터 어떠한 필수적 충돌도 없으면, 잉크 분석 도구(1901)는 분석 콘텍스트 오브젝트(1709)에 대응하는 변경을 행하도록 허용된다. 그러나, 잉크 분석 도구(1901)가 임의적 충돌이 존재하는지를 결정하기 위해 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전을 점검하는 경우, 현재 분석 콘텍스트 오브젝트(1709) 내의 부모 노드가 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 내의 부모 노드보다 하나 이상의 의존성 스트록 노드를 더 갖는 것으로 결론 내릴 것이며, 따라서 이는 필수적 충돌이 존재하는 것으로 잘못된 결정을 할 것이다(즉, 행해진 변경들에 기초하여 충돌이 존재하는 것으로 결정할 것이다).
따라서, 로그-기반의 조정 처리는 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전과 현재의 분석 콘텍스트 오브젝트(1709) 간의 비교로부터 조정에 의해 행해진 이전의 변경들을 배제해야 한다. 본 발명의 여러 실시예들에서, 이러한 배제(exclusion)는, 임의의 리스트 엔트리들을 조사하고 충돌된 노드들의 리스트를 유지하기 전에, 현재 분석 콘텍스트 오브젝트(1709) 내의 모든 노드들을 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 내의 그들에 대응하는 노드들과 비교함으로써 행해질 수 있다.
대안으로 또는 부가적으로, 본 발명의 여러 실시예들은, 문서 독립 분석 콘텍스트 오브젝트의 엘리먼트들에 대응하는 현재 분석 콘텍스트 오브젝트(1709)의 엘리컨트들의 캐쉬(cache)를, 대응하는 엘리먼트들이 검색될 때마다 사용되는 분석 결과들로 유지할 수 있다. 예비적인 전달은 없으나, 대응하는 엘리먼트가 임의적 충돌들이 없는 것으로 처음으로 결정된 때 캐쉬가 포퓰레이팅(populate)된다. 선택적으로, 캐쉬는 결과적으로 어떠한 엘리먼트들이 임의적 충돌들을 가졌는지를 기록할 수 있다. 이러한 접근법은 변경 로그가 짧은 경우 임의적인-충돌-발견-전달(discretionary-collision-finding-pass) 접근법보다 더 나은 성능을 갖지만, 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903)는 많은 노드들을 포함하는 경우 더 나쁜 성능을 가질 수도 있다. 이는 또한 다른 접근법보다 더 복잡하지는 않다.
또한, 캐쉬 내의 엘리먼트들의 부모 콘텍스트 노드들이 캐쉬되어야 함을 알아야 한다. 특히, 자식 콘텍스트 노드에 대한 변경은 그의 부모 콘텍스트 노드의 속성들에 대한 변경으로 고려될 것이다. 따라서, 또한 이 시점에서 소프트웨어 애플리케이션(1701)에 의해 행해진 변경들에 대하여, 캐쉬 내에 저장된 콘텍스트 노드의 부모 콘텍스트 노드는 평가될 필요가 있다. 캐쉬 내의 각 콘텍스트 노드에 대한 부모 노드들의 캐싱(caching)은, 루트 노드가 전달될 때까지 또는 변경들이 검출될 때까지, 그 트리 끝까지(예를 들어, 부모 노드에서 조부모(grandparent) 노드 내지 증조부모(great-grandparent) 노드까지) 반복될 필요가 있다. 그러나, 많은 상황에서, 트리는 통상적으로 매우 깊어지지 않을 것이므로, 이러한 반복은 단지 소수의 노드들에 대해서만 행해진다.
또한 본 발명의 여러가지 노드들로서, 문서 독립 분석 콘텍스트 대상(1903)의 최초 버전은또한 본 발명의 다양한 예시들에서, 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전은 임의적 충돌들을 검출하는 목적으로만 사용된다. 임의적 충돌들의 검출이 본 발명의 예들에서 필수적이지 않다면, 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 및 대응하는 엘리먼트 캐쉬는 모두 제거될 수 있다. 이러한 "로그-기반의" 접근법은, 어떠한 변경들이 분석 처리에 의해 행해졌는지를 결정하는데 보다 적은 검색을 요구하고 문서 독립 분석 콘텍스트(1903)에 대한 동작들이 개별적으로 처리되기 때문에, 이하에 기재되는 "비교-기반의(comparison-based)" 접근법보다는 유지하기 용이할 수 있으며, 그러므로, 새로운 타입의 동작을 추가하는 것이 다른 동작들에 쉽게 영향을 미치지 않는다.
분석 결과들을 문서(1703)의 현재 상태로 조정하기 위한 "로그-기반의" 기술 대신에, 본 발명의 각종 실시예들이 조정을 위한 "비교-기반의" 접근법을 이용할 수 있다. 비교-기반의 접근법의 주요 구별되는 특징은 문서 독립 분석 콘텍스트 오브젝트(1903)에 대해 행해진 변경들의 어떠한 로그도 유지되지 않는다는 것이며, 그래서 이러한 기술은, 분석 결과들을 포함하는 문서 독립 분석 콘텍스트 오브젝트를 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전과 비교하는 것에 의하는 것 외에 분석 처리가 무엇을 했는지에 대한 정보를 수집하지 않는다. 그러므로, 이러한 접근법에서는, 임의적 충돌들에 대한 임의의 판단과는 무관하게, 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전이 항상 요구된다.
이러한 접근법을 사용하여, 잉크 분석 도구(1901)는 우선 스트록 맵을 구축한다. 즉, 문서 독립 분석 콘텍스트 오브젝트(1903)의 최초 버전 내의 모든 잉크 리프 노드에 대해, 현재 분석 콘텍스트 오브젝트(1709) 내의 대응하는 노드가 있는 경우, 리프 노드는 해시 테이블(hash table)(또는 다른 적절한 데이터 구조)에 추가된다. 따라서, 해시 테이블은 문서 독립 분석 콘텍스트 오브젝트(1903)의 최초 버전 내의 스트록 GUID들(또는 다른 단일 노드 식별자들)을 현재 분석 콘텍스트 오브젝트(1709) 내의 리프 노드 참조들로 매핑한다.
다음으로, 잉크 분석 도구(1901)는 소프트웨어 애플리케이션(1701)이 분석 콘텍스트 오브젝트(1709)에서 변경하는 모든 노드들을 식별한다. 이는 상술한 임의적 충돌들을 결정하기 위한 기술들을 사용하여 행해진다. 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 내의 각 노드에 대해, 현재 분석 콘텍스트 오브젝트(1709) 내에 대응하는 노드가 있고 그것이 몇 가지 중요한 방식으로 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 내의 노드와 상이하다면, 잉크 분석 도구(1901)는 이 노드가 그 애플리케이션에 의해 변경되었으며 잠재적 충돌인 것으로 결정한다. 그러한 노드들에 대한 참조들은, 분석 콘텍스트 오브젝트(1709)에 추가되어서는 안 되는 분석 결과 노드들에 대응하는 제1 리스트 (이후 resultsNodesNotToAdd 리스트로서 언급됨) 및 임의적 충돌들을 생성하는 노드들의 제2 리스트에 저장된다.
문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전 내의 각 노드에 대해, 잉크 분석 도구(1901)는 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903) 및 현재 분석 콘텍스트 오브젝트(1709)에서의 대응하는 노드들을 찾는다. 분석 콘텍스트 오브젝트(1709) 내의 각 노드에 대해, 잉크 분석 도구(1901)는 소프트웨어 애플리케이션(1701)이 그 노드를 삭제했는지를 결정한다. 그러한 노드들은 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전에는 존재하지만, 분석 콘텍스트 오브젝트(1709)에는 어떠한 대응 노드도 없다. 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 대응하는 노드는, 존재할 경우, resultsNodesNotToAdd 리스트에 추가된다.
다음으로, 잉크 분석 도구(1901)는 문서 독립 분석 콘텍스트 오브젝트(1903)로부터 노드를 삭제했는지 결정한다. 이것은, 분석 콘텍스트 오브젝트(1709) 내에 대응하는 노드가 있고 그것이 변경되지 않았지만 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903) 내에 대응하는 노드가 없을 때, 검출된다. 분석 처리에 의해 삭제된 노드들이 삭제된 노드들의 리스트에 저장된다. 그러한 노드는 현재 분석 콘텍스트 오브젝트(1709)에 추가되지 않지만, 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903) 내에 어떠한 대응하는 노드도 없기 때문에 그 resultsNodesNotToAdd 리스트에서 없어지지 않는다.
소프트웨어 애플리케이션(1701)이 노드를 삭제하거나 변경하지 않았고, 분석 처리가 노드를 삭제하지 않은 경우, 잉크 분석 도구(1901)는 분석 처리가 노드를 변경했는지를 결정할 수 있다. 소프트웨어 애플리케이션(1701)에 의해 행해진 변경들을 검출하기 위해 사용하기 위한 상술한 바와 동일한 기술들이 분석 처리에 의해 행해진 변경들을 검출하는데에도 사용될 수 있다. 분석 처리에 의해 변경된 노드들은 resultsNodesNotToAdd 리스트에 추가되며, 변경들은 분석 콘텍스트 오브젝트(1709) 내의 노드들을 적절한 방법으로 호출함으로써 전파된다. 소프트웨어 애플리케이션(1701)과 분석 처리 어느 것에 의해서도 노드가 변경되거나 삭제되지 않았으면, 그 노드에는 아무것도 발생하지 않은 것이고, 노드는 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903)에 존재하며 분석 콘텍스트 오브젝트(1709)에 추가되지 않기 때문에, 잉크 분석 도구(1901)는 그 노드를 resultsNodesNotToAdd 리스트에 추가한다.
다음으로, 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903) 내의 각 노드에 대해, 노드가 resultsNodesNotToAdd 리스트에 없으면, 잉크 분석 도구(1901)는, 분석 콘텍스트 오브젝트(1709) 내에 대응하는 노드를 생성함으로써 분석 처리에 의한 노드에 대한 임의의 변경들을 전파할 수 있다. 분석 결과들 내의 노드들의 탐색(traversal)은 하향식(top-down) 전위(pre-order) 탐색을 이용하여 수행될 수 있으므로, 부모 노드들은 자식 노드들에 앞서 생성되는 것을 보증된다.
분석 콘텍스트 오브젝트(1709) 내의 새로운 리프 노드를 생성한 경우, 분석 결과들에 포함된 노드와 연관된 어떠한 잉크 스트록들도 분석 콘텍스트 오브젝트(1709) 내의 다른 노드들로부터 새로운 노드들로 또한 이동될 수 있다. 이어서 상술한 스트록 맵은 스트록들을 이동시키기 위한 소스 엘리먼트들을 식별하기 위해 사용될 수 있다. (필수적 충돌을 생성하는) 소스 엘리먼트가 존재하지 않는 경우, 또는 소스 엘리먼트가 상술한 임의적 충돌 리스트에 포함되는 경우, 잉크 스트록들은 이동되지 않는다. 분석 콘텍스트 오브젝트(1709)에 불필요한 호출들을 저장하기 위하여, 이러한 잉크 분석 도구(1901)는 적어도 하나의 비-충돌(non-colliding) 스트록 소스 노드가 없는 경우, 자식 콘텍스트 노드를 생성하기 위해 메소드를 호출하는 것을 피할 수 있다. 동일한 스트록 소스 점검은 또한 비-잉크 리프 노드들에서 수행되므로, 적어도 하나의 라인의 구성요소 단어들이 예를 들어, 적어도 하나의 성공적으로 이동된 스트록을 포함하지 않을 경우에는, 라인에 대한 노드가 생성되지 않는다.
이어서, 인식 격자와 같은 새롭게 생성된 노드에는 다른 정보가 또한 적용된다. 일시적인 논리적 불일치성을 초래하는 적용된(즉, 차단되지 않은(non-blocked)) 임의적 충돌을 생성하면서 임의의 스트록들이 이동할 수 없는 경우에도 인식 격자는 적용된다. 그러나, 실패한 스트록 이동들이, 변경들이 차단된 문서의 영역에 대응하는 분석 콘텍스트 오브젝트(1709)의 일부분의 지정에 반영된 후에는, 소프트웨어 애플리케이션(1701)이 차단된 영역을 재분석하도록 통지받기 때문에, 그 불일치성은 일시적이다.
분석 콘텍스트 오브젝트(1709)로부터 삭제될 각 노드에 대해, 잉크 분석 도구(1901) 리스트는 분석 콘텍스트(1709)에 대한 모든 다른 편집들 및 추가들이 수행된 노드가 실제로 삭제될 수 있는지를 확인하기 위해 점검한다. 삭제되어야 하고 모든 자식 노드들 및 스트록들이 실제로 비어있는 노드들은 분석 콘텍스트 오브젝트(1709)로부터 삭제된다. 일단 그러한 노드가 삭제되면, 모든 조상 노드들(루트 노드까지 그러나 루트 노드는 포함하지 않음)은 다른 남아있는 자식들을 갖는 조상을 만날 때까지 연속적으로 삭제된다.
마지막으로, 잉크 분석 도구(1901)는, 분석 처리에 의한 분석 콘텍스트 오브젝트(1709)에 대한 변경들을 검출하고 전파하기 위하여, 분석 콘텍스트 오브젝트(1709)와 분석 결과들을 갖는 문서 독립 분석 콘텍스트 오브젝트(1903)간의 순서를 정하는 노드의 전체적인 비교를 행한다. 그러나, 이러한 비교는 문서 독립 분석 콘텍스트 오브젝트(1903)의 원래 버전을 무시하므로, 소프트웨어 애플리케이션(1701)에 의해 정해진 순서에 대한 변경들을 검출하는 위한 방법이 없다는 것을 알아야 한다. 다음으로, 분석 콘텍스트 오브젝트(1709) 내의 대응하는 노드를 갖는 분석 결과들 내의 각 콘테이너 노드에 대해, 콘테이너 노드들의 자식들의 순서가 비교된다. 두 가지 콘테이너 노드가 모두 정확하게 동일한 자식들 세트를 갖는다면, 분석 결과들의 순서는, 노드가 분석 결과들의 자식 노드와 동일한 GUID(또는 다른 식별자 타입)를 갖지 않는 분석 콘텍스트 오브젝트(1709) 내의 콘테이너의 리스트 내의 동일한 위치에서 발견될 때까지 분석 결과들 내의 콘테이너의 자식들을 통해 루프를 도는 것(looping)에 의해, 분석 콘텍스트 오브젝트(1709)에 전파된다. 그러한 미스매치가 발견되는 경우, 대응하는 노드는 분석 콘텍스트 오브젝트(1709) 내의 자식 리스트의 더욱 아래에서 또한 발견되어야 한다. 이어서 잉크 분석 도구(1901)는 노드에 대한 분석 콘텍스트 오브젝트(1709) 내의 자식 리스트의 나머지를 검색하고, 분석 콘텍스트(1709) 내의 노드에 대한 명령을 수정하기 위해 자식 노드를 이동시키기 위한 메소드를 호출한다. 잉크 분석 도구(1901)는 이어서 분석 결과들 내의 노드들을 통해 계속해서 루프를 돈다.
물론, 분석 리스트나 소프트웨어 애플리케이션(1701)은 어떠한 리스트에서나 삭제되거나 삽입된 노드를 가질 수 있으므로, 동일한 리스트들에 대한 가정은 참을 유지하지 않는다. "자식 리스트 매퍼(child list mapper)" 오브젝트는, 공통으로 유지되는 엘리먼트들을 포함하기만 하는 "잘려진(pruned)" 리스트들을 제시함으로써, 참을 유지하는 가정을 시뮬레이션하기(simulate) 위해 사용된다. 상술한 절차는 매핑된 자식 리스트들 상에서 실행되고, 이동들은 리스트 매퍼 오브젝트에 의한 실제 인덱스들 및 호출들로 번역된다(translated).
그러므로, 상술한 본 발명의 여러 실시예들에 따른 조정 기술들은 분석 처리가 개시된 후 문서의 내용들이 변경된 경우에도 분석 처리의 결과들이 문서 내의 현재 문서 엘리먼트들에 적용되는 것을 허용한다. 그러므로, 이러한 조정 기술들은 문서 내의 전자 잉크가 문서를 호스팅하는 소프트웨어 애플리케이션의 동작과 비동기적으로 분석되도록 허용한다. 또한, 이러한 조정 기술들은 기존의 독점 록킹 또는 다른 동기화 전략들로 멀티스레딩된 소프트웨어 애플리케이션들을 포함하는, 여러가지 서로 다른 소프트웨어 애플리케이션들에 의해 이용될 수 있다.
<이벤트 구동 시스템>
상술한 바와 같이, 본 발명의 여러 실시예들은 문서 독립 분석 콘텍스트 오브젝트를 카피함으로써 문서 상태의 "스냅사진"(snapshot)을 생성하며, 이어서 문서를 호스팅하는 소프트웨어 애플리케이션이 동작을 계속하면서, 문서 독립 분석 콘텍스트 오브젝트를 비동기적으로 분석한다. 대안으로, 본 발명의 여러 실시예들은, 비동기적 잉크 분석에 대한 문서 독립 분석 콘텍스트 오브젝트의 사용에 선행될 수 있다. 대신에, 이러한 본 발명의 예시들은 문서에 대한 모든 잉크 및 의미론 데이터를 저장하기 위한 봉인된(sealed) 컴포넌트를 사용할 수 있다. 특히, 본 발명의 이러한 예시들은 문서: 스트록들을 추가, 삭제 또는 변경하는 것과 같은 잉크 이벤트들; 및 스트록들을 단어들로 그룹화하거나, 의미론 노드들을 추가하거나, 텍스트 인식 결과들을 스트록들에 연관시키는 것과 같은 구조 이벤트들에 대해 행해질 수 있는 두가지 타입의 변경들을 인식한다. 모든 이벤트는 외부 청취자에게 그 이벤트를 완벽하게 기재하는데 필요한 모든 데이터를 포함한다. 예를 들어, "스트록 추가" 이벤트는 모든 스트록 데이터를 포함할 것이다. 이러한 "풍부한" 이벤트들로서, 청취자는, 이벤트들을 수신된 순서로 적용함으로써 잉크 오브젝트의 정확한 복제본을 유지할 수 있다.
도 28은 본 발명의 여러 실시예들에 따르는, 이러한 배치가 사용될 수 있는방법의 한가지 예시를 도시한다. 이 도면에 도시된 바와 같이, 애플리케이션(2801)은 잉크 분석 도구(2803)를 이용한다. 잉크 분석 도구(2803)는 애플리케이션(2801)에 대해 잉크 데이터 및 (예를 들어, 트리 구조와 같은) 문서 구조(2807)를 유지한다. 애플리케이션은 또한 이벤트 큐(event queue)(2809), 파서 처리(2811) 및 인식 처리(2817)를 이용한다. 파서 처리(2811)는 잉크 데이터(2805)의 클론(clone) 및 문서 구조(2807)의 클론(2815)을 유지한다. 유사하게, 인식 처리(2817)는 잉크 데이터(2805)의 클론(2819) 및 문서 구조(2807)의 클론(2821)을 유지한다.
애플리케이션은, 잉크 데이터를 생성하는 경우 메소드(2823)를 통하여 잉크 분석 도구(2803)에 잉크 데이터를 제공한다. 이에 응답하여, 잉크 분석 도구(2803)는, 잉크 데이터에서의 변경에 대응하는 이벤트를 생성하고, 모든 이벤트에 태그를 추가하고, 특정 태그들을 갖는 이벤트들을 리슨하는(listen) 컴포넌트들로 희망하는 분석 처리 또는 처리들을 정의한다. 예를 들어, 잉크에 대한 모든 사용자 변경은 태그 "UserChange"로 표시될 수 있고, 이 태그를 갖는 이벤트(2825)는 변경에 응답하여 동기적으로 이벤트 큐(2809)로 보내진다. 추후 어떤 시점에서, 파서 처리(2811) 및 인식 처리(2817)는 이벤트 큐(2809)로부터 태그된 이벤트를 검색할 것이다.
이어서 제1 분석 처리(예를 들어, 파싱 처리(2811))는 잉크 분석 도구(2803)에 의해 발행된 모든 이벤트들을 리슨하고, 태그 "UserChange"를 갖는 것들에 응답할 것이다. 이어서 제1 분석 처리는 잉크 데이터(2813) 및 문서 구조(2815)의 내부 카피에 그 이벤트로 지정된 변경들을 적용하고, 그 이벤트에 기재된 데이터를 분석하고, 이어서 그 변경들에 의해 생성된 이벤트들(2827)을 생성하고 태그 "Parser1Change"로 태그할 것이다. 이러한 이벤트들(2827)은 이벤트 큐(2809)로 돌아가 잉크 분석 도구(2803)에 의해 릴레이될(relayed) 것이다. 이어서 제2 분석 처리(예를 들어, 핸드라이팅 인식 처리(2817))는, "Parser1Change" 태그로 태그된 이벤트들을 리슨(listen)할 것이다. 응답으로, 이는 이벤트에 의해 지정된 변화들을 잉크 데이터(2819) 및 문서 구조(2821)의 내부 카피에 적용하고, 응답으로 이벤트들에 기술된 데이터를 분석할 것이다. 이어서 제2 분석기는 태그 "HandwritingRecognitionChange"를 갖는 분석 결과들로 이벤트(2829)를 생성하고 태그할 것이다. 잉크 분석 도구(2803)는, 파서 처리(2811) 및 인식 처리(2817)로부터 이벤트들을 수신할 때, 문서 구조(2807)에서의 변경을 나타내기 위해 이벤트들(2831)을 애플리케이션(2801)으로 보낸다.
본 발명의 이러한 실시예들은 또한 하나 이상의 이벤트를 갖는 이벤트들에 따름으로써 각각의 분석 처리를 지원하고, 내부 처리에 기초하여 다른 태그들을 갖는 변경들로부터 그 이벤트들을 태그할 수 있다. 따라서, 본 발명의 이러한 대안의 구현들이 또한 그 문서를 호스팅하는 소프트웨어 애플리케이션의 동작으로부터 비동기적인 문서 내에서의 전자 잉크의 분석을 고려할 수 있다.
<결론>
본 발명이 현재 본 발명을 수행하는 바람직한 모드들을 포함하는 특정 예들에 대해 기재되었지만, 본 기술 분야의 숙련자들은 첨부 청구항들에 설명된 바와 같이 본 발명의 정신 및 범위 내에 있는 앞서 기재된 시스템들 및 기술들의 다양한 변경들 및 교환들이 있음을 이해할 것이다.

Claims (18)

  1. 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정(reconcile)하는 방법으로서 - 상기 제1 데이터 구조 및 상기 제2 데이터 구조 각각은 노드들의 계층적 트리를 포함하고, 상기 제1 데이터 구조는 분석 콘텍스트 오브젝트(1709)를 포함하고, 상기 제2 데이터 구조는 문서 독립 분석 콘텍스트 오브젝트(1903)를 포함하고, 각 데이터 구조는 최초에 복수의 대응하는 노드를 포함함 - ,
    상기 제2 데이터 구조의 각 노드에 대하여, 상기 노드가 상기 제1 데이터 구조에서의 대응하는 노드로부터 변경을 수신하였는지 여부를 판단하는 단계;
    상기 제1 데이터 구조에서 대응하는 노드로부터 변경을 수신한 것으로 판단된 상기 제2 데이터 구조에서의 각 노드에 대하여, 상기 제1 데이터 구조에서의 상기 대응하는 노드로의 액세스를 시도하는 단계;
    상기 제1 데이터 구조에서의 상기 대응하는 노드가 액세스 가능하지 않은 경우, 상기 변경이 상기 제2 데이터 구조에서 발생하는 것을 방지하는 단계;
    상기 제1 데이터 구조에서의 상기 대응하는 노드가 액세스 가능한 경우, 상기 제2 데이터 구조에 대한 상기 변경이 언제 임의적 충돌(discretionary collision)을 생성하였는지를 판단하고, 상기 제2 데이터 구조에 대한 상기 변경이 언제 필수적 충돌(mandatory collision)을 생성하였는지를 판단하는 단계 - 필수적 충돌들은, 분석 처리에 의해 상기 문서 독립 분석 콘텍스트 오브젝트에 대해 행해진 변경을 현재 상태에 대한 분석 콘텍스트 오브젝트에 적용하는 것이 가능하지 않은 경우에 발생하고, 임의적 충돌은, 상기 분석 처리에 의해 상기 문서 독립 분석 콘텍스트 오브젝트에서 변경된 값과 관련된 값이 상기 분석 콘텍스트 오브젝트에서 변경되었으나, 상기 분석 콘텍스트 오브젝트의 기타 제약(constraints)이 상기 분석 처리에 의해 행해진 상기 변경을 상기 분석 콘텍스트 오브젝트로 적용하는 것을 허용하는 경우 발생함 - ;
    상기 제2 데이터 구조에 대한 상기 변경이 임의적 충돌을 생성하는 경우, 상기 임의적 충돌이 충돌 기준에 의해 금지되는지 여부를 판단하는 단계;
    상기 임의적 충돌이 상기 충돌 기준에 의해 금지되지 않은 경우, 상기 제1 데이터 구조에서의 상기 대응하는 노드에 대해 상기 변경을 행하는 단계; 및
    상기 임의적 충돌이 상기 충돌 기준에 의해 금지되는 경우, 상기 변경이 발생하는 것을 방지하는 단계 - 상기 충돌 기준은 잉크 스트록들이 고정된 노드 아래의 리프 노드로부터 제거되는 것을 금지함 -;
    를 포함하는, 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하는 방법.
  2. 제1항에 있어서,
    비어있는(empty) 노드들을 상기 제1 데이터 구조로부터 삭제하는 단계를 더 포함하는 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하는 방법.
  3. 제1항에 있어서,
    상기 제2 데이터 구조에 대한 변경이 상기 제1 데이터 구조를 유지하고 있는 소프트웨어 애플리케이션(1701)에 충돌을 생성하는 상기 제1 데이터 구조에서의 노드들을 식별하는 단계를 더 포함하는 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하는 방법.
  4. 제1항에 있어서, 상기 충돌 기준은,
    잉크 스트록들이 상기 고정된 노드 아래의 리프 노드에 추가되는 것을 금지하고,
    상기 고정된 노드 아래로 리프 노드들이 추가되는 것을 금지하고,
    상기 고정된 노드 아래에서 리프 노드들을 제거하는 것을 금지하고,
    상기 고정된 노드 아래에서 리프 노드들에 대한 부모 상태(parental status) 변경을 금지하는, 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하는 방법.
  5. 제1항에 있어서,
    상기 충돌 기준은,
    특정 조건들에 따라 상기 고정된 노드 아래의 리프 노드에 늦은 잉크 스트록들이 추가되는 것을 허용하고,
    상기 고정된 노드 아래에 리프 노드들을 추가하는 것을 금지하고,
    상기 고정된 노드 아래에서 리프 노드들을 제거하는 것을 금지하고,
    상기 고정된 노드 아래에서 리프 노드들의 부모 상태 변경을 금지하는, 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하는 방법.
  6. 제1항에 있어서,
    상기 충돌 기준은, 특정 조건에 따라 상기 고정된 노드 아래의 리프 노드에 잉크 스트록들이 추가되는 것을 허용하는, 컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하는 방법.
  7. 컴퓨터 판독가능 저장매체로서,
    컴퓨터 판독가능 매체에 저장된 제1 데이터 구조를 컴퓨터 판독가능 매체에 저장된 제2 데이터 구조로 조정하기 위한 방법을 실행하는 컴퓨터 실행가능 명령들을 저장하고, 상기 방법은 제1항의 방법을 포함하는, 컴퓨터 판독가능 저장매체.
  8. 제7항에 있어서,
    상기 방법은, 비어있는(empty) 노드들을 상기 제1 데이터 구조로부터 삭제하는 단계를 더 포함하는, 컴퓨터 판독가능 저장매체.
  9. 제7항에 있어서,
    상기 방법은, 상기 제2 데이터 구조에 대한 변경이 상기 제1 데이터 구조를 유지하는 소프트웨어 애플리케이션(1701)에 충돌을 생성하는 상기 제1 데이터 구조에서의 노드들을 식별하는 단계를 더 포함하는, 컴퓨터 판독가능 저장매체.
  10. 제7항에 있어서,
    상기 충돌 기준은,
    잉크 스트록들이 상기 고정된 노드 아래의 리프 노드에 추가되는 것을 금지하고,
    상기 고정된 노드 아래의 리프 노드들을 추가하는 것을 금지하고,
    상기 고정된 노드 아래의 리프 노드들을 제거하는 것을 금지하고,
    상기 고정된 노드 아래의 리프 노드들에 대한 부모 상태(parental status) 변경을 금지하는, 컴퓨터 판독가능 저장매체.
  11. 제7항에 있어서,
    상기 충돌 기준은,
    특정 조건들에 따라 상기 고정된 노드 아래의 리프 노드에 늦은 잉크 스트록들이 추가되는 것을 허용하고,
    상기 고정된 노드 아래의 리프 노드들을 추가하는 것을 금지하고,
    상기 고정된 노드 아래의 리프 노드들을 제거하는 것을 금지하고,
    상기 고정된 노드 아래의 리프 노드들의 부모 상태 변경을 금지하는, 컴퓨터 판독가능 저장매체.
  12. 제7항에 있어서,
    상기 충돌 기준은, 특정 조건들에 따라 상기 고정된 노드 아래의 리프 노드에 잉크 스트록들이 추가되는 것을 허용하는, 컴퓨터 판독가능 저장매체.
  13. 삭제
  14. 삭제
  15. 삭제
  16. 삭제
  17. 삭제
  18. 삭제
KR1020047010394A 2003-07-08 2003-08-21 제1 데이터 구조를 제2 데이터 구조로 조정하는 방법 KR101046101B1 (ko)

Applications Claiming Priority (2)

Application Number Priority Date Filing Date Title
US10/616,472 US7146850B2 (en) 2003-07-08 2003-07-08 Roll contour measuring apparatus and method
PCT/US2003/026170 WO2005029342A1 (en) 2003-08-21 2003-08-21 Electronic ink processing

Publications (2)

Publication Number Publication Date
KR20060080647A KR20060080647A (ko) 2006-07-11
KR101046101B1 true KR101046101B1 (ko) 2011-07-01

Family

ID=33564767

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047010394A KR101046101B1 (ko) 2003-07-08 2003-08-21 제1 데이터 구조를 제2 데이터 구조로 조정하는 방법

Country Status (2)

Country Link
US (1) US7146850B2 (ko)
KR (1) KR101046101B1 (ko)

Families Citing this family (13)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
DE102005035581A1 (de) * 2005-07-29 2007-02-01 Rosink Gmbh + Co. Kg Maschinenfabrik Vorrichtung zum Schleifen von Spinnzylindern
DE102005036434B4 (de) * 2005-08-03 2007-08-02 SSI Schäfer PEEM GmbH Füllstandsanzeige für Kommissionierautomaten
JP4822933B2 (ja) * 2006-05-19 2011-11-24 株式会社椿本チエイン 摩耗検知型コンベヤチェーンとその摩耗度合い判別方法
JP4417986B2 (ja) * 2007-07-18 2010-02-17 株式会社ミツトヨ 表面性状測定装置
CN102198453B (zh) * 2010-03-23 2013-04-03 宝山钢铁股份有限公司 轧辊表面振动纹的检测方法
JP6280386B2 (ja) * 2014-02-18 2018-02-14 日立造船株式会社 構造物の不陸計測方法及び装置
CN104384194B (zh) * 2014-09-10 2016-08-24 山西太钢不锈钢股份有限公司 避免边部加热器电击伤不锈钢表面的方法
CN110639966A (zh) * 2019-10-30 2020-01-03 上海金艺检测技术有限公司 非接触式轧辊辊形在线检测装置及方法
CN111397503B (zh) * 2020-04-09 2021-11-26 西安米拓检测技术有限公司 一种大量程粗糙度轮廓仪
EP4423451A1 (en) * 2021-10-25 2024-09-04 Karl Bagdal Measuring roundness with polar coordinates of back-up and work rolls utilized in steel rolling processes
CN114112908A (zh) * 2021-11-05 2022-03-01 河北中重冷轧材料有限公司 一种双工位自动化轧辊检验架
CN114951308B (zh) * 2022-05-13 2023-03-24 北京科技大学 一种台式森吉米尔轧辊辊形及辊温测量仪
CN116603859B (zh) * 2023-07-19 2023-11-17 中国重型机械研究院股份公司 一种钢带轧制设备

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6377259B2 (en) 1998-07-29 2002-04-23 Inxight Software, Inc. Presenting node-link structures with modification

Family Cites Families (24)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US3939404A (en) * 1974-07-10 1976-02-17 Dominion Foundries And Steel, Limited Method of testing for and preventing the possibility of cracking, spalling or like defects in rolling mill rolls by determining the rate of change in hardness
US4053237A (en) * 1976-07-02 1977-10-11 Westvaco Corporation Measuring the surface of a roller by glossmeter
US4423636A (en) * 1981-12-08 1984-01-03 Bethlehem Steel Corporation Articulated test probe mechanism with fluid bearing in test roll gap
US4495587A (en) * 1981-12-08 1985-01-22 Bethlehem Steel Corporation Automatic nondestructive roll defect inspection system
JPH01152306A (ja) * 1987-12-09 1989-06-14 Sumitomo Rubber Ind Ltd 形状測定方法およびその装置
US4966103A (en) * 1989-11-09 1990-10-30 Cooper Industries, Inc. Combustion system for dual fuel engine
US5117081A (en) 1991-04-01 1992-05-26 Armco Inc. Roll roundness measuring and machining apparatus and method
US5212452A (en) * 1991-09-24 1993-05-18 Modern Controls, Inc. Rotatable capacitance sensor
US5563808A (en) * 1993-05-03 1996-10-08 General Electric Company Pilger mill mandrel measuring device
JPH07188842A (ja) * 1993-12-27 1995-07-25 Kanto Special Steel Works Ltd 冷間圧延用ワークロール
US5533401A (en) * 1994-05-12 1996-07-09 General Electric Company Multizone ultrasonic inspection method and apparatus
US5740503A (en) * 1996-03-23 1998-04-14 Mita Industrial Co., Ltd. Image forming machine including apparatus for selectively connecting a rotary brush to a motor
US6062948A (en) * 1996-04-19 2000-05-16 Schmitt Measurement Systems, Inc. Apparatus and method for gauging a workpiece
US5800247A (en) * 1996-04-19 1998-09-01 Centerline Engineering, Inc. Non-contact gaging apparatus and method
US5992236A (en) * 1996-08-01 1999-11-30 Beloit Technologies, Inc. Ultrasonic inspection method
US5763786A (en) * 1996-09-18 1998-06-09 The Babcock & Wilcox Company Automated mill roll inspection system
US6092032A (en) * 1997-03-12 2000-07-18 Nitto Kogyo Co., Ltd. Electroconductive roller and apparatus and method for testing it
WO1998045493A1 (fr) * 1997-04-08 1998-10-15 Nippon Steel Corporation Rouleau composite pour laminage a froid
US6119536A (en) * 1997-10-30 2000-09-19 Xerox Corporation Constant distance contactless device
FR2778462B1 (fr) * 1998-05-07 2000-07-13 Snecma Procede de controle ultrasonore en immersion de pieces a geometrie cylindrique
JP3576845B2 (ja) * 1998-11-30 2004-10-13 キヤノン株式会社 チューブ被覆ローラの製造方法およびチューブ被覆ローラおよびチューブ被覆ローラを有する加熱定着装置
DE19920206B4 (de) * 1999-05-03 2006-02-23 Hell Gravure Systems Gmbh Verfahren zum Ausmessen von Näpfchen
JP2001277631A (ja) * 2000-03-31 2001-10-09 Toppan Printing Co Ltd 画像形成装置および画像形成方法
WO2003012562A1 (fr) * 2001-07-27 2003-02-13 Nippon Steel Corporation Systeme de traitement d'informations pour la fabrication de materiaux de construction, procede et installation de fabrication de materiaux de construction et systeme de circulation relatives aux informations de construction

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6377259B2 (en) 1998-07-29 2002-04-23 Inxight Software, Inc. Presenting node-link structures with modification

Also Published As

Publication number Publication date
KR20060080647A (ko) 2006-07-11
US20050005687A1 (en) 2005-01-13
US7146850B2 (en) 2006-12-12

Similar Documents

Publication Publication Date Title
KR100989011B1 (ko) 전자 잉크를 분석하기 위한 애플리케이션 프로그래밍 인터페이스를 포함하는 컴퓨터 판독가능 기록 매체, 전자 잉크 분석 방법 및 분석 콘텍스트 대상 생성 방법
US7533338B2 (en) Electronic ink processing
US7502812B2 (en) Electronic ink processing
AU2003262757B2 (en) Electronic ink processing
US7283670B2 (en) Electronic ink processing
KR101046101B1 (ko) 제1 데이터 구조를 제2 데이터 구조로 조정하는 방법
EP1678661B1 (en) Electronic ink processing
KR101045444B1 (ko) 전자 잉크 프로세싱
JP5162622B2 (ja) 電子インク処理
KR20070010094A (ko) 전자 잉크 프로세싱
AU2003259957A1 (en) Electronic ink processing

Legal Events

Date Code Title Description
PA0105 International application

Patent event date: 20040630

Patent event code: PA01051R01D

Comment text: International Patent Application

PG1501 Laying open of application
A201 Request for examination
PA0201 Request for examination

Patent event code: PA02012R01D

Patent event date: 20080821

Comment text: Request for Examination of Application

E902 Notification of reason for refusal
PE0902 Notice of grounds for rejection

Comment text: Notification of reason for refusal

Patent event date: 20100730

Patent event code: PE09021S01D

E90F Notification of reason for final refusal
PE0902 Notice of grounds for rejection

Comment text: Final Notice of Reason for Refusal

Patent event date: 20110208

Patent event code: PE09021S02D

E701 Decision to grant or registration of patent right
PE0701 Decision of registration

Patent event code: PE07011S01D

Comment text: Decision to Grant Registration

Patent event date: 20110531

GRNT Written decision to grant
PR0701 Registration of establishment

Comment text: Registration of Establishment

Patent event date: 20110627

Patent event code: PR07011E01D

PR1002 Payment of registration fee

Payment date: 20110627

End annual number: 3

Start annual number: 1

PG1601 Publication of registration
FPAY Annual fee payment

Payment date: 20140516

Year of fee payment: 4

PR1001 Payment of annual fee

Payment date: 20140516

Start annual number: 4

End annual number: 4

FPAY Annual fee payment

Payment date: 20150515

Year of fee payment: 5

PR1001 Payment of annual fee

Payment date: 20150515

Start annual number: 5

End annual number: 5

FPAY Annual fee payment

Payment date: 20160527

Year of fee payment: 6

PR1001 Payment of annual fee

Payment date: 20160527

Start annual number: 6

End annual number: 6

FPAY Annual fee payment

Payment date: 20170601

Year of fee payment: 7

PR1001 Payment of annual fee

Payment date: 20170601

Start annual number: 7

End annual number: 7

FPAY Annual fee payment

Payment date: 20180529

Year of fee payment: 8

PR1001 Payment of annual fee

Payment date: 20180529

Start annual number: 8

End annual number: 8

PC1903 Unpaid annual fee

Termination category: Default of registration fee

Termination date: 20200408