KR20060061733A - 객체의 계층 구조를 정의하는 선언적 메카니즘 - Google Patents

객체의 계층 구조를 정의하는 선언적 메카니즘 Download PDF

Info

Publication number
KR20060061733A
KR20060061733A KR1020047007470A KR20047007470A KR20060061733A KR 20060061733 A KR20060061733 A KR 20060061733A KR 1020047007470 A KR1020047007470 A KR 1020047007470A KR 20047007470 A KR20047007470 A KR 20047007470A KR 20060061733 A KR20060061733 A KR 20060061733A
Authority
KR
South Korea
Prior art keywords
tag
class
property
name
attribute
Prior art date
Application number
KR1020047007470A
Other languages
English (en)
Other versions
KR101292982B1 (ko
Inventor
로버트 에이. 릴라이어
로저 그램바일러
제프 보그단
조셉 킹
크리스 윌슨
Original Assignee
마이크로소프트 코포레이션
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by 마이크로소프트 코포레이션 filed Critical 마이크로소프트 코포레이션
Publication of KR20060061733A publication Critical patent/KR20060061733A/ko
Application granted granted Critical
Publication of KR101292982B1 publication Critical patent/KR101292982B1/ko

Links

Images

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06QINFORMATION AND COMMUNICATION TECHNOLOGY [ICT] SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES; SYSTEMS OR METHODS SPECIALLY ADAPTED FOR ADMINISTRATIVE, COMMERCIAL, FINANCIAL, MANAGERIAL OR SUPERVISORY PURPOSES, NOT OTHERWISE PROVIDED FOR
    • G06Q50/00Systems or methods specially adapted for specific business sectors, e.g. utilities or tourism
    • G06Q50/10Services
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F8/00Arrangements for software engineering
    • G06F8/30Creation or generation of source code
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/131Fragmentation of text files, e.g. creating reusable text-blocks; Linking to fragments, e.g. using XInclude; Namespaces
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/137Hierarchical processing, e.g. outlines
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/12Use of codes for handling textual entities
    • G06F40/14Tree-structured documents
    • G06F40/143Markup, e.g. Standard Generalized Markup Language [SGML] or Document Type Definition [DTD]
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/80Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
    • H04N21/85Assembly of content; Generation of multimedia applications
    • H04N21/854Content authoring
    • H04N21/8543Content authoring using a description language, e.g. Multimedia and Hypermedia information coding Expert Group [MHEG], eXtensible Markup Language [XML]

Abstract

객체를 마크업 문서 내에 선언적으로 지정할 수 있게 해주는 방법 및 데이터 구조에 대해 기술되어 있다. 마크업 문서는 XML 기반일 수 있다. 본 발명에 따르면, 객체는 매핑에 기반하여 작성된다. 매핑은 클래스가 지정되어 있는 어셈블리 및 네임스페이스를 갖는 정의 파일의 위치를 정의하기 위한 URI 속성을 포함한다. 클래스 이름은 마크업 문서에 태그 이름으로서 매핑된다. 클래스의 프로퍼티 및 이벤트는 그 클래스와 관련된 태그의 속성으로 매핑된다. 본 방법은 또한 객체의 계층 구조를 생성하기 위해 마크업 언어를 파싱하는 방법을 포함한다. 클래스에 직접 매핑되지 않는 속성은 정의 태그를 사용하여 정의된다. 정의 태그는 또한 페이지에 프로그래밍 코드를 부가하는 데도 사용된다.
마크업 문서, XML, 마크업 언어, 객체, 프로퍼티

Description

객체의 계층 구조를 정의하는 선언적 메카니즘{DECLARATIVE MECHANISM FOR DEFINING A HIERARCHY OF OBJECTS}
본 발명은 일반적으로 컴퓨터 시스템에 관한 것으로서, 보다 구체적으로는 객체의 계층 구조 및 객체 타입을 선언적으로 생성하는 방법 및 시스템에 관한 것이다.
마크업 언어는 일반적으로 작성 및 이해가 용이하다. 통상 XML이라고 하는 확장가능 마크업 언어(eXtensible Markup Language)는 현재 사용되고 있는 가장 보편적인 마크업 언어 중 하나이다. XML은 구조화된 정보를 웹에 도입시키기 위해 설계된 포맷이다. XML은 전자 데이터 교환을 위한 웹 기반 언어이다. XML은 하이퍼텍스트 마크업 언어(HTML) 및 다른 웹 관련 표준을 유지 및 진흥시키는 일을 맡고 있는 표준 그룹인 W3C(World Wide Web Consortium)의 개방형 기술 표준이다.
XML은 문맥 구분의 중요한 구조적 특징은 유지하는 반면 중요치 않은 특징은 제거하는 SGML(Standard Generalized Markup Language, 일반화된 마크업 언어 표준)의 하나이다. XML 문서 포맷에서는 그의 구조를 표현하는 태그 안에 내용을 집어 넣는다. XML은 또한 문서의 문법에 대한 규칙을 표현하는 기능도 제공한다. 이들 2가지 특징에 의해, 데이터 및 메타데이터의 자동 구분(automatic separation)이 가능하게 되고 또 범용 툴(generic tool)을 사용하여 XML 문서가 그의 문법에 맞는지 확인해볼 수 있게 된다.
XML은 시스템 통합을 위해 설계된 것이다. XML은 광범위한 구현이 가능하면서도 배포가 용이한 것으로 입증된 데이터의 구조적 표현을 제공한다. 태그가 있음으로써 구별되는 정보를 엘리먼트(element)라고 한다. 짝을 이루는 시작 태그(start tag)와 종료 태그(end tag)는 정보를 표기하는 데 사용된다. 엘리먼트는 속성(attribute)이라고 하는 이름-값 쌍(name value pair)을 첨부함으로써 더 상세히 기술될 수 있다. XML 엘리먼트는 그와 관련된 데이터가 임의의 원하는 데이터 엘리먼트인 것으로 선언할 수 있다. 예를 들어, 엘리먼트는 소매 가격이거나 책 제목이거나 기타 등등 일 수 있다. 현재, XML은 응용 데이터(예를 들어, 사업 문서, EDI 메시지 등), 애플리케이션의 사용자 인터페이스, XHTML, 및 고정된 태그 세트를 갖는 다른 문법의 문법 기반 표현에 적용되고 있다.
이들 문법 기반 표현은 새로운 유형의 XML 엘리먼트를 생성하기 위해 고정된 태그 세트를 용이하게 확장할 수 없다는 점에서 한계가 있다. 게다가, 컴퓨터 산업이 객체 지향 프로그래밍쪽으로 꾸준히 이동해가고 있기 때문에, XML은 실행 가능 컴포넌트의 객체를 표현하는 데 적절하지 않다. 이들 객체는 다른 소프트웨어에 의해 재사용가능하며, 새로운 객체는 기존의 객체로부터 용이하게 확장될 수 있다. 그 결과, 프로그래머는 객체의 계층 구조의 생성을 선언적이 아닌 프로그래밍 언어로 프로그램적으로 하는 경우가 종종 있다. 객체의 계층 구조는 사용될 때마다 프로그래밍 언어로 생성되어야만 한다.
당업자들은 프로그래머에게 객체 및 타입의 계층 구조를 프로그램적 논리(programmatic logic)와 연계하여 선언적으로 생성할 수 있는 기능을 제공하는 시스템에 대해서는 모른다.
본 발명은 마크업 언어에서 객체의 계층 구조를 선언적으로 정의하는 메카니즘에 관한 것이다. 이들 객체에는 Microsoft .NET 프레임워크의 CLR(common language runtime, 공통 언어 런타임) 타입 등의 객체가 포함된다. 사용자 인터페이스 등의 아이템(item)을 구현하는 종래의 방법에서는 그 아이템이 동기적으로 생성되어야만 한다. 아주 큰 아이템의 경우, 그 아이템을 로드하는 시간은 시간적 압박이 될 수 있다(time constrictive). 본 발명은 사용자가 계층(즉, 트리) 구조의 객체를 동기적으로 또는 비동기적으로 생성할 수 있게 해준다.
상기 마크업 언어는 XML 기반이다. 상기 객체는 매핑에 기초하여 마크업 언어로 작성된다. 상기 매핑은 객체 클래스(object class)가 지정되어 있는 네임스페이스(name space) 및 어셈블리를 갖는 정의 파일(definition file)의 위치를 정의하는 URL 속성을 포함한다. 마크업 언어에서의 태그 이름은 클래스 이름으로 매핑된다. 태그의 속성은 그 태그와 관련된 클래스의 이벤트(event) 및 프로퍼티(property)로 매핑된다. 클래스에 직접 매핑되지 않는 속성은 정의 태그(definition tag)를 사용하여 정의된다. 정의 태그는 프로그래밍 코드를 페이지(page)에 부가하는 데도 사용된다.
본 발명은 또한 객체의 계층 구조를 생성하기 위해 마크업 언어를 파싱하는 방법도 포함한다. 상기 정의 파일은 태그가 매핑되어 있는 클래스를 검색하기 위한 본 발명의 메카니즘에 대한 객체 클래스가 어느 곳에 위치하는지를 결정하는 데 사용된다. 클래스가 결정되면, 그 클래스의 프로퍼티 부분(property section) 및 이벤트 부분(event section)에서 속성 이름이 검색된다. 상기 클래스의 객체의 인스턴스(instance)가 생성된다. 속성은 복합 프로퍼티(compound property)를 사용하여 지정될 수 있다.
본 발명은 사용자 인터페이스, 벡터 그래픽 드로잉(vector graphic drawing), 및 문서 등의 아이템을 마크업 언어를 사용하여 동기적으로 또는 비동기적으로 생성할 수 있는 기능을 제공한다. 문서에는 고정 포맷 문서(fixed-format document) 및 적응적 유동 문서(adaptive-flow document)가 있다. 고정 포맷 문서란 페이지의 수 및 각 페이지 상의 객체의 배치를 장치 독립적인 방식으로 명시적으로 정의하는 문서를 말한다. 적응적 유동 문서란 페이지 크기가 변동될 때마다 자동적으로 페이지 재구성(repaginate)될 수 있는, 즉 각 페이지 상의 객체를 재배치(reposition)할 수 있는 문서를 말한다.
본 발명의 부가의 특징 및 이점은 첨부 도면을 참조하여 기술된 이하의 예시적인 실시예에 대한 상세한 설명으로부터 명백하게 될 것이다.
도 1은 본 발명이 속하는 전형적인 컴퓨터 시스템을 개괄하여 나타낸 블록도.
도 2는 본 발명이 동작할 수 있는 전형적인 환경을 개괄하여 나타낸 블록도.
도 3은 도 2의 전형적인 환경과 마크업 언어 사이의 매핑을 개괄하여 나타낸 블록도.
도 4는 본 발명에 따라 마크업 파일을 파싱하는 단계들을 나타낸 흐름도.
첨부된 청구항들에 본 발명의 특징들에 대해 상세히 기술되어 있지만, 본 발명은 그의 목적 및 이점과 함께 첨부 도면과 연계하여 기술된 이하의 상세한 설명으로부터 잘 이해될 것이다.
본 발명은 사용자가 XML 기반 마크업 언어를 사용하여 객체의 계층 구조 및 이 객체의 계층 구조 배후의 프로그램적 논리를 지정할 수 있게 해주는 메카니즘을 제공한다. 이렇게 함으로써 객체 모델이 XML로 기술될 수 있게 된다. 그 결과, 마이크로소프트사의 .NET 프레임워크의 CLR(Common Language Runtime)에서의 클래스 등의 확장가능한 클래스가 XML로 액세스될 수 있게 된다. CLR에서의 클래스의 수는 계속하여 증가하고 있으며, 이는 객체 모델의 XML 표현이 동적으로 증가하고 있음을 의미한다. 본 명세서에 기술되어 있는 바와 같이, 상기 메카니즘은 XML 태그의 CLR 객체로의 직접 매핑을 제공하고 또 관련 코드를 상기 마크업(markup)으로 표현하는 기능도 제공한다. 상기 메카니즘은 XML 마크업으로 된 고정 포맷 문서, 적응적 유동 문서, 벡터 그래픽 드로잉, 애플리케이션 사용자 인터페이스 및 콘트롤 등과, 상기한 것의 임의의 조합을 생성하는 데 사용될 수 있다.
동일 참조 번호가 동일 구성요소를 나타내는 도면을 참조하면, 본 발명은 적당한 컴퓨팅 환경에서 구현되는 것으로 예시되어 있다. 꼭 그럴 필요는 없지만, 본 발명은 일반적으로 퍼스널 컴퓨터에 의해 실행되는 프로그램 모듈 등의 컴퓨터 실행가능 명령어와 관련하여 기술되어 있다. 일반적으로, 프로그램 모듈에는 특정의 작업을 수행하거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등이 포함된다. 게다가, 당업자라면 본 발명이 핸드헬드 장치, 멀티-프로세서 시스템, 마이크로프로세서 기반 또는 프로그램가능한 가전 제품, 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터 등을 비롯한 다른 컴퓨터 시스템 구성에서 실시될 수 있음을 잘 알 것이다. 본 발명은 또한 작업이 통신 네트워크를 통해 링크되어 있는 원격 처리 장치에 의해 수행되는 분산 컴퓨팅 환경에서도 실시될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈은 국부 및 원격 메모리 저장 장치 양쪽 모두에 위치할 수 있다.
도 1은 본 발명이 실시될 수 있는 적당한 컴퓨팅 시스템 환경(100)의 일례를 나타낸 것이다. 컴퓨팅 시스템 환경(100)은 적절한 컴퓨팅 환경의 일례에 불과한 것으로서 본 발명의 사용 또는 기능의 범위에 관한 어떤 제한을 암시하고자 하는 것이 아니다. 마찬가지로, 컴퓨팅 환경(100)이 전형적인 운영 환경(100)에 도시된 컴포넌트들 중의 임의의 하나 또는 그 조합에 관하여 어떤 종속성(dependency) 또는 요건(requirement)을 갖는 것으로 해석되어서도 안된다.
본 발명은 많은 다른 범용 또는 전용 컴퓨팅 시스템 환경들 또는 구성에서 동작될 수 있다. 본 발명에서 사용하기에 적합할 수 있는 잘 알려진 컴퓨팅 시스템, 환경, 및/또는 구성의 예로는, 퍼스널 컴퓨터, 서버 컴퓨터, 핸드헬드(hand-held) 또는 랩탑 장치, 멀티프로세서 시스템, 마이크로프로세서-기반 시스템, 셋탑 박스(set top box), 프로그램가능한 가전제품(programmable consumer electronics), 네트워크 PC, 미니컴퓨터, 메인프레임 컴퓨터, 상기의 시스템 또는 장치 중의 임의의 것을 포함하는 분산 컴퓨팅 환경 등이 포함될 수 있지만, 이에 한정되지 않는다.
본 발명은 일반적으로 컴퓨터에 의해 실행되는, 프로그램 모듈과 같은 컴퓨터 실행가능 명령어와 관련하여 기술될 수 있다. 일반적으로, 프로그램 모듈은 특정 작업을 수행하거나 특정의 추상 데이터 유형을 구현하는 루틴, 프로그램, 객체, 컴포넌트, 데이터 구조 등을 포함한다. 본 발명은 또한 통신 네트워크 또는 다른 데이터 전송 매체를 통해 링크된 원격 프로세싱 장치에 의해 작업을 수행하는 분산 컴퓨팅 환경에서 실행될 수 있다. 분산 컴퓨팅 환경에서, 프로그램 모듈 및 그외 데이터는 메모리 저장 장치를 포함하는 국부 및 원격 컴퓨터 저장 매체 내에 위치할 수 있다.
도 1을 참조하면, 본 발명을 구현하기 위한 전형적인 시스템은 컴퓨터(110)의 형태의 범용 컴퓨팅 장치를 포함한다. 컴퓨터(110)의 컴포넌트들로는, 프로세싱 유닛(120), 시스템 메모리(130), 및 시스템 메모리를 포함하는 다양한 시스템 컴포넌트를 프로세싱 유닛(120)에 연결시키는 시스템 버스(121)가 포함될 수 있지만, 이에 한정되는 것은 아니다. 시스템 버스(121)는 다양한 버스 아키텍처 중의 임의의 것을 사용하는 로컬 버스, 주변 버스, 및 메모리 버스 또는 메모리 컨트롤러를 포함하는 몇가지 유형의 버스 구조 중의 임의의 것일 수 있다. 예로서, 이러한 아키텍처는 산업 표준 아키텍처(ISA) 버스, 마이크로 채널 아키텍처(MCA) 버스, 확장 ISA(Enhanced ISA; EISA) 버스, 비디오 일렉트로닉스 표준 어소시에이션(VESA) 로컬 버스, 및 (메자닌(Mezzanine) 버스라고도 하는) 주변 컴포넌트 상호접속(PCI) 버스를 포함하지만, 이에 한정되는 것은 아니다.
컴퓨터(110)는 통상적으로 다양한 컴퓨터 판독가능 매체를 포함한다. 컴퓨터 판독가능 매체는 컴퓨터(110)에 의해 액세스될 수 있는 임의의 이용가능한 매체일 수 있으며, 휘발성 및 비휘발성 매체, 분리형(removable) 및 비분리형(non-removable) 매체를 둘다 포함한다. 예로서, 컴퓨터 판독가능 매체는 컴퓨터 저장 매체 및 통신 매체를 포함할 수 있지만, 이에 한정되는 것은 아니다. 컴퓨터 저장 매체는 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 또는 다른 데이터와 같은 정보의 저장을 위한 임의의 방법 또는 기술로 구현되는 휘발성 및 비휘발성, 분리형 및 비분리형 매체를 모두 포함한다. 컴퓨터 저장 매체는 RAM, ROM, EEPROM, 플래쉬 메모리 또는 기타 메모리 기술, CD-ROM, DVD(digital versatile disk) 또는 기타 광학 디스크 저장장치, 자기 카세트, 자기 테이프, 자기 디스크 저장장치 또는 기타 자기 저장장치, 또는 컴퓨터(110)에 의해 액세스될 수 있고 원하는 정보를 저장하는 데 사용될 수 있는 임의의 기타 매체를 포함할 수 있지만, 이에 한정되지 않는다. 통신 매체는 통상적으로 반송파 또는 기타 전송 메카니즘 등의 변조된 데이터 신호에 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈, 또는 다른 데이터를 구현하며, 임의의 정보 전달 매체를 포함한다. "변조된 데이터 신호"라는 용어는 신호 내에 정보를 인코딩하도록 그 신호의 특성 중 하나 이상이 설정되거나 변환된 신호를 의미한다. 예로서, 통신 매체는 유선 네트워크 또는 직접 유선 접 속 등의 유선 매체와, 음향, RF, 적외선 및 기타 무선 매체 등의 무선 매체를 포함하지만, 이에 한정되지 않는다. 상술한 것들 중의 임의의 조합도 컴퓨터 판독가능 매체의 범위 내에 포함되어야 한다.
시스템 메모리(130)는 ROM(131) 및 RAM(132) 등의 휘발성 및/또는 비휘발성 메모리의 형태의 컴퓨터 저장 매체를 포함한다. 시동중과 같은 때에 컴퓨터(110) 내의 구성요소들간에 정보를 전송하는 것을 돕는 기본 루틴을 포함하는 기본 입출력 시스템(133; BIOS)은 일반적으로 ROM(131)에 저장된다. RAM(132)은 일반적으로 프로세싱 유닛(120)에 의해 즉시 액세스될 수 있는 것 및/또는 프로세싱 유닛(120)에 의해 현재 작동되고 있는 것인 프로그램 모듈 및/또는 데이터를 포함한다. 예로서, 도 1에는 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)가 도시되어 있지만, 이에 한정되는 것은 아니다.
컴퓨터(110)는 또한 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체도 포함할 수 있다. 단지 예로서, 도 1에는 비분리형 비휘발성 자기 매체로부터 판독하거나 그 자기 매체에 기록하는 하드 디스크 드라이브(141), 분리형 비휘발성 자기 디스크(152)로부터 판독하거나 그 자기 디스크에 기록하는 자기 디스크 드라이브(151), 및 CD-ROM 또는 기타 광학 매체 등의 분리형 비휘발성 광학 디스크(156)로부터 판독하거나 그 광학 디스크에 기록하는 광학 디스크 드라이브(155)가 도시되어 있다. 전형적인 운영 환경에서 사용될 수 있는 다른 분리형/비분리형, 휘발성/비휘발성 컴퓨터 저장 매체는 자기 테이프 카세트, 플래쉬 메모리 카드, DVD(Digital versatile disk), 디지털 비디오 테이프, 반도체 RAM, 반도체 ROM 등을 포함하지만 이에 한정되지 않는다. 하드 디스크 드라이브(141)는 일반적으로 인터페이스(140)와 같은 비분리형 메모리 인터페이스를 통해 시스템 버스(121)에 접속되고, 자기 디스크 드라이브(151) 및 광학 디스크 드라이브(155)는 일반적으로 인터페이스(150)와 같은 분리형 메모리 인터페이스에 의해 시스템 버스(121)에 접속된다.
앞서 기술되고 도 1에 도시된 드라이브 및 그 관련 컴퓨터 저장 매체는 컴퓨터(110)에 컴퓨터 판독가능 명령, 데이터 구조, 프로그램 모듈 및 기타 데이터의 저장을 제공한다. 도 1에서, 예를 들어, 하드 디스크 드라이브(141)는 운영 체제(144), 애플리케이션 프로그램(145), 기타 프로그램 모듈(146), 및 프로그램 데이터(147)를 저장하는 것으로 도시되어 있다. 이들 컴포넌트는 운영 체제(134), 애플리케이션 프로그램(135), 기타 프로그램 모듈(136), 및 프로그램 데이터(137)와 동일한 것이거나 그와 다른 것일 수 있음에 유의한다. 운영 체제(144), 애플리케이션 프로그램(145), 다른 프로그램 모듈(146), 및 프로그램 데이터(147)는 최소한 이들이 서로 다른 복사본(different copies)임을 나타내기 위하여 다른 번호를 부여하였다. 사용자는 일반적으로 마우스, 트랙볼, 또는 터치 패드라 불리우는 포인팅 장치(161) 및 키보드(162)와 같은 입력 장치를 통해 컴퓨터 시스템(110)에 명령 및 정보를 입력할 수 있다. (도시되지 않은) 기타 입력 장치로는 마이크, 조이스틱, 게임 패드, 위성 안테나, 스캐너 등이 있을 수 있다. 이들 입력 장치 및 그외의 입력 장치는 시스템 버스(121)에 연결된 사용자 입력 인터페이스(160)를 통해 종종 프로세싱 유닛(120)에 접속되지만, 병렬 포트, 게임 포트 또는 유니버설 시리얼 포트(USB)와 같은 기타 인터페이스 및 버스 구조에 의해 접속될 수 있다. 모니터(191) 또는 다른 유형의 디스플레이 장치도 비디오 인터페이스(190) 등의 인터페이스를 통해 시스템 버스(121)에 접속되어 있다. 모니터 외에도, 컴퓨터는 또한 출력 주변 인터페이스(195)를 통해 접속될 수 있는 스피커(197) 및 프린터(196) 등의 기타 주변 출력 장치도 포함할 수 있다.
컴퓨터(110)는 원격 컴퓨터(180)와 같은 하나 이상의 원격 컴퓨터로의 논리적 접속을 이용하여 네트워크화된 환경에서 운영될 수 있다. 원격 컴퓨터(180)는 퍼스널 컴퓨터, 서버, 라우터, 네트워크 PC, 피어(peer) 장치, 또는 기타 통상의 네트워크 노드일 수 있으며, 컴퓨터(110)에 관하여 상술한 구성요소 중 다수 또는 그 모두를 일반적으로 포함할 수 있지만, 도 1에는 메모리 저장 장치(181)만이 도시되어 있다. 도시된 논리적 접속은 근거리 통신망(LAN; 171) 및 원거리 통신망(WAN; 173)을 포함하지만, 그 외의 네트워크/버스도 포함할 수 있다. 이러한 네트워킹 환경은 사무실, 기업 규모의 컴퓨터 네트워크(enterprise-wide computer network), 인트라넷, 및 인터넷에서 일반적인 것이다.
LAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(110)는 네트워크 인터페이스 또는 어댑터(170)를 통해 LAN(171)에 접속된다. WAN 네트워킹 환경에서 사용되는 경우, 컴퓨터(110)는 일반적으로 인터넷 등의 WAN(173)을 통해 통신을 설정하기 위한 모뎀(172) 또는 기타 수단을 포함한다. 내장형 또는 외장형일 수 있는 모뎀(172)은 사용자 입력 인터페이스(160) 또는 기타 적절한 메카니즘을 통해 시스 템 버스(121)에 접속될 수 있다. 네트워크화된 환경에서, 컴퓨터(110)에 관하여 도시된 프로그램 모듈 또는 그 일부분은 원격 메모리 저장 장치에 저장될 수 있다. 예로서, 도 1에서는 원격 애플리케이션 프로그램(185)이 메모리 장치(181)에 상주하는 것으로 도시되어 있지만, 이에 한정되는 것은 아니다. 도시된 네트워크 접속은 전형적인 것이며, 컴퓨터들간의 통신 링크를 구축하는 그 외의 수단이 사용될 수 있음을 잘 알 것이다.
이하의 설명에서, 달리 언급하지 않는 한, 본 발명은 하나 이상의 컴퓨터에 의해 수행되는 동작의 도식적 표현 및 작용을 참조하여 기술될 것이다. 그 자체로서, 이러한 작용 및 동작은 때로는 컴퓨터로 실행되는 것을 말하는 것으로서 데이터를 구조화된 형태로서 표현하는 전기 신호를 컴퓨터의 처리 장치에 의해 조작하는 것을 포함한다. 이러한 조작은 데이터를 변환하거나 또는 그 데이터를 컴퓨터의 메모리 시스템 내의 장소에 보관하며, 이렇게 함으로써 당업자가 잘 알고 있는 방식으로 컴퓨터의 동작을 재구성하거나 다른 방식으로 변경하게 된다. 데이터가 보관되는 곳인 데이터 구조는 메모리의 물리적 장소로서 그 데이터의 포맷에 의해 정의된 특정의 프로퍼티(property)를 갖는다. 그렇지만, 본 발명에 대해 이상에서와 같이 기술하고 있지만, 이후에 기술되는 여러가지 작용 및 동작이 하드웨어로도 실시될 수 있음을 당업자라면 잘 알고 있는 바와 같이, 이는 한정하려는 것이 아니다.
이미 언급한 바와 같이, .NET 프레임워크의 CLR에서의 확장가능한 클래스는 본 발명에서 XML로 액세스될 수 있다. 꼭 그럴 필요는 없지만, .NET 프레임워크에 대한 간략한 개요는 본 발명에 의해 제공되는 이점을 보다 잘 이해하는 데 유익할 것이다. 이제 도 2를 참조하면, .NET 프레임워크(200)은 CLR(202), 프레임워크 클래스 라이브러리(204), 사용자 인터페이스(206), 그리고 웹 서비스 및 애플리케이션(208)을 포함한다. .NET 프레임워크는 운영 체제(134) 등의 머신의 운영 체제 상에 상주한다.
사용자 인터페이스(206)와 웹 서비스 및 애플리케이션(208)은 파일 액세스, XML 지원, 및 서비스를 비롯한 일반적인 입/출력을 위한 것이다. 사용자 인터페이스(206)와 웹 서비스 및 애플리케이션(208)은 HTTP로부터의 웹 기술 및 서비스를 HTML에 노출시키고, 웹 페이지 및/또는 종래의 윈도즈 기반 사용자 인터페이스를 작성하기 위한 사용자 인터페이스 요소를 제공하며, ASP.NET 및 많은 다른 서비스를 노출시킨다.
CLR(202)은 메모리를 관리하는 일, 쓰레드 및 프로세스를 기동 및 정지시키는 일, 그리고 보안 정책을 시행하는 일을 맡고 있다. CLR(202)은 프로그래밍 언어에 독립적인 데이터 타입의 개념을 제공하는 공통 타입 시스템(common type system)을 제공하며, 이에 따라 여러가지 프로그래밍 언어가 .NET 프레임워크에서 데이터 및 코드를 공유할 수 있게 된다. CLR(202)은 또한 MSIL(Microsoft intermediate language; 마이크로소프트 중간 언어) 코드를 번역하고 이를 특정의 머신의 시스템 프로세서 상에서 처음부터 그 머신에서 컴파일된 것처럼(natively) 실행하기 위해 그 머신에 맞게 최적화시키는 JIT(just-in-time) 컴파일러도 갖는다.
프레임워크 클래스 라이브러리는 여러 클래스를 포함한다. 클래스는 객체가 수행할 수 있는 동작(메소드, 이벤트, 또는 프로퍼티)을 정의하고, 그 객체의 상태를 보유하는 값(필드)을 정의한다. 클래스가 일반적으로 정의와 구현 양쪽 모두를 포함하지만, 클래스는 아무런 구현도 갖지 않는 하나 이상의 멤버를 가질 수 있다. 공통 타입 시스템(CTS)은 런타임 시에 타입을 정의, 사용, 및 관리하는 방법을 정의한다. .NET 프레임워크 타입은 계층 구조를 암시하는 점 구문 이름 부여 체계(dot systax naming scheme)를 사용한다. 이 기술은 관계된 타입들을 네임스페이스로 그룹화하며, 따라서 그 타입이 보다 용이하게 검색 및 참조될 수 있다. 맨 오른쪽 점까지의 전체 이름의 첫번째 부분이 네임스페이스 이름(namespace name)이다. 그 이름의 마지막 부분이 타입 이름(type name)이다. 예를 들어, System.Collections.ArrayList는 ArrayList 타입을 나타내며, 이는 System.Collections 네임스페이스에 속해 있다. System.Collections 내의 타입들은 객체의 컬렉션(collection)을 조작하는 데 사용될 수 있다. 클래스가 이와 같이 구성되어 있을 때, 네임스페이스가 어떤 목적을 위한 것인지와 어떤 클래스 기능(class functionality)을 포함하게 될지를 이해하기가 쉽다. 예를 들어, System.Web.Services는 그 클래스가 어떤 종류의 웹 기능에 대한 서비스를 제공하게 될 것임을 시사한다. 이와 마찬가지로, System.Windows.Shapes가 형상에 대한 서비스를 제공하는 것이라고 단정하는 것도 어렵지 않다. 네임스페이스는 클래스를 용이하게 해독할 수 있는 통합된 클래스로 논리적으로 그룹화하는 것 이외에도, 사용자가 그 자신의 네임스페이스를 기존의 네임스페이스로부터 유도할 수 있다는 점에서 확장성이 있다. 예를 들어, System.Web.UI.ACMECorp는 System.Web.UI로부터 유도되어 커스텀 UI 엘리먼트(custom UI element)를 제공할 수 있다. 프레임워크 이름공간은 솔루션을 작성하여 실행시키는 데 필요한 "시스템" 또는 기본 기능(base functionality) 및 서비스를 제공한다.
이하의 설명에서, 본 발명의 특징과 XML을 구별하기 위해 xaml 명명법(nomenclature)을 사용하여 본 발명에 대해 기술할 것이다. 이제, 도 3을 참조하면, 본 발명은 CLR 개념(300)의 XML(310)으로의 직접 매핑을 제공한다. 네임스페이스(302)는 리플렉션(reflection)이라는 CLR 개념을 사용하여 xmlns 선언(312)을 통해 찾아낸다. 클래스(304)는 XML 태그(314)에 직접 매핑된다. 프로퍼티(306) 및 이벤트(308)는 속성(316)에 직접 매핑된다. 사용자는 이러한 매핑을 사용하여 XML 마크업 파일 내의 임의의 CLR 객체에 대한 계층 구조 트리를 지정할 수 있다.
xaml 파일은 .xaml 확장자와 application/xaml+xml의 mediatype(미디어 타입)을 갖는 xml 파일이다. xaml 파일은 일반적으로 xmlns 속성을 사용하여 네임스페이스를 정의하는 하나의 루트 태그(root tage)를 갖는다. 특정의 루트 태그가 필요한 것은 아니며, 따라서 사용자는 여러가지 CLR 관련 태그를 루트로서 가질 수 있게 된다. 네임스페이스는 다른 타입의 태그에 지정될 수도 있다.
디폴트 네임스페이스 세트(a default set of namespaces)가 사용된다. 일 실시예에서, 5개의 네임스페이스가 사용된다. 이들 네임스페이스로는 System.Windows(엘리먼트에 대한 클래스를 가짐), System.Windows.Controls(버튼, 패널, 텍스트 패널 등의 콘트롤 엘리먼트에 대한 클래스를 가짐), System.Windows.Documents(문서 중심 텍스트 렌더링 엘리먼트에 대한 클래스를 가짐), System.Windows.Shapes(윈도즈 벡트 그래픽(Windows Vector Graphics) 엘리먼트에 대한 클래스를 가짐), 및 System.Windows.Controls.Atoms(스크롤 뷰어 등의 블록 엘리먼트를 제작하기 위한 클래스를 가짐)가 있으며, 이들은 xmlns 선언에서 지정된다. 다른 네임스페이스도 사용될 수 있으며, 디폴트 세트는 애플리케이션으로 구성가능하다(application configurable).
앞서 지적한 바와 같이, xaml 파일 내의 태그는 일반적으로 CLR 객체로 매핑된다. 태그는 엘리먼트, 복합 프로퍼티(compound property), 정의 또는 자원(resource)일 수 있다. 엘리먼트는 일반적으로 런타임 중에 인스턴스화되어(instantiate) 객체의 계층 구조를 형성하는 CLR 객체이다. 이들 엘리먼트는 그 계층 구조에 존재한다. 어떤 엘리먼트는 필요할 경우에만 인스턴스화된다. 엘리먼트는 .NET 프레임워크와 부합되는 방식으로 대문자로 시작한다. 일 실시예에서, 5개의 1차 엘리먼트 세트(primary set of element)가 있다. 이들은 Panels, Controls, DocumentElements, Shapes 및 Decorators이다. Panels은 페이지 상의 엘레먼트가 어떻게 배열되는지를 정의하는 데 사용된다. Panels의 일례로는 TextPanel, DockPanel, Canvas, FlowPanel, 및 Table이 있다. Controls는 대화 경험을 제공한다. Controls의 일례로는 Button, RadioButton 및 ListBox가 있다. DocumentElements는 유입 텍스트(flowing text)를 렌더링 및 포맷하는 데 사용된다. 이들 엘리먼트는 다른 엘리먼트를 포함할 수 있는 임의의 엘리먼트 내부 에 위치될 수 있다. DocumentElements의 일례로는 Paragraph, Section, Bold, 및 Italic이 있다. Shapes는 Vector Graphics의 엘리먼트이다. Shapes의 일례로는 Ellipse, Line, 및 Path가 있다. Decorators는 단지 하나의 자식(child)을 가질 수 있는 것을 제외하고는 Panel 엘리먼트와 유사하다. Decorators의 일례로는 Border 및 Glow가 있다.
복합 프로퍼티 태그(compound property tag)는 부모 태그에 프로퍼티를 설정하는 데 사용되며, 이하에서 보다 상세히 논의된다. 런타임 중에, 복합 프로퍼티 태그는 계층 구조 트리에 엘리먼트로서 있지 않을 것이다. 정의 태그는 페이지에 코드를 부가하고 자원을 정의하는 데 사용된다. 정의 태그는 xaml 페이지에서나 xaml 페이지의 컴포넌트 내부에서 <def:xyz>(단, xyz는 정의되는 아이템임)로서 식별된다. 예를 들어, <def:Code>는 페이지에 코드를 부가하는 데 사용되고, <def:Resources>는 하나 이상의 재사용가능한 자원을 정의한다. <def:Resources> 태그 내부에 나타나는 태그는 임의의 엘리먼트(Element) 또는 임의의 CLR 객체로 매핑될 수 있다. 자원 태그는 트리를 자원으로 지정하는 것만으로 객체의 트리를 재사용할 수 있게 해준다. 정의 태그는 또한 다른 태그 내에서 xmlns 속성으로서 정의될 수 있다.
전술한 바와 같이, 속성은 클래스와 관련된 프로퍼티 및 이벤트로 매핑된다. 어떤 속성은 실제의 CLR 클래스와 관련되어 있지 않으며, 따라서 정의 태그는 또한 이들 속성을 프로퍼티나 이벤트에 매핑되는 속성과 구별하는 데도 사용된다. 이하의 표는 이들 속성을 열거한 것이다.
속성 설명 값 타입 허용된 값
def:Language 코드를 컴파일하는 데 사용되는 언어를 지정한다. 이것은 XAML 파일의 루트 태그의 속성이다. 문자열 C# VB C++ JScript 또는 다른 언어
def:Class 마크업 서브클래스 정의에서 서브클래스의 이름을 지정한다. 문자열 단지 클래스 이름이나 네임스페이스 그리고 클래스 이름
기본적인 네임스페이스에서 xmlns 속성으로의 매핑, 클래스 이름에서 태그 이름으로의 매핑, 그리고 프로퍼티 및 이벤트에서 속성으로의 매핑과 정의된 속성에 대해 기술하였으므로, 본 발명이 xaml 파일을 파싱함에 있어서 취하는 단계들에 대해 기술할 것이다. 이후부터 xaml 파서(parser)라고 부르게 될 본 발명의 파서는 루트 태그에 의거하여 태그를 찾기 위해 어느 CLR 어셈블리 및 네임스페이스를 검색해야 하는지를 결정한다. 전형적인 루트 태그는 이하의 형태를 갖는다.
<TextPanel xmlns="http://microsoft.com/xaml/2004">
Hello World
</TextPanel>
xaml 파서는 xmlns 속성에 의해 지정된 URL 디렉토리에서 네임스페이스 정의 파일을 찾는다. 예를 들어, 상기한 전형적인 루트 태그에서, xaml 파서는 http://microsoft.com/xaml/2004/xmlns.definition에서 정의 파일을 검색한다.
네임스페이스 정의가 xmlns 위치에 없는 시나리오에서, 일 실시예에서는 <?Mapping?> 태그가 사용된다. 어셈블리 내에 구축되어 있는 커스텀 컴포넌트(custom component)의 경우, 태그는 이하의 형태를 갖는다.
<?Mapping xmlns="foo" Namespace="ACME.Widgets" Assembly="acme" ?>
사용자가 구현을 제공하는 경우 다른 엔티티(entity)(예를 들면, w3c.org)에 의해 제어되고 있는 사이트를 xmlns가 가리키고 있는 것인 네임스페이스에 있어서, 태그는 이하의 형태를 갖는다.
<?Mapping xmlns="http://www.w3c.org/2000/svg"
xmlnsdefinition="http://www.acme.com/svg/2000/smlns.definition ?>
네임스페이스는 또한 다음 형태, 즉 네임스페이스 "foo"를 정의하는 xmlns:foo=http://www.ACME/foo를 사용하여 지정될 수도 있다. 전술한 바와 같이, 네임스페이스는 또한 다른 타입의 태그에서 지정될 수도 있다. 예를 들어, 네임스페이스는 이하의 MyCoolButton 태그에서 지정된다.
<TextPanel xmlns="http://microsoft.com/xaml/2005" xmlns:def="Definition">
xmlsn:Language="C#"
<MyCoolButton xmlns="http://Acme.Com/MyControls/2005">
</MyCoolButton>
</TextPanel>
네임스페이스 정의 파일은 어셈블리 및 그의 설치 경로의 이름과, CLR 네임스페이스의 리스트를 제공한다. 전형적인 정의 파일은 다음과 같다.
<Xmlns Name="Microsoft Xaml 2005">
<Schema Uri="http://microsoft.com/xaml/2005/xaml2005.xsd"/>
<Assembly Name="System.Windows" Version="1.0.0.0"/>
<Assembly Name="System.Windows.Foo" Version="1.0.0.0"/>
<ClrNamespace Name="System.Windows"/>
<ClrNamespace Name="System.Windows.Controls"/>
<ClrNamespace Name="System.Windows.Documents"/>
<ClrNamespace Name="System.Windows.Shapes"/>
</Xmlns>
xaml 파서가 새로운 xmlns 정의 파일을 만나게 되면, 그 정의 파일은 페치되어 로컬 저장된다.
파서는 태그를 만나게 되면, 태그의 xmlns와 그 xmlns에 대한 xmlns 정의 파일을 사용하여 태그가 어느 CLR 클래스를 참조하는지를 결정한다. 예를 들어, 태그가 <Text xmlns="...">인 경우, 파서는 정의 파일에 제공되는 네임스페이스(들) 내에서 텍스트라고 하는 클래스를 검색한다. 파서는 어셈블리 및 네임스페이스가 정의 파일에서 지정되어 있는 순서로 검색을 행한다. 파서는 일치하는 것을 찾으면 그 클래스의 객체를 인스턴스화한다.
xaml 태그 내의 속성은 2가지 방법 중 하나로 사용된다. 속성은 프로퍼티를 설정하거나 이벤트 핸들러(event handler)를 후킹(hook up)하거나 할 수 있다. 예를 들어, xaml 파서는 이하의 태그를, 텍스트, 백그라운드, 그리고 클릭 프로퍼티 및/또는 이벤트를 갖는 Button이라고 하는 클래스로서 해석한다.
<Button Text="OK" Background="Red" Click="RunHandler" ID="b1">
파서는 Button 클래스의 프로퍼티 부분에서 텍스트(text), 백그라운드(background), 및 클릭(click) 이름을 검색한다. 프로퍼티 부분에 이름 이 없는 경우, 파서는 이벤트 부분에서 그 이름을 찾는다.
상기 일례에서, 파서는 Text 및 Background가 프로퍼티이고, Click이 이벤트인 것으로 결정한다. 텍스트 문자열 "OK"가 설정된다. 텍스트 문자열을 설정하는 것보다 더 복잡한 프로퍼티 및 이벤트의 경우, 문자열로의 변환 및 그로부터의 변환을 행하는 객체를 생성하기 위해 CLR 타입 변환기(type converter)가 사용된다. 예를 들어, 프로퍼티 Background는 CLR 타입의 type Paint인 것으로 결정된다. type Paint에 대한 CLR 타입 변환기는 문자열 "Red"를 type Paint의 객체로 변환하는 데 사용된다. 문자열은 Button의 백그라운드 색상의 값으로서 설정된다. 이와 마찬가지로, Click 이벤트는 RunHandler 메소드에 연결(wire up)되며, ID 프로퍼티는 b1으로 설정된다.
프로퍼티는 단순 속성(simple attribute), 문자열 값을 갖는 복합 프로퍼티(compound property), 또는 객체를 값으로서 갖는 복합 프로퍼티로서 설정될 수 있다. 단순 속성은 이하의 형태, 즉 <Button Background="Blue"/>를 갖는다. 이 경우, "Blue"는 문자열을 type Paint의 객체(Background 프로퍼티의 타입)로 변환하는 방법을 알고 있는 타입 변환기를 호출함으로써 해석된다. 이어서, 그것은 Button의 Background 프로퍼티의 값으로서 설정되어야만 한다. 속성값이 *으로 시작하면, 그 속성값은 리터럴 값(literal value)을 지정하지 않고 그 대신에 그 값을 새로 인스턴스화된 객체 또는 기존의 객체와 동일하게 설정하게 된다.
문자열 값을 갖는 복합 프로퍼티는 이하의 형태를 갖는다.
<Button>
<Button.Background> Blue </Button.Background>
</Button>
그 안에 마침표를 갖는 태그는 그 태그가 프로퍼티에 대한 참조임을 말해준다. 파서가 부모 태그의 태그 이름으로 시작하여 그 뒤에 마침표가 오는 태그(예를 들면,"Button.Background" 태그에서 "Button.")를 보게 되면, 파서는 그 마침표 이후의 이름에 의해 지정된 프로퍼티(예를 들어, "Button.Background" 태그에서 "Background")를 검색한다. 이 경우, "Blue"는 문자열을 type Paint의 객체(Background 프로퍼티의 타입)로 변환하는 방법을 알고 있는 타입 변환기를 호출함으로써 해석되어야만 한다. 이어서, 그것은 Button의 Background 프로퍼티의 값으로서 설정되어야만 한다.
다른 클래스로부터의 프로퍼티는 또한 태그에 선언될 수도 있다. 예를 들어, 이하의 태그,
<TextBox Button.Background="Blue">
는 속성 Button.Background가 TextBox 클래스와 다른 클래스로 매핑됨을 나타낸다. 파서는 마침표를 보고서 그 마침표 이전의 이름에 의해 지정된 클래스(예를 들면, "Button")에서 그 마침표 이후의 이름에 의해 지정된 프로퍼티(예를 들어, "Button.Background"에서의 "Background")를 검색한다.
객체를 값으로서 갖는 복합 프로퍼티는 이하의 형태를 갖는다.
<Button>
<Button.Background>
<HorizontalGradient StartColor="Blue" EndColor="White" />
</Button.Background>
</Button>
이 경우, CLR HorizontalGradient 객체는 생성된 다음에 Button의 Background 프로퍼티의 값으로서 설정된다.
값에 대한 객체만이 아닌 그 이상을 제공하기 위해 복합 프로퍼티 구문이 사용될 수 있다. 예를 들어, Animation 또는 어떤 데이터에 대한 Bind가 달성될 수 있다.
<Button>
<Background>
<ColorAnimation FromColor="Blue" ToColor="White" Duration="2" />
</Background>
<Text>
<Bind DataSource="*Resources.Customers" Path="LastName" />
</Text>
</Button>
이들 경우에서, 태그는 특징(feature)을 제공하기에 적절한 시스템을 셋업할 수 있는 기능을 Animation 또는 Bind에 부여하는 데 사용된다. 예를 들어, xaml 파서는 Animation 객체를 생성한 후에, 그 객체가 IApplyValue라고 하는 인터페이스를 구현하였는지를 알아보기 위해 그 객체에 질의한다. 구현한 경우, xaml 파서 는 ColorAnimationObject.ApplyValue(elementReference, BackgroundPropertyID)를 호출한다. ColorAnimationObject는 이어서 애니메이션을 연결(wire up)한다. 상기 객체가 상기 인터페이스를 지원하지 않는 경우, xaml 파서는 Button의 Background 프로퍼티를 ColorAnimationObject로 설정한다.
앞서 언급한 바와 같이, 속성값이 *로 시작하는 경우, 그 속성은 그 값을 새로 인스턴스화된 객체 또는 기존의 객체와 동일하게 설정한다. xaml 파서는 * 이후의 이름을 찾고 * 이후의 이름의 CLR 타입을 찾는다. 예를 들어, <Button Background = "*HorizontalGradient(Start=Red End=Blue)"> 태그에 있어서, 파서는 괄호 이전의 이름(HorizontalGradient)을 결정하고, 이전의 xmlns 설정에 의해 확립된 현재의 네임스페이스에서 그 CLR 타입을 검색한다. 파서는 괄호 이후의 아이템을 속성 및 값으로서 취급한다(예를 들어, Start는 속성이고 Red는 그 속성의 값이다). "*" 이스케이프 문자(escape character)를 사용하는 다른 일례가 이하에 있다. 이들 경우 모두에서, 값은 한번 설정될 것이다. 그것은 이 프로퍼티와 어떤 객체 사이의 관계를 유지시키기 위해 표현식(expression)이나 바인딩(binding)을 설정하지 않는다. 전방 참조(forward referencing)가 허용된다. 트리 생성 동안, 참조된 객체가 아직 존재하지 않는 경우, 그 프로퍼티의 설정은 그 객체가 존재할 때까지 또는 트리가 완전히 생성될 때까지 지연된다.
<DockPanelID="root" Background="Blue">
<def:Resources>
<HorizontalGradient def:Resource="hgl" StartColor="Blue" EndColor="White" />
</def:Resources>
<!--Reference to an another element -->
<HyperLink Target="*frm1">Link</HyperLink>
<Frame ID="frm1"/>
<!--Reference to a property on another element-->
<FlowPanel Background="*root.Background"/>
<!--Reference to a page level resource - both are equivalent since root is "this"-->
<FlowPanel Background="*Resource.hgl"/>
<FlowPanel Background="*root.Resource.hgl"/>
<!--Reference to the application object - both are equivalent since root is "this"-->
<FlowPanel Property="*App"/>
<FlowPanel Property="*root.App"/>
<!--Reference to a property on the application object-->
<FlowPanel Property="*App.Foo"/>
<!--Reference to an application level resource-->
<FlowPanel Property="*App.Resources.Foo"/>
</DockPanel>
프로그래밍 언어는 2곳에서 .xaml 페이지와 관련될 수 있다. 이들 위치는 .xaml 파일 및 관련된 코드-비하인드 파일(code-behind file)에 있다. 코드-비하인드 파일의 이름은 일반적으로 .xaml 파일과 동일하게 부여되며, 그 끝에 프로그래밍 언어의 통상의 확장자가 첨부된다. 예를 들어, .xaml.cs는 C#에 대해 사용되고, .xaml.vb는 VB에 사용되며, .xaml.js는 Jscript에 사용된다. xmlns:def="Definition"의 네임스페이스는 코드를 페이지에 부가하는 데 필요한 태그를 사용하기 위해 루트 엘리먼트에 부가된다. 사용자는 def:Language 속성을 페이지의 루트 엘리먼트에 부가함으로써 xaml 페이지와 관련된 프로그래밍 언어를 선택한다. 예를 들어, 이하의 태그는 정의 및 언어 속성이 루트 엘리먼트에 어떻게 부가되는지를 나타낸다.
<DockPanel xmlns="http://microsoft.com/xaml/2005"
xmlns:def="Definition" xmlns:Language="C#">
">", "<" 및/또는 "&" 문자를 포함하는 xaml 파일 내에 코드를 부가하기 위해, XML에 정의된 CDATA 부분(section)은 <def:Code> 부분 내에 있을 필요가 있다. 이것의 일례가 아래에 있다(유의할 점은 이 일례에서 포함된 코드가 ">", "<" 및/또는 "&" 문자를 사용하지 않기 때문에 CDATA를 각괄호로 묶을 필요가 없다는 것이다).
<TextPanel xmlns="http://microsoft.com/xaml/2005"
xmlns:def="Definition" xmlns:Language="C#">
<Button ID="button1" Click="clicked">Press this</Button>
<def:Code><![CDATA[
void clicked(Element target, ClickEventArgs args)
]]></def:Code>
</TextPanel>
코드-비사이드 파일(code-beside file) 내의 코드를 지정하기 위해, 소스 속성(source attribute)이 사용된다. 소스 속성은 xaml 파일의 코드 비하인드(code behind)에 대한 URI를 제공한다. URI는 상대적이거나 절대적일 수 있다. 이하에, URI 및 간단한 코드 비사이드 파일을 지정하는 일례가 있다.
<TextPanel xmlns="http://microsoft.com/xaml/2005"
xmlns:def="Definition" xmlns:Language="C#">
<Button ID="button1" Click="clicked">Press this</Button>
<def:Code Source="Simple.xaml.cs"/>
</TextPanel>
이하에, 간단한 코드 비사이드 파일이 있다.
Simple.xaml.cs
namespace MyApp{
using System;
using System.Windows;
//more usings here
partial class Simple:Page {
void clicked(Object target, ClickEventArgs args)
{
button1.Text="Hello World";
}
}
}
xaml 파서는 또한 ILiteralContent라고 하는 특징을 지원한다. ILiteralContent를 구현하는 객체에 있어서, xaml 파서는 그 객체에 대한 태그를 문자열로서 취급하여 그 태그를 파싱하지 않는다. 예를 들어, Public class FooObject가 ILiteralContent를 구현하는 경우, xaml 파서가 태그 <FooObject>"I am a string"</FooObject>를 만날 때마다, 그 파서는 FooObject의 인스턴스를 생성하고 <FooObject> 태그 내의 데이터(예를 들어, "I am a string")를 새로 생성된 FooObject로 전달한다.
요약하면, 루트 태그 또는 엘리먼트/객체가 직접 포함하고 있는 태그를 파싱할 때 이하의 규칙이 사용된다. 도 4를 참조하면, 태그가 스키마 위치(schema location)를 지정하는 xmlns 속성을 가지고 있는 경우, xmlns 속성과 관련된 어셈블리/네임스페이스를 갖는 정의 파일을 찾아내어 로컬 저장한다(단계 400). 어셈블리/네임스페이스는 일반적으로 문서의 루트 태그 또는 매핑 태그에 있는 스키마의 URL을 사용하여 찾아낸다. 태그가 엘리먼트 태그인 경우, 파서는 엘리먼트가 지정되어 있는 xml 네임스페이스에 기초하여 적절한 어셈블리/네임스페이스 세트에서 그 이름의 클래스를 찾아서 그 클래스의 객체의 인스턴스를 인스턴스화한다(단 계 402). 클래스 이름이 발견되지 않은 경우, xaml 파서는 부모(containing parent)가 그러한 이름의 프로퍼티를 가지고 있는지를 알아보기 위한 검사를 한다. 그것이 부모 엘리먼트(containing element)의 프로퍼티인 경우, xaml 파서는 복합 프로퍼티 규칙(compound property rule)을 사용하여 그 태그의 내용을 파싱한다. 태그가 속성 태그인 경우, 그 속성과 관련된 프로퍼티 또는 이벤트가 설정된다(단계 404). 속성값이 *로 시작하는 경우, 속성은 리터럴 값을 지정하지 않고 그 대신에 그 값을 새로 인스턴스화된 객체 또는 기존의 객체와 동일하게 설정한다. 태그는 부모 태그에 대한 프로퍼티를 설정하는 데 사용되는 태그를 가질 수 있다. 이 태그가 복합 프로퍼티(compound property)이다. 태그가 복합 프로퍼티인 경우, 복합 규칙을 따른다(단계 406). 이 규칙은 다음과 같다. xaml 파서는 복합 프로퍼티가 문자열인지를 결정한다. 내용이 문자열인 경우, xaml 파서는 설정되어 있는 프로퍼티의 해당 타입에 대한 타입 변환기를 호출한다. 부모 태그의 내용이 다른 태그인 경우, xaml 파서는 객체를 표준형(normal)으로서 인스턴스화한다. xaml 파서는 객체를 인스턴스화한 후에, 이를 부모 객체에 대한 프로퍼티의 값으로 설정한다. 그 태그에 대한 xmlns가 "def:"인 경우, xaml 파서는 이하에 기술하는 바와 같이 한 세트의 내장된 의미(built-in meaning)를 사용한다(단계 408). 파일에 있는 그 다음 태그가 파싱되고(단계 410), xaml 파서가 xaml 파일의 종료 루트 태그(end root tag)를 검출할 때까지 각 태그에 대해 단계 400 내지 단계 408가 반복된다.
이상으로부터 알 수 있는 바와 같이, 본 발명은 마크업 태그를 사용하여 XML 기반의 파일에서 객체 모델을 표현할 수 있게 해주는 메카니즘을 제공한다. 객체 모델을 마크업 태그로서 표현할 수 있게 해주는 이러한 기능은 벡터 그래픽 드로잉, 고정 포맷 문서, 적응적 유동 문서, 및 애플리케이션 UI를 생성하는 데 사용될 수 있다. 이들 벡터 그래픽 드로잉, 고정 포맷 문서, 적응적 유동 문서, 및 애플리케이션 UI는 비동기적으로 또는 동기적으로 생성될 수 있다. 이것은 객체의 트리를 생성하기 위해 이들 아이템이 마크업으로부터 작성될 수 있다는 이점을 제공한다.
고정 포맷 문서란 문서 페이지의 수 및 크기와 각 페이지 상에서의 객체의 배치를 소정의 장치 독립적인 방식으로 명시적으로 정의하는 문서를 말한다. 이것은 문서를 보는 데 사용되는 구현 시스템에 상관없이 동일 페이지를 렌더링하게 되는 포맷으로 문서를 생성 및 공유할 수 있게 해주는 기능을 사용자에게 제공한다. 일 실시예에서, 고정 포맷 문서에 대한 루트 태그의 하나가 <FixedPanel>이며, 페이지들은 <FixedPage> 태그를 사용하여 지정된다. 고정 페이지 내에, 몇가지 타입의 엘리먼트가 사용될 수 있다. 이들 엘리먼트에는 텍스트, 벡터 그래픽, 및 이미지가 있다. 폰트 및 공유 이미지 등의 외부 자원(external resource)이 지정된다. 텍스트에 사용되는 태그는 사용자에게 개별적인 문자 글리프(character glyph) 및 그 문자 글리프의 배치에 대한 정확한 제어를 제공한다. 부가의 태그는 사용자에게 텍스트, 벡터 그래픽, 및 이미지가 페이지 상에 어떻게 결합되는지에 대한 제어를 제공한다. xaml 파서는 고정 포맷 문서에 대한 태그를 인식한다. 임의의 다른 타입의 .xaml 파일에서와 같이, 파서는 태그와 관련된 CLR 네임스페이스 및 클래스를 결정하고, xaml 파일 내에서 그 태그에 대한 타입 변환기를 호출하여 고정 포맷 문서를 렌더링한다.
적응적 유동 문서는 소정의 페이지 크기를 갖지 않는다. 적응적 유동 문서 내의 텍스트, 이미지, DocumentElement, 및 다른 객체의 세트는 변동하는 페이지 폭에 적응하기 위해 그 페이지 상에서 움직일 수 있다, 즉 재배치될 수 있다. 예를 들어, 디스플레이 화면 상의 윈도우에 렌더링된 페이지는 사용되는 컴퓨팅 시스템 또는 사용자가 선호하는 바에 따라 다른 디스플레이 화면 상에서 다른 폭으로 될 수 있다. 인쇄된 페이지는 종이 크기에 따라 다른 폭을 갖게 된다. 예를 들어, 텍스트의 행(line)은 페이지 폭이 더 좁은 경우 그 길이가 더 짧게 되며, 그에 따라 텍스트는 부가의 단어들을 텍스트 행을 따라 순차적으로 그 페이지의 더 아래쪽 행으로 이동 또는 재배치하도록 해야 한다. 적응적 유동 문서의 외견에 대해 사용자가 선호하는 바를 지정하기 위해 속성이 사용된다.
xaml 파서는 이들 속성을 문서를 생성하기 위한 객체에 대한 CLR 타입 변환기로 전달한다. 객체는 페이지 미분할된(unpaginated) 또는 페이지 분할된(paginated) 프레젠테이션을 생성한다. 페이지 미분할된 프레젠테이션에서는 하나의 하단부없는 페이지(bottomless page)가 수직 스크롤바 등의 콘트롤의 도움으로 디스플레이 화면 상에 보여지게 한다. 페이지 분할된 프레젠테이션에서는 문서 내용을 페이지 높이에 기초하여 여러 세그먼트로 분할하고, 다음(next) 및 이전(previous) 버튼 등의 콘트롤의 도움으로 각 페이지를 디스플레이 화면 상에 보 여지게 개별적으로 나타낸다. 추가의 속성은 페이지 상에서의 단(column)의 폭 및 수, 모든 텍스트 요소의 크기, 텍스트 행 간격, 모든 이미지나 도형의 크기 및 위치, 그리고 여백(margin) 및 제본 여백(gutter)의 폭을 결정한다. 사용자는 또한 속성을 통해 문서를 생성하는 객체가 그 페이지 크기에 대한 최적의 가독성을 위해 단(column), 텍스트 크기 및 행 간격, 이미지 크기 및 배치, 여백 및 제본 여백, 그리고 다른 페이지 또는 텍스트 파라미터를 자동적으로 조정해야만 하는지 여부를 지정할 수 있다. xaml 파서는 적응적 유동 문서에 대한 태그를 파싱하고, 그 태그와 관련된 CLR 네임스페이스 및 클래스를 결정하며, 적응적 유동 문서를 렌더링하기 위해 xaml 파일 내에 지정된 객체들에 대한 타입 변환기를 호출한다.
본 발명의 원리들이 적용될 수 있는 많은 가능한 실시예를 살펴볼 때, 도면을 참조하여 본 명세서에 기술된 실시예가 단지 예시적인 것에 불과하며 본 발명의 범위를 한정하는 것으로 해석되어서는 안됨을 알아야 한다. 예를 들어, 당업자라면 소프트웨어로 도시되어 있는 예시된 실시예의 구성요소들이 하드웨어로 구현될 수 있고 그 역도 마찬가지이며, 예시된 실시예가 본 발명의 정신을 벗어나지 않고 구성 및 세부에 있어서 수정될 수 있음을 잘 알 것이다. 따라서, 본 명세서에 기술된 본 발명은 이하의 청구항 및 그의 균등물의 범위에 속할 수 있는 이러한 실시예 모두를 포괄한다.

