KR20130126901A - 온라인 문서 편집의 동기화 - Google Patents

온라인 문서 편집의 동기화 Download PDF

Info

Publication number
KR20130126901A
KR20130126901A KR1020137010630A KR20137010630A KR20130126901A KR 20130126901 A KR20130126901 A KR 20130126901A KR 1020137010630 A KR1020137010630 A KR 1020137010630A KR 20137010630 A KR20137010630 A KR 20137010630A KR 20130126901 A KR20130126901 A KR 20130126901A
Authority
KR
South Korea
Prior art keywords
document
user
server
application
component
Prior art date
Application number
KR1020137010630A
Other languages
English (en)
Inventor
알리 탈레가니
트리스탄 데이비스
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20130126901A publication Critical patent/KR20130126901A/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F15/00Digital computers in general; Data processing equipment in general
    • G06F15/16Combinations of two or more digital computers each having at least an arithmetic unit, a program unit and a register, e.g. for a simultaneous processing of several programs
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/10File systems; File servers
    • G06F16/17Details of further file system functions
    • G06F16/176Support for shared access to files; File sharing support
    • G06F16/1767Concurrency control, e.g. optimistic or pessimistic approaches
    • G06F16/1774Locking methods, e.g. locking methods for file systems allowing shared and concurrent access to files
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/90Details of database functions independent of the retrieved data types
    • G06F16/93Document management systems
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/197Version control

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Physics & Mathematics (AREA)
  • General Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • Databases & Information Systems (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Health & Medical Sciences (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Artificial Intelligence (AREA)
  • Data Mining & Analysis (AREA)
  • Business, Economics & Management (AREA)
  • General Business, Economics & Management (AREA)
  • Computer Hardware Design (AREA)
  • Software Systems (AREA)
  • Information Retrieval, Db Structures And Fs Structures Therefor (AREA)
  • Document Processing Apparatus (AREA)

Abstract

온라인 문서 서비스는 사용자가 편집할 수 있도록 애플리케이션 서버에 의해 제공된다. 문서는 애플리케이션 서버의 지역 메모리 내의 컴포넌트 기반의 구조에 저장되어 공동 작성(coauthoring) 및 충돌 해소에 있어서 단편성(granularity)을 제공한다. 컴포넌트 레벨 잠금은 동시적 사용자 편집 기반의 충돌을 최소화하고, 또한 다른 사용자의 참여를 나타내기 위해 사용된다. 컴포넌트 기반의 구조 개정은 컴포넌트 편집을 포착하고 문서 저장 동작에 동기화하도록 하기 위해 저장된다. 한 명 이상의 클라이언트에 의해 편집이 서버에 저장될 때, 문서가 클라이언트에서 현재의 표현을 생성하기 위해 사용된 버전으로부터 변경된 경우에도 이 편집은 서버 문서의 현재 버전에 저장될 수 있다.

Description

온라인 문서 편집의 동기화{SYNCHRONIZING ONLINE DOCUMENT EDITS}
웹 애플리케이션은 네트워크를 통해 사용자에게 매우 다양한 서비스 및 데이터를 제공한다. 데이터는 서로 다른 위치에서 수집, 처리 및 저장된다. 웹 애플리케이션은 그러한 데이터를 검색하고, 표시하기 위해 그것을 포맷화하고, 웹 페이지를 렌더링하는 클라이언트 장치 상의 브라우징 애플리케이션으로 그것을 제공한다. 몇몇 웹 페이지는 정적일 수 있는데, 여기에서 데이터는 대화식이 아닌 경우이다. 다른 경우에 웹 기반 모듈의 링크 또는 활성화를 통해 추가 정보 등과 같은 몇몇 대화성을 제공할 수 있다. 그러나 일반적으로, 웹 페이지는 웹 페이지 작성자에 의해 결정된 포맷과 양을 갖는 데이터를 제시한다.
온라인 문서 애플리케이션은 최근까지 오직 씩(thick) 클라이언트 애플리케이션의 영역이었던 문서 편집 및 시각화 기능을 사용자에게 제공한다. 컴퓨팅에서의 기술적 발전 및 네트워크 및 데이터 저장 성능의 확대는 온라인 애플리케이션이 씩 클라이언트 애플리케이션의 문서 편집 특징을 제공할 수 있게 하였다. 기반이 되는 기술과 무관하게 다양한 플랫폼에 걸쳐 온라인 애플리케이션이 이용 가능한 것의 이점은 문서 생성 및 관리에 다수의 사용자가 공동 참여할 수 있다는 것이다. 그러나 다수의 사용자가 한 문서를 액세스하게 하는 것은 비동기적 사용자 편집을 유발할 수 있다. 다양한 기술을 통해 다수의 플랫폼에 걸쳐 문서에 대한 액세스를 제공하는 것은 문서 관리 및 문서 일관성을 더 복잡하게 할 수 있다.
이 요약은 이하의 상세한 설명에서 추가적으로 설명되는 선택된 개념을 단순화된 형태로 도입하도록 제공된 것이다. 이 요약은 청구 대상의 주요 특징 또는 필수적 특징을 배타적으로 식별하도록 의도된 것이 아니고, 청구 대상의 범주를 결정하는 데 도움이 되도록 의도된 것도 아니다.
실시예는 문서 컴포넌트 레벨에서 개정(revisions)을 제어함으로써 온라인 문서 편집을 동기화하는 것에 관한 것이다. 몇몇 실시예에 따르면, 문서는 문서 컴포넌트의 그래프로 변형될 수 있고, 다수의 사용자에 의해 제출된 변경을 관리하기 위해 컴포넌트에서 잠금이 주장될 수 있다. 그래프 컴포넌트 내의 변경은 그래프의 개정을 유지하는 것에 의해 추적될 수 있다.
이들 및 다른 특징 및 이점은 이하의 상세한 설명을 판독하고 연관된 도면을 검토함으로써 명확해질 것이다. 상기 일반적 설명 및 이하의 상세한 설명은 모두 예시적인 것이고, 청구되는 측면을 제한하지 않는다는 것을 이해할 것이다.
도 1은 온라인 문서 편집 서비스의 예시적인 컴포넌트를 도시하는 도면.
도 2는 편집을 관리하기 위한 잠금 동작의 예시적인 단계를 도시하는 도면.
도 3은 편집을 관리하기 위한 개정 실행에서의 예시적인 단계를 도시하는 도면.
도 4(a) 내지 도 4(c)는 몇몇 실시예에 따른 예시적인 시나리오를 도시하는 도면.
도 5는 실시예에 따른 시스템이 구현될 수 있는 네트워크형 환경을 도시하는 도면.
도 6은 실시예가 구현될 수 있는 예시적인 컴퓨팅 운영 환경을 도시하는 블록도.
도 7은 실시예에 따라서 문서 컴포넌트 레벨에서 개정을 제어함으로써 온라인 문서 편집을 동기화하는 프로세스를 도시하는 논리 흐름도.
간략하게 상술된 바와 같이, 온라인 문서 편집은 잠금 동작을 이용함으로써 문서 컴포넌트 레벨에서 개정을 제어함으로써 동기화될 수 있다. 문서는 문서 컴포넌트의 그래프로 변환될 수 있다. 다수의 사용자에 의해 제출된 변경을 관리하기 위해 컴포넌트에 잠금이 주장될 수 있다. 그래프 컴포넌트 내의 변경은 각각의 공동 저작자(co-author)의 편집에 대한 문서의 컴포넌트 레벨에서의 편집을 포함하도록 그래프의 개정을 유지함으로써 추적될 수 있다. 이하의 상세한 설명에서, 본 명세서의 부분을 형성하고, 특정 실시예 또는 예시를 도식화하는 방식으로 도시하는 첨부된 도면을 참조한다. 이러한 측면은 본 발명의 사상 또는 범주를 벗어나지 않으면서 결합될 수 있고, 다른 측면이 이용될 수 있으며, 구조적 변경이 이루어질 수 있다. 그러므로 이하의 상세한 설명은 제한적 의미로 간주되지 않아야 하고, 본 발명의 범주는 첨부된 청구항 및 그 등가물에 의해 정의된다.
실시예는 컴퓨팅 장치 상의 운영 시스템에서 실행되는 애플리케이션 프로그램과 함께 실행되는 프로그램 모듈의 일반적인 문맥으로 설명될 것이나, 당업자라면 이러한 측면이 또한 다른 프로그램 모듈과 조합하여 구현될 수 있다는 것을 인식할 것이다.
일반적으로, 프로그램 모듈은 특정한 작업을 수행하거나 특정 추상적 데이터 종류를 구현하는 루틴, 프로그램, 컴포넌트, 데이터 구조 및 다른 종류의 구조를 포함한다. 더욱이 당업자라면 실시예가 휴대형 장치, 멀티프로세서 시스템, 마이크로프로세서 기반 또는 프로그래밍 가능 소비자 가전, 미니컴퓨터, 메인프레임 컴퓨터 및 유사한 컴퓨팅 장치를 포함하는 다른 컴퓨터 시스템 구성으로 실현될 수 있다는 것을 이해할 것이다. 실시예는 또한 통신 네트워크를 통해 링크로 연결된 원격 처리 장치에 의해 작업이 실행되는 분산형 컴퓨팅 환경에서 실행될 수 있다. 분산형 컴퓨팅 환경에서, 프로그램 모듈은 지역 및 원격 메모리 저장 장치 모두에 위치될 수 있다.
실시예는 컴퓨터 구현 프로세스(메소드), 컴퓨팅 시스템 또는 컴퓨터 프로그램 제품 또는 컴퓨터 판독 가능 매체 등과 같은 제조물로서 구현될 수 있다. 컴퓨터 프로그램 제품은 컴퓨터 시스템에 의해 판독 가능하고, 컴퓨터 또는 컴퓨팅 시스템이 예시적인 프로세스를 실행하게 하는 명령어를 포함하는 컴퓨터 프로그램을 인코딩하는 컴퓨터 저장 매체일 수 있다. 컴퓨터 판독 가능 저장 매체는 예를 들면 하나 이상의 휘발성 컴퓨터 메모리, 비휘발성 메모리, 하드 드라이브, 플래시 드라이브, 플로피 디스크 또는 콤팩트 디스크 및 동등한 저장 매체를 통해 구현될 수 있다.
본 명세서에 걸쳐서, "플랫폼"이라는 용어는 실시예가 구현될 수 있는 다양한 문서 종류 또는 유사한 환경에 대하여 공동 작성 서비스를 제공하는 소프트웨어 및 하드웨어 컴포넌트의 조합일 수 있다. 예시적인 플랫폼은 복수의 서버에 걸쳐 실행되는 호스트형(hosted) 서비스, 단일 서버에서 실행되는 애플리케이션 및 동등한 시스템을 포함하지만 이것으로 한정되지 않는다. "서버"라는 용어는 일반적으로 네트워크형 환경 내에서 하나 이상의 소프트웨어 프로그램을 실행하는 컴퓨팅 장치를 지칭한다. 그러나 서버는 또한 네트워크 상에서 서버로 간주되는 하나 이상의 컴퓨팅 장치에서 실행되는 가상 서버(소프트웨어 프로그램)로서 구현될 수 있다. 이러한 기술 및 예시적인 동작에 대한 보다 세부적인 사항은 이하에 제공되어 있다.
도 1은 온라인 문서 편집 서비스의 예시적인 컴포넌트를 도시하는 도면이다. 도표(100)에서, 서버(110)는 하나 이상의 온라인 문서 편집 애플리케이션을 실행하고, 네트워크(140)를 통해서, 다른 정보 중에서도 문서 컨텐츠를 전송할 수 있다. 네트워크(140)는 지역 네트워크이거나, 인터넷 기반의 하부 구조 등과 같은 외부 개체일 수 있다. 이것은 유선 또는 무선 접속을 제공할 수 있다. 네트워크 노드는 보안되지 않거나 보안된 접속을 통해 서로 접속될 수 있다. 예시적인 보안 접속은 암호화된 통신의 사용으로 네트워크 사이에서 형성된 VPN(Virtual Private Network)일 수 있다.
서버(110)는 예시적으로는 HTTP(Hyper Text Transport Protocol)일 수 있는 다양한 프로토콜을 통해 클라이언트와 통신하는 문서 편집 애플리케이션을 제공할 수 있다. 애플리케이션은 씬(thin) 및 씩(thick) 클라이언트에서 최종 사용자에게 문서 편집 서비스를 제공할 수 있다. 씬 클라이언트(또는 웹 클라이언트)(131, 134)는 서버 애플리케이션 제공 특징에 의존할 수 있다. 씩 클라이언트(또는 리치(rich) 클라이언트)(137)는 서버 애플리케이션 제공 특징을 지역 특징과 조합하여 최종 사용자에게 추가적인 유용성을 제공할 수 있다. 리치 클라이언트(137)는 동일한 애플리케이션 서버(110)에 접속하도록 요구되지는 않는다. 궁극적으로, 모든 클라이언트는 저장부(120)에서 동일한 문서를 편집한다. 몇몇 실시예에 따르면, 애플리케이션 서버(110)는 웹 편집 성능에 적합한 것일 수 있고, 다른 서버는 리치 클라이언트(137)에 적합하고 이 리치 클라이언트(137)에 의해 사용되는 서비스를 제공할 수 있다. 애플리케이션 서비스의 예시는 사용자 편집을 사용자 참여 정보 및 사용자의 이름과 통합하여 클라이언트 장치에서 사용자 변경을 디스플레이하는 것일 수 있다. 추가하여, 서버 애플리케이션은 다수의 사용자가 서로 다른 클라이언트 장치(130, 133, 136)를 통해 서비스를 액세스하도록 할 수 있다. 예시적인 시나리오에서, 사용자가 문서를 액세스하고 수정하여 동일한 문서의 서로 다른 버전(132, 135, 138)이 생성되게 할 수 있다.
일실시예에서, 문서 서버(120)는 문서 저장 서비스일 수 있다. 문서는 텍스트, 그림, 이미지, 비디오 및 오디오를 포함하지만 이것으로 한정되지 않는 다양한 종류 및 포맷의 문서를 저장할 수 있다. 예시적인 시스템에서, 문서 서버는 애플리케이션 서버에 의해 제공된 온라인 편집 애플리케이션을 통해 다수의 사용자에 의해 편집된 텍스트 문서를 저장할 수 있다. 다른 예시적인 시스템에서, 문서 서버는 애플리케이션 서버에 의해 제공된 온라인 이미지 편집 애플리케이션을 통해 다수의 사용자에 의해 액세스되고 편집된 이미지 문서를 저장할 수 있다. 게다가, 다른 예시에서 문서 저장 서버는 다수의 사용자에 대해 하이브리드(hybrid) 문서 종류의 온라인 애플리케이션 서비스를 통한 액세스 및 편집을 위해 동시적으로 다수의 파일 종류 및 포맷을 제공할 수 있다.
예시적인 시나리오에서, 사용자는 애플리케이션 서버에 의해 제공된 문서 애플리케이션을 통한 편집을 위해 기존의 문서를 액세스할 수 있다. 사용자 요청 시, 애플리케이션 서버는 저장 서버 내에서 문서를 검색하고 해당 문서에 잠금 동작을 실행할 수 있다. 애플리케이션 서버는 그 문서를 문서의 컴포넌트를 요약하는 그래프로 변환할 수 있다. 애플리케이션 서버는 그래프에 개정 번호를 할당할 수 있다. 애플리케이션은 사용자 변경을 평가하고, 변경된 컴포넌트를 포함한 그래프 컴포넌트를 포괄하는 컴포넌트 잠금으로 문서 잠금을 수정할 수 있다. 애플리케이션 서버는 그 변경을 그래프 컴포넌트로 기록하고, 그래프의 개정 번호를 변경하고, 파일 서버에 기록함으로써 그래프 변경을 동기화할 수 있다. 추가하여, 오프라인 클라이언트는 온라인 상태로 되돌아온 후에 그래프에 통합되도록 편집을 송신할 수 있다.
사용자가 문서를 공동 작성할 수 있게 하는 애플리케이션 서버는 클라이언트로부터 소정의 통신을 기대할 것이다. 통신은 2 종류의 요청, 즉 저장 요청 및 서버 액세스 요청의 형태로 입력될 수 있다. 요청 동작은 2개의 계층을 이용하여 실행될 수 있다. 첫 번째로, 서버는 각각의 요청에 대하여 SOAP(Simple Object Access Protocol) 인터페이스를 노출할 수 있다. 그러면 요청은 요청을 서비싱(servicing)하는 서버 프론트-엔드(front-end)의 컴포넌트로 전달될 수 있다.
다른 예시적인 실시예에서, 웹 브라우저 기반의 클라이언트 애플리케이션은 2개의 부분, 즉 브라우저 내에서 실행되는 스크립트 기반의 코드 및 프론트-엔드에서 실행되는 C# 코드 등과 같은 구현 특정 코드로 구성될 수 있다. 프론트-엔드는 요청을 검색하고 서비싱하는 것일 수 있다. 결과적으로 애플리케이션은 웹 브라우저 기반의 클라이언트가 그 요청을 어떻게 생성하는지에 대한 실행 상의 선택 사항을 가질 수 있다. 브라우저 내에서 실행되는 코드는 1) 서버 상에서 노출된 SOAP 인터페이스로 직접적으로 요청을 생성하거나, 2) 서버 상의 단일 엔트리 포인트(entry point)로 직접적으로 모든 요청을 생성할 수 있고, SOAP 요청을 수신하면 프론트-엔드 내에서 요청을 직접적으로 서비싱할 수 있는 컴포넌트를 프론트-엔드가 호출할 수 있게 한다.
서버 상의 단일 엔트리 포인트에 직접적으로 모든 요청을 생성하는 것은 사전 처리, 후속 처리, 관리성(manageability), 이식성(portability) 및 일관성에서의 이점을 가질 수 있다. 사전 처리에 있어서, AJAX(Asynchronous Java Script) 또는 유사한 요청은 서버의 요청되는 동작의 세부 사항을 포함할 수 있는 이진 스트림(binary stream)을 포함할 수 있다. 이진 스트림의 생성은 스크립트 언어에 있어서 부담이 될 수 있다. 추가하여 서버는 유사한 명령어로부터의 이진 요청을 생성할 수 있는 유틸리티에 대한 액세스를 이미 갖고 있을 수 있다.
후속 처리에 있어서, 몇몇 처리는 원 응답(raw response)을 이진 스트림보다 브라우저를 위해 더 해석 가능한 포맷으로 변환하는 것이 바람직할 수 있다. 그 응답은 문서를 참조할 수 있는 데이터를 포함할 수 있다. 관리성에 있어서, 단일 엔트리 포인트를 이용하면 시스템은 스로틀링(throttling) 등과 같은 동작을 실행하여 프론트-엔드에서 트루 로드(true load)를 고려할 수 있다. 애플리케이션은 또한 다수의 관련 요청이 동시에 도달할 때 상태를 더 잘 재사용할 수 있다. 이식성에 있어서, 브라우저가 다양한 엔트 포인트에 대해 호출하면, 시스템은 엔드 포인트의 이름이 각 실행마다 사용되는 것을 방지하도록 요구함으로써 다른 실행자에게 부담을 더할 수 있다. 일관성에 있어서, 브라우저 기반의 문서 편집자는 대부분의 통신이 동일 엔드 포인트를 통하도록 집중시킬 수 있다.
다른 실시예에서, 저장 요청은 데이터를 저장 또는 검색하는 데 사용될 수 있다. 이러한 저장 요청은 기반 문서에 연결된 하나 이상의 분할된 데이터 셀에 대해 이루어질 수 있다. 웹 브라우저 등과 같은 클라이언트 애플리케이션으로부터 서버 프론트-엔드로 저장 요청을 생성하는 것은 서로 다른 메커니즘을 통해 이루어질 수 있다. 그러나 문서를 공동 작성하는 사용자는 공동 작성에 관련된 메타데이터를 저장 및 검색하기 위한 추가적인 요청을 요구할 것이고, 이것은 시스템에 대해 새로운 요구 조건을 부여할 수 있다.
일 예시에서, 웹 브라우저는 페이지의 컨텐츠를 검색하는 동작을 실행할 수 있다. 브라우저는 문서에 대한 웹 브라우저 기반의 서비스 호출을 실행할 수 있다. 브라우저는 그 응답 객체를 인스턴스화(instantiate)하고 어느 문서 및 어느 셀을 대상으로 하여 요청을 발행하고자 하는지에 관한 데이터를 그 응답 객체에 입력한다.
서버가 요청을 수신할 때, 애플리케이션은 (스로틀링, 배칭(batching) 이후에) 종류에 기초하여 전환되고, 해당 종류에 기반한 적절한 핸들러(handler)로 디스패칭(dispatch)할 수 있다. 애플리케이션은 구현된 기술에 기초하는 엔드 포인트에 허용 가능한 포맷으로 입력을 변환할 수 있다. 프로토콜은 (이러한 데이터를 저장하는 효율을 최대화하기 위해서) 이진 스트림 내에서만 그 요청에 대한 입력을 허용하거나, 임의의 입력을 이진 데이터로 변환할 수 있다. 기능은 애플리케이션이 실행할 수 있는 요청의 세목(어느 분할부, 어느 셀을 획득하거나 놔두는지)을 포함하는 매개 변수일 수 있는 입력으로서 스트림을 취급할 수 있다.
다른 예시적인 실시예에서, 애플리케이션 제공자(110)에 있는 컴포넌트는 인수(arguments)로부터 이진 스트림을 형성할 수 있는 객체를 포함할 수 있다. 래퍼(wrapper)가 이러한 기술 구현 사이에서 상호 운용되는 것을 구현하도록 하는 것이 더 나을 것이다.
래퍼는 네이티브 기능(native facilities)을 래핑하고, 실행 코드(implementation code)에 그것을 노출할 수 있다. 래퍼 실행 객체는 브라우저 기반의 서비스에 대해 이루어진 각각의 종류의 요청(특정 셀에 대한 데이터 검색 등)마다 존재할 수 있다. 객체는 브라우저 기반의 서비스 요청에서 이용 가능한 동일 인수로 인스턴스화될 수 있다. 객체는 요청을 실행하는 네이티브 기능의 구현 메소드를 호출하는 방식을 인식하는 AddToNativeRequest 메소드를 실행할 수 있다. 마지막으로, 실행(Execute) 메소드는 요청을 실행하고 결과(즉, 스트림)를 리턴하는 인터페이스에서 호출될 수 있다. 결과는 래퍼 코드 내의 객체 지향(object-oriented) 구조로 다시 변환될 수 있다. 셀 데이터를 저장 또는 검색하는 요청은 문서 컨텐츠에 대한 래퍼를 이용하여 브라우저 기반의 애플리케이션으로서 서비싱될 수 있다.
애플리케이션은 공동 작성을 위한 메타데이터를 저장 및 검색하는 데 사용할 수 있도록 래퍼 대화(wrapper interaction)를 조정할 수 있다. 그러나 메타데이터는 셀 객체에 관하여 표현되지 않을 것이다. 애플리케이션에 의해 저장되는 메타데이터는 XML(extensible markup language) 문서 등과 같이 데이터의 불투명 블롭(opaque blobs)일 수 있다. 메타데이터는 셀과 관련하여 저장하기 위해 셀 객체의 그래프로 분리될 수 있다. 검색될 때, 데이터는 스트림으로 복원될 수 있는 셀 객체의 그래프로 되돌아올 수 있다.
애플리케이션 서버 상의 애플리케이션 코드는 데이터를 스트림으로 저장하고 검색하는 것에 의해 메타데이터 저장 요청을 처리할 수 있다. 스트림은 적절한 스키마에 따라서 조작하기 위해 XML 문서 객체로 제공될 수 있다.
또 다른 실시예에서, 서버 액세스 요청은 공동 작성 세션에 참여/종료 등과 같은 기능을 수행하는 요청의 집합으로 한정될 수 있다. 기능은 현재 인증된 사용자에 관한 정보(이름, 전자 우편 주소 및 다른 사용자 정보)를 요청할 수 있다. 이러한 요청은 이름 지정된 공동 작성 요청일 수 있다. 서버 요청은 저장 요청과 동일한 패턴을 따를 수 있다. 객체는 친화적 인수(friendly argument)를 사용하여 공동 작성 요청을 생성할 수 있다. 서버 요청에 대한 변수 및 출력은 저장 요청에 필요한 이진 스트림을 생성하는 대가에 비해서 더 단순하고 훨씬 더 적은 부담을 줄 것이다.
예시적인 실시예는 특정 프로토콜, 커맨드, 메시지 및 시스템을 가지고 본 명세서에 설명되어 있다. 그러나 이것은 실시예를 한정하는 것으로 간주되어서는 안 된다. 본 발명의 서로 다른 측면은 본 명세서에 설명된 원칙을 이용하는 다른 프로그래밍 언어, 프로토콜, 시스템 및 컴포넌트로 구현될 수 있다.
도 2는 문서에 대한 액세스를 관리하는 잠금 동작에서의 예시적인 단계를 도시한다. 도표(200)는 실시예에 따라서 편집을 관리하는 잠금 동작에서의 몇몇 예시적인 단계를 도시한다. 웹 브라우저 등과 같은 클라이언트 애플리케이션(210)은 애플리케이션 서버(230)로부터 문서를 요청(212)할 수 있다. 요청을 수신하면, 애플리케이션 서버는 문서 저장 서버(250)에 잠금 요청(232)을 송신하여 요청된 문서에 대한 문서 잠금을 생성할 수 있다. 문서 잠금을 생성하면, 애플리케이션 서버는 저장 서버로부터 문서를 검색(234)할 수 있다.
몇몇 실시예에 따르면, 서버는 첫 번째로 문서에 대한 잠금을 획득한 다음, 공동 작성에 그것이 적합한지 확인하기 위해 그것을 조사(216)하고, 그러하다는 결정이 이루어지면 다수의 클라이언트가 문서를 열 수 있도록 허용하는 것으로 잠금을 조정(236)할 수 있다. 잠금이 부적합하다고 결정되면, 서버는 배타적 잠금으로 다시 변경될 수 있다. 이것은 문서의 컨텐츠에 대한 임의의 사전 지식없이 이러한 동작에 적합한 문서와 함께 그 복잡성 때문에 공동 작성에 부적합하게 되는 문서를 서버가 보유할 수 있게 하는데, 이는 문서 컨텐츠와의 동기화에 실패할 것이고, 잘못된 결과를 가져올 것이다.
예시적인 실시예는 XML 문서 호스팅 텍스트일 수 있다. 애플리케이션 서버는 XML 문서를 그의 스키마 및 단락 컴포넌트로 파싱할 수 있고, 그래프에 개정 번호를 부여하면서 그래프 내에 컴포넌트를 저장할 수 있다. 저장 요청에 대한 응답은 스트림의 형태를 가질 수 있다. 스트림은 XML 문서로 파싱되거나, 그와 다르게 메모리 부담을 방지하기 위해 XML을 위한 간단한 API로 파싱되어야 할 것이다. 특징을 지정하는 XML 성분은 멤버 변수(member variables)를 갖는 구성물이 될 수 있다. 서버 액세스 요청으로부터의 응답은 더 세부적인 구조를 가질 수 있고, 브라우저 친화적 용어로 직접 변환될 수 있다.
다른 실시예에서, 더 복잡한 후속 처리 단계는 서버가 작업을 하는 비용에 있어서 웹 브라우저 등과 같은 씬 클라이언트 애플리케이션에서 상당한 성능 이득을 가져올 수 있다. 2차적 메타데이터는 잠금에 대한 설명을 포함할 수 있고, 각각의 잠금 및 단락의 목록에 있어서 잠금에 의해 수용되는 단락의 식별자를 포함할 수 있다. 브라우저는 수용된 단락에 대해 각각의 잠금을 적용하기 위해서 그 식별자가 잠금에 의해 지정되어 있는 단락이 있는지 탐색하려고 그래프를 횡단할 필요가 있다.
이와 다르게, 잠금 내역은 대응하는 단락 식별자 대신에 단락 객체의 객체 식별자를 포함할 수 있다. 그래프 내에서 그 식별자에 의해 객체에 대해 요청하는 것은 사실상 랜덤 액세스이고, 애플리케이션은 전체 횡단하는 것을 방지할 수 있다.
2차적 메타데이터의 요청에 대한 서버 프론트-엔드 응답은 단락 식별자 대신에 수용된 단락의 객체 식별자를 지정하는 잠금으로 응답하기 위한 충분한 정보를 가질 수 있다. 2차적 메타데이터를 검색할 때, 서버 프론트-엔드는 잠금을 파싱한 다음 애플리케이션 서버 상의 저장부로부터 그래프의 가장 최신의 개정을 검색할 수 있다. 서버 프론트-엔드는 후속하여 그래프 내의 모든 단락 객체를 발견하고, 단락 식별자로부터 단락 객체의 객체 식별자로 반전 맵(reverse map)을 형성할 수 있다. 서버 프론트-엔드는 단락 식별자를 대신하여 단락 객체 식별자를 포함하는 응답을 형성할 수 있다.
브라우저 측에서, 설계는 공동 작성 메타데이터에 변환 및 작용하기 위한 공통 행위자(Actor)/편집자(Editor)/관리자(Manager) 패턴과, 메타데이터를 이동하기 위한 복제자(replicator)를 갖는 다음의 객체를 포함할 수 있다.
1. 편집자의 표
o 프로세스는 편집자 표를 주기적으로 다운로딩하고 업로딩(세션 당 2회)함.
o 편집자는 편집자의 표 스키마에 관한 지식을 캡슐화(encapsulating)함.
o 관리자는 문서 내의 현재 공동 작성을 나타내는 인-메모리 구조(in-memory structure)를 유지함. 관리자는 그것이 데이터를 해석하기 때문에 편집자에 의해 호출된 추가(Add) 및 제거(Remove) 메소드를 노출할 수 있다. 관리자는 또한 그의 GUID 식별자에 의해 사용자를 발견하기 위한 탐색(look-up) 메소드를 노출할 수 있다.
o 행위자는 또한 인스턴트 메시징(Instant Messaging) 등과 같은 다른 기능을 제공할 수 있는 임의의 UI를 처리함.
2. 2차적 메타데이터
o 프로세스는 2차적 메타데이터를 주기적으로 다운로딩하고 업로딩함.
2차적 메타데이터는 주로 인-문서 잠금(in-document locks)에 관한 정보의 몇몇 부분을 포함할 수 있다. 인-문서 잠금 외에 2차적 메타데이터 내의 정보는 복제자 내에서 관리될 수 있다. 잠금에 있어서, 행위자/편집자/관리자 패턴이 다시 전개될 수 있다.
1. 그래프의 컴포넌트를 제공하기 위해 잠금을 추가 및 제거하는 메소드를 갖는 행위자. 행위자는 또한 잠금에 대하여 "여기에 타이핑해도 되는가(can I type here)"라는 질문에 답하는 메소드를 가질 수 있다.
2. 플레이스홀더(placeholders), 임시(ephemerals), 자동 삭제(auto-deletes) 등과 같이 다양한 목록 내에 들어갈 수 있는 현재 공지된 잠금의 집합을 유지하는 관리자. 모든 임시 잠금을 삭제하고, 그것을 플레이스홀더 잠금 등으로 전환하는 전역 잠금 동작. 플레이스홀더, 임시 및 자동 삭제 잠금은 단락 등과 같은 문서 컴포넌트와 연관될 수 있다.
3. 설계는 잠금 편집자 객체를 필요로 하지 않을 수 있다. 잠금 객체는 한번 생성되면 실질적으로 불변할 수 있고 실제적인 편집 동작이 실행되지 않을 것이다.
스키마 잠금은 또한 단락 등과 같은 문서 컴포넌트와 연관될 수 있다. 이와 다르게, 웹 브라우저 기반의 클라이언트는 공동 작성을 허용하지 않는 특징부의 더 넓은 집합을 가질 수 있다. 브라우저 클라이언트가 스키마 잠금으로 이미 열려 있는 문서를 발견할 수 있다고 해도(즉 다른 클라이언트가 잠금을 실행함), 브라우저 클라이언트는 전체 문서를 스캔하여 오로지 위반되는 특징을 발견할 수 없을 때에만 사용자가 편집하도록 허용할 필요가 있을 것이다. 서버 애플리케이션이 거의 전체의 문서 컨텐츠를 판독하여 그것을 그래프로 변환할 수 있고, 임의의 시점에서 중단할 수 있기 때문에 이것은 웹 브라우저 기반의 클라이언트에게 추가적인 부담을 주지 않을 것이다.
다른 실시예에서, 시드 싱크(seed sync)는 문서 내의 각각의 단락 식별자를 리넘버링(re-number)하는 요청으로 사용될 수 있다. 요청은 2차적 또는 1차적 메타데이터 내에 동일한 이름을 성분 내에 주입함으로써 발행될 수 있다. 리넘버링은 문서 식별자에서 시작하는 단순 증가 카운트로서, 사전 정의된 순서로 문서 내의 단락을 통해 진행하는 것으로 실행될 수 있다. 모든 후속 요청 및 2차적 메타데이터 내의 정보는 문서에 원래 저장되어 있던 단락 식별자가 아니라 리넘버링으로부터 생성된 단락 식별자를 지칭할 수 있다.
시드(seed) 동기화 요청을 실행하는 것은, 리넘버링이 헤더(headers)/풋터(footer), 각주(footnotes) 및 미주(endnotes), 글상자(textboxes) 내부의 텍스트 등과 같이 브라우저에게 (현재) 보이지 않는 문서의 부분에 의존할 수 있기 때문에 브라우저 내에서는 불가능할 것이다.
싱크 시드 요청을 실행하는 간단한 접근법은 문서 내의 모든 단락에서 특성(단락 식별자가 저장됨)을 변경할 수 있는 새로운 개정을 생성하는 것일 수 있다. 두 번째 접근법은 프론트-엔드 내에 특정 요청 메소드를 실행하는 것일 수 있다. 메소드는 구(old) 단락 식별자를 신(new) 식별자로 매핑하는 사전의 리턴 값(return value)을 가질 수 있다. 브라우저는 2차적 메타데이터 내에 시드 싱크 성분을 수신할 때 요청할 수 있고, 메타데이터의 나머지를 변환하기 위해 결과적인 맵을 이용할 수 있다.
다른 실시예에서, 서버의 부하를 최소로 유지하기 위해서는 사용자가 문서의 단일 공동 작성자인지 여부를 결정하기 위한 가벼운 요청이 실행될 수 있다. 웹 브라우저 기반의 클라이언트는 또한 서버 부하를 최소화하기 위해서 "내가 단독 작성자인가?(am I alone?)"라는 요청을 실행할 수 있다.
전체 시퀀스는 예시적인 실시예로서 이하에 설명되어 있다. 이하의 단계에서 (B)는 "브라우저"이고, (S)는 서버(프론트-엔드 애플리케이션)이다.
1. (B) 파일의 컨텐츠를 획득하기 위해 웹 브라우저 기반의 서비스 요청을 생성함.
2. (S) 스키마 잠금으로 파일에 잠금 동작을 하고, 세션에 참여하도록 시도함.
a. (S) 파일이 스키마 잠금으로 이미 잠금 상태에 있고, 그것이 지속되면, 해당 사용자는 이미 단독으로 있는 것이 아니다.
b. (S) 파일이 임의의 다른 잠금으로 잠금 상태에 있다면, 실패함
c. (S) 현재의 사용자 증명 및 서버 시간을 획득하기 위한 요청을 발행함
3. (S) 저장부로부터 파일(스트림으로서)을 검색함
4. (S) 스트림을 그래프로 변환(파일 내의 각각의 xml 성분을 통해 실행함)
a. (S) 공동 작성 세션에 허용되지 않는 임의의 성분이 발견되었다면 그것을 기억함
5. (S) 잠금을 조정함
a. (S) 이미 스키마 잠금으로 잠금이 실행되어 있다면,
i. (S) 단계 4a에서 문제가 발생하지 않으면 계속 진행하고, 문제가 발생하였다면 배타적 잠금 상태로 전환하도록 시도함
b. (S) 애플리케이션이 스키마 잠금 또는 배타적 잠금을 종료하였는지 여부를 기록함. 또한 단계 2a로부터 해당 사용자가 이미 문서 내에서 단독으로 참여하는 것이 아니었는지 기억함.
6. (S) 이 그래프를 저장부 내에 저장하고, 그래프에 사용자 지정 루트(root)를 제공함. 이러한 방식으로, 다수의 사용자는 저장부 내의 동일한 분할부에 모두 서로 다른 그래프 컨텐츠가 존재하고, 서로에 대해 충돌하지 않게 할 수 있다. 2명의 사용자가 동일한 문서에서 작업을 시작하지만 상이한 변경을 일으키고 있는 경우를 예로 들 수 있다. 그래프를 저장하기 위해서, 그 변경은 한 명 다음에 다른 한명이 저장 동작을 호출함으로써 그 변경을 적용할 때까지 별도로 유지되어야만 한다. 이 루트는 사용자에게 고유한 것이어서(그 브라우저 또는 컴퓨터에게는 고유하지 않음), 동일한 사용자가 (충돌 이후에도) 다른 컴퓨터 또는 브라우저의 다른 인스턴스로부터 애플리케이션을 부팅하면 시스템은 그래프 중 어느 부분이 이 사용자에게 속하는지를 식별할 수 있다.
7. (S) 이 그래프를 브라우저로 전달함
8. (B) 컨텐츠를 직렬 해제(Deserializes)하고 디스플레이함
9. (B) 단계 5c에서 애플리케이션이 스키마 잠금을 갖는다면
a. (B) (단계 2a에서) 해당 시점에 단독으로 참여한다면, 다른 저작자가 참여할 때/참여하는지 여부를 결정하기 위해 자신이 단독으로 있는지에 대해 종종 문의하는 프로세스를 개시함
b. (B) 사용자 편집 동안에, (사용자가 단독으로 참여하는지 아닌지 여부에 무관하게) 잠금을 생성함
c. (B) 단독으로 참여하는 것이 아니라면(단계 2a), 또는 더 이상 단독으로 참여하는 것이 아니게 될 때(상기 단계 9a),
i. (B) 이 세션 내에 있는 동안에(단계 9b) 생성된 임의의 잠금에 대한 디스플레이를 시작함
ii. (B) 현재 사용자에게 편집자의 표를 추가하도록 하는 요청을 발행함
iii. (B) 편집자의 표 및 2차적 메타데이터에 대한 반복된 프로세스를 개시함
추가 저작자 또는 잠금에 관한 새로운 정보는 그래프에 적절하게 적용될 수 있다. 사용자가 편집자를 떠나면, 애플리케이션은 편집자의 표로부터 현재의 사용자를 제거하고 공동 작성 세션을 떠나게 하는 요청을 발행할 수 있다.
또 다른 실시예에서, 구현은 "편집 불가능한 영역"을 지원할 수 있다. 온전한 특징부는 텍스트 이외의 객체 또는 텍스트와 다른 객체의 혼합을 포함하는 범위뿐만 아니라 편집 가능 및 편집 불가능 영역 모두에 걸친 선택을 고려할 수 있다. 사용자는 선택을 실행할 수 있고 편집 불가능 영역 내에 자신의 컨텐츠를 배치할 수 있어서 브라우저 기반이 아닌 클라이언트와의 일관성 있는 경험을 제공할 필요가 있을 것이다.
도 3은 몇몇 실시예에 따른 예시적인 시나리오를 도시한다. 도표(300)에 도시된 바와 같이, 애플리케이션 서버(330)는 문서 편집 서비스를 제공할 수 있다. 문서는 텍스트, 그림, 이미지, 오디오 및 비디오를 포함하지만 그것으로 한정되지 않는 다양한 포맷으로 이루어질 수 있다. 예시적인 구현은 다수의 사용자에 대한 다수의 클라이언트 애플리케이션(310)을 위해 공동 작성된 문서를 관리하는 애플리케이션 서버일 수 있다. 이와 다르게, 문서는 단일 포맷을 갖거나, 텍스트, 오디오 및 비디오 컨텐츠를 결합한 문서 등과 같은 종류의 결합체를 포함할 수 있다.
도표(300)에 도시된 바와 같이, 클라이언트 애플리케이션은 사용자에 의해 편집되는 문서를 저장하는 요청(312)을 생성할 수 있다. 애플리케이션 서버는 문서 저장 서버(350) 내에 저장된 문서를 검색(332)할 수 있다. 단계(314)에서, 애플리케이션 서버는 지역적으로 저장된 문서의 기저 그래프(base graph)를 검색 또는 생성할 수 있다. 단계(316)에서, 애플리케이션 서버는 사용자 편집을 포함하는 그래프의 개정을 검색할 수 있다. 다음에 검색된 문서는 지역적으로 저장된 기저 개정으로 변환(318)될 수 있다. 기저 개정 및 저장된 문서 사이의 임의의 변경은 애플리케이션 서버에 의해 동기화될 수 있다. 단계(320)에서, 애플리케이션 서버는 사용자 편집을 포함하는 임의의 개정에 대해 최근에 복원된 기저 그래프 사이의 개정을 비교할 수 있다. 기저 그래프에 입력될 수 있는 편집은 단계(322)에서 문서에 기입하기 위해 준비될 수 있다. 단계(332)에서 검색하였던 문서가 단계(316)에서 그래프 개정을 생성하기 위해 사용되었던 것과 동일한 문서가 아니라고 해도 이것이 발생할 수 있다는 것을 주지하여야 한다. 그러므로 공동 작성 애플리케이션은 "원래(original)" 문서의 지역 복사본을 유지할 필요가 없는데, 이것은 (애플리케이션이 서버에 대한 가장 최신의 복사본에 대해 작동하기 때문에) 스케일-아웃(scale out) 기능을 향상시킨다. 문서에 대한 변경은 저장 서버에 저장(334)될 수 있다. 문서에 변경을 저장한 후, 애플리케이션 서버는 기저 그래프에 대한 변경을 포함하는 개정을 추가할 수 있다. 단계(326)에서, 애플리케이션 그래프는 변경된 그래프를 지역적으로 저장할 수 있다. 임의의 잠금 설정(lock holds)은 단계(336)에서 잠금 리프레시(lock refresh)로 해제될 수 있다.
일실시예에서, 브라우저 기반이 아닌 클라이언트 및 브라우저 기반의 클라이언트 모두에서 현재의 세션 내에 있는 문서에 임의의 변경이 추가될 수 있다. 그러나 브라우저 기반이 아닌 클라이언트 등과 같은 씩 클라이언트는 저장 동작 동안에 서버로부터 문서의 가장 최신 버전을 획득할 수 있다. 사용자는 임의의 충돌 변경 또는 편집을 해소하도록 요구할 수 있다. 사용자 선택은 충돌을 해소하기 위해 그래프 내의 대응하는 컴포넌트에 기록될 수 있다. 브라우저 기반의 애플리케이션에 전달된 충돌 해소 정보는 편집 시간, 사용자의 인증 정보, 사용자의 참여 정보 및 사용자의 역할을 포함할 수 있다. 결과적인 컨텐츠는 새로운 최신 버전으로서 서버에 다시 저장될 수 있다.
다른 실시예에서, 저장 동작 동안에 통합을 위한 높을 레벨의 구현은 다음을 포함할 수 있다.
1. 다른 사용자(다른 저작자)에 의해 이루어진 변경의 집합을 획득한다.
2. 다른 저작자에 의해 이루어진 변경에 대해 사용자에 의해 이루어진 변경을 비교한다. 서버는 양 쪽에 의해 조작된 모든 객체의 목록을 '충돌'로서 수집할 수 있다.
3. 충돌이 일어난 것으로 간주되는 모든 객체에 있어서, 서버는 애플리케이션이 사용자 개입없이 충돌을 해소할 수 있는지 여부를 결정할 수 있다. 충돌의 해소는 현재 사용자의 개정이 원하는 변경의 통합된 집합을 나타내도록 조작하는 것에 의해 달성될 수 있다. 임의의 객체가 해소되지 않고 남아있다면, 서버는 병합 동작을 중지할 수 있고 충돌을 해소하기 위해 사용자에게 UI를 제공하도록 브라우저에게 신호를 전달할 수 있다.
4. 변경 사항은 문서에 적용될 수 있고, 저장 서버에 저장될 수 있다.
5. 애플리케이션 서버는 브라우저의 다른 저작자로부터 변경 사항의 집합을 전달할 수 있다. 더욱이 충돌을 해소하기 위해서 사용자 자신의 변경 사항에 대한 임의의 수정을 실행하고자 한다면 그 수정 사항도 또한 전달할 수 있다.
다른 사용자에 의해 이루어진 변경 사항의 집합을 획득하는 것은 여전히 해결되어야 할 문제이다. 입력은 다른 사용자의 변경 사항을 관리하는 데 있어서 불완전한 것처럼 보일 수 있다. 문서의 현재 상태는 이용 가능하지만 원래의 상태는 이용 불가능할 것이다. 그러나 애플리케이션 서버는 원래의 그래프를 통해서 문서의 원래 상태에 관해서 알 수 있다. 사용자에 의해 이루어진 변경은 원래 그래프로 변환되지 않았던 문서의 부분에서 다른 저작자에 의해 이루어진 변경과 충돌하지 않을 가능성이 있다. 서버 애플리케이션은 문서의 현재 상태를 변환할 수 있고, 결과적인 그래프를 원래의 것과 비교할 수 있다. 비교에 의해서 문서에 대하여 다른 공동 작성자에 의해 이루어진 변경 사항의 집합이 생성될 수 있다. 변경 사항의 집합은 그것이 그래프의 2개의 상태 사이의 차이일 것이므로 자연스럽게 개정으로서 표현될 수 있다. 그러므로 서버 애플리케이션은 충돌을 검출하는 데 필요한 모든 정보를 획득할 수 있고, 병합 동작의 종료 시에 다른 공동 작성의 변경 사항을 브라우저로 전달할 수 있게 된다.
문서의 현재 상태로부터 생성된 그래프와 원래의 그래프를 비교하는 것은 그 자체의 문제점을 제시한다. 단락 및 다른 객체가 임의적 방식으로 추가 또는 제거되거나 이동될 수도 있기 때문에 단순하게 그래프 내의 노드에 대한 1대1 비교를 사용할 수는 없다. 몇몇 종류의 고유한 식별자가 첨부되어 있는 문서 내의 구성(그 예시로는 단락 또는 표의 행이 있음)에 있어서, 이러한 식별자를 사용하여 원래의 그래프로부터 즉각적으로 구성에 대응되어야 하는 노드를 골라내고, 변경 사항이 존재하는지 확인하기 위해 특성을 비교할 수 있다. 예시적인 실시예에서 시스템은 첫 번째로 전체의 원래 그래프에 걸쳐 판독하여, 단락의 식별자로부터 해당 객체(의 원래 상태)를 나타내는 그래프 노드까지의 맵을 형성할 것이다. 다음에 문서의 현재 상태에 대응하는 그래프를 형성한다. 이 새로운 그래프 내의 단락에 대응하는 노드가 구성되었을 때, 원래의 노드는 단락의 식별 정보(id)를 이용하여 탐색된다. 원래의 그래프에 기반하여 구성된 맵 내에 이러한 단락이 발견되지 않는다면, 이러한 단락은 다른 저작자에 의해 새롭게 추가된 것이다. 맵 내에서 노드가 발견되었다면, 현재 노드의 특성은 원래의 노드의 특성에 대해 비교된다. 임의의 특성이 추가 또는 제거되었거나 특성의 값이 원래의 노드의 동일한 특성의 값과 상이하다면, 이 단락은 변경된 것이다.
고유한 식별자가 적용되지 않은 문서 내의 구성이 존재할 것이다. 현재의 것과 원래의 것 사이의 비교를 실행하기 위해서, 고유한 식별자가 연관되어 있는 이러한 구성과 유사하거나 그 구성 내에 포함된 다른 객체에 의존할 수 있다. 예를 들면, 표의 셀은 그 자신의 고유한 식별자를 갖지 않는다. 그러나 이 실시예에서, 임의의 표의 셀 내에 포함된 최종 단락과 연관된 식별자는 표에 대한 식별자로서 사용된다(해당 단락 자체에 대한 식별자로도 사용되는데, 왜냐하면 표의 셀 및 단락 노드 객체는 별개의 종류이므로 식별자로서 양쪽 모두에 대해 동일한 값을 사용하는 데 있어서 불명확한 점은 없다). 이것은 편집 시스템의 다른 부분이 이러한 객체를 수정할 때 자신의 식별 정보를 변경하지 않도록 소정의 규칙을 준수하게 할 필요가 있을 것이다. 표의 셀에 대한 예시의 경우에, 셀에 대한 어떠한 편집도 최종 단락의 단락 식별자를 변경하지 않을 것이다.
이와 다르게, 충돌이 자동적으로 해소되지 않는 경우에, 다른 저작자에 의해 이루어진 변경 사항을 포함하는 개정은 충돌되는 객체로서 표시된 브라우저로 전달될 수 있다. 추가하여, 사용자의 문서를 최신의 것으로 만들기 위해 브라우저로 동일한 변경 사항이 전달될 수 있다. 최종적으로, 사용자는 충돌을 해소하기 위해 UI를 제공받을 수 있다. 사용자는 모든 충돌이 해소되고 나면 다시 저장을 시도할 것이다.
예시적인 시퀀스는 저장 동작 동안에 병합을 실행하는 것에 대해 세부적으로 설명한다. 이하의 단계에서 (B)는 '브라우저'이고, (S)는 '서버'(프론트-엔드 애플리케이션)이다.
1. (B) 문서를 저장하기 위해 웹 브라우저 기반의 서비스 요청을 전달함.
2. (S) 저장 서버에서 (IStream으로서) 문서의 현재 상태를 검색함.
3. (S) 로딩 동안에 저장부 내에 저장되었던 원래의 그래프를 검색함.
4. (S) 사용자가 편집을 실행할 때 서버에 누적된 개정을 검색함.
5. (S) 다른 사용자에 의해 이루어진 변경 사항에 대한 개정을 누적하는 기준선으로서 단계 3에서의 원래의 그래프를 이용하여 문서를 변환함.
6. (S) 단계 4에서의 개정과 단계 5에서의 개정을 비교함.
a. (S) 양측에서 임의의 의견 차이가 발견된다면, 단계 3 또는 단계 4에서의 개정을 수정함으로써 그것을 해소하도록 시도함.
b. (S) 임의의 의견 차이가 해소될 수 없다면, 저장을 중지하고 단계 5에서의 개정으로 되돌아감.
7. (S) 문서 및 단계에서 수정된 개정의 저장을 실행함.
8. (S) 결과적인 문서를 저장 서버에 다시 저장함.
9. (S) 단계 5에서의 개정을 기준 그래프에 추가하고, 그 결과를 새로운 기준으로 표시함.
10. (S) 단계 6에서 (수정되었을 수 있는) 개정을 저장부에 추가함
11. (S) 파일에 대한 잠금을 리프레시(Refreshes)함.
12. (S) 단계 5에서의 개정 및 단계 6에서의 개정(수정되었다면)을 모두 리턴함.
도 4(a) 내지 도 4(c)는 몇몇 실시예에 따른 예시적인 시나리오를 도시한다. 예시적인 실시예에서, 표에 대한 구조적 변경 사항의 병합은 변경이 서로에 대해 직교할 때 복잡해질 수 있다. 도표(410)에서, 사용자는 2x2 표의 편집을 시작할 수 있다. 사용자가 중간에 열을 추가하고 다른 사용자가 행을 추가한다면, 예측되는 결과는 도표(420)와 같을 것이다. 예측되는 결과에 도달하기 위해서, 서버 애플리케이션은 추가된 행(표가 2개의 행을 가지고 있을 때 추가됨)이 병합 동안에 자신에게 추가된 제 3 셀을 가질 필요가 있다는 것을 검출해야 할 것이다. 그렇지 않으면, 다른 사용자에 의해 추가된 열은 도표(430) 내의 표가 셀을 누락하게 할 것이다. 이 작업은 열이 문서에서도 또한 그래프 주석에서도 제 1 클래스 객체로서 표시되지 않는다는 사실에 의해서 어려워질 것이다. 이 복잡한 상황은 한 명의 사용자가 동일한 개수의 열을 삭제하고 추가할 때(열의 개수가 변경되지 않은 것으로 나타남) 또는 모든 공동 작성자의 동작의 합이 전체의 표를 삭제하게 될 때에 발생할 수 있다.
복잡한 병합 해결책의 다른 실시예에서, 브라우저 기반의 애플리케이션은 2명의 저작자가 동일한 단락을 편집하는 것을 처리해야 할 것이다. 브라우저 기반의 애플리케이션은 사용자 입력이 없다면, 문자 레벨에서 변경 사항을 결합하는 것은 바람직하지 않을 것이므로 이러한 충돌을 해소하도록 시도하지 않을 것이다. 애플리케이션은 언어의 복잡성에 기인하여 의미없는 단어를 생성할 수 있다. 다음의 해체할 논리적 단위는 워드 프로세싱 한계에 있을 것이다. 2개의 추가 또는 삭제가 이성적으로 무관하다고 이해될 수 있는 단락 또는 표의 행과는 다르게, 단락에서 단어 또는 문장을 추가 또는 제거하는 것은 컨텐츠를 상당히 변경시킬 수 있기 때문에 브라우저 기반의 애플리케이션은 또한 사용자 입력을 요청할 수 있다.
복잡한 병합 해결책에 대한 다른 실시예에서, 브라우저 기반의 애플리케이션은 목록 및 재넘버링(renumbering)과의 충돌을 해소해야 할 것이다. 구현은 워드 프로세싱 애플리케이션 등과 같은 브라우저 기반의 애플리케이션이 목록의 항목을 기록하고 목록의 항목에 대해 번호를 할당할 수 있게 하는 방법을 위한 코드 내에서 상위 레벨 위치에 있을 수 있다. 목록의 항목에 대한 번호는 계산되고, 그래프 자체의 내부에 (비지속적 특성으로서) 저장될 수 있다. 목록의 항목이 추가 및 삭제되거나 상승 및 하강할 수 있으므로, 그 번호는 업데이트될 수 있다. 더욱이 워드 프로세싱의 경우에, 애플리케이션은 브라우저 내의 모든 목록 구성부에 대한 이러한 값을 재계산하지 않을 것이다. 그러나 대신에 서버 애플리케이션은 로딩 동작 동안에 그 값을 계산하고, 사용자 편집 동작 시에 증가하는 방향으로만 수정할 것이다. 사용자 및 다른 공동 작성자 모두가 비충돌적 변경을 생성한다면, (그러나 목록 내의 항목의 넘버링의 변경이 초래되면) 서버 애플리케이션은 병합 동작의 부분으로서 번호를 업데이트할 필요가 있을 것이다.
본 명세서에 설명된 온라인 문서 편집의 동기화 시스템 및 구현은 예시를 목적으로 한 것이고, 실시예에 대한 제한 사항을 구성하지 않는다. 문서는 텍스트, 도표, 이미지, 오디오 및 비디오를 포함하는 다양한 종류일 수 있으나 이것으로 한정되지는 않는다. 문서는 종류의 조합으로 이루어질 수 있다. 사용자 편집은 본 명세서에 설명된 원리를 이용하는 다른 모듈, 프로세스 및 구성을 이용하여 동기화될 수 있다.
도 5는 실시예가 구현될 수 있는 예시적인 네트워크형 환경이다. 사용자 편집 동기화를 관리하는 서버 애플리케이션은 하나 이상의 서버(514) 또는 호스트형 서비스 등과 같은 단일 서버(예를 들면 웹 서버)(516)에 걸쳐 실행되는 소프트웨어를 통해 구현될 수 있다. 플랫폼은 네트워크(510)를 통해 스마트폰(513), 랩탑 컴퓨터(512) 또는 데스크탑 컴퓨터(511)('클라이언트 장치') 등과 같은 개별 컴퓨팅 장치 상의 클라이언트 애플리케이션과 통신할 수 있다.
상술된 바와 같이, 문서 애플리케이션 서버는 문서 저장 서버에 저장된 문서의 사용자 편집을 동기화하는 알고리즘을 실행할 수 있다. 사용자가 문서의 컴포넌트를 편집한다면, 애플리케이션 서버는 사용자 편집 동안에 클라이언트 장치(511-513) 상의 문서를 편집하는 다른 공동 작성자에게 잠금된 컴포넌트에 관한 정보를 전송할 수 있다.
클라이언트 장치(511-513)는 상술된 바와 같이 원격 서버(예를 들면 서버(514) 중 하나)에서 실행되는 애플리케이션에 대해 액세스할 수 있다. 서버는 직접적으로 또는 데이터베이스 서버(518)를 통해서 데이터 저장부(519)로부터/로 관련 데이터를 검색 또는 저장할 수 있다.
네트워크(510)는 서버, 클라이언트, 인터넷 서비스 제공자 및 통신 매체의 임의의 토폴로지를 포함할 수 있다. 실시예에 따른 시스템은 정적 또는 동작 토폴로지를 가질 수 있다. 네트워크(510)는 기업형 네트워크 등과 같은 보안 네트워크, 무선 개방 네트워크 등과 같은 보안되지 않은 네트워크, 또는 인터넷을 포함할 수 있다. 네트워크(510)는 또한 PSTN(Public Switched Telephone Network) 또는 셀룰러 네트워크 등과 같은 다른 네트워크를 통해 통신을 조정할 수 있다. 더욱이 네트워크(510)는 블루투쓰(Bluetooth) 또는 유사한 것 등과 같은 단범위 무선 네트워크를 포함할 수 있다. 네트워크(510)는 본 명세서에 설명된 노드 사이의 통신을 제공한다. 제한 사항이 아닌 예시로서, 네트워크(510)는 음향, RF, 적외선 및 다른 무선 매체 등과 같은 무선 매체를 포함할 수 있다.
컴퓨팅 장치, 애플리케이션, 데이터 소스 및 데이터 분산 시스템의 많은 다른 구성은 온라인 문서 편집의 동기화를 위해 사용될 수 있다. 더욱이 도 5에 설명된 네트워크형 환경은 오로지 예시를 목적으로 한 것이다. 실시예는 예시적인 애플리케이션, 모듈 또는 프로세스로 한정되지 않는다.
도 6 및 그와 연관된 설명은 실시예를 구현할 수 있는 적합한 컴퓨팅 환경에 대한 간략하고 일반적인 설명을 제공하도록 의도된 것이다. 도 6을 참조하면, 컴퓨팅 장치(600) 등과 같이 실시예에 따라서 애플리케이션에 대한 예시적인 컴퓨팅 운영 환경의 블록도가 도시되어 있다. 기본 구성에서, 컴퓨팅 장치(600)는 온라인 문서에 대한 사용자 편집을 동기화하는 온라인 애플리케이션 서버일 수 있고, 적어도 하나의 처리 장치(602) 및 시스템 메모리(604)를 포함할 수 있다. 컴퓨팅 장치(600)는 또한 실행 프로그램 내에서 협동하는 복수의 처리 장치를 포함할 수 있다. 컴퓨팅 장치의 정확한 구성 및 종류에 따라서, 시스템 메모리(604)는 휘발성(RAM 등), 비휘발성(ROM, 플래시 메모리 등) 또는 그 2가지의 몇몇 조합일 수 있다. 시스템 메모리(604)는 전형적으로 미국 워싱톤 레드몬드에 소재한 마이크로소프트 코포레이션에서 생산된 윈도우즈(WINDOWS)® 운영 시스템 등과 같은 플랫폼의 동작을 제어하기에 적합한 운영 시스템(605)을 포함한다. 시스템 메모리(604)는 또한 프로그램 모듈(606), 문서 서비스(622) 및 동기화 모듈(624) 등과 같은 하나 이상의 소프트웨어 애플리케이션을 포함할 수 있다.
문서 서비스(622)는 편집을 위한 온라인 문서를 제공하는 서비스의 부분일 수 있다. 동기화 모듈(624)은 저장된 문서에 대해 사용자 편집을 동기화하고 공동 작성 편집으로부터 발생하는 충돌을 해소할 수 있다. 문서는 컴포넌트로 해체될 수 있고, 컴포넌트는 단락 등과 같은 문서 부분 편집의 컴포넌트 레벨 잠금을 구현하기 위해 그래프 내에 저장될 수 있다. 이러한 기본 구성은 도 6에서 점선(608) 내의 컴포넌트에 의해 도시되어 있다.
컴퓨팅 장치(600)는 추가적인 특징 또는 기능을 가질 수 있다. 예를 들면, 컴퓨팅 장치(600)는 또한 예를 들면, 자기 디스크, 광학 디스크 또는 테이프 등과 같은 추가적인 데이터 저장 장치(탈착 가능 및/또는 탈착 불가능)를 포함할 수 있다. 이러한 추가적인 저장부는 도 6에서 탈착 가능 저장부(609) 및 탈착 불가능 저장부(610)로 도시되어 있다. 컴퓨터 판독 가능 저장 매체는 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 다른 데이터 등과 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현된 휘발성 및 비휘발성, 탈착 가능 및 탈착 불가능 매체를 포함할 수 있다. 시스템 메모리(604), 탈착 가능 저장부(609) 및 탈착 불가능 저장부(610)는 모두 컴퓨터 판독 가능 저장 매체의 예시이다. 컴퓨터 판독 가능 저장 매체는 RAM, ROM, EEPROM, 플래시 메모리 또는 다른 메모리 기술, CD-ROM, DVD(digital versatile disks) 또는 다른 광학 저장부, 자기 카세트, 자기 테이프, 자기 디스크 저장부 또는 다른 자기 저장 장치, 또는 원하는 정보를 저장하는 데 사용될 수 있고 컴퓨팅 장치(600)에 의해 액세스될 수 있는 임의의 다른 매체를 포함하지만 이것으로 한정되지 않는다. 임의의 이러한 컴퓨터 판독 가능 저장 매체는 컴퓨팅 장치(600)의 부분일 수 있다. 컴퓨팅 장치(600)는 또한 키보드, 마우스, 펜, 음성 입력 장치, 터치 입력 장치, 및 동등한 입력 장치 등과 같은 입력 장치(612)를 가질 수 있다. 디스플레이, 스피커, 프린터 및 다른 종류의 출력 장치 등과 같은 출력 장치(614)도 포함될 수 있다. 이러한 장치는 본 기술 분야에서 잘 알려져 있고 여기에서 길게 설명할 필요는 없을 것이다.
컴퓨팅 장치(600)는 또한 분산형 컴퓨팅 환경 내의 무선 네트워크, 위성 링크, 셀룰러 링크 및 동등한 메커니즘을 통한 것 등과 같이 이러한 장치가 다른 장치(618)와 통신할 수 있게 하는 통신 접속부(616)를 포함할 수 있다. 다른 장치(618)는 통신 애플리케이션을 실행하는 컴퓨터 장치, 저장 서버 및 동등한 장치를 포함할 수 있다. 통신 접속부(616)는 통신 매체의 하나의 예시이다. 통신 매체는 그 내부에 컴퓨터 판독 가능 명령어, 데이터 구조, 프로그램 모듈 또는 반송파 또는 다른 전송 메커니즘 등과 같이 변조된 데이터 신호 내의 다른 데이터를 포함할 수 있고, 임의의 정보 전달 매체를 포함할 수 있다. "변조된 데이터 신호"라는 용어는 하나 이상의 그 특징 집합을 갖거나 신호 내의 정보를 인코딩하는 방식으로 변경되는 신호를 의미한다. 제한 사항이 아닌 예시로서, 통신 매체는 유선 네트워크 또는 직접 유선 접속 등과 같은 유선 매체와, 음향, RF, 적외선 및 다른 무선 매체 등과 같은 무선 매체를 포함한다.
예시적인 실시예는 또한 방법을 포함한다. 이러한 방법은 본 명세서에 설명된 구조를 포함하는 임의의 개수의 방법으로 구현될 수 있다. 이러한 방법 중 하나는 본 명세서에 설명된 종류의 장치의 머신 동작에 의한 것이다.
다른 선택적 방식은 방법의 하나 이상의 개별 동작이 한 명 이상의 인간 조작자가 몇몇 동작을 실행하는 것과 함께 실행되는 것이다. 이러한 인간 조작자가 반드시 서로 동일한 장소에 있어야 하는 것은 아니지만, 그 각각이 오로지 해당 프로그램의 부분을 실행하는 머신을 보유하면 될 것이다.
도 7은 실시예에 따른 문서 컴포넌트 레벨에서 개정을 제어함으로써 온라인 문서 편집을 동기화하는 프로세스인 프로세스(700)에 대한 논리 흐름도를 도시한다. 프로세스(700)는 온라인 문서 서비스를 클라이언트에게 제공하는 애플리케이션 서버에 의해 구현될 수 있다.
프로세스(700)는 동작(710)에서 시작되고, 여기에서 온라인 문서 애플리케이션 서버(예를 들면 웹 서버 프론트-엔드)는 사용자로부터 문서에 대한 요청을 수신한다. 문서는 다양한 포맷을 가질 수 있다. 사용자 요청을 수신하면, 애플리케이션 서버는 동작(720)에서 저장 서버에 문서가 잠금 상태가 되도록 요청할 수 있다. 문서가 잠금 상태가 된 후, 동작(730)에서 애플리케이션 서버는 저장 서버로부터 문서를 검색할 수 있다. 저장 서버는 애플리케이션 서버에 대한 스트림으로서 문서를 전송할 수 있다. 동작(740)에서 애플리케이션 서버는 스트림을 문서 컴포넌트로 변환하고, 그래프에 그 컴포넌트를 로딩할 수 있다. 서버는 검색된 문서를 포함하는 그래프 개정을 국부적으로 저장된 기준 그래프에 대해 비교하고, 컴포넌트 내의 임의의 변경을 동기화할 수 있다.
동작(750)에서, 애플리케이션 서버는 어느 문서 컴포넌트를 사용자가 변경하였는지 결정할 수 있다. 동작(760)에서, 저장 동작은 사용자가 저장 동작을 호출할 때 실행될 수 있고, 후속 동작(770)에서 그래프의 새로운 개정을 생성하는 동안에 애플리케이션 서버는 사용자 변경에 기반하여 그래프의 어떤 컴포넌트를 잠금 상태가 되게 할 것인지 결정하고, 대응하는 컴포넌트에 대한 변경을 기록할 수 있다. 동작(780)에서 애플리케이션 서버는 동시적으로 작업되는 컴포넌트에서 동시적 사용자 편집을 방지하기 위해서 국부적 그래프에 대한 컴포넌트 기반의 잠금으로 문서 잠금을 수정할 수 있다. 클라이언트 애플리케이션은 문서의 어느 컴포넌트가 잠금될 수 있는지 또는 사용자에 의해 작업될 수 있는지를 나타내는 통지문을 디스플레이할 수 있다. 제공된 정보는 또한 사용자 참여 정보 및 컴포넌트의 현재의 저작자를 나타내는 저작자 이름을 포함할 수 있다. 더욱이 문서 레벨 잠금은 또한 사용자에게 디스플레이될 수 있다. 추가하여, 공동 작성자의 참여 정보는 공동 작성자가 최종 편집을 실행한 그래프의 컴포넌트 내에 저장될 수 있다. 공동 작성자의 참여 정보는 편집된 컴포넌트로 클라이언트 애플리케이션에 의해 디스플레이될 수 있다.
문서 내에 다른 저작자의 참여를 나타내는 메타데이터를 수신하면, 현재의 사용자는 잠금된 컴포넌트에 더 이상 수정하지 못하게 된다. 다른 저작자가 자신의 변경 사항을 적용하도록 저장하면/저장할 때, 이전에 그 사람에 의해 유지된 임의의 잠금은 제거될 수 있고, 그 대신 "리프레시 필요(refresh required)" 잠금으로 전환된다. 이러한 잠금은 다른 형상을 갖고, 다른 저작자와 더 이상 연관되지 않는다.
반대로, 현재의 사용자가 편집 동작을 실행할 때, 현재의 저작자의 참여는 인-문서 잠금의 참여를 설명하는 메타데이터에 추가하는 것에 의해 다른 저작자(존재한다면)에게 통신될 수 있다. 현재의 사용자가 자신의 변경 사항을 저장할 때, 현재의 사용자에 의해 유지된 임의의 잠금을 제거하고, 그 대신에 그것을 다른 모두를 위한 "리프레시 필요" 잠금으로 전환하도록 하는 요청이 서버로 전달될 수 있다.
프로세스(700) 내에 포함된 동작은 예시를 목적으로 한 것이다. 실시예에 따른 온라인 문서 편집의 동기화는 본 명세서에 설명된 원리를 이용하는 상이한 순서의 동작뿐만 아니라 더 적은 단계 또는 추가된 단계를 갖는 유사한 프로세스에 의해 구현될 수 있다.
상기 명세서, 예시 및 데이터는 실시예의 구성에 대한 제조 및 사용의 온전한 설명을 제공한다. 청구 대상은 구조적 특징 및/또는 방법 단계를 특정하는 언어로 설명되어 있으나, 첨부된 청구항에 정의된 청구 대상은 반드시 상술된 특정한 특징부 또는 단계로 한정되지는 않는다는 것을 이해할 것이다. 오히려, 상술된 특정한 특징부 및 단계는 청구항 및 실시예를 구현하는 예시적인 형태로서 제시되어 있다.

Claims (15)

  1. 온라인 문서 편집을 동기화하기 위해 컴퓨팅 장치에 의해 적어도 부분적으로 실행되는 방법으로서,
    문서의 제 1 섹션과 연관된 제 1 공동 작성(coauthoring) 메타데이터의 표시를 수신하는 단계-상기 제 1 공동 작성 메타데이터는 브라우저 기반의 클라이언트 애플리케이션으로부터 수신됨-와,
    상기 문서의 제 2 섹션과 연관된 제 2 공동 작성 메타데이터의 표시를 수신하는 단계-상기 제 2 공동 작성 메타데이터는 제 2 클라이언트 애플리케이션으로부터 수신되고, 상기 제 2 클라이언트 애플리케이션은 브라우저에서 작동하지 않음-와,
    상기 브라우저 기반의 클라이언트 애플리케이션에 제공되는 변환된 표현에 기초하여 상기 제 1 공동 작성 메타데이터를 변환하는 단계와,
    상기 문서와 연관된 상기 제 1 공동 작성 메타데이터 및 상기 제 2 공동 작성 메타데이터를 저장하는 단계를 포함하는
    방법.
  2. 제 1 항에 있어서,
    상기 제 1 공동 작성 메타데이터는 사용자의 이름, 상기 사용자의 참여 정보 및 인-문서 잠금(in-document lock)의 집합 중 적어도 하나를 포함하는
    방법.
  3. 제 1 항에 있어서,
    컴포넌트 레벨에서 변경된 문서 내에 다른 편집과 충돌하는 하나 이상의 편집을 인식하는 단계를 더 포함하는
    방법.
  4. 제 3 항에 있어서,
    상기 편집의 충돌이 친화적이라면 통지 없이 상기 동일한 컴포넌트 내의 충돌하는 편집을 병합하도록 시도하는 단계를 더 포함하는
    방법.
  5. 제 1 항에 있어서,
    상기 클라이언트 애플리케이션으로부터 상기 문서를 액세스하는 클라이언트 사이의 단락 번호 동기화를 보장하라는 요청을 수신하면 상기 문서의 각각의 단락을 리넘버링(re-numbering)하는 단계를 더 포함하는
    방법.
  6. 제 1 항에 있어서,
    상기 문서와 연관된 공동 작성 애플리케이션을 실행하는 서버에 대해 상기 사용자가 상기 문서의 단일 공동 작성자인지 결정하라는 요청을 전달하는 단계를 더 포함하는
    방법.
  7. 온라인 문서 편집을 동기화하는 온라인 문서 애플리케이션 서버로서,
    메모리와,
    상기 메모리에 결합되어, 상기 메모리 내에 저장된 명령어와 함께 애플리케이션을 실행하는 프로세서를 포함하고,
    상기 애플리케이션은
    사용자로부터 문서에 대한 요청을 수신하고,
    저장 서버에서 상기 문서에 대한 문서 잠금을 요청하고,
    상기 저장 서버에서 상기 문서를 검색하고,
    상기 문서를 상기 문서의 컨텐츠를 포함하는 복수의 컴포넌트 및 사용자의 이름과 사용자의 참여 정보를 포함하는 제 1 공동 작성 메타데이터로 변환하고,
    적어도 2명의 사용자에 의한 편집 사이의 충돌을 판정하고,
    상기 충돌된 편집을 평가하는 것에 의해 상기 복수의 컴포넌트에 대한 복수의 컴포넌트 잠금을 결정하고,
    상기 문서 잠금을 해제하고 상기 복수의 컴포넌트 잠금을 부합된 컴포넌트에 적용하는 것에 의해 상기 복수의 컴포넌트 잠금에 대해 상기 문서 잠금을 조정하고,
    디스플레이하기 위해 브라우저 기반의 클라이언트 애플리케이션에 상기 그래프를 전송하도록 구성되는
    애플리케이션 서버.
  8. 제 7 항에 있어서,
    상기 충돌이 결정되면, 상기 애플리케이션은 적어도 하나의 충돌하는 사용자 편집 및 적어도 하나의 대응하는 컴포넌트를 적어도 하나의 사용자 선택을 위해 상기 브라우저 기반의 클라이언트 애플리케이션으로 전송하도록 더 구성되고,
    상기 적어도 하나의 사용자 선택은 상기 충돌을 해소하기 위해 상기 적어도 하나의 대응하는 컴포넌트 내에 기록되는
    애플리케이션 서버.

  9. 제 7 항에 있어서,
    상기 애플리케이션은 문서 그래프 내에 제 2 공동 작성 메타데이터로서 상기 복수의 컴포넌트 잠금을 저장하도록 더 구성되는
    애플리케이션 서버.
  10. 제 9 항에 있어서,
    오프라인 브라우저 기반의 클라이언트 애플리케이션은 온라인으로 복귀된 후 상기 문서 그래프로 통합되도록 상기 적어도 하나의 사용자 편집을 송신하는
    애플리케이션 서버.
  11. 제 7 항에 있어서,
    상기 애플리케이션은 편집 시간, 사용자의 인증 정보 및 상기 브라우저 기반의 클라이언트 애플리케이션에 대한 사용자의 역할로 이루어진 집합 중 적어도 하나를 전송하도록 더 구성되는
    애플리케이션 서버.

  12. 온라인 문서 편집을 동기화하기 위한 명령어를 저장하는 컴퓨터 판독 가능 저장 매체로서,
    상기 명령어는
    사용자로부터 문서에 대한 요청을 수신하는 명령어와,
    저장 서버에서 상기 문서에 대한 문서 잠금을 요청하는 명령어와,
    상기 저장 서버에서 상기 문서를 검색하는 명령어와,
    사용자의 이름 및 사용자의 참여 정보를 포함하는 제 1 공동 작성 메타데이터를 포함하는 복수의 컴포넌트로 상기 문서를 변환하고 그래프 내에 상기 복수의 컴포넌트를 저장하는 명령어와,
    적어도 하나의 사용자 편집을 평가하는 것에 의해 상기 복수의 컴포넌트에 대한 복수의 컴포넌트 잠금을 결정하는 명령어와,
    상기 문서 잠금을 해제하고, 상기 그래프 내에 부합된 컴포넌트에 대해 상기 복수의 컴포넌트 잠금을 적용하고, 상기 그래프 내에 제 2 공동 작성 메타데이터로서 상기 복수의 컴포넌트 잠금을 저장하는 것에 의해 상기 복수의 컴포넌트 잠금에 대해 상기 문서 잠금을 조정하는 명령어와,
    디스플레이하기 위해 브라우저 기반의 클라이언트 애플리케이션으로 상기 그래프를 전송하는 명령어를 포함하는
    컴퓨터 판독 가능 저장 매체.
  13. 제 12 항에 있어서,
    상기 명령어는 현재의 사용자에게 상기 복수의 컴포넌트 잠금에 관해 통지하는 명령어를 더 포함하는
    컴퓨터 판독 가능 저장 매체.
  14. 제 12 항에 있어서,
    상기 명령어는
    컴포넌트 레벨 식별자를 저장하는 명령어와,
    상기 문서의 다른 부분이 변경된 경우에도 상기 컴포넌트 레벨 식별자를 이용하여 적절한 컴포넌트 영역으로 사용자의 편집을 이동하는 명령어를 더 포함하는
    컴퓨터 판독 가능 저장 매체.
  15. 제 12 항에 있어서,
    상기 명령어는 사용자에게 상기 문서를 편집하는 현재의 저작자의 이름 및 참여 정보를 통지하는 명령어를 더 포함하는
    컴퓨터 판독 가능 저장 매체.
KR1020137010630A 2010-10-26 2011-10-19 온라인 문서 편집의 동기화 KR20130126901A (ko)

Applications Claiming Priority (5)

Application Number Priority Date Filing Date Title
US40694210P 2010-10-26 2010-10-26
US61/406,942 2010-10-26
US13/015,816 2011-01-28
US13/015,816 US20120101980A1 (en) 2010-10-26 2011-01-28 Synchronizing online document edits
PCT/US2011/056969 WO2012058078A2 (en) 2010-10-26 2011-10-19 Synchronizing online document edits

Publications (1)

Publication Number Publication Date
KR20130126901A true KR20130126901A (ko) 2013-11-21

Family

ID=45973817

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020137010630A KR20130126901A (ko) 2010-10-26 2011-10-19 온라인 문서 편집의 동기화

Country Status (11)

Country Link
US (1) US20120101980A1 (ko)
EP (1) EP2633429A2 (ko)
JP (1) JP2013541115A (ko)
KR (1) KR20130126901A (ko)
CN (1) CN102436441B (ko)
AU (1) AU2011320745B2 (ko)
CA (1) CA2814579A1 (ko)
RU (1) RU2013119375A (ko)
SG (1) SG189415A1 (ko)
WO (1) WO2012058078A2 (ko)
ZA (1) ZA201302724B (ko)

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200001139A (ko) * 2018-06-27 2020-01-06 주식회사 한글과컴퓨터 편집 명령을 포함하는 메시지에 기초하여 전자 문서를 편집하는 서버 및 그 동작 방법
KR20200106292A (ko) * 2019-03-04 2020-09-14 주식회사 한글과컴퓨터 개체 식별자에 기초하여 웹 기반의 문서 공동 편집을 가능하게 하는 문서 편집 서버 및 그 동작 방법
KR20230166504A (ko) 2022-05-31 2023-12-07 삼성에스디에스 주식회사 문서 편집 서비스 제공 방법 및 시스템

Families Citing this family (78)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8327278B2 (en) * 2009-02-17 2012-12-04 Microsoft Corporation Synchronizing metadata describes user content updates and an indication of user gestures being performed within the document, and across client systems using different communication channels
CN103092821A (zh) * 2011-10-27 2013-05-08 镇江金软计算机科技有限责任公司 一种电子合同修改痕迹记录方法的实现
US8583614B1 (en) * 2012-01-30 2013-11-12 Lucid Software, Inc. Automatic offline synchronization of browser documents
US9092540B2 (en) * 2012-02-14 2015-07-28 International Business Machines Corporation Increased interoperability between web-based applications and hardware functions
US9348802B2 (en) 2012-03-19 2016-05-24 Litéra Corporation System and method for synchronizing bi-directional document management
US9411844B2 (en) * 2012-03-29 2016-08-09 Tracelink, Inc. Methods and systems for managing distributed concurrent data updates of business objects
CN103544189A (zh) * 2012-07-17 2014-01-29 珠海金山办公软件有限公司 锁定正在编辑文件的方法及系统
US9471556B2 (en) * 2013-01-30 2016-10-18 Microsoft Technology Licensing, Llc Collaboration using multiple editors or versions of a feature
WO2014178072A2 (en) * 2013-04-17 2014-11-06 Gyan Prakash Kesarwani Online method for accessing and assessing a document, images, audio and video
US9870422B2 (en) * 2013-04-19 2018-01-16 Dropbox, Inc. Natural language search
US10025782B2 (en) 2013-06-18 2018-07-17 Litera Corporation Systems and methods for multiple document version collaboration and management
US9817804B2 (en) * 2013-09-12 2017-11-14 Wix.Com Ltd. System for comparison and merging of versions in edited websites and interactive applications
CN104660623A (zh) * 2013-11-18 2015-05-27 北大方正集团有限公司 网络文件离线编辑方法和系统
US20150178294A1 (en) * 2013-12-19 2015-06-25 International Business Machines Corporation Resolving content editing conflicts arising from concurrent drafts
US10127261B2 (en) * 2013-12-31 2018-11-13 Dassault Systems Enovia Corporation Methods and systems for resolving conflicts in hierarchically-referenced data
JP6331431B2 (ja) * 2014-01-31 2018-05-30 キヤノンマーケティングジャパン株式会社 情報処理システム、その制御方法、及びプログラム、並びに情報処理サーバ、その制御方法、及びプログラム
US9898520B2 (en) 2014-03-25 2018-02-20 Open Text Sa Ulc Systems and methods for seamless access to remotely managed documents using synchronization of locally stored documents
US10091287B2 (en) 2014-04-08 2018-10-02 Dropbox, Inc. Determining presence in an application accessing shared and synchronized content
US10171579B2 (en) 2014-04-08 2019-01-01 Dropbox, Inc. Managing presence among devices accessing shared and synchronized content
US10270871B2 (en) 2014-04-08 2019-04-23 Dropbox, Inc. Browser display of native application presence and interaction data
US9998555B2 (en) 2014-04-08 2018-06-12 Dropbox, Inc. Displaying presence in an application accessing shared and synchronized content
US9491054B2 (en) * 2014-06-06 2016-11-08 Microsoft Technology Licensing, Llc Network-state management service
US9887878B2 (en) 2014-06-06 2018-02-06 Microsoft Technology Licensing, Llc Dynamic scheduling of network updates
US9602351B2 (en) 2014-06-06 2017-03-21 Microsoft Technology Licensing, Llc Proactive handling of network faults
US10318618B2 (en) * 2014-06-18 2019-06-11 Microsoft Technology Licensing, Llc Consistent views of partitioned data in eventually consistent systems
US9785693B2 (en) 2014-06-30 2017-10-10 Microsoft Technology Licensing, Llc Intelligent conflict detection and semantic expression of document edits
US9779073B2 (en) 2014-07-29 2017-10-03 Microsoft Technology Licensing, Llc Digital document change conflict resolution
US9569869B2 (en) * 2014-07-29 2017-02-14 Sap Se Consolidation and customization of graph-based models
US10108931B2 (en) * 2014-09-26 2018-10-23 Oracle International Corporation Lock-based updating of a document
US11244105B2 (en) * 2014-12-04 2022-02-08 Google Llc Efficient copy paste in a collaborative spreadsheet
CN104468785A (zh) * 2014-12-08 2015-03-25 上海斐讯数据通信技术有限公司 电子设备、服务器设备、数据请求提交方法及处理方法
CN104573078A (zh) * 2015-01-27 2015-04-29 深圳市中兴移动通信有限公司 服务器及其数据存储的应用方法和装置
US10209979B2 (en) 2015-02-26 2019-02-19 Red Hat, Inc. System and method for distributed revision control
US9846528B2 (en) 2015-03-02 2017-12-19 Dropbox, Inc. Native application collaboration
US9606968B2 (en) * 2015-04-28 2017-03-28 Workiva Inc. Footnote formatting and layout of multi-section documents
US10198411B2 (en) 2015-05-01 2019-02-05 Microsoft Technology Licensing, Llc Storing additional document information through change tracking
US9953018B2 (en) * 2015-05-01 2018-04-24 Microsoft Technology Licensing, Llc Transfer of content between documents of different storage types
US20160321226A1 (en) * 2015-05-01 2016-11-03 Microsoft Technology Licensing, Llc Insertion of unsaved content via content channel
US11783120B2 (en) * 2015-08-26 2023-10-10 Roar Software Pty Ltd. System and process for generating an internet application
AU2015255223B2 (en) * 2015-08-26 2021-02-25 Roar Software Pty Ltd System and process for generating an internet application
KR20170036549A (ko) * 2015-09-24 2017-04-03 주식회사 앤아이컴즈 문서 첨삭 장치 및 그 동작 방법
CN106570045B (zh) * 2015-10-13 2020-12-08 腾讯科技(深圳)有限公司 一种数据操作控制方法及其系统、用户终端
US10102190B2 (en) * 2015-12-28 2018-10-16 Microsoft Technology Licensing, Llc. Memory conserving versioning of an electronic document
US10248933B2 (en) 2015-12-29 2019-04-02 Dropbox, Inc. Content item activity feed for presenting events associated with content items
US10620811B2 (en) 2015-12-30 2020-04-14 Dropbox, Inc. Native application collaboration
US10902185B1 (en) * 2015-12-30 2021-01-26 Google Llc Distributed collaborative storage with operational transformation
US10599526B2 (en) * 2016-01-13 2020-03-24 Microsoft Technology Licensing, Llc Auto-save operation for collaborative editing of electronic documents
CN107203890B (zh) * 2016-03-17 2021-02-23 创新先进技术有限公司 凭证数据发放方法、装置及系统
US10382502B2 (en) 2016-04-04 2019-08-13 Dropbox, Inc. Change comments for synchronized content items
US10467298B2 (en) * 2016-04-25 2019-11-05 Microsoft Technology Licensing, Llc Document collaboration discovery
WO2018004020A1 (ko) * 2016-06-27 2018-01-04 주식회사 한글과컴퓨터 마크업 언어 기반 문서에 대한 동시 편집 정합성 검증 장치 및 방법
US10534856B2 (en) * 2016-10-17 2020-01-14 International Business Machines Corporation Atom-based sensible synchronization for information indexing
US11003632B2 (en) 2016-11-28 2021-05-11 Open Text Sa Ulc System and method for content synchronization
US10387383B2 (en) * 2017-02-15 2019-08-20 Google Llc Systems and methods for providing access to a data file stored at a data storage system
US11301431B2 (en) 2017-06-02 2022-04-12 Open Text Sa Ulc System and method for selective synchronization
CN107491429B (zh) * 2017-08-18 2021-02-26 杭州安恒信息技术股份有限公司 一种解决同时编辑文档内容冲突的方法
US10678857B2 (en) 2018-03-23 2020-06-09 International Business Machines Corporation Managing a distributed knowledge graph
JP7180111B2 (ja) 2018-04-27 2022-11-30 富士フイルムビジネスイノベーション株式会社 表示編集装置及びプログラム
CN108874670A (zh) * 2018-06-20 2018-11-23 上海哔哩哔哩科技有限公司 产品特征多用户编辑方法、服务器、系统及存储介质
US11023445B2 (en) * 2018-07-24 2021-06-01 Sap Se Optimistic concurrency for collaborative applications
CN109408783B (zh) * 2018-09-06 2023-05-30 广州城市信息研究所有限公司 电子文档在线编辑方法及系统
CN109408790B (zh) * 2018-10-17 2023-08-01 武汉复临科技有限公司 一种多人编辑文档的方法
CN111291538A (zh) * 2018-12-06 2020-06-16 钉钉控股(开曼)有限公司 提示方法及装置
CN110069760A (zh) * 2019-03-15 2019-07-30 天津字节跳动科技有限公司 一种文档问题反馈方法、装置、介质和电子设备
JP7322446B2 (ja) * 2019-03-20 2023-08-08 富士フイルムビジネスイノベーション株式会社 情報処理装置及びプログラム
CN110688036B (zh) * 2019-08-28 2021-05-14 云知声智能科技股份有限公司 一种web界面缺陷关联内容位置变化的展示方法
CN112632918B (zh) * 2019-10-14 2022-04-15 腾讯科技(深圳)有限公司 文档编辑方法、装置、终端及存储介质
CN110909521B (zh) * 2019-11-14 2024-03-12 抖音视界有限公司 在线文档信息的同步处理方法、装置及电子设备
CN110888845B (zh) * 2019-11-22 2022-10-25 上海亦存网络科技有限公司 协同编辑文件及监控文件操作的方法和系统
CN111428453B (zh) * 2019-12-31 2023-09-05 杭州海康威视数字技术股份有限公司 批注同步过程中的处理方法、装置以及系统
CN111262776B (zh) * 2020-01-10 2021-05-07 北京字节跳动网络技术有限公司 发送通知消息的方法、装置、电子设备及计算机可读介质
CN111523291B (zh) * 2020-04-21 2023-04-18 四川川大智胜软件股份有限公司 一种低空雷达多席位空域数据编辑方法
CN111708597B (zh) * 2020-06-17 2024-03-05 北京字节跳动网络技术有限公司 信息处理方法、装置和电子设备
CN111985191B (zh) * 2020-08-05 2024-03-29 北京同创永益科技发展有限公司 一种多人协同在线文档编辑方法及其装置
CN113312885B (zh) * 2021-07-30 2021-09-28 腾讯科技(深圳)有限公司 协同操作处理方法、装置、设备以及介质
CN115048921B (zh) * 2022-08-17 2022-11-18 佳瑛科技有限公司 基于分布式系统进行版式文件处理的方法和系统及介质
CN115510832A (zh) * 2022-10-31 2022-12-23 北京字跳网络技术有限公司 信息同步处理方法、系统、装置、电子设备和存储介质
CN116127427B (zh) * 2023-01-19 2023-08-11 东南大学 一种办公文档处理方法及系统

Family Cites Families (35)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6151610A (en) * 1993-12-27 2000-11-21 Digital Equipment Corporation Document display system using a scripting language having container variables setting document attributes
JPH0816553A (ja) * 1994-06-27 1996-01-19 Canon Inc 文書処理システム及び文書処理方法
US6950853B2 (en) * 2000-06-27 2005-09-27 The Regents Of The University Of California Multisite coordination in shared multicast trees
WO2002017115A2 (en) * 2000-08-21 2002-02-28 Thoughtslinger Corporation Simultaneous multi-user document editing system
US8719703B2 (en) * 2000-12-08 2014-05-06 Xerox Corporation Systems and methods for editing a web page
US7305616B1 (en) * 2000-12-28 2007-12-04 Cisco Technology, Inc. Document builder for interactive dynamic documentation web site
US20030112273A1 (en) * 2001-12-17 2003-06-19 Workshare Technology, Ltd. Document collaboration suite using a common database
US7461346B2 (en) * 2002-07-30 2008-12-02 Sap Ag Editing browser documents
US20050108630A1 (en) * 2003-11-19 2005-05-19 Wasson Mark D. Extraction of facts from text
EP1751677A2 (en) * 2004-05-19 2007-02-14 Universität Zürich Computer-based system and computer program product for collaborative editing of documents
US7676835B2 (en) * 2004-08-31 2010-03-09 International Business Machines Corporation System and method for regulating access to objects in a content repository
CN1300682C (zh) * 2005-01-27 2007-02-14 浙江大学 基于语义锁实现图案协同设计中的语义保持方法
WO2007035965A2 (en) * 2005-09-23 2007-03-29 Jammermedia, Inc. Media management system
CN100438416C (zh) * 2005-12-02 2008-11-26 无锡永中科技有限公司 一种实现文件协同处理的方法
US7761591B2 (en) * 2005-12-16 2010-07-20 Jean A. Graham Central work-product management system for coordinated collaboration with remote users
US8127278B2 (en) * 2006-09-28 2012-02-28 Sap Ag System and method for extending legacy applications with undo/redo functionality
JP2008165299A (ja) * 2006-12-27 2008-07-17 Update It Inc ドキュメント作成システム
US8375086B2 (en) * 2007-05-31 2013-02-12 International Business Machines Corporation Shared state manager and system and method for collaboration
US7933952B2 (en) * 2007-06-29 2011-04-26 Microsoft Corporation Collaborative document authoring
US7877385B2 (en) * 2007-09-21 2011-01-25 Microsoft Corporation Information retrieval using query-document pair information
US7941399B2 (en) * 2007-11-09 2011-05-10 Microsoft Corporation Collaborative authoring
US8825758B2 (en) * 2007-12-14 2014-09-02 Microsoft Corporation Collaborative authoring modes
US8301588B2 (en) * 2008-03-07 2012-10-30 Microsoft Corporation Data storage for file updates
US8352870B2 (en) * 2008-04-28 2013-01-08 Microsoft Corporation Conflict resolution
US8429753B2 (en) * 2008-05-08 2013-04-23 Microsoft Corporation Controlling access to documents using file locks
US8825594B2 (en) * 2008-05-08 2014-09-02 Microsoft Corporation Caching infrastructure
JP5169505B2 (ja) * 2008-06-05 2013-03-27 富士ゼロックス株式会社 文書合成システム及びプログラム
US20100082695A1 (en) * 2008-09-26 2010-04-01 Hardt Dick C Enterprise social graph and contextual information presentation
GB2464948A (en) * 2008-10-29 2010-05-05 Quolos Limited Online collaboration
US8473467B2 (en) * 2009-01-02 2013-06-25 Apple Inc. Content profiling to dynamically configure content processing
JP2010204946A (ja) * 2009-03-03 2010-09-16 Nec Corp 共同編集支援システム、共同編集支援方法および共同編集支援プログラム
US8209603B2 (en) * 2009-04-29 2012-06-26 Microsoft Corporation Maintaining undo and redo capability across metadata merges
US8346768B2 (en) * 2009-04-30 2013-01-01 Microsoft Corporation Fast merge support for legacy documents
CN101561826B (zh) * 2009-05-18 2011-03-16 汤胤 基于节点粒度语义的在线非结构化文档共享协同方法及其应用
US8494996B2 (en) * 2010-06-23 2013-07-23 International Business Machines Corporation Creation and revision of network object graph topology for a network performance management system

Cited By (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR20200001139A (ko) * 2018-06-27 2020-01-06 주식회사 한글과컴퓨터 편집 명령을 포함하는 메시지에 기초하여 전자 문서를 편집하는 서버 및 그 동작 방법
KR20200106292A (ko) * 2019-03-04 2020-09-14 주식회사 한글과컴퓨터 개체 식별자에 기초하여 웹 기반의 문서 공동 편집을 가능하게 하는 문서 편집 서버 및 그 동작 방법
KR20230166504A (ko) 2022-05-31 2023-12-07 삼성에스디에스 주식회사 문서 편집 서비스 제공 방법 및 시스템

Also Published As

Publication number Publication date
SG189415A1 (en) 2013-05-31
CN102436441B (zh) 2014-09-24
AU2011320745A1 (en) 2013-05-02
JP2013541115A (ja) 2013-11-07
WO2012058078A3 (en) 2012-08-02
ZA201302724B (en) 2014-06-25
AU2011320745B2 (en) 2014-11-27
US20120101980A1 (en) 2012-04-26
CA2814579A1 (en) 2012-05-03
CN102436441A (zh) 2012-05-02
EP2633429A2 (en) 2013-09-04
RU2013119375A (ru) 2014-10-27
WO2012058078A2 (en) 2012-05-03

Similar Documents

Publication Publication Date Title
KR20130126901A (ko) 온라인 문서 편집의 동기화
US11740891B2 (en) Providing access to a hybrid application offline
JP6797290B2 (ja) メッセージングサービス向けのコンテンツ管理機能
US8484561B1 (en) System and method for updating an object instance based on instructions received from multiple devices
US20210097036A1 (en) Snapshot isolation in a distributed storage system
US11112941B2 (en) Content item creation from desktop tray
US8966434B2 (en) Repository based development using project development tools in enterprise management environment
US11544346B2 (en) System and method for generation of starter websites
US20070239765A1 (en) Message-oriented divergence and convergence of message documents
Li et al. Hyperlink pipeline: Lightweight service composition for users
Darmadi et al. Hypermedia driven application programming interface for learning object management
KR20170125665A (ko) M2M/IoT 플랫폼에서의 시맨틱 정보 관리 방법
Gadea et al. New algorithms and methods for collaborative co-editing using HTML DOM synchronization
Clowes et al. A reflective approach to model-driven web engineering
MISCHKE REAL-TIME COLLABORATIVE QDA
CN116562236A (zh) 信息处理方法、装置、设备、存储介质及计算机程序
Söchting Design, Implementation and Web-based Provisioning of a Database for Image Processing Operations
KR100661243B1 (ko) 토픽맵 에디터와 그 토픽맵 에디터에서의 토픽맵 처리방법및 기록매체
Meluzín Tool for Collaborative XML Schema Integration

Legal Events

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