KR101212872B1 - 동기화 방법 및 시스템 - Google Patents

동기화 방법 및 시스템 Download PDF

Info

Publication number
KR101212872B1
KR101212872B1 KR1020117019240A KR20117019240A KR101212872B1 KR 101212872 B1 KR101212872 B1 KR 101212872B1 KR 1020117019240 A KR1020117019240 A KR 1020117019240A KR 20117019240 A KR20117019240 A KR 20117019240A KR 101212872 B1 KR101212872 B1 KR 101212872B1
Authority
KR
South Korea
Prior art keywords
data
synchronization
software
host
processing system
Prior art date
Application number
KR1020117019240A
Other languages
English (en)
Other versions
KR20110110329A (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
Priority claimed from US11/650,624 external-priority patent/US7761414B2/en
Priority claimed from US11/650,729 external-priority patent/US7805403B2/en
Priority claimed from US11/650,721 external-priority patent/US20080163743A1/en
Priority claimed from US11/650,726 external-priority patent/US7739410B2/en
Priority claimed from US11/650,728 external-priority patent/US8239504B2/en
Priority claimed from US11/650,730 external-priority patent/US7778971B2/en
Application filed by 애플 인크. filed Critical 애플 인크.
Publication of KR20110110329A publication Critical patent/KR20110110329A/ko
Application granted granted Critical
Publication of KR101212872B1 publication Critical patent/KR101212872B1/ko

Links

Images

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/1095Replication or mirroring of data, e.g. scheduling or transport for data synchronisation between network nodes
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F16/00Information retrieval; Database structures therefor; File system structures therefor
    • G06F16/20Information retrieval; Database structures therefor; File system structures therefor of structured data, e.g. relational data
    • G06F16/27Replication, distribution or synchronisation of data between databases or within a distributed database system; Distributed database system architectures therefor
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F13/00Interconnection of, or transfer of information or other signals between, memories, input/output devices or central processing units
    • G06F13/10Program control for peripheral devices
    • G06F13/102Program control for peripheral devices where the programme performs an interfacing function, e.g. device driver
    • 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
    • G06F15/161Computing infrastructure, e.g. computer clusters, blade chassis or hardware partitioning
    • 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
    • G06F15/163Interprocessor communication
    • G06F15/167Interprocessor communication using a common memory, e.g. mailbox
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F9/00Arrangements for program control, e.g. control units
    • G06F9/06Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
    • G06F9/44Arrangements for executing specific programs
    • G06F9/451Execution arrangements for user interfaces

Abstract

동기화 아키텍처, 방법, 시스템, 및 컴퓨터 판독가능 매체가 설명된다. 하나의 예시적인 실시예는 제1 데이터 처리 시스템과 같은 장치 상의 구조화된 데이터의 제1 스토어(store)로부터 제1 데이터 클래스에 대한 구조화된 데이터의 검색 및 저장을 초래하도록 구성되고, 상기 제1 스토어 내의 상기 제1 데이터 클래스에 대한 구조화된 데이터를 제2 데이터 처리 시스템과 같은 호스트 상의 제2 스토어 내의 상기 제1 데이터 클래스의 구조화된 데이터와 동기화시키도록 구성된 제1 소프트웨어 컴포넌트를 포함한다. 상기 제1 소프트웨어 컴포넌트는 사용자가 상기 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 애플리케이션 소프트웨어와는 별개이다. 상기 제1 소프트웨어 컴포넌트는, 상기 호스트 및 상기 장치와 인터페이스하고 상기 제1 클래스를 포함하는 복수의 데이터 클래스들을 동기화시키는 순서를 제어하는 제2 소프트웨어 컴포넌트를 통해 상기 구조화된 데이터를 동기화시킨다.

Description

동기화 방법 및 시스템{SYNCHRONIZATI0N METHODS AND SYSTEMS}
본 명세서에 설명된 다양한 실시예들은 데스크톱 컴퓨터 시스템 및 핸드헬드 컴퓨터 시스템과 같은 2개 이상의 데이터 처리 시스템들 사이에 데이터를 동기화시키는 시스템 및 방법에 관한 것이다.
범용 컴퓨터, 핸드헬드 컴퓨터, 휴대폰, 미디어 플레이어 등과 같은 최신 데이터 처리 시스템들은 종종 사용자에 의해 손쉽게 여기저기 운반될 수 있는 정도까지 크기가 축소되었다. 더욱이, 이들 장치들은 사용자가 콘택트 정보를 유지하고, 캘린더 정보를 유지하고, 이메일 기능을 제공하고, 심지어 웹 브라우징을 제공할 수 있게 하는 상당한 계산 능력을 제공할 수 있을 만큼 강력하다. 이들 장치들은 또한 태스크 또는 해야할 일 목록(To Do list) 또는 데이터베이스 및 사용자를 위한 다른 데이터 소스들에 대한 지원을 포함할 수 있다. 소형 핸드헬드 컴퓨터의 일례는 팜 트레오(Palm Treo)이고, 핸드헬드 컴퓨터의 다른 예들은 Windows CE 운영 체제를 실행하는 것들을 포함한다.
이들 핸드헬드 컴퓨터들은 전형적으로 사용자가 그 핸드헬드 컴퓨터와, 사용자의 데스크톱 컴퓨터와 같은 다른 컴퓨터 사이에 그들의 데이터를 동기화시킬 수 있게 하여, 양쪽 컴퓨터들이 그 사용자에 대한 동일한 캘린더 등의 동일한 정보 세트를 유지하게 함으로써, 사용자가 데스크톱 컴퓨터 또는 핸드헬드 컴퓨터의 어느 쪽에서든 그들의 캘린더를 볼 수 있게 한다. 동기화는 전형적으로 도크(dock)에 의해 제공된 기계적 및 전기적 접속을 통해 호스트 컴퓨터와 핸드헬드 컴퓨터를 함께 연결함으로써 수행된다. 도 1은 핸드헬드 컴퓨터가 도크(26)를 통해 호스트 컴퓨터에 기계적으로 및 전기적으로 연결되고 있는 것의 종래 기술의 예를 보여준다. 시스템(10)은 호스트 컴퓨터(12) 및 핸드헬드 컴퓨터(14)를 포함한다. 호스트 컴퓨터 상에서 실행하는, 동기화 소프트웨어(16)는 핸드헬드 콘택트 데이터베이스(20)와 동기화되는 콘택트 데이터베이스(18)와 같은 각각의 데이터베이스들 사이에 동기화를 수행한다. 더욱이, 동기화 소프트웨어(16)는 호스트 컴퓨터 상의 캘린더 데이터베이스(22)를 핸드헬드의 캘린더 데이터베이스(24)와 동기화시킨다. 호스트 컴퓨터 상의 동기화 소프트웨어(16)는 "콘딧(conduits)"의 사용을 통해 그 데이터베이스들 각각을 개별적으로 동기화시킬 수 있다. 동기화 소프트웨어(16)는 콘딧을 통해 데이터 접속 링크를 열고 유지하고, 각 콘딧은 특정 데이터베이스를 동기화시키기 위해 그 링크를 만들고 유지하는 데 필요한 모든 소프트웨어를 구현해야 한다. 핸드헬드 컴퓨터는 하드 드라이브 또는 플래시 메모리와 같은 그의 저장 메모리를 호스트 컴퓨터에 벤딩(vending)함으로써 단지 저장 장치로서 기능할 뿐이고, 호스트 컴퓨터는, 동기화 소프트웨어(16)를 통해, 각 데이터베이스를 열어 동기화를 수행한다. 종종 핸드헬드 컴퓨터(14) 상에는 동기화 프로세스에 참여하는 액티브 에이전트가 없다. 즉, 호스트 컴퓨터(12) 상의 동기화 소프트웨어(16)는 양쪽 장치들 상의 양쪽 데이터베이스 세트에 대한 동기화 동작들을 수행한다. 핸드헬드 컴퓨터 상에 동기화 에이전트가 있는 경우, 그것은, 예를 들면, 상이한 데이터 클래스들에 대하여 핸드헬드 및 호스트 양쪽 모두에서 플러그인 모델을 제공하는 것을 포함하는, 이 명세서에서 설명되는 설비들 및 아키텍처를 갖고 있지 않고, 핸드헬드 컴퓨터 상의 애플리케이션들이 동기화 프로세스, 및 본 명세서에서 설명되는 다양한 다른 특징들과 동시에 실행할 수 없게 한다. 개인 키/공개 키 크립토그래피(private key/public key cryptography)를 갖는 자체 서명된 인증서들(self-signed certificates)을 이용한 인증 및 암호화의 사용이 없다. 특정 기존 시스템들은 호스트와 핸드헬드 컴퓨터 사이에 이메일들의 제한된 동기화를 허용하지만, 이메일 계정 설정 정보의 변경들의 동기화는 없다. 특정 시스템들은 또한 호스트와 핸드헬드 컴퓨터 사이에 웹 브라우징을 위한 북마크들(bookmarks)의 동기화를 허용한다. 이들 시스템들은 핸드헬드 및 호스트의 양쪽에서 동일한 포맷을 가진 북마크들의 세트의 동기화를 허용한다. 특정 동기화 시스템들은 "SyncML"이라는 명칭 하에서 기술되고 이들 시스템들에 대한 추가 정보는 www.openmobilealliance.org에서 및 openmobilealliance.org/tech/affiliates/syncml/syncmlindex.html에서 찾아볼 수 있다.
본 명세서에서는 동기화 아키텍처, 방법, 시스템, 및 컴퓨터 판독가능 매체가 설명된다. 일 실시예는 제1 데이터 처리 시스템과 같은 장치 상의 구조화된 데이터의 제1 스토어(store)로부터 제1 데이터 클래스에 대한 구조화된 데이터의 검색 및 저장을 초래하도록 구성되고, 상기 제1 스토어 내의 상기 제1 데이터 클래스에 대한 구조화된 데이터를 제2 데이터 처리 시스템과 같은 호스트 상의 제2 스토어 내의 상기 제1 데이터 클래스의 구조화된 데이터와 동기화시키도록 구성된 제1 소프트웨어 컴포넌트를 포함한다. 상기 제1 소프트웨어 컴포넌트는 사용자가 상기 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 임의의 애플리케이션 소프트웨어와는 별개이다. 상기 제1 소프트웨어 컴포넌트는, 상기 호스트 및 상기 장치와 인터페이스하고 상기 제1 클래스를 포함하는 복수의 데이터 클래스들을 동기화시키는 순서를 구현하는 제2 소프트웨어 컴포넌트를 통해 상기 구조화된 데이터를 동기화시킨다. 상기 제1 소프트웨어 컴포넌트는 상기 제1 데이터 클래스의 구조화된 데이터에만 작용하도록 설계될 수 있고, 상기 제1 데이터 클래스는, 예를 들면, 캘린더 데이터, 콘택트 데이터, 이메일 계정 설정 정보, 북마크, 노트, 해야할 일 항목(To Do items), 위젯(widgets)(예를 들면, 위젯에 대한 구성 설정), 및 기타 데이터 타입들 중 어느 하나일 수 있다. 상기 제1 소프트웨어 컴포넌트는 동기화 프로세스가 완료되는 것을, 그리고 중단(interrupt)된 동기화 프로세스들이 있다면, 이들이 정정될 수 있는 것을 보증하기 위해 다음 장치 앵커(anchor) 및 이전 호스트 앵커를 특정하는 하나 이상의 메시지를 송신할 수 있다. 일 실시예에서, 상기 제1 소프트웨어 컴포넌트는 상기 제1 소프트웨어 컴포넌트에 대한 버전 식별자(version identifier)를 송신하고 이것은 다른 데이터 처리 시스템 상의 다른 소프트웨어 컴포넌트에 대한 버전 식별자와 비교된다. 이것은 동기화되고 있는 2개의 장치들이 동기화가 제1 인스턴스에서 수행될 수 있는지 그리고 그것이 수행될 예정이라면 그것이 어떻게 처리될 수 있는지를 결정할 수 있게 한다. 만일 적어도 하나의 실시예에서 상기 버전들이 일치하지 않는다면, 상기 데이터 클래스는 동기화될 수 없고 사용자에게는 동기화가 수행될 수 있게 하기 위해 하나 이상의 소프트웨어 컴포넌트들이 업그레이드 또는 업데이트될 필요가 있음을 나타내는 디스플레이 경고(displayed alert)와 같은 사용자 인터페이스가 제공될 수 있다. 다른 실시예에서는, 상기 버전들이 호환성이 있다고 결정되는 한 비록 상기 버전들이 일치하지 않을지라도 동기화가 여전히 수행될 수 있다.
적어도 하나의 실시예에서, 본 명세서에서 설명된 아키텍처는 상이한 데이터 클래스들에 대한 상이한 소프트웨어 컴포넌트들의 개별적이고 선택적인 업데이팅 및 업그레이딩을 허용한다. 더욱이, 적어도 특정 실시예들에서, 상기 호스트와 상기 장치 사이의 데이터 접속 링크를 유지하는 소프트웨어의 층 또는 소프트웨어의 층들과, 상기 검색 및 저장 동작들뿐만 아니라 포맷팅 동작들 및 버전 넘버의 송신 등과 같은 기타 동작들을 수행하는 소프트웨어 사이에 분리가 있다. 이 예시적인 아키텍처에서는, 상기 데이터 링크를 유지하는 추가의 소프트웨어를 생성할 필요 없이 동기화를 위한 추가의 그러한 소프트웨어 컴포넌트들이 추가될 수 있다. 그 이유는 추가된 소프트웨어 컴포넌트는 그 기능을 제공하기 위해 소프트웨어의 기존 층 또는 층들에 의지할 수 있기 때문이다.
일 실시예에 따른 방법은 제1 소프트웨어 컴포넌트를 통해, 장치 상의 구조화된 데이터의 제1 스토어로부터 제1 데이터 클래스에 대한 구조화된 데이터를 검색 및 저장하는 단계를 포함하고, 상기 제1 소프트웨어 컴포넌트는 사용자가 상기 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 애플리케이션 소프트웨어와는 별개이다. 상기 방법은 또한 상기 제1 스토어 내의 상기 제1 데이터 클래스에 대한 구조화된 데이터를 호스트 상의 제2 스토어 내의 상기 제1 데이터 클래스에 대한 구조화된 데이터와 동기화시키는 단계를 포함하고, 상기 제1 소프트웨어 컴포넌트는 소프트웨어 기반 메시지들을 통해 상기 제1 소프트웨어 컴포넌트에 연결되어 있는 제2 소프트웨어 컴포넌트를 통해 상기 구조화된 데이터를 동기화시킨다. 상기 제2 소프트웨어 컴포넌트는 상기 호스트와 상기 장치 사이의 접속의 유지의 적어도 하나의 양태를 제어하도록 구성된다. 예를 들면, 상기 제2 소프트웨어 컴포넌트는 상기 구조화된 데이터의 모든 다른 데이터 클래스들에 관하여 상기 제1 데이터 클래스를 동기화시키는 순서를 구현하도록 구성될 수 있다. 다른 데이터 클래스들을 동기화시키기 위한 상기 제1 소프트웨어 컴포넌트와 유사한 복수의 소프트웨어 컴포넌트들은 또한 상기 데이터 접속을 유지하고, 예를 들면, 소프트웨어 기반 메시지들을 통해 상기 호스트를 상기 장치에 연결하기 위해 상기 제2 소프트웨어 컴포넌트를 이용할 수 있다.
적어도 특정 실시예들에서, 상기 장치 및 상기 호스트의 각각에서 소프트웨어를 실행하는 형태로, 적어도 하나의 액티브 에이전트가 존재하고, 적어도 이런 식으로, 상기 호스트와 상기 장치 사이의 동기화 프로세스는 피어 투 피어(peer-to-peer) 방식으로 일어난다. 이 양태에 따른 하나의 방법은 동기화 프로세스의 일부로서 제1 장치 상의 구조화된 데이터의 제1 스토어로부터 구조화된 데이터를 전송하는 단계 및 상기 동기화 프로세스에 관한 메타데이터를 전송하는 단계를 포함하고, 상기 전송은 상기 동기화 프로세스의 일부로서 구조화된 데이터의 저장 및 검색을 초래하는 제1 액티브 에이전트인 제1 소프트웨어 컴포넌트에 의해 수행된다. 상기 방법은 상기 동기화 프로세스의 일부로서 제2 장치 상의 구조화된 데이터의 제2 스토어로부터 구조화된 데이터를 수신하는 단계 및 상기 제2 장치로부터 상기 동기화 프로세스에 관한 메타데이터를 수신하는 단계를 더 포함할 수 있다. 상기 제2 장치 상의 동기화 프로세스는 상기 동기화 프로세스의 일부로서 구조화된 데이터의 저장 및 검색을 초래하는 제2 액티브 에이전트인 제2 소프트웨어 컴포넌트에 의해 수행될 수 있다. 적어도 특정 실시예들에서, 상기 제1 소프트웨어 컴포넌트는 상기 구조화된 데이터의 각 데이터 클래스에 대한 몇 개의 개별 독립 컴포넌트들을 갖고, 유사하게, 상기 제2 소프트웨어 컴포넌트는 구조화된 데이터의 각 데이터 클래스에 대한 몇 개의 개별적이고 독립적인 소프트웨어 컴포넌트들을 갖는다.
본 명세서에서 설명된 적어도 특정 실시예들의 다른 양태는 특정 데이터 클래스를 동기화시킬지 여부 및 동기화가 실행될 예정이라면 어떤 식으로 그렇게 할지를 결정하기 위해 상기 동기화 프로세스에서 버전 식별자들을 이용하는 것에 관한 것이다. 일 실시예에서, 방법은 제1 데이터 처리 시스템 상의 제1 소프트웨어 컴포넌트에 대한 제1 버전 식별자와 제2 데이터 처리 시스템 상의 제2 소프트웨어 컴포넌트에 대한 제2 버전 식별자를 비교하는 단계를 포함한다. 상기 제1 소프트웨어 컴포넌트는 상기 제1 및 제2 데이터 처리 시스템들 상의 구조화된 데이터를 동기화시키기 위한 동기화 프로세스의 일부로서 상기 제1 데이터 처리 시스템 상의 구조화된 데이터의 저장 및 검색을 초래하도록 구성된다. 상기 제2 소프트웨어 컴포넌트는 상기 동기화 프로세스의 일부로서 상기 제2 데이터 처리 시스템 상의 구조화된 데이터의 저장 및 검색을 초래하도록 구성된다. 상기 방법은 또한 상기 버전 식별자들의 비교에 응답하여 상기 동기화를 수행할지를 결정하는 단계를 포함한다. 이 실시예의 하나의 구현에서, 예를 들면, 호스트 및 장치 상의 각 소프트웨어 컴포넌트는 그의 버전 식별자를 상대 컴포넌트에 전송한다. 따라서, 각 시스템 상의 각 컴포넌트(예를 들면, 장치 상의 동기화 소프트웨어 컴포넌트 및 호스트 상의 동기화 소프트웨어 컴포넌트)는 양쪽 버전 식별자들을 가질 것이다. 이것은 양쪽 시스템들이 어느 버전이 시간적으로 더 나중의 것인지를 결정할 수 있게 할 것이다(보다 높은 버전 넘버가 더 나중의 소프트웨어 컴포넌트를 나타내도록, 전형적으로 버전 넘버의 크기에 의해 나타내어짐). 이것은 어느 한쪽의 시스템이 어느 소프트웨어 컴포넌트가 시간적으로 더 나중의 것인지에 따라서 프로세스를 제어하거나 또는 감독(oversee)하는 것을 결정할 수 있게 한다. 시간적으로 더 나중의 것인 소프트웨어 컴포넌트는 전형적으로 더 구식의 데이터 포맷들과 역호환(backward-compatible)될 뿐만 아니라 더 신식의 데이터 포맷들을 지원하는 능력을 포함하고; 따라서, 적어도 특정 실시예들에서, 시간적으로 더 나중의 것인 소프트웨어 컴포넌트는 동기화를 수행할지 및 어떻게 수행할지를 결정한다. 만일 그것이 동기화가 수행될 수 없다고 결정하면, 그 특정 데이터 클래스에 대한 동기화가 일어날 수 있게 하기 위해 하나 이상의 소프트웨어 컴포넌트들이 업그레이드 또는 업데이트되어야 함을 나타내는 사용자 인터페이스가 사용자에게 제공될 수 있다.
본 명세서에서 설명된 적어도 특정 실시예들의 다른 양태는 데이터 클래스가 지원되는지를 자동 체크하는 것에 관한 것이다. 일 실시예에서, 방법은 제1 데이터 처리 시스템 상에서 제1 소프트웨어 컴포넌트가 이용 가능한지를 결정하는 단계를 포함하고, 상기 제1 소프트웨어 컴포넌트는 동기화 프로세스의 일부로서 제1 데이터 클래스의 구조화된 데이터의 검색 및 저장을 초래하도록 구성된다. 이 결정은 단순히 장치가 특정 데이터 클래스를 동기화시킬 것을 요청하고 그 데이터 클래스에 대하여 상기 장치로부터 승인 또는 거절을 대기함으로써 수행될 수 있다. 이 결정은 각 데이터 클래스에 대하여 개별적으로 수행될 수 있다. 또한, 상기 방법은 상기 제1 소프트웨어 컴포넌트가 이용 가능한지의 결정에 응답하여 자동으로, 상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 사이에 상기 제1 데이터 클래스의 구조화된 데이터를 동기화시킬지를 결정하는 단계를 포함한다.
북마크 및 유사한 데이터의 동기화를 위한 방법, 시스템, 및 컴퓨터 판독가능한 매체가 설명된다. 북마크는 "즐겨찾기(favorate)"라고 불릴 수도 있고 리소스의 주소 또는 URL(Uniform Resource Locator) 중 적어도 하나를 포함할 수 있다. 상이한 시스템들은 북마크들의 트리(tree) 또는 계층 구조(hierarchy)의 구조를 상이하게 관리할 수 있다. 이 구조는 토폴로지라고 불릴 수 있다. 토폴로지는 시스템에 의해 통상적으로 사용자 선호(user preferences)에 적어도 부분적으로 기초하여 트리의 상이한 부분들에 북마크들을 저장하기 위해 이용된다. 일부 시스템들은 북마크들이 최상위 레벨 폴더(top level folder)에 존재하게 할 수 있고, 다른 시스템들은 북마크들이 폴더에 포함되는 경우에만 존재하게 할 수도 있고, 여기서 이 폴더는 자체가 최상위 레벨에 포함되거나, 또는 폴더들의 어떤 트리 내에 포함된다. 일부 시스템들은 애플리케이션에 어떤 특별한 의미를 갖는 "북마크 바(bookmarks bar)" 또는 "북마크 메뉴(Bookmarks menu)"로서 취급되는 폴더를 제공할 수 있고, 다른 시스템들은 이들 폴더들을 제공하지 않거나, 또는 그것들을 어떤 다른 의미를 갖는 것으로 간주할 수 있다. 일 실시예에서, 방법은 호스트 상의 제1 웹 브라우저의 북마크들에 대한 제1 토폴로지와, 중간 토폴로지(intermediate topology) 및 장치 상의 제2 웹 브라우저의 북마크들에 대한 장치 토폴로지 중 적어도 하나의 토폴로지 사이의 매핑 관계를 저장하는 단계를 포함한다. 상기 방법은 또한 상기 장치 토폴로지와, 상기 중간 토폴로지 및 상기 제1 토폴로지 중 적어도 하나의 토폴로지 사이의 매핑 관계를 저장하는 단계를 포함할 수 있고, 상기 방법은 상기 장치 상의 북마크들을 상기 호스트 상의 북마크들과 동기화시키는 단계를 더 포함할 수 있다. 상기 중간 토폴로지는 정규 토폴로지(canonical topology)일 수 있고 상기 동기화시키는 단계는 상기 장치 상에는 존재하지만 상기 호스트 상에는 존재하지 않는 북마크들 또는 폴더들을 상기 제1 웹 브라우저의 북마크들에 추가하는 단계, 및 상기 호스트 상에는 존재하지만 상기 장치 상에는 존재하지 않는 북마크들을 상기 제2 웹 브라우저의 북마크들에 추가하는 단계를 포함할 수 있다. 상기 제1 토폴로지는 북마크 폴더들; 북마크 바; 북마크 메뉴; 및 최상위 레벨의 북마크들 중 적어도 2개에 대한 제1 구조를 특정할 수 있다. 상기 장치 토폴로지는 상기 제1 구조와 상이한 제2 구조를 특정할 수 있다.
적어도 특정 실시예들에서, 전술한 방법은 동기화될 상기 장치 및 호스트 각각의 하나 이상의 웹 브라우저들이 각 웹 브라우저에 의해 북마크들에 대한 상이한 토폴로지들이 요구된다는 사실에도 불구하고 동일한 북마크들의 세트를 가질 수 있게 한다. 예를 들면, 일부 웹 브라우저들은 북마크들의 계층 구조의 최상위 레벨의 북마크를 지원하지 않는 반면, 다른 웹 브라우저들은 그러한 최상위 레벨 북마크를 지원한다. 또한, 일부 웹 브라우저들은 북마크 메뉴를 포함하지 않거나 북마크 바를 포함하지 않을 수 있는 반면, 다른 웹 브라우저들은 그러한 특징들을 포함한다. 적어도 특정 실시예들에서, 상기 호스트 또는 상기 장치 상에 유지된 정규 토폴로지는 복수의 웹 브라우저들에 걸쳐서 상이한 북마크 토폴로지들 및 구조들 사이의 동기화가 유지될 수 있도록 북마크 구조들 사이의 변환을 허용한다.
다른 실시예에서, 방법은 적어도 하나의 북마크를 나타내는 제1 데이터를 저장하는 단계를 포함하고, 상기 저장하는 단계는 제1 데이터 처리 시스템과 제2 데이터 처리 시스템 사이의 동기화 프로세스의 일부이다. 상기 제1 데이터는 상기 제1 데이터 처리 시스템 상의 제1 웹 브라우저의 북마크들에 대한 제1 토폴로지와, 중간 토폴로지 및 상기 제2 데이터 처리 시스템 상의 제2 웹 브라우저의 북마크들에 대한 제2 토폴로지 중 적어도 하나의 토폴로지 사이의 제1 변환을 통해 획득된다. 상기 방법은 적어도 하나의 북마크를 나타내는 제2 데이터를 송신하는 단계를 더 포함하고, 상기 송신하는 단계는 상기 동기화 프로세스의 일부이다. 상기 제2 데이터는 상기 제2 토폴로지와, 상기 제1 토폴로지 및 상기 중간 토폴로지 중 적어도 하나의 토폴로지 사이의 제2 변환에 따라 저장될 것이다.
또 다른 실시예에서, 방법은 장치 상의 제1 웹 브라우저의 북마크들에 대한 제1 토폴로지와, 중간 토폴로지 및 상기 호스트 상의 제2 웹 브라우저의 북마크들에 대한 호스트 토폴로지 중 적어도 하나의 토폴로지 사이의 매핑 관계를 저장하는 단계를 포함한다. 상기 방법은 상기 장치 상의 북마크들을 상기 호스트 상의 북마크들과 동기화시키는 단계를 더 포함한다.
적어도 특정 실시예들에서, 사용자가 상기 중간 토롤로지 또는 상기 정규 토폴로지를 변경하고 또한 상기 동기화를 모든 웹 브라우저들보다 적은 수의 웹 브라우저들로 제한하고 또한 상기 동기화를 상기 호스트 및 상기 장치 상의 하나 이상의 웹 브라우저들의 하나 이상의 북마크 구조들 내의 하나 이상의 선택된 폴더들로 제한할 수 있게 하는 사용자 인터페이스가 사용자에게 제공될 수 있다.
전자 메시지 계정들, 및 특히 그러한 계정들에 대한 설정 정보의 동기화를 위한 시스템, 방법, 및 컴퓨터 판독가능한 매체가 설명된다. 일 실시예에서, 방법은 제1 데이터 처리 시스템 상에, 이메일 계정 또는 인스턴트 메시지 계정과 같은 전자 메시지 계정을 확립하기 위한 정보를 수신하는 단계를 포함하고, 상기 전자 메시지 계정은 설정 정보에 의해 정의되고, 상기 방법은 상기 설정 정보를 제2 데이터 처리 시스템 상의 스토어 상에 동기화시키는 단계를 더 포함한다. 적어도 특정 실시예들에서, 상기 제1 데이터 처리 시스템은 호스트 시스템이고 상기 제2 데이터 처리 시스템은 핸드헬드 장치이다. 상기 방법은 상기 제1 데이터 처리 시스템 상에서 기존 전자 메시지 계정에 대한 설정 정보가 변경된 경우에도 그 기존 전자 메시지 계정을 상기 제2 데이터 처리 시스템 상에 보존할 수 있다. 사용자는 이 방법을 이용하여, 예를 들면, 핸드헬드 장치 상에 이메일 계정을 설정할 수 있고, 이것은 호스트 컴퓨터 시스템 상에 상기 계정을 설정하고 그 후 상기 장치를 상기 컴퓨터 시스템과 동기화시켜, 상기 장치 상에 상기 이메일 계정을 확립하는 것에 의해 행해지고, 상기 장치는 그 후 동기화 프로세스에 의해 상기 장치 상에 생성된 그 이메일 계정을 이용하여 이메일들을 송신 및 수신할 수 있다. 적어도 특정 실시예들에서, 상기 장치 상의 상기 전자 메시지 계정에 행해진 변경들은 상기 호스트 상의 기존 계정을 보존하기 위해 상기 호스트에 역으로 동기화될 수 없다. 적어도 특정 실시예들에서, 상기 방법은 핸드헬드 장치와 같은 상기 제2 데이터 처리 시스템에서 상기 장치 상에 다른 전자 메시지 계정을 확립하기 위한 정보를 수신하는 단계를 더 포함할 수 있고, 이 다른 전자 메시지 계정은 호스트일 수 있는 상기 제1 데이터 처리 시스템 상의 스토어에 동기화되지 않는다. 이것은 사용자가 상기 장치에 사적(private)이고 상기 장치에 전용(dedicate)되고 상기 호스트에 동기화되지 않는 전자 메시지 계정을 상기 장치 상에 생성할 수 있게 한다. 적어도 특정 실시예들에서, 상기 설정 정보는 이름; 이메일 주소; 인스턴트 메시징 주소; 그를 통해 메일을 송출하기 위한 이메일 서버; 그로부터 이메일을 수신하기 위한 이메일 서버; 및 하나 이상의 이메일 서버의 타입들(예를 들면, POP 이메일 서버들) 중 적어도 2개를 포함한다.
특정 실시예들에서, 상기 동기화시키는 단계는 하나의 시스템으로부터 다른 시스템으로의 한쪽 방향으로만 제한될 수 있고 또는 양방향 동기화일 수 있다.
본 명세서에서 설명된 실시예들의 다른 양태에 따르면, 방법은 호스트 상에 전자 메시지 계정을 확립하기 위한 정보를 수신하는 단계 - 상기 전자 메시지 계정은 제1 설정 정보에 의해 정의됨 -, 및 동기화를 위해 상기 호스트에 장치가 연결될 때 상기 장치 상에 상기 제1 설정 정보를 동기화시키는 단계를 포함할 수 있다. 이 동기화시키는 단계는 이메일 계정 또는 인스턴트 메시징 계정과 같은 전자 메시지 계정을 상기 장치 상에 확립하여 사용자가 그 전자 메시지 계정을 이용해 메시지들을 송신 및 수신할 수 있게 한다. 적어도 특정 실시예들에서, 상기 동기화시키는 단계는 콘택트 데이터 스토어, 캘린더 데이터베이스, 노트 데이터베이스, 해야할 일 데이터베이스(To Do database), 및 북마크들과 같은 다른 스토어들 내의 구조화된 데이터도 동기화시키는 동기화 프로세스의 일부이다.
적어도 특정 실시예들은 호스트 상에 제1 전자 메시지 계정을 확립하기 위한 정보를 수신하는 단계 - 상기 제1 전자 메시지 계정은 제1 설정 정보에 의해 정의됨 -, 및 장치 상에 제2 전자 메시지 계정을 확립하기 위한 정보를 수신하는 단계 - 상기 제2 전자 메시지 계정은 제2 설정 정보에 의해 정의됨 -, 및 상기 호스트와 상기 장치 사이에 상기 제1 설정 정보는 동기화시키고 상기 제2 설정 정보는 동기화시키지 않는 단계를 포함하는 방법을 이용할 수 있다.
데이터 처리 시스템들 사이에 노트들을 동기화시키기 위한 시스템, 방법 및 컴퓨터 판독가능한 매체가 설명된다. 일 실시예에서, 방법은 제1 데이터 처리 시스템 상에 임베드된 해야할 일 항목(embedded To Do item)을 갖는 노트를 저장하는 단계 및 상기 임베드된 해야할 일 항목을 상기 제1 데이터 처리 시스템 상의 해야할 일 스토어(To Do store)에 저장하는 단계 및 제2 데이터 처리 시스템 상의 노트 스토어를 동기화시키기 위한 데이터를 송신하는 단계 및 상기 제2 데이터 처리 시스템 상의 해야할 일 스토어를 동기화시키기 위한 데이터를 송신하는 단계를 포함한다. 적어도 특정 실시예들에서, 상기 노트는 적어도 하나의 필드 내의 텍스트를 포함하고 상기 임베드된 해야할 일 항목은 상기 임베된 해야할 일 항목을 포함하는 상기 노트에의 참조를 포함한다. 상기 노트는 이미지 데이터 또는 오디오 데이터 또는 영화 데이터 중 적어도 하나를 포함할 수 있다. 상기 노트는 제1 데이터 클래스에 대한 제1 동기화 컴포넌트를 통해 동기화될 수 있고, 상기 해야할 일 항목은 제2 데이터 클래스에 대한 제2 동기화 컴포넌트를 통해 동기화된다. 상기 제1 동기화 컴포넌트는 사용자가 상기 제1 데이터 처리 시스템 상의 노트 스토어 또는 데이터베이스 내의 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 제1 애플리케이션 소프트웨어와는 별개일 수 있다. 상기 제2 소프트웨어 컴포넌트는 사용자가 상기 제1 데이터 처리 시스템 상의 해야할 일 스토어 또는 데이터베이스 내의 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 제2 애플리케이션 소프트웨어와는 별개일 수 있다.
이 방법의 적어도 특정 실시예들은, 사실상, 해야할 일 항목이 노트 내에 임베드되도록, 사용자가 노트들 내에 해야할 일 항목들을 생성할 수 있게 한다. 이것은 노트에 텍스트를 입력하고 그 후 사용자가 그 텍스트의 부분들을 선택할 수 있게 하고 그 후 사용자가 그 선택된 텍스트로부터 해야할 일 항목을 생성하기 위한 명령을 선택할 수 있게 함으로써 일어날 수 있다. 상기 해야할 일 항목은 그 후 상기 노트 내에 임베드되고 상기 노트의 일부로서 저장되고 또한 본 명세서에서 설명된 바와 같이 별도의 해야할 일 데이터베이스에 저장될 수 있다. 상기 노트가 하나의 데이터 처리 시스템 상에서 생성되는 경우, 그것은 본 명세서에서 설명되는 바와 같이 노트 데이터베이스에 및 다른 데이터 처리 시스템 상의 해야할 일 데이터베이스에 동기화될 수 있다.
본 명세서에서 설명된 실시예들의 다른 양태는 노트의 동기화가 수행되는 것을 허용할지 여부를 결정하는 데 이용되는 필터와 같은 파라미터들의 사용에 관한 것이다. 일 실시예에서, 방법은 제1 데이터 처리 시스템 상의 제1 스토어 상에 노트를 저장하는 단계, 및 필터의 하나 이상의 파라미터들에 관하여 상기 노트의 하나 이상의 특성들의 비교에 기초하여 상기 노트를 제2 데이터 처리 시스템 상의 제2 스토어와 동기화시킬지를 결정하는 단계를 포함한다. 적어도 특정 실시예들에서, 상기 결정하는 단계는 동기화 프로세스의 일부로서, 노트들에 대한 데이터 클래스의 구조화된 데이터의 검색 및 저장을 초래하도록 구성되는 제1 소프트웨어 컴포넌트에 의해 수행되는 동기화 프로세스의 일부로서 일어난다. 상기 방법은 상기 노트의 상기 하나 이상의 특성들이 상기 필터를 만족시킨다는 결정에 응답하여 상기 노트를 동기화시키는 단계를 더 포함할 수 있다. 적어도 특정 실시예들에서, 상기 노트를 동기화시킬지 여부를 결정하는 데 이용되는 상기 노트의 특성은 상기 노트의 저장된 크기일 수 있다. 예를 들면, 이미지 데이터 또는 다른 타입의 그래픽 데이터 또는 오디오 데이터 또는 영화 데이터를 포함할 수 있는 보다 큰 노트들은 그의 큰 크기 때문에 동기화될 수 없다. 다른 실시예에서는, 보다 큰 노트들을 전혀 동기화시키지 않는 것이 아니라, 방법은 그러한 보다 큰 노트들의 텍스트 및/또는 다른 작은 부분들을 동기화시킬 수 있고 그 동기화된 사본(이미지 또는 다른 데이터의 제거에 의해 크기가 축소된 것)에 원본 노트의 일부(예를 들면, 이미지 데이터 부분)가 포함되지 않았다는 표시자 또는 마커를 그 동기화된 사본에 포함시킬 수 있다. 이렇게 하여, 보다 큰 노트들의 적어도 일부의 동기화는 여전히 수행될 수 있고, 한편으로 동기화 프로세스 자체에서, 그 노트의 보다 큰 부분들을 필터링하여 제거할 수 있다.
접속 아키텍처, 방법, 시스템, 및 컴퓨터 판독가능한 매체가 설명된다. 일 실시예에서, 컴퓨터 판독가능한 매체는, 호스트와 장치 사이의 구조화된 데이터 동기화 프로세스 동안에 동기화 소프트웨어 컴포넌트들과, 제1 소프트웨어 기반 메시지들을 통해, 인터페이스하도록 구성되고 또한 대응하는 복수의 물리적 인터페이스들에 대한 복수의 상이한 스트림 처리기(stream handler)들과, 제2 소프트웨어 기반 메시지들을 통해, 인터페이스하도록 구성되는 제1 소프트웨어 컴포넌트를 포함한다. 상기 제1 소프트웨어 컴포넌트는 백업 소프트웨어 애플리케이션 또는 구성 소프트웨어 애플리케이션 중 적어도 하나의 소프트웨어 애플리케이션과, 소프트웨어 기반 메시지들을 통해, 인터페이스하도록 구성될 수 있다. 상기 구조화된 데이터 동기화 프로세스는 상기 장치 상의 제1 스토어 내의 구조화된 데이터를 상기 호스트 상의 제2 스토어 내의 구조화된 데이터와 동기화시킬 수 있다. 상기 동기화 소프트웨어 컴포넌트들은 캘린더 데이터; 콘택트 데이터; 이메일 계정 설정 정보; 북마크; 노트; 및 해야할 일 항목들 중 적어도 하나를 포함하는 구조화된 데이터를 동기화시킬 수 있다. 상기 복수의 물리적 인터페이스들은 적어도 하나의 유선 인터페이스 및/또는 적어도 하나의 무선 인터페이스를 포함할 수 있다. 적어도 특정 실시예들에서, 장치는 2개 이상의 무선 인터페이스들 및 유선 USB 인터페이스와 같은 적어도 하나의 유선 인터페이스를 지원할 수 있다. 상기 무선 인터페이스들은 무선 블루투스 인터페이스, WiFi 무선 인터페이스, 및 무선 휴대폰 인터페이스를 포함할 수 있다. 상기 제1 소프트웨어 컴포넌트는 상기 구조화된 데이터 동기화 프로세스 동안에 상기 장치와 상기 호스트 사이에 암호화된 양방향 인증(encrypted two-way authentication)을 제공하는 소프트웨어를 포함할 수 있고, 상기 암호화된 양방향 인증은 인증 기관(certificate authority)의 자체 서명된 인증서를 이용할 수 있다. 상기 암호화는 개인 키/공개 키 암호화 크립토그래피 시스템(private key/public key encryption cryptography system)을 이용할 수 있다.
적어도 특정 실시예들에서, 상기 제1 소프트웨어 컴포넌트는, 상기 복수의 스트림 처리기들 중 어느 하나와 인터페이스하고 있을 때, 상기 구조화된 데이터 동기화 프로세스 동안에 상기 장치와 상기 호스트 사이에 인증된 접속 링크를 유지할 수 있다. 각각 대응하는 데이터 클래스에 대한, 복수의 상이한 동기화 소프트웨어 컴포넌트들 각각은, 상기 동기화 프로세스를 수행하기 위해 인증되는 이 링크를 이용할 수 있다. 이들 동기화 소프트웨어 컴포넌트들 각각은 상기 동기화 프로세스 동안에 하나의 데이터 클래스 내의 구조화된 데이터의 검색 및 저장을 초래하도록 구성되고, 각 데이터 클래스에 대하여, 상기 동기화 프로세스의 일부가 아닌 그리고 사용자가 상기 동기화 프로세스에서 사용되는 데이터 스토어에 유지된 상기 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 개별 애플리케이션 소프트웨어가 존재할 수 있다.
일 실시예에서, 방법은, 제1 데이터 처리 시스템과 제2 데이터 처리 시스템 사이의 동기화 프로세스 동안에 제1 소프트웨어 컴포넌트와 동기화 소프트웨어 사이에 제1 소프트웨어 기반 메시지들을, 제1 소프트웨어 인터페이스를 통해, 교환하는 단계를 포함할 수 있고, 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안에 상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 사이에 데이터 접속을 유지하도록 설계되어 있다. 상기 방법은 상기 제1 소프트웨어 컴포넌트와, 대응하는 복수의 물리적 인터페이스들에 대한 상이한 스트림 처리기들 중 하나의 스트림 처리기 사이에 제2 소프트웨어 기반 메시지들을, 제2 소프트웨어 인터페이스를 통해, 교환하는 단계를 더 포함할 수 있다. 적어도 특정 실시예들에서, 상기 방법은 상기 제1 소프트웨어 컴포넌트와, 백업 소프트웨어 애플리케이션 및 구성 소프트웨어 애플리케이션 중 적어도 하나의 소프트웨어 애플리케이션 사이에 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 인터페이스를 통해, 교환하는 단계를 더 포함할 수 있다. 상기 동기화 프로세스는 상기 제1 데이터 처리 시스템 상의 제1 스토어 내의 및 상기 제2 데이터 처리 시스템 상의 제2 스토어 내의 구조화된 데이터를 동기화시키는 구조화된 데이터 동기화 프로세스일 수 있다. 상기 동기화 소프트웨어는 캘린더 데이터, 콘택트 데이터; 이메일 계정 설정 정보; 북마크; 노트; 및 해야할 일 항목들 중 적어도 하나를 포함하는 구조화된 데이터를 동기화시킬 수 있다. 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안에 암호화된 양방향 인증을 제공하는 소프트웨어를 포함할 수 있다. 상기 동기화 소프트웨어는, 각각 동기화 프로세스 동안에 하나의 데이터 클래스 내의 구조화된 데이터의 검색 및 저장을 초래하도록 구성된, 복수의 컴포넌트들을 포함할 수 있다. 또한, 각 데이터 클래스에 대하여, 사용자가 상기 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 개별 소프트웨어 애플리케이션이 있을 수 있다.
이 설명은 동기화 태스크들 및 비동기화 태스크들이 동시에 실행되는 것을 허용하는 시스템, 방법 및 컴퓨터 판독가능한 매체에 관한 것이다. 일 실시예에서, 방법은 적어도 하나의 사용자 레벨 비동기화 처리 스레드(user-level non-synchronization processing thread)와 같은 적어도 하나의 비동기화 처리 스레드를 실행하는 단계, 및 상기 적어도 하나의 비동기화 처리 스레드의 실행과 동시에 적어도 하나의 동기화 처리 스레드를 실행하는 단계를 포함한다. 적어도 하나의 비동기화 처리 스레드의 실행은 제1 데이터 처리 시스템 상의 제1 데이터베이스와 제2 데이터 처리 시스템 상의 제2 데이터베이스 사이의 동기화 동작 동안에 상기 적어도 하나의 동기화 처리 스레드에 의해 동기화되는 상기 제1 데이터베이스를 액세스하는 동작을 포함할 수 있다.
적어도 특정 실시예들에서, 본 명세서에서 설명된 방법은 호스트와 장치의 2개의 시스템이 동기화 동작을 수행하고 있는 동안에 사용자가 그 호스트와 장치 양쪽 모두를 조작할 수 있게 한다. 따라서, 예를 들면, 사용자는, 예를 들면, 캘린더 또는 콘택트 데이터베이스와 같은 다른 데이터베이스들로부터의 구조화된 데이터를 동기화시키는 동기화 동작이 수행되고 있는 동안에 상기 캘린더를 조작하거나 볼 수 있다.
적어도 특정 실시예들에서, 상기 적어도 하나의 동기화 처리 스레드는 제1 스토어로부터 구조화된 데이터의 검색 및 저장을 초래하도록 구성된 동기화 소프트웨어 컴포넌트에 의해 제공될 수 있고 상기 적어도 하나의 사용자 레벨 비동기화 처리 스레드는 사용자가 상기 제1 스토어 내의 상기 구조화된 데이터를 액세스 및 편집할 수 있게 하는 사용자 인터페이스를 제공하는 사용자 애플리케이션에 의해 제공된다. 이들 상이한 스레드들은 상이한 주소 공간들에 있을 수 있다. 적어도 특정 실시예들에서, 상기 동기화 소프트웨어 컴포넌트는 동기화 프로세스가 일어나고 있는 동안에 상기 사용자 애플리케이션이 상기 제1 스토어에 영향을 미치지 못하게 하기 위해 상기 제1 스토어에 대한 잠금(lock)을 획득한다. 적어도 특정 실시예들에서, 상기 동기화 소프트웨어 컴포넌트는 상기 잠금을 획득하려고 시도하고, 만일 그렇게 하는 데 실패하면, 상기 동기화 소프트웨어 컴포넌트는 상기 제1 스토어에 대한 상기 잠금을 획득하기 위한 메시지를 상기 사용자 애플리케이션에 송신한다. 상기 잠금은, 특정 실시예들에서, FLOCK 유닉스 명령일 수 있다. 상기 동기화 소프트웨어 컴포넌트는 상기 메시지의 송신 이후의 소정의 시간 기간 후에 상기 사용자 애플리케이션이 상기 제1 스토어에 대한 상기 잠금을 해제하는 데 실패하면 적어도 하나의 데이터 클래스에 대한 동기화를 취소할 수 있다.
다른 시스템들 및 방법들도 설명되고, 컴퓨터로 하여금 본 명세서에서 설명된 바와 같이 동작하게 하는 실행가능한 명령들을 포함하는 컴퓨터 판독가능한 매체도 설명된다.
본 발명은 유사한 참조들이 유사한 엘리먼트들을 나타내는 첨부 도면들의 도들에서 제한이 아니라 예로서 예시된다.
도 1은 종래 기술의 동기화 시스템의 예를 블록도 형태로 나타낸다.
도 2는 호스트 컴퓨터와 같은 데이터 처리 시스템의 예를 나타낸다.
도 3은 핸드헬드 컴퓨터 또는 다른 타입의 데이터 처리 시스템과 같은 데이터 처리 시스템의 예를 나타낸다.
도 4는, 예를 들면, 장치와 호스트 사이에 동기화를 구현하기 위한 소프트웨어 아키텍처의 예를 나타낸다.
도 5는 동기화 프로세스의 일례에 따른 장치와 호스트 사이의 시간에 있어서의 이벤트들을 나타내는 순서도이다.
도 6A 및 6B는, 예를 들면, 호스트 상의 동기화 프로세스를 예시하는 순서도들이다.
도 7A 및 7B는, 예를 들면, 장치 상의 동기화 프로세스를 예시하는 순서도들이다.
도 8A 및 8B는 본 발명의 적어도 특정 실시예들에 따른 버전 식별자들의 사용을 예시하는 순서도들이다.
도 9A 및 9B는 2가지 상이한 타입의 데이터 클래스에 대한 데이터 포맷들의 2개의 예를 예시하는 것으로, 특히, 도 9A는 구조화된 데이터를 포함하는 콘택트 데이터 클래스에 대한 데이터 포맷을 나타내고, 도 9B는 캘린더 데이터 클래스에 대한 데이터 포맷을 나타낸다.
도 10은 본 명세서에서 설명된 다중 계층들을 갖는 소프트웨어 아키텍처의 예를 나타낸다.
도 11은 도 10에 도시된 소프트웨어 아키텍처에서 수행될 수 있는 방법의 실시예를 예시하는 순서도이다.
도 12는 본 명세에서 설명된 적어도 특정 실시예들에서 이용될 수 있는 양방향 인증 프로세스의 결과를 예시한다.
도 13A 및 13B는 동기화 프로세스 동안에 호스트 및 장치 중 하나 또는 양쪽 모두에 의해 동기화 및 비동기화 동작들이 동시에 수행될 수 있는 하나의 방법을 예시하는 순서도들이다.
도 14A, 14B, 14C, 및 14D는 상이한 타입의 웹 브라우저들에 대한 북마크들에 대한 다양한 가능한 포맷들을 예시한다.
도 15A, 15B, 15C, 및 15D는, 적어도 하나의 실시예에서, 북마크 데이터 구조에 대한 중간 또는 정규 포맷을 통한 동기화 후에 나타나는 변경된 북마크 구조를 예시한다.
도 16A는 호스트 상의 웹 브라우저와 장치 상의 웹 브라우저 사이의 매핑 관계들의 예를 나타내는 것으로, 이 매핑 관계는 또한 중간 포맷에 관하여 상기 호스트 및 상기 장치 상의 북마크들의 데이터 구조 사이의 매핑을 나타낸다.
도 16B는 본 명세서에서 설명된 일 실시예에 따른 방법을 예시하는 순서도이다.
도 16C는 북마크들의 동기화에 관한 다른 실시예를 예시하는 순서도이다.
도 16D, l6E, 및 16F는 장치와 호스트 사이와 같은, 2개의 데이터 처리 시스템들 사이의 북마크들의 동기화에 관하여 선호 설정들을 허용하기 위한 사용자 인터페이스들의 예들을 제공한다.
도 17은 이메일 계정 또는 다른 전자 메시지 계정 설정 정보의 동기화를 위한 방법을 예시하는 순서도이다.
도 18은 도면에 도시된 것과 같은 이메일 계정 설정 정보를 저장하는 장치의 메모리 및 호스트의 메모리를 나타낸다.
도 19는 본 명세서에서 설명된 적어도 특정 실시예들에서 임베드된 해야할 일들(embedded To Do's)을 포함할 수 있는 노트들을 동기화시키기 위한 하나의 방법을 예시하는 순서도이다.
도 20은 임베드된 해야할 일을 생성하기 위해 노트 내에 해야할 일(To Do)을 생성하기 위한 방법의 실시예를 예시하는 순서도이다.
도 21은 노트가 동기화되어야 할지 여부를 결정하기 위해 필터를 이용하는 방법의 예를 나타낸다.
본 발명의 다양한 실시예들 및 양태들이 아래 설명되는 상세들을 참조하여 설명될 것이고, 첨부 도면들은 그 다양한 실시예들을 예시할 것이다. 다음의 설명 및 도면들은 본 발명을 예시하는 것이고, 본 발명을 제한하는 것으로 해석되어서는 안 된다. 본 발명의 다양한 실시예들에 대한 철저한 이해를 제공하기 위해 다수의 특정 상세들이 설명된다. 그러나, 특정 사례들에서는, 본 발명의 실시예들에 대한 간결한 논의를 제공하기 위해 잘 알려진 또는 형식적인 상세들은 설명되지 않는다.
본 발명은 본 명세서에서 설명된 동작들 중 하나 이상을 수행하기 위한 장치에 관한 것이다. 이 장치는 요구되는 목적을 위해 특별히 구성될 수 있고, 또는 그것은 컴퓨터에 저장된 컴퓨터 프로그램에 의해 선택적으로 활성화되거나 재구성되는 범용 컴퓨터를 포함할 수 있다. 그러한 컴퓨터 프로그램은 머신(예를 들면, 컴퓨터) 판독가능한 저장 매체에 저장될 수 있고, 그 저장 매체의 예로는, 플로피 디스크, 광 디스크, CD-ROM, 및 자기-광학 디스크를 포함하는 임의의 타입의 디스크, ROM(read-only-memory), RAM(random access memory), EPROM(erasable programmable ROM), EEPROM(electrically erasable programmable ROM), 자기 또는 광학 카드, 또는 전자적 명령을 저장하기에 적합한 임의의 타입의 매체가 있지만, 이들에 제한되지 않고, 각각은 버스에 의해 연결된다.
머신 판독가능한 매체는, 머신(예를 들면, 컴퓨터)에 의해 판독가능한 형태로 명령을 저장 또는 전송하기 위한 임의의 메커니즘을 포함한다. 예를 들면, 머신 판독가능한 매체는 ROM(read-only-memory); RAM(random access memory); 자기 디스크 저장 매체; 광학 저장 매체; 플래시 메모리 장치; 전기, 광학, 음향 또는 다른 형태의 전파 신호들(예를 들면, 반송파, 적외선 신호, 디지털 신호 등) 등을 포함한다.
동기화 아키텍처, 시스템, 방법, 및 컴퓨터 판독가능한 매체와 관련하여 다양한 상이한 실시예들을 설명하기에 앞서, 동기화 프로세스의 일부일 수 있는 데이터 처리 시스템과 관련하여 간단한 논의가 제공될 것이다. 용어 "호스트(host)" 및 용어 "장치(device)"는 호스트에 대한 특정 폼 팩터 대 장치에 대한 폼 팩터를 특히 나타낸다기보다는 일반적으로 데이터 처리 시스템을 나타내기 위해 의도된 것이다. 도 2 및 3은 2개의 상이한 데이터 처리 시스템들의 예를 나타내고, 도 2에 도시된 시스템은 호스트라고 불릴 수 있고 도 3에 도시된 시스템은 장치라고 불릴 수 있지만, 도 2에 도시된 시스템은 장치라고 불릴 수 있고 도 3에 도시된 시스템은 호스트라고 불릴 수도 있다.
도 2는 데이터 처리 시스템의 한 형태인 컴퓨터 시스템의 일례를 나타낸다. 도 2는 컴퓨터 시스템의 다양한 컴포넌트들을 예시하고 있지만, 그 컴포넌트들을 상호 접속하는 임의의 특정 아키텍처 또는 방식을 나타내기 위해 의도된 것은 아니다. 왜냐하면 그러한 상세들은 본 발명에 밀접한 관계가 있지 않기 때문이다. 또한 PDA(personal digital assistant), 휴대폰, 미디어 플레이어(예를 들면, iPod), 이들 장치들의 양태들 또는 기능들을 결합하는 장치(하나의 장치에 PDA 및 휴대폰과 결합된 미디어 플레이어), 네트워크 컴퓨터, 다른 장치 내의 임베드된 처리 장치, 및 보다 적은 수의 컴포넌트들 또는 어쩌면 보다 많은 수의 컴포넌트들을 갖는 다른 데이터 처리 시스템이 본 발명의 하나 이상의 실시예들을 구현하기 위해 이용될 수도 있고 본 명세서에서 설명된 데이터 처리 시스템들 중 하나 이상일 수 있다는 것을 알 것이다. 도 2에 도시된 컴퓨터 시스템은, 예를 들면, 애플 컴퓨터사로부터의 매킨토시 컴퓨터 또는 마이크로소프트사로부터의 윈도즈 운영 체제를 실행하는 컴퓨터일 수 있다.
도 2에 도시된 바와 같이, 컴퓨터 시스템(45)은 처리 시스템(47)을 형성하는 하나 이상의 마이크로프로세서들에 연결되는 버스(51)를 포함한다. 버스(51)는 또한 메모리(49)에 및 비휘발성 메모리(50)에 연결되고, 이 비휘발성 메모리는 특정 실시예들에서 자기 하드 드라이브이거나, 다른 실시예들에서 플래시 메모리일 수 있다. 버스는 또한 디스플레이 컨트롤러 및 디스플레이(52) 및 하나 이상의 입력/출력(I/O) 장치들(53)에 연결된다. 또한, 버스는 옵션인 도크(dock)(54)에 및 하나 이상의 무선 송수신기(55)에 연결되고, 이 무선 송수신기는 블루투스 송수신기 또는 WiFi 송수신기 또는 적외선 송수신기일 수 있다. 무선 송수신기(55)는 도 2에 도시된 바와 같이 읍션이다. 처리 시스템(47)은 옵션으로 옵션인 캐시(48)에 연결될 수 있다. 처리 시스템(47)은 인텔 또는 IBM으로부터의 마이크로프로세서와 같은 하나 이상의 마이크로프로세서를 포함할 수 있다. 버스(51)는 당 기술에 알려진 방법으로 이들 다양한 컴포넌트들을 함께 상호 접속한다. 전형적으로, 입력/출력 장치들(53)은 입력/출력 컨트롤러들을 통해 시스템에 연결된다. 메모리(49)는 데이터에의 빠른 액세스를 제공하지만 메모리 내의 데이터를 리프레시 또는 유지하기 위해 계속적으로 전력을 필요로 하는 다이내믹 RAM(DRAM)으로서 구현될 수 있다. 비휘발성 메모리(50)는 시스템으로부터 전력이 제거된 후에도 데이터를 계속 유지하는 자기 하드 드라이브 또는 기타 비휘발성 메모리일 수 있다. 도 2는 비휘발성 메모리(50)가 데이터 처리 시스템 내의 컴포넌트들의 나머지에 직접 연결된 로컬 장치인 것을 나타내고 있지만, 다른 실시예들은 모뎀 또는 이더넷 인터페이스와 같은 네트워크 인터페이스를 통해 데이터 처리 시스템에 연결되는 네트워크 저장 장치와 같은, 시스템으로부터 원격인 비휘발성 메모리를 이용할 수도 있다는 것을 알 것이다. 버스(51)는, 당 기술에 잘 알려진 바와 같이, 당 기술에 알려진 다양한 브리지, 컨트롤러, 및/또는 어댑터를 통해 서로 접속된 하나 이상의 버스를 포함할 수 있다. 일 실시예에서, I/O 컨트롤러(53)는 USB 주변 장치들을 제어하기 위한 USB 어댑터 및 IEEE-1394 준수 주변 장치들을 위한 IEEE-1394 컨트롤러를 포함할 수 있다.
이 설명으로부터 본 발명의 양태들은, 적어도 부분적으로, 소프트웨어로 구현될 수 있다는 것을 분명히 알 것이다. 즉, 본 기법들은 컴퓨터 시스템 또는 다른 데이터 처리 시스템에서, 그의 프로세서 또는 처리 시스템이 메모리(49) 또는 비휘발성 메모리(50) 또는 도 3에 도시된 메모리(63) 등의 메모리에 포함된 명령들의 시퀀스들을 실행하는 것에 응답하여, 수행될 수 있다. 다양한 실시예들에서, 본 발명들을 구현하기 위해 소프트웨어 명령들과 합께 하드와이어드 회로(hardwired circuitry)가 이용될 수 있다. 따라서, 본 기법들은 하드웨어와 소프트웨어의 어떠한 특정 조합에도 제한되지 않고 데이터 처리 시스템에 의해 실행되는 명령들에 대한 어떠한 특정 소스에도 제한되지 않는다. 또한, 이 설명의 전반에 걸쳐서, 다양한 기능들 및 동작들은 설명을 단순화하기 위해 소프트웨어 코드에 의해 수행되거나 소프트웨어에 의해 초래되는 것으로 기술된다. 그러나, 숙련된 당업자는 그러한 표현이 의미하는 것은 그 기능들이 처리 시스템에 의한 코드의 실행으로부터 생긴다는 것을 인지할 것이다.
도크(54) 및/또는 무선 송수신기(55)는 도 2에 도시된 데이터 처리 시스템을 도 3에 도시된 데이터 처리 시스템과 같은 다른 데이터 처리 시스템에, 또는 도 2에 도시된 시스템을 닮은 다른 데이터 처리 시스템에 연결하기 위한 물리적 인터페이스를 제공한다. 도크(54)는 도크(26)와 같은 종래 기술의 도크와 유사할 수 있고, 따라서 그것은 하나의 데이터 처리 시스템과 다른 데이터 처리 시스템 사이에 동기화 프로세스가 수행될 수 있게 하기 위해 그 2개의 시스템들 사이에 기계적 및 전기적 접속 둘 다를 제공한다. 다른 실시예들에서, 무선 송수신기들(55)은 그 2개의 시스템들 사이에 기계적 접속을 제공하지 않고 동기화 프로세스의 목적으로 그 2개의 시스템들 사이에 전기적 접속을 제공할 수 있다.
도 3은 도 2에 도시된 시스템 또는 도 3에 도시된 것과 유사한 시스템 등의 다른 데이터 처리 시스템과 데이터를 동기화시킬 수 있는 또 하나의 데이터 처리 시스템의 예를 나타낸다. 도 3에 도시된 데이터 처리 시스템(60)은 하나 이상의 마이크로프로세서일 수 있는, 또는 시스템 온 칩 집적 회로(system on a chip integrated circuit)일 수 있는 처리 시스템을 포함하고, 상기 시스템은 또한 처리 시스템에 의해 실행하기 위한 데이터 및 프로그램들을 저장하기 위한 메모리(63)를 포함한다. 상기 시스템(60)은 또한 마이크 및 스피커를 포함할 수 있는 오디오 입력/출력 서브시스템(64)을 포함하고, 예를 들면, 상기 스피커 및 마이크를 통해 음악을 재생하거나 전화 기능을 제공한다. 디스플레이 컨트롤러 및 디스플레이 장치(65)는 사용자를 위한 시각적 사용자 인터페이스를 제공하고; 이 디지털 인터페이스는 OS X 운영 체제 소프트웨어를 실행하고 있을 때 매킨토시 컴퓨터 상에 나타내어지는 것과 유사한 시각적 인터페이스를 제공한다. 시스템(60)은 또한 WiFi 송수신기, 적외선 송수신기, 블루투스 송수신기, 및/또는 무선 휴대폰 송수신기와 같은 하나 이상의 무선 송수신기를 포함한다. 도시되지 않은 추가의 컴포넌트들도 특정 실시예들에서 시스템(60)의 일부일 수 있고, 특정 실시예들에서는 도 3에 도시된 것보다 더 적은 수의 컴포넌트들이 데이터 처리 시스템에서 이용될 수도 있다는 것을 알 것이다. 데이터 처리 시스템(60)은 또한 사용자가 시스템에 입력을 제공할 수 있게 하기 위해 제공되는 하나 이상의 입력 장치들(66)을 포함한다. 이들 입력 장치들은 키패드 또는 키보드 또는 터치 패널 또는 멀티-터치 패널일 수 있다. 데이터 처리 시스템(60)은 또한 도 2에 도시된 도크(54)와 같은 도크에 대한 커넥터일 수 있는 옵션인 입력/출력 장치(67)를 포함한다. 당 기술에 잘 알려진 바와 같이 다양한 컴포넌트들을 상호 접속하기 위해, 도시되지 않은, 하나 이상의 버스들이 이용될 수 있다는 것을 알 것이다. 도 3에 도시된 데이터 처리 시스템은 핸드헬드 컴퓨터 또는 PDA(personal digital assistant), 또는 PDA 같은 기능을 갖는 휴대폰, 또는 휴대폰을 포함하는 핸드헬드 컴퓨터, 또는 iPod와 같은 미디어 플레이어, 또는 예를 들면 하나의 장치에 PDA 및 휴대폰과 결합된 미디어 플레이어와 같은, 이들 장치들의 양태들 또는 기능들을 결합하는 장치일 수 있다. 다른 실시예에서, 데이터 처리 시스템(60)은 네트워크 컴퓨터 또는 다른 장치 내의 임베드된 처리 장치, 또는 도 3에 도시된 것보다 더 적은 수의 컴포넌트들 또는 어쩌면 더 많은 수의 컴포넌트들을 갖는 다른 타입의 데이터 처리 시스템일 수 있다.
본 발명의 적어도 특정 실시예들은 미디어를 제공하는 미디어 처리 시스템, 미디어를 저장하는 저장 장치를 포함할 수 있고 또한 안테나 시스템 및 상기 미디어 처리 시스템과 연결된 무선 주파수(RF) 송수신기(예를 들면, 휴대폰 용의 RF 송수신기)를 더 포함할 수 있는, 휴대용 음악 및/또는 비디오 미디어 플레이어와 같은 디지털 미디어 플레이어의 일부일 수 있다. 특정 실시예들에서는, 원격 저장 장치 상에 저장된 미디어가 RF 송수신기를 통해 미디어 플레이어에 송신될 수 있다. 미디어는, 예를 들면, 음악 또는 기타 오디오, 정지 화상(still picture), 또는 동화상(motion picture) 중 하나 이상일 수 있다.
휴대용 미디어 플레이어는 캘리포니어주, 쿠퍼티노의 애플사로부터의 iPod® 또는 iPod Nano® 미디어 플레이어 상의 클릭 휠(click wheel) 입력 장치, 터치 스크린 입력 장치, 푸시버튼 장치, 이동 가능한 포인팅 입력 장치 또는 기타 입력 장치와 같은, 미디어 선택 장치를 포함할 수 있다. 미디어 선택 장치는 저장 장치 및/또는 원격 저장 장치 상에 저장된 미디어를 선택하는 데 이용될 수 있다. 휴대용 미디어 플레이어는, 적어도 특정 실시예들에서, 입력 장치를 통해 선택되고 있고, 스피커 또는 이어폰(들)을 통해, 또는 디스플레이 장치 상에, 또는 디스플레이 장치와 스피커 또는 이어폰(들) 양쪽 모두에서 제공되고 있는 미디어의 타이틀들 또는 다른 표시자들을 디스플레이하기 위해 상기 미디어 처리 시스템에 연결되는 디스플레이 장치를 포함한다. 휴대용 미디어 플레이어의 예들은 공개된 미국 특허 출원 번호 2003/0095096 및 2004/0224638에서 기술되어 있고, 상기 2개의 문헌은 모두 참고로 본 명세서에 통합된다.
특정 실시예들에서, 데이터 처리 시스템(60)은 액정 디스플레이와 통합되는 멀티-터치 입력 패널 장치일 수 있는 태블릿 같은 입력 장치를 갖는 핸드헬드 컴퓨터를 닮은 작은 폼 팩터로 구현될 수 있다. 그러한 장치들의 예들은 2006년 10월 24일에 출원된 미국 특허 출원 번호 11/586,862, "AUTOMATED RESPONSE TO AND SENSING OF USER ACTIVITY IN PORTABLE DEVICES"에 제공되어 있고, 상기 출원은 본원과 동일한 양수인에게 양도된 것이다. 이 상기 출원은 참고로 본 명세서에 통합된다.
다음의 설명에서는, 동기화 및 비동기화 처리 동작들 둘 다를 위하여 사용되는 다양한 소프트웨어 컴포넌트들이 설명된다. 적어도 특정 실시예들에서, 이들 다양한 소프트웨어 컴포넌트들은 하나의 타입의 데이터 처리 시스템에 있어서는 도 2에 도시된 메모리(49) 및/또는 메모리(50)에 저장될 수 있고, 도 3에 도시된 것과 같은 시스템의 경우에는, 이들 다양한 소프트웨어 컴포넌트는 휘발성 메모리뿐만 아니라, 플래시 메모리 또는 자기 하드 드라이브 등의 비휘발성 메모리를 포함할 수 있는 메모리(63)에 저장될 수 있다.
도 4는 핸드헬드 컴퓨터일 수 있는 장치와 같은, 하나 이상의 데이터 시스템과, 데스크톱 또는 랩톱 컴퓨터일 수 있는 호스트 사이의 동기화 시스템을 위한 특정 소프트웨어 아키텍처의 실시예의 예를 나타낸다. 이 소프트웨어 아키텍처는 도 5, 6A, 6B, 7A, 및 7B, 및 도 8A 및 8B에 도시된 방법들과 같은, 본 명세서에 설명된 다양한 실시예들 중 하나 이상의 실시예를 구현하는 데에 이용될 수 있다. 이 동기화 시스템은 콘택트 또는 주소 데이터베이스 내의 데이터와 같은, 구조화된 데이터를 동기화시키는 데 이용될 수 있다. 상이한 데이터는 전형적으로 그 데이터가 어떻게 조직되고 포맷되는지를 특정하는 상이한 구조들 또는 포맷들을 갖는다. 이들은 데이터 클래스라고 불리고, 도 9A 및 9B는 2개의 상이한 데이터 클래스에 대한 2개의 상이한 구조화된 데이터 포맷들의 예를 제공한다. 특히, 도 9A는 콘택트 데이터 클래스에 대한 데이터 포맷을 나타내고, 도 9B는 캘린더 데이터 클래스에 대한 포맷을 나타낸다. 도 4에 도시된 동기화 시스템은 아래에서 더 설명되는 바와 같이 2개의 상이한 시스템들 상의 2개의 상이한 캘린더 스토어들 사이에 캘린더 데이터를 동기화시키기 위해 또한 2개의 시스템들 상의 2개의 콘택트 스토어들 사이에 콘택트 데이터를 동기화시키기 위해 이용될 수 있다.
도 4에 도시된 소프트웨어 아키텍처는 장치 측(101)에 복수의 소프트웨어 컴포넌트들 및 호스트 측(103)에 복수의 소프트웨어 컴포넌트들을 포함한다. 또한, 장치와 호스트 사이의 물리적 분리를 나타내는 라인(105)에 의해 분리되어 있는 2개의 소프트웨어 컴포넌트들 사이의 접속을 사실상 브리지 연결하는 장치 링크 소프트웨어(107)가 있다. 각 측의 소프트웨어 컴포넌트들은 각 데이터 처리 시스템 상의 각각의 메모리에 저장된다는 것을 알 것이다. 상기 장치는 특정 데이터 클래스 내의 구조화된 데이터를 액세스 및 편집하는 데 이용되는 하나 이상의 사용자 애플리케이션 프로그램들을 포함한다. 도 4는 3개의 그러한 사용자 애플리케이션 프로그램들의 예들을 나타낸다. 특히, 캘린더 애플리케이션 프로그램(125)은 캘린더 스토어 데이터베이스(119) 내의 캘린더 데이터를 액세스 및 편집하는 데 이용된다. 유사하게, 콘택트 애플리케이션 프로그램은 사용자에 의해 콘택트 스토어 데이터베이스(121)에 저장된 콘택트 또는 주소록 정보를 액세스 및 편집하는 데에 이용된다. 유사하게, 노트 애플리케이션 프로그램, 위젯들을 제공하기 위한 위젯 프로그램, 북마크들을 갖는 웹 브라우저, 이메일 계정 설정 정보를 포함하는 이메일 프로그램, 해야할 일 목록 프로그램, 및 구조화된 데이터를 갖는 다른 프로그램들을 포함할 수 있는 기타 애플리케이션 프로그램들(129)은 다른 저장된 데이터베이스들(123) 내의 정보에 액세스할 수 있고 그 정보를 편집하는 능력을 제공하는 기타 애플리케이션 프로그램들(129)에 의해 나타내어진다. 애플리케이션 프로그램들(125 및 127)과 같은 이들 사용자 애플리케이션 프로그램들은 각각의 상기한 클래스들 내의 구조화된 데이터를 동기화시킬 책임이 있는 동기화 소프트웨어 컴포넌트들과는 별개이다. 이들 소프트웨어 컴포넌트들은 도 4에서 데이터 소스들(113, 115, 및 117)로서 도시되어 있다. 특히, 캘린더 데이터 소스(113)는, 동기화 프로세스 동안에, 캘린더 데이터 클래스인 그의 특정 데이터 클래스로부터의 구조화된 데이터의 검색 및 저장을 초래할 책임이 있다. 유사하게, 콘택트 데이터 소스(115)는, 사용자의 주소록 또는 다른 콘택트 정보 데이터베이스를 나타낼 수 있는, 콘택트 스토어 데이터베이스(121) 내의 구조화된 데이터의 검색 및 저장을 초래할 책임이 있다. 유사하게, 다른 데이터 소스들(117)과 같은 다른 데이터 소스들은 다른 구조화된 데이터 스토어들로부터의 구조화된 데이터의 검색 및 저장을 초래할 책임이 있다. 이것은 노트들, 이메일들, 북마크들, 및/또는 해야할 일 목록들에 대한 데이터베이스들 및 다른 데이터베이스들 또는 데이터의 스토어들을 포함할 수 있다. 데이터 소스들은 또한 장치 상에 저장하기 위해 또는 호스트에 전송하기 위해 데이터를 포맷하는 것, 특정 데이터 클래스에 대한 각 데이터 클래스 처리기(data class handler)에 관하여 각 데이터 소스에 관한 버전 식별자들을 송신 및/또는 수신하는 것, 동기화가 완료되거나 또는 완료되지 않은 것을 보증하는 원자 트랜잭션들(atomic transactions)로서 동기화 동작들이 수행되는 것을 보증하기 위해 본 명세서에서 설명된 장치 및 호스트 앵커들을 송신하는 것, (접속이 중단(interrupt)되더라도 동기화가 수행될 수 있도록 보증하기 위해) 그것이 완료되지 않았다면 시스템을 이전 상태로 롤백(roll back)하게 하는 것과 같은, 다른 기능들을 수행할 수 있다. 또한, 데이터 소스들은 또한 장치가 호스트에 의해 제공되는 레코드 ID(identifier)에 관계없이 고유 레코드를 유지할 수 있도록 호스트 상의 레코드들에 대해 장치 상의 레코드들에 대한 고유 ID(identification) 값들을 리매핑(remap)할 수 있다. 각 데이터 소스는 소프트웨어 기반 메시지들을 통해 동기화(sync) 에이전트 소프트웨어 컴포넌트(109)에 연결되고, 이 동기화 에이전트 소프트웨어 컴포넌트는, 적어도 부분적으로, 장치 링크 소프트웨어 스택(107)을 통해 장치와 호스트 사이의 데이터 접속을 유지할 책임이 있다. 장치 링크 소프트웨어 스택(107)의 예는 도 10에 도시되어 있고 본 명세서에서 설명된다. 동기화 에이전트(109)는, 호출(calls) 또는 API(Application Program Interface)와 같은 소프트웨어 기반 메시지들을 통해 다양한 데이터 소스들에 서비스를 제공한다. 적어도 하나의 실시예에서, 동기화 에이전트(109)는 다양한 데이터 클래스들의 동기화의 순서를 직접 또는 간접적으로 특정함으로써 그 순서를 구현 또는 처리 또는 결정할 수 있다. 예를 들면, 동기화 에이전트(109)는 캘린더 데이터 클래스가 먼저 동기화되고 그 후 콘택트 데이터 클래스가 다음으로 동기화되고 그 후 해야할 일 목록 데이터 클래스가 다음으로 동기화되는 것 등을 결정 및 특정할 수 있다. 동기화 에이전트(109)는, 다른 실시예에서, 동기화 클라이언트로부터 하나 이상의 명령 또는 메시지를 통해 그 순서를 수신할 수 있고, 그 손서대로 데이터 소스들에 메시지를 송신함으로써 그 순서를 구현할 수 있다. 동기화 에이전트(109)는 또한 동기화가 일어나고 있을 때 링크가 실패하면 데이터 소스에 경고하고, 동기화가 완료되기 전에 링크가 실패하면 데이터 소스에게 이전 동기화 상태로 롤백하라고 알릴 것이다. 또한, 동기화 에이전트는 동기화가 성공하였다면 변경들을 커밋(commit)할 것을 데이터 소스에게 요청할 수 있고, 그에 따라 데이터 소스는 그 특정 데이터 클래스에 대한 특정 스토어에 데이터를 기입하게 된다.
도 4의 소프트웨어 아키텍처는 적어도 특정 실시예들에서 제3자 공급자들에 의한 "애프터 마켓(after market)" 플러그인들(plug-ins)을 포함하는, 다수의 상이한 데이터 클래스들의 플러그 인(plugging in)을 허용하는 추상들(abstractions)을 제공한다. 사실상, 이 아키텍처는 2개의 단편들(하나는 동기화 클라이언트(111)의 형태로 호스트 상에 있는 것이고 하나는 동기화 에이전트(109)의 형태로 장치 상에 있는 것)로 분할되는 "동기화 클라이언트(sync client)"를 생성하고 동기화 클라이언트(111) 및 동기화 에이전트(109)의 양쪽 모두와 함께 동작하는, 동기화 서비스들(141)의 형태의 동기화 서버를 이용한다. 이 아키텍처의 실시예에서, 장치는 동기화 서버(예를 들면, 동기화 서비스들(141))와 직접 상호 작용하지 않고 대신에 동기화 서버와 (소프트웨어 기반 메시지들을 통해) 상호 작용하는 동기화 클라이언트(111)와 메시지들을 교환한다. 일 실시예에서, 동기화 서버는 다양한 클라이언트들(애플리케이션들, 다른 서버들, 및 장치에 대한 동기화 클라이언트)로부터의 데이터를 저장하고, 비교하고(혼합(mingle)하고), 디퍼런싱(differencing)하는 것을 관리한다. 동기화 클라이언트는, 일 실시예에서, 장치에의 접속(인증 및 크립토그래피를 이용한), 장치와 컴퓨터 사이에 데이터를 전송 및 변경하는 것뿐만 아니라, 동기화 서버와 장치 사이를 중재하기 위해 동기화 앵커들, 제어 흐름을 처리하는 것, 데이터 클래스들의 버저닝(versioning)을 체크하는 것, 및 상이한 데이터 클래스들의 처리(DataClassHandlers)를 최적화 및 조직하기 위한 플러그인 모델을 제공하는 것을 관리한다. 동기화 클라이언트는, 일 실시예에서, 또한 모든 필터링을 행한다(특정 그룹들 내의 동기화 콘택트들(syncing contacts)만, 또는 특정 캘린더들 내의 이벤트들, 데이터 레인지(data range) 내의 이벤트들, 메일 계정들의 서브세트, 및 노트들 또는 크기 임계치를 갖는 노트 첨부들). 일 실시예에서, 동기화 에이전트(SyncAgent)는 데이터 소스들에 대한 플러그인 모델을 갖고, 데이터를 관리/디스플레이하는 장치 상의 애플리케이션들과는 별개의 프로세스로서 실행하지만, (잠금(locking), 또는 동시 액세스와) 동시에 그것들과 상호 작용할 수 있고, 데이터가 변할 때 애플리케이션들에 통지한다.
상기 장치 링크 소프트웨어 컴포넌트(107)는 도 10에 도시된 소프트웨어 컴포넌트들의 계층들과 같은 복수의 소프트웨어 컴포넌트들을 포함하고, 장치 링크(107)는, 적어도 하나의 실시예에서, 장치와 호스트 사이에 인증된 접속 링크를 유지하고, 그에 의해 동기화 프로세스 동안에 그 2개의 데이터 처리 시스템들 사이에 명령 및 데이터의 전달을 허용한다. 또한, 도 10에 도시된 바와 같이, 장치 링크 소프트웨어 컴포넌트(107)는 또한, 적어도 특정 실시예들에서, 백업 애플리케이션 또는 구성 애플리케이션 및 진단 도구들을 포함하지만, 그것들에 제한되지 않는, 장치와 호스트 사이에 앞뒤로 다른 정보를 전송하는 추가의 애플리케이션들을 위해 이용될 접속을 제공한다. 장치 링크(107)에 관한 추가의 상세들은 도 10, 11, 및 12와 관련해서 아래에 제공된다. 적어도 특정 실시예들에서, 장치 링크 소프트웨어 스택의 적어도 일부는 장치와 호스트 메모리 양쪽 모두에 존재할 수 있다. 바람직한 실시예들에서, 장치 링크 소프트웨어 스택의 일부는 장치와 호스트 양쪽 모두에 존재하고 실행한다.
상기 장치 링크 소프트웨어 컴포넌트(107)는 장치(101) 상에서 실행하는 동기화 에이전트(109)와 호스트(103) 상에서 실행하는 동기화 클라이언트(111) 사이에 통신 링크를 제공한다. 장치 링크(107)는 적어도 특정 실시예들에서 동기화를 위한 포맷으로 준비된 구조화된 데이터뿐만 아니라 소프트웨어 컴포넌트들 사이에, 호출들 및 호출들에 대한 응답들과 같은, 소프트웨어 기반 메시지들을 전달한다. 동기화 클라이언트(111)는, 적어도 부분적으로, 적어도 특정 실시예들에서 호스트와 장치 사이에 인증된 접속을 유지하도록 동작한다. 또한, 동기화 클라이언트는, 일 실시예에서, 본 명세서에서 설명되는 바와 같이 장치 및 호스트 앵커들을 송신할 수 있고, 본 명세서에 더 설명되는 바와 같이 특정 데이터 클래스에 대한 성공적인 동기화에 응답하여 다음 장치 및 다음 호스트 앵커들의 저장을 초래할 수 있다. 일 실시예에서, 동기화 클라이언트는 아래에서 더 설명되는 바와 같이 동기화 모드를 결정할 것이고 또한 그 데이터 클래스에 대하여 동기화 세션 동안에 데이터의 처리, 예를 들면, 그 데이터 클래스에 대한하여 동기화되어야 할 엔티티 타입들을 결정하는 것, 장치로 및 장치로부터 레코드들을 변환하는 것, 엔티티 타입에 기초하여 동기화 서버(동기화 서비스들)로부터 변경들을 풀(pull)하는, 그리고 동기화 서버(동기화 서비스들)로부터 풀된 레코드들에 대해 필터링을 수행하는 순서를 결정하는 것 등을 관리하기 위해 특정 데이터 클래스에 대한 정확한 데이터 클래스 처리기를 호출할 것이다. 동기화 클라이언트(111)는 호스트에 의해 지원되는 각 데이터 클래스에 대한 데이터 클래스 처리기에 연결된다. 도 4에 도시된 예에서는, 캘린더 데이터 클래스에 대한 데이터 클래스 처리기(135), 및 콘택트 데이터 클래스에 대한 데이터 클래스 처리기(137)뿐만 아니라, 하나 이상의 다른 데이터 클래스들에 대한 데이터 클래스 처리기들(139)이 있다. 이들 데이터 클래스 처리기들 각각은 특정 데이터 클래스에 대한 동기화 프로세스 동안에 동기화 서비스들을 제공하는 데 전용된다. 예를 들면, 캘린더 데이터를 동기화시킬 때, 데이터 클래스 처리기는 캘린더 데이터 스토어(143A)로부터 얻어진 캘린더 데이터를, 그러한 데이터가 캘린더 스토어(119) 상의 저장을 위해 장치에 송신될 수 있도록, 포맷팅할 것이다. 유사하게, 데이터 클래스 처리기는 장치로부터 수신된 데이터를, 그것이 호스트 상의 데이터베이스에 저장될 수 있도록, 포맷팅할 수 있다. 예를 들면, 데이터 클래스 처리기는, 적어도 특정 실시예들에서, 장치(101)로부터 수신된 데이터에 대한 리포맷팅 동작들(reformatting operations)을 수행할 수 있다. 적어도 특정 실시예들에서, 각 데이터 클래스에 대한 데이터 클래스 처리기들은 그 특정 데이터 클래스에 대한 하나 이상의 기능들을 수행할 수 있다. 예를 들면, 데이터 클래스 처리기는 그 데이터 클래스에 대한 스토어로부터 구조화된 데이터의 검색 및 저장을 초래할 수 있다. 또한, 데이터 클래스 처리기는 장치에 대한 데이터를 포맷팅할 수 있고, 데이터를 동기화시킬 때 구조화된 데이터를 필터링할 수 있다. 이 필터링은 콘택트 데이터 스토어에 대한 사적인 그룹 또는 비즈니스 그룹과 같은 그룹에 기초할 수 있고 또는 아래에서 더 설명되는 바와 같이 노트 데이터 스토어에 대한 것과 같은 크기에 기초할 수 있다. 또한, 데이터 클래스 처리기는 그의 버전 식별자를 장치 상의 특정 데이터 타입에 대한 그의 대응하는 데이터 소스에 송신할 수 있고 그 특정 데이터 클래스에 대한 데이터 소스의 버전의 식별자를 수신할 수 있다. 또한, 데이터 클래스 처리기는 장치에 송신된 또는 장치로부터 수신된 새로운 레코드들에 기초하여 새로운 필터를 생성할 수 있고 또는, 동기화 프로세스의 결과로서, 그룹 또는 크기 또는 다른 파라미터들에 기초한 필터와 같은 필터들을 변경하는 것에 관한 동작들을 수행할 수 있고, 동기화 클라이언트(SyncClient)는 그 변경된 필터들을 저장할 것이다. 또한, 동기화 클라이언트는 본 명세서에서 설명되는 바와 같이 장치 상의 레코드들에 대하여 장치로부터 얻어진 리매핑된 식별자들의 저장을 초래할 수 있다. 특정 클래스에 대한 데이터 클래스 처리기는 전형적으로 장치 상의 동일한 클래스의 데이터 소스와 동시에 실행하고 있을 것임을 이해할 것이다. 이들 2개의 소프트웨어 컴포넌트들은, 장치 상의 동기화 에이전트 및 호스트 상의 동기화 클라이언트와 함께, 동기화 프로세스의 일부로서 실행중인 소프트웨어 컴포넌트들에서 활성인 양쪽 데이터 처리 시스템들 상의 액티브 에이전트들을 형성한다. 일 실시예에서, 데이터 클래스 처리기들은 호스트 상의 데이터 스토어들로부터 구조화된 데이터의 저장 및 검색을 직접적으로 초래하지 않을 수 있다. 그것들은 동기화 클라이언트(111)에 메시지를 송신하고, 동기화 클라이언트(111)는 동기화 서비스들(141)을 요청하고, 동기화 서비스들(141)은 직접 또는 간접적으로 캘린더 스토어 데이터베이스(143A) 또는 콘택트 스토어 데이터베이스(145A) 또는 다른 스토어 데이터베이스들(147A)로부터 검색 및 저장을 초래할 수 있다. 다른 실시예에서, 동기화 클라이언트는 저장 및 검색 프로세스를 구동하고, 동기화 서비스들로부터 데이터를 획득하고, 데이터 클래스 처리기 내의 기능들에 호출한다. 동기화 클라이언트는 동기화 서비스들에 의해 어떤 엔티티 타입들을 동기화시킬지를 데이터 클래스 처리기에 묻는다. 그것이 레코드들을 획득하면 그것은 데이터 클래스 처리기에게 그것들을 장치에 대하여 변환할 것을 요청한다(데이터 클래스 처리기는 많은 경우에 변환되지 않은 동일한 레코드를 반환할 수도 있다는 것에 유의한다). 동기화 클라이언트는 데이터 클래스 처리기를 필터링을 목적으로 동기화 서버(동기화 서비스들)에 직접 와이어(wire)하고, 그에 따라 동기화 서버는 바로 데이터 클래스 처리기(DataClassHandler)에게 레코드를 필터링할지 여부를 묻고, 그 후 동기화 클라이언트는 데이터 클래스 처리기에 요청한다(둘 다 그것이 장치로부터 레코드들을 푸시(push)하는 것을 끝낸 후에 그리고 그것이 장치에 대한 동기화 서비스들로부터 레코드들을 풀(pull)한 후에). 데이터 클래스 처리기는 "응답한다(responsive)"; 그것은 동기화 클라이언트(필터링의 경우는, 동기화 서버)로부터의 요청들에 응답하고, 그것은 호스트 측의 동기화 동작을 제어할 책임이 있는 액티브 에이전시(active agency)인 동기화 클라이언트이다.
호스트는 또한 캘린더 애플리케이션 프로그램(143), 콘택트 애플리케이션 프로그램(145), 및 사용자에 의해 캘린더 스토어 데이터베이스(143A)와 같은 대응하는 스토어 데이터베이스에 저장된 구조화된 데이터를 갖는 대응하는 데이터 클래스들을 액세스 및 편집하는 데 이용되는 다른 애플리케이션 프로그램들(147)과 같은 사용자 애플리케이션 프로그램들을 포함할 수 있다. 도 4에 도시된 아키텍처는 호스트 측의 데이터 스토어들을 애플리케이션 프로그램에 직접 연결되어 있는 것으로 나타내고; 통상적으로 호스트 데이터 처리 시스템 상에는 각 데이터베이스를 관리하고, 특정 스토어 데이터베이스에 대한 데이터의 파독 및 기입에 영향을 미치기 위해 애플리케이션 프로그램들(143 또는 145)과 같은 소프트웨어 컴포넌트들 또는 데이터 클래스 처리기들 또는 동기화 서비스들(141)과 같은 다른 컴포넌트들로부터 호출들 또는 다른 요청들을 수신하는 파일 관리 시스템이 있다는 것을 알 것이다.
다음의 표들은 도 4에 도시된 다음의 소프트웨어 컴포넌트들. (1) 데이터 소스 컴포넌트; (2) 동기화 에이전트 컴포넌트; (3) 동기화 클라이언트 컴포넌트; 및 (4) 데이터 클래스 처리기 컴포넌트 각각의 기능들을 기재한다.
표 1
데이터 소스
데이터 소스(데이터를 격납하는 데 이용되는 데이터베이스 또는 파일들) 열기
버전을 제공하고, 동기화 클라이언트(데이터 클래스 처리기) 버전이 더 작더라도 동기화할 수 있는지를 결정
컴퓨터(호스트) 및 장치 측의 장치 동기화 앵커들을 관리하고, 빠른 또는 느린 동기화할 수 있는지를 결정
데이터 소스로부터의 데이터를 이용하여 애플리케이션들과 코디네이트
리셋되어 있다면 모든 데이터를 클리어
변경된/새로운/삭제된 레코드들을 동기화 클라이언트에 송신
마지막 동기화 이후 어느 레코드들이 변경되었는지(변경 히스토리)를 계속 추적하기 위해 그의 데이터 클래스에 대하여 애플리케이션(들)과 코디네이트
동기화 클라이언트 측으로부터 데이터를 처리하고 커밋
동기화 클라이언트 측으로부터 새로운 레코드들에 대한 레코드 식별자들을 리매핑
표 B
동기화 에이전트
장치로부터 컴퓨터 측의 동기화 클라이언트로의 접속을 관리
장치 측의 동기화 동작에 대한 제어 흐름/상태 머신을 관리
장치 상의 접속 계층에 대한 장치 링크에 인터페이스(이것은 또한 인증 및 크립토그래피를 행함)
주어진 데이터 클래스에 대한 정확한 데이터 소스를 설정
동기화를 위한 프로세스 인프라를 제공
동기화 클라이언트가 동기화를 위해 장치에 접속할 수 있도록 요구가 있는 대로 론칭
접손 손실을 깔끔하게 처리하거나 컴퓨터(호스트) 측으로부터의 요청을 취소
사용자 요청에 의하여 동기화를 중단하기 위해 장치 측에서(즉, 장치 상의 사용자 인터페이스로부터) 취소 통지를 처리
표 C
동기화 클라이언트
컴퓨터(호스트) 상의 동기화 서버(동기화 서비스들), 및 장치 상의 동기화 에이전트에의 접속을 관리
컴퓨터(호스트) 측의 동기화 동작에 대한 제어 흐름/상태 머신을 관리
컴퓨터(호스트) 측의 컴퓨터 및 장치 동기화 앵커들을 관리
컴퓨터(호스트) 상의 접속 계층에 대한 장치 링크에 인터페이스(이것은 또한 인증 및 크립토그래피를 행함)
정확한 데이터 클래스 처리기를 설정하고 주어진 데이터 클래스에 대한 필터링 정보를 로딩
동기화 서버(동기화 서비스들)에 인터페이스 - 동기화 서버(동기화 서비스들)를 이용해 동기화 타입(빠른, 느린, 리셋) 및 동기화 동작을 관리
장치에 송신하기 위해 동기화 서버(동기화 서비스들)로부터 변경들을 획득
동기화 클라이언트(동기화 소스)로부터의 리매핑된 레코드 식별자들에 관하여 동기화 서버에 통지
접속 손실을 깔끔하게 처리하거나 장치 측으로부터의 요청을 취소
사용자 요청에 의하여 동기화를 중단하기 위해 컴퓨터(호스트) 측에서(즉, 컴퓨터(호스트) 상의 사용자 인터페이스로부터) 취소 통지를 처리
표 D
데이터 클래스 처리기
버전을 제공하고, 동기화 에이전트(데이터 소스) 버전이 더 작더라도(더 구식이라도) 동기화할 수 있는지를 결정
어느 데이터 타입들을 동기화할지를 특정
모든 레코드들에 대한 필터링을 제공
동기화 서버(동기화 서비스들)로부터 상이한 레코드 타입들을 어느 순서로 풀(pull)할지를 특정(추가된/변경된 레코드들의 장치 측 처리를 더 효율적으로 만들기 위해)
컴퓨터(동기화 서버) 상의 동기화 서비스들로부터 풀된 레코드들을 장치에 송신되도록 변환(예를 들면 하나의 포맷으로부터 다른 포맷으로)(장치에 대한 전송 및 작업을 최적화하기 위해)
장치(동기화 에이전트/데이터 소스)로부터의 레코드들을 동기화 서비스들에 푸시되도록 변환(예를 들면 하나의 포맷으로부터 다른 포맷으로)(장치에 대한 전송 및 작업을 최적화하기 위해)
도 5는 적어도 하나의 실시예에 따른 전형적인 동기화 프로세스 동안에 시간에 걸쳐서 호스트와 장치 상에서 일어나는 다양한 액션들 및 동작들을 나타내는 순서도를 나타낸다. 중앙에서 아래로의 수직 라인은 호스트 동작들 및 액션들을 장치의 동작들 및 액션들과 분리하고 또한 동기화 동작 동안의 시간의 진행을 나타낸다. 호스트(177)는 동작 179에서 장치에 접속하고 장치를 인증하는 것에 의해 동기화를 시작할 수 있다. 이것은 호스트로부터 자체 서명된 인증서 및 자체 지정된 인증 기관(self-assigned certificate authority)을 이용한 양방향 인증일 수 있다. 양방향 인증과 관련하여 사용될 수 있는 인증서들의 컬렉션의 예가 도 12에 도시되어 있다. 이 인증은 보안 레벨이 비교적 높도록 공개 키/개인 키 크립토그래피로 암호화될 수 있다. 이에 의해 모바일 핸드헬드 장치는 그 장치가 다른 호스트들에 노출됨으로써, 그 장치 또는 그의 호스트 상의 잠재적으로 비밀의 및/또는 기밀의 데이터를 드러내는 위험 없이, WiFi 무선 접속 또는 블루투스 무선 접속을 통해 안전하게 인증될 수 있을 것이다. 접속 동작 179에 응답하여, 장치(175)는 준비 신호(ready signal)(181)로 응답한다. 그 후 동작 183에서, 호스트는 동작 183에 도시된 바와 같이 그것이 데이터 클래스 A(또는 다음 데이터 클래스)에 대한 동기화 동작을 시작하기를 원한다는 것을 나타낸다. 전형적으로, 적어도 도 4의 소프트웨어 아키텍처를 이용하는 실시예들에서, 동기화는 장치 및 호스트 상에서, 각각, 하나의 데이터 소스 및 하나의 데이터 클래스 처리기에 의해 한 번에 하나의 데이터 클래스에 대하여 수행된다. 동작 183에서의 신호에 응답하여, 장치는 동작 185에서 그것이 데이터 클래스 A에 대한 데이터 소스와 같은 필요한 소프트웨어 컴포넌트들을 갖고 있기 때문에 데이터 클래스 A에 대한 동기화 동작을 수행할 수 있음을 나타내는 승인(acknowledgement)으로 응답한다. 만일 장치가 동기화를 수행하기 위해 필요한 소프트웨어 컴포넌트들을 갖고 있지 않다면, 그것은 동기화가 진행될 수 없음을 나타낼 것이다. 이런 식으로, 적어도 특정 실시예들에서, 장치 및 호스트는 하나 이상의 데이터 클래스들을 동기화시키기 위한 지원에 대해, 사용자 개입 없이, 자동 체킹을 수행한다. 각 데이터 클래스에 대한 지원의 이 자동 체킹은 장치 및 호스트 양쪽의 모든 데이터 클래스들 또는 선택된 데이터 클래스들에 대하여 개별적으로 수행될 수 있다. 적어도 특정 실시예들에서, 장치 및/또는 호스트는, 동적인 조건들 및 상태들에 기초하여, 특정 시간에 데이터 클래스를 동기화시키지 않기로 결정할 수 있다. 예를 들면, 데이터 클래스 내의 데이터를 갖는 데이터베이스를 이용하는 애플리케이션이 그 데이터베이스를 액티브하게 이용하고 있다면, 장치 및/또는 호스트는 현 동기화 프로세스에서 그 데이터 클래스를 동기화시키지 않을 수 있다. 장치의 동작 185로부터의 승인에 응답하여, 호스트는 동작 187에서, 데이터 클래스 A에 대한 특정 데이터 클래스 처리기에 대한 그의 버전 넘버를 송신한다. 응답으로, 장치는, 동작 189에서, 데이터 클래스 A에 대한 그의 데이터 소스에 대한 그의 버전 넘버를 송신한다. 이렇게 하여, 장치 및 호스트 각각은 양쪽 버전 넘버들을 수신하고 비교를 수행하여 데이터 클래스 A 내의 구조화된 데이터를 동기화시킬지 및 어떻게 동기화시킬지를 결정하기 위해 어느 소프트웨어 컴포넌트를 사용할지를 판정할 수 있다. 전형적으로, 보다 높은 버전 넘버는 소프트웨어 컴포넌트의 보다 나중의 버전을 나타낸다. 전형적으로, 특정 데이터 클래스에 대하여 동기화시킬지 및 어떻게 동기화시킬지를 결정하기 위해 보다 나중의 소프트웨어 컴포넌트를 사용하는 것이 바람직하다. 대안 실시예들에서는, 보다 이른 소프트웨어 컴포넌트를 사용하는 것이 가능할 수 있다. 보다 나중의 소프트웨어 컴포넌트를 사용하는 것의 이점은 그것은 일반적으로 이전의 포맷들에 대해 알고 있고, 따라서 보다 새로운 포맷들을 지원하는 것뿐만 아니라 이전의 포맷들을 어떻게 다룰지를 이해할 것이라는 점이다. 적어도 하나의 실시예에서, 만일 데이터 소스가 데이터 클래스 처리기보다 나중의 버전이라면, 장치는 동기화가 수행될 수 있다면 그것을 어떻게 처리할지를 결정할 것이다. 한편, 적어도 특정 실시예들에서, 만일 호스트 상의 데이터 클래스 처리기가 이 비교에서 소프트웨어 컴포넌트의 보다 나중의 버전이라면, 호스트는 그 특정 데이터 클래스에 대한 동기화를 어떻게 수행할지를 결정할 수 있다. 버전 넘버들의 이 비교와 관련한 추가의 정보는 아래 도 8A 및 8B의 논의와 함께 제공된다.
동작 189 후에, 호스트는, 동작 191에서, 다음 호스트 앵커 및 이전 장치 앵커를 장치에 송신한다. 장치는, 동작 193에서, 그의 다음 장치 앵커 및 이전 호스트 앵커를 송신한다. 이들 앵커들은, 당 기술에 알려진 바와 같이, 동기화가 완료되거나 또는 완료되지 않고 호스트 및 장치 각각은 이전 동기화가 불완전하고 따라서 데이터가 특정 동기화 세션이 완료되었을 경우 생겼을 변경들을 행하지 않고 그의 이전 상태로 롤백되었다는 것을 인지할 수 있도록 동기화 동작들을 본질적으로 원자 트랜잭선들로 만들려고 시도하기 위해 사용된다. 동작들 191 및 193 각각에서는, 호스트 및 장치가 각각 다른 시스템에 동기화 타입을 송신할 수 있고, 그 동기화 타입은 송신하는 시스템이 현 동기화 동작에서 수행하기 위해 필요하다고 생각하는 특정 타입의 동기화를 나타낸다. 전형적으로 적어도 3가지 상이한 타입의 동기화 동작들이 있다: (1) 전형적으로 처음 호스트와 장치가 동기화될 때 생기는 완전 동기화(complete synchronization); (2) 단지 마지막 동기화 이후에 생긴 변경들을 동기화시키는 변경 동기화(changes synchronization); 및 (3) 하나 이상의 시스템 상의 데이터가 디폴트 또는 공장 설정으로 리셋되는 리셋 동작 - 이것은 전형적으로 모든 사용자 데이터가 리셋된 시스템으로부터 소거 또는 제거된다는 것을 의미함 -. 각 장치에 의해 요청되는 동기화의 타입은 동기화 타입 교섭에서 고려된다. 전형적으로, 양쪽 시스템들은 동일한 동기화 타입(예를 들면, 변경 타입)을 송신하겠지만, 일부 경우에, 하나의 시스템은 완전한 또는 느린 동기화를 요청할 수 있는 반면 다른 것은 변경(빠른) 동기화를 요청할 것이고, 그런 경우, 적어도 하나의 실시예에서, 그 2개의 시스템들은 시간의 점에서 "최악의" 동기화 동작을 선택하기 위해 교섭할 것이다. 완전한 동기화는 변경 동기화보다 더 긴 시간이 걸리기 때문에, 대부분의 경우, 완전한 동기화("느린" 동기화)가 빠른 동기화("변경" 동기화)에 우선하여 선택될 것이다. 동기화의 타입의 교섭은 앵커들의 상태에 대한 지식을 이용하여 수행된다. 당 기술에 알려진 바와 같이, 앵커들의 비교는 이전의 동기화가 완료되었는지 여부를 드러낼 것이다. 만일 그것이 중단되었다면, 장치로부터의 이전의 호스트 앵커는 그의 이전의 호스트 앵커의 호스트의 버전과 일치하지 않을 것이다. 유사하게, 이전의 동기화가 중단되었거나 또는 다른 식으로 불완전하다면, 장치에서 비교가 수행될 때 호스트로부터의 이전의 장치 앵커는 장치에서의 이전의 장치 앵커와 일치하지 않을 것이다. 불일치가 있다는 사실은 이전의 동기화에서의 문제를 드러내고 그로 인해 호스트 또는 장치가 완전한(느린) 동기화 타입을 요청하게 될 것이다. 앵커는 시스템들의 동기화의 상태를 판정하기 위해 동기화 프로세스에서 하나 또는 양쪽 시스템들에 의해 사용되는 값일 수 있다. 전형적으로, 앵커들이 일치한다는 사실은 마지막 동기화가 성공적으로 완료되었다는 것을 나타낸다.
동기화 타입이 교섭된 후에는, 동작 195에서 호스트가 동기화가 빠른 동기화(fast sync)이면 변경들을 또는 동기화가 완전한 동기화(full or complete sync)이면 모든 레코드들을 요청하는 것에 의해 동기화가 시작된다. 그 후 동작 197에서, 장치는 동기화의 타입에 따라서 변경들 또는 모든 레코드들을 호스트에 송신한다. 호스트는 199에서 동작 197로부터 생기는 송신 트랜잭션들을 승인(acknowledge)한다. 이들 승인들은 패킷 레벨 또는 레코드 레벨 등을 포함하는 하나 이상의 레벨들에서 수행될 수 있다. 호스트로부터의 최종 승인은 장치로 하여금, 동작 201에서, 그의 다음 장치 앵커를 장치에 저장하게 할 것이다. 당 기술에 알려진 바와 같이, 성공적인 동기화의 끝에, 저장된 다음 장치 앵커와 같은 모든 "다음" 앵커들은 미래의 동기화에서 사용하기 위한 이전의 장치 앵커가 될 것이다. 적어도 하나의 실시예에서, 동기화 에이전트는 각 클래스에 대하여 이전의 호스트 앵커뿐만 아니라 이전의 장치 앵커를 유지하고 동기화 동작 동안에 특정 데이터 클래스에 대한 다음 장치 앵커를 생성할 것이다. 유사하게, 적어도 하나의 실시예에서, 동기화 클라이언트는 각 클래스에 대하여 이전의 호스트 앵커 및 이전의 장치 앵커를 유지할 것이고 도 5, 6A, 6B, 7A, 및 7B에 도시된 프로세스들에서 사용하기 위한 다음 호스트 앵커를 생성할 수 있다. 장치는 동작 201 후에 그것이 동작 201에서 그의 다음 장치 엉커를 저장하였음을 승인할 수 있고 이에 따라 호스트는 동작 203에서 다음 장치 앵커를 호스트에 저장하고 그 특정 데이터 클래스에 대한 변경들 또는 모든 레코드들을 데이터 스토어에 커밋(commit)하게 될 것이다. 이것은 특정 클래스에 대한 데이터 클래스 처리기로 하여금 동기화되고 있는 그 특정 데이터 클래스의 구조화된 데이터에 대한 데이터베이스 또는 스토어에 변경들을 행하기 위해, 동기화 서비스들(141)을, 또는 다른 실시예들에서는, 파일 시스템 소프트웨어 컴포넌트를 요청하게 함으로써 일어날 수 있다. 그 후 동작 205에서, 장치는 그것이 풀(pull)할 준비가 되어 있음을 나타낸다. 이것은 장치가 교섭된 동기화 타입에 따라 변경들 또는 모든 레코드들을 수락할 준비가 되어 있음을 호스트에게 나타낸다. 응답으로, 호스트는 동작 207에서 동기화 타입에 따라 변경들 또는 모든 레코드들을 송신하고, 장치는 동작 207로부터의 이들 데이터 송신들을 위에서 나타내어진 하나 이상의 입도 레벨(levels of granularity)에서 승인한다(동작 211). 그 후, 일 실시예에서, 동작 211에서, 장치는 동일한 레코드에 대하여 장치에 유지된 대응하는 ID에 관하여 호스트에 유지된 각 레코드에 대한 식별자들(ID)들 사이의 관계를 나타내는 맵(map)을 송신하고; 대안 실시예에서, 장치는 프로토콜 내의 개별 메시지로서보다는 호스트 컴퓨터로부터 수신된 레코드들을 승인할 때 그 맵 정보를 나타낼 수 있다. 대안 구현들에서는, 동일한 식별자가 이용될 수 있지만, 적어도 특정 실시예들에서는, 호스트 상의 그 동일한 레코드에 대하여 유지된 ID와 다를 수 있는 각 레코드에 대하여 장치에 의해 유지된 별개의 개별적인 ID를 갖는 것이 바람직할 수 있다는 것을 알 것이다. 그러므로, 대응하는 ID들 사이의 맵 또는 관계가 유지될 수 있다. 이 경우, 맵은 장치에 의해 생성되어 호스트에 송신된다. 레코드 ID 맵을 수신하는 것에 응답하여, 호스트는 레코드에 대한 장치 ID와 동일한 레코드에 대한 호스트 ID 사이의 관계들을 나타내는 맵을 일시적으로(provisionally) 저장한다. 모든 레코드들이 장치에 송신되고, 장치로부터 승인된(그리고 레코드 매핑들이 호스트 상에 일시적으로 저장된) 후에, 호스트는 동작 213에서 커밋 요청을 송신하고, 그에 따라 장치는 현 동기화 세션으로부터의, 그 동기화 타입에 따라, 변경들 또는 모든 레코드들을 현 데이터 클래스에 대한 그의 데이터 스토어에 저장하게 될 것이다. 또한, 동작 215에서, 장치는 다음 호스트 앵커를 저장할 것이다. 그 후 동작 217에서, 장치는 승인 신호로 응답하고, 그에 따라 호스트는 동작 219에서 풀된 레코드들을 커밋하고 다음 호스트 앵커를 저장하게 될 것이다. 풀된 레코드들을 커밋하는 것은 또한 레코드에 대한 장치 ID와 동일한 레코드에 대한 호스트 ID 사이의 관계를 나타내는 상기 일시적으로 저장된 맵도 커밋한다.
도 5에 도시된 방법은 동기화될 각 데이터 클래스에 대하여 반복된다. 모든 데이터 클래스들이 동기화되면, 호스트 및 장치는 단절할 수 있다.
도 5에 도시된 방법은 대안 실시예들에서 다르게 구현될 수 있다는, 예를 들면, 특정 동작들이 생략될 수도 있고 그 동작들의 순서가 상이할 수도 있다는 것을 알 것이다. 예를 들면, 버전 넘버의 송신이 생략될 수 있고 또는 ID 맵의 송신이 생략될 수 있다. 또한, 대안 실시예에서, 장치가 먼저 호스트로부터 변경들 또는 모든 레코드들을 풀한 다음에 그 변경들 또는 모든 레코드들을 호스트에 송신하도록 동작 순서가 변경될 수 있다. 또한, 호스트에 의해서보다는 장치에 의해 접속이 개시될 수 있고 도 5에 도시된 방법에서 호스트가 수행하는 특정 동작들을 장치가 수행할 수 있다.
도 6A 및 6B는 동기화 세션에서 동기화되고 있는 특정 데이터 클래스에 대한 데이터 클래스 처리기뿐만 아니라 동기화 클라이언트 소프트웨어 컴포넌트와 같은, 호스트 상의 소프트웨어 컴포넌트들에 의해 수행되는 동작들을 일 실시예를 예시하는 순서도를 나타낸다. 도 6A, 6B, 7A, 및 7B의 논의는 이들 방법들에 대하여 설명되는 특정 실시예에서 도 4에 도시된 소프트웨어 아키텍처가 이용되는 것을 가정할 것이다. 대안적인 소프트웨어 아키텍처들이 이들 방법들과 함께 이용될 수도 있다는 것을 알 것이다. 도 6A의 동작 251는 장치 링크(107)와 같은 소프트웨어 컴포넌트들의 장치 링크 세트에 의해 장치 및 호스트가 접속되었는지 여부를 판정하는 것을 수반한다. 이 접속 판정은 동기화 클라이언트(111)에 의해 수행될 수 있다. 그 후 동작 253에서, 현 동기화 세션에 대한 동기화를 여전히 필요로 하는 어떤 추가의 데이터 클래스가 있는지가 판정된다. 만일 아무것도 남아 있지 않다면, 장치 및 호스트는 단절할 수 있다. 그 후 동작 255에서, 장치가 특정 데이터 클래스를 동기화시킬 수 있는지가 판정된다. 이것은 도 5의 동작 185와 관련하여 설명된 특정 데이터 클래스에 대한 지원의 자동 체킹과 유사하다. 만일 장치가 특정 데이터 클래스를 동기화시킬 수 없다면, 그 데이터 클래스에 대한 동기화는 취소되어, 동작 253으로 되돌아간다. 만일 장치가 데이터 클래스의 동기화를 지원하는 특정 데이터 소스를 포함하고 있지 않다면 데이터 클래스에 대한 동기화는 지원되지 않을 수 있다. 또한, 만일 데이터 소스가 데이터 클래스를 동기화시키기 위해 필요로 하는 리소스들을 획득할 수 없다면 그 데이터 클래스에 대한 동기화는 장치에 의해 거절될 수도 있다(예를 들면, 본 명세서에서 설명된 바와 같이, 데이터 클래스 내의 데이터를 이용하는 애플리케이션은 그 데이터 클래스를 동기화시키는 요청에 따르는 것을 거절할 수 있다). 만일 그것이 지원되지 않는다면, 동작 257에서, 동기화 클라이언트는 동기화되고 있는 현 데이터 클래스에 대한 데이터 소스의 버전 넘버를 획득한다. 이 버전 넘버는 호스트 상의 데이터 클래스 처리기의 버전 넘버와 비교되어 그것들이 일치하는지 또는 다르게 호환 가능한지가 판정된다. 이 버전 체킹은 다른 곳에서 설명되었고 또한 도 8A 및 8B에 예시되어 있다. 만일 그 버전들이 일치하지 않고 다르게 호환 가능하지 않다면, 동작 261에서 사용자 인터페이스가 사용자에게 제공되어, 동기화가 수행되게 하기 위해 하나 이상의 소프트웨어 컴포넌트들을 업데이트 또는 업그레이드할 필요 또는 바람직함을 나타낼 수 있다. 만일 버전들이 일치하거나 다르게 호환 가능하다면, 동작 263에서, 앵커들 및 동기화 타입이 장치로부터 획득된다. 이것은 적어도 하나의 실시예에서 도 5에 도시된 동작 193으로 귀착한다. 그 후 동작 265에서, 동기화 동작이 시작되고, 동작 267에서, 동기화 모드(예를 들면, 완전한, 변경만, 또는 리셋 중 하나)가 교섭된다. 만일 동작 267에서 리셋 모드가 교섭된다면, 이것은 동작 269에서 검출되고 그에 따라 장치에게 모든 레코드들을 클리어할 것을 명하는 동작 273으로 처리가 분기하게 된다. 만일 리셋 모드가 선택되지 않았다면, 처리는 동작 271에서 결정되는 빠른 동기화 모드 또는 동작 275로 귀착하는 완전한(full/complete) 동기화 모드 사이에 선택한다.
동작 277에서, 동기화가 빠른 동기화이면 호스트는 현 데이터 세트 내의 변경들을 장치에 요청한다. 동작 279에서 호스트에서 레코드들이 처리되고 하나 이상의 승인이 장치에 송신될 수 있다. 동작 279에서의 레코드들의 처리는 현 데이터 클래스에 대한 데이터 클래스 처리기에 의해 수행될 수 있고, 이 처리는 레코드들의 "변화(mutation)" 및 구조화된 데이터를 현 데이터 클래스에 대한 데이터 스토어에 저장하기 위해 적당한 포맷으로 변환하는 다른 변경들을 포함할 수 있다. 그 후, 일 실시예에서 동작 281에서, 호스트는 다음 장치 앵커를 저장하고, 동작 283에서 그것은 동기화 서비스 컴포넌트(141)와 같은 동기화 서비스들에게, 풀(pull)할 준비를 할 것을 요청하고, 이것은 호스트 측으로부터 동기화의 제2 부분으로서 장치에 변경들 또는 모든 레코드들을 송신하는 것을 수반한다. 동작 285에서 동기화의 형태가 판정된다. 만일 그것이 빠른 동기화이면, 동작 289가 뒤따른다. 일 실시예에서, 그것이 느린(완전한) 동기화(예를 들면, 리셋 동기화)이면, 동작 287이 뒤따른다. 하나 이상의 승인이 장치로부터 수신되고; 호스트는 또한 장치로부터 이들 승인과 함께 레코드에 대한 장치 ID와 그 레코드에 대한 대응하는 호스트 ID 사이의 관계를 나타내는 레코드 ID 맵을 수신한다. 이 ID 맵은 현 데이터 클래스에 대한 데이터 클래스 처리기에 의해 호스트에 저장된다. 그 후 동작 293에서, 호스트는 장치에 대해 그것이 변경들에 커밋할 수 있는지를 묻는 메시지를 송신한다. 만일 그렇지 않다면, 동기화가 취소되어, 장치 앵커들을 이전 상태로 놔두고, 이것은 다음 동기화 프로세스가 시작될 때 불완전한 동기화를 나타낸다. 만일 장치가 커밋(commitment)을 확인할 수 있다면, 그것은 동작 295에서 그렇게 할 것이고, 이것은 장치로부터 그것이 변경들 또는 모든 레코드들에 커밋할 수 있다는 메시지를 수신하는 것을 포함한다. 이 시점에서, 동작 297에서, 호스트는 장치로부터 그것이 수신한 ID 맵을 저장하고 다음 호스트 앵커를 저장함으로써 풀된 레코드들을 커밋한다. 일 실시예에서, ID 맵의 저장(레코딩 리매핑)은 커밋이 성공하고 호스트가 풀된 레코드들을 커밋하고 다음 호스트 앵커를 저장하는 경우에만 수행된다. 그 후 호스트는 도 6A의 동작 253으로 되돌아감으로써 다음 데이터 클래스로 진행한다. 대안 실시예들에서, 동작들 중 일부가 생략될 수 있고 또는 추가의 동작들이 수행될 수 있고 동작 순서가 도 6A 및 6B에 도시된 것에 관하여 변경될 수 있다는 것을 알 것이다.
도 7A 및 7B는 장치에서 동기화를 수행하기 위해 적어도 특정 실시예들에서 장치에 의해 수행될 수 있는 방법을 예시한다. 이 동기화는 도 4에 도시된 소프트웨어 아키텍처를 채용할 수 있고 또한 도 5의 장치 부분에 대하여 도 5에 도시된 방법을 따를 수 있다. 동작 301에서, 장치는 유선 접속 또는 무선 접속일 수 있는 접속을 대기한다. 일단 그것이 동작 303에서 접속되면, 그것은 호스트에게 그 장치가 동기화를 위한 준비가 되어 있음을 알린다. 이 동작 303은 도 4의 동기화 에이전트 소프트웨어 컴포넌트에 의해 수행될 수 있다. 그 후 동작 305에서, 장치는 특정 데이터 클래스 내의 데이터를 동기화시키는 요청을 대기하거나 단절한다. 만일 동작 307에서 그것이 특정 데이터 클래스에 대한 데이터 소스를 갖고 있지 않다는 것이 확인되면, 그 데이터 클래스에 대한 동기화는 수행되지 않을 것이고 동작 307은 다음 데이터 클래스를 위해 동작 305로 되돌아간다. 동작 307은 이 명세서의 다른 곳에서 설명된 바와 같이 장치가 특정 데이터 클래스에 대한 지원의 자동 체킹을 지원하는 하나의 방법을 나타낸다. 만일 데이터 클래스에 대한 데이터 소스가 발견되지 않으면, 동작 309에서 버전의 교섭이 일어난다. 이 버전의 교섭은 다른 곳에 설명된 바와 같이 그리고 도 8A 및 8B에 도시된 바와 같이 장치 상의 데이터 소스와 호스트 상의 데이터 클래스 처리기 사이에 일어날 수 있다. 동작 309에서 버전이 교섭된 후에, 장치는 호스트로부터 앵커들을 획득하고 그 앵커들에 기초하여, 본 명세서에 설명된 바와 같이, 동기화 모드(예를 들면, 완전한/느린, 빠른/변경만, 또는 리셋)를 판정한다. 동작 311 이후의 동작들은 모드들 중 하나를 선택하고 그에 따라서 데이터를 처리한다. 만일 리셋 모드가 선택되었다면, 동작 315에서 모든 레코드들이 클리어된 것으로 표시된다. 적어도 특정 실시예들에서, 데이터는 즉시 클리어되거나 즉시 삭제되지 않고 클리어된 것으로 표시된다는 것을 이해할 것이다. 만일 동작 317에서 빠른 동기화가 선택된 것으로 판정되면, 처리는 동작 321로 진행하여, 현 데이터 클래스에 대한 변경들이 장치로부터 호스트로 송신된다. 만일 느린 동기화가 선택되었다면, 처리는 동작 317로부터 동작 319로 진행하여, 모든 레코드들이 장치로부터 송신된다. 장치로부터 모든 레코드들을 송신하거나 변경들만을 송신하거나 레코드들을 클리어된 것으로 표시한 후에, 동작 323은 다음 장치 앵커를 장치에 저장하고 장치에서 히스토리를 클리어한다. 클리어 히스토리는, 적어도 하나의 실시예에서, 데이터 소스 및 장치 상의 애플리케이션에 의해 관리되는 변경 히스토리를 지칭한다. 사용자에 의해 애플리케이션(예를 들면, 콘택트 또는 캘린더 애플리케이션)에서 변경들이 행해질 때, 애플리케이션은 이들 변경들을 변경 히스토리(Change History)에 기록하고, 그 변경 히스토리는 동기화 에이전트의 데이터 소스가 "빠른 동기화(fast sync)"를 할 수 있다면 그 동기화 에이전트의 데이터 소스에 의해 참고(consult)될 수 있다. 그 데이터 소스는 변경 히스토리(마지막 동기화 이후의 변경들의 목록)를 획득하여 어떤 레코드들이 변경되었는지를 알고(그리고 "빠른 동기화"에서는, 모든 레코드들 대신에 변경된 레코드들만을 송신할 수 있고), 동기화 후에(또는 리셋 또는 느린 동기화를 하고 있을 때) 그것은 변경 히스토리(변경들의 목록)를 클리어하고, 따라서 그 후 애플리케이션은 다음 동기화를 위해 새로운 변경들의 목록의 작성을 시작할 수 있다. 애플리케이션과 데이터 소스 사이에 코디네이트하기 위해 사용되는 히스토리 커서(history cursor)가 있을 수 있고, 따라서 데이터 소스는 동기화 동안에 그것이 이용한 포인트까지만 히스토리를 클리어할 것이고, 애플리케이션은 그 후에 히스토리에 새로운 항목들을 추가할 수 있지만, 동기화 동안에 이용된 포인트 후의 히스토리 항목들은 동기화 후에 데이터 소스에 의해 잘못 클리어되지 않을 것이다. 변경 히스토리는 적어도 하나의 실시예에서 콘택트, 캘린더, 및 노트 애플리케이션들에 의해 유지될 수 있다. 처리는 동작 323으로부터 동작 325로 진행하여, 장치는 호스트로부터 데이터를 풀할 준비가 되어 있다는 메시지를 송신한다. 동작 327에서 동기화 모드가 결정된다. 만일 느린/완전한 동기화가 수행될 예정이면, 동작 329에서 모든 레코드들이 호스트로부터 수신된다. 한편, 빠른 동기화가 수행될 예정이면, 현 데이터 클래스에 대하여 호스트로부터의 변경들이 수신되고 장치는 데이터의 수신을 확인하는 하나 이상의 승인들을 회신한다. 또한 동작 329에서 수신된 레코드들에 대하여 장치로부터 호스트로 하나 이상의 승인들이 송신될 수도 있다. 그 후 동작 333에서, 장치는 추가된 레코드들에 대한 리매핑을 생성하고 그 레코드들에 대한 장치 식별자들을 호스트에 송신한다. 이 리매핑은 전형적으로 현 데이터 클래스에 대한 데이터 소스에 의해 수행되고 현 데이터 클래스에 대한 호스트 상의 데이터 클래스 처리기에 송신되고, 이에 따라 특정 레코드에 대한 호스트 ID들과 동일한 레코드에 대한 장치 ID들 사이의 매핑이 저장된다. 그 후 동작 335에서, 호스트 상의 동기화 클라이언트는 장치 상의 동기화 에이전트에게 장치가 변경들에 커밋할 수 있는지를 묻는다. 만일 그렇지 않다면, 데이터 소스는 현 동기화 세션으로부터의 변경들을 저장하지 않고 구조화된 데이터의 이전 버전으로의 롤백(rollback)을 초래하고, 동작 337 후에, 처리는 다음 데이터 클래스로 진행하고, 이는 일 실시예에서 처리가 동작 305로 되돌아가는 것을 의미한다. 만일 장치가 변경들에 커밋할 수 있다면, 동작 339가 수행되어 장치가 다음 호스트 앵커를 저장하고 변경들 또는 모든 레코드들을 현 데이터 클래스에 대한 그의 스토어에 저장함으로써 트랜잭션을 커밋하고 장치가 커밋했다는 메시지를 호스트에 송신한다.
이제 호스트와 특정 데이터 클래스에 대하여 장치 양쪽 모두의 구조화된 데이터를 동기화시킬지 및 어떻게 동기화시킬지를 결정하는 데 있어서 데이터 소스 및 데이터 호스트 처리기에 대한 버전 식별자들을 이용하는 실시예들과 관련해서 도 8A 및 8B를 참조한다. 동작 401에서와 같이, 장치 상의 동기화 에이전트 및 호스트 상의 동기화 클라이언트가 동기화를 시작한 후, 도 8A의 방법은 동기화될 필요가 있는 다른 데이터 클래스가 있는지를 판정하고 그 데이터 클래스를 식별한다. 다른 곳에서 지적한 바와 같이, 동기화 에이전트 또는 동기화 클라이언트는 다양한 데이터 클래스들 사이에 동기화의 순서를 선택할 책임이 있을 수 있다. 만일 동기화시키기 위한 데이터 클래스가 남아 있지 않다면, 동작 405에서 동기화 세션은 종료되고 장치 및 호스트는 동기화 목적으로 단절된다. 만일 동기화될 추가의 데이터 클래스들이 있다면, 처리는 동작 407로 진행하여, 선택된 데이터 클래스에 대한 호스트 상의 데이터 클래스 처리기를 초기화함으로써 다음 데이터 클래스는 동기화를 시작하고 현 데이터 클래스에 대한 그 데이터 클래스 처리기 버전 넘버를 장치에 송신한다. 대안적으로, 장치 상의 데이터 소스는 그의 버전 넘버를 호스트에 송신할 수 있다. 동작 409에서, 데이터 소스는 장치 상에서 자신을 초기화하고 장치 상의 그의 버전 넘버를 호스트 상의 데이터 클래스 처리기 버전 넘버와 비교한다. 그 후 동작 411에서, 그 버전 넘버들의 비교에 기초하여, 동기화시킬지 및 어떻게 동기화시킬지 및 사용자의 장치 및/또는 호스트 상의 하나 이상의 데이터 소스 소프트웨어 컴포넌트들 또는 데이터 클래스 처리기 컴포넌트들을 업데이터 또는 업그레이드하도록 사용자에게 경고가 제공될 필요가 있는지 여부가 결정된다. 도 8A의 방법에서는, 하나의 시스템 또는 다른 시스템이 장치 또는 호스트에 있는 그러나 양쪽 모두에 있지는 않은 버전 식별자들의 세트에 기초하여 동작 411에서 결정을 행한다고 가정한다. 도 8B는 양쪽 시스템들이 양쪽 버전 넘버들을 갖고 있고 비교를 수행하여 동일한 결정에 도달할 수 있는 대안 구현을 나타낸다. 만일 동작 411에서 동기화시키기로 결정이 되었다면, 동작 413에서 현 데이터 클래스에 대하여 동기화가 수행되고, 도 5, 6A, 6B, 7A, 및 7B는 현 데이터 클래스에 대하여 어떻게 동기화가 수행될 수 있는지의 예들을 제공한다. 동기화가 완료된 후에, 동작 415에서 현 데이터 클래스에 대한 앵커들을 저장하는 것과 같은 다른 동작들이 수행되고, 도 8A의 프로세스는 이전에 설명된 동작 403으로 되돌아간다. 도 8A의 대안 실시예들은 보다 적은 수의 동작들 또는 보다 많은 수의 동작들을 수반할 수 있고 도 8A에 도시된 것과는 다른 방식으로 그 동작들의 순서를 변경할 수 있다는 것을 알 것이다.
도 8B는 장치 상의 각 데이터 소스 소프트웨어 컴포넌트 및 호스트 상의 각 데이터 클래스 처리기 소프트웨어 컴포넌트에 대한 버전 식별자들을 이용하는 실시예를 나타낸다. 이 실시예에서는, 호스트와 장치 양쪽 모두가 양쪽 버전 넘버들을 수신하고 비교를 수행한 다음 현 데이터 클래스에 대하여 동기화시킬지 및 어떻게 동기화시킬지를 결정할 것이다. 동작 425에서 장치 상의 동기화 에이전트 및 호스트 상의 동기화 클라이언트가 동기화를 시작한 후에, 동작 427에서 동기화될 필요가 있는 임의의 데이터 클래스가 있는지 및 동기화를 위해 다음 데이터 클래스를 선택할지가 결정된다. 시스템 에이전트 및 시스템 클라이언트 중 하나 또는 양쪽 모두가 동작 427에서 이 기능을 수행할 수 있다. 만일 동기화시킬 더 이상의 데이터 클래스가 없다면, 동작 429에서, 동기화가 종료되고 장치 및 호스트는 소프트웨어 제어 하에서 단절될 수 있다. 만일 동기화시킬 다음 데이터 클래스가 있다면, 동작 431에서, 호스트 상의 현 데이터 클래스에 대한 데이터 클래스 처리기가 초기화되고 그것은 그의 버전 넘버가 장치에 송신되게 한다. 장치 상의 동일한 현 데이터 클래스에 대한 데이터 소스 소프트웨어 컴포넌트도 초기화되고 그의 버전 넘버가 호스트에 송신된다. 호스트 및 장치 각각은 2개의 버전 넘버들을 비교하고, 보다 높은 버전 넘버에 기초하여, 현 데이터 클래스에 대하여 동기화시킬지 및 어떻게 동기화시킬지를 결정한다. 만일 현 데이터 클래스에 대하여 동기화시키지 않기로 결정되면, 하나 또는 양쪽 시스템들이 사용자에게 그들의 장치 및 호스트 중 적어도 하나 상의 소프트웨어 컴포넌트 또는 몇 개의 소프트웨어 컴포넌트들을 업데이트 및/또는 업그레이드할 것을 제안하는 경고를 디스플레이하거나 다른 식으로 제공할 수 있다. 이 경우, 현 데이터 클래스에 대한 동기화는 일어나지 않을 것이고 처리는 동작 427로 되돌아간다. 한편, 보다 높은 버전 넘버 소프트웨어 컴포넌트가 그것이 다른 시스템 상의 보다 낮은 버전 넘버 소프트웨어 컴포넌트와 호환 가능하다고 결정하면, 동기화가 수행될 수 있다. 또한, 버전 넘버들이 일치하면, 동기화가 또한 수행될 수 있다. 동작 435에서, 동기화가 수행되고 그 후 동작 437에서, 예를 들면, 현 데이터 클래스에 대한 앵커들을 저장하고 다른 데이터를 처리하는 것에 의해 동기화가 완료되고 그 후 처리는 동작 427로 되돌아간다. 일부 실시예들에서, 보다 높은 버전을 갖는 시스템(호스트 또는 장치)은 오래된 버전을 갖는 시스템에 및 시스템으로부터 데이터를 동기화시키기 위해 필요한 임의의 액션을 취하기 위해 다른 시스템으로부터의 버전 정보를 이용할 수 있다. 예를 들면, 상기 "오래된 시스템(old system)"은 동일한 속성들에 대하여 상이한 이름을 이용할 수 있고, 보다 높은 버전을 갖는 시스템은 이것을 알고 그 이름을 앞뒤로 변환(translate)할 수 있다. 오래된 시스템은 일부 속성들을 다르게 나타닐 수 있고, 만일 그것들이 앞뒤로 변환될 수 있다면 보다 높은 버전을 갖는 시스템은 왔다갔다하는 그 변환을 할 수 있다.
본 명세서에 설명된 적어도 특정 실시예들의 다른 양태는 하나 이상의 서비스들에 대한 데이터 접속을 생성하고 유지하기 위한 소프트웨어 계층이 그들 서비스들 각각에 대하여 이용될 수 있고 유선 USB 인터페이스 또는 블루투스 무선 인터페이스 또는 WiFi 인터페이스 또는 무선 휴대폰 인터페이스와 같은 다른 무선 인터페이스들과 같은 물리적 인터페이스를 통해 구조화된 데이터, 파일 및 기타 데이터를 송신하는 전송 프로토콜들을 구현하는 하나 이상의 스트림 처리기들에 대한 인터페이스를 제공할 수 있다. 그 동일한 계층은 또한 암호화된 인증을 제공할 수 있고, 이 인증은 장치 링크 접속 계층을 통한 장치와 호스트 사이의 전후 송신의 전반에 걸쳐서 인증된 접속을 확립하는 양방향 인증일 수 있다. 도 4에 도시된 소프트웨어 아키텍처는 소프트웨어 인터페이스의 계층들이 그 소프트웨어 계층들 사이의 인터페이스에서 메시지들 또는 호출들을 통해 서로 인터페이스하는 소프트웨어 아키텍처를 예시하는 도 10에 도시된 방식으로 구현될 수 있는 장치 링크(107)를 나타낸다. 소프트웨어 아키텍처(450)는 백업 애플리케이션 또는 서비스 또는 구성 애플리케이션 또는 서비스 또는 본 명세서에 설명된 동기화 클라이언트 소프트웨어 컴포넌트 및 동기화 에이전트 소프트웨어 컴포넌트에 의해 제공되는 동기화 서비스들과 같은 하나 이상의 애플리케이션들 또는 서비스들에 대한 상위 계층뿐만 아니라 장치 링크 접속 계층(457), 스트림 처리기 계층(459), 및 스트림 라이브러리 계층(465)을 갖는 것으로 도시되어 있다. 동기화 클라이언트 및 동기화 에이전트 소프트웨어 컴포넌트들(454)은 도 4-8에 관련하여 설명된 동기화 기능들 및 동작들을 제공한다. 애플리케이션 소프트웨어 컴포넌트(452)는 동기화되지 않은 데이터를 포함하는 데이터를 백업하는 백업 애플리케이션, 또는 대안적으로 장치 링크 접속 계층(457)을 통해 안전하고 인증된 방식으로 접속을 행할 필요가 있는 구성 애플리케이션 또는 하나 이상의 다른 타입의 애플리케이션들일 수 있다. 스트림 처리기 계층(459)은 하나 이상의 스트림 처리기를 포함한다. 도 10에 도시된 특정 실시예에서는, USB 스트림 처리기(461) 및 블루투스 스트림 처리기(462) 및 TCP 스트림 처리기(463)가 있다. 이들 상이한 스트림 처리기들은 통신 프로토콜들을 구현하고 USB 또는 블루투스 또는 TCP(TCP/IP를 이용하는 WiFi 또는 다른 무선 인터페이스일 수 있음)에 이해 나타내어지는 상이한 인터페이스 상에서 스트림을 처리한다. 스트림 라이브러리 계층(465)은 스트림 처리기에 의해 나타내어지는 특정 프로토콜을 통해 데이터를 송신 및 수신하기 위해 스트림 처리기에 의해 호출된다. 예를 들면, USB 스트림 처리기는 USB 인터페이스를 통해 데이터를 송신 및 수신하기 위해 라이브러리 계층(465) 내의 하나 이상의 라이브러리들에 호출을 행할 수 있다. 유사하게, 블루투스 스트림 처리기는 블루투스 인터페이스를 통해 데이터를 송신 및 수신하기 위해 라이브러리 계층(465) 내의 하나 이상의 라이브러리들에 호출을 행할 수 있다. 장치 링크 접속 계층(457)은 장치를 호스트에 접속하기 위해 현재 이용되는 물리적 인터페이스에 기초하여 적절한 스트림 처리기에 호출을 행함으로써 스트림 처리기 계층(459) 내의 모든 스트림 처리기들에 통합된 인터페이스를 제공한다. 장치 링크 접속 계층(457)은 하위 계층들(sublayers)(456 및 458)에 의해 각각 나타내어지는 접속 기능 및 인증 및/또는 암호화 기능 양쪽 모두를 포함한다. 하위 계층(456)은 특정 물리적 인터페이스를 선택하고, 후술되는 바와 같이, 호스트를 장치에 및 장치를 호스트에 인증함으로써, 그리고 동시에 선택된 인터페이스에 대한 특정 스트림 처리기를 호출함으로써 상기 인터페이스를 통해 접속을 확립할 책임이 있고, 상기 선택된 특정 스트림 처리기는 상기 물리적 인터페이스를 통해 송신하기 위한 패킷들 또는 다른 데이터 구조들을 생성하기 위한 적절한 스트림 라이브러리들을 호출한다. 장치 링크 접속 계층(457)은 장치를 동기화 또는 백업 또는 구성하기 위한 사용자 입력에 응답할 수 있고, 또는 애플 컴퓨터사로부터의 Bonjour와 같은 기술을 통한 장치의 자동 발견에 응답할 수 있다. 예를 들면, 호스트에 연결되어 있는 도크에 장치를 도킹함으로써 Bonjour가 호스트에 장치가 도킹되었다는 것과 사용자가 그 장치를 동기화시키기를 원할 수 있다는 것을 인지하게 할 수 있다. 이것은 장치가 동기화되어야 하는지를 사용자에게 묻는 사용자 인터페이스의 디스플레이를 초래할 수도 있고, 또는 대안적으로, 장치를 도크에 배치한 결과로서 그 장치가 자동으로 동기화될 수도 있다. 이에 따라 동기화 에이전트 및 동기화 클리이언트가 본 명세서에 설명된 동기화 프로세스를 시작하고 또한 호스트와 장치 사이에 데이터를 송신하기 위해 장치 링크 접속 계층에 호출을 행하게 될 것이다. 동기화 중에 동기화 클라이언트 또는 동기화 에이전트에 의해 행해지는 호출들(또는 백업 애플리케이션(452)과 같은 애플리케이션에 의해 행해지는 호출들)의 결과로 장치 링크 접속 계층(457)은 스트림 처리기 계층(459)에 소프트웨어 기반 호출들을 행하거나 다른 타입의 메시지들을 송신하게 되고, 스트림 처리기 계층(459)은 스트림 라이브러리 계층(465) 내의 특정 라이브러리들을 호출한다. 도 10에 도시된 것과 같은 아키텍처에 의하면, 동기화 클라이언트 또는 동기화 에이전트 컴포넌트들과 같은 동기화 소프트웨어 컴포넌트들은 스트림 처리기들과 분리되어 있다. 따라서, 동기화 에이전트 소프트웨어 컴포넌트 및 동기화 클라이언트 소프트웨어 컴포넌트는 그러한 처리기들을 구현할 필요가 없다. 또한, 장치 접속 계층은 3개의 상이한 물리적 인터페이스들 및 다수의 상이한 스트림 처리기들에 걸쳐서 장치를 호스트에 인증하는 균일한 인터페이스를 제공하고; 이것은 동기화 소프트웨어 컴포넌트들뿐만 아니라 다른 애플리케이션 프로그램들을 인증 소프트웨어로부터 분리시킨다. 따라서, 동기화 클라이언트 또는 동기화 에이전트 또는 데이터 클래스에 대한 데이터 소스 또는 데이터 클래스에 대한 데이터 클래스 처리기의 개발자는 스트림 처리기들을 구현하기 위한 또는 인증 또는 암호화를 구현하기 위한 또는 장치와 호스트 사이에 접속을 생성하는 소프트웨어를 구현하기 위한 코드(예를 들면, 소프트웨어 프로그램)를 재작성할 필요가 없다. 또한, 인증 및 암호화 계층을 장치 접속 계층과 통합시킴으로써, 동기화 서비스들 또는 애플리케이션 서비스들(452)(예를 들면, 백업 애플리케이션, 구성 애플리케이션, 진단 애플리케이션 등)과 같은, 장치 접속 계층을 사용하는 모든 서비스들은, 적어도 특정 실시예들에서, 장치 링크 접속 계층(457)에 호출을 행하는 결과로서 자동 양방향 인증의 이익을 얻고, 이것은 가능한 물리적 인터페이스들 및 그들의 대응하는 스트림 처리기들 중 어느 하나에 인증 및/또는 암호화를 초래한다. 전송 및 프로토콜(스트림 처리기) 계층들 사이의 추상화(abstraction)의 계층에서 인증 및 암호화 계층(458)을 사용하는 것은 아키텍처를 단지 동기화보다 더 많은 것에 의해 사용될 수 있게 한다.
일 실시예에서, 도 10에 도시된 아키텍처는 다수의 유용한 특징들을 제공한다. 장치 링크(DeviceLink)(457)는 애플리케이션을 위해 자동으로 모든 인증 및 암호화를 처리할 수 있다(애플리케이션은 단지 보안 코드에 의해 사용되는 인증서들을 찾을 곳을 지시하기만 하면 될 수 있다). 또한, 장치 링크 접속은 장치와 호스트 양쪽 모두를 인증한다. 장치 링크(457)는 장치와 호스트 사이의 I/O를 행하는 모든 스트림 처리기들(전송들)에 대한 비동기식 거동을 제공할 수 있고, 따라서 그 전송은 단지 동기식으로 판독/기입해야 하고, 장치 링크(457)는 스레드 컨트롤(thread control)을 관리하여 그것이 애플리케이션에게 비동기식인 것처럼 보이게 하고, 따라서 애플리케이션은 판독 및 기입을 결코 차단하지 않는다 - 애플리케이션(예를 들면 호스트 상의 동기화 클라이언트 또는 장치 상의 동기화 에이전트)은 콜백(callbacks)을 통해 들어오는 데이터(incoming data)(및 접속/단절과 같은 다른 관련된 것들)에 대해 통지받는다. 장치 링크(457)는 스트림(전송) 계층의 상부에서 모든 인증을 하고, 따라서 플러그인될 수 있는 모든 전송 타입들은 특별한 어떤 것도 구현할 필요없이 인증 및 암호화를 얻는다. 일 실시예에서, 장치 링크(457)는 장치 링크의 프로토콜 내에 직접 구축된 파일 전송 설비들을 가질 수 있다. 이것은 백업, 및 다른 도구들을 위해 이용될 수 있다(그리고 장치 링크(457)에 기초한 미래의 애플리케이션들에서 이용될 수 있다). 장치 링크(457)의 프로토콜은 파일을 조각들로 효율적으로 전송하는 기능을 포함할 수 있고, 따라서 파일은 한번에 메모리에 완전히 판독되지 않아도 된다. 또한, 장치 링크(457)는 파일의 크기, 최종 수정 날짜와 같은, 유닉스 스타일 "stat" 정보(단독으로, 또는 파일과 함께)를 제공할 수 있고, 따라서 애플리케이션들은 파일의 상태에 대해 끊임없이 정보를 얻어내어 그것을 복사할 필요가 있는지 여부를 알 수 있다(이것은 증분 백업(incremental backups)에 유용할 수 있다). 일단 장치 링크(457)를 통해 접속되면, 애플리케이션은 프로토콜을 이용하여 파일에 관한 정보를 요청하고, 파일 자체를 요청할 수 있다. 파일은 거대한 파일을 메모리에 한꺼번에 다 판독하는 것을 피하기 위해 청크들(chunks)로 송신된다(양쪽 모두에서). 장치 링크(457)는 단지 파일을 얻어 그것을 송신하기 위해 파일이 요청되는 경우 어떤 기본 거동(default behavior)을 제공할 수 있다(따라서 그 요청에 대한 콜백에 응답하고 명시적 액션을 취할 필요가 없다). 그러나, 애플리케이션은 그것이 사용자 지정 처리(custum handling)를 행하기를 원한다면 응답할 수 있다(그리고 그것이 원한다면 그 자신의 코드를 사용할 수 있다). 유사하게, 파일의 조각들을 수신할 때, 기본 콜백은 단순히 파일을 디스크에 기입하는 것을 처리하지만, 일부 실시예에서 그것은 오버라이드(override)될 수 있다. 장치 링크(457)는 어느 파일들(또는 디렉터리들)의 "화이트 리스트(white list)"가 요청될 수 있는지, 어느 파일들 또는 디렉터리들이 기입될 수 있는지를 제공할 수 있고, 따라서 양측은 액세스를 제어할 수 있다. 장치 링크(457)와 관계없이 장치 상의 다른 파일 복사 솔루션들이 존재할 수도 있다; 예를 들면, 미디어 플레이어(예를 들면, iTunes)는 파일 복사 설비들을 제공할 수 있다; 그러나, 장치 링크(457)는 상당한 인프라(인증, 비동기식 인터페이스, 애플리케이션의 의한 사용의 편의를 위한 현존하는 장치 링크 프로토콜의 일부)를 제공하고, 단순 파일 복사 API보다 더 많은 기능을 갖는다(그것은 화이트 리스트들, 및 오버라이드될 수 있는 기본 처리를 갖고, 파일들을 청크(chunk)한다).
이제 장치 링크 접속 계층(457)의 사용을 수반하는 동작들의 시퀀스의 예를 제공한다. 일 실시예에서, 동기화 초기화 프로그램(synchronization initiator)(예를 들면, 장치 상의 동기화 에이전트(109) 또는 호스트 상의 동기화 클라이언트(111))이 론칭(launch)될 것이다(예를 들면, 사용자에 의해 또는 프로시스템에 의해, 예를 들면 Bonjour 발견 프로세스에 의해). 그 후 그 초기화 프로그램은 다른 측에 접속하려고 시도할 것이다. 초기화 프로그램은, 장치 링크 접속 계층(457)을 통해, 기본(비인증된) 접속을 확립할 것이고, 이것은 다른 애플리케이션의 론칭을 초래한다(예를 들면, 동기화 클라이언트(111)가 프로세스를 시작하면 기본 접속은 장치 상의 동기화 에이전트(109)의 론칭을 초래할 수 있고; 역으로, 동기화 에이전트(109)가 프로세스를 시작하면 기본 접속은 호스트 상의 동기화 클라이언트(109)의 론칭을 초래할 수 있다). 이 시점에, 장치 링크 접속 계층(457)은 본 명세서에서 더 설명된, 양방향 인증 프로세스를 수행하려고 시도하고; 만일 그 프로세스가 성공하면, 호스트와 장치 사이에 인증된 접속이 생성되었고 동기화 초기화 프로그램은 장치 링크 접속 계층(457)으로부터 접속이 이루어졌다는 콜백을 획득하고 (기본 접속에 의해 론칭된) 피접속자 애플리케이션(connectee application)은 들어오는 접속이 이루어졌다는 통지를 획득한다; 예를 들면, 인증이 성공하고 동기화 클라이언트(111)가 초기화 프로그램이었다면, 동기화 클라이언트(111)는 콜백을 수신할 것이고 동기화 에이전트(109)는 피접속자 애플리케이션이다. 만일 인증이 실패하면, 초기화 프로그램은 접속 실패 콜백을 수신하고 아무런 접속도 없고, 피접속자는 통상적으로 얼마간의 시간 간격 후에 종료(exit)할 것이다.
도 11은 장치 링크 접속 계층(457)의 동작들의 대안적인 예를 예시한다. 동작 501에서, 접속이 확립된다. 이것은 장치를 발견함으로써 수행될 수 있다. 예를 들면, 장치가 무선 접속 또는 유선 접속을 통해 호스트에 접속될 때, Bonjour가 장치를 발견하는 데에 사용될 수 있다. 그 후 장치 링크 접속 계층은 어느 인터페이스를 사용할지를 결정할 수 있고, 속도, 보안, 및 편의에 기초하여 그 인터페이스들 각각과 관련된 우선 순위가 있을 수 있다. 예를 들면, 적어도 특정 실시예들에서, USB가 최고 우선 순위 접속 인터페이스일 수 있고 그 다음으로 WiFi 그리고 마지막으로 블루투스가 뒤따를 수 있다. 인터페이스가 선택된 후에는, 동작 503에서 장치 링크 접속 계층은 호스트와 장치 사이에 인증을 수행한다. 적어도 특정 실시예들에서, 이 인증은 양방향이고, 이는 장치 및 호스트 각각이 초기화 시에 생성된 인증서들을 이용하여 인증 동작을 수행한다는 것을 의미한다. 도 12는 장치 및 호스트가 본 명세서에 설명된 방식으로 양쪽 모두의 초기화 후에 가질 수 있는 인증서들의 컬렉션의 예를 나타낸다. 특정 실시예들에서, 인증은 옵션일 수 있다. 인증이 수행된 후에는, 동작 505에서 장치 접속 계층 또는 다른 소프트웨어가 동기화를 시작하기 위해 동기화 클라이언트 및 동기화 에이전트의 론칭을 초래할 수 있다. 동기화가 일어나고 있는 동안에, 장치 링크 접속 계층은 접속을 유지하고, 그 접속은, 동작 507에서 구조화된 데이터의 동기화 프로세스 동안에, 인증된 접속으로서 유지될 수 있다. 대안 실시예들에서, 도 11의 방법은 백업 애플리케이션 또는 구성 애플리케이션(452)와 같은 비동기화 서비스들에서 이용될 수 있다. 이 경우, 접속은 유지될 수 있고, 그것은 그 서비스들 동안에 인증된 접속일 수 있다. 동기화 또는 다른 서비스들이 완료된 후에, 장치 링크 접속 계층은, 장치가 여전히 호스트의 도크 내에 있을 수 있다 할지라도, 소프트웨어로 장치를 호스트로부터 단절할 수 있다. 즉, 동기화 프로세스 또는 장치 링크 접속 계층(457)을 호출한 다른 프로세스의 종료의 결과로 소프트웨어 접속은 해체된다.
도 12는 장치와 호스트 사이에 양방향 인증을 제공하는 인증 시스템의 초기화를 수행한 후에 장치와 호스트 양쪽 모두에 유지된 데이터 구조들의 예를 나타낸다. 인증은 공개 키/개인 키 크립토그래피로 암호화되고, 그에 의해 다른 호스트들이 동기화되고 있는 장치 또는 호스트 상의 데이터에 액세스할 수 없도록 충분한 보안을 유지하면서 무선 인터페이스를 통해 장치가 호스트에 동기화될 수 있게 하는 높은 레벨의 보안을 제공한다. 또한, 이 양방향 인증은 장치와 호스트 사이의 파일 전송을 위해 그리고 인증된 접속을 이용하는 다른 서비스들(예를 들면, 진단 서비스)을 위해 이용될 수 있다. 적절한 보안을 제공하기 위해, 장치는 처음에는 유선 인터페이스에 의해 접속될 필요가 있을 수 있고 사용자에게는, 장치의 디스플레이에 의해, 큰 수 또는 다른 문자열과 같은 값을 호스트에 입력하도록 요청될 수 있다. 대안적으로, 그 값은 호스트의 디스플레이 상에 디스플레이될 수 있고 사용자는 그 값 또는 문자열을 장치에 입력할 필요가 있을 수 있다. 이 동작에 이어서, 장치는 개인 및 공개 키 쌍을 생성하고 그의 개인 키를 저장할 수 있다. 호스트는 유사한 동작을 수행하여 호스트의 개인 키 및 호스트의 대응하는 공개 키를 생성할 수 있다. 호스트는 또한 자체 서명된 인증 기관에 대한 인증서를 생성할 수 있고 또한 그 인증 기관에 대한 공개 키/개인 키 쌍을 생성할 수 있다. 장치 및 호스트 각각은 각 시스템에 대한 고유 식별자일 수 있는 식별자를 포함할 수 있고, 이들 식별자들 각각은 다른 측에 송신될 수 있고(장치 ID는 호스트에 송신되고 호스트 ID는 장치에 송신됨) 이 식별자는 특정 시스템의 저장된 개인 키에 매핑된다. 도 12에 도시된 예에서, 그의 호스트에 대한 장치(529)의 저장된 개인 키는 호스트에 의해 제공되는 호스트의 ID에 매핑된다. 유사하게, 그 장치에 대한 장치의 ID(535)는 호스트(531)의 개인 키에 매핑된다. 호스트는 인증서를 생성하고 호스트의 공개 키를 이용하는 인증 기관에 의해, 옵션으로 추가 정보에 의해 그것에 서명한다. 호스트는 또한 장치 인증서를 생성하고 인증 기관 인증서에 의해 그것에 서명할 수 있고 그 후 이들 인증서들(537, 541, 및 545)을 장치에 송신할 수 있다. 이들 인증서들은 안전 소켓 계층 핸드세이크(secure socket layer handshake)와 같은 알려진 기법들에서 전송 계층 보안을 제공하기 위해 및 장치와 호스트 사이에 양방향 인증을 제공하기 위해 이용될 수 있다. 이 인증은 전체 접속 동안에 유지될 수 있고, 그것은 이 인증된 접속을 이용하는 동기화 동작 및 기타 동작들을 포함할 수 있다. 일 실시예에서는, 도 12에 도시된 바와 같이, 장치는 호스트 식별자와 다음의 것: 그 호스트에 대하여 사용되는 장치 개인 키, 그 호스트에 대하여 사용되는 장치 인증서, 호스트 인증서, 호스트 인증 기관 인증서(자체 서명된 인증에서 이용됨) 사이에 매핑을 갖는다. 유사하게, 호스트는 장치 ID로부터 다음의 것: 그 장치에 대하여 이용되는 호스트 개인 키, 그 장치에 대하여 이용되는 호스트 인증서, 장치 인증서, 그 장치와 함께 사용되는 호스트 인증 기관 인증서로의 매핑을 갖는다. 장치는 그와 통신하는 임의의 호스트에 대한 개별 장치 개인 키를 갖고(개인 키는 그 호스트와 함께 사용되는 장치 인증서에 매핑하고, 장치는 호스트마다 하나의 장치 인증서를 갖는다), 호스트 측에도 유사한 배열이 있다. 이는 장치마다 개별 개인 키 호스트 인증서가 있기 때문이다.
도 13A 및 13B는 본 명세서에 설명된 적어도 특정 실시예들의 양태에 관한 것이다. 이 양태는 장치 및 호스트 중 하나 또는 양쪽 모두가, 비동기화 프로세스 및 동기화 프로세스 양쪽 모두가 하나 이상의 처리 시스템들에 의해 실행되고 있다는 점에서 동시에 일어나고 있는 그 양쪽 프로세스들을 갖는 능력을 수반한다. 프로세스들 또는 스레드들의 양쪽 세트들은 상이한 주소 공간들에 있을 수 있다. 이에 따라 장치의 사용자는 장치가 동기화되고 있는 동안에 장치를 조작할 수 있고, 유사하게 호스트의 사용자는 호스트가 장치와 동기화하고 있는 동안에 호스트를 조작할 수 있다. 예를 들면, 장치 및 호스트 양쪽 모두가 이러한 능력들을 갖는다면, 장치 상의 사용자가 그 사용자에 대한 이벤트들 및 어쩌면 해야할 일 항목들을 나타내는 사용자의 캘린더를 디스플레이하는 캘린더 프로그램을 보고 있고 동안에 그와 동시에 동기화 장치가 장치 상의 캘린더 데이터를 호스트 상의 캘린더 데이터와 동기화시키고 있을 수 있다. 이 동기화는 도 4에 도시된 소프트웨어 아키텍처를 이용하여 구현될 수 있고 또한 도 5-7B에 도시된 방법들을 이용할 수 있다. 유사하게, 사용자가 호스트 상의 애플리케이션 프로그램을 이용하여 캘린더 데이터 또는 다른 애플리케이션들에 대한 다른 구조화된 데이터를 액세스 및 편집하는 동안에 그와 동시에 호스트는 구조화된 데이터의 하나 이상의 스토어들 내의 구조화된 데이터에 대한 동기화 동작들을 수행하고 있을 수 있다. 동기화 프로세스는 도 4에 도시된 아키텍처를 이용하여 그리고 위에서 설명된, 도 5-7B에 도시된 방법들을 이용하여 호스트 상에서 구현될 수 있다.
비동기화 스레드들 또는 프로세스들은 동기화 태스크들이 아닌 사용자 레벨 또는 비사용자 레벨 스레드들 또는 프로세스들일 수 있다. 동기화 스레드들 또는 프로세스들은 동기화 에이전트(109) 또는 동기화 클라이언트(111) 또는 다른 동기화 소프트웨어 컴포넌트들과 같은 하나 이상의 동기화 소프트웨어 컴포넌트들에 의해 수행되는 동기화 태스크들이다. 비동기화 스레드들 또는 프로세스들 및 동기화 스레드들 또는 프로세스들의 동시 실행은 장치와 호스트 중 하나 또는 양쪽 모두에서 일어날 수 있다. 도 13A의 동작 575는 비동기화 스레드들 또는 프로세스들이 장치와 호스트 양쪽 모두에서 수행될 수 있는 것을 보여준다. 동작 577에서, 이 실시예에서, 비동기화 스레드들 또는 프로세스들이 장치와 호스트 양쪽 모두에서 계속되는 동안에 장치와 호스트 양쪽 모두에서 동기화 소프트웨어의 실행이 시작된다. 동작 579에서, 동기화 에이전트(109)와 같은 동기화 소프트웨어 컴포넌트가 동기화될 데이터 클래스에 대한 스토어에 대한 잠금을 획득하려고 시도한다. 일 실시예에서 동기화 에이전트(109)는, 예를 들면, 동기화될 북마크들을 포함하는 파일을 잠그기 위해 유닉스 FLOCK 콜(call)을 호출함으로써 이를 행할 수 있다. 또한 일 실시예에서, 만일 동기화 소프트웨어 컴포넌트가 SQlite 데이터베이스를 액세스한다면, 그것은 잠금을 획득할 필요가 없을 수 있다. 왜냐하면 그 데이터베이스는 그 자체로 이 기능을 처리할 수 있기 때문이다. 일 실시예에서, 콘택트들, 캘린더들 및 노트들은 보다 낮은 레벨에서 그들 자신의 잠금을 처리하는 데이터베이스들에 저장될 수 있다. 또한 일 실시예에서, 동기화 클라이언트는 어떤 잠금도 획득하려고 시도하지 않을 수 있다. 만일 동작 580에서 결정되는 바와 같이, 잠금이 획득되면, 동작 591에서 동기화가 시작된다. 한편, 만일 잠금이 획득되지 않으면, 동기화 컴포넌트는, 동작 581에서, 그 동기화 컴포넌트가 잠금을 요청하는 데이터 클래스를 이용하는 애플리케이션에 통지할 수 있고 동기화 컴포넌트는 응답을 기다린다. 애플리케이션은 잠금이 획득되는 것을 나타내는 응답을 수신할 수 있고, 그 경우 처리는 동작 591로 진행하고; 그렇지 않고, 통지 후에 잠금이 획득되지 않으면, 처리는 동작 583으로 진행하여, 현 데이터 클래스의 동기화가 취소되고 추가의 데이터 클래스들이 동기화될 필요가 있다면 동작 579가 뒤따른다(그렇지 않다면 프로세스는 종료한다). 만일, 동기화가 수행되고 있는 동안에, 사용자가 동기화되고 있는 데이터 클래스에 대한 스토어를 변경하려고 시도한다면, 시스템(예를 들면, 장치 또는 호스트)은, 동작 593에서, 동기화가 완료될 때까지 시스템은 변경들을 수락할 수 없다는 경고를 사용자에게 제공할 수 있다. 현 데이터 클래스에 대한 동기화가 종료된 후에, 동작 595에서, 잠금이 해제되고, 여전히 동기화될 것이 남아 있다면, 처리는 다음 데이터 클래스로 진행하고, 또는 동기화가 완료된다.
대안 실시예들에서는, 호스트와 장치 중 하나만이 비동기화 프로세스들 및 동기화 프로세스들의 동시 동작을 지원할 수 있다는 것을 알 것이다.
본 명세서에 설명된 적어도 특정 실시예들의 다른 양태는 구조화된 데이터를 동기화시키고 있을 때 장치와 호스트 중 하나 또는 양쪽 모두에서 북마크들 또는 즐겨찾기들을 동기화시키는 방법들 및 시스템들에 관한 것이다. 장치 및 호스트 각각에 있는 다양한 웹 브라우저들의 북마크들은 함께 수집되어 중간 또는 정규 토폴로지에 저장될 수 있고 이 중간 또는 정규 토폴로지는 하나는 장치에 있고 하나는 호스트에 있는 적어도 2개의 웹 브라우저들에서 북마크들 또는 북마크들의 컬렉션들을 동기화시키는 데 이용된다. 특정 실시예들에서는, 호스트 상에서 동작하고 있는 또는 사용자에 의해 사용되는 다수의 웹 브라우저들 및 장치 상에서 사용되는 하나의 웹 브라우저가 있을 수 있다. 중간 토폴로지는 상이한 웹 브라우저들로부터 다양한 북마크들을 수십하고, 그것들을 정규 토폴로지 내로 집합시키고, 그 후 그 토폴로지를 이용하여 그러한 시스템 상의 웹 브라우저들 각각에 대한 북마크 구조들을 동기화시킨다. 또한, 동기화는 각 웹 브라우저 내의 하나 이상의 북마크들 각각에 대하여 하나의 포맷(예를 들면 URL 데이터 타입)으로부터 다른 포맷(예를 들면, 그 URL을 나타내는 문자열)으로 변환하는 것을 포함할 수도 있다.
상이한 브라우저들 상의 북마크들의 동기화는 변환하거나 또는 북마크들의 계층 구조의 포맷의 차이를 다른 방법으로 다루는 메커니즘을 필요로 할 수 있다. 예를 들면, 상이한 웹 브라우저들은 북마크들의 컬렉션의 계층 구조를 유지하기 위해 상이한 데이터 구조들을 갖는다. 이들 데이터 구조들 각각은 토폴로지로 간주될 수 있다. 도 14A, 14B, 14C, 및 14D는 그 상이한 토폴로지들의 예들을 제공한다. 도 14A에 도시된 예는 쿠퍼티노의 애플 컴퓨터사로부터의 Safari로서 알려진 웹 브라우저의 토폴로지일 수 있고, 한편 도 14B에 도시된 토폴로지는 마이크로소프트사로부터의 인터넷 익스플로러의 토폴로지일 수 있고, 도 14에 도시된 토폴로지는 Firefox의 토폴로지일 수 있고, 도 14D에 도시된 토폴로지는 무선 휴대폰 기능들 또는 인터넷에 액세스하고 인터넷을 브라우징하는 데 이용될 수 있는 WiFi와 같은 다른 무선 인터페이스들을 갖는 핸드헬드 컴퓨터와 같은 장치 상의 웹 브라우저의 토폴로지일 수 있다. 도 14A, 14B, 14C, 및 14D에 도시된 토폴로지들은 웹 브라우저들 사이의 동기화 이전의 토폴로지를 나타낸다. 토폴로지(625)는 북마크 메뉴(bookmarks menu)(627) 및 북마크 바(bookmarks bar)(629)를 포함하고, 뿐만 아니라 폴더들(632 및 633)을 포함하는 계층 구조로 배열될 수 있는 하나 이상의 폴더들(631)을 포함한다. 도 4B의 토폴로지(637)는 북마크 메뉴를 포함하지 않지만 북마크 바(638)는 포함한다. 토폴로지(637)와 토폴로지(625) 사이의 다른 차이는 북마크들(639 및 640)과 같은, 토폴로지의 최상위 레벨의 북마크들의 존재이다. 토폴로지(625)에서는, 최상위 레벨의 북마크들에 대한 지원이 없다; 즉, 북마크들은 폴더 내에 또는 북마크 메뉴에 또는 북마크 바에 있어야 한다. 대조적으로, 637의 토폴로지는 북마크들(639 및 640)과 같은, 최상위 레벨의 북마크들을 지원한다. 토폴로지(637)는 또한 폴더들(641) 및 폴더들(642 및 643)과 같은, 계층 구조로 배열될 수 있는 하나 이상의 폴더들의 컬렉션을 포함한다. 토폴로지(651)는, 북마크들(639 및 654)과 같은, 최상위 레벨의 북마크들이 토폴로지(651)에 포함될 수 있지만 그것들은 토폴로지(625)에서는 포함되거나 허용되지 않는다는 점을 제외하고는, 토콜로지(625)와 유사하다. 토폴로지(651)는 북마크 메뉴(652), 북마크 바(653), 북마크들(639 및 654)과 같은 최상위 레벨의 북마크들, 및 폴더들(656 및 657 및 658)과 같은, 북마크들을 포함하는 폴더들의 컬렉션을 포함한다.
도 15A, 15B, 15C, 및 15D는 상이한 웹 브라우저들에 대한 북마크들의 컬렉션들 사이의 동기화 후에 북마크 토폴로지들이 어떻게 나타나는지를 보여준다. 각 참조 번호에 추가된 지정(designation) "A"는 그것이 동기화 후인 것의 제외하고는 동일한 엘리먼트임을 나타낸다. 예를 들면, 북마크 메뉴(627A)는 그것이 동기화 동작의 결과로서 추가의 북마크들을 포함할 수 있다는 것을 제외하고는 북마크 메뉴(627)와 동일하다. 동기화는 북마크들(639 및 640 및 654)과 같은, 다른 토폴로지들로부터의 최상위 레벨 북마크들을 포함할 수 있는 최상위 레벨 폴더(675)의 추가를 초래하였다는 것을 알 수 있다. 따라서, 동기화 프로세스는 다른 웹 브라우저들 내의 최상위 레벨 북마크들에 대한 북마크들을 수용하기 위해 구조(625A)에 다른 폴더를 추가하였다. 유사하게, 토폴로지(637A)는 이제, 동기화 후에, 다른 2개의 웹 브라우저들로부터의 북마크 메뉴(627 및 652)에서 발견되는 북마크들을 통합하는 북마크 메뉴(627)를 포함시켰다. 도 15D에 도시된 북마크들은 다른 웹 브라우저들로부터의 최상위 레벨의 북마크들을 수용하기 위해 최상위 레벨 폴더들(677)을 포함하도록 변경되었다. 따라서, 도 15A, 15B, 15C, 및 15D에 도시된 예에서, 다수의 웹 브라우저들 사이의 동기화 프로세스는 상이한 웹 브라우저들 사이에 북마크들을 동기화시키기 위해 상이한 토폴로지들에 북마크들 및 폴더들 및 다른 데이터 구조들을 추가하는 결과로 되었다. 이 동기화는 상이한 웹 브라우저들의 북마크 구조들에 대한 토폴로지들이 상이하더라도 일어날 수 있었다. 일어난 동기화는 하나의 웹 브라우저 내의 북마크가 다른 웹 브라우저에 존재하지 않는 경우 그 북마크를 삭제하지 않는 동기화의 형태이다. 이 동기화는 정규 토폴로지와 같은 중간 토폴로지를 통해 구현될 수 있다. 그러한 토폴로지의 예는 호스트의 웹 브라우저 북마크 구조 및 장치의 웹 브라우저 북마크 구조에 대한 토폴로지와 함께 도 16A에 도시되어 있다. 정규 토폴로지와, 다른 2개의 토폴로지들(637A 및 665A) 각각과의 사이에 매핑 관계도 도시되어 있다. 매핑 관계는 각 끝에 화살이 있는 라인에 의해 도시되어 있다. 예를 들면, 북마크 바(638A) 내의 북마크들은 정규 토폴로지 내의 북마크 바(692) 내의 북마크들에 매핑된다. 유사하게, 최상위 레벨 북마크들(639 및 640)은 정규 토폴로지 내의 최상위 레벨 폴더(693)에 매핑된다. 유사하게, 그 폴더들(641A) 내의 폴더들 및 북마크들은 정규 토폴로지(690) 내의 폴더들(694)에 매핑된다. 정규 토폴로지의 북마크 메뉴(691) 내의 북마크들은 다른 북마크들(669A)에 매핑된다. 이러한 매핑 관계는 동기화 동안에 장치 또는 호스트 상의 하나의 북마크들의 세트로부터 장치 또는 호스트 상의 다른 웹 브라우저 내의 다른 북마크들의 세트로의 변환을 허용한다.
도 16B 및 16C는 북마크들을 동기화시키기 위한 2개의 방법들을 예시한다. 도 16B의 동작 701은 호스트 상의 적어도 하나의 웹 브라우저로부터의 적어도 하나의 북마크를 북마크들에 대한 장치 토폴로지 또는 중간 토폴로지 중 적어도 하나에 매핑한다. 예를 들면, 최상위 레벨 북마크들(639 및 640)은 중간 토폴로지(690)에 매핑되거나 또는 장치 토폴로지(665)에 직접 매핑될 수 있다. 동작 703에서, 장치 상의 적어도 하나의 웹 브라우저로부터의 적어도 하나의 북마크가 북마크들에 대한 호스트의 토폴로지 또는 중간 토폴로지 중 적어도 하나에 매핑된다. 이 매핑의 예는 토폴로지(66SA) 내의 최상위 레벨 폴더에 추가된 북마크들에 일어난 매핑일 수 있고, 그 북마크들은 토폴리지(637A) 내의 최상위 레벨 북마크들에 매핑된다. 동작 701 및 703에서, 매핑은 동작 705에서 동기화가 수행될 수 있도록 상이한 토폴로지들 사이의 관련을 나타내는 테이블 또는 다른 데이터 구조에 의해 구현될 수 있다. 그 동작에서, 북마크들은 장치 상에서 호스트 상의 북마크들과 동기화된다. 동작 705에서 지적한 바와 같이, 장치의 북마크 토폴로지는 호스트의 토폴로지와 상이할 수 있고, 도 16A에 도시되어 있는 대로 중간 토폴로지와 상이할 수 있다.
도 16C의 방법은 중간 토폴로지가 이용되고 웹 브라우저들 각각과 중간 토폴로지 사이에 매핑이 있다는 것을 가정한다. 적어도 특정 실시예들에서, 호스트 또는 장치는 중간 토폴로지 내의 모든 북마크들의 완전한 데이터 구조를 유지할 수 있고 그것은 그 후 각 웹 브라우저의 북마크 구조를 업데이트하는 데 이용될 수 있다는 것을 이해할 것이다. 동작 715에서, 호스트 상의 제1 웹 브라우저에 대한 제1 토폴로지 내의 제1 북마크들은 호스트 또는 장치 상에 유지될 수 있는 중간 토폴로지에 매핑된다. 동작 717에서, 호스트 상의 제2 웹 브라우저에 대한 제2 토폴로지 내의 제2 북마크들도 중간 토폴로지에 매핑된다. 그 후 동작 719에서, 호스트 상의 제1 북마크들 및 제2 북마크들은 동기화 기간 동안에 호스트에 연결되는 장치 상의 제3 북마크들과 동기화된다. 이 특정 방법에서는, 호스트 상의 2개의 상이한 토폴로지들을 갖는 2개의 상이한 웹 브라우저들이 장치 상의 웹 브라우저와 동기화된다. 적어도 특정 실시예들에서, 그의 웹 브라우저에 대한 장치의 토폴로지는 제1 토폴로지와 상이하고 제2 토롤로지 및 중간 토폴로지와 상이할 수 있다.
실시예에서, 시스템은 이 동기화를 사용자 상호 작용 없이 그리고 사용자로부터 어떤 입력도 요청하지 않고 자동으로 수행할 수 있다. 이것은 그러한 시스템을 구성하기 위해 요구되는 복잡성을 감소시킬 수 있지만, 사용자가 2개 이상의 웹 브라우저들 사이에서 북마크들의 동기화가 어떻게 수행되어야할지를 나타내는 선호 설정(preference settings) 또는 다른 설정을 설정할 수 있게 하는 하나 이상의 사용자 인터페이스들을 제공하는 것이 바람직할 수 있다. 도 16D에 도시된 사용자 인터페이스(725)는 사용자가 3개의 확인란(check box)(727, 729, 및 731) 중 하나를 선택함으로써 2개의 가능한 옵션들로부터 하나의 옵션을 선택할 수 있게 한다. 확인란(727)에 나타내어진 확인 표시(check mark)는 사용자가 장치의 북마크들을 호스트의 북마크들에 및 호스트의 북마크들을 장치의 북마크들에 동기화시키는 제1 옵션을 선택하였음을 나타내고; 이것은 양방향 동기화로 간주된다. 다른 2개의 옵션들은 한쪽 방향만의 동기화들이다. 특히, 사용자가 확인란(729)을 선택하였다면, 동기화는 장치의 북마크들로부터 호스트의 북마크들로 동기화시키기 위해서만 수행될 것이다. 만일 사용자가 확인란(731)을 선택하였다면, 동기화는 호스트의 북마크들로부터 장치의 북마크들로만 수행될 것이다.
도 16E는 사용자가 동기화를 위한 모든 웹 브라우저들을 또는 웹 브라우저들 중 선택된 것들만을 선택할 수 있게 하는 다른 사용자 인터페이스를 예시한다. 만일 사용자가 확인란(737)을 선택한다면, 동기화는 장치와 호스트 양쪽 모두의 모든 웹 브라우저들에 대해 수행된다. 인터페이스(735)는 사용자가 확인란(739)을 선택함으로써 제2 옵션을 선택하였다는 것을 나타낸다. 이 경우, 시스템은 북마크들을 호스트 상의 선택된 웹 브라우저들의 북마크들과 동기화시킬 것이고, 사용자는 버튼들(742 및 743)은 선택했지만 버튼들(741 및 744)은 선택하지 않았다. 따라서, 호스트 상에 Firefox에 의해 유지된 북마크들 및 Safari에 의해 유지된 북마크들은 사용자 인터페이스(735)에서의 이들 선택의 결과로서 장치 상의 북마크들과 동기화될 것이다. 버튼(744)의 선택은 사용자가 호스트 상에서 동기화될 웹 브라우저들의 세트에 포함시킬 목록으로부터의 선택된 애플리케이션들을 고를 수 있게 하기 위해 호스트 상의 애플리케이션들을 디스플레이하는 애플리케이션 브라우저 창이 나타나게 할 것이다.
도 16F에 도시된 사용자 인터페이스(750)는 사용자가 선택된 폴더들로 동기화를 제한할 수 있게 한다. 확인란(751)에 확인 표시가 없는 것에 의해 알 수 있는 바와 같이 이 옵션은 선택되지 않았다. 만일 사용자가 확인란(751)을 선택한다면, 사용자가 시스템 상의 다양한 북마크들 및 북마크 폴더들, 및 북마크 바들의 목록들을 포함하는 창들을 통해 브라우징할 수 있게 하는 하나 이상의 브라우저 창들이 나타나게 될 수 있다. 이들 사용자 인터페이스들 각각은 개별적으로 또는 조합으로 이용되어, 사용자가 본 명세서에 설명된 적어도 특정 실시예들에서 북마크들이 어떻게 동기화되는지를 제어할 수 있게 할 수 있다는 것을 알 것이다.
도 17은 본 명세서에 설명된 적어도 특정 실시예들의 다른 양태에 관한 것이다. 이 양태는 이메일 계정 또는 인스턴트 메시징 계정과 같은 하나 이상의 전자 메시지 시스템 계정들에 대한 설정 정보의 동기화에 관한 것이다. 이 동기화는 양쪽 방향으로보다는 호스트로부터 장치로의 한쪽 방향으로 수행될 수 있다. 또한, 적어도 특정 실시예들에서, 호스트 상의 계정 설정 정보에 행해진 변경들은, 확립되어 장치 상에 현존하는 이전에 설정된 계정에 반영되지 않을 수 있다.
도 17의 순서도는 계정 정보가 어떻게 동기화될 수 있는지의 하나의 예를 제공한다. 도 18은 이메일 계정 설정 정보에 관하여 장치의 메모리 구조 및 호스트의 메모리 구조를 나타낸다. 도 17의 방법은 동작 781에서 시작할 수 있고 여기서는 데이터 처리 시스템이 이메일 계정에 대한(또는 다른 타입의 전자 메시지 시스템에 대한) 설정 정보를 수신한다. 이 정보는 장치 상에서 수신되고 계정 "A"에 대한 것일 수 있다. 도 18에서, 설정 정보(791)는 그러한 설정 정보의 예일 수 있다. 동작 783에서, 호스트는 계정 "B"일 수 있고 도 18에서 설정 정보(795)로서 나타내어진 이메일 계정을 설정하는 정보를 수신할 수 있다. 동작 785에서 장치와 호스트 사이에 접속을 확립한 후에 동기화가 일어날 수 있다. 동기화 동작 787 동안에, 호스트 상에 확립된 계정 B는 장치 상에서 새로운 계정으로서 동기화될 수 있다. 그 동기화는 적어도 하나의 실시예에서 한쪽 방향 동기화일 수 있다, 이것은 도 18에 도시된 화살표(790)에 의해 나타내어져 있다. 이 경우, 장치 상에 설정된 이메일 계정은 호스트에 역으로 동기화되지 않는다. 이 실시예에서, 장치는 결국 이메일 계정들의 슈퍼세트를 갖게 된다. 이것은 예를 들면 사용자가 호스트보다 장치 상에서 더 큰 프라이버시를 선호하는 경우에 바람직할 수 있다.
대안 실시예들에서, 동기화의 방향은 호스트로부터 장치로가 아니라 장치로부터 호스트로 되도록 반전될 수 있다는 것을 알 것이다. 이 경우, 장치 상에 설정된 어떠한 계정이라도 호스트 상에서 동기화 및 확립될 것이지만, 그 반대로는 안 된다.
도 19, 20, 및 21은 본 명세서에 설명된 적어도 특정 실시예들의 다른 양태에 관한 것이다. 이 양태는 노트들이 어떻게 동기화될 수 있는지에 관한 것이다. 적어도 특정 실시예들에서, 전형적으로 텍스트 자유 형식 문서인 노트는 이미지 데이터, 오디오 데이터, 영화 데이터, 및 심지어 해야할 일 항목들(To Do Items)과 같은 다른 정보를 포함할 수 있다. 해야할 일 항목들은 노트 내에 임베드(embed)될 수 있고 노트를 생성하는 것의 일부로서 생성될 수 있다. 노트가 동기화될 때, 적어도 특정 실시예들에서 해야할 일 항목도 별도의 해야할 일 데이터베이스에서 동기화된다. 임베드된 해야할 일 항목들을 갖는 노트들과 관련한 추가의 정보는 2006년 8월 4일에 출원된 동시 계류중인 미국 특허 출원 11/499,009호, "Methods and Systems for Managing To Do Items or Notes or Electronic Messages"에서 찾아볼 수 있고; 이 출원은 참고로 본 명세서에 통합된다.
도 19는 호스트 또는 장치 상에 하나 이상의 임베드된 해야할 일들을 포함하는 노트를 동기화시키는 하나의 예시적인 방법을 나타낸다. 노트 자체는 하나의 데이터 클래스로서 취급될 수 있고, 한편 해야할 일 항목은, 적어도 특정 실시예들에서, 다른 데이터 클래스로서 취급될 것이다. 만일 도 4의 아키텍처가 이용된다면, 노트의 일부분은 노트 소스에 대한 데이터 클래스 처리기 및 데이터 소스에 대하여 동기화되고 노트의 다른 부분은 해야할 일 데이터 클래스에 대한 다른 데이터 클래스 처리기 및 다른 데이터 스토어와 동기화된다. 대안 실시예에서, 임베드된 해야할 일을 갖는 노트는 한 쌍의 데이터 스토어 및 데이터 클래스 처리기만을 이용하여 2개가 아니라 단지 하나의 데이터베이스 또는 스토어에 동기화될 수 있다. 동작 811에서, 임베드된 해야할 일을 갖는 노트가 호스트 또는 장치 상에 저장된다. 이것은 동작 813에서 호스트(또는 장치) 상의 해야할 일 데이터베이스의 업데이트를 초래할 것이다. 동작 815에서 동기화가 일어날 때, 장치 상의 노트 데이터베이스가 동기화되고 장치 상의 해야할 일 데이터베이스도 동기화된다. 만일 동작 811에서 노트가 장치 상에 저장되었다면, 동작 815에서 호스트 상의 노트 데이터베이스가 동기화되고 호스트 상의 해야할 일 데이터베이스가 동기화된다. 이런 식으로, 노트의 상이한 부분들이 2개의 상이한 데이터 스토어들에 동기화된다.
도 20은 임베드된 노트가 어떻게 생성될 수 있는지의 예를 제공한다. 동작 825에서, 장치 또는 호스트와 같은 시스템이 노트의 콘텐트를 수신한다. 이 콘텐트는 자유 형식 텍스트 문서일 수 있지만 또한 그림(picture) 또는 다른 그래픽과 같은 이미지 데이터를 포함할 수도 있다. 그 후 동작 827에서, 시스템은 노트의 콘텐트의 적어도 일부로부터 해야할 일 항목을 생성하는 명령의 선택을 수신한다. 이 선택은, 특정 실시예들에서, 콘텐트를 수신하기 전에 일어날 수 있다. 그 후 동작 829에서, 해야할 일 항목이 해야할 일 데이터베이스에 추가된다. 이 새로운 해야할 일 항목은 옵션으로 해야할 일 창 또는 다른 사용자 인터페이스 항목에서 사용자에게 제공될 수 있다.
도 21은 노트 또는 다른 타입의 구조화된 데이터가 필터에 따라서 어떻게 동기화될 수 있는지 여부의 예를 나타낸다. 노트의 경우, 필터는 시스템이 많은 텍스트 또는 이미지 데이터를 포함하는 매우 큰 노트를 동기화시키려고 시도하는 것을 막기 위해 노트의 크기일 수 있다. 동작 841에서, 장치 상의 노트들을 호스트 상의 노트들에 동기화시키기 위해 접속이 확립된다. 동작 843에서, 노트들에 대한 동기화 필터가, 예를 들면 디폴트로서, 시스템에 의해 설정되었는지, 또는 사용자에 의해 설정되었는지가 결정된다. 동기화가 수행될 때, 동작 845는 또한 호스트와 장치 사이에 동기화되어야 할 각 노트에 대하여 수행된다. 이 동작은 노트가 필터를 만족시키는지 여부를 결정하는 것을 수반한다. 일 실시예에서, 필터는 노트의 최대 크기일 수 있다. 만일 노트가 최대 크기를 초과하면, 그것은 동기화되지 않을 것이고 또는 텍스트 부분만이 동기화될 것이다. 이것은 동작 849에 나타내어져 있다. 만일 노트가 필터를 만족시킨다면, 그것은 동작 847에 나타내어진 바와 같이 동기화된다. 이것은 동기화되어야 할 각 노트에 대하여 반복된다. 다른 실시예에서는, 보다 큰 노트들을 전혀 동기화시키지 않기보다는, 방법은 그러한 보다 큰 노트들의 텍스트 및/또는 다른 작은 부분들을 동기화시킬 수 있고 원본 노트의 일부분(예를 들면, 이미지 데이터 부분)이 동기화된 사본에 포함되지 않았다는 표시자(indicator) 또는 표지(marker)를 동기화된 사본(이것은 이미지 또는 다른 데이터의 제거에 의해 크기가 감소되었음)에 포함할 수 있다. 이렇게 하여, 보다 큰 노트들의 적어도 일부의 동기화는, 동기화 프로세스 자체에서, 노트의 보다 큰 부분들을 필터링 제거하면서, 수행될 수 있다.
적어도 특정 실시예들의 다른 양태는 호스트와 장치 사이의 동기화 프로세스의 일부로서 데이터의 변형들에 관한 것이다. 이들 변형들의 예는, URL과 같은 데이터 타입들을 텍스트 문자열로 변환하는 것(예를 들면, 북마크들을 동기화시킬 때) 또는 캘린더 이벤트들에 대한 데이터 포맷들을 변환하는 것 또는 콘택트 이미지 등을 변환하는 것을 포함한다. 각 경우에, 장치 및 호스트는 상이한 포맷을 이용할 수 있다; 예를 들면, 장치는 캘린더 이벤트들에 대한 제1 데이터 포맷을 이용할 수 있고 호스트는 캘린더 이벤트들에 대한 제2 데이터 포맷을 이용할 수 있다. 일 실시예에서, 호스트 상의 데이터 클래스에 대한 데이터 클래스 처리기는 표 D에서 지적한 바와 같이 호스트와 장치 양쪽 모두에 대해 그 데이터 클래스에 대한 변환들을 수행할 수 있다. 다른 실시예들에서, 데이터 클래스에 대한 장치 상의 데이터 소스 및 그 데이터 클래스에 대한 호스트 상의 데이터 를래스 처리기는 그 데이터 클래스에 대한 포맷들 사이에 변환하는 태스크들을 공유할 수 있다.
이제 이미지 포맷들의 변환에 관하여 추가의 정보를 제공한다. 예를 들면, 장치는 호스트 상의 콘택트 이미지들(호스트 상의 콘택트들 또는 주소록 애플리케이션에 대한 것)보다 더 풍부한(예를 들면, 더 다양한) 포맷을 갖는 콘택트 이미지들(예를 들면, 장치 상의 콘택트들 또는 주소록 애플리케이션에 대한 것)을 지원할 수 있다. 또한, 장치는 이미지의 이전에 클립된 버전들 또는 콘택트에 대한 이미지들의 이전에 크기 조정(scale)된 버전들을 저장함으로써 그것들을 빠르게 디스플레이할 수 있다.
호스트 상에는, 콘택트의 그림에 대한 하나의 작은 이미지만이 있을 수 있다. 이 이미지는 다른 애플리케이션으로부터의 API(Application Program Interface)를 통해 설정되었다면 쾌 클 수 있지만, 호스트 상의 콘택트들 또는 주소 애플리케이션에서 생성되었다면, 그것은 작을 수 있고, 그것이 보다 큰 원본 이미지로부터 생성되었다면, 그 원본 이미지는 손실된다. 대조적으로, 장치 상에서, 일 실시예에서, 콘택트 이미지를 생성하기 위해 사용된 원본 이미지는 온전히 그대로 유지될 수 있다. 예를 들면, 사용자는 사진 또는 카메라 애플리케이션으로부터 이미지들을 고르고 그것들을 콘택트의 이미지로서 적용할 수 있다 - 이들은 임의의 크기일 수 있고, 따라서 사용자는 사용할 이미지의 가시 영역(visible area)을 선택할 수 있고, 그 가시 영역은, 필요하다면, 화면에 맞도록 크기 조정(예를 들면, 축소)된다. 장치는 디스플레이될 그 이미지의 부분을 선택하기 위해 사용자가 선택하는(어떤 사용자 인터페이스를 통해) 클림 직사각형을 저장할 수 있다. 장치는 또한 직사각형 크기의 및 정사각형 크기의 이미지에 대한 클립된 및 크기 조정된 이미지들을 저장할 수 있다. 직사각형 이미지는 화면의 크기일 수 있고, 들어오는 호출(incoming call)에서 나타내어질 수 있다. 정사각형 이미지는 콘택트의 일부로서 한층 더 작게 축소되어 나타내어지고, 그 이미지를 디스플레이하기 위해 이용 가능한 화면의 일부(정사각형 영역)만이 있는 경우에 이용될 수 있다. 일 실시예에서, 사용자가 클립 직사각형을 선택하면, 사용자 인터페이스는 직사각형 및 정사각형 이미지들이 어떻게 보일지를 나타낸다. 만일 사용자가 장치가 디스플레이하는 것을 재생성하기를 원한다면, 사용자는, 이 실시예에서, 여전히 원본 이미지를 가질 것이고, 따라서 사용자는 원본 이미지로 돌아가서 다른 클립 직사각형을 선택하고, 저장된 이미지들을 직사각형 및 정사각형 크기 및 형상으로 재생성할 수 있다.
콘택트/주소록의 동기화는, 적어도 하나의 실시예에서, 콘택트/주소록 내의 이미지들을 동기화시키는 것을 포함하고 이것은 원본 이미지뿐만 아니라 클립 직사각형을 동기화시키는 것을 포함한다. 동기화 프로세스는 또한, 사용자가 호스트 상의 그들의 주소록 내의 이미지를 변경하는 경우, 또는 사용자가 장치로부터 이미지를 얻고 그것을 다른 장치에 동기화시키는 경우(예를 들면, 사용자가 하나의 크기의 화면을 갖는 장치로부터 이미지를 얻고 그것을 상이한 크기의 화면을 갖는 장치에 동기화시키기를 원하는 경우)와 같은 특정한 경우에 최적화된 이미지들을 재생성해야 할 수 있다. 데이터 클래스 처리기는, 일 실시예에서, 새로운/변경된 이미지들을 장치 상에 동기화시킬 때 그것들을 클립/크기 조정할 수 있다. 그 이유는 그것이 장치가 그것을 하게 하는 것보다 더 빠를 수 있고 장치는 또한 메모리 제한적(memory constrained)일 수 있기 때문이다. 동일한 콘택트 이미지들을 동기화시키는 장치가 2개 이상 있을 수 있고, 그 장치들은, 일 실시예에서, 상이한 크기의 디스플레이들을 가질 수 있기 때문에, 각각의 고유 장치 디스플레이 크기마다 개별 클립 직사각형들이 저장되고, 따라서 이미지는 다른 장치와는 상이한 크기를 갖는 하나의 장치 상에서 상이하게 클립될 수 있다. 일 실시예에서 데이터 클래스 처리기는 상이한 직사각형들에 대해 끊임없이 정보를 얻어내는 것을 관리한다(각 장치는 그의 화면 크기에 부합하는 하나의 직사각형에 대해서만 알 것이기 때문에). 예를 들면, 만일 장치가 320×480 화면을 갖고 있고, 콘택트 이미지가 원래 1024×800이라면, 동기화 프로세스는 전체 화면(320×480)에 대한 최적화된 이미지들 및 정사각형 320×320 표현도 저장한다. 사용자는 원본 이미지로부터 320×480으로 크기 조정되는 클립 직사각형을 고를 수 있고(장치는 320×320 부분을 잘라낸다), 이것은 호스트에 동기화된다. 만일 호스트 상에서 이미지가 변화하면, 동기화 프로세스는 (예를 들면, 데이터 클래스 처리기를 통해) 장치에 대한 320×480 및 320×320 이미지들을 다시 계산한다. 만일 새로운 이미지가 상이한 크기를 갖는 장치에 동기화되고, 원본 이미지가 여전히 화면을 덮을 정도로 크다면, 동기화 프로세스는, 일 실시예에서, (다른 크기 장치 화면에 대한) 현존하는 클립 직사각형들 중 하나에 대한 클립 영역 내의 이미지의 중심을 찾고, 상이한 크기(예를 들면, 더 큰 크기) 화면에 맞도록 적절히 그 클립 직사각형을 확대/축소시킬 것이다. 만일 새로운 장치가 보다 작은 화면을 갖고 있다면, 동기화 프로세스는 단지 그 이미지를 그 크기로 축소시킬 수 있다.
적어도 특정 실시예들의 다른 양태는 위젯들을 동기화시키기 위한 프레임워크 및 아키텍처에 관한 것이다. 일반적으로, 위젯들은 사용자가 태스크들을 수행하고 및/또는 정보에의 액세스를 제공하게 하는 하나 이상의 도구들 및 정보를 포함하는 사용자 인터페이스 엘리먼트들이다. 위젯들은, 예를 들면, 사용자에 정보를 제공하기 위해 원격 서버 또는 다른 데이터 소스와 통신하는 것(예를 들면, 일기 예보; 주식 가격; 일출/일몰 시간; 현대 달의 위상; 현재 환율 등), 통상적으로 필요한 기능을 제공하는 것(예를 들면, 계산기; 캘린더; 시계 등), 또는 정보 저장소로서 기능하는 것(예를 들면, 노트북)을 포함하는 각종 태스크들을 수행할 수 있다. 위젯들은 "통합 관심 층(unified interest layer)", "대시보드 층(dashboard layer)", "대시보드 환경", 또는 "대시보드"라고 불리는 환경을 통해 디스플레이 및 액세스될 수 있다. 위젯 및 대시보드에 대해서는 2004년 6월 25일에 출원된 동시 계류중인 미국 특허 출원 10/877,968호, "Unified Interest Layer for User Interface"에 기술되어 있고, 이 특허 출원은 그 전체가 참고로 본 명세서에 통합된다.
장치 상의 위젯들은, 본 명세서에 설명된 실시예들 중 어느 하나의 실시예를 이용하여, 호스트 또는 다른 장치 상의 위젯들과 동기화될 수 있다. 그 동기화는 한쪽 방향(장치로부터 호스트 또는 다른 장치만으로 또는 호스트 또는 다른 장치로부터 장치만으로) 또는 양방향일 수 있다. 양방향 동기화의 경우, 양쪽 시스템들이 완전한 공통의 위젯 세트를 지원할 수 있다고 가정할 때, 양쪽 시스템들은 통상적으로 그 공통의 위젯 세트로 끝날 것이다.
위젯들은, 적어도 특정 실시예들에서, 다른 데이터 클래스로서 취급될 수 있고 도 4에 도시되고 이 명세서의 전반에 걸쳐 설명된 아키텍처를 이용하여 동기화될 수 있다. 일 실시예에서, 위젯들에 대한 데이터 소스는 장치 상에 존재할 수 있고 위젯들에 대한 데이터 클래스 처리기는 호스트 상에 존재할 수 있다. 위젯을 구현하는 실행가능한 소프트웨어는 동기화될 수 없지만 위젯에 대한 구성 설정들은 장치와 호스트 사이에 또는 장치와 다른 장치 사이에 동기화될 수 있다. 시스템 상의 각 위젯은 구성 설정들을 가질 수 있고 이들 설정들은 특정 타입의 위젯에 대한 하나의 파일로서 저장될 수 있다. 예를 들면, 일기(weather) 위젯은 3개의 도시(예를 들면, 샌프란시스코, 로스앤젤레스, 및 워싱턴, D.C.)를 지정하는 설정들을 가질 수 있고 그 설정들은 동기화를 위한 하나의 파일 또는 레코드로서 저장된다.
전술한 명세서에서, 본 발명은 그의 특정 예시적인 실시예들에 관련하여 설명되었다. 다음의 청구항들에 제시된 발명의 보다 광범위한 정신 및 범위에서 일탈하지 않고 다양한 변경들이 이루어질 수 있다는 것은 명백할 것이다. 따라서, 명세서 및 도면은 제한적인 의미로보다는 예시적인 의미로 간주되어야 한다.

Claims (22)

  1. 데이터 처리 시스템으로서,
    호스트와 장치 간의 구조화된 데이터 동기화 프로세스 동안 제1 소프트웨어 기반 메시지들을 통해 동기화 소프트웨어 컴포넌트들과 인터페이스하도록 구성되고, 제2 소프트웨어 기반 메시지들을 통해 대응하는 복수의 물리적 인터페이스들에 대한 복수의 상이한 스트림 처리기들과 인터페이스하도록 구성된 제1 소프트웨어 컴포넌트를 포함하고,
    상기 제1 소프트웨어 컴포넌트는 상기 스트림 처리기들과 동기화 소프트웨어 컴포넌트들을 분리하도록 구성되는, 데이터 처리 시스템.
  2. 제1항에 있어서, 상기 제1 소프트웨어 컴포넌트는 제3 소프트웨어 기반 메시지들을 통해 백업 소프트웨어 애플리케이션 또는 구성 소프트웨어 애플리케이션 중 적어도 하나와 인터페이스하도록 구성되고, 상기 구조화된 데이터 동기화 프로세스는 상기 장치 상의 제1 스토어 내의 구조화된 데이터와 상기 호스트 상의 제2 스토어 내의 구조화된 데이터를 동기화시키는, 데이터 처리 시스템.
  3. 제1항에 있어서, 상기 동기화 소프트웨어 컴포넌트들은, (a) 캘린더 데이터; (b) 콘택트 데이터; (c) 이메일 계정 설정(setup) 정보; (d) 북마크들; (e) 노트들; 및 (f) 해야할 일 항목들 중 적어도 하나를 포함하는 구조화된 데이터를 동기화하고, 상기 복수의 물리적 인터페이스들은 유선 인터페이스 및 무선 인터페이스를 포함하는 데이터 처리 시스템.
  4. 제3항에 있어서, 상기 제1 소프트웨어 컴포넌트는 상기 구조화된 데이터 동기화 프로세스 동안에 암호화된 양방향 인증(encrypted two-way authentication)을 제공하는 소프트웨어를 포함하고, 상기 암호화된 양방향 인증은 자체 서명된 인증 기관 인증서(self-signed certificate authority certificate)를 이용하는, 데이터 처리 시스템.
  5. 제4항에 있어서, 상기 암호화된 양방향 인증은 개인/공개 키 암호화로 암호화되는, 데이터 처리 시스템.
  6. 제1항에 있어서, 상기 제1 소프트웨어 컴포넌트는, 상기 복수의 스트림 처리기들 중 임의의 하나와 인터페이스할 때, 인증된 접속 링크를 상기 구조화된 데이터 동기화 프로세스 동안 유지하고, 상기 복수의 물리적 인터페이스들은 유선 인터페이스 및 무선 인터페이스를 포함하고, 상기 유선 인터페이스 및 무선 인터페이스 중 하나는 패킷들의 스트림과 함께 상기 호스트를 상기 장치로 직렬로(serially) 접속시킬 수 있는, 데이터 처리 시스템.
  7. 제6항에 있어서, 상기 동기화 소프트웨어 컴포넌트는, 각각이 하나의 데이터 클래스 내의 구조화된 데이터의 검색 및 저장을 초래하도록 구성된 복수의 컴포넌트들을 포함하고, 각각의 데이터 클래스에 대하여, 사용자가 상기 구조화된 데이터를 액세스하고 편집할 수 있게 하는 사용자 인터페이스를 제공하는 개별 애플리케이션 소프트웨어가 존재하는, 데이터 처리 시스템.
  8. 기계로 구현되는 방법으로서,
    제1 데이터 처리 시스템과 제2 데이터 처리 시스템 간의 동기화 프로세스 동안, 제1 소프트웨어 컴포넌트와 동기화 소프트웨어 컴포넌트 간에 제1 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 제1 소프트웨어 인터페이스를 통해, 교환하는 단계 - 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안 상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간에 데이터 접속을 유지하도록 설계되어 있음 - ; 및
    상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간의 상기 동기화 프로세스 동안, 상기 제1 소프트웨어 컴포넌트와, 대응하는 복수의 물리적 인터페이스들에 대한 복수의 상이한 스트림 처리기들 중 하나의 스트림 처리기 간에 제2 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 제2 소프트웨어 인터페이스를 통해, 교환하는 단계를 포함하고,
    상기 동기화 소프트웨어 컴포넌트들은 상기 제1 소프트웨어 컴포넌트에 의해 상기 스트림 처리기들과 분리되는, 기계로 구현되는 방법.
  9. 제8항에 있어서,
    상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간의 상기 동기화 프로세스 동안, 상기 제1 소프트웨어 컴포넌트와, 백업 소프트웨어 애플리케이션 및 구성 소프트웨어 애플리케이션 중 적어도 하나 간에 제3 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 상기 제1 소프트웨어 인터페이스를 통해, 교환하는 단계를 더 포함하고, 상기 동기화 프로세스는 상기 제1 데이터 처리 시스템 상의 제1 스토어 내의 구조화된 데이터 및 상기 제2 데이터 처리 시스템 상의 제2 스토어 내의 구조화된 데이터를 동기화시키는 구조화된 데이터 동기화 프로세스인, 기계로 구현되는 방법.
  10. 제8항에 있어서, 상기 동기화 소프트웨어 컴포넌트는, (a) 캘린더 데이터; (b) 콘택트 데이터; (c) 이메일 계정 설정 정보; (d) 북마크들; (e) 노트들; 및 (f) 해야할 일 항목들 중 적어도 하나를 포함하는 구조화된 데이터를 동기화시키고, 상기 복수의 물리적 인터페이스들은 유선 인터페이스 및 무선 인터페이스를 포함하는 기계로 구현되는 방법.
  11. 제10항에 있어서, 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안에 암호화된 양방향 인증을 제공하는 소프트웨어를 포함하는 기계로 구현되는 방법.
  12. 제11항에 있어서, 상기 암호화된 양방향 인증은 개인/공개 키 암호화로 암호화되는, 기계로 구현되는 방법.
  13. 제8항에 있어서, 상기 제1 소프트웨어 컴포넌트는, 상기 복수의 상이한 스트림 처리기들 중 임의의 하나와 소프트웨어 기반 메시지들을 교환할 때, 양방향 인증된 접속을 상기 동기화 프로세스 동안 유지하고, 상기 복수의 물리적 인터페이스들은 유선 인터페이스 및 무선 인터페이스를 포함하고 상기 유선 인터페이스 및 상기 무선 인터페이스 중 하나는 패킷들의 스트림과 더불어 상기 제1 및 상기 제2 데이터 처리 시스템들을 직렬로 접속시킬 수 있는, 기계로 구현되는 방법.
  14. 제13항에 있어서, 상기 동기화 소프트웨어 컴포넌트는, 각각이 하나의 데이터 클래스 내의 구조화된 데이터의 검색 및 저장을 초래하도록 구성된 복수의 컴포넌트들을 포함하고, 각각의 데이터 클래스에 대하여, 사용자가 상기 구조화된 데이터를 액세스하고 편집할 수 있게 하는 사용자 인터페이스를 제공하는 개별 애플리케이션 소프트웨어가 존재하는, 기계로 구현되는 방법.
  15. 실행될 때 데이터 처리 시스템으로 하여금 방법을 수행하게 하는 실행가능한 프로그램 명령들을 포함하는 컴퓨터 판독가능한 매체로서, 상기 방법은,
    제1 데이터 처리 시스템과 제2 데이터 처리 시스템 간의 동기화 프로세스 동안, 제1 소프트웨어 컴포넌트와 동기화 소프트웨어 컴포넌트 간에 제1 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 제1 소프트웨어 인터페이스를 통해, 교환하는 단계 - 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안 상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간에 데이터 접속을 유지하도록 설계되어 있음 -; 및
    상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간의 상기 동기화 프로세스 동안, 상기 제1 소프트웨어 컴포넌트와, 대응하는 복수의 물리적 인터페이스들에 대한 복수의 상이한 스트림 처리기들 중 하나 간에 제2 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 제2 소프트웨어 인터페이스를 통해, 교환하는 단계를 포함하고,
    상기 동기화 소프트웨어 컴포넌트들은 상기 제1 소프트웨어 컴포넌트에 의해 상기 스트림 처리기들과 분리되는, 컴퓨터 판독가능한 매체.
  16. 제15항에 있어서, 상기 방법은,
    상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간의 상기 동기화 프로세스 동안, 상기 제1 소프트웨어 컴포넌트와, 백업 소프트웨어 애플리케이션 및 구성 소프트웨어 애플리케이션 중 적어도 하나 간에 제3 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 인터페이스를 통해, 교환하는 단계를 더 포함하고, 상기 동기화 프로세스는 상기 제1 데이터 처리 시스템 상의 제1 스토어 내의 구조화된 데이터 및 상기 제2 데이터 처리 시스템 상의 제2 스토어 내의 구조화된 데이터를 동기화시키는 구조화된 데이터 동기화 프로세스인, 컴퓨터 판독가능한 매체.
  17. 제15항에 있어서, 상기 동기화 소프트웨어 컴포넌트는, (a) 캘린더 데이터; (b) 콘택트 데이터; (c) 이메일 계정 설정 정보; (d) 북마크들; (e) 노트들; 및 (f) 해야할 일 항목들 중 적어도 하나를 포함하는 구조화된 데이터를 동기화시키고, 상기 복수의 물리적 인터페이스들은 유선 인터페이스 및 무선 인터페이스를 포함하는 컴퓨터 판독가능한 매체.
  18. 제17항에 있어서, 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안에 암호화된 양방향 인증을 제공하는 소프트웨어를 포함하는 컴퓨터 판독가능한 매체.
  19. 제18항에 있어서, 상기 암호화된 양방향 인증은 개인/공개 키 암호화로 암호화되는, 컴퓨터 판독가능한 매체.
  20. 제15항에 있어서, 상기 제1 소프트웨어 컴포넌트는, 상기 복수의 상이한 스트림 처리기들 중 임의의 하나와 소프트웨어 기반 메시지들을 교환할 때, 양방향 인증된 접속을 상기 동기화 프로세스 동안 유지하고, 상기 복수의 물리적 인터페이스들은 유선 인터페이스 및 무선 인터페이스를 포함하고, 상기 유선 인터페이스 및 상기 무선 인터페이스 중 하나는 패킷들의 스트림과 더불어 상기 제1 및 상기 제2 데이터 처리 시스템들을 직렬로 접속시킬 수 있는 컴퓨터 판독가능한 매체.
  21. 제20항에 있어서, 상기 동기화 소프트웨어 컴포넌트는, 각각이 하나의 데이터 클래스 내의 구조화된 데이터의 검색 및 저장을 초래하도록 구성된 복수의 컴포넌트들을 포함하고, 각각의 데이터 클래스에 대하여, 사용자가 상기 구조화된 데이터를 액세스하고 편집할 수 있게 하는 사용자 인터페이스를 제공하는 개별 애플리케이션 소프트웨어가 존재하는, 컴퓨터 판독가능한 매체.
  22. 데이터 처리 시스템으로서,
    제1 데이터 처리 시스템과 제2 데이터 처리 시스템 간의 동기화 프로세스 동안에 제1 소프트웨어 컴포넌트와 동기화 소프트웨어 컴포넌트 간에 제1 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 제1 소프트웨어 인터페이스를 통해, 교환하는 수단 - 상기 제1 소프트웨어 컴포넌트는 상기 동기화 프로세스 동안 상기 제1 데이터 처리 시스템과 상기 제2 데이터 처리 시스템 간에 데이터 접속을 유지하도록 설계되어 있음 - ; 및
    상기 제1 소프트웨어 컴포넌트와, 대응하는 복수의 물리적 인터페이스들에 대한 복수의 상이한 스트림 처리기들 중 하나 간에 제2 소프트웨어 기반 메시지들을, 상기 제1 소프트웨어 컴포넌트의 제2 소프트웨어 인터페이스를 통해, 교환하는 수단을 포함하고,
    상기 동기화 소프트웨어 컴포넌트들은 상기 제1 소프트웨어 컴포넌트에 의해 상기 스트림 처리기들과 분리되는, 데이터 처리 시스템.
KR1020117019240A 2007-01-07 2008-01-04 동기화 방법 및 시스템 KR101212872B1 (ko)

Applications Claiming Priority (13)

Application Number Priority Date Filing Date Title
US11/650,730 2007-01-07
US11/650,624 US7761414B2 (en) 2007-01-07 2007-01-07 Asynchronous data synchronization amongst devices
US11/650,729 US7805403B2 (en) 2007-01-07 2007-01-07 Synchronization methods and systems
US11/650,624 2007-01-07
US11/650,721 US20080163743A1 (en) 2007-01-07 2007-01-07 Synchronization methods and systems
US11/650,726 2007-01-07
US11/650,728 2007-01-07
US11/650,726 US7739410B2 (en) 2007-01-07 2007-01-07 Synchronization methods and systems
US11/650,728 US8239504B2 (en) 2007-01-07 2007-01-07 Synchronization methods and systems
US11/650,721 2007-01-07
US11/650,729 2007-01-07
US11/650,730 US7778971B2 (en) 2007-01-07 2007-01-07 Synchronization methods and systems
PCT/US2008/000087 WO2008085869A2 (en) 2007-01-07 2008-01-04 Synchronization methods and systems

Related Parent Applications (1)

Application Number Title Priority Date Filing Date
KR1020097016485A Division KR101138549B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템

Publications (2)

Publication Number Publication Date
KR20110110329A KR20110110329A (ko) 2011-10-06
KR101212872B1 true KR101212872B1 (ko) 2012-12-17

Family

ID=39609258

Family Applications (5)

Application Number Title Priority Date Filing Date
KR1020117019239A KR101210161B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020117019242A KR101190426B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020117019241A KR101212858B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020097016485A KR101138549B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020117019240A KR101212872B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템

Family Applications Before (4)

Application Number Title Priority Date Filing Date
KR1020117019239A KR101210161B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020117019242A KR101190426B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020117019241A KR101212858B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템
KR1020097016485A KR101138549B1 (ko) 2007-01-07 2008-01-04 동기화 방법 및 시스템

Country Status (3)

Country Link
EP (1) EP2115627B1 (ko)
KR (5) KR101210161B1 (ko)
WO (1) WO2008085869A2 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101420574B1 (ko) * 2013-08-29 2014-07-17 지현구 통신 기기 간 자동 통신 전환 방법 및 장치

Families Citing this family (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US8239504B2 (en) 2007-01-07 2012-08-07 Apple Inc. Synchronization methods and systems
US7739410B2 (en) 2007-01-07 2010-06-15 Apple Inc. Synchronization methods and systems
US7660831B2 (en) 2007-01-07 2010-02-09 Apple Inc. Synchronization methods and systems
US7778971B2 (en) 2007-01-07 2010-08-17 Apple Inc. Synchronization methods and systems
US7761414B2 (en) 2007-01-07 2010-07-20 Apple Inc. Asynchronous data synchronization amongst devices
US7805403B2 (en) 2007-01-07 2010-09-28 Apple Inc. Synchronization methods and systems
WO2009032708A2 (en) * 2007-09-04 2009-03-12 Apple Inc. Protocol for remote user interface for portable media device
US10567498B2 (en) 2012-07-27 2020-02-18 Samsung Electronics Co., Ltd. Terminal and server performing data synchronization
US11514083B2 (en) * 2016-12-22 2022-11-29 Nippon Telegraph And Telephone Corporation Data processing system and data processing method
US10979300B2 (en) * 2019-06-20 2021-04-13 Kaloom Inc. Computing device and methods for synchronizing networking information with a topology server
CN112749228B (zh) * 2019-10-31 2024-01-26 北京金山云网络技术有限公司 数据同步方法、装置、存储服务器及存储介质

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040148375A1 (en) 2001-02-12 2004-07-29 Levett David Lawrence Presentation service which enables client device to run a network based application

Family Cites Families (10)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6708221B1 (en) 1996-12-13 2004-03-16 Visto Corporation System and method for globally and securely accessing unified information in a computer network
US6324544B1 (en) * 1998-10-21 2001-11-27 Microsoft Corporation File object synchronization between a desktop computer and a mobile device
US6460051B1 (en) * 1998-10-28 2002-10-01 Starfish Software, Inc. System and methods for synchronizing datasets in a communication environment having high-latency or other adverse characteristics
US6671757B1 (en) 2000-01-26 2003-12-30 Fusionone, Inc. Data transfer and synchronization system
US6971084B2 (en) 2001-03-02 2005-11-29 National Instruments Corporation System and method for synchronizing execution of a batch of threads
US20040093342A1 (en) * 2001-06-27 2004-05-13 Ronald Arbo Universal data mapping system
US7596565B2 (en) 2001-08-07 2009-09-29 Good Technology System and method for maintaining wireless file folders at a wireless device
AU2003223382A1 (en) 2002-03-29 2003-10-13 Good Technology, Inc. System and method for full wireless synchronization of a data processing apparatus with a data service
DK1495610T3 (da) * 2002-04-15 2008-09-22 Nokia Corp Fremgangsmåde og anordning til håndtering af synkroniseringsrelaterede informationer
US20050147130A1 (en) 2003-12-23 2005-07-07 Intel Corporation Priority based synchronization of data in a personal area network

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US20040148375A1 (en) 2001-02-12 2004-07-29 Levett David Lawrence Presentation service which enables client device to run a network based application

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101420574B1 (ko) * 2013-08-29 2014-07-17 지현구 통신 기기 간 자동 통신 전환 방법 및 장치

Also Published As

Publication number Publication date
KR20110110331A (ko) 2011-10-06
WO2008085869A2 (en) 2008-07-17
KR101212858B1 (ko) 2012-12-17
KR101190426B1 (ko) 2012-10-12
KR20110110328A (ko) 2011-10-06
KR101138549B1 (ko) 2012-05-21
EP2115627B1 (en) 2017-10-18
KR20110110329A (ko) 2011-10-06
KR20090096553A (ko) 2009-09-10
KR101210161B1 (ko) 2012-12-07
EP2115627A4 (en) 2012-02-08
EP2115627A2 (en) 2009-11-11
WO2008085869A3 (en) 2009-04-02
KR20110110330A (ko) 2011-10-06

Similar Documents

Publication Publication Date Title
KR101138491B1 (ko) 동기화 방법 및 시스템
US10891301B2 (en) Synchronization methods and systems
US7991738B2 (en) Synchronization methods and systems
US7739410B2 (en) Synchronization methods and systems
KR101212872B1 (ko) 동기화 방법 및 시스템
US7761414B2 (en) Asynchronous data synchronization amongst devices
US8375112B2 (en) Synchronization methods and systems
US20080163743A1 (en) Synchronization methods and systems
US9384098B1 (en) Portable data archiving device

Legal Events

Date Code Title Description
A107 Divisional application of patent
A201 Request for examination
E701 Decision to grant or registration of patent right
GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20151118

Year of fee payment: 4

FPAY Annual fee payment

Payment date: 20161123

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20171117

Year of fee payment: 6

FPAY Annual fee payment

Payment date: 20181115

Year of fee payment: 7