Claims (49)

  1. 루트 태그를 갖는 확장가능 마크업 언어 파일(extensible markup language file)로부터 객체의 계층 구조를 결정하는 방법으로서,
    상기 루트 태그와 매핑 태그 중 하나에 있는 xmlns 속성으로부터, 적어도 하나의 어셈블리와 적어도 하나의 네임스페이스를 포함하는 리스트를 갖는 네임스페이스 정의 파일을 결정하는 단계와,
    상기 마크업 언어 파일 내의 각 태그에 대해,
    상기 태그의 이름을 상기 적어도 하나의 네임스페이스 내의 클래스에 매핑시키는 단계와,
    상기 태그가 속성을 가지고 있는 경우,
    상기 속성을 상기 클래스와 관련된 프로퍼티 및 이벤트 중 하나와 또하나의 클래스와 관련된 또하나의 프로퍼티 및 또하나의 이벤트 중 하나 중 어느 하나에 매핑시키는 단계를 포함하는 방법.
  2. 제1항에 있어서, 상기 클래스의 객체를 인스턴스화하는 단계를 더 포함하는 방법.
  3. 제1항에 있어서, 상기 태그의 이름을 상기 클래스에 매핑시키는 단계는 상기 적어도 하나의 네임스페이스에서 상기 태그의 이름을 검색하는 단계를 포함하는 방 법.
  4. 제1항에 있어서, 상기 태그의 이름을 상기 클래스에 매핑하는 단계는 상기 태그의 이름을 상기 클래스와 상기 프로퍼티 중 하나에 매핑시키는 단계를 포함하는 방법.
  5. 제1항에 있어서, 상기 속성은 속성 이름을 가지며,
    상기 속성을 상기 클래스와 관련된 프로퍼티 및 이벤트 중 하나에 매핑시키는 단계는,
    상기 클래스의 프로퍼티 부분(property section)에서 상기 속성 이름을 검색하는 단계, 및
    상기 속성 이름이 상기 클래스의 프로퍼티 부분에 없는 경우, 상기 클래스의 이벤트 부분(event section)에서 상기 속성 이름을 검색하는 단계를 포함하는 방법.
  6. 제1항에 있어서, 상기 태그의 이름이 마침표로 분리된 제1 부분(section)과 제2 부분을 갖는 경우,
    상기 태그를 속성으로서 식별하는 단계로서, 상기 제1 부분은 클래스 이름이고 상기 제2 부분은 속성과 이벤트 중 하나를 가리키는 속성 이름인 것인 식별 단계와,
    상기 적어도 하나의 네임스페이스에서 상기 클래스 이름을 검색하는 단계와,
    상기 적어도 하나의 네임스페이스에서 상기 클래스 이름의 프로퍼티 부분과 이벤트 부분 중 하나에 있는 상기 제2 부분을 검색하는 단계와,
    상기 태그의 문자열을 객체로 변환하고 상기 프로퍼터와 상기 이벤트 중 하나의 값을 설정하기 위해 타입 변환기를 호출하는 단계를 더 포함하는 방법.
  7. 제1항에 있어서, 상기 프로퍼티 및 상기 이벤트 중 상기 하나는 상기 프로퍼티이고,
    상기 속성이 텍스트 문자열인 경우, 설정되는 상기 프로퍼티에 대한 타입 변환기를 호출하는 단계와,
    상기 속성이 다른 태그인 경우,
    상기 다른 태그의 이름에 기초한 상기 클래스를 찾아내는 단계와,
    상기 다른 태그의 이름에 기초한 상기 클래스의 객체를 인스턴스화하는 단계와,
    상기 객체를 상기 태그에 대한 프로퍼티의 값으로서 설정하는 단계를 더 포함하는 방법.
  8. 제1항에 있어서, 상기 태그가 정의 태그인 경우, 상기 태그에 대한 사전 정의된 의미를 사용하는 단계를 더 포함하는 방법.
  9. 제8항에 있어서, 상기 태그에 대한 사전 정의된 의미를 사용하는 단계는 상기 태그가 코드 태그인 경우 프로그래밍 코드를 파싱하는 단계를 포함하는 방법.
  10. 제1항에 있어서, 상기 속성이 텍스트 문자열을 값으로서 갖는 복합 프로퍼티인 경우,
    상기 텍스트 문자열을 객체로 변환하기 위해 타입 변환기를 호출하는 단계와,
    상기 객체를 상기 프로퍼티의 값으로 설정하는 단계를 더 포함하는 방법.
  11. 제1항에 있어서, 상기 속성이 객체를 값으로서 갖는 복합 프로퍼티인 경우,
    상기 객체의 인스턴스를 생성하는 단계와,
    상기 객체를 상기 프로퍼티의 값으로 설정하는 단계를 더 포함하는 방법.
  12. 제1항에 있어서, 상기 클래스의 객체를 인스턴스화하는 단계와,
    상기 객체가 IApplyValue 인터페이스를 구현하는지를 알아보기 위해 상기 객체에 질의를 하는 단계와,
    상기 객체가 IApplyValue 인터페이스를 구현하는 경우, elementReference 및 BackgroundPropertyID를 값으로서 갖는 Object.ApplyValue를 호출하는 단계와,
    상기 객체가 IApplyValue 인터페이스를 지원하지 않는 경우, 속성의 프로퍼티를 상기 객체로 설정하는 단계를 더 포함하는 방법.
  13. 제1항에 있어서, 상기 클래스의 객체를 인스턴스화하는 단계와,
    상기 객체가 IliteralContent를 구현하는 경우, 상기 텍스트를 파싱하지 않고 상기 객체에 대한 태그 내의 내용을 상기 객체로 전달하는 단계를 더 포함하는 방법.
  14. 제1항에 있어서, 상기 xmlns 속성은 자원 디렉토리(resource directory)의 위치를 지정하는 링크를 가지며,
    상기 자원 디렉토리로부터 상기 네임스페이스 정의 파일을 페치하는 단계와,
    상기 네임스페이스 정의 파일을 로컬 저장하는 단계를 더 포함하는 것인 방법.
  15. 제1항에 있어서, 상기 루트 태그는 상기 확장가능 마크업 언어 파일이 고정 포맷 문서를 지정하는 파일임을 나타내는 태그이며,
    상기 적어도 하나의 네임스페이스 내의 클래스를 사용하여 고정 포맷 문서를 생성하는 단계를 더 포함하는 방법.
  16. 제15항에 있어서, 상기 고정 포맷 문서를 생성하는 단계는 적어도 하나의 고정 페이지(fixed page)를 인스턴스화하는 단계를 포함하며,
    상기 적어도 하나의 고정 페이지는 텍스트 엘리먼트, 벡터 그래픽 엘리먼트, 및 이미지 중 하나를 갖는 방법.
  17. 제1항에 있어서, 상기 루트 태그는 상기 확장가능 마크업 언어 파일이 적응적 유동 문서를 지정하는 파일임을 나타내는 태그이고,
    상기 적어도 하나의 네임스페이스 내의 클래스에 매핑되는 태그를 사용하여 적응적 유동 문서를 지정하는 단계를 더 포함하는 방법.
  18. 제17항에 있어서, 상기 적응적 유동 문서를 지정하는 단계는 텍스트 크기 및 배치(text size and positioning) 프로퍼티, 단의 세기(strength of the column) 프로퍼티, 디스플레이 프로퍼티, 강조(emphasis) 프로퍼티, 및 소스(source) 프로퍼티 중 적어도 하나와 관련된 속성을 갖는 태그를 지정하는 단계를 포함하는 방법.
  19. 제1항에 있어서, 상기 루트 태그는 상기 확장가능 마크업 언어 파일이 사용자 인터페이스를 지정하는 파일임을 나타내는 태그이고,
    상기 적어도 하나의 네임스페이스에 있는 클래스를 사용하여 상기 사용자 인터페이스를 생성하는 단계를 더 포함하는 방법.
  20. 마크업 언어 데이터 구조를 저장하고 있는 컴퓨터 판독가능 매체로서,
    프로그래밍 언어 클래스에 매핑되는 데이터가 들어 있는 제1 필드와,
    상기 클래스 내의 프로퍼티와 이벤트 중 하나에 매핑되는 데이터가 들어 있는 제2 데이터 필드를 포함하는 컴퓨터 판독 가능 매체.
  21. 제20항에 있어서, 상기 제1 필드 및 상기 제2 필드를 해석하기 위해 적어도 하나의 어셈블리 및 적어도 하나의 네임스페이스를 갖는 정의 파일을 검색하기 위한 URI(uniform resource locator)를 나타내는 데이터가 들어 있는 제3 필드를 더 포함하는 컴퓨터 판독 가능 매체.
  22. 제20항에 있어서, 상기 제2 데이터 필드가 * 문자를 갖는 경우, 상기 데이터 구조의 프로세스 동안 상기 제2 데이터 필드는 새로 인스턴스화된 객체와 기존의 참조된 객체 중 하나와 같은 값으로 설정되는 컴퓨터 판독 가능 매체.
  23. 제20항에 있어서, 상기 제2 데이터 필드는 복합 프로퍼티를 저장하고 있으며,
    상기 제2 데이터 필드의 처리 시에, 상기 제2 필드가 텍스트 문자열인 경우 타입 변환기가 호출되는 컴퓨터 판독 가능 매체.
  24. 제23항에 있어서, 상기 제2 데이터 필드의 처리 시에, 상기 제2 필드가 다른 태그인 경우, 상기 다른 태그의 이름에 기초한 클래스가 탐색되고, 상기 다른 태그의 이름에 기초한 클래스의 객체가 인스턴스화되며, 상기 객체가 상기 태그에 대한 프로퍼티의 값으로서 설정되는 컴퓨터 판독 가능 매체.
  25. 루트 태그를 갖는 확장가능 마크업 언어 파일로부터 객체의 계층 구조를 결정하기 위한 컴퓨터 실행 가능 명령어를 갖는 컴퓨터 판독 가능 매체로서,
    상기 컴퓨터 실행 가능 명령어는,
    상기 루트 태그와 매핑 태그 중 하나에 있는 xmlns 속성으로부터, 적어도 하나의 어셈블리와 적어도 하나의 네임스페이스를 포함하는 리스트를 갖는 네임스페이스 정의 파일을 결정하는 단계와,
    상기 마크업 언어 파일 내의 각 태그에 대해,
    상기 태그의 이름을 상기 적어도 하나의 네임스페이스 내의 클래스에 매핑시키는 단계와,
    상기 태그가 속성을 가지고 있는 경우,
    상기 속성을 상기 클래스와 관련된 프로퍼티 및 이벤트 중 하나와 또하나의 클래스와 관련된 또하나의 프로퍼티 및 또하나의 이벤트 중 하나 중 어느 하나에 매핑시키는 단계를 수행하는 컴퓨터 판독 가능 매체.
  26. 제25항에 있어서, 상기 클래스의 객체를 인스턴스화하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독가능 매체.
  27. 제25항에 있어서, 상기 태그의 이름을 상기 클래스에 매핑시키는 단계는 상 기 적어도 하나의 네임스페이스에서 상기 태그의 이름을 검색하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  28. 제25항에 있어서, 상기 태그의 이름을 상기 클래스에 매핑시키는 단계는 상기 태그의 이름을 상기 클래스와 상기 프로퍼티 중 하나에 매핑시키는 단계를 포함하는 컴퓨터 판독 가능 매체.
  29. 제25항에 있어서, 상기 속성은 속성 이름을 가지며,
    상기 속성을 상기 클래스와 관련된 프로퍼티 및 이벤트 중 하나에 매핑시키는 단계는,
    상기 클래스의 프로퍼티 부분(property section)에서 상기 속성 이름을 검색하는 단계, 및
    상기 속성 이름이 상기 클래스의 프로퍼티 부분에 없는 경우, 상기 클래스의 이벤트 부분(event section)에서 상기 속성 이름을 검색하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  30. 제25항에 있어서, 상기 태그의 이름이 마침표로 분리된 제1 부분(section)과 제2 부분을 갖는 경우,
    상기 태그를 속성으로서 식별하는 단계로서, 상기 제1 부분은 클래스 이름이고 상기 제2 부분은 속성과 이벤트 중 하나를 가리키는 속성 이름인 것인 식별 단 계와,
    상기 적어도 하나의 네임스페이스에서 상기 클래스 이름을 검색하는 단계와,
    상기 적어도 하나의 네임스페이스에서 상기 클래스 이름의 프로퍼티 부분과 이벤트 부분 중 하나에 있는 상기 제2 부분을 검색하는 단계와,
    상기 태그의 문자열을 객체로 변환하고 상기 프로퍼터와 상기 이벤트 중 하나의 값을 설정하기 위해 타입 변환기를 호출하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  31. 제25항에 있어서, 상기 프로퍼티 및 상기 이벤트 중 하나는 상기 프로퍼티이고,
    상기 컴퓨터 판독 가능 매체는,
    상기 속성이 텍스트 문자열인 경우, 설정되는 상기 프로퍼티에 대한 타입 변환기를 호출하는 단계와,
    상기 속성이 다른 태그인 경우,
    상기 다른 태그의 이름에 기초한 상기 클래스를 찾아내는 단계와,
    상기 다른 태그의 이름에 기초한 상기 클래스의 객체를 인스턴스화하는 단계와,
    상기 객체를 상기 태그에 대한 프로퍼티의 값으로서 설정하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  32. 제25항에 있어서, 상기 태그가 정의 태그인 경우, 상기 태그에 대한 사전 정의된 의미를 사용하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  33. 제32항에 있어서, 상기 태그에 대한 사전 정의된 의미를 사용하는 상기 단계는 상기 태그가 코드 태그인 경우 프로그래밍 코드를 파싱하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  34. 제25항에 있어서, 상기 속성이 텍스트 문자열을 값으로서 갖는 복합 프로퍼티인 경우,
    상기 텍스트 문자열을 객체로 변환하기 위해 타입 변환기를 호출하는 단계와,
    상기 객체를 상기 프로퍼티의 값으로 설정하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  35. 제25항에 있어서, 상기 속성이 객체를 값으로서 갖는 복합 프로퍼티인 경우,
    상기 객체의 인스턴스를 생성하는 단계와,
    상기 객체를 상기 프로퍼티의 값으로 설정하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  36. 제25항에 있어서, 상기 클래스의 객체를 인스턴스화하는 단계와,
    상기 객체가 IApplyValue 인터페이스를 구현하는지를 알아보기 위해 상기 객체에 질의를 하는 단계와,
    상기 객체가 IApplyValue 인터페이스를 구현하는 경우, elementReference 및 BackgroundPropertyID를 값으로서 갖는 Object.ApplyValue를 호출하는 단계와,
    상기 객체가 IApplyValue 인터페이스를 지원하지 않는 경우, 속성의 프로퍼티를 상기 객체로 설정하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  37. 제25항에 있어서, 상기 클래스의 객체를 인스턴스화하는 단계와,
    상기 객체가 IliteralContent를 구현하는 경우, 상기 텍스트를 파싱하지 않고 상기 객체에 대한 태그 내의 내용을 상기 객체로 전달하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  38. 제25항에 있어서, 상기 xmlns 속성은 자원 디렉토리(resource directory)의 위치를 지정하는 링크를 가지며,
    상기 자원 디렉토리로부터 상기 네임스페이스 정의 파일을 페치하는 단계와,
    상기 네임스페이스 정의 파일을 로컬 저장하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  39. 제25항에 있어서, 상기 루트 태그는 상기 확장가능 마크업 언어 파일이 고정 포맷 문서를 지정하는 파일임을 나타내는 태그이며,
    상기 적어도 하나의 네임스페이스 내의 클래스를 사용하여 고정 포맷 문서를 생성하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  40. 제39항에 있어서, 상기 고정 포맷 문서를 생성하는 단계는 적어도 하나의 고정 페이지(fixed page)를 인스턴스화하는 단계를 포함하며,
    상기 적어도 하나의 고정 페이지는 텍스트 엘리먼트, 벡터 그래픽 엘리먼트, 및 이미지 중 하나를 갖는 컴퓨터 판독 가능 매체.
  41. 제25항에 있어서, 상기 루트 태그는 상기 확장가능 마크업 언어 파일이 적응적 유동 문서를 지정하는 파일임을 나타내는 태그이고,
    상기 적어도 하나의 네임스페이스 내의 클래스에 매핑되는 태그를 사용하여 적응적 유동 문서를 지정하는 단계를 수행하는 컴퓨터 실행 가능 명령어를 더 포함하는 컴퓨터 판독 가능 매체.
  42. 제41항에 있어서, 상기 적응적 유동 문서를 지정하는 단계는 텍스트 크기, 텍스트 행 간격, 이미지 크기, 이미지 배치, 여백, 제본 여백, 및 단의 폭과 수 중 적어도 하나와 관련된 속성을 갖는 태그를 지정하는 단계를 포함하는 컴퓨터 판독 가능 매체.
  43. 객체를 선언적으로 정의하는 방법으로서,
    적어도 하나의 네임스페이스를 갖는 정의 파일의 위치에 대한 URL(uniform resource locator)을 루트 태그 및 매핑 태그 중 하나에 있는 xmlns 속성에 매핑시키는 단계와,
    태그 이름을 상기 적어도 하나의 네임스페이스에 있는 클래스 이름으로 설정하는 단계와,
    상기 객체가 프로퍼티 설정을 갖는 경우, 상기 태그의 속성을 프로퍼티 이름으로 설정하는 단계를 포함하는 방법.
  44. 제43항에 있어서, 상기 객체가 정의된 이벤트를 갖는 경우, 상기 태그의 상기 속성을 이벤트 이름으로 설정하는 단계를 더 포함하는 방법.
  45. 제43항에 있어서, 프로그래밍 코드 중 하나를 페이지 및 자원에 부가하도록 정의 태그를 정의하는 단계를 더 포함하는 방법.
  46. 제45항에 있어서, 상기 프로그래밍 코드 중 하나를 페이지 및 자원에 부가하도록 정의 태그를 정의하는 단계는 상기 프로그래밍 코드를 상기 페이지에 부가하도록 def:Code 엘리먼트를 설정하는 단계를 포함하는 방법.
  47. 제43항에 있어서, 클래스와 관련되지 않은 속성을 부가하도록 정의 태그를 정의하는 단계를 더 포함하는 방법.
  48. 제47항에 있어서, 상기 클래스와 관련되지 않은 속성을 부가하도록 정의 태그를 정의하는 단계는 코드를 컴파일하는 데 사용되는 언어를 지정하도록 def:Language 속성을 설정하는 단계를 포함하는 방법.
  49. 제43항에 있어서, 속성을 마침표로 분리된 제1 부분과 제2 부분으로 표현하는 단계를 더 포함하며,
    상기 제1 부분은 상기 프로퍼티와 이벤트 중 어느 하나가 정의되어 있는 클래스에 대응하는 클래스 이름으로 설정되고,
    상기 제2 부분은 상기 프로퍼티와 상기 이벤트 중 상기 어느 하나의 이름으로 설정되는 방법.
KR1020047007470A 2003-05-16 2003-05-16 Clr 객체의 계층 구조 결정 방법, 컴퓨터 판독가능 매체, 객체를 선언적으로 정의하는 방법, clr 객체의 계층 구조 결정 메카니즘, 및 clr 객체를 선언적으로 정의하는 장치 KR101292982B1 (ko)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
PCT/US2003/015692 WO2004107195A1 (en) 2003-05-16 2003-05-16 Declarative mechanism for defining a hierarchy of objects

Publications (2)

Publication Number Publication Date
KR20060061733A true KR20060061733A (ko) 2006-06-08
KR101292982B1 KR101292982B1 (ko) 2013-08-02

Family

ID=33488770

Family Applications (1)

Application Number Title Priority Date Filing Date
KR1020047007470A KR101292982B1 (ko) 2003-05-16 2003-05-16 Clr 객체의 계층 구조 결정 방법, 컴퓨터 판독가능 매체, 객체를 선언적으로 정의하는 방법, clr 객체의 계층 구조 결정 메카니즘, 및 clr 객체를 선언적으로 정의하는 장치

Country Status (6)

Country Link
EP (1) EP1639482A4 (ko)
JP (1) JP2006526180A (ko)
KR (1) KR101292982B1 (ko)
CN (1) CN100338595C (ko)
AU (1) AU2003248534A1 (ko)
WO (1) WO2004107195A1 (ko)

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101489677B1 (ko) * 2014-02-04 2015-02-16 주식회사아이보우솔루션 웹 기반 생애 주기 관리 시스템을 구축하기 위한 동적 어플리케이션 개발 서비스 제공 방법

Families Citing this family (7)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN100456785C (zh) * 2006-03-21 2009-01-28 梁铁柱 用手机或小灵通发送姓名短信获取艺术签名设计的系统与方法
US8370399B2 (en) * 2006-12-04 2013-02-05 Microsoft Corporation Building, viewing, and manipulating schema sets
US8099370B2 (en) 2007-04-03 2012-01-17 Microsoft Corporation System for financial documentation conversion
US9363258B2 (en) * 2007-12-17 2016-06-07 International Business Machines Corporation Secure digital signature system
US9294705B2 (en) * 2008-06-27 2016-03-22 Universal Electronics Inc. System and method for ubiquitous appliance control
CN102004722B (zh) * 2010-10-19 2013-08-21 北京红旗中文贰仟软件技术有限公司 信息文档的处理方法及装置
US8433697B2 (en) * 2011-09-10 2013-04-30 Microsoft Corporation Flexible metadata composition

Family Cites Families (8)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US6083276A (en) 1998-06-11 2000-07-04 Corel, Inc. Creating and configuring component-based applications using a text-based descriptive attribute grammar
US6366934B1 (en) * 1998-10-08 2002-04-02 International Business Machines Corporation Method and apparatus for querying structured documents using a database extender
US6366943B1 (en) * 1999-03-31 2002-04-02 Brian Martin Clinton Adder circuit with the ability to detect zero when rounding
US6516322B1 (en) * 2000-04-28 2003-02-04 Microsoft Corporation XML-based representation of mobile process calculi
US6990653B1 (en) * 2000-05-18 2006-01-24 Microsoft Corporation Server-side code generation from a dynamic web page content file
US6853997B2 (en) 2000-06-29 2005-02-08 Infoglide Corporation System and method for sharing, mapping, transforming data between relational and hierarchical databases
AU2001294555A1 (en) * 2000-09-14 2002-03-26 Bea Systems Inc. Xml-based graphical user interface application development toolkit
EP1260911A1 (fr) * 2001-04-27 2002-11-27 Koninklijke Philips Electronics N.V. Structure de données interne pour application destinée à s'interfacer avec une interface pour un document de type HTML ou XML

Cited By (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
KR101489677B1 (ko) * 2014-02-04 2015-02-16 주식회사아이보우솔루션 웹 기반 생애 주기 관리 시스템을 구축하기 위한 동적 어플리케이션 개발 서비스 제공 방법

Also Published As

Publication number Publication date
WO2004107195A1 (en) 2004-12-09
JP2006526180A (ja) 2006-11-16
CN1615476A (zh) 2005-05-11
EP1639482A1 (en) 2006-03-29
KR101292982B1 (ko) 2013-08-02
EP1639482A4 (en) 2009-10-28
AU2003248534A1 (en) 2005-01-21
CN100338595C (zh) 2007-09-19

Similar Documents

Publication Publication Date Title
US7331014B2 (en) Declarative mechanism for defining a hierarchy of objects
US7178101B2 (en) Content template system
US7577938B2 (en) Data association
US20040046789A1 (en) Extensible user interface (XUI) framework and development environment
KR101031700B1 (ko) 컴퓨터 플랫폼에 대한 프로그래밍 인터페이스
KR101099272B1 (ko) 외부 프로그램 테마를 사용하는 웹페이지 렌더링을 위한 테마 적용 방법
US7496828B2 (en) Method and system for mapping tags to classes using namespaces
US20050188350A1 (en) Data binding
TWI394051B (zh) 網頁呈現優先次序機制
US8413070B1 (en) Declarative resizeable list in electronic form
US20050091672A1 (en) Facilitating presentation functionality through a programming interface media namespace
US10061575B2 (en) Managed execution environment for software application interfacing
US20050081162A1 (en) Binary cache file format for themeing the visual appearance of a computer system
US20060036943A1 (en) Method and system for selectively enforcing presentation themes
CA2414053A1 (en) System and method for manipulating a document object model
US7000185B1 (en) Method and system for customization of a program
Wadge et al. Intensional html
US20060265359A1 (en) Flexible data-bound user interfaces
KR101292982B1 (ko) Clr 객체의 계층 구조 결정 방법, 컴퓨터 판독가능 매체, 객체를 선언적으로 정의하는 방법, clr 객체의 계층 구조 결정 메카니즘, 및 clr 객체를 선언적으로 정의하는 장치
US20100269032A1 (en) Advanced text completion, such as for markup languages
US8225217B2 (en) Method and system for displaying information on a user interface
US20050268233A1 (en) System and method for mixed language editing
Nebeling et al. XCML: providing context-aware language extensions for the specification of multi-device web applications
JP4988797B2 (ja) オブジェクトを作成するための方法およびプログラム
JP2004529427A (ja) メタタグ情報を用いる拡張可能スタイルシートのデザイン

Legal Events

Date Code Title Description
A201 Request for examination
AMND Amendment
E902 Notification of reason for refusal
AMND Amendment
E601 Decision to refuse application
J201 Request for trial against refusal decision
AMND Amendment
B601 Maintenance of original decision after re-examination before a trial
J301 Trial decision

Free format text: TRIAL DECISION FOR APPEAL AGAINST DECISION TO DECLINE REFUSAL REQUESTED 20101129

Effective date: 20121031

GRNT Written decision to grant
FPAY Annual fee payment

Payment date: 20170704

Year of fee payment: 5

FPAY Annual fee payment

Payment date: 20180628

Year of fee payment: 6